RustTip

OnWeaponFired

OxideCarbonWeapon

Called when a weapon is fired.

void OnWeaponFired(BaseProjectile baseProjectile, BasePlayer player, ItemModProjectile local3, ProtoBuf.ProjectileShoot local2)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

baseProjectile
BaseProjectile
player
BasePlayer
local3
ItemModProjectile
local2
ProtoBuf.ProjectileShoot

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

voidВозвращаемое значение игнорируется — хук только уведомляет.

Пример

private void OnWeaponFired(BaseProjectile baseProjectile, BasePlayer player, ItemModProjectile local3, ProtoBuf.ProjectileShoot local2)
{
    Puts("OnWeaponFired");
}

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

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

Rust.opj (Oxide)
void BaseProjectile.CLProject(BaseEntity.RPCMessage)

Передаёт: BaseProjectile baseProjectile, BasePlayer player, ItemModProjectile local3, ProtoBuf.ProjectileShoot local2

РаботаетReturnBehavior: ContinueArgumentBehavior: UseArgumentString (this, a0.player, l3, l2)Assembly-CSharp.dll

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

// …
}
else if (projectileShoot.projectiles.Count > component.numProjectiles)
{
	AntiHack.Log(player, AntiHackType.ProjectileHack, "Count mismatch (" + ShortPrefabName + ")");
	player.stats.combat.LogInvalid(player, this, "count_mismatch");
}
else
{
	Interface.CallHook("OnWeaponFired", this, msg.player, component, local2);
	if (player.InGesture)
	{
		return;
	}
	SignalBroadcast(Signal.Attack, string.Empty, msg.connection, GetAttackEffect(), maxAttackEffectDistance);
	player.CleanupExpiredProjectiles();
	Guid projectileGroupId = Guid.NewGuid();
	foreach (ProjectileShoot.Projectile projectile in projectileShoot.projectiles)
// …

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