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)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

player
BasePlayer
codeLock
CodeLock
local0
string
local1
bool

Возвращаемое значение

objectВерните не null, чтобы отменить действие игры.

Пример

object — можно повлиять на игру: вернуть значение, чтобы изменить или отменить действие.

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

    // ничего не меняем — игра продолжит как обычно
    return null;

    // повлиять на игру:
    // return false; // не null — действие игры отменяется
}

Работает и в Oxide, и в Carbon: Carbon загружает плагины Oxide без изменений.

Место встраивания

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

Передаёт: BasePlayer player, CodeLock codeLock, string local0, bool local1

РаботаетReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (a0.player, this, l0, l1)Assembly-CSharp.dll

Где вызывается (код игры этой ветки)

// …
	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);
}
// …

Источники: Rust.opj из OxideMod/Oxide.Rust (MIT) и метаданные хуков документации Carbon (MIT). Код методов — декомпиляция сервера этой ветки.