Jonneh

Members
  • Content Count

    513
  • Joined

  • Last visited

Everything posted by Jonneh

  1. Online Map Viewer

    The newer version doesn't use RMI any more, it needs access to the map and database files. You could do it across separate machines by setting up the server directory as a shared folder on the windows machine then using something like samba on the linux machine to access that and point the map viewer to the shared directory. It'd probably run a bit slower as it would need to copy a couple hundered megabytes of data across the network each time you update the map. Alternatively you could run it on the windows machine then have some automated way of uploading the generated map to the linux machine over (s)ftp.
  2. Online Map Viewer

    You need to re-run the program every time you want to update the map. You can use some kind of task scheduling software such as cron to do this automatically.
  3. Online Map Viewer

    Try removing all the files from the old version (the map.js, main.css, index.html etc) and running it again (it should automatically replace them with the new versions).
  4. Online Map Viewer

    Just released new version. This update has more accurate deed borders, shows bridges and attempts to reload sections that don't load properly. The setup procedure and config file have changed considerably so you'll need to set everything up again (also paths also no longer need slashes to be escaped in the config file).
  5. Online Map Viewer

    If the directory definitely exists it's most likely a permissions problem. Try changing the permission on the directory with the command 'chmod a+wr /var/www/pve/mapviewer/sections'.
  6. Wyvern

    Patch notes for Wyvern for 2016/02/04 * Update to latest Wurm Unlimited release. This brings the following changes: http://steamcommunity.com/games/366220/announcements/detail/652262930199883209 * Added rewards for voting for Wyvern on http://wurm-unlimited.com/. You can claim 10 copper coins for each vote at settlement tokens. * Added depth drill item, this allows you to measure how deep the rock layer is below the surface on tile corners. The depth drill can be created by using an iron ribbon on a shaft, along with two handles and a small nails.
  7. Server and client were just updated, this error is happening because the server you're connecting to hasn't been updated yet but your client has.
  8. Wyvern

    We've just updated to the latest version of the server, you should be able to connect with the latest client now.
  9. Wyvern

    Patch Notes for 2015/12/24 * The CA channel is now opt-out instead of opt-in, which should help new players. * Santa Claus has arrived and brings players a (cosmetic) gift. Find him at the spawn towns on each server. (A client bug does mean his texture is terrible, however. Not much we can do about this.) * There's also a Julbord at each of the spawn towns, so you can get 100% food, water and nutrition. * Santa Claus and the Julbord will stay for at least 2 weeks. The exact day on which they disappear will depend on reboot timings, so there may be a few extra days as well but we can't guarantee that.
  10. Just uploaded fixed version for this.
  11. Updated to new version, some small tweaks to generation and now has a GUI.
  12. Player eligibility for gifts is determined by the 'reimbursed' field in the players table in database, just set that value to false for every player and they'll be able to collect the gift. The item given is hardcoded and determined by the auxdata on the gift item, see awardChristmasPresent in ItemBehaviour.
  13. And then a few seconds later after logging in: [22:42:08] 94 players on this server. (100 totally in Wurm)
  14. Latest release: Requires Java 8. The map and a render of the surface will be saved to a map_<seed> directory in the same location as terraingen.jar. Features: Mountains (smooth & ridged) Rivers/lakes Deserts/tundra/steppe Clay/peat/moss Tar pits Flowers Regional forests Regional ores Fairly uniform iron distribution Example maps: http://i.imgur.com/ccAuJNz.png http://i.imgur.com/LjFSJJ6.png http://i.imgur.com/igm0ozW.png Source code: https://github.com/jonathanedgecombe/wu-terrain-gen
  15. Online Map Viewer

    It won't work with anything that modifies the existing RMI interface, not much I can do about that :/ Edit: Actually you *might* be able to get it working by also replacing the WebInterface class in mapviewer.jar with the modified one as well, as long as it hasn't changed the methods for retrieving deed info.
  16. Online Map Viewer

    Just updated, latest version should now work with the new changes to RMI.
  17. I've been working on a minimap mod recently, here's a screenshot of how it looks: http://i.imgur.com/YXPmKrC.png Unfortunately it's not quite ready for release yet, as it's written for an API I've been working on with Graham which still needs a lot of polishing before we release it.
  18. The checkForGrassGrowth in TilePoller has a problem if grass grows and a new flowerType of null is generated in the same call, causing a null pointer exception. Can be fixed by changing the flower growth part to FlowerType newFlowerType = Terraforming.getRandomFlower(flowerType, false); if(andFlowers && createFlowers && newFlowerType != null) { flowerType = newFlowerType; dataHasChanged = true; } Stack trace Nov 23, 2015 12:42:35 AM com.wurmonline.server.Server run SEVERE: null java.lang.NullPointerException at com.wurmonline.mesh.GrassData.encodeGrassTileData(GrassData.java:572) at com.wurmonline.server.zones.TilePoller.checkForGrassGrowth(TilePoller.java:763) at com.wurmonline.server.zones.TilePoller.checkEffects(TilePoller.java:400) at com.wurmonline.server.zones.TilePoller.pollNextTile(TilePoller.java:235) at com.wurmonline.server.zones.TilePoller.pollNext(TilePoller.java:165) at com.wurmonline.server.Server.run(Server.java:1709) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505)
  19. In the getChampionsFromKingdom method in the Players class, the select statement is called incorrectly. The ps.setLong(2, System.currentTimeMillis()) call is causing the issue, as the SQL query only has one parameter. Stack trace: WARNING: Array index out of bounds while polling an action Jonneh due to 1 java.lang.ArrayIndexOutOfBoundsException: 1 at org.sqlite.core.CorePreparedStatement.batch(CorePreparedStatement.java:110) at org.sqlite.jdbc3.JDBC3PreparedStatement.setLong(JDBC3PreparedStatement.java:298) at com.wurmonline.server.Players.getChampionsFromKingdom(Players.java:2901) at com.wurmonline.server.behaviours.Methods.sendRealDeathQuestion(Methods.java:329) at com.wurmonline.server.behaviours.HugeAltarBehaviour.action(HugeAltarBehaviour.java:357) at com.wurmonline.server.behaviours.HugeAltarBehaviour.action(HugeAltarBehaviour.java:423) at com.wurmonline.server.behaviours.Action.poll(Action.java:3226) at com.wurmonline.server.behaviours.ActionStack.poll(ActionStack.java:237) at com.wurmonline.server.players.Player.pollActions(Player.java:8901) at com.wurmonline.server.Players.pollPlayers(Players.java:4302) at com.wurmonline.server.Server.run(Server.java:1722) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505)
  20. By any chance do you have trees at the edge of the map (within 1-2 tiles)? Looking at the code for that method that seems to be what could cause the issue.
  21. It's just a run once program that modifies the map, doesn't need to be added to anything, although you'll need to shut down the server while you swap out the map files. Needs to be run from command line (or a batch/shell script) like 'java -jar flowerspawner.jar top_layer.map top_layer_flowers.map 25'. You'll need to either have the top_layer.map in the same directory as the flowerspawner.jar or specify the entire path.
  22. As promised earlier, here's a simple Java program to add flowers to an existing map: http://wyverngame.com/flowerspawner.jar Needs to be run with 3 arguments: original top_layer.map path, new top_layer.map path and percent chance for flowers on each grass tile (this can be floating point) If it works properly, the output should be something similar to this >$ java -jar flowerspawner.jar top_layer.map top_layer_flowers.map 25 Creating flowers on existing grass with ~25% chance Loaded 'top_layer.map' with size 4096 0% 3% ... 93% 96% Finished, written to 'top_layer_flowers.map' Keep a backup of the original top_layer.map just in case anything goes wrong. Here's the code if anyone wants to mess around with the flower type chances etc: http://pastie.org/pastes/10557593/text?key=psyvgrhs7epdjmsjt9teta
  23. Just took a look at the code for naturally spawning flowers, and came across this gem: http://pastie.org/private/2hxponyzyzpwiiqvvsqq Whoever wrote that code either doesn't understand or forgot how Java passes references, but either way that's why there are no natural flower spawns. Edit: I gave someone a script that adds flowers to existing maps, I'll clean it up a little bit and post soon.
  24. JSON RMI API

    This is a tool that provides a much nicer way of interfacing with RMI methods on the server. It runs as a HTTP server which provides responses in JSON format. Releases: https://github.com/jonathanedgecombe/wu-json-rmi-api/releases License: https://github.com/jonathanedgecombe/wu-json-rmi-api/blob/master/license.md Setting up There is an example config.json file provided in the git repository. A copy of this should be made, edited (and renamed to config.json) and placed in the same directory that you are running the API from. Ideally this should be run locally, given the security issues of exposing the RMI ports to external access. You will need to set the USE_INCOMING_RMI setting to true in the wurm.ini file for the WU server you are targetting. After that simply run it with the command java -jar rmi-api.jar. You may need to run it with elevated privileges to bind to certain ports. Currently the API must be restarted on server restarts, however I plan to resolve this in a future release. rmiHost The host name of the server to connect to the RMI interface of. If you're running the API locally, this should be set to a loopback address. rmiPort The port the RMI registry for the server is listening on. The default port is 7220. rmiPassword The password used for the servers RMI interface. apiPort The port that the API HTTP server will listen on. apiPassword A password used in requests to the API. If this setting is left as an empty string then the password parameter can be omitted from requests, however this will leave the server wide open from a security standpoint unless the port the API is listening on is firewalled off. Example request and response Request: http://127.0.0.1:8080/getPlayerId?name=Jonneh Response: { "playerId": 19710976 } API Reference As this project is still a work in progress, there are still many methods that are not implemented yet. As I continue to implement more I will update this post. /broadcastMessage Broadcasts a given message to the event tab for all players on the server. Parameters message - The message to broadcast. Example response { "success": true } /getBattleRanks Gets the battle ranks for the top players. Parameters limit - The limit of players to retrieve the battle ranks of. Defaults to 10 if not present. Example response { "ranks": { "Jonneh": 1000, "Graham": 1000 } } /getBodyItems Gets the equipment for the given player. Parameters id - The ID for the player to retrieve the equipment of. See /getPlayerId. Example response { "items": [ { "parentId": 10092096531, "details": { "sizeX": 5, "sizeY": 30, "sizeZ": 60, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "Jonneh", "creationDate": "12:50:34 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "", "material": "birchwood", "id": 102511723522, "name": "shield", "quality": 50.0, "damage": 0.0 } }, { "parentId": 10092094995, "details": { "sizeX": 1, "sizeY": 4, "sizeZ": 75, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "Jonneh", "creationDate": "12:50:34 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "", "material": "iron", "id": 102528500738, "name": "short sword", "quality": 50.0, "damage": 0.0 } } ] } /getDeedList Gets a list of all deeds on the server. Parameters detailed - If set to false only the deed ID and name will be retrieved. If set to true then the motto, kingdom, size (in the X direction), founder, mayor, # of citizens, # of allies, # of guards and location will also be retrieved. Defaults to false if not present. Example response { "deeds": [ { "motto": "A settlement like no other.", "kingdom": "Freedom Isles", "size": 5, "founder": "Jonneh", "mayor": "Jonneh", "citizens": 1, "allies": 0, "guards": 0, "posX": 942, "posY": 2752, "id": 1, "name": "Newtown" } ] } /getFriends Gets a list of friends for the given player. Parameters id - The ID for the player to retrieve the friends list of. See /getPlayerId. Example response { "friends": { "Jonneh": 19710976, "Graham": 20032411 } } /getInventory Gets the inventory for the given player. Parameters id - The ID for the player to retrieve the inventory of. See /getPlayerId. detailed - If set to false only the item name, quality and damage will be present. If set to true then the size, position, owner (as a player ID), creator (as a player name), creationDate, description (renamed name) and material will also be retrieved. Example response { "items": [ { "sizeX": 1, "sizeY": 1, "sizeZ": 1, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "", "creationDate": "14:33:19 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "", "material": "crystal", "id": 510365844482, "name": "emerald", "quality": 50.0, "damage": 0.0 }, { "sizeX": 3, "sizeY": 10, "sizeZ": 60, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "", "creationDate": "12:33:19 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "", "material": "birchwood", "id": 102494946306, "name": "hatchet", "quality": 10.0, "damage": 0.0 }, { "sizeX": 1, "sizeY": 1, "sizeZ": 1, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "", "creationDate": "12:33:19 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "Newtown", "material": "birchwood", "id": 102746604546, "name": "Settlement deed", "quality": 10.0, "damage": 0.0 } ] } /getItemSummary Get detailed information about an item. Parameters id - The ID for the item to retrieve information of. Example response { "item": { "sizeX": 1, "sizeY": 1, "sizeZ": 1, "owner": 19710976, "posX": 942, "posY": 2752, "creator": "", "creationDate": "20:47:58 on Luck day in week 2 of the starfall of the Digging in the year of 980.", "description": "", "material": "vegetarian", "id": 1189507548162, "name": "bouquet of greenish-yellow flowers", "quality": 1.0, "damage": 10.02768 } } /getPlayerCount Gets the number of players currently logged in. Example response { "playerCount": 17 } /getPlayerId Gets the ID for a player with the given name. Parameters name - The name for the player to retrieve the ID of. Example response { "playerId": 19710976 } /getPlayerMoney Retrieves the quantity of money the given player has in their bank. The quantity is given in iron coins. Parameters name - The name for the player to retrieve the money of. Example response { "money": 10000000 } /getPlayerPower Retrieves the power level for the given player. Parameters id - The ID for the player to retrieve the power level of. See /getPlayerId. Example response { "power": 5 } /getPremiumPlayerCount Gets the number of premium player currently logged in on the server. Example response { "playerCount": 5 } /getServerStatus Gets the current server status. Example response { "status": "Up and running." } /getSkillList Retrieves a list of available skills on the server. Example response { "skills": [ { "id": 1024, "name": "Healing" }, { "id": 1, "name": "Body" }, { "id": 1025, "name": "Clubs" }, { "id": 2, "name": "Mind" }, { "id": 1026, "name": "Religion" }, { "id": 3, "name": "Soul" }, etc... ] } /getSkills Retrieves the skill levels for the given player. Parameters id - The ID for the player to retrieve the skills of. See /getPlayerId. Example response { "skills": { "Large axe": 1.0, "Staff": 1.0, "Prospecting": 1.0, "Shield smithing": 1.0, "Ballistae": 1.0, "Mining": 9.173884, "Traps": 1.0, "Carpentry": 1.0, "Hatchet": 1.0, "Animal taming": 1.0, "Body stamina": 99.00001, etc... } } /getTestMessage Retrieves a test message from the server. Example response { "message": "HEj! 1447045549224" } /isServerRunning Retrieves the running status of the server. Example response { "running": true }