RustTip

CanMoveItem

OxideCarbonItem

Called to determine whether to move item.

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

object CanMoveItem(Item local5, PlayerInventory playerInventory, ItemContainerId local1, int local2, int local3, ItemMoveModifier local4)
Метод изменился — проверить — код метода игры отличается от того, под который записан хук в Oxide. Хук всё равно вызывается, но место вызова могло сместиться — стоит проверить после обновления.

Параметры

local5
Item
playerInventory
PlayerInventory
local1
ItemContainerId
local2
int
local3
int
local4
ItemMoveModifier

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

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

Пример

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

private object CanMoveItem(Item local5, PlayerInventory playerInventory, ItemContainerId local1, int local2, int local3, ItemMoveModifier local4)
{
    Puts("CanMoveItem");

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

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

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

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

Rust.opj (Oxide)
void PlayerInventory.MoveItem(BaseEntity.RPCMessage)

Передаёт: Item local5, PlayerInventory playerInventory, ItemContainerId local1, int local2, int local3, ItemMoveModifier local4

Метод изменился — проверитьReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (l5, this, l1, l2, l3, l4)Assembly-CSharp.dll

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

// …
Item item = FindItemByUID(id);
if (item == null)
{
	msg.player.ShowToast(GameTip.Styles.Error, PlayerInventoryErrors.InvalidItem, false);
	ConstructionErrors.Log(msg.player, id.ToString());
}
else
{
	if (Interface.CallHook("CanMoveItem", item, this, itemContainerId, num, num2, itemMoveModifier) != null)
	{
		return;
	}
	if (item.IsLocked() || (item.parent != null && item.parent.IsLocked()))
	{
		return;
	}
	BaseEntity entityOwner = item.GetEntityOwner();
// …

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