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

Параметры

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). Код методов — декомпиляция сервера этой ветки.