Is there a plan to synchronize server mod resources to the client in the new version?

anmao

New member
When a player joins a server with custom resources, they are likely to see nothing and encounter errors if the mod is not pre-installed. I'm wondering if there are plans to add resource synchronization in the next few versions. If not, would you consider supporting base64 encoded images to send images to the client via XML?

Also, have you considered optimizing various events? When creating a DLL, I found that most of the data is calculated by the client and submitted to the server. This is very dangerous when EAC is not enabled because the data can be easily tampered with. I think a new event system should be added to facilitate DLL development (similar to Minecraft). Events such as entity dealing damage, entity taking damage, entity state updates, etc., should be calculated by the server, and client-side calculations should not affect the server. (I tried to prevent an entity from dying on the server side, but found it meaningless without installing the DLL on the client, which is a bad situation.)

(The content has been translated, and I'm not sure if it fully conveys my meaning. Regardless, I hope this game has good development.)

 
There will eventually be steam workshop available.  We didn't yet know how much functionality that will provide, but it may do what you want for synchronization. 

As far as the DLLs, those are likely to always require installation on clients.  XML mods can be server side, but not DLL.

 
Honestly, it would make server admins life soo much easier, if they could formulate it to run like Rust servers run. Any mods we put up for Rust, are not required for client side installations at all. All mods are server side. Even the most creative ones. How is it possible that they can do it, but 7 days cant? Just a thought. 

 
Honestly, it would make server admins life soo much easier, if they could formulate it to run like Rust servers run. Any mods we put up for Rust, are not required for client side installations at all. All mods are server side. Even the most creative ones. How is it possible that they can do it, but 7 days cant? Just a thought. 


Are you sure that Rust mods are only server side?  Even ones with custom assets added to the game?

Most games require both client and server side mods if the mod adds new assets to the game.  Rust is probably the same, but the mod is downloaded and installed if required to be on the client side.

From a safety standpoint, I never want a game to automatically download and install a mod just so I can join the server.  You don't have any control of what can get installed on your computer if the game / server allows that.

Edit:  This includes mods with custom dll files to run properly.  I don't want any game to automatically download and install those outside of my control.

 
Last edited by a moderator:
Can you imagine how long it would take to join a server hosting Darkness Falls if you had to wait for 9GB of data to download over a 40Mbps connection in order to connect to the server?

 
Can you imagine how long it would take to join a server hosting Darkness Falls if you had to wait for 9GB of data to download over a 40Mbps connection in order to connect to the server?
Nope.
I never time that, I'll be just going to make a cup of coffee.

But I can imagine myself shaking and not sleeping for a week from all the coffee from al these downloads ☕

 
Can you imagine how long it would take to join a server hosting Darkness Falls if you had to wait for 9GB of data to download over a 40Mbps connection in order to connect to the server?


Why imagine? Quick calculations assuming no other delays and you actually sustain that data rate...

9 GigaBytes is 72,000,000,000 bits

40 Mbps is 40,000,000 bits per second

72,000,000,000 / 40,000,000 = 1,800 seconds = 30 minutes

Or, if you want to use multiples of 1024...

9 GigaBytes is 77,309,411,328 bits

40 Mbps is 41,943,040 bits per second

77,309,411,328 / 41,943,040 = 1,843.2 seconds = 30.72 minutes

You have time for an episode of Gilligan's Island, or maybe two episodes if you're streaming them. It can only get worse than that. :)

Then I also wonder how life is on the server if you get a couple of people joining. Those could be offloaded to other cores, but everyone still shares a network, and other computing resources.

Don't some servers restart every hour?

 
Quick calculations assuming no other delays and you actually sustain that data rate...
Calculation of a spherical horse in a vacuum. In the real world there will always be delays and some unexpected interference.

Don't some servers restart every hour?
The server I play on reboots every 4 hours. In the first weeks after releases, this time is sometimes reduced, but not always.

 
Server-side resource delivery could be limited to only essential images and models. A dialog box could be added to prompt players to download server resources, with default or error resources used as replacements if they decline (similar to the black and purple textures and models in Minecraft). Background downloading during gameplay could also be an option.

 
I wouldn't expect them to make such changes to how that works when they are just trying to finish the game.  Maybe they'd consider something like that after gold.

 
Server-side resource delivery could be limited to only essential images and models. A dialog box could be added to prompt players to download server resources, with default or error resources used as replacements if they decline (similar to the black and purple textures and models in Minecraft). Background downloading during gameplay could also be an option.


This assumes there are unessential images and a way to determine which are unessential. I don't immediately know which those are, but perhaps you've got something in mind? By models, I'm not sure if you're talking about 3D models, the imposters for POIs, or both. If it's the 3D models, then I'm hung up on the same issue as the images. If it is the imposters for POIs, then those can be calculated on the client side, though some people turn off that feature for performance. IIRC, that process can take up an extra core or two, but as a player it will limit how far away you can see POIs.

Background downloading from the server may or may not save the network traffic, depending on what you mean, but to me this I think offers a glimpse to something I would see as being viable...

How about:

The server software, or a related script/program available to server operators, were to know how to package up all of the server's modlets. Then the server operator places that package on a web server. Then the URL of that package can be made part of the server's configuration. When the client connects, it gets the URL, checks to see if it has the server's package, checks to see if the MD5 of the package has changed, download, and install the package. It could even have a server-specific mods folder. Then, to address performance, a server operator could arrange to use a web server located elsewhere from the game server. Smaller servers less concerned about performance could run the webserver on the same host. The important part (IMO) is shifting the download or all the modlet content away from the game server if we really are talking 9GB of modlets.

 
This assumes there are unessential images and a way to determine which are unessential. I don't immediately know which those are, but perhaps you've got something in mind? By models, I'm not sure if you're talking about 3D models, the imposters for POIs, or both. If it's the 3D models, then I'm hung up on the same issue as the images. If it is the imposters for POIs, then those can be calculated on the client side, though some people turn off that feature for performance. IIRC, that process can take up an extra core or two, but as a player it will limit how far away you can see POIs.

Background downloading from the server may or may not save the network traffic, depending on what you mean, but to me this I think offers a glimpse to something I would see as being viable...

How about:

The server software, or a related script/program available to server operators, were to know how to package up all of the server's modlets. Then the server operator places that package on a web server. Then the URL of that package can be made part of the server's configuration. When the client connects, it gets the URL, checks to see if it has the server's package, checks to see if the MD5 of the package has changed, download, and install the package. It could even have a server-specific mods folder. Then, to address performance, a server operator could arrange to use a web server located elsewhere from the game server. Smaller servers less concerned about performance could run the webserver on the same host. The important part (IMO) is shifting the download or all the modlet content away from the game server if we really are talking 9GB of modlets.
I'm referring to models for items, blocks, and entities, not prefabs. Here are some of my suggestions and opinions.

Server-side:

When the game launches, the server could track all resource files used by the various XML configurations. After loading all files, it should automatically package only the referenced resource files. If the resulting package is too large, an option or size limit can be added to the configuration, allowing the server administrator to choose whether to generate it automatically. If automatic packaging is disabled, the administrator can provide a resource pack path or URL that adheres to the required format, or the server can automatically read from the  folder in the game directory.resourcepacks

The only real concern with sending resources is that players might be stuck at the loading screen for a long time. (As far as I know, image and model files don't contain actively running viruses.) Generally, there shouldn't be too many large image resources. Model files might be larger (and with a synchronization feature, mod developers might try to optimize their models). I estimate that very few servers will have resource packs exceeding 1GB.

Client-side:

The client could present the following dialog options:

"Do not download. Use default resources. Items and other objects may display incorrectly."

"Continue playing. Download in the background and automatically refresh the display when complete."

"Wait for the download to complete before entering the game."

For cached resource packs, you could add an expiration period (e.g., automatically delete after a week of inactivity on that server) or a storage limit. When the limit is reached, if the player joins a new server, a prompt could appear asking whether to delete older server caches.

If you're worried about download bandwidth impacting the server, you could set up multiple URLs for multi-point, multi-threaded downloads. Distributing the files across various hosting services (GitHub might work, since resource packs are just static files) would reduce server load and potentially speed up download times for players. The only potential issue with this approach is a mismatched MD5 checksum after downloading due to network issues, but this shouldn't happen often unless the network is corrupted.

 
Can you imagine how long it would take to join a server hosting Darkness Falls if you had to wait for 9GB of data to download over a 40Mbps connection in order to connect to the server?
First thing that comes to mind when reading your post, was back in the day dial up internet lol would take 3 days to download a game 🤣

 
Back
Top