Just thinking this through. As I understand it right now Oxide/Leather work by replacing some of our dlls.
We’d rather avoid that. So if I make the server load any dlls that are in a ‘servermods’ folder - would that be better? Could they still operate without changing the original dlls?
Then the mods could load their submods (like Lua script etc) from inside the -datadir provided by the server owner.
This means that GSPs could give their clients free access to the -datadir folder… while only installing whitelisted dlls in the servermods folder.
I’m investigating strategies here, figuring out what would be best for us, modders, GSPs and server owners going forward.
Well as it is, only people who managed to get the current server dlls can do anything related to modding, even adding a servermods folder would only support developers lucky enough to have the info and direct server files access.
If you could, it would be nice to release a rust server with a limited max slots, bind to localhost only? and even disable the steam server list announcements. That is if you wish to keep GSPs as the only official hosters.
The problem is, modding is extremely limited right now without modifying the dll. changes need to be done to the dll in it’s current state to gain access to features we need, take door sharing for example, i couldn’t come up with a way to share doors without editing Assembly-CSharp.dll’s CIL code to call my mod and check if that player is the owner of the object.
If your willing to add listeners for a bunch of events that plugins can use, and other requests then we could all get along just fine
I don’t like modifying the DLL and it seems either does anyone else, but right now i don’t think there’s any other way? It’s nice to see you showing interest though, i see this type of game as the kind of game where modding is essential (like Minecraft)
Why is this guy still allowed to participate in conversations here when he’s been proven to be part of the crew from #ArtificialAiming and has already publically leaked server DLLs on this very forum?
On topic, right now things like sharing doors and manipulating inventory require changing private methods to public in the CSharp assembly DLL. If you even just made more methods public it would be helpful, and hopefully get rid of the need to overwrite DLLs with modified copies. Most of the modification going on is just to change method declarations and gain access to private members, AFAIK.
class EventListenerExample : EventListener
{
// You can name this method anything
public void onSpawnEvent(SpawnEvent evt)
{
// Your Event Code here!
}
}
class ExampleMod : GameMod
{
EventListenerExample listener = null;
public void Example()
{
// Example of getting the event manager
EventManager eventManager = getEventManager();
// Instantiate our event listener
var listener = new EventListenerExample();
IEventListener eventListener = eventManager.CreateListener(listener.onSpawnEvent);
// Basic Registration
// Register our event listener
// We can use a 'generic' event listener
eventListener.register<SpawnAnimalEvent>();
eventListener.register<SpawnZombieEvent>();
// Chaining
eventListener.register<SpawnAnimalEvent>().register<SpawnZombieEvent>()
// Types ( any number of arguments )
eventListener.register(typeof(SpawnAnimalEvent), typeof(SpawnZombieEvent));
// Type Array
eventListener.register(new Type[] { typeof(SpawnAnimalEvent), typeof(SpawnZombieEvent) });
}
}
Creating a ‘servermods’ folder would eliminate the need of a dll loader, such as LeatherLoader, sure - but we still wouldn’t be able to make the adjustments and features the people want if we can’t change the original dlls. BUT, there is a work around. It’s as simple as making classes, methods, and variables accessible. Public - static if need be. Also, eventhandlers as mentioned above would be an amazing touch. Currently, the way we all edit doors is through changing method bodies at runtime and rewriting the method itself in the original dll - which is kind of tedious and excessive. Simply readjusting the access modifiers of most of the variables would open more doors than one would think. To move forward, this is what I think.
I guess the one everyone wants the most would be the ability to return a different value for when you check who the door belongsTo. Some others would include storing the Inventory instance of a PlayerClient/NetUser/Character and something as miniscule as changing the color of names in chat (Ex: have users be able to recognize the PMs our plugins send as actual PMs if the player’s name is too long by changing name color). Things such as moving players, killing players, and running console commands we already accomplish with ease - so don’t worry about that one I think.
Any sort of official API we can hook into would be great to avoid modifying/injecting our code into the game (feels like server side hacking instead of modding at this point). Instead of just server side modding it would be great if we could hook into the game as a whole. Doing either something like GMod or Minecraft would be beneficial.
Thank you for looking into and supporting the modding community.
Garry’s idea is better than providing interface.
If someone decide to modify DLL’s he will have more possibilities than with an API.
And if the API wants to compete, rust developers will have to add functions to the API and it can take some times.
I guess an API will be just great for 95% of mods but some servers will still modify DLL’s for unique exclusive features.
Are “door share” servers legit or not? There are rumours going around that they are not. Other people claim they are legit mods. How can a normal player now what is right and what is wrong at the moment? I mean there is a modded tab so it must be kinda official to use these servers.
I think everyone involved would love it if you made them redundant. The community is completely divided and its creating hostility between GSPs, developers and everyone else involved.