public IOClient(Connection s) { this.connection = s; this.connectedAt = Server.CurrentTimeMillis(); this.mm_stream = new PacketWriter(255); this.castHandler = new CastHandler(this, handler); this.combatHandler = new CombatHandler2(this, handler); // IOHostList.add(connectedFrom); }
public async Task DataWipe() { ContextIds idList = new ContextIds(Context); await MessageHandler.SendMessage(idList, "User data cleared. Reboot bot to take effect."); UserHandler.ClearUserData(); CombatHandler2.ClearCombatData(); TownHandler.ClearTownData(); }
public static async Task AttackScreenNew(UserAccount user, ulong messageId, IEmote emote, ContextIds idList) { //Tests each case to make sure all circumstances for the execution of this command are valid (character exists, in correct location) try { await UserHandler.CharacterExists(idList); await UserHandler.CharacterInCombat(idList); } catch (InvalidCharacterStateException) { return; } if (emote.Name == "⚔") { if (user.Char.ActiveMons[user.Char.MoveScreenNum].BufferedMove != null) { user.Char.MoveScreenNum++; if (user.Char.MoveScreenNum > CombatHandler2.GetInstance(user.Char.CombatId).GetTeam(user).MultiNum - 1) { user.Char.MoveScreenNum = 0; } } else { await MessageHandler.MoveScreenNew(user.UserId); } user.ReactionMessages.Remove(messageId); } else if (emote.Name == "👜") { await MessageHandler.SendDM(user.UserId, "BAG not implemented yet!"); } else if (emote.Name == "🔁") { await MessageHandler.SendDM(user.UserId, "SWITCH not implemented yet!"); } else if (emote.Name == "🏃") { await MessageHandler.SendDM(user.UserId, "RUN not implemented yet!"); } }
public async Task QuickDuel(string mon, string mon2, SocketGuildUser target) { var fromUser = UserHandler.GetUser(Context.User.Id); var toUser = UserHandler.GetUser(target.Id); ContextIds ids = new ContextIds(Context); fromUser.Char = new Character(true); fromUser.Char.CurrentGuildId = ids.GuildId; fromUser.Char.CurrentGuildName = Context.Guild.Name; fromUser.Char.Name = fromUser.Name; mon = mon.ToLower(); BasicMon m = MonRegister.StringToMonRegister(mon); m.CatcherID = fromUser.UserId; m.OwnerID = fromUser.UserId; fromUser.Char.Party.Add(m); fromUser.HasCharacter = true; await MessageHandler.SendMessage(ids, $"{fromUser.Mention}, you have chosen {m.Nickname} as your partner! Good luck on your adventure."); fromUser.PromptState = -1; toUser.Char = new Character(true); toUser.Char.CurrentGuildId = ids.GuildId; toUser.Char.CurrentGuildName = target.Guild.Name; toUser.Char.Name = toUser.Name; mon2 = mon2.ToLower(); BasicMon m2 = MonRegister.StringToMonRegister(mon2); m2.CatcherID = toUser.UserId; m2.OwnerID = toUser.UserId; toUser.Char.Party.Add(m2); toUser.HasCharacter = true; await MessageHandler.SendMessage(ids, $"{toUser.Mention}, you have chosen {m2.Nickname} as your partner! Good luck on your adventure."); toUser.PromptState = -1; CombatInstance2 combat = new CombatInstance2(ids, fromUser, toUser); CombatHandler2.StoreInstance(CombatHandler2.NumberOfInstances(), combat); await combat.StartCombat(); }
public async Task Duel(SocketGuildUser target) { var fromUser = UserHandler.GetUser(Context.User.Id); var toUser = UserHandler.GetUser(target.Id); ContextIds idList = new ContextIds(Context); //Tests each case to make sure all circumstances for the execution of this command are valid (character exists, in correct location) try { await UserHandler.CharacterExists(idList); await UserHandler.OtherCharacterExists(idList, toUser); await UserHandler.ValidCharacterLocation(idList); await UserHandler.OtherCharacterLocation(idList, toUser); } catch (InvalidCharacterStateException) { return; } //Check that the user did not target themself with the command if (fromUser.UserId != toUser.UserId) { //Set the current user's combat request ID to the user specified fromUser.Char.CombatRequest = toUser.UserId; //Check if the specified user has a combat request ID that is the current user's ID if (toUser.Char.CombatRequest == fromUser.UserId) { //Make sure neither users are in combat while sending response request if (fromUser.Char.InCombat) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}, you cannot start a duel while in combat!"); } else if (toUser.Char.InCombat) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}, you cannot start a duel with a player who is in combat!"); } else { //Start duel /* * CombatInstance combat = new CombatInstance(idList, Context.User.Id, target.Id); * * await Context.Channel.SendMessageAsync($"The duel between {target.Mention} and {Context.User.Mention} will now begin!"); * fromUser.Char.InCombat = true; * fromUser.Char.InPvpCombat = true; * fromUser.Char.CombatRequest = 0; * fromUser.Char.InCombatWith = toUser.UserId; * fromUser.Char.Combat = new CombatInstance(idList, fromUser.UserId, toUser.UserId); * * toUser.Char.InCombat = true; * toUser.Char.InPvpCombat = true; * toUser.Char.CombatRequest = 0; * toUser.Char.InCombatWith = fromUser.UserId; * toUser.Char.Combat = new CombatInstance(idList, toUser.UserId, fromUser.UserId); * * await CombatHandler.StartCombat(fromUser.Char.Combat); */ CombatInstance2 combat = new CombatInstance2(idList, fromUser, toUser); CombatHandler2.StoreInstance(CombatHandler2.NumberOfInstances(), combat); await combat.StartCombat(); } } else { //Make sure neither users are in combat while sending initial request if (fromUser.Char.InCombat) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}, you cannot request a duel when you are in combat!"); } else if (toUser.Char.InCombat) { await Context.Channel.SendMessageAsync($"{Context.User.Mention}, you cannot duel a player who is in combat!"); } else { //Challenge the specified user await Context.Channel.SendMessageAsync($"{target.Mention}, you have been challenged to a duel by {Context.User.Mention}\nUse the \"duel [mention target]\" command to accept."); } } } else { //Tell the current user they have are a dum dum await Context.Channel.SendMessageAsync($"{Context.User.Mention}, you cannot duel yourself."); } }
public static async Task SoloPvPLobbyMenu(UserAccount user, IUserMessage message, IEmote emote, ContextIds idList) { switch (emote.Name.ToLower()) { case "back1": user.RemoveAllReactionMessages(12); user.RemoveAllReactionMessages(1); await message.RemoveAllReactionsAsync(); await message.ModifyAsync(m => { m.Embed = MonEmbedBuilder.MainMenu(user); m.Content = ""; }); await MessageHandler.MenuEmojis(message); user.ReactionMessages.Add(message.Id, 1); break; case "check": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; user.Char.ReadyToggle(); if (user.Char.ReadyUp) { if (lobby.CheckCombatStart()) { CombatInstance2 combat = new CombatInstance2(idList, lobby.Teams); CombatHandler2.StoreInstance(CombatHandler2.NumberOfInstances(), combat); await combat.StartCombat(); } } } break; case "invite": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; if (lobby.IsLeader(user)) { await message.ModifyAsync(m => { m.Content = "**Please tag the player(s) you wish to invite.**"; }); user.ExpectedInput = 6; user.ExpectedInputLocation = message.Channel.Id; } } break; case "kick_player": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; if (lobby.IsLeader(user)) { await message.ModifyAsync(m => { m.Content = "**Please tag the player(s) you wish to kick.**"; }); user.ExpectedInput = 7; user.ExpectedInputLocation = message.Channel.Id; } } break; case "lvl": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; if (lobby.IsLeader(user)) { lobby.LevelToggle(); await lobby.UpdateAllMenus(new List <ulong>(), idList, ""); } } break; case "bag": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; if (lobby.IsLeader(user)) { lobby.ItemsToggle(); await lobby.UpdateAllMenus(new List <ulong>(), idList, ""); } } break; case "mon": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; if (lobby.IsLeader(user)) { lobby.MonsToggle(); await lobby.UpdateAllMenus(new List <ulong>(), idList, ""); } } break; case "exit": if (user.HasLobby()) { CombatCreationTool lobby = user.CombatLobby; lobby.RemovePlayer(user); await lobby.UpdateAllMenus(user.UserId, idList, $"{user.Name} left lobby"); user.RemoveAllReactionMessages(12); user.RemoveAllReactionMessages(1); await message.RemoveAllReactionsAsync(); await message.ModifyAsync(m => { m.Embed = MonEmbedBuilder.MainMenu(user); m.Content = ""; }); await MessageHandler.MenuEmojis(message); user.ReactionMessages.Add(message.Id, 1); } break; default: break; } }
public static async Task TargetingScreen(UserAccount user, ulong messageId, IEmote emote, ContextIds idList) { //Tests each case to make sure all circumstances for the execution of this command are valid (character exists, in correct location) try { await UserHandler.CharacterExists(idList); await UserHandler.CharacterInCombat(idList); } catch (InvalidCharacterStateException) { return; } var mon = user.Char.ActiveMons[user.Char.MoveScreenNum]; var inst = CombatHandler2.GetInstance(user.Char.CombatId); switch (emote.Name) { case "1\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[0 + user.Char.TargetPage * 9]); break; case "2\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[1 + user.Char.TargetPage * 9]); break; case "3\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[2 + user.Char.TargetPage * 9]); break; case "4\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[3 + user.Char.TargetPage * 9]); break; case "5\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[4 + user.Char.TargetPage * 9]); break; case "6\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[5 + user.Char.TargetPage * 9]); break; case "7\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[6 + user.Char.TargetPage * 9]); break; case "8\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[7 + user.Char.TargetPage * 9]); break; case "9\u20E3": user.ReactionMessages.Remove(messageId); mon.SelectedMove.Targets.Add(mon.SelectedMove.ValidTargets[8 + user.Char.TargetPage * 9]); break; case "⏮": user.ReactionMessages.Remove(messageId); await MessageHandler.MoveScreenNew(user.UserId); return; case "⏭️": user.ReactionMessages.Remove(messageId); user.Char.TargetPage++; if (user.Char.TargetPage > (Math.Ceiling(mon.SelectedMove.ValidTargets.Count / 9.0))) { user.Char.TargetPage = 0; } await MessageHandler.TargetingScreen(user.UserId); return; } user.Char.MoveScreenNum++; if (user.Char.MoveScreenNum > inst.GetTeam(user).MultiNum--) { user.Char.MoveScreenNum = 0; await inst.ResolvePhase(); } else { await MessageHandler.MoveScreenNew(user.UserId); } }
public static async Task MoveScreenNew(UserAccount user, ulong messageId, IEmote emote, ContextIds idList) { //Tests each case to make sure all circumstances for the execution of this command are valid (character exists, in correct location) try { await UserHandler.CharacterExists(idList); await UserHandler.CharacterInCombat(idList); } catch (InvalidCharacterStateException) { return; } var num = user.Char.MoveScreenNum; if (emote.Name == "1\u20E3") { if (user.Char.ActiveMons[num].ActiveMoves[0].Name != "None") { user.ReactionMessages.Remove(messageId); await CombatHandler2.ParseMoveSelection(user, 0); } } else if (emote.Name == "2\u20E3") { if (user.Char.ActiveMons[num].ActiveMoves[1].Name != "None") { user.ReactionMessages.Remove(messageId); await CombatHandler2.ParseMoveSelection(user, 1); } } else if (emote.Name == "3\u20E3") { if (user.Char.ActiveMons[num].ActiveMoves[2].Name != "None") { user.ReactionMessages.Remove(messageId); await CombatHandler2.ParseMoveSelection(user, 2); } } else if (emote.Name == "4\u20E3") { if (user.Char.ActiveMons[num].ActiveMoves[3].Name != "None") { user.ReactionMessages.Remove(messageId); await CombatHandler2.ParseMoveSelection(user, 3); } } else if (emote.Name == "⏮") { if (user.Char.MoveScreenNum > 0) { user.ReactionMessages.Remove(messageId); user.Char.MoveScreenNum--; await MessageHandler.MoveScreenNew(user.UserId); } else { user.ReactionMessages.Remove(messageId); await MessageHandler.FightScreenNew(user.UserId); } } }