private static void SharedCallOnWeaponShot(ICharacter character, IProtoItemWeapon protoWeapon) { if (IsClient) { // start firing weapon on Client-side WeaponSystemClientDisplay.OnWeaponShot(character, protoWeapon: protoWeapon, fallbackProtoCharacter: character.ProtoCharacter, fallbackPosition: character.Position); } else // if IsServer { using var observers = Api.Shared.GetTempList <ICharacter>(); var eventNetworkRadius = (byte)Math.Max( 15, Math.Ceiling(protoWeapon.SoundPresetWeaponDistance.max)); Server.World.GetCharactersInRadius(character.TilePosition, observers, radius: eventNetworkRadius, onlyPlayers: true); observers.Remove(character); Instance.CallClient(observers, _ => _.ClientRemote_OnWeaponShot(character, protoWeapon, character.ProtoCharacter, character.Position)); } }
private static void SharedCallOnWeaponShot(ICharacter character) { if (IsClient) { // start firing weapon on Client-side WeaponSystemClientDisplay.OnWeaponShot(character); } else // if IsServer { using (var scopedBy = Api.Shared.GetTempList <ICharacter>()) { Server.World.GetScopedByPlayers(character, scopedBy); Instance.CallClient(scopedBy, _ => _.ClientRemote_OnWeaponShot(character)); } } }
private void ClientRemote_OnWeaponShot( ICharacter whoFires, IProtoItemWeapon protoWeapon, IProtoCharacter fallbackProtoCharacter, Vector2D fallbackPosition) { if (whoFires != null && !whoFires.IsInitialized) { whoFires = null; } WeaponSystemClientDisplay.OnWeaponShot(whoFires, protoWeapon, fallbackProtoCharacter, fallbackPosition); }
private void ClientRemote_OnWeaponShot(ICharacter whoFires) { WeaponSystemClientDisplay.OnWeaponShot(whoFires); }