Exemplo n.º 1
0
        internal static async Task <Telegram.Bot.Types.Message> Send(string message, long id, bool clearKeyboard = false,
                                                                     InlineKeyboardMarkup customMenu             = null,
                                                                     Werewolf game = null, bool notify = false)
        {
            MessagesSent++;
            //message = message.FormatHTML();
            //message = message.Replace("`",@"\`");
            if (clearKeyboard)
            {
                var menu = new ReplyKeyboardRemove {
                    RemoveKeyboard = true
                };
                return(await Bot.SendTextMessageAsync(id, message, replyMarkup : menu, disableWebPagePreview : true,
                                                      parseMode : ParseMode.Html, disableNotification : notify));
            }

            if (customMenu != null)
            {
                return(await Bot.SendTextMessageAsync(id, message, replyMarkup : customMenu, disableWebPagePreview : true,
                                                      parseMode : ParseMode.Html, disableNotification : notify));
            }

            return(await Bot.SendTextMessageAsync(id, message, disableWebPagePreview : true,
                                                  parseMode : ParseMode.Html, disableNotification : notify));
        }
Exemplo n.º 2
0
        public void testGetPlayersWithRole(String roleName)
        {
            // Arrange
            Role role;

            if (roleName.Equals("Werewolf"))
            {
                role = new Werewolf();
            }
            else
            {
                role = new Villager();
            }
            String[]  playerNames = { "test", "test", "test", "test", "test", "test", "test", "test", "test" };
            GameState gs          = new GameState(playerNames);

            // Act
            Player[] players = gs.getPlayersWithRole(role);

            // Assert
            foreach (Player player in players)
            {
                Assert.AreEqual(player.getRole().GetType(), role.GetType());
            }
        }
Exemplo n.º 3
0
    /// <summary>
    /// Creates the NPC's at the beginning of a round.
    /// </summary>
    public void CreateNPCs()
    {
        DestroyNPCs();

        if (numberOfVillagers > Managers.Spawn.VillagerSpawns ||
            numberOfWerewolves > Managers.Spawn.WerewolfSpawns)
        {
            Debug.LogError("Too many villagers/werewolves for the spawn points we have");
        }

        for (int i = 0; i < numberOfVillagers; i++)
        {
            Villager villager = ((GameObject)Instantiate(villagerPrefab)).GetComponent <Villager>();
            Managers.Spawn.SpawnVillager(villager, i);

            villager.path = villagerPaths[i % villagerPaths.Count];
            villagers.Add(villager);
        }

        for (int i = 0; i < numberOfWerewolves; i++)
        {
            Werewolf wolf = ((GameObject)Instantiate(werewolfPrefab)).GetComponent <Werewolf>();
            Managers.Spawn.SpawnWerewolf(wolf, i);

            wolf.path = werewolfPaths[i % werewolfPaths.Count];
            werewolves.Add(wolf);
        }
    }
Exemplo n.º 4
0
        public static void RemoveGame(Werewolf werewolf)
        {
            try
            {
                if (werewolf?.Players != null)
                {
                    TotalPlayers += werewolf.Players.Count();
                }
                if (werewolf != null && werewolf.Players != null)
                {
                    if (werewolf.GameStatsMsg != 0)
                    {
                        werewolf.UpdateGameStatsMsg(-1);
                    }
                    if (werewolf.OriginalPinnedMsg != 0)
                    {
                        Bot.PinChatMessageAsync(werewolf.ChatId, werewolf.OriginalPinnedMsg, true);
                    }

                    werewolf.MessageQueueing = false; // shut off the queue to be sure
                    Games.Remove(werewolf);
                    //kill the game completely
                    werewolf.Dispose();
                    werewolf = null;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error in RemoveGame: " + ex.Message);
            }
        }
 // Return role array with number each role based on the amount of players.
 private static Role[] getRoleArray(int nPlayers)
 {
     int[] nPlayersPerRole = new int[2];
     if (nPlayers <= 8)
     {
         nPlayersPerRole[0] = nPlayers - 1;
         nPlayersPerRole[1] = 1;
     }
     else if (nPlayers >= 9 && nPlayers <= 12)
     {
         nPlayersPerRole[0] = nPlayers - 2;
         nPlayersPerRole[1] = 2;
     }
     else
     {
         nPlayersPerRole[0] = nPlayers - 3;
         nPlayersPerRole[1] = 3;
     }
     Role[] roleArray = new Role[nPlayers];
     for (int i = 0; i < nPlayers; i++)
     {
         if (i < nPlayersPerRole[0])
         {
             roleArray[i] = new Villager();
         }
         else
         {
             roleArray[i] = new Werewolf();
         }
     }
     return(roleArray);
 }
    private void Start()
    {
        cntEnteredChild = 0;

        wolfController = GetComponentInParent <Werewolf>();

        expandedVisionCollider         = GetComponent <SphereCollider>();
        expandedVisionCollider.enabled = false;

        normalVisionCollider         = GetComponent <BoxCollider>();
        normalVisionCollider.enabled = true;

        meat = new List <GameObject>();
    }
Exemplo n.º 7
0
        public static Werewolf GetEnemyObject(bool isTransformed)
        {
            var enemy = new Werewolf()
            {
                Name        = "Werewolf",
                Damage      = 5,
                Armour      = 4,
                HitPoints   = 10,
                Transformed = isTransformed,
                Alive       = true
            };

            return(enemy);
        }
Exemplo n.º 8
0
    public override Hero Get_Instance()
    {
        if (_instance == null)
        {
            _instance = new Werewolf();
            _instance.Start();
            return(_instance);
        }

        else
        {
            return(_instance);
        }
    }
Exemplo n.º 9
0
        public static Monster CreateMonster(int level, Point location)
        {
            Pool <Monster> monsterPool = new Pool <Monster>();

            monsterPool.Add(Kobold.Create(level), 25);
            monsterPool.Add(Imp.Create(level), 25);
            monsterPool.Add(Goblin.Create(level), 50);
            monsterPool.Add(Werewolf.Create(level), 50);

            Monster monster = monsterPool.Get();

            monster.X = location.X;
            monster.Y = location.Y;

            return(monster);
        }
Exemplo n.º 10
0
        public static Werewolf CreateWerewolf(object userInput, Player player)
        {
            Werewolf selectedEnemyType = (Werewolf)userInput;
            var      state             = selectedEnemyType.Transformed ? IsTransformed.Transformed.ToString() : IsTransformed.NonTransformed.ToString(); // ToDo: this can be replaced by the enum instead of using strings

            UserDialogue.SelectedEnemy(state, selectedEnemyType.Name);

            if (selectedEnemyType.Transformed)
            {
                selectedEnemyType.Damage += 3;

                UserDialogue.DamageIncrease(selectedEnemyType.Damage);
            }

            UserDialogue.ShowEnemyStats(selectedEnemyType.Damage, selectedEnemyType.Armour, selectedEnemyType.HitPoints);
            return(selectedEnemyType);
        }
Exemplo n.º 11
0
 public static void RemoveGame(Werewolf werewolf)
 {
     try
     {
         if (werewolf.Players != null)
         {
             TotalPlayers += werewolf.Players.Count();
         }
         Games.Remove(werewolf);
         //kill the game completely
         werewolf.Dispose();
         werewolf = null;
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Error in RemoveGame: " + ex.Message);
     }
 }
        public void testPlayerInitialization(string roleName)
        {
            Role role;

            if (roleName == "Werewolf")
            {
                role = new Werewolf();
            }
            else
            {
                role = new Villager();
            }
            Player player = new Player("test", role);

            Assert.AreEqual("test", player.getName());
            Assert.AreEqual(role.GetType().Name, player.getRole().GetType().Name);
            Assert.IsTrue(player.getVotes() == 0);
            Assert.IsFalse(player.hasVoted());
            Assert.IsTrue(player.checkPulse());
        }
Exemplo n.º 13
0
    protected Werewolf GetClosestWerewolf()
    {
        Werewolf closest = null;
        float    dist    = float.MaxValue;
        float    curDist = 0;

        foreach (Werewolf werewolf in Managers.Entity.Werewolves)
        {
            if (werewolf.gameObject.activeInHierarchy)
            {
                curDist = Vector3.Distance(this.Position, werewolf.Position);
                if (curDist < dist)
                {
                    closest = werewolf;
                    dist    = curDist;
                }
            }
        }

        return(closest);
    }
Exemplo n.º 14
0
 public static void RemoveGame(Werewolf werewolf)
 {
     try
     {
         if (werewolf?.Players != null)
         {
             TotalPlayers += werewolf.Players.Count();
         }
         if (werewolf != null)
         {
             werewolf.MessageQueueing = false; // shut off the queue to be sure
             Games.Remove(werewolf);
             //kill the game completely
             werewolf.Dispose();
             werewolf = null;
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Error in RemoveGame: " + ex.Message);
     }
 }
Exemplo n.º 15
0
        static void Main(string[] args)
        {
            Werewolf newPlayer   = new Werewolf("Bozo");
            Vampire  otherPlayer = new Vampire();
            Werewolf wolfie      = new Werewolf("Wolfie");
            Skeleton skelz       = new Skeleton("Skelly");

            wolfie.Attack(skelz, 5);
            skelz.Attack(wolfie, 500);

            Barracks homeBase = new Barracks();

            homeBase.AddRecruit(newPlayer);
            homeBase.AddRecruit(otherPlayer);
            homeBase.AddRecruit(wolfie);
            homeBase.AddRecruit(skelz);

            skelz.Attack(homeBase, 3);


            homeBase.Rally();
        }
Exemplo n.º 16
0
 internal static async Task <Telegram.Bot.Types.Message> Send(string message, long id, bool clearKeyboard = false, InlineKeyboardMarkup customMenu = null, Werewolf game = null)
 {
     MessagesSent++;
     //message = message.Replace("`",@"\`");
     if (clearKeyboard)
     {
         var menu = new ReplyKeyboardHide {
             HideKeyboard = true
         };
         return(await Bot.SendTextMessage(id, message, replyMarkup : menu, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
     else if (customMenu != null)
     {
         return(await Bot.SendTextMessage(id, message, replyMarkup : customMenu, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
     else
     {
         return(await Bot.SendTextMessage(id, message, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
 }
Exemplo n.º 17
0
 public void SpawnWerewolf(Werewolf wolf, int index = 0)
 {
     wolf.transform.position = werewolfSpawnLocations[
         (index == -1) ? Random.Range(0, WerewolfSpawns) : index];
     //wolf.SetGenes(GenePool.PopWerewolfGene());
 }
Exemplo n.º 18
0
        public void CheckWerewolfAttackBite()
        {
            var monster = new Werewolf();

            Assert.AreEqual("Bite!", monster.Attack());
        }
Exemplo n.º 19
0
        private static void ClientOnDataReceived(object sender, Message message)
        {
            try
            {
                var messages = message.MessageString.Split('\u0013');
                foreach (var msg in messages)
                {
                    if (msg == "ping" || String.IsNullOrWhiteSpace(msg))
                    {
                        return;                                                  //ignore
                    }
                    if (msg.StartsWith("reload:"))
                    {
                        ReloadLang(msg.Substring("reload:".Length));
                        return;
                    }

                    string t = null;
                    try
                    {
                        dynamic m = JsonConvert.DeserializeObject(msg);
                        t = m.JType?.ToString();
                    }
                    catch (Exception)
                    {
                        //Bot.SendTextMessage(Settings.MainChatId, e.Message);
                        continue;
                    }
                    Werewolf game;
                    if (t != null)
                    {
                        Console.WriteLine(t);
                        switch (t)
                        {
                        case "PlayerJoinInfo":
                            var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg);
                            game = Games.FirstOrDefault(x => x.Guid == pji.GameId);
                            game?.AddPlayer(pji.User);
                            break;

                        case "GameStartInfo":
                            var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg);
                            try
                            {
                                //double check we don't already have a game...
                                game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id);
                                if (game != null)
                                {
                                    game.ShowJoinButton();
                                }
                                else
                                {
                                    game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title,
                                                        gsi.Chaos);
                                    Games.Add(game);
                                    GamesStarted++;
                                }
                            }
                            catch (Exception e)
                            {
                                Bot.SendTextMessageAsync(ErrorGroup, $"Error Occured during Node <code>{ClientId}</code> processing <code>GameStartInfo</code>:\n\n{e.ToString()}\n\nData:\n{gsi.ToString()}", ParseMode.Html);
                            }
                            break;

                        case "ForceStartInfo":
                            var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId);
                            game?.ForceStart();
                            break;

                        //case "ReplyInfo":
                        //    var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg);
                        //    game =
                        //        Games.FirstOrDefault(
                        //            x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead));
                        //    game?.HandleReply(ri.Update);
                        //    break;
                        case "CallbackInfo":
                            var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg);
                            game =
                                Games.FirstOrDefault(
                                    x =>     //x.Players?.Any(p => p != null && !p.IsDead && p.TeleUser.Id == ci.Query.From.Id) ?? false);
                                    x.Guid == ci.GameId);
                            game?.HandleReply(ci.Query);
                            break;

                        case "PlayerListRequestInfo":
                            var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId);
                            game?.OutputPlayers();
                            break;

                        case "PlayerFleeInfo":
                            var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId);
                            game?.RemovePlayer(pfi.User);
                            break;

                        case "LoadLangInfo":
                            var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId);
                            game?.LoadLanguage(lli.FileName);
                            break;

                        case "PlayerSmiteInfo":
                            var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId);
                            game?.FleePlayer(psi.UserId);
                            break;

                        case "UpdateNodeInfo":
                            var uni = JsonConvert.DeserializeObject <UpdateNodeInfo>(msg);
                            IsShuttingDown = true;
                            if (uni.Kill)
                            {
                                //force kill
                                Environment.Exit(1);
                            }
                            break;

                        case "SkipVoteInfo":
                            var svi = JsonConvert.DeserializeObject <SkipVoteInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId);
                            game?.SkipVote();
                            break;

                        case "GameKillInfo":
                            var gki = JsonConvert.DeserializeObject <GameKillInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == gki.GroupId);
                            game?.Kill();
                            break;

                        case "GetGameInfo":
                            var ggi = JsonConvert.DeserializeObject <GetGameInfo>(msg);
                            var g   = Games.FirstOrDefault(x => x.ChatId == ggi.GroupId);
                            if (g == null)
                            {
                                message.Reply("null");
                            }
                            //build our response
                            var gi = new GameInfo
                            {
                                Language  = g.Language,
                                ChatGroup = g.ChatGroup,
                                GroupId   = g.ChatId,
                                NodeId    = ClientId,
                                Guid      = g.Guid,
                                Cycle     = g.Time,
                                State     = g.IsRunning ? GameState.Running : g.IsJoining ? GameState.Joining : GameState.Dead,
                                Users     = new HashSet <int>(g.Players?.Where(x => !x.IsDead)?.Select(x => x.TeleUser.Id) ?? new[] { 0 }),
                                Players   = g.Players?.Select(x => new
                                {
                                    Bitten = x.Bitten?"Yes":"No",
                                    x.Bullet,
                                    Choice          = g.Players.FirstOrDefault(p => p.Id == x.Choice)?.Name,
                                    CurrentQuestion = x.CurrentQuestion?.QType.ToString(),
                                    x.DonationLevel,
                                    IsDead = x.IsDead?"Yes":"No",
                                    x.Name,
                                    LoverId    = g.Players.FirstOrDefault(p => p.Id == x.LoverId)?.Name,
                                    PlayerRole = x.PlayerRole.ToString(),
                                    Team       = x.Team.ToString(),
                                    x.Votes,
                                    x.Id
                                })
                            };
                            message.Reply(JsonConvert.SerializeObject(gi));
                            break;

                        case "ExtendTimeInfo":
                            var eti = JsonConvert.DeserializeObject <ExtendTimeInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == eti.GroupId);
                            game?.ExtendTime(eti.User, eti.Admin, eti.Seconds);
                            break;

                        case "JoinButtonRequestInfo":
                            var jbri = JsonConvert.DeserializeObject <JoinButtonRequestInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == jbri.GroupId);
                            game?.ShowJoinButton();
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine(jbri.GroupId);
                            Console.ForegroundColor = ConsoleColor.Gray;
                            break;

                        default:
                            Console.WriteLine(msg);
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message + "\n" + message.MessageString);
                try
                {
                    Directory.CreateDirectory(Path.Combine(RootDirectory, "ReceiveErrors"));
                    using (var sw = new StreamWriter(Path.Combine(RootDirectory, "ReceiveErrors", "error.log"), true))
                    {
                        sw.WriteLine(e.Message + Environment.NewLine + message.MessageString + Environment.NewLine +
                                     e.StackTrace);
                    }
                }
                catch
                {
                    // ignored
                }
            }
        }
Exemplo n.º 20
0
        public void CheckWerewolfDefendRun()
        {
            var monster = new Werewolf();

            Assert.AreEqual("Run away!", monster.Defend());
        }
Exemplo n.º 21
0
        public void CheckWerewolfStringLycanthrope()
        {
            var monster = new Werewolf();

            Assert.AreEqual("I am a Lycanthrope!", monster.ToString());
        }
Exemplo n.º 22
0
        // Methods
        private static string GetResult(Role role)
        {
            switch (role)
            {
            case Investigator _: return($"{role.Owner.Data.PlayerName} gathers information about people. They must be an {Investigator.GetName()}.");

            case Lookout _: return($"{role.Owner.Data.PlayerName} watches who visits people at night. They must be a {Lookout.GetName()}.");

            case Psychic _: return($"{role.Owner.Data.PlayerName} has the sight. They must be a {Psychic.GetName()}.");

            case Sheriff _: return($"{role.Owner.Data.PlayerName} is a protector of the {Faction.Crew.Name}. They must be a {Sheriff.GetName()}.");

            case Spy _: return($"{role.Owner.Data.PlayerName} secretly watches who someone visits. They must be a {Spy.GetName()}.");

            case Tracker _: return($"{role.Owner.Data.PlayerName} is a skilled in the art of tracking. They must be a {Tracker.GetName()}.");

            case Jailor _:        return($"{role.Owner.Data.PlayerName} detains people at night. They must be a {Jailor.GetName()}.");

            case VampireHunter _: return($"{role.Owner.Data.PlayerName} tracks Vampires. They must be a {VampireHunter.GetName()}!");

            case Veteran _:       return($"{role.Owner.Data.PlayerName} is a paranoid war hero. They must be a {Veteran.GetName()}.");

            case Vigilante _: return($"{role.Owner.Data.PlayerName} will bend the law to enact justice. They must be a {Vigilante.GetName()}.");

            case Bodyguard _: return($"{role.Owner.Data.PlayerName} is a trained protector. They must be a {Bodyguard.GetName()}.");

            case Doctor _:    return($"{role.Owner.Data.PlayerName} is a professional surgeon. They must be a {Doctor.GetName()}.");

            case Crusader _:  return($"{role.Owner.Data.PlayerName} is a divine protector. They must be a {Crusader.GetName()}.");

            case Trapper _:   return($"{role.Owner.Data.PlayerName} is waiting for a big catch. They must be a {Trapper.GetName()}.");

            case Escort _: return($"{role.Owner.Data.PlayerName} is a beautiful person working for the {Faction.Crew.Name}. They must be an {Escort.GetName()}.");

            case Mayor _: return($"{role.Owner.Data.PlayerName} is the leader of the {Faction.Crew.Name}. They must be the {Mayor.GetName()}.");

            case Medium _: return($"{role.Owner.Data.PlayerName} speaks with the dead. They must be a {Medium.GetName()}.");

            case Retributionist _: return($"{role.Owner.Data.PlayerName} wields mystical powers. They must be a {Retributionist.GetName()}.");

            case Transporter _: return($"{role.Owner.Data.PlayerName} specializes in transportation. They must be a {Transporter.GetName()}.");

            case Disguiser _: return($"{role.Owner.Data.PlayerName} makes other people appear to be someone they're not. They must be a {Disguiser.GetName()}");

            case Forger _: return($"{role.Owner.Data.PlayerName} is good at forging documents. They must be a {Forger.GetName()}.");

            case Framer _: return($"{role.Owner.Data.PlayerName} has a desire to deceive. They must be a {Framer.GetName()}!");

            case Hypnotist _: return($"{role.Owner.Data.PlayerName} is skilled at disrupting others. They must be a {Hypnotist.GetName()}.");

            case Janitor _: return($"{role.Owner.Data.PlayerName} cleans up dead bodies. They must be a {Janitor.GetName()}.");

            case Ambusher _: return($"{role.Owner.Data.PlayerName} lies in wait. They must be an {Ambusher.GetName()}.");

            case Godfather _: return($"{role.Owner.Data.PlayerName} is the leader of the {Faction.Mafia.Name}. They must be the {Godfather.GetName()}.");

            case Mafioso _: return($"{role.Owner.Data.PlayerName} does the {Godfather.GetName()}'s dirty work. They must be a {Mafioso.GetName()}.");

            case Blackmailer _: return($"{role.Owner.Data.PlayerName} uses information to silence people. They must be a {Blackmailer.GetName()}.");

            case Consigliere _: return($"{role.Owner.Data.PlayerName} gathers information for the {Faction.Mafia.Name}. They must be a {Consigliere.GetName()}.");

            case Consort _: return($"{role.Owner.Data.PlayerName} is a beautiful person working for the {Faction.Mafia.Name}. They must be a {Consort.GetName()}.");

            case Amnesiac _: return($"{role.Owner.Data.PlayerName} does not remember their role. They must be an {Amnesiac.GetName()}.");

            case GuardianAngel _: return($"{role.Owner.Data.PlayerName} is watching over someone. They must be a {GuardianAngel.GetName()}.");

            case Survivor _: return($"{role.Owner.Data.PlayerName} simply wants to live. They must be a {Survivor.GetName()}.");

            case Vampire _: return($"{role.Owner.Data.PlayerName} drinks blood. They must be a {Vampire.GetName()}!");

            case Executioner _: return($"{role.Owner.Data.PlayerName} wants someone to be lynched at any cost. They must be an {Executioner.GetName()}.");

            case Jester _: return($"{role.Owner.Data.PlayerName} wants to be lynched. They must be a {Jester.GetName()}.");

            case Witch _:  return($"{role.Owner.Data.PlayerName} casts spells on people. They must be a {Witch.GetName()}.");

            case Arsonist _: return($"{role.Owner.Data.PlayerName} likes to watch things burn. They must be an {Arsonist.GetName()}.");

            case SerialKiller _: return($"{role.Owner.Data.PlayerName} wants to kill everyone. They must be a {SerialKiller.GetName()}");

            case Werewolf _: return($"{role.Owner.Data.PlayerName} howls at the moon. They must be a {Werewolf.GetName()}.");

            default: return("No special role found.");
            }
        }
Exemplo n.º 23
0
        public void CheckWerewolfScareGrowl()
        {
            var monster = new Werewolf();

            Assert.AreEqual("Growl!", monster.Scare());
        }
Exemplo n.º 24
0
        public void CheckWerewolfNameMason()
        {
            var monster = new Werewolf();

            Assert.AreEqual("Mason", monster.Name);
        }
Exemplo n.º 25
0
        // Methods
        private static IEnumerable <string> GetResults(Role role)
        {
            switch (role)
            {
            case Vigilante _:
            case Veteran _:
            case Mafioso _:
            // case Pirate _:
            case Ambusher _:
                return(new[] { Vigilante.GetName(), Veteran.GetName(), Mafioso.GetName(), Ambusher.GetName() });

            case Medium _:
            case Janitor _:
            case Retributionist _:
            // case Necromancer _:
            case Trapper _:
                return(new[] { Medium.GetName(), Janitor.GetName(), Retributionist.GetName(), Trapper.GetName() });

            case Survivor _:
            case VampireHunter _:
            case Amnesiac _:
            // case Medusa _:
            case Psychic _:
                return(new[] { Survivor.GetName(), VampireHunter.GetName(), Amnesiac.GetName(), Psychic.GetName() });

            case Spy _:
            case Blackmailer _:
            case Jailor _:
            case GuardianAngel _:
                return(new[] { Spy.GetName(), Blackmailer.GetName(), Jailor.GetName(), GuardianAngel.GetName() });

            case Sheriff _:
            case Executioner _:
            case Werewolf _:
                // case Poisoner _:
                return(new[] { Sheriff.GetName(), Executioner.GetName(), Werewolf.GetName() });

            case Framer _:
            case Vampire _:
            case Jester _:
                // case HexMaster _:
                return(new[] { Framer.GetName(), Vampire.GetName(), Jester.GetName() });

            case Lookout _:
            case Forger _:
                // case Juggernaut _:
                // case CovenLeader _:
                return(new[] { Lookout.GetName(), Forger.GetName() });

            case Escort _:
            case Transporter _:
            case Consort _:
            case Hypnotist _:
                return(new[] { Escort.GetName(), Transporter.GetName(), Consort.GetName(), Hypnotist.GetName() });

            case Doctor _:
            case Disguiser _:
            case SerialKiller _:
                // case PotionMaster _:
                return(new[] { Doctor.GetName(), Disguiser.GetName(), SerialKiller.GetName() });

            case Investigator _:
            case Consigliere _:
            case Mayor _:
            case Tracker _:
                // case Plaguebearer _:
                return(new[] { Investigator.GetName(), Consigliere.GetName(), Mayor.GetName(), Tracker.GetName() });

            case Bodyguard _:
            case Godfather _:
            case Arsonist _:
            case Crusader _:
                return(new[] { Bodyguard.GetName(), Godfather.GetName(), Arsonist.GetName(), Crusader.GetName() });
            }

            return(new string[] { });
        }
Exemplo n.º 26
0
        public void CheckWerewolfSecondaryClaw()
        {
            var monster = new Werewolf();

            Assert.AreEqual("Claw!", monster.SecondaryAttack());
        }
        public static Monster CreateMonster(int level, Point location)
        {
            Pool <Monster> monsterPool = new Pool <Monster>();

            if (level <= 2)
            {
                monsterPool.Add(Rat.Create(level), 20);
                monsterPool.Add(Lichen.Create(level), 30);
                monsterPool.Add(Jackal.Create(level), 25);
                monsterPool.Add(Kobold.Create(level), 25);
            }
            else if (level <= 4)
            {
                monsterPool.Add(Lichen.Create(level), 15);
                monsterPool.Add(Rat.Create(level), 16);
                monsterPool.Add(Jackal.Create(level), 25);
                monsterPool.Add(Kobold.Create(level), 25);
                monsterPool.Add(Goblin.Create(level), 15);
                monsterPool.Add(Sludge.Create(level), 3);
                monsterPool.Add(Wolf.Create(level), 1);
            }
            else if (level <= 6)
            {
                monsterPool.Add(Jackal.Create(level), 5);
                monsterPool.Add(Wolf.Create(level), 10);
                monsterPool.Add(Kobold.Create(level), 15);
                monsterPool.Add(Goblin.Create(level), 30);
                monsterPool.Add(Sludge.Create(level), 25);
                monsterPool.Add(Gnoll.Create(level), 5);
                monsterPool.Add(Viper.Create(level), 10);
            }
            else if (level <= 8)
            {
                monsterPool.Add(Goblin.Create(level), 8);
                monsterPool.Add(Slime.Create(level), 15);
                monsterPool.Add(Viper.Create(level), 8);
                monsterPool.Add(Wolf.Create(level), 20);
                monsterPool.Add(Gnoll.Create(level), 25);
                monsterPool.Add(LizardMan.Create(level), 10);
                monsterPool.Add(Werewolf.Create(level), 4);
            }
            else if (level <= 10)
            {
                monsterPool.Add(Ogre.Create(level), 10);
                monsterPool.Add(Gnoll.Create(level), 10);
                monsterPool.Add(Werewolf.Create(level), 20);
                monsterPool.Add(LizardMan.Create(level), 30);
                monsterPool.Add(Orc.Create(level), 20);
                monsterPool.Add(Dragon.Create(level), 10);
            }
            else
            {
                monsterPool.Add(Werewolf.Create(level), 20);
                monsterPool.Add(Ogre.Create(level), 20);
                monsterPool.Add(LizardMan.Create(level), 20);
                monsterPool.Add(Orc.Create(level), 20);
                monsterPool.Add(Dragon.Create(level), 30);
            }

            Monster monster = monsterPool.Get();

            monster.X = location.X;
            monster.Y = location.Y;

            return(monster);
        }
Exemplo n.º 28
0
 internal static void Send(string message, long id, bool clearKeyboard = false, ReplyKeyboardMarkup customMenu = null, Werewolf game = null)
 {
     //message = message.Replace("`",@"\`");
     if (clearKeyboard)
     {
         var menu = new ReplyKeyboardHide {
             HideKeyboard = true
         };
         Bot.SendTextMessage(id, message, replyMarkup: menu, disableWebPagePreview: true);
     }
     else if (customMenu != null)
     {
         Bot.SendTextMessage(id, message, replyMarkup: customMenu, disableWebPagePreview: true);
     }
     else
     {
         Bot.SendTextMessage(id, message, disableWebPagePreview: true);
     }
 }
Exemplo n.º 29
0
        private static void ClientOnDataReceived(object sender, Message message)
        {
            try
            {
                var messages = message.MessageString.Split('\u0013');
                foreach (var msg in messages)
                {
                    if (msg == "ping" || String.IsNullOrWhiteSpace(msg))
                    {
                        return;                                                  //ignore
                    }
                    string t = null;
                    try
                    {
                        dynamic m = JsonConvert.DeserializeObject(msg);
                        t = m.JType?.ToString();
                    }
                    catch (Exception e)
                    {
                        //Bot.SendTextMessage(Settings.MainChatId, e.Message);
                        continue;
                    }
                    Werewolf game;
                    if (t != null)
                    {
                        Console.WriteLine(t);
                        switch (t)
                        {
                        case "PlayerJoinInfo":
                            var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == pji.GroupId);
                            game?.AddPlayer(pji.User);
                            break;

                        case "GameStartInfo":
                            var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg);
                            //double check we don't already have a game...
                            game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id);
                            if (game != null)
                            {
                                game.AddPlayer(gsi.User);
                            }
                            else
                            {
                                game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title,
                                                    gsi.Chaos);
                                Games.Add(game);
                                GamesStarted++;
                            }
                            break;

                        case "ForceStartInfo":
                            var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId);
                            game?.ForceStart();
                            break;

                        //case "ReplyInfo":
                        //    var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg);
                        //    game =
                        //        Games.FirstOrDefault(
                        //            x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead));
                        //    game?.HandleReply(ri.Update);
                        //    break;
                        case "CallbackInfo":
                            var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg);
                            game =
                                Games.FirstOrDefault(
                                    x => x.Players?.Any(p => p != null && !p.IsDead && p.TeleUser.Id == ci.Query.From.Id) ?? false);
                            game?.HandleReply(ci.Query);
                            break;

                        case "PlayerListRequestInfo":
                            var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId);
                            game?.OutputPlayers();
                            break;

                        case "PlayerFleeInfo":
                            var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId);
                            game?.RemovePlayer(pfi.User);
                            break;

                        case "LoadLangInfo":
                            var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId);
                            game?.LoadLanguage(lli.FileName);
                            break;

                        case "PlayerSmiteInfo":
                            var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId);
                            game?.FleePlayer(psi.UserId);
                            break;

                        case "UpdateNodeInfo":
                            var uni = JsonConvert.DeserializeObject <UpdateNodeInfo>(msg);
                            IsShuttingDown = true;
                            if (uni.Kill)
                            {
                                //force kill
                                Environment.Exit(1);
                            }
                            break;

                        case "SkipVoteInfo":
                            var svi = JsonConvert.DeserializeObject <SkipVoteInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId);
                            game?.SkipVote();
                            break;

                        case "GameKillInfo":
                            var gki = JsonConvert.DeserializeObject <GameKillInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == gki.GroupId);
                            game?.Kill();
                            break;

                        case "GetGameInfo":
                            var ggi = JsonConvert.DeserializeObject <GetGameInfo>(msg);
                            var g   = Games.FirstOrDefault(x => x.ChatId == ggi.GroupId);
                            if (g == null)
                            {
                                message.Reply("null");
                            }
                            //build our response
                            var gi = new GameInfo
                            {
                                Language  = g.Language,
                                ChatGroup = g.ChatGroup,
                                GroupId   = g.ChatId,
                                NodeId    = ClientId,
                                State     = g.IsRunning ? GameState.Running : g.IsJoining ? GameState.Joining : GameState.Dead,
                                Users     = new HashSet <int>(g.Players?.Where(x => !x.IsDead)?.Select(x => x.TeleUser.Id) ?? new[] { 0 }),
                                Players   = new HashSet <IPlayer>(g.Players ?? new List <IPlayer>(new[] { new IPlayer {
                                                                                                              Name = "Error"
                                                                                                          } }))
                            };
                            message.Reply(JsonConvert.SerializeObject(gi));
                            break;

                        case "ExtendTimeInfo":
                            var eti = JsonConvert.DeserializeObject <ExtendTimeInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == eti.GroupId);
                            game?.ExtendTime(eti.User, eti.Admin, eti.Seconds);
                            break;

                        default:
                            Console.WriteLine(msg);
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message + "\n" + message.MessageString);
                try
                {
                    Directory.CreateDirectory(Path.Combine(RootDirectory, "ReceiveErrors"));
                    using (var sw = new StreamWriter(Path.Combine(RootDirectory, "ReceiveErrors", "error.log"), true))
                    {
                        sw.WriteLine(e.Message + Environment.NewLine + message.MessageString + Environment.NewLine +
                                     e.StackTrace);
                    }
                }
                catch
                {
                    // ignored
                }
            }
        }
Exemplo n.º 30
0
        private static void ClientOnDataReceived(object sender, Message message)
        {
            try
            {
                var messages = message.MessageString.Split('\u0013');
                foreach (var msg in messages)
                {
                    if (msg == "ping" || String.IsNullOrWhiteSpace(msg))
                    {
                        return;                                                  //ignore
                    }
                    string t = null;
                    try
                    {
                        dynamic m = JsonConvert.DeserializeObject(msg);
                        t = m.JType?.ToString();
                    }
                    catch (Exception e)
                    {
                        //Bot.SendTextMessage(Settings.MainChatId, e.Message);
                        continue;
                    }
                    Werewolf game;
                    if (t != null)
                    {
                        Console.WriteLine(t);
                        switch (t)
                        {
                        case "PlayerJoinInfo":
                            var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == pji.GroupId);
                            game?.AddPlayer(pji.User);
                            break;

                        case "GameStartInfo":
                            var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg);
                            //double check we don't already have a game...
                            game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id);
                            if (game != null)
                            {
                                game.AddPlayer(gsi.User);
                            }
                            else
                            {
                                game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title,
                                                    gsi.Chaos);
                                Games.Add(game);
                                GamesStarted++;
                            }
                            break;

                        case "ForceStartInfo":
                            var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId);
                            game?.ForceStart();
                            break;

                        //case "ReplyInfo":
                        //    var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg);
                        //    game =
                        //        Games.FirstOrDefault(
                        //            x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead));
                        //    game?.HandleReply(ri.Update);
                        //    break;
                        case "CallbackInfo":
                            var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg);
                            game =
                                Games.FirstOrDefault(
                                    x => x.Players.Any(p => !p.IsDead && p.TeleUser.Id == ci.Query.From.Id));
                            game?.HandleReply(ci.Query);
                            break;

                        case "PlayerListRequestInfo":
                            var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId);
                            game?.OutputPlayers();
                            break;

                        case "PlayerFleeInfo":
                            var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId);
                            game?.RemovePlayer(pfi.User);
                            break;

                        case "LoadLangInfo":
                            var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId);
                            game?.LoadLanguage(lli.FileName);
                            break;

                        case "PlayerSmiteInfo":
                            var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg);
                            game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId);
                            game?.FleePlayer(psi.UserId);
                            break;

                        case "UpdateNodeInfo":
                            IsShuttingDown = true;
                            break;

                        default:
                            Console.WriteLine(msg);
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message + "\n" + message.MessageString);
            }
        }