RustTip

CanNetworkTo

OxideCarbonNetwork

Called to determine whether to network to.

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

object CanNetworkTo(BaseNetworkable baseNetworkable, BasePlayer player)
object CanNetworkTo(BasePlayer basePlayer, BasePlayer player)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

baseNetworkable
BaseNetworkable
player
BasePlayer

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

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

Пример

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

private object CanNetworkTo(BaseNetworkable baseNetworkable, BasePlayer player)
{
    Puts("CanNetworkTo");

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

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

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

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

Rust.opj (Oxide)
bool BaseNetworkable.ShouldNetworkTo(BasePlayer)

Передаёт: BaseNetworkable baseNetworkable, BasePlayer player

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

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

public virtual bool ShouldNetworkTo(BasePlayer player)
{
	object returnvar = Interface.CallHook("CanNetworkTo", this, player);
	if (returnvar is bool)
	{
		return (bool)returnvar;
	}
	if (net.group == null)
	{
		return true;
	}
// …

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

Rust.opj (Oxide)
bool BasePlayer.ShouldNetworkTo(BasePlayer)

Передаёт: BasePlayer basePlayer, BasePlayer player

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

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

public override bool ShouldNetworkTo(BasePlayer player)
{
	object returnvar = Interface.CallHook("CanNetworkTo", this, player);
	if (returnvar is bool)
	{
		return (bool)returnvar;
	}
	bool flag = ShouldNetworkToSkipOcclusion(player);
	if (flag && ServerOcclusion.OcclusionEnabled && SupportsServerOcclusion() && player.SupportsServerOcclusion() && this != player)
	{
		flag = OcclusionGetCachedVisibility(player);
// …

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