• Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by joedobo

  1. I'd suggest making an actual model.dae (collada) and then ask in the modding forum how you would go about getting it into the game.
  2. I don't trust WO to prevent unique creatures from bashing into my deed. (imo, they should be able to bash out of a deed and never spawn on a deed) And thus, I'm looking for suggestions on securing animals. The only one I can come up with is hitching all horses to vehicles. But Hell horses won't stay hitched to a vehicle. Some animals can't be hitched at all. For me I have a greenish brown bear and some hell horses I'm not sure how to protect. Thanks for your ideas in advance.
  3. WU vanilla code is very lacking when it comes to java docs. If you askin specific question in modding Discord (or here too) we can probably help advise on what method(s) would be best to get object xyz.
  4. Make a method in your mod that does what you want and it can be written with Java. You'll likely only have access to the MyTile object. Although, there are static methods in WU that let you look up information for a tile or volatile zone. Then use Javassist expression editor to replace the return value from the wurm method with the return value from your new method. Javassist page has a tutorial on this. You could use bytecode to change it also but that isn't the easists approach.
  5. Java mainly. You can make some mods with Javascript and the script runner tool in ago's server mod launcher. One area that seems to be different with WU modding is using bytecode to make edits to Java Virtual Machine (JVM). A lot of mods tend to avoid the bytecode path as it is full of pitfalls. But it's also very versatile in that you can do anything with it. To keep things simple I'd stick with with JavaScript via script-runner. Using Java reflection to change various things about vanilla is good. And Java + the action-performer/behaviour-provider in modlauncher is also good.
  6. Client helper mod

    Is it possible to add a fishing macro for the new system? I've been looking into a ways to reimplement the keybind and wait play style. 1. Send fishing comand. 2. choose a location that is at max rod cast distance and directly in front of where the player is facing. Cast the line out to this location. 3. Wait for the fish to bite and auto pull it in. Execute all three of those with a single keybind.
  7. Hopefully I've got enough checks in here to stop tower griefing. Here's the two I hope will work best to protect player's deeded zoos. Thanks for the tip@Mthec // NO attacking creatures that aren't threats. if ( .noneMatch(longId -> longId == target.getWurmId())) { communicator.getPlayer().getCommunicator().sendNormalServerMessage( "Ghosts won't attack a creature that isn't currently or hasn't recently threatened you."); return MessagePolicy.PASS; } // No village permission to attack on deed. @Nullable Village occupiedVillage = Villages.getVillage(target.getTileX(), target.getTileY(), target.isOnSurface()); if (occupiedVillage != null && (!occupiedVillage.isActionAllowed((short)326, player) || !occupiedVillage.isActionAllowed((short)716, player))) { communicator.getPlayer().getCommunicator().sendNormalServerMessage( String.format("Ghosts refuse to help you because village %s has denied you attacking permission", occupiedVillage.getName())); } The others are here if your curious: Lastly, I'm have a sporadic issue with initializing Wurm classes (Creature, Player) in the javassist intended init() section. It's really weird so I'd like to somehow catch this when it happens and just just skip the mod. I'd rather have a warning in the log file and have modlauncher skip the mod then have it all crash. I'm not sure how difficult it is to do this.
  8. I'm surprised putting things in init doesn't cause a bunch of class frozen problems with javassist edits. Now, if you were careful and didn't use any WU classes it could work out. It's clearly setup that way in ago's creature demo and that has worked for some time.
  9. I'm make slow but steady progress with this. I fixed all the early loader problems by relocating code and using long wurmId's instead of wurm objects. Here are some new questions: 1. I'd like to run object clean up code to handle edge cases. Every 6 hours or so I want to check that the GhostTower objects have a matching Wurm item object and if that is lacking remove the tower. I can inject the needed code into say Item.poll() but I don't understand the polling frequency. And I need this to make a proper RNG roll that success about every 6 hours. 2. I foresee some doofus using these to grief people. I'm pretty sure they will attack other players at the moment. Also, it would be easy to build a tower next to a deed and kill all the animals on it. Currently I'm think about these limitations: Ghosts won't attack targets of the same kingdom as the player asking for help. No attacking hitched creatures. does branding make an animal of the same kingdom? things like branding, cared-for, tame, equipped-with-gear are all possible filters for blocking. Any other ideas? 3. Where do others put creature template creation? I put mine in onServerStarted() but that seem too late.
  10. One could make a new recipe that creates booze by simply cooking ingredients in a cooker. Although, that might be too fast. Along the lines of this fast, one could probably add a simple creation entry to make it. If we want to just speed up Wurm's booze production it's going to take a bunch of bytecode hacking as there is a lot of this kind of thing in pollDistilling and pollFermenting. They are RNG events tied in with polling frequency in order to achieve some desired overall distill or fermentation time. ////////////////////// //if (Server.rand.nextInt(20) == 0) { // this.pollFermenting(); //}
  11. I started to make a scriptrunner javascript mod for this (which is below in the code section) but I ran into a problem where it makes 3kg leathers. That is the standard weight for a leather. I can't figure out how to reduce the weight of the finished product using CreationEntryCreator.createSimpleEntry(). Note that setUseTemplateWeight() doesn't seem to do anything. One could make a custom action performer mod to do this but that is more then I wanted to do. var CreationEntryCreator =; var SkillList =; var ItemList =; var CreationCategories = var Logger =; var logger = Logger.getLogger("com.joedobo27.scriptRunnerMods.pelt-to-leather-creation"); function onServerStarted() { var creation = CreationEntryCreator.createSimpleEntry(SkillList.LEATHERWORKING, ItemList.lye, ItemList.pelt, ItemList.leather, true, true, 0.0, false, false, CreationCategories.RESOURCES); creation.setDepleteFromSource(200); creation.setDepleteFromTarget(200); creation.setUseTemplateWeight(true);"Pelts can be converted to leather with lye."); } If you want to use this save the code as a .js file and put it in the onServerStarted scriptrunner directory. It may look something like this: WU\WU-Server\mods\scriptrunner\scripts\onServerStarted
  12. This server mod (for use with Ago's server modlauncher) will add custom guard towers designed for PvE and especially folks who would like the option to not fight . The primary goal with these is to have simple towers not subjected to vanilla WU tower mechanics. My goal is to have few restriction over them. The server owner will be able to configure guard strength. This customed strength could be anything between not being able to kill a rat all the way to one hit killing a venerable red dragon. After asking for help within the tower's range a guard will be created right on top of the mob and immediately start attacking it. It's a ghost so they can just appear wherever, right? Source on GitHub: No releases at the moment as it's not ready. Although, the code is on github if you wanted to clone it and mess around. Requires I could use some help at this point (1/28/2019). #1) The onPlayerMessage() modloader hook so I can trigger events when players ask for help is loading WU bases classes too early and causing an error: java.lang.RuntimeException: com.wurmonline.server.players.Player class is frozen There is a bunch of these too: [07:25:23 AM] WARNING org.gotti.wurmunlimited.modloader.EarlyLoadingChecker: Mod GhostTowerGuardMod loaded server class com.wurmonline.server.creatures.Creature during phase load When I remove the PlayerMessageListener interface and its required methods the error goes away. #2) Also, I"m not sure if creature AI can be setup to destroy itself if its target no longer exists. I want to create a ghost, have it target and attack the mob. Once the target is dead have the ghost disappear and delete itself. I'm not asking you to do this. I just want to know how difficult it is before I start digging into it. I've never done anything with creature AI.
  13. Since when did we decided it was okay to make games less fun? If no one wants to use it, it should speak volumes as to how good the addition actually is. It's worth noting that I'm going to do exactly what the OP wants in WU with a mod.
  14. -1 on the system. I was going to commend why until I saw Retrograde going on and on. Rolf your making a mistake letting that person to do what he does.
  15. I keep seeing people mention fishing afk and I'd like to point out that is a terrible idea to do. I was fishing semi-afk once. I saw the macro question popup. I didn't answer it right away but did answer it about 15 minutes later. I got the question right. low and behold my priest Tarq was banned the next day for Macro. So be it, I don't like talking to GM's so I just moved on. But I'd like to point out its a terrable idea to think you can fish afk. You need to be able to respond the question right away or the GM's will ban you. btw, I'm not at all excited for this convoluted fishing system but lucky I'll just mod it out (or mod the old system back in) in WU.
  16. It works for me so it should as far as I know. I decided to switch to using a common library mod. Delete the "SimplePavingMod" folder inside the "mods" folder. Get the latest release and unpack it into the same folder as server.jar. Get jdbCommon and do the same thing.
  17. I got a tool now that might solve my old problem of bytecode breaking when WU updates. I hate updating lots of stuff. If it works I'll make this work again. But also want to wait until the new fishing thing is out. It might be okay, but generally I disagree with Tich's game design choices (she did the core of the fishing update) and want to change them so I'm guessing something will need to be changed with it.
  18. Keep in mind the maximums slope mounts and vehicles can pass. I've always treated this as a single slope must be less then 40 or the sum of a compound slope must be less then 40. There is an actual formula I believe. The optimal map would be where a significant portion of the map is pretty flat, next largest would be hilly where those hills don't prevent mounted/vehicle movement, and the last and smallest portion are supper steep mountains. Some water is good but water is pretty much wasted space in Wurm and I think it should be kept to a minimum. But if you like the look of that and are playing with few people space is very much a surplus.
  19. Anyone know if the the action method in ItemBehaviour would let use make this? With jug active, drag some water over to cooking container and the game would automatically move however much water is needed for the recipe. This would likely only work if you did water as the last step to eliminate possible alternative recipes.
  20. Before I only needed one priest, Paaweeler and now I will need three. All I care about is item enchanting. In my opnion, these changes completely fail at creating a reason to play a priest as a main for PvE.
  21. It's possible Wurm could let us convert without premium assuming our toon was a priest before premium time ran out. A toon in this state is a quasi priest. And many of the missing abilities are gone only because the code has special conditional logic to remove them if the toon isn't premium. If I was a business and I actually cared about my customers I'd let toons who where priest before but currently don't have premium be able to use the transfer.
  22. Mod conflicts mod

    In some cases listing modified methods may not help that much. This is because WU likes to use huge catchall-all complex methods. We do some some simple or single purpose methods (like we would expect in Java OOP). But there are also methods that are thousands of lines long with 10 levels deep of if-else logic. It's better then nothing if folks where to list modification. Where would we put such notes? and is there a better way then the author writing notes after every change?
  23. Will the faith transfer work for toons who don't currently have premium? I'm likely going to abandon all player gods and go back to the old way of having 3 alt priests, one for each WL god. Will there be a limited window on the free faith swap? Will we be able to transfer to lib freely from any other priest?
  24. Normal player enchanting uses the standard skill roll or power roll. We commonly hear about it when talking about mining. This code hardcaps the output roll at 100. The extra 3 or 4 points we see sometimes comes from SpellEffect.improvePower(). I wonder if I'm reading this right because it seems if you have say a 95 power it's impossible to make that be a 104 cast. To get the 103-ish casts you need to have a low power cast, say 10, and then get a 100 power on an improve cast. 5 * ( 1 - current power / 100), at 20 current that is 4 and at 95 current that is 0.25. meh but that isn't what where doing here. To make higher power casts possible for player's you'd want to make code for determining what enchant power to use. Leave the skill roll code alone and use your new enchant power number instead of the skill roll one WU tallies. At a brief glance it might work out well to use Javassist expression editor on the methods (there are multiple) and the target method should be doEffect() where you substitute the new power.
  25. Hopefully someone can confirm this. looking in Creature.breakout() it seems uniques always bash fences if one obstructs where it wants to go. I was hoping we could just toggle the isBreakFence field but I don't that is enough. Bytecode hacking that breakout method would likely work (I'm not volunteering to do any bytecode hackery). Oh, and don't read into the method's name too much. A better name might be bashObstrctingFence(). The current name implies it's used so uniques can escape something when it fact it just serves as a way for fence bashers to smash fences between them and a target.