RustTip

CanWaterBallSplash

OxideCarbonEntity

Called to determine whether to water ball splash.

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

object CanWaterBallSplash(ItemDefinition liquidDef, Vector3 position, float radius, int amount, bool funWater)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

liquidDef
ItemDefinition
position
Vector3
radius
float
amount
int
funWater
bool

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

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

Пример

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

private object CanWaterBallSplash(ItemDefinition liquidDef, Vector3 position, float radius, int amount, bool funWater)
{
    Puts("CanWaterBallSplash");

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

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

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

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

Rust.opj (Oxide)
bool WaterBall.DoSplash(Vector3, float, ItemDefinition, int, bool)

Передаёт: ItemDefinition liquidDef, Vector3 position, float radius, int amount, bool funWater

РаботаетReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (a2, a0, a1, a3, a4)Assembly-CSharp.dll

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

public static bool DoSplash(Vector3 position, float radius, ItemDefinition liquidDef, int amount, bool funWater = false)
{
	object returnvar = Interface.CallHook("CanWaterBallSplash", liquidDef, position, radius, amount, funWater);
	if (returnvar is bool)
	{
		return (bool)returnvar;
	}
	List<BaseEntity> obj = Pool.Get<List<BaseEntity>>();
	Vis.Entities(position, radius, obj, 1220225811);
	int num = 0;
	int num2 = amount;
// …

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