RustTip

OnRfFrequencyChange

OxideRadio
object OnRfFrequencyChange(RFBroadcaster rFBroadcaster, int int32, BasePlayer player)
object OnRfFrequencyChange(RFReceiver rFReceiver, int int32, BasePlayer player)
object OnRfFrequencyChange(Detonator detonator, int freq, BasePlayer player)
object OnRfFrequencyChange(PagerEntity pagerEntity, int int32, BasePlayer player)
Works — the game method in this build is the one the hook was written for.

Parameters

rFBroadcaster
RFBroadcaster
int32
int
player
BasePlayer

Return value

objectReturn a value of the method's result type and the game returns it immediately; null continues as usual.

Example

object — you can affect the game: return a value to change or cancel the action.

private object OnRfFrequencyChange(RFBroadcaster rFBroadcaster, int int32, BasePlayer player)
{
    Puts("OnRfFrequencyChange");

    // change nothing — the game continues as usual
    return null;

    // to affect the game:
    // return null; // null — the game continues as usual
}

Works in both Oxide and Carbon: Carbon loads Oxide plugins as is.

Injection point 1

Rust.opj (Oxide)
void RFBroadcaster.ServerSetFrequency(BaseEntity.RPCMessage)

Passes: RFBroadcaster rFBroadcaster, int int32, BasePlayer player

WorksReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (this, l0, a0.player)Assembly-CSharp.dll

Where it is called (this branch's game code)

// …
	{
		nextChangeTime = Time.time + 2f;
		int num = RFManager.ClampFrequency(msg.read.Int32());
		if (RFManager.IsReserved(num))
		{
			RFManager.ReserveErrorPrint(msg.player);
			return;
		}
		if (Interface.CallHook("OnRfFrequencyChange", this, num, msg.player) != null)
		{
			return;
		}
		SetFrequency(num);
		Hurt(MaxHealth() * 0.01f, DamageType.Decay, this);
	}
}

Injection point 2

Rust.opj (Oxide)
void RFReceiver.ServerSetFrequency(BaseEntity.RPCMessage)

Passes: RFReceiver rFReceiver, int int32, BasePlayer player

WorksReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (this, l0, a0.player)Assembly-CSharp.dll

Where it is called (this branch's game code)

[RPC_Server]
[RPC_Server.IsVisible(3f)]
[RPC_Server.CallsPerSecond(3uL)]
public void ServerSetFrequency(RPCMessage msg)
{
	if (!(msg.player == null) && msg.player.CanBuild())
	{
		int num = RFManager.ClampFrequency(msg.read.Int32());
		if (Interface.CallHook("OnRfFrequencyChange", this, num, msg.player) != null)
		{
			return;
		}
		SetFrequency(num);
	}
}

Injection point 3

Rust.opj (Oxide)
void Detonator.ServerSetFrequency(BasePlayer, int)

Passes: Detonator detonator, int freq, BasePlayer player

WorksReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (this, a1, a0)Assembly-CSharp.dll

Where it is called (this branch's game code)

// …
	return;
}
nextChangeTime = Time.time + 2f;
if (RFManager.IsReserved(freq))
{
	RFManager.ReserveErrorPrint(player);
	return;
}
if (Interface.CallHook("OnRfFrequencyChange", this, freq, player) != null)
{
	return;
}
Item ownerItem = GetOwnerItem();
RFManager.ChangeFrequency(frequency, freq, this, isListener: false, IsOn());
frequency = freq;
SendNetworkUpdate();
Item item = GetItem();
// …

Injection point 4

Rust.opj (Oxide)
void PagerEntity.ServerSetFrequency(BaseEntity.RPCMessage)

Passes: PagerEntity pagerEntity, int int32, BasePlayer player

WorksReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (this, l0, a0.player)Assembly-CSharp.dll

Where it is called (this branch's game code)

[RPC_Server]
[RPC_Server.IsVisible(3f)]
public void ServerSetFrequency(RPCMessage msg)
{
	if (!(msg.player == null) && msg.player.CanBuild() && !(Time.time < nextChangeTime))
	{
		nextChangeTime = Time.time + 2f;
		int newFrequency = msg.read.Int32();
		if (Interface.CallHook("OnRfFrequencyChange", this, newFrequency, msg.player) != null)
		{
			return;
		}
		RFManager.ChangeFrequency(frequency, newFrequency, this, isListener: true);
		frequency = newFrequency;
		SendNetworkUpdateImmediate();
	}
}

Sources: Rust.opj from OxideMod/Oxide.Rust (MIT) and hook metadata of the Carbon documentation (MIT). Method code is decompiled from this branch's server.