private void btnOk_Click(object sender, EventArgs e) { seers = new Seer[(int)numSpecie.Value]; for (int i = 0; i < seers.Length; i++) { seers[i] = new Seer((int)numInput.Value, (int)numOutput.Value, (int)numLayer.Value); } this.Close(); }
public static void Postfix(Il2CppReferenceArray <GameData.PlayerInfo> JPGEIBIBJPJ) { List <Role> assignedRoles = AssignedSpecialRoles.Values.ToList(); foreach (Role r in assignedRoles) { r.ClearSettings(); } ResetValues(); WriteImmediately(RPC.ResetVariables); List <PlayerControl> crewmates = PlayerControl.AllPlayerControls.ToArray().ToList(); crewmates.RemoveAll(x => x.Data.IsImpostor); Doctor.SetRole(crewmates); Detective.SetRole(crewmates); Engineer.SetRole(crewmates); Maniac.SetRole(crewmates); Seer.SetRole(crewmates); Tracker.SetRole(crewmates); Nocturnal.SetRole(crewmates); Pathfinder.SetRole(crewmates); List <PlayerControl> impostors = PlayerControl.AllPlayerControls.ToArray().ToList(); impostors.RemoveAll(x => !x.Data.IsImpostor); Ninja.SetRole(impostors); Crew.Clear(); localPlayer = PlayerControl.LocalPlayer; bool maniacExists = SpecialRoleIsAssigned <Maniac>(out var maniacKvp); Maniac maniacInstance = maniacKvp.Value; foreach (PlayerControl player in PlayerControl.AllPlayerControls) { if (player.Data.IsImpostor) { continue; } if (maniacExists && maniacInstance.player.PlayerId == player.PlayerId) { continue; } Crew.Add(player); } MessageWriter writer = GetWriter(RPC.SetLocalPlayers); writer.WriteBytesAndSize(Crew.Select(player => player.PlayerId).ToArray()); CloseWriter(writer); }
public SeerOrb(int startframe, float radius, float speed, Seer parent) : base(parent.Position + Vector2.UnitX * radius, "light_orb", 16, 16, Drawing.DrawOrder.FG_SPRITES) { _parent = parent; exists = false; this.radius = radius; rotation_speed = speed; AddAnimation("glow", CreateAnimFrameArray(startframe, startframe + 1, startframe + 2, (startframe + 3) % 5, (startframe + 5) % 5), 10); Play("glow"); }
public void CanCheckAPlayerAlignedToVillage() { var moderator = new Moderator(); moderator.NewPlayer("david", "villager"); var seer = new Seer(moderator); seer.TargetPlayer("david"); moderator.EndNight(); Assert.Equal("villager", seer.PlayerAlignment); }
public void CanCheckAPlayerDiscoverAlignedToWarewolves() { var moderator = new Moderator(); moderator.NewPlayer("david", "werewolf"); var seer = new Seer(moderator); seer.TargetPlayer("david"); moderator.EndNight(); Assert.Equal("werewolf", seer.PlayerAlignment); }
public void MultiplePlayersCanBeDistinguished() { var moderator = new Moderator(); moderator.NewPlayer("david", "werewolf"); moderator.NewPlayer("vince", "villager"); var seer = new Seer(moderator); seer.TargetPlayer("david"); moderator.EndNight(); Assert.Equal("werewolf", seer.PlayerAlignment); }
public void BloodLetterCanMarkPlayerAsWolfPack() { var moderator = new Moderator(); moderator.NewPlayer("vince", "villager"); var bloodLetter = new BloodLetter(moderator); var seer = new Seer(moderator); seer.TargetPlayer("vince"); bloodLetter.TargetPlayer("vince"); moderator.EndNight(); Assert.Equal("werewolf", seer.PlayerAlignment); }
private static void UpdateMeeting(MeetingHud __instance, Seer seer) { foreach (var player in PlayerControl.AllPlayerControls) { if (!seer.Investigated.Contains(player.PlayerId)) { continue; } foreach (var state in __instance.playerStates) { if (player.PlayerId != state.TargetPlayerId) { continue; } var roleType = Utils.GetRole(player); switch (roleType) { case RoleEnum.Crewmate: state.NameText.color = CustomGameOptions.SeerInfo == SeerInfo.Faction ? Color.green : Color.white; state.NameText.text = NameText(player, CustomGameOptions.SeerInfo == SeerInfo.Role ? " (Crew)" : "", true); break; case RoleEnum.Impostor: state.NameText.color = CustomGameOptions.SeerInfo == SeerInfo.Faction ? Color.red : Palette.ImpostorRed; state.NameText.text = NameText(player, CustomGameOptions.SeerInfo == SeerInfo.Role ? " (Imp)" : "", true); break; default: var role = Role.GetRole(player); state.NameText.color = CustomGameOptions.SeerInfo == SeerInfo.Faction ? role.FactionColor : role.Color; state.NameText.text = NameText(player, CustomGameOptions.SeerInfo == SeerInfo.Role ? $" ({role.Name})" : "", true); break; } } } }
private void lTToolStripMenuItem_Click(object sender, EventArgs e) { Seer[] _Seers = new Seer[3]; _Seers[0] = new Seer(108, 36, 6); _Seers[1] = new Seer(108, 36, 6); _Seers[2] = new Seer(108, 36, 6); Seers.AddRange(_Seers); refreshView(); int cappedView = Seers.Count <= 100 ? Seers.Count : 100; for (int i = 0; i < cappedView; i++) { sv.Add(new SeerVisualizer()); sv[i].Parent = flowLayoutPanel1; } }
public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1)] MessageReader reader) { //if (callId >= 43) //System.Console.WriteLine("Received " + callId); byte readByte, readByte1, readByte2; sbyte readSByte, readSByte2; switch ((CustomRPC)callId) { case CustomRPC.SetMayor: readByte = reader.ReadByte(); new Mayor(Utils.PlayerById(readByte)); break; case CustomRPC.SetJester: readByte = reader.ReadByte(); new Jester(Utils.PlayerById(readByte)); break; case CustomRPC.SetSheriff: readByte = reader.ReadByte(); new Sheriff(Utils.PlayerById(readByte)); break; case CustomRPC.SetEngineer: readByte = reader.ReadByte(); new Engineer(Utils.PlayerById(readByte)); break; case CustomRPC.SetJanitor: new Janitor(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetSwapper: readByte = reader.ReadByte(); new Swapper(Utils.PlayerById(readByte)); break; case CustomRPC.SetShifter: readByte = reader.ReadByte(); new Shifter(Utils.PlayerById(readByte)); break; case CustomRPC.SetInvestigator: readByte = reader.ReadByte(); new Investigator(Utils.PlayerById(readByte)); break; case CustomRPC.SetTimeLord: readByte = reader.ReadByte(); new TimeLord(Utils.PlayerById(readByte)); break; case CustomRPC.SetTorch: readByte = reader.ReadByte(); new Torch(Utils.PlayerById(readByte)); break; case CustomRPC.SetDiseased: readByte = reader.ReadByte(); new Diseased(Utils.PlayerById(readByte)); break; case CustomRPC.SetFlash: readByte = reader.ReadByte(); new Flash(Utils.PlayerById(readByte)); break; case CustomRPC.SetMedic: readByte = reader.ReadByte(); new Medic(Utils.PlayerById(readByte)); break; case CustomRPC.SetMorphling: readByte = reader.ReadByte(); new Morphling(Utils.PlayerById(readByte)); break; case CustomRPC.LoveWin: var winnerlover = Utils.PlayerById(reader.ReadByte()); Role.GetRole <Lover>(winnerlover).Win(); break; case CustomRPC.JesterLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Jester) { ((Jester)role).Loses(); } } break; case CustomRPC.PhantomLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Phantom) { ((Phantom)role).Loses(); } } break; case CustomRPC.GlitchLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Glitch) { ((Glitch)role).Loses(); } } break; case CustomRPC.ShifterLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Shifter) { ((Shifter)role).Loses(); } } break; case CustomRPC.ExecutionerLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Executioner) { ((Executioner)role).Loses(); } } break; case CustomRPC.NobodyWins: Role.NobodyWinsFunc(); break; case CustomRPC.SetCouple: byte id = reader.ReadByte(); byte id2 = reader.ReadByte(); bool lovingImpostor = reader.ReadBoolean(); var lover1 = Utils.PlayerById(id); var lover2 = Utils.PlayerById(id2); var roleLover1 = new Lover(lover1, false, lovingImpostor); var roleLover2 = new Lover(lover2, lovingImpostor, lovingImpostor); roleLover1.OtherLover = roleLover2; roleLover2.OtherLover = roleLover1; break; case CustomRPC.Start: Utils.ShowDeadBodies = false; Murder.KilledPlayers.Clear(); Role.NobodyWins = false; RecordRewind.points.Clear(); KillButtonTarget.DontRevive = byte.MaxValue; break; case CustomRPC.JanitorClean: { readByte1 = reader.ReadByte(); var janitorPlayer = Utils.PlayerById(readByte1); var janitorRole = Role.GetRole <Janitor>(janitorPlayer); readByte = reader.ReadByte(); var deadBodies = Object.FindObjectsOfType <DeadBody>(); foreach (var body in deadBodies) { if (body.ParentId == readByte) { Coroutines.Start(Coroutine.CleanCoroutine(body, janitorRole)); } } break; } case CustomRPC.EngineerFix: var engineer = Utils.PlayerById(reader.ReadByte()); Role.GetRole <Engineer>(engineer).UsedThisRound = true; break; case CustomRPC.FixLights: var lights = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>(); lights.ActualSwitches = lights.ExpectedSwitches; break; case CustomRPC.SetExtraVotes: var mayor = Utils.PlayerById(reader.ReadByte()); var mayorRole = Role.GetRole <Mayor>(mayor); mayorRole.ExtraVotes = reader.ReadBytesAndSize().ToList(); if (!mayor.Is(RoleEnum.Mayor)) { mayorRole.VoteBank -= mayorRole.ExtraVotes.Count; } break; case CustomRPC.SetSwaps: readSByte = reader.ReadSByte(); SwapVotes.Swap1 = MeetingHud.Instance.playerStates.FirstOrDefault(x => x.TargetPlayerId == readSByte); readSByte2 = reader.ReadSByte(); SwapVotes.Swap2 = MeetingHud.Instance.playerStates.FirstOrDefault(x => x.TargetPlayerId == readSByte2); PluginSingleton <TownOfUs> .Instance.Log.LogMessage("Bytes received - " + readSByte + " - " + readSByte2); break; case CustomRPC.Shift: readByte1 = reader.ReadByte(); readByte2 = reader.ReadByte(); var shifter = Utils.PlayerById(readByte1); var other = Utils.PlayerById(readByte2); PerformKillButton.Shift(Role.GetRole <Shifter>(shifter), other); break; case CustomRPC.Rewind: readByte = reader.ReadByte(); var TimeLordPlayer = Utils.PlayerById(readByte); var TimeLordRole = Role.GetRole <TimeLord>(TimeLordPlayer); StartStop.StartRewind(TimeLordRole); break; case CustomRPC.Protect: readByte1 = reader.ReadByte(); readByte2 = reader.ReadByte(); var medic = Utils.PlayerById(readByte1); var shield = Utils.PlayerById(readByte2); Role.GetRole <Medic>(medic).ShieldedPlayer = shield; Role.GetRole <Medic>(medic).UsedAbility = true; break; case CustomRPC.RewindRevive: readByte = reader.ReadByte(); RecordRewind.ReviveBody(Utils.PlayerById(readByte)); break; case CustomRPC.AttemptSound: var medicId = reader.ReadByte(); readByte = reader.ReadByte(); StopKill.BreakShield(medicId, readByte, CustomGameOptions.ShieldBreaks); break; case CustomRPC.SetGlitch: var GlitchId = reader.ReadByte(); var GlitchPlayer = Utils.PlayerById(GlitchId); new Glitch(GlitchPlayer); break; case CustomRPC.BypassKill: var killer = Utils.PlayerById(reader.ReadByte()); var target = Utils.PlayerById(reader.ReadByte()); Utils.MurderPlayer(killer, target); break; case CustomRPC.AssassinKill: var toDie = Utils.PlayerById(reader.ReadByte()); AssassinKill.MurderPlayer(toDie); Assassin.AssassinState.RemainingKills--; AddButton.MaybeHideButtons(); break; case CustomRPC.Teleport: byte teleports = reader.ReadByte(); Dictionary <byte, Vector2> coordinates = new Dictionary <byte, Vector2>(); for (int i = 0; i < teleports; i++) { byte playerId = reader.ReadByte(); Vector2 location = reader.ReadVector2(); coordinates.Add(playerId, location); } Teleporter.TeleportPlayersToCoordinates(coordinates); break; case CustomRPC.Conceal: { PlayerControl concealer = Utils.PlayerById(reader.ReadByte()); PlayerControl concealed = Utils.PlayerById(reader.ReadByte()); Concealer role = Role.GetRole <Concealer>(concealer); role.StartConceal(concealed); break; } case CustomRPC.GoCovert: { PlayerControl covert = Utils.PlayerById(reader.ReadByte()); Covert role = Role.GetRole <Covert>(covert); role.GoCovert(); break; } case CustomRPC.SetMimic: var glitchPlayer = Utils.PlayerById(reader.ReadByte()); var mimicPlayer = Utils.PlayerById(reader.ReadByte()); var glitchRole = Role.GetRole <Glitch>(glitchPlayer); glitchRole.MimicTarget = mimicPlayer; glitchRole.IsUsingMimic = true; Utils.Morph(glitchPlayer, mimicPlayer); break; case CustomRPC.RpcResetAnim: var animPlayer = Utils.PlayerById(reader.ReadByte()); var theGlitchRole = Role.GetRole <Glitch>(animPlayer); theGlitchRole.MimicTarget = null; theGlitchRole.IsUsingMimic = false; Utils.Unmorph(theGlitchRole.Player); break; case CustomRPC.GlitchWin: var theGlitch = Role.AllRoles.FirstOrDefault(x => x.RoleType == RoleEnum.Glitch); ((Glitch)theGlitch)?.Wins(); break; case CustomRPC.SetHacked: var hackPlayer = Utils.PlayerById(reader.ReadByte()); if (hackPlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId) { var glitch = Role.AllRoles.FirstOrDefault(x => x.RoleType == RoleEnum.Glitch); ((Glitch)glitch)?.SetHacked(hackPlayer); } break; case CustomRPC.Investigate: { var seer = Utils.PlayerById(reader.ReadByte()); var otherPlayer = Utils.PlayerById(reader.ReadByte()); bool successfulSee = reader.ReadByte() == 1; // TODO: Can this be readBoolean()? Seer role = Role.GetRole <Seer>(seer); role.Investigated.Add(otherPlayer.PlayerId, successfulSee); role.ResetCooldownTimer(); break; } case CustomRPC.SetSeer: new Seer(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Morph: var morphling = Utils.PlayerById(reader.ReadByte()); var morphTarget = Utils.PlayerById(reader.ReadByte()); var morphRole = Role.GetRole <Morphling>(morphling); morphRole.TimeRemaining = CustomGameOptions.MorphlingDuration; morphRole.MorphedPlayer = morphTarget; break; case CustomRPC.SetExecutioner: new Executioner(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetTarget: var executioner = Utils.PlayerById(reader.ReadByte()); var exeTarget = Utils.PlayerById(reader.ReadByte()); var exeRole = Role.GetRole <Executioner>(executioner); exeRole.target = exeTarget; break; case CustomRPC.SetCamouflager: new Camouflager(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Camouflage: var camouflager = Utils.PlayerById(reader.ReadByte()); var camouflagerRole = Role.GetRole <Camouflager>(camouflager); camouflagerRole.TimeRemaining = CustomGameOptions.CamouflagerDuration; Utils.Camouflage(); break; case CustomRPC.SetSpy: new Spy(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.ExecutionerToJester: TargetColor.ExeToJes(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetSnitch: new Snitch(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetMiner: new Miner(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Mine: var ventId = reader.ReadInt32(); var miner = Utils.PlayerById(reader.ReadByte()); var minerRole = Role.GetRole <Miner>(miner); var pos = reader.ReadVector2(); var zAxis = reader.ReadSingle(); PerformKill.SpawnVent(ventId, minerRole, pos, zAxis); break; case CustomRPC.SetSwooper: new Swooper(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Swoop: var swooper = Utils.PlayerById(reader.ReadByte()); var swooperRole = Role.GetRole <Swooper>(swooper); swooperRole.TimeRemaining = CustomGameOptions.SwoopDuration; swooperRole.Swoop(); break; case CustomRPC.SetGrenadier: new Grenadier(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.FlashGrenade: PlayerControl grenadier = Utils.PlayerById(reader.ReadByte()); Grenadier grenadierRole = Role.GetRole <Grenadier>(grenadier); grenadierRole.TimeRemaining = CustomGameOptions.GrenadeDuration; grenadierRole.Flash(); break; case CustomRPC.SetTiebreaker: new Tiebreaker(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetDrunk: new Drunk(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetArsonist: new Arsonist(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Douse: var arsonist = Utils.PlayerById(reader.ReadByte()); var douseTarget = Utils.PlayerById(reader.ReadByte()); var arsonistRole = Role.GetRole <Arsonist>(arsonist); arsonistRole.DousedPlayers.Add(douseTarget.PlayerId); arsonistRole.ResetCooldownTimer(); break; case CustomRPC.Ignite: var theArsonist = Utils.PlayerById(reader.ReadByte()); var theArsonistRole = Role.GetRole <Arsonist>(theArsonist); global::TownOfUs.NeutralRoles.ArsonistMod.PerformKill.Ignite(theArsonistRole); break; case CustomRPC.ArsonistWin: var theArsonistTheRole = Role.AllRoles.FirstOrDefault(x => x.RoleType == RoleEnum.Arsonist); ((Arsonist)theArsonistTheRole)?.Wins(); break; case CustomRPC.ArsonistLose: foreach (var role in Role.AllRoles) { if (role.RoleType == RoleEnum.Arsonist) { ((Arsonist)role).Loses(); } } break; case CustomRPC.SetImpostor: new Impostor(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetCrewmate: new Crewmate(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SyncCustomSettings: Rpc.ReceiveRpc(reader); break; case CustomRPC.SetAltruist: new Altruist(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetProphet: new Prophet(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetCovert: new Covert(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetBigBoi: new BigBoiModifier(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.AltruistRevive: { readByte1 = reader.ReadByte(); var altruistPlayer = Utils.PlayerById(readByte1); var altruistRole = Role.GetRole <Altruist>(altruistPlayer); readByte = reader.ReadByte(); var theDeadBodies = Object.FindObjectsOfType <DeadBody>(); foreach (var body in theDeadBodies) { if (body.ParentId == readByte) { if (body.ParentId == PlayerControl.LocalPlayer.PlayerId) { Coroutines.Start(Utils.FlashCoroutine(altruistRole.Color, CustomGameOptions.ReviveDuration, 0.5f)); } Coroutines.Start( global::TownOfUs.CrewmateRoles.AltruistMod.Coroutine.AltruistRevive(body, altruistRole)); } } break; } case CustomRPC.FixAnimation: { var player = Utils.PlayerById(reader.ReadByte()); player.MyPhysics.ResetMoveState(); player.Collider.enabled = true; player.moveable = true; player.NetTransform.enabled = true; break; } case CustomRPC.SetButtonBarry: new ButtonBarry(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetCoroner: new Coroner(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetCarnivore: new Carnivore(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.BarryButton: var buttonBarry = Utils.PlayerById(reader.ReadByte()); if (AmongUsClient.Instance.AmHost) { MeetingRoomManager.Instance.reporter = buttonBarry; MeetingRoomManager.Instance.target = null; AmongUsClient.Instance.DisconnectHandlers.AddUnique(MeetingRoomManager.Instance .Cast <IDisconnectHandler>()); if (ShipStatus.Instance.CheckTaskCompletion()) { return; } DestroyableSingleton <HudManager> .Instance.OpenMeetingRoom(buttonBarry); buttonBarry.RpcStartMeeting(null); } break; case CustomRPC.CoronerReveal: { PlayerControl player = Utils.PlayerById(reader.ReadByte()); Coroner coroner = Modifier.GetModifier <Coroner>(player); byte eatenId = reader.ReadByte(); coroner.Reveal(eatenId); break; } case CustomRPC.CarnivoreEat: { PlayerControl player = Utils.PlayerById(reader.ReadByte()); Carnivore carnivore = Modifier.GetModifier <Carnivore>(player); byte eatenId = reader.ReadByte(); carnivore.Eat(eatenId); break; } case CustomRPC.SetUndertaker: new Undertaker(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.Drag: { readByte1 = reader.ReadByte(); var dienerPlayer = Utils.PlayerById(readByte1); var dienerRole = Role.GetRole <Undertaker>(dienerPlayer); readByte = reader.ReadByte(); var dienerBodies = Object.FindObjectsOfType <DeadBody>(); foreach (var body in dienerBodies) { if (body.ParentId == readByte) { dienerRole.CurrentlyDragging = body; } } break; } case CustomRPC.Drop: { byte undertakerId = reader.ReadByte(); Vector2 deadBodyVector = reader.ReadVector2(); var dienerPlayer2 = Utils.PlayerById(undertakerId); var dienerRole2 = Role.GetRole <Undertaker>(dienerPlayer2); var body = dienerRole2.CurrentlyDragging; dienerRole2.CurrentlyDragging = null; body.TruePosition.Set(deadBodyVector.x, deadBodyVector.y); break; } case CustomRPC.SetUnderdog: new Underdog(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetTeleporter: new Teleporter(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetConcealer: new Concealer(Utils.PlayerById(reader.ReadByte())); break; case CustomRPC.SetPhantom: readByte = reader.ReadByte(); SetPhantom.WillBePhantom = readByte == byte.MaxValue ? null : Utils.PlayerById(readByte); break; case CustomRPC.PhantomDied: var phantom = SetPhantom.WillBePhantom; Role.RoleDictionary.Remove(phantom.PlayerId); var phantomRole = new Phantom(phantom); phantomRole.RegenTask(); phantom.gameObject.layer = LayerMask.NameToLayer("Players"); SetPhantom.RemoveTasks(phantom); SetPhantom.AddCollider(phantomRole); PlayerControl.LocalPlayer.MyPhysics.ResetMoveState(); System.Console.WriteLine("Become Phantom - Users"); break; case CustomRPC.CatchPhantom: var phantomPlayer = Utils.PlayerById(reader.ReadByte()); Role.GetRole <Phantom>(phantomPlayer).Caught = true; break; case CustomRPC.PhantomWin: Role.GetRole <Phantom>(Utils.PlayerById(reader.ReadByte())).CompletedTasks = true; break; case CustomRPC.AddMayorVoteBank: Role.GetRole <Mayor>(Utils.PlayerById(reader.ReadByte())).VoteBank += reader.ReadInt32(); break; } }
public static void ReEnableGameplay() { // Reset custom button timers where necessary CustomButton.MeetingEndedUpdate(); // Update admin timer text MapOptions.MeetingEndedUpdate(); // Custom role post-meeting functions TheOtherRolesGM.OnMeetingEnd(); // Mini set adapted cooldown if (PlayerControl.LocalPlayer.hasModifier(ModifierType.Mini) && PlayerControl.LocalPlayer.Data.Role.IsImpostor) { var multiplier = Mini.isGrownUp(PlayerControl.LocalPlayer) ? 0.66f : 2f; PlayerControl.LocalPlayer.SetKillTimer(PlayerControl.GameOptions.KillCooldown * multiplier); } // Seer spawn souls if (Seer.deadBodyPositions != null && Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && (Seer.mode == 0 || Seer.mode == 2)) { foreach (Vector3 pos in Seer.deadBodyPositions) { GameObject soul = new GameObject(); // soul.transform.position = pos; soul.transform.position = new Vector3(pos.x, pos.y, pos.y / 1000 - 1f); soul.layer = 5; var rend = soul.AddComponent <SpriteRenderer>(); soul.AddSubmergedComponent(SubmergedCompatibility.Classes.ElevatorMover); rend.sprite = Seer.getSoulSprite(); if (Seer.limitSoulDuration) { HudManager.Instance.StartCoroutine(Effects.Lerp(Seer.soulDuration, new Action <float>((p) => { if (rend != null) { var tmp = rend.color; tmp.a = Mathf.Clamp01(1 - p); rend.color = tmp; } if (p == 1f && rend != null && rend.gameObject != null) { UnityEngine.Object.Destroy(rend.gameObject); } }))); } } Seer.deadBodyPositions = new List <Vector3>(); } // Tracker reset deadBodyPositions Tracker.deadBodyPositions = new List <Vector3>(); // Arsonist deactivate dead poolable players Arsonist.updateIcons(); // Force Bounty Hunter Bounty Update if (BountyHunter.bountyHunter != null && BountyHunter.bountyHunter == PlayerControl.LocalPlayer) { BountyHunter.bountyUpdateTimer = 0f; } // Medium spawn souls if (Medium.medium != null && PlayerControl.LocalPlayer == Medium.medium) { if (Medium.souls != null) { foreach (SpriteRenderer sr in Medium.souls) { UnityEngine.Object.Destroy(sr.gameObject); } Medium.souls = new List <SpriteRenderer>(); } if (Medium.featureDeadBodies != null) { foreach ((DeadPlayer db, Vector3 ps) in Medium.featureDeadBodies) { GameObject s = new GameObject(); // s.transform.position = ps; s.transform.position = new Vector3(ps.x, ps.y, ps.y / 1000 - 1f); s.layer = 5; var rend = s.AddComponent <SpriteRenderer>(); s.AddSubmergedComponent(SubmergedCompatibility.Classes.ElevatorMover); rend.sprite = Medium.getSoulSprite(); Medium.souls.Add(rend); } Medium.deadBodies = Medium.featureDeadBodies; Medium.featureDeadBodies = new List <Tuple <DeadPlayer, Vector3> >(); } } if (Lawyer.lawyer != null && PlayerControl.LocalPlayer == Lawyer.lawyer && !Lawyer.lawyer.Data.IsDead) { Lawyer.meetings++; } if (PlayerControl.LocalPlayer.hasModifier(ModifierType.AntiTeleport)) { if (AntiTeleport.position != new Vector3()) { PlayerControl.LocalPlayer.transform.position = AntiTeleport.position; if (SubmergedCompatibility.isSubmerged()) { SubmergedCompatibility.ChangeFloor(AntiTeleport.position.y > -7); } } } // Remove DeadBodys DeadBody[] array = UnityEngine.Object.FindObjectsOfType <DeadBody>(); for (int i = 0; i < array.Length; i++) { UnityEngine.Object.Destroy(array[i].gameObject); } }
public async Task PlayAsync() { try { CreateStack(); WriteDebug($"Laps : {Laps}"); var done = false; while (Moments.Count > 0 && !done) { WriteDebug($"Moment Active : {Moments.Peek()}"); foreach (var moment in Moments.ToArray()) { WriteDebug($"Moment in pile : {moment}"); } switch (Moments.Pop()) { case Moment.Voting: await BotFunctions.DailyVote(); break; case Moment.HunterDead: await Hunter.HunterDeath(); break; case Moment.EndNight: await BotFunctions.EndNight(); await BotFunctions.DayAnnoucement(); break; case Moment.NightPhase1: await BotFunctions.NightAnnoucement(); await Wolf.WolfVote(); await Seer.SeerAction(); await LittleGirl.LittleGirlAction(); break; case Moment.NightPhase2: await Witch.WitchMoment(); break; case Moment.Election: await BotFunctions.Elections(); break; case Moment.Cupid: await Cupidon.CupidonChoice(); break; case Moment.End: done = true; break; default: throw new ArgumentOutOfRangeException(); } } } catch (Exception e) { Console.WriteLine(e); } }