In its current state, ServUO is only really usable by new shards starting out.
The publish that introduced the damageable items completely segregated many established shards due to the amount of edits it requires to update.
In the past few months, ServUO has taken a turn with the influx of contributions, which haven't really conformed to compatibility standards.
There was a time where VNc would be compatible for up to a year before it was broken by an edit, now it's every other week.
There needs to be some standards and thought put into backward compatibility when going forward...
The restructure of Files, the dozen of core changes without backward compability also affected me a lot of times. You are (as always) correct on all your statements about. I personaly think whats required is a higher base flexibility, a higher rate of reviews and changes onto the code should be always designed to work with running systems. I guess iam not the only one that hates to pull on a daily or weekly base and pray to god not to rechange a few thousand files of code. But this is not a thing, servuo alone must work on, but also the developers of the individual shards.
I for myself started with a few simple steps :
1) Adding a custom function on serialize\deserialize that independent allow to store data (in my Case : CustomSerialize\Deserialize) those are virtual on Item.cs\Mobile.cs and getting called on load\save of world seperate.
2) Storing custom data into seperate files, making the core class partial and only inject 1 line calls on original file and do the handles on my custom file. On that way every bigger update can be merged and i only need to add a few lines (playermobile has 3 lines changed by that way to store dozen of new properties)
3) never store any non servuo related data via serialze\deserialize always use my custom stuff.
4) I not add files to servuo repo itself but design them independent or as module (vnc helps a lot) and store them seperate. I try to reduce any file modification to a minimum.
In case something changes i only need to handle it on main file, my custom edits will still working without changes. When i want to move a previous code from custom to serialize i can remove on custom side and add on origin pretty easy.