Sign in to follow this  
Sklo:D

WU 1.8.0.3 - SteamID Table Problem

Recommended Posts

Currently the steamid of every player is stored in wurmplayer.db in the table STEAM_IDS.

On storing there is a bigger problem causing the table to grow extremly huge over time. There is a bug in the code where the steam id for every player is stored in a new row EACH login, which means one new row for every login, old rows are not deleted/updated as they should.

 

And then there is another problem, the table schema seems to be not set to auto-increment properly or however the ID should be, since the ID column is always NULL. The column can either be removed or should at least have the right value.

 

"NULL"        "503383590400"    "765611980673xxxxx"    "1536429967178"    "1536429967178"
"NULL"        "503383590400"    "765611980673xxxxx"    "1536431719349"    "1536431719349"
"NULL"        "503383590400"    "765611980673xxxxx"    "1536432049106"    "1536432049106"
"NULL"        "503383590400"    "765611980673xxxxx"    "1536522635625"    "1536522635625"
"NULL"        "503383590400"    "765611980673xxxxx"    "1536522698491"    "1536522698491"

Share this post


Link to post
Share on other sites

Just to keep track of everything. This problem has NOT been fixed in WU version 1.8.0.3.

Share this post


Link to post
Share on other sites

Bump not fixed in 1.9.0.0

Edited by Retrograde
keep your voice down please

Share this post


Link to post
Share on other sites

I posted my theory in the wrong place, ugh. anyway its here

 

3 hours ago, Cuddles said:

edit, nvm was half asleep.

 

theory #2

 

I don't think the hashmap "historySteamId"  is even being populated and so when the method checks if the steamid already exists in the hashmap it always returns false and so adds it again to db.

in com.wurmonline.server.players.DbPlayerInfo the method setSteamId checks if the steamid is already in the hashmap and if not then it adds it to the db, weird way of trying to do things but regardless I am pretty sure the hashmap is actually empty as the method loadHistorySteamIds is never actually called anywhere. That probably sounds confusing.

 

tbh i think only way to fix this is to completely replace the code in method com.wurmonline.server.players.DbPlayerInfo.setSteamId to something that actually works...

I don't have a fix as they didn't make the stuff static so would need to hook in a few places to try and fix this crap job they did.

Edited by Retrograde
changed link to quote

Share this post


Link to post
Share on other sites

I missed this when originally reported.

 

I'll work to fix this before the beta goes live.

 

6 hours ago, Cuddles said:

I don't have a fix as they didn't make the stuff static so would need to hook in a few places to try and fix this crap job they did.

 

Thanks for the complement! ❤️

  • Like 1

Share this post


Link to post
Share on other sites

Has anyone else  been able to successfully #pardonsteam?  I think it's broken, as I get no options when I try it, and so far nobody I've spoken with can confirm it is working.  Maybe related to the other issue about Steam IDs?

 

Share this post


Link to post
Share on other sites

I did test the command when I implemented everything, so I'd need some data to work with to see why it's not working.

 

Heck, I tested all of this. So I'm extremely interested in what's going on and will do a post when I get to the bottom of it.

Share this post


Link to post
Share on other sites

Well that was quick. Thanks to Cuddles up there for their complement and the tip. I apparently missed adding the load calls when I shamelessly copied the IP History code for use with SteamIDs.

 

Yes @Batta- this could affect pardons.

 

We've got a few other bugs we're looking at and will aim for a beta version bump this weekend with this fix and any others we can crank out.

  • Like 1

Share this post


Link to post
Share on other sites

 

10 hours ago, Keenan said:

Well that was quick. Thanks to Cuddles up there for their complement and the tip. I apparently missed adding the load calls when I shamelessly copied the IP History code for use with SteamIDs.

 

Yes @Batta- this could affect pardons.

 

We've got a few other bugs we're looking at and will aim for a beta version bump this weekend with this fix and any others we can crank out.

 

Sounds great thanks for bringing this to a good solution.

Share this post


Link to post
Share on other sites

haha i am sure there was a compliment in there somewhere.

Did you also forget to call the change milkable aswell, atm it only resets with hummid drizzle or server restart.

I should pay more attention to this section of forum I guess instead of just modding.

I am glad you can fix that steamid relatively easily cus I was hooking into so much stuff to fix it as a mod and although I was there I didn't want to release it, I actually hate using hooks as they can break with every patch ?

 

Edit:

Personally I would just reset the milkable and sheared with the crop tick but that is just me.

 

Double Edit:

This is what I had in my mod to reset milk and shear, maybe it can save you some time lol

	      Creature[] crets = Creatures.getInstance().getCreatures();
	      for (int x = 0; x < crets.length; ++x) {
	    	  if (crets[x].isMilkable()){
	    		  crets[x].setMilked(false);
	    	  }
	    	  if (crets[x].isSheared()){
	    		  crets[x].setSheared(false);
	    	  }
	      }

 

Edited by Cuddles

Share this post


Link to post
Share on other sites
7 minutes ago, Cuddles said:

Did you also forget to call the change milkable aswell, atm it only resets with hummid drizzle or server restart.

Our creatures are milkable a few times a day, without humid drizzle or a server reset.  Same when I was playing on someone else's server last week.

 

Share this post


Link to post
Share on other sites
4 minutes ago, Batta said:

Our creatures are milkable a few times a day, without humid drizzle or a server reset.  Same when I was playing on someone else's server last week.

 

weird, our server they only get reset with hummid drizzle or server restart, thats why I made the mod  *shrug*

 

Edit:

I also couldn't find anywhere in server code where it is reset to milkable.

Edited by Cuddles

Share this post


Link to post
Share on other sites
On 3/13/2019 at 12:29 PM, Keenan said:

Well that was quick. Thanks to Cuddles up there for their complement and the tip. I apparently missed adding the load calls when I shamelessly copied the IP History code for use with SteamIDs.

 

Yes @Batta- this could affect pardons.

 

We've got a few other bugs we're looking at and will aim for a beta version bump this weekend with this fix and any others we can crank out.

 

This is still not fixed.

Share this post


Link to post
Share on other sites

End of July -- still not fixed.  @Keenan is a fix coming?  

Our wurmplayers.db/STEAM_IDS file is thousands of lines long, and still shows Null under the first column, "ID". 

It would be great if it would link the Steam IDs to Player names, too.  Would save a lot of work figuring out which Player ID goes with which player in this database.

Share this post


Link to post
Share on other sites

just checked on a brand new lan server and yeah this is still an issue, each login adds another line to STEAM_IDS.

If I get some time later today I will see if I can throw together a mod to fix it until they release another patch that fixes it.

  • Like 1

Share this post


Link to post
Share on other sites

Ok this doesn't really fix any of the code in the game but it will fix the thousands of occurrences of the same players.

Basically as a player logs in it will remove all occurrences of that player in the STEAM_ID db and then add just 1 keeping the original first used and updating with current time as last used.

So players who don't log in will still have thousands of records in the db, if you really wanted you could delete them all manually and start fresh *shrug*

https://1drv.ms/u/s!AjnBltNOSFjCgmwy4fO4L2xi7OI7

 

--=== Edit ===--

Ok maybe not delete ALL of them manually, just leave 1 of each playerid so if you have bans and stuff it wont get messed up.

Edited by Cuddles

Share this post


Link to post
Share on other sites
2 hours ago, Cuddles said:

Ok this doesn't really fix any of the code in the game but it will fix the thousands of occurrences of the same players.

 

Thanks!  We'll add this to our server.  

Share this post


Link to post
Share on other sites

@CuddlesOh dear, this causes my server to crash.   Nm, I just had a faulty download (missing jar file).  Re-downloaded it and it is fixed.  It works!  Thank you very much for this.

 

Spoiler

[08:11:28 PM] SEVERE org.gotti.wurmunlimited.serverlauncher.DelegatedLauncher: java.nio.file.NoSuchFileException: mods\steamid
org.gotti.wurmunlimited.modloader.classhooks.HookException: java.nio.file.NoSuchFileException: mods\steamid
    at org.gotti.wurmunlimited.modloader.ModInstanceBuilder.getClassLoaderEntries(ModInstanceBuilder.java:112)
    at org.gotti.wurmunlimited.modloader.ModInstanceBuilder.createClassLoader(ModInstanceBuilder.java:137)
    at org.gotti.wurmunlimited.modloader.ModInstanceBuilder.createModInstance(ModInstanceBuilder.java:64)
    at org.gotti.wurmunlimited.modloader.ModLoaderShared.lambda$loadModsFromModDir$1(ModLoaderShared.java:141)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at org.gotti.wurmunlimited.modloader.ModLoaderShared.loadModsFromModDir(ModLoaderShared.java:143)
    at org.gotti.wurmunlimited.serverlauncher.DelegatedLauncher.main(DelegatedLauncher.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at javassist.Loader.run(Loader.java:286)
    at org.gotti.wurmunlimited.serverlauncher.ServerLauncher.main(ServerLauncher.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at PatchedLauncher.main(PatchedLauncher.java:20)
Caused by: java.nio.file.NoSuchFileException: mods\steamid
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:53)
    at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38)
    at sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:193)
    at java.nio.file.Files.readAttributes(Files.java:1737)
    at java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
    at java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
    at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
    at java.nio.file.Files.walkFileTree(Files.java:2662)
    at java.nio.file.Files.walkFileTree(Files.java:2742)
    at org.gotti.wurmunlimited.modloader.ModInstanceBuilder.getClassLoaderEntries(ModInstanceBuilder.java:110)
    ... 23 more

 

Edited by Batta

Share this post


Link to post
Share on other sites

error says no such file, I've never seen that before, did you put the file in the right place?

Share this post


Link to post
Share on other sites
1 minute ago, Cuddles said:

error says no such file, I've never seen that before, did you put the file in the right place?

I edited that post, probably right when you were typing.  ?   My download was incomplete, missing a jar file.  I re-downloaded it from your link and now it works great.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this