

Auxide is a Harmony patch dll for Rust which provides a simplified alternative to Oxide/uMod/Carbon for vanilla or staging servers.
PRE-RELEASE VERSIONS: here.
Auxide is a Harmony patch dll for Rust which provides a simplified alternative to Oxide/uMod/Carbon. It is not a compatible replacement for them and should be used on its own. Many of the features of those other systems are available here. But, the primary goal is to provide a way for vanilla and staging servers to have more control than what they get out of the box without having to install a larger package.
Auxide offers the admin two modes of operation:
MINIMAL
FULL (Partially working)
Additionally, Auxide should work just fine month to month for vanilla and staging servers without monthly updates.
The following folders are created in both modes. Only the Logs folder is used in minimal mode:
TOP LEVEL
-- auxide
|- Bin (temporary download location for the compiler when using external compiler (never))
|- Config (plugin config files)
|- Data (plugin data files)
|- Logs (Auxide logging, especially in verbose mode)
|- Scripts (plugins)
The original goal of Auxide was to provide an alternative means of PVE access management for users of vanilla and staging (yes, that's right) servers. In minimal mode, it handles this by patching the standard calls for damage, decay, loot, and mounting access. It will also allow the admin to disable the TC decay warning for either mode.
Configuration is handled via Auxide.json, also contained in the HarmonyMods folder. In this example, minimal mode would be used, and the minimal section will be used. useInternalCompiler will be ignored:
{
"Options": {
"full": false,
"verbose": true,
"useInternalCompiler": true,
"disableTCWarning": true,
"minimal": {
"blockTCMenu": true,
"allowPVP": false,
"allowAdminPVP": true,
"blockBuildingDecay": true,
"blockDeployablesDecay": true,
"protectLoot": true,
"protectMount":true
}
}
}
The configuration should be re-read on server save in case you want to make adjustments during runtime.
Access control is managed by checking the playerid against the ownerid for an object. It also by default checks for team members using the built-in Rust team functionality to also allow team member access.
Full mode intends to enable the same vanilla and staging servers to also use plugins customized for use with Auxide to allow for extended functions such as teleport, item spawning, etc. This is still a work in progress primarily due to major issues trying to get our code compiler to work in a non-hackish and consistent way. Barring that major issue, it has been shown to work, offering several internal hook calls for these plugins to use as with other modding platforms.
THIS IS NOT COMPATIBLE WITH ANY EXISTING PLUGIN FOR RUST, whether used by Oxide, uMod, or Carbon, or derivatives.
Configuration is handled via Auxide.json, also contained in the HarmonyMods folder. In this example, full mode would be used, and the minimal section will be ignored:
{
"Options": {
"full": true,
"verbose": true,
"hideGiveNotices": true,
"disableTCWarning": true,
"minimal": {
"blockTCMenu": true,
"allowPVP": false,
"allowAdminPVP": true,
"blockBuildingDecay": true,
"blockDeployablesDecay": true,
"protectLoot": true,
"protectMount":true
}
}
}
The configuration should be re-read on server save in case you want to make adjustments during runtime.
Plugins must be in DLL format and located in auxide/Scripts. There are 5 examples in the source code as of 11/13/2022.
Below, the term Narrowcast essentially means target, as in not sent to all scripts, just one.
void Narrowcast("OnScriptLoaded", RustScript);
void Narrowcast("LoadData", RustScript);
void Narrowcast("LoadConfig", RustScript);
void Narrowcast("LoadDefaultMessages", RustScript);
void Broadcast("OnPluginLoaded", RustScript);
void Broadcast("OnServerInitialized");
void Broadcast("OnServerShutdown");
void Broadcast("OnServerSave");
void Broadcast("OnNewSave");
object BroadcastReturn("CanUseUI", BasePlayer, string);
void Broadcast("OnDestroyUI", BasePlayer, string);
object BroadcastReturn("CanAdminTC", BuildingPrivlidge, BasePlayer);
object BroadcastReturn("CanToggleSwitch", oven, BasePlayer);
object BroadcastReturn("CanToggleSwitch", sw, BasePlayer);
void Broadcast("OnToggleSwitch", oven, BasePlayer);
void Broadcast("OnToggleSwitch", sw, BasePlayer);
object BroadcastReturn("CanMount", BaseMountable, BasePlayer);
void Broadcast("OnMounted", BaseMountable, BasePlayer);
object BroadcastReturn("CanLoot", BaseEntity, BasePlayer, string);
void Broadcast("OnLooted", BaseEntity, BasePlayer);
object BroadcastReturn("CanPickup", BaseEntity, BasePlayer);
object BroadcastReturn("CanPickup", ContainerIOEntity, BasePlayer);
object BroadcastReturn("CanPickup", StorageContainer, BasePlayer);
object BroadcastReturn("OnTakeDamage", BaseCombatEntity, HitInfo);
void Broadcast("OnPlayerJoin", BasePlayer);
void Broadcast("OnPlayerLeave", BasePlayer);
void Broadcast("OnChatCommand", BasePlayer, string, object[]);
The following were borrowed from Oxide, and I believe their licensing allows this:
DynamicConfigFile (as config)
DataFileSystem (as data)
CuiHelper (Auxide.CuiHelper)
LangFileSystem (as lang)
Many thanks to SureL0ck for testing and patience.