RustTip

CanCastFishingRod

OxideCarbonFishing

Called to determine whether to cast fishing rod.

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

object CanCastFishingRod(BasePlayer basePlayer, BaseFishingRod baseFishingRod, Item item, Vector3 vector3)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

basePlayer
BasePlayer
baseFishingRod
BaseFishingRod
item
Item
vector3
Vector3

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

objectРезультат проверяется особым образом — смотрите код вызова ниже.

Пример

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

private object CanCastFishingRod(BasePlayer basePlayer, BaseFishingRod baseFishingRod, Item item, Vector3 vector3)
{
    Puts("CanCastFishingRod");

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

    // повлиять на игру:
    // return null; // null — игра продолжит как обычно
}

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

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

Rust.opj (Oxide)
void BaseFishingRod.Server_RequestCast(BaseEntity.RPCMessage)

Передаёт: BasePlayer basePlayer, BaseFishingRod baseFishingRod, Item item, Vector3 vector3

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

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

// …
	FailedCast(FailReason.NoLure);
	return;
}
if (!EvaluateFishingPosition(ref pos, ownerPlayer, out var reason, out surfaceBody))
{
	FailedCast(reason);
	return;
}
object result = Interface.CallHook("CanCastFishingRod", ownerPlayer, this, currentLure, pos);
// … проверка результата (Modify-хук, см. Rust.opj)
FishingBobber component = gameManager.CreateEntity(FishingBobberRef.resourcePath, transform.position + Vector3.up * 2.8f + ownerPlayer.eyes.BodyForward() * 1.8f, GetOwnerPlayer().ServerRotation).GetComponent<FishingBobber>();
component.transform.forward = GetOwnerPlayer().eyes.BodyForward();
component.Spawn();
component.InitialiseBobber(ownerPlayer, surfaceBody, pos, 150f);
int usedLureAmount = 0;
bool isOverfished = false;
if (FishLookup.Instance != null)
// …

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