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