RustTip

OnItemRecycleAmount

OxideCarbonItem

Called when item recycle amount occurs.

object OnItemRecycleAmount(Item item, int int32, object this => l4)
Метод изменился — проверить — код метода игры отличается от того, под который записан хук в Oxide. Хук всё равно вызывается, но место вызова могло сместиться — стоит проверить после обновления.

Параметры

item
Item
int32
int
this => l4
object

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

objectВозвращённое значение изменяет результат, игра продолжает работу.

Пример

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

private object OnItemRecycleAmount(Item item, int int32, object this => l4)
{
    Puts("OnItemRecycleAmount");

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

    // повлиять на игру:
    // return default(int); // своё значение вместо результата игры
}

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

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

Rust.opj (Oxide)
void Recycler.RecycleThink()

Передаёт: Item item, int int32, object this => l4

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

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

// …
}
int num2 = 1;
if (slot.amount > 1)
{
	num2 = Mathf.CeilToInt(Mathf.Min(slot.amount, (float)slot.MaxStackable() * 0.1f));
}
if (slot.info.Blueprint.scrapFromRecycle > 0)
{
	Interface.CallHook("OnItemRecycleAmount", slot, num2, this => l4);
	float num3 = slot.info.Blueprint.scrapFromRecycle * num2;
	if (slot.MaxStackable() == 1 && slot.hasCondition)
	{
		num3 *= slot.conditionNormalized;
	}
	float num4 = num / 0.5f;
	num3 *= num4;
	int num5 = Mathf.FloorToInt(num3);
// …

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