Exemple #1
0
 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);
 }
Exemple #2
0
        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();
        }
Exemple #3
0
        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!");
            }
        }
Exemple #4
0
        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.");
            }
        }
Exemple #6
0
        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;
            }
        }
Exemple #7
0
        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);
            }
        }
Exemple #8
0
        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);
                }
            }
        }