RustTip

OnIngredientsCollect

OxideCarbonCrafting

Called when ingredients collect occurs.

object OnIngredientsCollect(ItemCrafter itemCrafter, ItemBlueprint bp, ItemCraftTask task, int amount, BasePlayer player, bool takeBroken)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

itemCrafter
ItemCrafter
bp
ItemBlueprint
task
ItemCraftTask
amount
int
player
BasePlayer
takeBroken
bool

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

objectВерните не null, чтобы отменить действие игры.

Пример

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

private object OnIngredientsCollect(ItemCrafter itemCrafter, ItemBlueprint bp, ItemCraftTask task, int amount, BasePlayer player, bool takeBroken)
{
    Puts("OnIngredientsCollect");

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

    // повлиять на игру:
    // return false; // не null — действие игры отменяется
}

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

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

Rust.opj (Oxide)
void ItemCrafter.CollectIngredients(ItemBlueprint, ItemCraftTask, int, BasePlayer, bool)

Передаёт: ItemCrafter itemCrafter, ItemBlueprint bp, ItemCraftTask task, int amount, BasePlayer player, bool takeBroken

РаботаетReturnBehavior: ExitWhenValidTypeArgumentBehavior: AllAssembly-CSharp.dll

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

private void CollectIngredients(ItemBlueprint bp, ItemCraftTask task, int amount = 1, BasePlayer player = null, bool takeBroken = true)
{
	if (Interface.CallHook("OnIngredientsCollect", this, bp, task, amount, player, takeBroken) != null)
	{
		return;
	}
	List<Item> list = new List<Item>();
	foreach (ItemAmount ingredient in bp.GetIngredients())
	{
		CollectIngredient(ingredient.itemid, (int)ingredient.amount * amount, list, takeBroken);
	}
// …

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