OnItemSkinChange
OxideCarbonItemCalled when an item skin is changed.
object OnItemSkinChange(object inventoryId, bool boolean, RepairBench repairBench, BasePlayer basePlayer)Method changed — check — the game method differs from the one the hook is recorded for in Oxide. The hook is still called, but its place may have shifted — worth checking after an update.
Parameters
- inventoryId
- object
- boolean
- bool
- repairBench
- RepairBench
- basePlayer
- BasePlayer
Return value
objectReturn non-null to cancel the game action.
Example
object — you can affect the game: return a value to change or cancel the action.
private object OnItemSkinChange(object inventoryId, bool boolean, RepairBench repairBench, BasePlayer basePlayer)
{
Puts("OnItemSkinChange");
// change nothing — the game continues as usual
return null;
// to affect the game:
// return false; // non-null cancels the game action
}Works in both Oxide and Carbon: Carbon loads Oxide plugins as is.
Injection point
Rust.opj (Oxide)
void RepairBench.ChangeSkin(BaseEntity.RPCMessage)
Passes: object inventoryId, bool boolean, RepairBench repairBench, BasePlayer basePlayer
Method changed — checkReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString ( l0.inventoryId, l5, this, l1)Assembly-CSharp.dll
Where it is called (this branch's game code)
// …
ItemId itemId = ((msg.read.Unread > 0) ? new ItemId(msg.read.UInt64()) : default(ItemId));
bool isValid = itemId.IsValid;
bool flag = !isValid || Time.realtimeSinceStartup > nextSkinChangeAudioTime;
Item slot = inventory.GetSlot(0);
if (slot == null || (isValid && slot.uid != itemId))
{
return;
}
if (Interface.CallHook("OnItemSkinChange", local0.inventoryId, flag, this, player) != null)
{
return;
}
if (num != 0 && !player.blueprints.CheckSkinOwnership(num, player))
{
debugprint("RepairBench.ChangeSkin player does not have item :" + num + ":");
return;
}
// …Sources: Rust.opj from OxideMod/Oxide.Rust (MIT) and hook metadata of the Carbon documentation (MIT). Method code is decompiled from this branch's server.