RustTip

CanLock

OxideCarbonVehicle

Called to determine whether to lock.

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

object CanLock(BasePlayer player, CodeLock codeLock)
object CanLock(BasePlayer player, KeyLock keyLock)
object CanLock(BasePlayer player, ModularCar owner, ModularCarCodeLock modularCarCodeLock)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

player
BasePlayer
codeLock
CodeLock

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

objectВозвращённое значение заменяет результат игры; null — игра решает сама.

Пример

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

private object CanLock(BasePlayer player, CodeLock codeLock)
{
    Puts("CanLock");

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

    // повлиять на игру:
    // return false; // своё значение вместо результата игры
}

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

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

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

Передаёт: BasePlayer player, CodeLock codeLock

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

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

[RPC_Server]
[RPC_Server.MaxDistance(3f, CheckParent = true)]
private void TryLock(RPCMessage rpc)
{
	if (rpc.player.CanInteract() && !IsLocked() && code.Length == 4 && whitelistPlayers.Contains(rpc.player.userID))
	{
		if (Interface.CallHook("CanLock", rpc.player, this) != null)
		{
			return;
		}
		DoEffect(effectLocked.resourcePath);
		SetFlagLocal(Flags.Locked, b: true);
		SendNetworkUpdate();
	}
}

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

Rust.opj (Oxide)
void KeyLock.Lock(BasePlayer)

Передаёт: BasePlayer player, KeyLock keyLock

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

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

private void Lock(BasePlayer player)
{
	if (!(player == null) && player.CanInteract() && !IsLocked() && HasLockPermission(player))
	{
		if (Interface.CallHook("CanLock", player, this) != null)
		{
			return;
		}
		LockLock(player);
		SendNetworkUpdate();
	}
}

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

Rust.opj (Oxide)
bool ModularCarCodeLock.HasLockPermission(BasePlayer)

Передаёт: BasePlayer player, ModularCar owner, ModularCarCodeLock modularCarCodeLock

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

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

public bool HasLockPermission(BasePlayer player)
{
	if (!player.IsValid() || player.IsDead())
	{
		return false;
	}
	object returnvar = Interface.CallHook("CanLock", player, this.owner, this);
	if (returnvar is bool)
	{
		return (bool)returnvar;
	}
	return HasLockPermission(player.userID);
}

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