public void OnSpawning(SpawningEventArgs ev) { if (Tracking.PlayersInvisibleByCommand.Contains(ev.Player)) { Tracking.PlayersInvisibleByCommand.Remove(ev.Player); } Timing.CallDelayed(Subclass.Instance.CommonUtilsEnabled ? 2f : 0.1f, () => { Tracking.QueuedCassieMessages.Clear(); if (Tracking.NextSpawnWave.Contains(ev.Player) && Tracking.NextSpawnWaveGetsRole.ContainsKey(ev.Player.Role)) { Tracking.RemoveAndAddRoles(ev.Player, true); Tracking.AddClass(ev.Player, Tracking.NextSpawnWaveGetsRole[ev.Player.Role]); } else { if (!Tracking.PlayersWithSubclasses.ContainsKey(ev.Player)) { Tracking.RemoveAndAddRoles(ev.Player, false, Subclass.Instance.Scp035Enabled && scp035.API.Scp035Data.GetScp035()?.Id == ev.Player.Id); } } foreach (string message in Tracking.QueuedCassieMessages) { Cassie.Message(message, true, false); Log.Debug($"Sending message via cassie: {message}", Subclass.Instance.Config.Debug); } Tracking.CheckRoundEnd(); }); }
public void OnDied(DiedEventArgs ev) { if (Tracking.PlayersInvisibleByCommand.Contains(ev.Target)) { Tracking.PlayersInvisibleByCommand.Remove(ev.Target); } if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Target) && Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.ExplodeOnDeath)) { GrenadeManager grenadeManager = ev.Target.ReferenceHub.gameObject.GetComponent <GrenadeManager>(); GrenadeSettings settings = grenadeManager.availableGrenades.FirstOrDefault(g => g.inventoryID == ItemType.GrenadeFrag); Grenade grenade = UnityEngine.Object.Instantiate(settings.grenadeInstance).GetComponent <Grenade>(); grenade.fuseDuration = Tracking.PlayersWithSubclasses[ev.Target].FloatOptions.ContainsKey("ExplodeOnDeathFuseTimer") ? Tracking.PlayersWithSubclasses[ev.Target].FloatOptions["ExplodeOnDeathFuseTimer"] : 2f; grenade.FullInitData(grenadeManager, ev.Target.Position, Quaternion.Euler(grenade.throwStartAngle), grenade.throwLinearVelocityOffset, grenade.throwAngularVelocity); NetworkServer.Spawn(grenade.gameObject); } Tracking.AddPreviousTeam(ev.Target); Tracking.RemoveZombie(ev.Target); Tracking.RemoveAndAddRoles(ev.Target, true); Timing.CallDelayed(0.1f, () => { Tracking.CheckRoundEnd(); }); }
public void OnChangingRole(ChangingRoleEventArgs ev) { if (Tracking.PlayersInvisibleByCommand.Contains(ev.Player)) { Tracking.PlayersInvisibleByCommand.Remove(ev.Player); } Tracking.RemoveZombie(ev.Player); Timing.CallDelayed(Subclass.Instance.CommonUtilsEnabled ? 2f : 0.1f, () => { Tracking.QueuedCassieMessages.Clear(); Tracking.RemoveAndAddRoles(ev.Player, false, Subclass.Instance.Scp035Enabled && scp035.API.Scp035Data.GetScp035()?.Id == ev.Player.Id); foreach (string message in Tracking.QueuedCassieMessages) { Cassie.Message(message, true, false); Log.Debug($"Sending message via cassie: {message}", Subclass.Instance.Config.Debug); } Tracking.CheckRoundEnd(); }); }