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);
        }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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;
                    }
                }
            }
        }
Beispiel #9
0
        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;
            }
        }
Beispiel #10
0
            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;
                }
            }
Beispiel #11
0
        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);
            }
        }
Beispiel #12
0
        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);
            }
        }