RustTip

OnItemSkinChange

OxideCarbonItem

Called when an item skin is changed.

object OnItemSkinChange(int inventoryId, Item local5, RepairBench repairBench, BasePlayer local1)
Works — the game method in this build is the one the hook was written for.

Parameters

inventoryId
int
local5
Item
repairBench
RepairBench
local1
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(int inventoryId, Item local5, RepairBench repairBench, BasePlayer local1)
{
    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: int inventoryId, Item local5, RepairBench repairBench, BasePlayer local1

WorksReturnBehavior: 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, slot, this, player) != null)
{
	return;
}
if (inventoryId != 0 && !player.blueprints.CheckSkinOwnership(inventoryId, player))
{
	debugprint("RepairBench.ChangeSkin player does not have item :" + inventoryId + ":");
	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.