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)); }
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()); } }
/// <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); } }
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>(); }
public static Werewolf GetEnemyObject(bool isTransformed) { var enemy = new Werewolf() { Name = "Werewolf", Damage = 5, Armour = 4, HitPoints = 10, Transformed = isTransformed, Alive = true }; return(enemy); }
public override Hero Get_Instance() { if (_instance == null) { _instance = new Werewolf(); _instance.Start(); return(_instance); } else { return(_instance); } }
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); }
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); }
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()); }
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); }
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); } }
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(); }
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)); } }
public void SpawnWerewolf(Werewolf wolf, int index = 0) { wolf.transform.position = werewolfSpawnLocations[ (index == -1) ? Random.Range(0, WerewolfSpawns) : index]; //wolf.SetGenes(GenePool.PopWerewolfGene()); }
public void CheckWerewolfAttackBite() { var monster = new Werewolf(); Assert.AreEqual("Bite!", monster.Attack()); }
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 } } }
public void CheckWerewolfDefendRun() { var monster = new Werewolf(); Assert.AreEqual("Run away!", monster.Defend()); }
public void CheckWerewolfStringLycanthrope() { var monster = new Werewolf(); Assert.AreEqual("I am a Lycanthrope!", monster.ToString()); }
// 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."); } }
public void CheckWerewolfScareGrowl() { var monster = new Werewolf(); Assert.AreEqual("Growl!", monster.Scare()); }
public void CheckWerewolfNameMason() { var monster = new Werewolf(); Assert.AreEqual("Mason", monster.Name); }
// 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[] { }); }
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); }
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); } }
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 } } }
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); } }