RustTip

CanUseFuel

OxideCarbonFuel

Called to determine whether to use fuel.

Return true to allow the action and false to block it.

object CanUseFuel(EntityFuelSystem entityFuelSystem, StorageContainer local0, float seconds, float fuelUsedPerSecond)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

entityFuelSystem
EntityFuelSystem
local0
StorageContainer
seconds
float
fuelUsedPerSecond
float

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

objectВозвращённое значение заменяет результат игры; null — игра решает сама.

Пример

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

private object CanUseFuel(EntityFuelSystem entityFuelSystem, StorageContainer local0, float seconds, float fuelUsedPerSecond)
{
    Puts("CanUseFuel");

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

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

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

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

Rust.opj (Oxide)
bool EntityFuelSystem.TryUseFuel(float, float)

Передаёт: EntityFuelSystem entityFuelSystem, StorageContainer local0, float seconds, float fuelUsedPerSecond

РаботаетReturnBehavior: ExitWhenNonNullArgumentBehavior: UseArgumentString (this, l0, a0, a1)Assembly-CSharp.dll

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

public int TryUseFuel(float seconds, float fuelUsedPerSecond)
{
	StorageContainer fuelContainer = GetFuelContainer();
	object returnvar = Interface.CallHook("CanUseFuel", this, fuelContainer, seconds, fuelUsedPerSecond);
	if (returnvar is int)
	{
		return (int)returnvar;
	}
	if (fuelContainer.IsRealNull())
	{
		return 0;
	}
// …

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