RustTip

CanChangeCode

OxideCarbonPlayer

Called to determine whether to change code.

Return true to allow the action and false to block it.

object CanChangeCode(BasePlayer player, CodeLock codeLock, string local0, bool local1)
Works — the game method in this build is the one the hook was written for.

Parameters

player
BasePlayer
codeLock
CodeLock
local0
string
local1
bool

Return value

objectReturn non-null to cancel the game action.

Example

object — you can affect the game: return a value to change or cancel the action.

private object CanChangeCode(BasePlayer player, CodeLock codeLock, string local0, bool local1)
{
    Puts("CanChangeCode");

    // change nothing — the game continues as usual
    return null;

    // to affect the game:
    // return false; // non-null cancels the game action
}

Works in both Oxide and Carbon: Carbon loads Oxide plugins as is.

Injection point

Rust.opj (Oxide)
void CodeLock.RPC_ChangeCode(BaseEntity.RPCMessage)

Passes: BasePlayer player, CodeLock codeLock, string local0, bool local1

WorksReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (a0.player, this, l0, l1)Assembly-CSharp.dll

Where it is called (this branch's game code)

// …
	return;
}
string text = rpc.read.String();
bool flag = rpc.read.Bit();
if (IsLocked() || text.Length != 4 || !text.IsNumeric() || (!hasCode & flag))
{
	return;
}
if (Interface.CallHook("CanChangeCode", rpc.player, this, text, flag) != null)
{
	return;
}
if (!hasCode && !flag)
{
	using FlagsUpdateScope flagsUpdateScope = StartSetFlags(FlagsUpdateMode.SendNetworkUpdate);
	flagsUpdateScope.Set(Flags.Locked, b: true);
}
// …

Sources: Rust.opj from OxideMod/Oxide.Rust (MIT) and hook metadata of the Carbon documentation (MIT). Method code is decompiled from this branch's server.