I proposed something like this a while ago too, via the mod discord. I was told that the modding community tried already, but only a small % of the mod authors bothered to include their mod IDās. Everybody else either didnāt hear about it, ignored the effort, or there was a language barrier and people didnāt understand.
So in practice this could be helpful, in reality it would be a great deal of effort that may or may not result in anything constructive.
oh ok, iāll scratch me chin a bit more to try and see if theres an easy, multi-lingual way to address it somehowā¦ (but first i need to cook some eggs and dry some shredded roast meat before it spoils lol)
Why is this even a thing? I mean, I understand how it happens but the fact that it happens is what perplexes me.
I get that mod devs create things and those things have an ID generated, presumably, by the DevKit? In theory then, wouldnāt the DevKit have a running tally so to speak? Beyond that, why do they use actual numeric IDs? Why doesnāt each DevKit instance create a unique ID or GUID?
If the mods are creating ID conflicts to me that means lazzy Devs on Funcom or Epicās part.
No, the devkit doesnāt auto generate data table IDās (that Iām aware of) and it definitely doesnāt store other peopleās item IDās in it from other mods. There are various data tables within UE4 that are essentially .csv files. In those are things like item tables and feat tables. You create new data tables, and use a mod controller to merge your stuff into the vanilla data table (for max compatibility).
When adding items into the data tables, you have to manually create item row IDās for them by assigning a number to them. Its easy enough to avoid Funcomās IDās since, they are visible, but player IDās could be any number of combinations and nearly impossible to know what is out there now and what is being used. The ID range can extend into the 10,000,000ās of millions I believe too.
Data tables are a UE4 thing. I am unsure if there are ābetterā ways to do this in UE4 as Iām not fluent with UE4, and what little I know about UE4 is from modding for Conan Exiles.
Anyhoo, this is why efforts like this have been discussed to try and make everybodyās work as compatible as we can.
So, as I saidā¦ The fact that it uses numerical IDs instead of GUIDs is the isssue. This is lazy programming and/or bad project management on Funcom or Epicās part.
If they knew it was going to support mods, and as far as I know they did, then they had to know this was going to be an issue. Iām not a Mod dev but I maintained databases with hundreds of thousands of entries that constantly had data going in and out. One of the first things they teach you as a young DB admin is to not use these sorts of IDs for this sort of reason.
Iām probably not the person to discuss this kind of stuff, Iām a rusty 3D artist who just fumbles around in the dark with the UE4 dev kit. There are WAY more advanced modders out there that can give you more solid info as to what is and isnāt possible and why. It makes sense as to what you are saying, but Iām going to assume there was a valid reason it was done this certain way when developing mods via the dev kit.
Iām pretty sure it was laziness at some point. As modding isnāt an official thing Funcom and Epic probably just gave it the barest of support.
āYes, you can make mods, yes people can use them with other mods but we donāt support thatā is the basic gist.
Assuming all items are in the game.db file (i havenāt done a lot of spelunking in the files yet) and given that the game.db file is a SQLLite database itās very possible to have a function that looks at the IDs and spits out conflicts in a log. Itās actually a pretty standard thing to do, though thatās really only useful to the end user and not the Mod Dev.
Could it also spit out all the IDās being used? It would be a HUGE project, but if it was possible to do that, then in theory someone could go through mod after mod and get IDās for them all and put up a spreadsheet on the wiki or something.
Yeahā¦ I mean I havenāt opened he db itself yet but that sort of thing is a reason for Databasesā¦
And hereās a wrinkleā¦
Itās possible to update conflicting IDs in the db and with some clever coding in a mod match the new ID to and old ID, likely via a separate db or text file as I imagine adding a table to the actual game.db will send it into a tizzy. Unfortunately the Mods code calls the stuff by ID so youād have to recompile each mod with your new IDs which is problematic on several levels.
But yeahā¦ Someone could say Iām making a database of IDs. Submit your Mod IDs and whatever else and youāll get a fancy seal of db integrity, or some such.
Robtheswede (thatās his discord name, heās one of Conan Exiles devs) has been adding and editing a dropbox guide for us modders for a while now. He keeps it pinned in the tips tricks and tutorials tab of the mod discord, but here is the link if you want some more additional info on stuffs.
Hmmmā¦ Java language requires all classes and packages to be named. So Itās a good practice for Java coders to register their own domain names (which are unique thanks to worldwide DNS system which takes care of that) and use them as names for their packages (and prefixes for all of their classes). So EVERY Java class on earth has unique name. We here in Steam have unique ID for every account, donāt we? Steam takes care of that. Why not to use it as prefix for object IDs? Letās make it āa good practiceā for CE modding if itās possible technically (I mean number of digits in such IDs).