예제 #1
0
        public static void CheckPlayerLevelUp(PacketHitList hitList, Client client)
        {
            PacketHitList.MethodStart(ref hitList);
            if (client.Player.GetActiveRecruit().Exp > client.Player.GetActiveRecruit().GetNextLevel()) {
                if (client.Player.GetActiveRecruit().Level < Exp.ExpManager.Exp.MaxLevels) {
                    Scripting.ScriptManager.InvokeSub("PlayerLevelUp", hitList, client);

                    hitList.AddPacketToMap(client.Player.Map, TcpPacket.CreatePacket("levelup", client.ConnectionID.ToString()));
                    //Messenger.SendDataToMap(client.Player.MapID, TcpPacket.CreatePacket("levelup", client.ConnectionID.ToString()));
                }

                if (client.Player.GetActiveRecruit().Level >= Exp.ExpManager.Exp.MaxLevels) {
                    client.Player.GetActiveRecruit().Level = Exp.ExpManager.Exp.MaxLevels;
                    client.Player.GetActiveRecruit().Exp = ExpManager.Exp[Exp.ExpManager.Exp.MaxLevels - 1];
                }
            } else {
                PacketBuilder.AppendEXP(client, hitList);
                //Messenger.SendEXP(client);
            }

            PacketHitList.MethodEnded(ref hitList);

            //Messenger.SendActiveTeam(index);

            //Messenger.SendHP(index);
            //Messenger.SendStats(index);
            //Messenger.BattleMsg(index, "You.", Text.BrightBlue);
        }
예제 #2
0
파일: Main.cs 프로젝트: MandL27/Server
 private static void InvDrop(ICharacter character, IMap map, PacketHitList hitlist)
 {
     PacketHitList.MethodStart(ref hitlist);
     if (HasAbility(character, "Sticky Hold")) {
         hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " held on to its item with Sticky Hold!", Text.WhiteSmoke), character.X, character.Y, 10);
     } else {
         if (character.CharacterType == Enums.CharacterType.Recruit) {
             Client client = ((Recruit)character).Owner;
             if (client.Player.GetActiveRecruit().HeldItemSlot > -1) {
                 client.Player.DropItem(client.Player.GetActiveRecruit().HeldItemSlot, client.Player.GetActiveRecruit().HeldItem.Amount, client);
             }
             PacketBuilder.AppendInventory(client, hitlist);
         } else if (character.CharacterType == Enums.CharacterType.MapNpc) {
             MapNpc npc = character as MapNpc;
             if (npc.HeldItem != null && !npc.HeldItem.Sticky) {
                 npc.MapDropItem(npc.HeldItem.Amount, null);
             }
         }
     }
     PacketHitList.MethodEnded(ref hitlist);
 }
예제 #3
0
        private static void HealCharacterBelly(ICharacter character, int belly, PacketHitList hitlist)
        {
            if (character.CharacterType == Enums.CharacterType.Recruit) {
                Recruit recruit = character as Recruit;

                recruit.Belly += belly;
                if (recruit.Belly >= recruit.MaxBelly) {
                    recruit.Belly = recruit.MaxBelly;
                    if (belly > 10) {
                        hitlist.AddPacketToMap(recruit.Owner.Player.Map, PacketBuilder.CreateBattleMsg(character.Name + "'s belly was filled completely.", Text.BrightGreen), character.X, character.Y, 10);
                    }
                } else {
                    if (belly > 10) {
                        hitlist.AddPacketToMap(recruit.Owner.Player.Map, PacketBuilder.CreateBattleMsg(character.Name + "'s belly was filled somewhat.", Text.BrightGreen), character.X, character.Y, 10);
                    }
                }

                PacketBuilder.AppendBelly(((Recruit)character).Owner, hitlist);
            }
        }
예제 #4
0
        private static void DamageCharacter(ICharacter character, IMap map, int dmg, Enums.KillType killType, PacketHitList hitlist, bool checkDeath)
        {
            int point = 0;
            try {
                character.HP -= dmg;

                if (dmg <= 0) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took no damage!", Text.BrightRed), character.X, character.Y, 10);
                    //BothWaysBattleMsg(setup, setup.Defender.Name + " took no damage!", Text.BrightRed);
                } else {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took " + dmg + " damage!", Text.BrightRed), character.X, character.Y, 10);
                    //BothWaysBattleMsg(setup, setup.Defender.Name + " took " + damage + " damage!", Text.BrightRed);
                }

                point = 1;

                if (checkDeath && character.HP <= 0) {
                    if (character.CharacterType == Enums.CharacterType.Recruit) {

                        point = 2;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Oh, no!  " + character.Name + " fainted!", Text.BrightRed));
                        point = 3;
                        OnDeath(((Recruit)character).Owner, Enums.KillType.Other);
                        point = 4;

                    } else {

                        if (character.HeldItem != null) {
                            character.MapDropItem(character.HeldItem.Amount, null);
                        }

                        OnNpcDeath(hitlist, null, (MapNpc)character);
                        //((MapNpc)character).Num = 0;
                        //((MapNpc)character).HP = 0;
                        map.ActiveNpc[((MapNpc)character).MapSlot] = new MapNpc(character.MapID, ((MapNpc)character).MapSlot);

                        hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("npcdead", ((MapNpc)character).MapSlot));

                    }
                }
            } catch(Exception ex) {
                Messenger.AdminMsg("Error: DamageCharacter", Text.Black);
                Messenger.AdminMsg(ex.ToString(), Text.Black);
                Messenger.AdminMsg(character.Name + " took " + dmg + " dmg at " + map.Name + " from " + killType + " with checkDeath=" + checkDeath + " and point=" + point, Text.Black);
                throw new Exception();
            }
        }
예제 #5
0
        public static void OnNpcDeath(PacketHitList hitlist, ICharacter attacker, MapNpc npc)
        {
            try {
                // Called when a npc faints
                PacketHitList.MethodStart(ref hitlist);

                hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg(npc.Name + " fainted!", Text.WhiteSmoke), npc.X, npc.Y, 10);

                //aftermath
                if (HasAbility(npc, "Aftermath")) {
                    bool explode = true;
                    if (!HasAbility(npc, "Mold Breaker")) {
                        TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, MapManager.RetrieveActiveMap(npc.MapID), null, 0, 0, Enums.Direction.Up, true, true, false);
                        for (int i = 0; i < checkedTargets.Count; i++) {
                            if (HasAbility(checkedTargets[i], "Damp")) {
                                explode = false;
                            }
                        }
                    }

                    if (explode) {
                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg(npc.Name + " exploded!", Text.BrightRed), npc.X, npc.Y, 10);
                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSoundPacket("magic216.wav"), npc.X, npc.Y, 10);
                        for (int i = npc.X - 1; i <= npc.X + 1; i++) {
                            for (int j = npc.Y - 1; j <= npc.Y + 1; j++) {
                                if (i < 0 || j < 0 || i > MapManager.RetrieveActiveMap(npc.MapID).MaxX || j > MapManager.RetrieveActiveMap(npc.MapID).MaxY) {

                                } else {
                                    hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSpellAnim(497, i, j));
                                }
                            }
                        }

                            TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, MapManager.RetrieveActiveMap(npc.MapID), npc, npc.X, npc.Y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                if (MapManager.RetrieveActiveMap(npc.MapID).Moral == Enums.MapMoral.None) {
                                if (targets[i].HP > 0) {
                                    if (HasActiveBagItem(targets[i], 6, 0, 0)) {
                                        DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true);
                                    } else {
                                        DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true);
                                    }
                                }
                                }
                            }

                    } else {
                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSoundPacket("magic320.wav"), npc.X, npc.Y, 10);
                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateSpellAnim(505, npc.X, npc.Y));
                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(npc.MapID), PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), npc.X, npc.Y, 10);
                    }
                }

                //death flag
                TargetCollection witnesses = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, MapManager.RetrieveActiveMap(npc.MapID), npc, 0, 0, Enums.Direction.Up, false, true, false);
                for (int i = 0; i < witnesses.Count; i++) {
                    AddExtraStatus(witnesses[i], MapManager.RetrieveActiveMap(npc.MapID), "SawAllyFaint", 0, null, "", hitlist);
                }

                RemoveAllBondedExtraStatus(npc, MapManager.RetrieveActiveMap(npc.MapID), hitlist, false);
                IMap map = MapManager.RetrieveActiveMap(npc.MapID);
                Client client = null;
                foreach (Client n in map.GetClients()) {
                                client = n;
                                break;
                            }

                if (client != null) {

                    bool doBossCheck = false;

                    switch (npc.Num) {
                    /*
                        case 276:
                        case 277:
                        case 278: { //Dynamo Trio
                                map.RemoveNpc(npc.MapSlot);
                                if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3)) {
                                    map.Tile[9, 1].Mask = 96;
                                    map.Tile[9, 1].MaskSet = 4;
                                    map.Tile[9, 1].Type = Enums.TileType.Scripted;
                                    map.Tile[9, 1].Data1 = 46;
                                    map.Tile[9, 1].Data2 = 0;
                                    map.Tile[9, 1].Data3 = 0;
                                    map.Tile[9, 1].String1 = "19";
                                    map.Tile[9, 1].String2 = "1";
                                    map.Tile[9, 1].String3 = "10:7";
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 1, map));
                                }
                            }
                            break;
                        */
                        case 304: {//registeel
                                map.RemoveNpc(npc.MapSlot);
                                if (map.IsNpcSlotEmpty(5)) {
                                    BossBattles.EndRegisteelBattle(client);
                                }
                            }
                            break;/*
                        case 305: {//bronzong
                                map.RemoveNpc(npc.MapSlot);
                                if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && (npc.MapSlot == 1 || npc.MapSlot == 2)) {
                                    if (client.Player.GetStoryState(43) == true) {
                                        client.Player.SetStoryState(43, false);
                                    }
                                    StoryManager.PlayStory(client, 43);
                                } else if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4)) {
                                    if (client.Player.GetStoryState(56) == true) {
                                        client.Player.SetStoryState(56, false);
                                    }
                                    StoryManager.PlayStory(client, 56);
                                }
                            }
                            break;*/
                        case 220: {//Murkrow minions 2.0
                                if (map.IsNpcSlotEmpty(14)) {
                                    map.RemoveNpc(npc.MapSlot);
                                }

                                for (int i = 1; i < 14; i++) {
                                    if (map.IsNpcSlotEmpty(i) == false) {
                                        return;
                                    }
                                }
                                StoryManager.PlayStory(client, 160);
                            }
                            break;
                        case 221: {//Honchkrow
                                map.RemoveNpc(npc.MapSlot);
                                for (int i = 1; i < 14; i++) {
                                    if (map.IsNpcSlotEmpty(i) == false) {
                                        map.RemoveNpc(i);
                                    }
                                }
                                StoryManager.PlayStory(client, 161);
                            }
                            break;
                        case 224: {//Murkrow minions
                                map.RemoveNpc(npc.MapSlot);
                                for (int i = 1; i < 14; i++) {
                                    if (map.IsNpcSlotEmpty(i) == false) {
                                        return;
                                    }
                                }
                                StoryManager.PlayStory(client, 160);
                            }
                            break;
                        case 259:
                        case 306: {
                                if (map.Name == "Iceberg Cave") {
                                    map.RemoveNpc(npc.MapSlot);
                                    if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3)) {
                                        BossBattles.EndRegiceBattle(client);
                                    }
                                }
                            }
                            break;
                        //case 177: {
                        //    map.RemoveNpc(npc.MapSlot);
                        //    if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) &&
                        //    map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7)) {
                        //        BossBattles.RemoveLuxioTribe(client);
                        //    }
                        //}
                        //break;
                        case 167: {
                                //map.RemoveNpc(npc.MapSlot);
                                //if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) &&
                                //map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7)) {
                                //    BossBattles.RemoveLuxioTribe(client);
                                //}
                            }
                            break;
                            /*
                        case 465: {
                                map.RemoveNpc(1);
                                map.Tile[9, 4].Type = Enums.TileType.Scripted;
                                map.Tile[9, 4].Data1 = 46;
                                map.Tile[9, 4].Data2 = 0;
                                map.Tile[9, 4].Data3 = 0;
                                map.Tile[9, 4].String1 = "15";
                                map.Tile[9, 4].String2 = "93";
                                map.Tile[9, 4].String3 = "8:10";
                                map.Tile[9, 4].Mask = 96;
                                map.Tile[9, 4].MaskSet = 4;
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 4, map));
                            }
                            break;
                            */
                        //case 212: {//fake Gengar (adjust for the actual NPC number)
                        //        if (map.MapType == Enums.MapType.RDungeonMap) {
                        //           int num = (map as RDungeonMap).RDungeonIndex;
                        //            if ((num + 1) == 20) {
                        //                StoryManager.PlayStory(client, 287);
                        //                StoryManager.PlayStory(client, 288);
                        //                StoryManager.PlayStory(client, 289);
                        //                StoryManager.PlayStory(client, 286);
                        //                StoryManager.PlayStory(client, 290);
                        //                StoryManager.PlayStory(client, 291);
                        //                StoryManager.PlayStory(client, 292);
                        //            }
                        //        }

                        //    }
                        //    break;
                        //case 804: {//real gengar defeated
                        //        map.RemoveNpc(npc.MapSlot);
                        //        for (int i = 2; i <= 3; i++) {
                        //            if (map.IsNpcSlotEmpty(i) == false) {
                        //                map.RemoveNpc(i);
                        //            }
                        //        }
                        //        map.SetAttribute(8, 4, Enums.TileType.Scripted, 36, 0, 0, "19", "1", "");
                        //        map.SetAttribute(9, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", "");
                        //        map.SetAttribute(10, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", "");
                        //        map.SetAttribute(8, 5, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                        //        map.SetAttribute(13, 6, Enums.TileType.Notice, 0, 0, 0, "You hesitate...", "It's probably a good idea not to sleep here again...", "");
                        //        StoryManager.PlayStory(client, 285);
                        //    }
                        //    break;
                        //case 806:
                        //case 807: {//rotom forms
                        //        map.RemoveNpc(npc.MapSlot);
                        //        map.SetAttribute(9, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", "");
                        //        map.SetAttribute(10, 10, Enums.TileType.Scripted, 13, 0, 0, "", "", "");
                        //        Messenger.PlayerMsg(client, "The exit was opened!", Text.Yellow);
                        //    }
                        //    break;
                        case 805: {//spiritomb defeated
                                map.RemoveNpc(npc.MapSlot);
                                map.SetAttribute(9, 2, Enums.TileType.Scripted, 36, 0, 0, "21", "30", "");
                                map.SetTile(9, 2, 96, 4, 1);
                                StoryManager.PlayStory(client, 303);
                            }
                            break;
                            /*
                        case 440: {//Articuno*
                                map.RemoveNpc(1);
                                map.SetTile(12, 5, 96, 4, 1);
                                map.SetAttribute(12, 5, Enums.TileType.Scripted, 46, 0, 0, "20", "342", "13:13");
                                StoryManager.PlayStory(client, 171);
                            }
                            break;
                            */
                        case 404: {//Heatran
                                map.RemoveNpc(1);
                                map.SetTile(10, 6, 96, 4, 3);
                                map.SetAttribute(10, 6, Enums.TileType.Scripted, 46, 0, 0, "18", "1313", "12:12");
                                //NetScript.PlayStory(index, 171);
                            }
                            break;
                        case 579:
                        case 558:
                        case 559:
                        case 560:
                        case 571:
                        case 572:
                        case 854:
                        case 855:
                        case 856:
                        case 857:
                        case 858:
                        case 859:
                        case 860:
                        case 861:
                        case 862:
                        case 863: { //normal PBA enemies + boss
                                if (map.Name == "Pitch-Black Pit") {
                                    int remainingEnemies = 0;
                                    for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                                        if (!map.IsNpcSlotEmpty(i)) remainingEnemies++;
                                    }
                                    if (remainingEnemies <= 1) {
                                        BossBattles.EndBossBattle(client, "Pitch-Black Pit");
                                    }
                                } else PitchBlackAbyss.UnlockRoom(client, map);
                            }
                            break;
                        case 139: {
                                BossBattles.EndBossBattle(client, "ThunderstormForest");
                            }
                            break;
                        case 177: {
                                BossBattles.EndBossBattle(client, "ThunderstormForestPart2");
                            }
                            break;
                            /*
                        case 588:
                        case 587: { // EST Boss A Wave 1
                                if (map.Name == "Electrostasis Tower Chamber") {
                                    map.RemoveNpc(npc.MapSlot);
                                    if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) &&
                                        (npc.MapSlot == 1 || npc.MapSlot == 2 || npc.MapSlot == 3 || npc.MapSlot == 4)) {

                                        map.SetTile(4, 12, 0, 0, 1);
                                        map.SetAttribute(4, 12, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                                        map.SetAttribute(9, 12, Enums.TileType.Story, 201, 0, 0, "", "", "");

                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(4, 12, map));
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(9, 12, map));
                                    } else if (map.IsNpcSlotEmpty(1) && map.IsNpcSlotEmpty(2) && map.IsNpcSlotEmpty(3) && map.IsNpcSlotEmpty(4) &&
                                                map.IsNpcSlotEmpty(5) && map.IsNpcSlotEmpty(6) && map.IsNpcSlotEmpty(7) &&
                                                (npc.MapSlot == 5 || npc.MapSlot == 6 || npc.MapSlot == 7)) {
                                        BossBattles.EndBossBattle(client, "ElectrostasisTowerA1");
                                    }
                                }
                            }
                            break;
                            */
                        case 963: {// Joey, Exbel Woods Clearing
                                int recruitIndex = -1;
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) {
                                    recruitIndex = client.Player.AddToRecruitmentBank(dbConnection, client.Player.CreateRecruitFromNpc(npc));
                                }
                                int openSlot = client.Player.FindOpenTeamSlot();
                                if (recruitIndex != -1 && openSlot != -1) {

                                    client.Player.AddToTeam(recruitIndex, openSlot);
                                    client.Player.Team[openSlot].HP = client.Player.Team[openSlot].MaxHP;
                                    Messenger.BattleMsg(client, "You have recruited a new team member!", Text.BrightGreen);

                                    Messenger.SendActiveTeam(client);
                                } else {
                                    Messenger.BattleMsg(client, "You cant recruit! You have too many team members in the assembly!", Text.BrightRed);
                                }
                                doBossCheck = true;
                            }
                            break;
                        default: {
                                doBossCheck = true;
                            }
                            break;
                    }

                    if (doBossCheck) {
                        if (BossBattles.IsBossBattleMap(client)) {
                            int remainingEnemies = 0;
                            for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                                if (!map.IsNpcSlotEmpty(i)) remainingEnemies++;
                            }
                            //Messenger.AdminMsg(remainingEnemies.ToString(), Text.Black);
                            if (remainingEnemies <= 1) BossBattles.EndBossBattle(client, map.Name);
                        }
                    }

                }

                PacketHitList.MethodEnded(ref hitlist);
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: OnNpcDeath", Text.Black);
                Messenger.AdminMsg("NPCNum: " + npc.Num, Text.Black);
            }
        }
예제 #6
0
 public static void AppendPlayerDir(Client client, PacketHitList hitlist)
 {
     hitlist.AddPacketToMap(client.Player.Map, CreatePlayerDir(client));
 }
예제 #7
0
        public static void AddMapStatus(IMap map, string name, int counter, string tag, int graphicEffect, bool msg, PacketHitList hitlist)
        {
            if (map.TempStatus.GetStatus(name) == null) {
                map.TempStatus.Add(new MapStatus(name, counter, tag, graphicEffect));

                if (msg) {
                    switch (name) {
                        case "TrickRoom": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's dimensions were twisted!", Text.BrightBlue));
                            }
                            break;
                        case "Gravity": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's gravity intensified!", Text.BrightBlue));
                                TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < targets.Count; i++) {
                                    DropToGround(targets[i], map, hitlist, false);
                                }
                            }
                            break;
                        case "WonderRoom": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All physical and special attacks changed properties!", Text.BrightBlue));
                            }
                            break;
                        case "MagicRoom": {

                                TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < targets.Count; i++) {
                                    targets[i].RefreshActiveItemList();
                                }
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All items lost their effects!", Text.BrightBlue));
                            }
                            break;
                        case "Luminous": {

                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The entire floor was illuminated!", Text.BrightBlue));

                            }
                            break;
                    }
                }
                RefreshMapTraits(map, hitlist);
            }
        }
예제 #8
0
        //only for active recruits
        public static void SetStatusAilment(ICharacter character, ICharacter attacker, IMap map, Enums.StatusAilment statusAilment, int counter, PacketHitList hitlist)
        {
            PacketHitList.MethodStart(ref hitlist);

            //Check against status protection

            if (CheckStatusProtection(character, attacker, map, statusAilment.ToString() + ":" + counter, true, hitlist)) {
                PacketHitList.MethodEnded(ref hitlist);
                return;
            }

            switch (statusAilment) {
                case Enums.StatusAilment.OK: {
                        switch (character.StatusAilment) {
                            case Enums.StatusAilment.Burn: {

                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from the burn!", Text.BrightCyan), character.X, character.Y, 10);
                                }
                                break;
                            case Enums.StatusAilment.Freeze: {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " thawed out!", Text.BrightCyan), character.X, character.Y, 10);
                                }
                                break;
                            case Enums.StatusAilment.Paralyze: {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from paralysis!", Text.BrightCyan), character.X, character.Y, 10);
                                }
                                break;
                            case Enums.StatusAilment.Poison: {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered from the poisoning!", Text.BrightCyan), character.X, character.Y, 10);
                                }
                                break;
                            case Enums.StatusAilment.Sleep: {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " woke up!", Text.BrightCyan), character.X, character.Y, 10);
                                }
                                break;
                        }
                        character.StatusAilment = Enums.StatusAilment.OK;
                        character.StatusAilmentCounter = 0;

                    }
                    break;
                case Enums.StatusAilment.Burn: {
                        character.StatusAilment = Enums.StatusAilment.Burn;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " sustained a burn!", Text.BrightRed), character.X, character.Y, 10);
                    }
                    break;
                case Enums.StatusAilment.Freeze: {
                        character.StatusAilment = Enums.StatusAilment.Freeze;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was frozen solid!", Text.BrightRed), character.X, character.Y, 10);
                    }
                    break;
                case Enums.StatusAilment.Paralyze: {
                        character.StatusAilment = Enums.StatusAilment.Paralyze;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became paralyzed!", Text.BrightRed), character.X, character.Y, 10);
                    }
                    break;
                case Enums.StatusAilment.Poison: {
                        if (counter > 1) {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was badly poisoned!", Text.BrightRed), character.X, character.Y, 10);
                        } else if (counter == 1) {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was poisoned!", Text.BrightRed), character.X, character.Y, 10);
                        }
                        character.StatusAilment = Enums.StatusAilment.Poison;
                        character.StatusAilmentCounter = counter;
                    }
                    break;
                case Enums.StatusAilment.Sleep: {
                        character.StatusAilment = Enums.StatusAilment.Sleep;
                        character.StatusAilmentCounter = counter;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " fell asleep!", Text.BrightRed), character.X, character.Y, 10);
                    }
                    break;
            }

            if (character.VolatileStatus.GetStatus("Yawn") != null) {
                RemoveExtraStatus(character, map, "Yawn", hitlist);
            }

            if (character.CharacterType == Enums.CharacterType.Recruit) {
                PacketBuilder.AppendStatusAilment(((Recruit)character).Owner, hitlist);
            } else {
                PacketBuilder.AppendNpcStatusAilment((MapNpc)character, hitlist);
            }

            RefreshCharacterTraits(character, map, hitlist);

            if (attacker != null && statusAilment != Enums.StatusAilment.OK) {
                if (HasAbility(character, "Synchronize")) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Synchronize shared the status problem!", Text.BrightRed), character.X, character.Y, 10);
                    SetStatusAilment(attacker, map, statusAilment, counter, hitlist);
                }
            }

            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #9
0
        public static void RevealTrap(IMap map, int x, int y, PacketHitList hitlist)
        {
            PacketHitList.MethodStart(ref hitlist);
            map.Tile[x, y].Data2++;
            if (map.Tile[x, y].Data3 == 1) {//fake stairs
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("It's not a stairway!  It's a trap!", Text.BrightRed), x, y, 10);
            }
            switch (map.Tile[x, y].Data1) {
                case 2: {//EXPLOSIONNNNN
                        map.Tile[x, y].Mask2 = 3995;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 3: {//chestnut
                        map.Tile[x, y].Mask2 = 3997;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 4: {//ppzero
                        map.Tile[x, y].Mask2 = 4000;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 5: {//grimy
                        map.Tile[x, y].Mask2 = 3999;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 6: {//poison
                        map.Tile[x, y].Mask2 = 3993;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 7: {//random
                        map.Tile[x, y].Mask2 = 4011;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 15: {//warp
                        map.Tile[x, y].Mask2 = 3;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 16: {//pokemon
                        map.Tile[x, y].Mask2 = 4007;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 17: {//spikes
                        map.Tile[x, y].Mask2 = 4009;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 18: {//toxic spikes
                        map.Tile[x, y].Mask2 = 4008;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 19: {//stealth rock
                        map.Tile[x, y].Mask2 = 4010;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 23: {//sticky
                        map.Tile[x, y].Mask2 = 3998;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 25: {//mud
                        map.Tile[x, y].Mask2 = 3991;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 26: {//wonder tile
                        map.Tile[x, y].Mask2 = 4;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 28: {//trip
                        map.Tile[x, y].Mask2 = 4005;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 34: {//secret (Stairs, etc)
                        map.Tile[x, y].Mask2 = 0;
                        map.Tile[x, y].Mask2Set = 0;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 39: {//pitfall
                        map.Tile[x, y].Mask2 = 3996;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 42: {//seal
                        map.Tile[x, y].Mask2 = 4004;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 43: {//slow
                        map.Tile[x, y].Mask2 = 4006;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 44: {//spin
                        map.Tile[x, y].Mask2 = 4001;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 49: {//summon
                        map.Tile[x, y].Mask2 = 4003;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 50: {//grudge
                        map.Tile[x, y].Mask2 = 4012;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 51: {//selfdestruct
                        map.Tile[x, y].Mask2 = 3994;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 52: {//slumber
                        map.Tile[x, y].Mask2 = 3990;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 53: {//gust
                        map.Tile[x, y].Mask2 = 3992;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
                case 70: {//shocker
                        map.Tile[x, y].Mask2 = 3976;
                        map.Tile[x, y].Mask2Set = 4;
                        map.TempChange = true;
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                    }
                    break;
            }

            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #10
0
 public static void RemoveTrap(IMap map, int x, int y, PacketHitList hitlist)
 {
     PacketHitList.MethodStart(ref hitlist);
     map.Tile[x, y].Type = Enums.TileType.Walkable;
     map.Tile[x, y].Data1 = 0;
     map.Tile[x, y].Data2 = 0;
     map.Tile[x, y].Data3 = 0;
     map.Tile[x, y].String1 = "";
     map.Tile[x, y].String2 = "";
     map.Tile[x, y].String3 = "";
     map.Tile[x, y].Mask2 = 0;
     map.Tile[x, y].Mask2Set = 0;
     map.TempChange = true;
     hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
     PacketHitList.MethodEnded(ref hitlist);
 }
예제 #11
0
        public static void RandomWarp(ICharacter character, IMap warpMap, bool msg, PacketHitList hitlist, int startX, int endX, int startY, int endY)
        {
            if (HasAbility(character, "Suction Cups")) {
                if (msg) {
                    hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10);
                }
            } else if (character.HasActiveItem(111)) {
                if (msg) {
                    hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10);
                }
            } else {
                PacketHitList.MethodStart(ref hitlist);

                if (startX < 0) startX = 0;
                if (startX > warpMap.MaxX) startX = warpMap.MaxX;
                if (endX < 0) endX = 0;
                if (endX > warpMap.MaxX) endX = warpMap.MaxX;
                if (startY < 0) startY = 0;
                if (startY > warpMap.MaxY) startY = warpMap.MaxY;
                if (endY < 0) endY = 0;
                if (endY > warpMap.MaxY) endY = warpMap.MaxY;

                int x, y;

                FindFreeTile(warpMap, startX, startY, endX, endY, out x, out y);

                if (x == -1) {
                    if (msg) {
                        hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + " didn't warp.", Text.BrightRed), character.X, character.Y, 10);
                    }
                } else {
                    PointWarp(character, warpMap, hitlist, x, y);
                }
                PacketHitList.MethodEnded(ref hitlist);
            }
        }
예제 #12
0
 public static void Pounce(ICharacter character, IMap map, Enums.Direction dir, bool checkAllies, bool checkFoes, PacketHitList hitlist)
 {
     WarpToNearestWallOrChar(character, map, dir, checkAllies, checkFoes, hitlist);
     hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " went flying forward!", Text.WhiteSmoke), character.X, character.Y, 10);
 }
예제 #13
0
        public static void PointWarp(ICharacter character, IMap warpMap, PacketHitList hitlist, int X, int Y, bool msg)
        {
            if (HasAbility(character, "Suction Cups")) {
                if (msg) {
                    hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10);
                }
            } else if (character.HasActiveItem(111)) {
                if (msg) {
                    hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being warped!", Text.WhiteSmoke), character.X, character.Y, 10);
                }
            } else {
                PacketHitList.MethodStart(ref hitlist);

                if (msg) {
                    hitlist.AddPacketToMap(warpMap, PacketBuilder.CreateBattleMsg(character.Name + " warped!", Text.WhiteSmoke), character.X, character.Y, 10);
                }

                character.X = X;
                character.Y = Y;

                if (character.CharacterType == Enums.CharacterType.Recruit) {
                    PacketBuilder.AppendPlayerXY(((Recruit)character).Owner, hitlist);
                } else if (character.CharacterType == Enums.CharacterType.MapNpc) {
                    PacketBuilder.AppendNpcXY(warpMap, hitlist, ((MapNpc)character).MapSlot);
                }

                PacketHitList.MethodEnded(ref hitlist);
            }
        }
예제 #14
0
        public static void OnStep(IMap map, ICharacter character, Enums.Speed speed, PacketHitList hitlist)
        {
            try {
                ExtraStatus status;
                PacketHitList.MethodStart(ref hitlist);
                if (speed != Enums.Speed.Slip) {
                    int stepCounter;
                    if (character.CharacterType == Enums.CharacterType.Recruit) {

                        ((Recruit)character).Owner.Player.HPStepCounter++;
                        if (((Recruit)character).Owner.Player.Map.HungerEnabled) {
                            if (character.HasActiveItem(151)) {
                                ((Recruit)character).Owner.Player.BellyStepCounter += 5;
                            } else if (character.HasActiveItem(152)) {
                                //nothing
                            } else if (character.HasActiveItem(162)) {
                                ((Recruit)character).Owner.Player.BellyStepCounter += 20;
                            } else {
                                ((Recruit)character).Owner.Player.BellyStepCounter += 10;
                            }
                            if (HasAbility(character, "Gluttony")) {
                                ((Recruit)character).Owner.Player.BellyStepCounter += 10;
                            }
                        }
                        stepCounter = ((Recruit)character).Owner.Player.HPStepCounter;
                        ElectrostasisTower.OnPlayerStep(((Recruit)character).Owner);

                        if (stepCounter % 5 == 0) {
                            if (map.MapID == MapManager.GenerateMapID(737)) {
                                bool hasBeenWelcomed = ((Recruit)character).Owner.Player.StoryHelper.ReadSetting("[Gameplay]-HasBeenWelcomed").ToBool();
                                if (!hasBeenWelcomed) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg(((Recruit)character).Owner.Player.Name + " is new to " + Settings.GameNameShort + "! Welcome!", Text.BrightGreen));
                                    ((Recruit)character).Owner.Player.StoryHelper.SaveSetting("[Gameplay]-HasBeenWelcomed", "True");
                                }
                            }
                        }
                    } else {
                        ((MapNpc)character).HPStepCounter++;
                        stepCounter = ((MapNpc)character).HPStepCounter;
                    }

                    if (MapManager.IsMapActive(character.MapID)) {

                        RemoveExtraStatus(character, map, "Roost", hitlist);
                        RemoveExtraStatus(character, map, "Endure", hitlist);
                        RemoveExtraStatus(character, map, "DestinyBond", hitlist);
                        status = character.VolatileStatus.GetStatus("Rage");
                        if (status != null) {
                            status.Counter--;
                            if (status.Counter <= 0) {
                                RemoveExtraStatus(character, map, "Rage", hitlist);
                            }
                        }
                        status = character.VolatileStatus.GetStatus("MetalBurst");
                        if (status != null) {
                            status.Counter--;
                            if (status.Counter <= 0) {
                                RemoveExtraStatus(character, map, "MetalBurst", hitlist);
                            }
                        }
                        //if (character.VolatileStatus.GetStatus("Taunt") != null) {
                        //	character.VolatileStatus.GetStatus("Taunt").Counter--;
                        //	if (character.VolatileStatus.GetStatus("Taunt").Counter <= 0) {
                        //		RemoveExtraStatus(character, map, "Taunt", hitlist);
                        //	}
                        //}

                        Tile steppedTile = map.Tile[character.X, character.Y];
                        if (steppedTile.Type == Enums.TileType.MobileBlock) {
                            if (steppedTile.Data1 % 32 >= 16) {
                                if (character.CharacterType == Enums.CharacterType.Recruit) {
                                    if (((Recruit)character).Owner.Player.Map.HungerEnabled && character.VolatileStatus.GetStatus("SuperMobile") == null) {
                                        ((Recruit)character).Owner.Player.BellyStepCounter += 400;
                                    }
                                }
                            } else if (steppedTile.Data1 % 4 >= 2) {
                                if (steppedTile.String1 == "1") {
                                    if (!CheckStatusProtection(character, map, Enums.StatusAilment.Burn.ToString(), false, hitlist)) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's boiling hot!", Text.BrightRed), character.X, character.Y, 10);
                                        SetStatusAilment(character, map, Enums.StatusAilment.Burn, 0, hitlist);
                                    }
                                } else if (steppedTile.String1 == "2") {
                                    if (!CheckStatusProtection(character, map, Enums.StatusAilment.Freeze.ToString(), false, hitlist)) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's freezing cold!", Text.BrightRed), character.X, character.Y, 10);
                                        SetStatusAilment(character, map, Enums.StatusAilment.Freeze, 0, hitlist);
                                    }
                                } else if (steppedTile.String1 == "3") {
                                    if (!CheckStatusProtection(character, map, Enums.StatusAilment.Paralyze.ToString(), false, hitlist)) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water is numbing!", Text.BrightRed), character.X, character.Y, 10);
                                        SetStatusAilment(character, map, Enums.StatusAilment.Paralyze, 0, hitlist);
                                    }
                                } else if (steppedTile.String1 == "4") {
                                    if (!CheckStatusProtection(character, map, Enums.StatusAilment.Poison.ToString(), false, hitlist)) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water's poisoned!", Text.BrightRed), character.X, character.Y, 10);
                                        SetStatusAilment(character, map, Enums.StatusAilment.Poison, 1, hitlist);
                                    }
                                } else if (steppedTile.String1 == "5") {
                                    if (!CheckStatusProtection(character, map, Enums.StatusAilment.Sleep.ToString(), false, hitlist)) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The water is oddly calming...", Text.BrightRed), character.X, character.Y, 10);
                                        SetStatusAilment(character, map, Enums.StatusAilment.Sleep, 3, hitlist);
                                    }
                                } else if (character.StatusAilment == Enums.StatusAilment.Burn && !CheckStatusProtection(character, map, Enums.StatusAilment.OK.ToString(), false, hitlist)) {
                                    SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist);
                                }
                            } else if (steppedTile.Data1 % 16 >= 8 && !character.HasActiveItem(805) &&
                                !CheckStatusProtection(character, map, Enums.StatusAilment.Burn.ToString(), false, hitlist)) {
                                SetStatusAilment(character, map, Enums.StatusAilment.Burn, 0, hitlist);
                            }
                        }

                    }

                    if (stepCounter % 5 == 0) {
                        if (character.HasActiveItem(344) && map.MapType == Enums.MapType.RDungeonMap && Server.Math.Rand(0, 3) == 0) {
                            RandomWarp(character, map, false, hitlist);
                        }

                        int newHP = character.HP;

                        //subtract weather damage, sticky items
                        if (stepCounter % 10 == 0) {

                            //Overcoat
                            bool overcoat = false;

                            TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 10, map, character, character.X, character.Y, Enums.Direction.Up, false, true, true);

                            for (int i = 0; i < targets.Count; i++) {

                                if (HasAbility(targets[i], "Overcoat") || HasActiveBagItem(character, 47, 0, 0)) {

                                    overcoat = true;
                                    break;
                                }
                            }

                            switch (GetCharacterWeather(character)) {
                                case (Enums.Weather.Hail): {
                                    if (HasAbility(character, "Ice Body") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {
                                            newHP += 6;
                                        }
                                        if (HasAbility(character, "Snow Cloak")) {
                                        } else if (HasAbility(character, "Ice Body")) {
                                        } else if (HasAbility(character, "Magic Guard")) {
                                        } else if (character.Type1 == Enums.PokemonType.Ice || character.Type2 == Enums.PokemonType.Ice) {

                                        } else if (overcoat) {
                                        } else {
                                            newHP -= 6;
                                        }
                                    }
                                    break;
                                case (Enums.Weather.Sandstorm): {
                                        if (HasAbility(character, "Magic Guard")) {
                                        } else if (HasAbility(character, "Sand Veil")) {
                                        } else if (HasAbility(character, "Sand Force")) {
                                        } else if (character.Type1 == Enums.PokemonType.Rock || character.Type2 == Enums.PokemonType.Rock) {
                                        } else if (character.Type1 == Enums.PokemonType.Ground || character.Type2 == Enums.PokemonType.Ground) {
                                        } else if (character.Type1 == Enums.PokemonType.Steel || character.Type2 == Enums.PokemonType.Steel) {
                                        } else if (overcoat) {
                                        } else {
                                            newHP -= 5;
                                        }
                                    }
                                    break;
                                case (Enums.Weather.Sunny): {
                                        if (HasAbility(character, "Dry Skin") && !overcoat && !HasAbility(character, "Magic Guard")) {
                                            newHP -= 5;
                                        }
                                        if (HasAbility(character, "Solar Power") && !overcoat && !HasAbility(character, "Magic Guard")) {
                                            newHP -= 5;
                                        }
                                    }
                                    break;
                                case (Enums.Weather.Thunder):
                                case (Enums.Weather.Raining): {
                                        if (HasAbility(character, "Dry Skin") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {
                                            newHP += 5;
                                        }
                                        if (HasAbility(character, "Rain Dish") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {
                                            newHP += 5;
                                        }
                                    }
                                    break;
                            }

                            if (character.HasActiveItem(431)) {
                                Sticky(character, map, hitlist);
                            }
                        }

                        if (character.CharacterType == Enums.CharacterType.Recruit && ((Recruit)character).Belly <= 0) {
                            newHP -= 5;
                            hitlist.AddPacket(((Recruit)character).Owner, PacketBuilder.CreateSoundPacket("magic129.wav"));
                        }

                        //add HP based on natural healing
                        int h = 0;

                        if ((character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) && character.StatusAilment != Enums.StatusAilment.Poison) {
                            h += 100;
                        }

                        if (character.StatusAilment == Enums.StatusAilment.Poison) {
                            if (HasAbility(character, "Poison Heal") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {
                                h += (200 * character.StatusAilmentCounter);
                            } else if (HasAbility(character, "Magic Guard") && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) || (HasAbility(character, "Toxic Boost") && HasAbility(character, "Immunity"))) {

                            } else {
                                h -= (100 * character.StatusAilmentCounter);
                            }
                        }
                        if (character.HasActiveItem(298) && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {//heal ribbon
                            h += 150;
                        }
                        if (HasActiveBagItem(character, 12, 0, 0) && (character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0)) {//heal ribbon
                            h += 150;
                        }
                        if (character.HasActiveItem(154)) {
                            if (character.Type1 == Enums.PokemonType.Poison || character.Type2 == Enums.PokemonType.Poison) {
                                h += 50;
                            } else {
                                h -= 100;
                            }
                        }

                        if (h != 0) {
                            if (character.CharacterType == Enums.CharacterType.Recruit && character.HasActiveItem(298) && newHP < character.MaxHP && ((character.MaxHP + character.HPRemainder) * h / 4000) > 0) {
                                if (((Recruit)character).Owner.Player.Map.HungerEnabled) {
                                    ((Recruit)character).Owner.Player.BellyStepCounter += 20;
                                }
                            }
                            if (h > 0 && character.VolatileStatus.GetStatus("HealBlock") != null) {

                            } else {
                                newHP += ((character.MaxHP + character.HPRemainder) * h / 4000);
                            }
                            int newRemainder = ((character.MaxHP + character.HPRemainder) % 40);
                            character.HPRemainder = newRemainder;

                        }

                        if (newHP > character.MaxHP) {
                            newHP = character.MaxHP;
                        }

                        if (newHP != character.HP) {
                            if (character.CharacterType == Enums.CharacterType.Recruit) {

                                if (newHP <= 0) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg("Oh, no!  " + character.Name + " fainted!", Text.BrightRed));
                                    OnDeath(((Recruit)character).Owner, Enums.KillType.Other);
                                } else {
                                    ((Recruit)character).Owner.Player.SetHP(newHP);
                                }
                            } else {

                                if (newHP <= 0) {
                                    OnNpcDeath(hitlist, null, (MapNpc)character);
                                    //((MapNpc)character).Num = 0;
                                    //((MapNpc)character).HP = 0;
                                    MapManager.RetrieveActiveMap(character.MapID).ActiveNpc[((MapNpc)character).MapSlot] = new MapNpc(character.MapID, ((MapNpc)character).MapSlot);

                                    hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("npcdead", ((MapNpc)character).MapSlot));
                                } else {
                                    character.HP = newHP;
                                }
                            }

                        }

                        if ((character.CharacterType == Enums.CharacterType.MapNpc || ((Recruit)character).Belly > 0) && character.VolatileStatus.GetStatus("AquaRing") != null) {
                            int heal = character.MaxHP / 32;
                            if (heal < 1) heal = 1;
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s health is restored by Aqua Ring!", Text.BrightGreen), character.X, character.Y, 10);
                            HealCharacter(character, map, heal, hitlist);
                        }

                        //if (character.VolatileStatus.GetStatus("LeechSeed:0") != null && !HasAbility(character, "Magic Guard")) {
                        //    int seeddmg = character.MaxHP / 32;
                        //    if (seeddmg < 1) seeddmg = 1;
                        //    int heal = 5;
                        //    if (character.VolatileStatus.GetStatus("LeechSeed:0").Target.HasActiveItem(194)) heal = 6;
                        //    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s health is sapped by Leech Seed!", Text.BrightRed), character.X, character.Y, 10);
                        //    DamageCharacter(character, map, seeddmg, Enums.KillType.Other, hitlist, true);
                        //    if (HasAbility(character, "Liquid Ooze")) {
                        //        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.VolatileStatus.GetStatus("LeechSeed:0").Target.Name + " sucked up the Liquid Ooze!", Text.BrightRed), character.X, character.Y, 10);
                        //        DamageCharacter(character.VolatileStatus.GetStatus("LeechSeed:0").Target, MapManager.RetrieveActiveMap(character.VolatileStatus.GetStatus("LeechSeed:0").Target.MapID), seeddmg, Enums.KillType.Other, hitlist, true);
                        //    } else {
                        //        HealCharacter(character.VolatileStatus.GetStatus("LeechSeed:0").Target, MapManager.RetrieveActiveMap(character.VolatileStatus.GetStatus("LeechSeed:0").Target.MapID), seeddmg * heal / 5, hitlist);
                        //    }
                        //}

                    }
                    status = character.VolatileStatus.GetStatus("Confusion");
                    if (status != null) {
                        status.Counter--;
                        if (status.Counter <= 0) {
                            RemoveExtraStatus(character, map, "Confusion", hitlist);
                        }
                    }
                    status = character.VolatileStatus.GetStatus("Invisible");
                    if (status != null) {
                        status.Counter--;
                        if (status.Counter <= 0) {
                            RemoveExtraStatus(character, map, "Invisible", hitlist);
                        }
                    }
                    status = character.VolatileStatus.GetStatus("Blind");
                    if (status != null) {
                        status.Counter--;
                        if (status.Counter <= 0) {
                            RemoveExtraStatus(character, map, "Blind", hitlist);
                        }
                    }
                    status = character.VolatileStatus.GetStatus("Shocker");
                    if (status != null) {
                        status.Counter--;
                        if (status.Counter <= 0) {
                            RemoveExtraStatus(character, map, "Shocker", hitlist);
                        }
                    }

                    //if (character.CharacterType == Enums.CharacterType.Recruit) {
                    //    if (((Recruit)character).Owner.Player.Confusion != 0) {
                    //        ((Recruit)character).Owner.Player.Confusion--;
                    //        if (((Recruit)character).Owner.Player.Confusion <= 0) {
                    //            ((Recruit)character).Owner.Player.Confusion = 1;
                    //            if (!CheckStatusProtection(character, map, "Confusion:0", false, hitlist)) {
                    //                Confuse(character, map, 0, hitlist);
                    //            }
                    //        }
                    //    }
                    //} else {
                    //    if (((MapNpc)character).Confused != 0) {
                    //        ((MapNpc)character).Confused--;
                    //        if (((MapNpc)character).Confused <= 0) {
                    //            ((MapNpc)character).Confused = 1;
                    //            if (!CheckStatusProtection(character, map, "Confusion:0", false, hitlist)) {
                    //                Confuse(character, map, 0, hitlist);
                    //            }
                    //        }
                    //    }
                    //}

                    if (character.CharacterType == Enums.CharacterType.Recruit) {
                        ((Recruit)character).Owner.Player.ProcessHunger(hitlist);
                    }

                    if (character.CharacterType == Enums.CharacterType.Recruit) {
                        Client clientOwner = ((Recruit)character).Owner;
                        StoryHelper.OnStep(clientOwner, hitlist);
                        if (stepCounter % 10 == 0) {
                            EggStep(clientOwner);
                        }

                    }
                }
                PacketHitList.MethodEnded(ref hitlist);

            } catch (Exception ex) {
                Messenger.AdminMsg("Error: OnStep", Text.Black);
            }
        }
예제 #15
0
파일: Main.cs 프로젝트: MandL27/Server
        private static void Sticky(ICharacter character, IMap map, PacketHitList hitlist)
        {
            PacketHitList.MethodStart(ref hitlist);
            if (character.HasActiveItem(421)) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s No-Stick Cap prevented any items from becoming sticky!", Text.WhiteSmoke), character.X, character.Y, 10);
            } else {

                if (character.CharacterType == Enums.CharacterType.Recruit) {
                    Client client = ((Recruit)character).Owner;
                    List<int> itemsToCheck = new List<int>();
                    for (int i = 1; i <= client.Player.MaxInv; i++) {
                        if (client.Player.Inventory[i].Num > 0 && !client.Player.Inventory[i].Sticky) {
                            itemsToCheck.Add(i);
                        }
                    }
                    if (itemsToCheck.Count > 0) {
                        int stickySlot = itemsToCheck[Server.Math.Rand(0, itemsToCheck.Count)];
                        if (client.Player.Inventory[stickySlot].Num > 0 && !client.Player.Inventory[stickySlot].Sticky) {
                            client.Player.SetItemSticky(stickySlot, true);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ItemManager.Items[client.Player.Inventory[stickySlot].Num].Name + " became sticky!", Text.BrightRed), character.X, character.Y, 10);
                        } else {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10);
                        }
                    } else {
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10);
                    }
                } else if (character.CharacterType == Enums.CharacterType.MapNpc) {
                    MapNpc npc = character as MapNpc;
                    if (npc.HeldItem != null && !npc.HeldItem.Sticky) {
                        npc.HeldItem.Sticky = true;
                        if (npc.ActiveItems.Contains(npc.HeldItem.Num)) {
                            npc.RemoveFromActiveItemList(npc.HeldItem.Num);
                        }
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ItemManager.Items[npc.HeldItem.Num].Name + " became sticky!", Text.BrightRed), character.X, character.Y, 10);
                    } else {
                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + character.Name + "...", Text.Blue), character.X, character.Y, 10);
                    }
                }
            }
            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #16
0
        public static void RemoveExtraStatus(ICharacter character, IMap map, string name, PacketHitList hitlist, bool sendInfo)
        {
            PacketHitList.MethodStart(ref hitlist);

            ExtraStatus statusToRemove = character.VolatileStatus.GetStatus(name);

            if (statusToRemove != null) {
                string[] nameSegment = name.Split(':');

                bool forme = false, sprite = false, type = false, ability = false, atkSpeed = false,
                    confusion = false, speedLimit = false, mobility = false, visibility = false,
                    darkness = false, swapLock = false, moves = false, extraStatus = false;

                switch (nameSegment[0]) {
                    case "Confusion": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer confused!", Text.WhiteSmoke), character.X, character.Y, 10);
                            confusion = true;
                            extraStatus = true;
                        }
                        break;
                    case "Safeguard": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected by Safeguard!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Status Guard": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from " + (Enums.StatusAilment)(statusToRemove.Tag.ToInt()) + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Confusion Guard": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from confusion!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Mist": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Mist wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "LuckyChant": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Lucky Chant wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Reflect": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Reflect wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "LightScreen": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Light Screen wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "TypeReduce": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " no longer takes less damage from " + ((Enums.PokemonType)statusToRemove.Counter).ToString() + "-type attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "TypeBoost": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ((Enums.PokemonType)statusToRemove.Counter).ToString() + "-type attacks are no longer boosted!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "AttackReturn": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer set to counter " + ((Enums.MoveCategory)statusToRemove.Counter).ToString() + " attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Taunt": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s taunt wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            moves = true;
                            extraStatus = true;
                        }
                        break;
                    case "Snatch": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer waiting to snatch a move!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Rage": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s rage faded away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "FocusEnergy": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Focus Energy wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Torment": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Torment wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            moves = true;
                            extraStatus = true;
                        }
                        break;
                    case "Encore": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s encore ended!", Text.WhiteSmoke), character.X, character.Y, 10);
                            moves = true;
                            extraStatus = true;
                        }
                        break;
                    case "Immobilize": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer immobilized!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Blind": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can see again!", Text.WhiteSmoke), character.X, character.Y, 10);
                            darkness = true;
                        }
                        break;
                    case "Nausea": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer nauseated!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Shocker": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer shocked!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Invisible": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became visible again!", Text.WhiteSmoke), character.X, character.Y, 10);
                            visibility = true;
                        }
                        break;
                    case "Telekinesis": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer floating!", Text.WhiteSmoke), character.X, character.Y, 10);

                            extraStatus = true;
                        }
                        break;
                    case "GastroAcid": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s abilities are no longer nullified!", Text.WhiteSmoke), character.X, character.Y, 10);
                            ability = true;
                            extraStatus = true;
                        }
                        break;
                    case "Attract": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer infatuated!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            extraStatus = true;
                        }
                        break;
                    case "Nightmare": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will no longer have nightmares when it sleeps!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Follow": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer focused on a single target!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Embargo": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can use items again!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "HealBlock": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can recover HP again!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Ingrain": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer under the effects of Ingrain!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Bind": {
                            if (sendInfo && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Bind!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Clamp": {
                            if (sendInfo && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Clamp!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Wrap": {
                            if (sendInfo && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Wrap!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "FireSpin": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Fire Spin!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Whirlpool": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Whirlpool!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Infestation": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Infestation!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "SandTomb": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Sand Tomb!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "MagmaStorm": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Magma Storm!", Text.WhiteSmoke), character.X, character.Y, 10);
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "LeechSeed": {
                            if (sendInfo && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer seeded!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                        }
                        break;
                    case "MoveSeal": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[nameSegment[1].ToInt()].MoveNum].Name + " is no longer sealed!", Text.WhiteSmoke), character.X, character.Y, 10);
                        moves = true;
                        }
                        break;
                    case "Disable": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer disabled!", Text.WhiteSmoke), character.X, character.Y, 10);
                            moves = true;
                        }
                        break;
                    case "FocusPunch": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s lost its focus and couldn't move!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        speedLimit = true;
                            swapLock = true;
                        break;
                    case "SuperCharge": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer charged with power!", Text.WhiteSmoke), character.X, character.Y, 10);
                        extraStatus = true;
                        }
                        break;
                    case "Charge": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer electrically charged!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "SureShot": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " lost its aim!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Substitute": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s substitute faded away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            sprite = true;
                            forme = true;
                        }
                        break;
                    case "Bide": {
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "Stockpile": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s stockpiled effect wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Roost": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took flight again!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "PerishCount": {
                        if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s perish count wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Curse": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The curse was lifted from " + character.Name + "!", Text.BrightRed), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Yawn": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer drowsy!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Sleepless": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer sleepless!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "WideGuard": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from wide-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "QuickGuard": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected from far-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Protect": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Endure": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " stopped enduring!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "MagicCoat": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Counter": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Counter wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "MirrorCoat": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Mirror Coat wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "MetalBurst": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Metal Burst wore off!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "DestinyBond": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " gave up on the Destiny Bond!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Rebound": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is no longer set to counter attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            extraStatus = true;
                        }
                        break;
                    case "Illusion": {
                            if (sendInfo) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Illusion was broken!", Text.WhiteSmoke), character.X, character.Y, 10);
                            sprite = true;
                            extraStatus = true;
                            forme = true;
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(503, character.X, character.Y));
                        }
                        break;
                    case "SkyDrop": {
                            if (sendInfo && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was freed from Sky Drop!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            sprite = true;
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "SemiInvul": {
                        sprite = true;
                        speedLimit = true;
                        swapLock = true;
                        forme = true;
                        }
                        break;
                    case "Slip":
                    case "SuperMobile": {
                        mobility = true;
                        }
                        break;
                    case "Rampage":
                    case "Rolling":
                    case "FuryCutter":
                    case "EchoedVoice":
                    case "DefenseCurl":
                    case "Minimize":
                    case "FlashFire":
                    case "LastHitBy":
                    case "LastHitByOther":
                    case "TimesLastMoveUsed": {

                        }
                        break;
                    case "Ability1":
                    case "Ability2":
                    case "Ability3": {
                        ability = true;
                        }
                        break;
                    case "FutureSight":
                    case "Exposed":
                    case "MiracleEye":
                    case "MagnetRise":
                    case "Grudge":
                    case "AquaRing":
                    case "Wish":
                    case "Autotomize": {
                        extraStatus = true;
                        }
                        break;
                    case "Type1":
                    case "Type2": {
                        type = true;
                        }
                        break;
                    case "LastUsedMoveSlot": {
                        moves = true;
                        }
                        break;
                    case "MovementSpeed": {
                        speedLimit = true;
                        }
                        break;
                    case "SolarBeam":
                    case "RazorWind":
                    case "Avalanche":
                    case "VitalThrow": {
                            speedLimit = true;
                            swapLock = true;
                        }
                        break;
                    case "SkullBash":
                    case "SkyAttack": {
                            swapLock = true;
                        }
                        break;

                }

                character.VolatileStatus.Remove(statusToRemove);

                //if (character.CharacterType == Enums.CharacterType.Recruit) {
                //    PacketBuilder.AppendVolatileStatus(((Recruit)character).Owner, hitlist);
                //} else if (character.CharacterType == Enums.CharacterType.MapNpc) {
                //    PacketBuilder.AppendNpcVolatileStatus(map, hitlist, ((MapNpc)character).MapSlot);
                //}

                RefreshCharacterTraits(character, map, hitlist, forme, sprite, type, ability, atkSpeed, confusion, speedLimit, mobility, visibility, darkness, swapLock, moves, extraStatus);

            }

            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #17
0
        public static void RemoveMapStatus(IMap map, string name, bool msg, PacketHitList hitlist)
        {
            if (map.TempStatus.GetStatus(name) != null) {
                map.TempStatus.Remove(name);

                if (msg) {
                    switch (name) {
                        case "TrickRoom": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's dimensions returned to normal.", Text.BrightBlue));
                            }
                            break;
                        case "Gravity": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The floor's gravity returned to normal.", Text.BrightBlue));
                            }
                            break;
                        case "WonderRoom": {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All physical and special attacks returned to normal.", Text.BrightBlue));
                            }
                            break;
                        case "MagicRoom": {
                                TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < targets.Count; i++) {
                                    targets[i].RefreshActiveItemList();
                                }
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All items regained their effects!", Text.BrightBlue));
                            }
                            break;
                    }
                }
                RefreshMapTraits(map, hitlist);
            }
        }
예제 #18
0
        public static void SetMapWeather(IMap map, Enums.Weather weather, PacketHitList hitlist)
        {
            TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, 0, 0, Enums.Direction.Up, true, true, false);
            for (int i = 0; i < checkedTargets.Count; i++) {

                if (map.Weather == Enums.Weather.None && (HasAbility(checkedTargets[i], "Cloud Nine") || HasAbility(checkedTargets[i], "Air Lock"))) {
                    if (checkedTargets[i].CharacterType == Enums.CharacterType.Recruit) {
                        if (((Recruit)checkedTargets[i]).Owner.Player.Dead) {

                        } else {
                            return;
                        }
                    } else {
                        return;
                    }
                }
            }
            map.Weather = weather;
            hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("weather", ((int)map.Weather).ToString()));
        }
예제 #19
0
        public static void AddExtraStatus(ICharacter character, ICharacter attacker, IMap map, string name, int counter, ICharacter target, string tag, PacketHitList hitlist, bool msg)
        {
            PacketHitList.MethodStart(ref hitlist);

            if (CheckStatusProtection(character, attacker, map, name + ":" + counter, tag, true, hitlist)) {
                PacketHitList.MethodEnded(ref hitlist);
                return;
            }

            if (name == "MovementSpeed" && character.VolatileStatus.GetStatus(name) != null ||
                name == "TypeReduce" && character.VolatileStatus.GetStatus(name) != null ||
                name == "TypeBoost" && character.VolatileStatus.GetStatus(name) != null ||
                name == "AttackReturn" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Type1" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Type2" && character.VolatileStatus.GetStatus(name) != null ||
                name == "LastUsedMoveSlot" && character.VolatileStatus.GetStatus(name) != null ||
                name == "TimesLastMoveUsed" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Stockpile" && character.VolatileStatus.GetStatus(name) != null ||
                name == "LastHitBy" && character.VolatileStatus.GetStatus(name) != null ||
                name == "LastMoveHitBy" && character.VolatileStatus.GetStatus(name) != null ||
                name == "PerishCount" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Curse" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Charge" && character.VolatileStatus.GetStatus(name) != null ||
                name == "SureShot" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Follow" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Ability1" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Ability2" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Ability3" && character.VolatileStatus.GetStatus(name) != null ||
                name == "ProxyAttack" && character.VolatileStatus.GetStatus(name) != null ||
                name == "ProxyDefense" && character.VolatileStatus.GetStatus(name) != null ||
                name == "ProxySpAttack" && character.VolatileStatus.GetStatus(name) != null ||
                name == "ProxySpDefense" && character.VolatileStatus.GetStatus(name) != null) {
                RemoveExtraStatus(character, map, name, hitlist, false);
            }

            if (name == "TypeReduce" && character.VolatileStatus.GetStatus(name) != null ||
                name == "TypeBoost" && character.VolatileStatus.GetStatus(name) != null ||
                name == "AttackReturn" && character.VolatileStatus.GetStatus(name) != null ||
                name == "Status Guard" && character.VolatileStatus.GetStatus(name) != null) {
                RemoveExtraStatus(character, map, name, hitlist, true);
            }

            if (name == "LeechSeed" && character.VolatileStatus.GetStatus(name) != null && counter == 1) {
                RemoveBondedExtraStatus(character, map, "LeechSeed:1", hitlist, msg);
            }

            if (character.VolatileStatus.GetStatus(name) == null) {
                ExtraStatus newStatus = new ExtraStatus();
                newStatus.Name = name;
                newStatus.Emoticon = -1;
                newStatus.Counter = counter;
                newStatus.Target = target;
                newStatus.Tag = tag;
                character.VolatileStatus.Add(newStatus);
                string[] nameSegment = name.Split(':');

                //announce to map

                switch (nameSegment[0]) {

                    case "Confusion": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became confused!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 4;
                            RefreshCharacterConfusion(character, map, hitlist);
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Safeguard": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected with a veil!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 137;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Status Guard": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from " + (Enums.StatusAilment)(tag.ToInt()) + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 39;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Confusion Guard": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from confusion!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 39;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Mist": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is shrouded in mist!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 179;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "LuckyChant": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Lucky Chant blocked it from critical hits!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 193;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Reflect": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Reflect slightly raised its Defense!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 25;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "LightScreen": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Light Screen slightly raised its Special Defense!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 67;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Slip": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now travel on water!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterMobility(character, map, hitlist);
                        }
                        break;
                    case "SuperMobile": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now travel on any terrain!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterMobility(character, map, hitlist);
                        }
                        break;
                    case "MovementSpeed": {
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            ExtraStatus addedStatus = character.VolatileStatus.GetStatus("MovementSpeed");
                            if (addedStatus.Counter > 2) addedStatus.Counter = 2;
                            if (addedStatus.Counter < -3) addedStatus.Counter = -3;

                            switch (GetSpeedLimit(character)) {
                                case Enums.Speed.SuperSlow: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at quarter speed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case Enums.Speed.Slow: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at half speed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case Enums.Speed.Walking: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was slowed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case Enums.Speed.Running: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at normal speed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                        RemoveExtraStatus(character, map, name, hitlist, false);
                                    }
                                    break;
                                case Enums.Speed.Fast: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at double speed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case Enums.Speed.SuperFast: {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is at quadruple speed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                            }
                        }
                        break;
                    case "AquaRing": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is surrounded by a veil of water!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 22;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Wish": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A wish was made for " + character.Name + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 187;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Substitute": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " created a substitute!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSprite(character, map, hitlist);
                        }
                        break;
                    case "Blind": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became blinded!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterDarkness(character, map, hitlist);
                            newStatus.Emoticon = 17;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Nausea": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became nauseated!  It can't eat anything!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 36;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Shocker": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became shocked!  It can't tell friend from foe!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterDarkness(character, map, hitlist);
                            newStatus.Emoticon = 64;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Immobilize": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became immobilized!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "GastroAcid": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s abilities were nullified!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 63;
                            RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, true);
                        }
                        break;
                    case "Ability1": {
                            if (tag != "None") {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            if (tag == "Insomnia") {
                                if (character.StatusAilment == Enums.StatusAilment.Sleep) {
                                    SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist);
                                }
                                RemoveExtraStatus(character, map, "Yawn", hitlist);
                            }
                            RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false);
                        }
                        break;
                    case "Ability2": {
                            if (tag != "None") {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            if (tag == "Insomnia") {
                                if (character.StatusAilment == Enums.StatusAilment.Sleep) {
                                    SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist);
                                }
                                RemoveExtraStatus(character, map, "Yawn", hitlist);
                            }
                            RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false);
                        }
                        break;
                    case "Ability3": {
                            if (tag != "None") {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired the ability " + tag + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            if (tag == "Insomnia") {
                                if (character.StatusAilment == Enums.StatusAilment.Sleep) {
                                    SetStatusAilment(character, map, Enums.StatusAilment.OK, 0, hitlist);
                                }
                                RemoveExtraStatus(character, map, "Yawn", hitlist);
                            }
                            RefreshCharacterTraits(character, map, hitlist, false, false, false, true, false, false, false, false, false, false, false, false, false);
                        }
                        break;
                    case "Nightmare": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will get nightmares when it sleeps!", Text.BrightRed), character.X, character.Y, 10);
                            newStatus.Emoticon = 85;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Attract": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became infatuated!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            if (character.HasActiveItem(704)) {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has a Destiny Knot!", Text.WhiteSmoke), character.X, character.Y, 10);
                                TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 10, map, character, character.X, character.Y, Enums.Direction.Up, true, false, false);
                                for (int i = 0; i < targets.Count; i++) {
                                    AddExtraStatus(targets[i], null, map, "Attract", counter, null, "", hitlist, true);
                                }
                            }
                        }
                        break;
                    case "Follow": {
                            if (target != null) {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can only attack " + target.Name + " now!", Text.WhiteSmoke), character.X, character.Y, 10);
                            } else {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "is focused on a single target now!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            newStatus.Emoticon = 75;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Embargo": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was prevented from using items!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 147;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "HealBlock": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was prevented from recovering HP!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 91;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Ingrain": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " planted its roots!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "Bind":
                    case "Clamp":
                    case "Wrap": {
                            if (nameSegment[1] == "0") {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped by the foe!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "FireSpin":
                    case "Whirlpool":
                    case "SandTomb":
                    case "Infestation": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped in the swarm!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "MagmaStorm": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was trapped in the vortex!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "LeechSeed": {
                            if (nameSegment[1] == "0") {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took on a Leech Seed!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                        }
                        break;
                    case "Taunt": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " fell for the taunt!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 23;
                            RefreshCharacterMoves(character, map, hitlist);
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Snatch": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is ready to snatch moves away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 48;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Rage": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became enraged!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 136;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "FocusEnergy": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is getting pumped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 94;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Exposed": {
                            if (msg && !HasActiveBagItem(character, 20, 9, 0) && !HasActiveBagItem(character, 20, 6, 0)) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became exposed to Normal- and Fighting- type attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 16;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "MiracleEye": {
                            if (msg && !HasActiveBagItem(character, 20, 2, 0)) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can now hit Dark- types with Psychic- type moves!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 116;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Torment": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was subjected to Torment!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 149;
                            RefreshCharacterMoves(character, map, hitlist);
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Encore": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " received an encore!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 75;
                            RefreshCharacterMoves(character, map, hitlist);
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "TypeReduce": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " will take less damage from " + ((Enums.PokemonType)counter).ToString() + "-type attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 96;
                        RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Type1": {
                            if (counter > 0) {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type changed to " + ((Enums.PokemonType)counter).ToString() + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            RefreshCharacterTraits(character, map, hitlist, false, false, true, false, false, false, false, false, false, false, false, false, false);
                        }
                        break;
                    case "Type2": {
                            if (counter > 0) {
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s second type changed to " + ((Enums.PokemonType)counter).ToString() + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            RefreshCharacterTraits(character, map, hitlist, false, false, true, false, false, false, false, false, false, false, false, false, false);
                        }
                        break;
                    case "TypeBoost": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + ((Enums.PokemonType)counter).ToString() + "-type attacks were boosted!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 111;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "AttackReturn": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter " + ((Enums.MoveCategory)counter).ToString() + " attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 117;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Pierce": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " acquired a Pierce status!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 192;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Longtoss": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s range increased for single-target attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 186;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "FlashFire": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Flash Fire increased the power of its Fire-type moves!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "MoveSeal": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[nameSegment[1].ToInt()].MoveNum].Name + " was sealed!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterMoves(character, map, hitlist);
                        }
                        break;
                    case "Disable": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[counter].MoveNum].Name + " was disabled!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 161;
                            RefreshCharacterMoves(character, map, hitlist);
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "SolarBeam": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took in sunlight!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "SkullBash": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " lowered its head!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "RazorWind": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " whipped up a whirlwind!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "SkyAttack": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became cloaked in a harsh light!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "FocusPunch": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is tightening its focus!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "SuperCharge": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is charged with power!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Charge": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is charging electrical power!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 69;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "SureShot": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " took aim!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 122;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Bide": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " began storing energy!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "Avalanche": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " readied an avalanche!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "VitalThrow": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " readied Vital Throw!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "Stockpile": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " stockpiled " + counter + "!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Roost": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " landed on the ground!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "SkyDrop": {
                        RemoveExtraStatus(character, map, "Grounded", hitlist, false);
                        RefreshCharacterSprite(character, map, hitlist);
                            if (msg && nameSegment[1] == "0") {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was taken into the sky!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            RefreshCharacterSpeedLimit(character, map, hitlist);
                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "SemiInvul": {
                        RefreshCharacterSprite(character, map, hitlist);
                        switch (tag) {
                                case "Dig": {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " burrowed its way underground!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case "Bounce": {
                                        RemoveExtraStatus(character, map, "Grounded", hitlist, false);
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " sprang up!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case "Fly": {
                                        RemoveExtraStatus(character, map, "Grounded", hitlist, false);
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " flew up high!", Text.WhiteSmoke), character.X, character.Y, 10);
                                    }
                                    break;
                                case "ShadowForce": {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " vanished instantly!", Text.WhiteSmoke), character.X, character.Y, 10);
                                        RefreshCharacterSprite(character, map, hitlist);
                                    }
                                    break;
                                case "Dive": {
                                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " hid underwater!", Text.WhiteSmoke), character.X, character.Y, 10);

                                    }
                                    break;
                            }

                            RefreshCharacterSwapLock(character, map, hitlist);
                        }
                        break;
                    case "Invisible": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became invisible!", Text.WhiteSmoke), character.X, character.Y, 10);
                            RefreshCharacterVisibility(character, map, hitlist);
                        }
                        break;
                    case "PerishCount": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s perish count fell to " + counter + "!", Text.BrightRed), character.X, character.Y, 10);
                        }
                        break;
                    case "Curse": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A curse was placed on " + character.Name + "!", Text.BrightRed), character.X, character.Y, 10);
                            newStatus.Emoticon = 99;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Grudge": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wants a foe to bear a grudge!", Text.BrightRed), character.X, character.Y, 10);
                            newStatus.Emoticon = 123;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "FutureSight": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was targeted by Future Sight!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 173;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Yawn": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became drowsy!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 14;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Sleepless": {
                            if (character.StatusAilment == Enums.StatusAilment.Sleep) {
                                character.StatusAilment = Enums.StatusAilment.OK;
                                character.StatusAilmentCounter = 0;
                                if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was awakened!", Text.WhiteSmoke), character.X, character.Y, 10);
                                if (character.CharacterType == Enums.CharacterType.Recruit) {
                                    PacketBuilder.AppendStatusAilment(((Recruit)character).Owner, hitlist);
                                } else {
                                    PacketBuilder.AppendNpcStatusAilment((MapNpc)character, hitlist);
                                }
                            }
                            RemoveExtraStatus(character, map, "Yawn", hitlist);
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became sleepless!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 88;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Grounded": {
                            DropToGround(character, map, hitlist, false);
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " dropped to the ground!", Text.WhiteSmoke), character.X, character.Y, 10);
                        }
                        break;
                    case "Protect": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " protected itself!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 165;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "WideGuard": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became protected from wide-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 151;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "QuickGuard": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became protected from far-range attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 109;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Endure": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " braced itself!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 145;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "MagicCoat": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 95;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "MagnetRise": {
                            RemoveExtraStatus(character, map, "Grounded", hitlist, false);
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " levitated using Magnet Rise!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 125;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Conversion": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has Conversion up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 162;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Conversion2": {
                            if (HasActiveBagItem(character, 51, 0, 0)) {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " 's item activated!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 176;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        } else {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " has Conversion 2 up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 176;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        }
                        break;
                    case "Telekinesis": {
                            RemoveExtraStatus(character, map, "Grounded", hitlist, false);
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was hurled into the air!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 83;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Autotomize": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " became lighter!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 181;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Counter": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter physical attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 191;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "MirrorCoat": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to reflect special attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 81;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "MetalBurst": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to reflect attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 53;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "DestinyBond": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is trying to take its foe with it!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 43;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Rebound": {
                            if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is set to counter attacks!", Text.WhiteSmoke), character.X, character.Y, 10);
                            newStatus.Emoticon = 159;
                            RefreshCharacterVolatileStatus(character, map, hitlist);
                        }
                        break;
                    case "Illusion": {
                        if (msg) hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " hid behind an illusion!", Text.WhiteSmoke), character.X, character.Y, 10);
                        RefreshCharacterSprite(character, map, hitlist);
                        }
                        break;
                    case "DefenseCurl":
                    case "Minimize":
                    case "Rampage":
                    case "Rolling":
                    case "FuryCutter":
                    case "EchoedVoice":
                    case "TimesLastMoveUsed":
                    case "LastHitBy":
                    case "LastMoveHitBy":
                    case "LastMoveHitByOther": {

                        }
                        break;
                    case "LastUSedMoveSlot": {
                        RefreshCharacterMoves(character, map, hitlist);
                        }
                        break;
                }

            }

            //if (character.CharacterType == Enums.CharacterType.Recruit) {
            //    PacketBuilder.AppendVolatileStatus(((Recruit)character).Owner, hitlist);
            //} else if (character.CharacterType == Enums.CharacterType.MapNpc) {
            //    PacketBuilder.AppendNpcVolatileStatus(map, hitlist, ((MapNpc)character).MapSlot);
            //}

            //RefreshCharacterTraits(character, map, hitlist);

            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #20
0
        public static void ActivateTrap(IMap map, int x, int y, int script, PacketHitList hitlist)
        {
            PacketHitList.MethodStart(ref hitlist);

            if (script != 7 && script != 26 && Server.Math.Rand(0, 5) == 0 && map.Tile[x, y].Data3 < 1) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic126.wav"), x, y, 10);
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The trap failed to work!", Text.Blue), x, y, 10);
            } else {

                TargetCollection targets;

                switch (script) {
                    case 2: {//EXPLOSIONNNNN
                            //Damp
                            bool explode = true;

                                TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < checkedTargets.Count; i++) {
                                    if (HasAbility(checkedTargets[i], "Damp")) {
                                        explode = false;
                                    }
                                }

                            if (explode) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic215.wav"), x, y, 10);
                                for (int i = x - 2; i <= x + 2; i++) {
                                    for (int j = y - 2; j <= y + 2; j++) {
                                        if (i < 0 || j < 0 || i > map.MaxX || j > map.MaxY) {

                                        } else {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(497, i, j));
                                        }
                                    }
                                }
                                targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 2, map, null, x, y, Enums.Direction.Up, true, true, true);
                                for (int i = 0; i < targets.Count; i++) {
                                    if (HasActiveBagItem(targets[i], 6, 0, 0)) {
                                        DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true);
                                    } else {
                                        DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].HP / 2, Enums.KillType.Tile, hitlist, true);
                                    }
                                }
                            } else {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic320.wav"), x, y, 10);
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(505, x, y));
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), x, y, 10);
                            }
                        }
                        break;
                    case 3: {//chestnut
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic218.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(551, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " was pelted by chestnuts!", Text.BrightRed), x, y, 10);
                                DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 15, Enums.KillType.Tile, hitlist, true);
                            }
                        }
                        break;
                    case 4: {//ppzero
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic179.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(493, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                int moveSlot = Server.Math.Rand(0, 4);
                                if (targets[i].Moves[moveSlot].MoveNum > -1 && targets[i].Moves[moveSlot].CurrentPP > 0) {
                                    targets[i].Moves[moveSlot].CurrentPP = 0;
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(targets[i].Name + "'s move " + MoveManager.Moves[targets[i].Moves[moveSlot].MoveNum].Name + " lost all of its PP!", Text.BrightRed), x, y, 10);
                                    if (targets[i].CharacterType == Enums.CharacterType.Recruit) {
                                        PacketBuilder.AppendMovePPUpdate(((Recruit)targets[i]).Owner, hitlist, moveSlot);
                                    }
                                } else {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Nothing particularly bad happened to " + targets[i].Name + "...", Text.Blue), x, y, 10);
                                }
                            }
                        }
                        break;
                    case 5: {//grimy
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic220.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(494, x, y));
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Sludge splashed up from the ground!", Text.BrightRed), x, y, 10);
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                Grimy(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), hitlist);
                            }
                        }
                        break;
                    case 6: {//poison
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic221.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(496, x, y));
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Poison spikes shot out!", Text.BrightRed), x, y, 10);
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, 1, hitlist);
                            }
                        }
                        break;
                    case 7: {//random
                            string trapString = "";
                            if (map.Tile[x, y].String3.Contains(";")) {
                                trapString = map.Tile[x, y].String3;
                            } else {
                                trapString = "2;3;4;5;6;15;16;17;18;19;23;25;26;28;39;42;43;44;49;50;51;52;53;70";
                            }
                            string[] trapSelection = trapString.Split(';');
                            string chosenTrap = trapSelection[Server.Math.Rand(0, trapSelection.Length)];
                            if (chosenTrap.IsNumeric() && chosenTrap.ToInt() != 7) {
                                targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < targets.Count; i++) {
                                    if (i != null && WillTrapActivate(targets[i], map, x, y)) {
                                        ActivateTrap(MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].X, targets[i].Y, chosenTrap.ToInt(), hitlist);
                                    }
                                }
                            } else {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("But nothing happened...", Text.Blue), x, y, 10);
                            }
                        }
                        break;
                    case 15: {//warp
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic256.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(555, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                RandomWarp(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), true, hitlist);
                            }
                        }
                        break;
                    case 16: {//pokemon
                            //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSoundPacket(), x, y, 10);
                            //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(552, x, y));
                            //replace all nearby items with Pokemon
                        }
                        break;
                    case 17: {//spikes
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(553, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                if (map.Tile[x, y].String3.IsNumeric()) {
                                    DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * map.Tile[x, y].String3.ToInt() / 8, Enums.KillType.Tile, hitlist, true);
                                } else {
                                    DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * Server.Math.Rand(1, 4) / 8, Enums.KillType.Tile, hitlist, true);
                                }
                            }
                        }
                        break;
                    case 18: {//toxic spikes
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(554, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 10, Enums.KillType.Tile, hitlist, true);
                                if (map.Tile[x, y].String3.IsNumeric()) {
                                    SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, map.Tile[x, y].String3.ToInt(), hitlist);
                                } else {
                                    SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Poison, Server.Math.Rand(1, 3), hitlist);
                                }
                            }
                        }
                        break;
                    case 19: {//stealth rock
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic122.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(556, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                int HPFraction = DamageCalculator.Effectiveness[DamageCalculator.CalculateTypeMatchup(Enums.PokemonType.Rock, targets[i].Type1) + DamageCalculator.CalculateTypeMatchup(Enums.PokemonType.Rock, targets[i].Type2)];
                                DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP * HPFraction / 1280, Enums.KillType.Tile, hitlist, true);
                            }
                        }
                        break;
                    case 23: {//sticky
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic159.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(494, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                Sticky(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), hitlist);
                            }
                        }
                        break;
                    case 25: {//mud
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic473.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(495, x, y));
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Mud splashed up from the ground!", Text.BrightRed), x, y, 10);
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                switch (Server.Math.Rand(0, 7)) {
                                    case 0: {
                                        ChangeAttackBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 1: {
                                        ChangeDefenseBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 2: {
                                        ChangeSpAtkBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 3: {
                                        ChangeSpDefBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 4: {
                                        ChangeSpeedBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 5: {
                                        ChangeAccuracyBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                    case 6: {
                                        ChangeEvasionBuff(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), -3, hitlist);
                                        }
                                        break;
                                }
                            }
                        }
                        break;
                    case 26: {//wonder tile
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic121.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(499, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                RemoveBuffs(targets[i]);
                                hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + "'s stats were returned to normal!", Text.WhiteSmoke), x, y, 10);
                            }
                        }
                        break;
                    case 28: {//trip
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic172.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(557, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " tripped!", Text.BrightRed), x, y, 10);
                                InvDrop(targets[i], map, hitlist);
                            }
                        }
                        break;
                    case 34: {//secret (Stairs, etc), not used here

                        }
                        break;
                    case 39: {//pitfall
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("DeepFall.wav"), x, y, 10);
                            //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(494, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                if (targets[i].CharacterType == Enums.CharacterType.Recruit) {
                                    Client client = ((Recruit)targets[i]).Owner;
                                    string[] trapData = map.Tile[x, y].String3.Split(';');
                                    try {
                                        if (map.Tile[x, y].String3 == "" && map.MapType == Enums.MapType.RDungeonMap) {//fall down a level in a random dungeon
                                            if (RDungeonManager.RDungeons[((RDungeonMap)map).RDungeonIndex].Direction == Enums.Direction.Up) {//fall down a level
                                                client.Player.WarpToRDungeon(((RDungeonMap)map).RDungeonIndex, ((RDungeonMap)map).RDungeonFloor - 1);
                                            } else {//fall up a level
                                                client.Player.WarpToRDungeon(((RDungeonMap)map).RDungeonIndex, ((RDungeonMap)map).RDungeonFloor + 1);
                                            }
                                        } else {//fall down specific coordinates
                                            hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " fell through!", Text.BrightRed), x, y, 10);
                                            Messenger.PlayerWarp(client, trapData[0].ToInt(), trapData[1].ToInt(), trapData[2].ToInt());
                                        }
                                        DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 10, Enums.KillType.Tile, hitlist, true);
                                    } catch {
                                        hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateChatMsg("This is a bad trap.  Report this to an admin.", Text.Black), x, y, 10);
                                    }
                                } else if (targets[i].CharacterType == Enums.CharacterType.MapNpc) {
                                    hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " fell through!", Text.BrightRed), x, y, 10);
                                    //((MapNpc)i).Num = 0;
                                    //((MapNpc)i).HP = 0;
                                    MapManager.RetrieveActiveMap(targets[i].MapID).ActiveNpc[((MapNpc)targets[i]).MapSlot] = new MapNpc(targets[i].MapID, ((MapNpc)targets[i]).MapSlot);
                                    hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), TcpPacket.CreatePacket("npcdead", ((MapNpc)targets[i]).MapSlot));
                                }
                            }
                        }
                        break;
                    case 42: {//seal
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic275.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(558, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                int rand = Server.Math.Rand(0, 4);
                                AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MoveSeal:" + rand, 0, null, "", hitlist);
                            }
                        }
                        break;
                    case 43: {//slow
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic180.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(559, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                ExtraStatus status = targets[i].VolatileStatus.GetStatus("MovementSpeed");
                                if (status != null) {
                                    AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MovementSpeed", status.Counter - 1, null, "", hitlist);
                                } else {
                                    AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "MovementSpeed", -1, null, "", hitlist);
                                }
                                //AddExtraStatus(i, MapManager.RetrieveActiveMap(i.MapID), "MovementSpeed", (int)GetSpeedLimit(i) - 1, null, hitlist);
                            }
                        }
                        break;
                    case 44: {//spin
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic198.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(560, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                hitlist.AddPacketToMap(MapManager.RetrieveActiveMap(targets[i].MapID), PacketBuilder.CreateBattleMsg(targets[i].Name + " spun around and around...", Text.BrightRed), x, y, 10);
                                AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "Confusion", 15, null, "", hitlist);
                                //Confuse(i, MapManager.RetrieveActiveMap(i.MapID), 15, hitlist);
                            }
                        }
                        break;
                    case 49: {//summon
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic197.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(561, x, y));
                            //hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(492, x, y));
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("A sweet scent wafted out from the ground!", Text.BrightRed), x, y, 10);
                            for (int i = 0; i < Constants.MAX_MAP_NPCS / 4; i++) {
                                if (Server.Math.Rand(0,2) == 0) {
                                    SpawnNpcInRange(map, x, y, 2, hitlist);
                                } else {
                                    map.SpawnNpc();
                                }
                            }
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Wild Pokémon were attracted to the scent!", Text.BrightRed), x, y, 10);
                        }
                        break;
                    case 50: {//grudge
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic468.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(562, x, y));
                            //hitlist.AddPacketToMap(mapID, PacketBuilder.CreateSpellAnim(492, x, y));
                            for (int i = 0; i < Constants.MAX_MAP_NPCS / 4; i++) {
                                SpawnNpcInRange(map, x, y, 2, hitlist);
                            }
                            for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                                if (map.ActiveNpc[i].Num > 0) {
                                    AddExtraStatus(map.ActiveNpc[i], map, "Grudge", 0, null, "", hitlist);
                                }
                            }
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("All Pokémon on the floor now hold a grudge!", Text.BrightRed), x, y, 10);
                        }
                        break;
                    case 51: {//selfdestruct
                            bool explode = true;

                                TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                                for (int i = 0; i < checkedTargets.Count; i++) {
                                    if (HasAbility(checkedTargets[i], "Damp")) {
                                        explode = false;
                                    }
                                }

                            if (explode) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic216.wav"), x, y, 10);
                                    for (int i = x - 1; i <= x + 1; i++) {
                                        for (int j = y - 1; j <= y + 1; j++) {
                                            if (i < 0 || j < 0 || i > map.MaxX || j > map.MaxY) {

                                            } else {
                                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(497, i, j));
                                            }
                                        }
                                    }
                                    targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, map, null, x, y, Enums.Direction.Up, true, true, false);
                                    for (int i = 0; i < targets.Count; i++) {
                                        if (HasActiveBagItem(targets[i], 6, 0, 0)) {
                                            DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), 1, Enums.KillType.Tile, hitlist, true);
                                        } else {
                                            DamageCharacter(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true);
                                        }
                                    }
                            } else {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic320.wav"), x, y, 10);
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(505, x, y));
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), x, y, 10);
                            }
                        }
                        break;
                    case 52: {//slumber
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic217.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(492, x, y));
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("Sleeping gas erupted from the ground!", Text.BrightRed), x, y, 10);
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                SetStatusAilment(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), Enums.StatusAilment.Sleep, 8, hitlist);
                            }
                        }
                        break;
                    case 53: {//gust
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic199.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(564, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {

                                BlowBack(targets[i], map, (Enums.Direction)Server.Math.Rand(0, 4), hitlist);
                            }
                        }
                        break;
                    case 70: {//shocker
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("Magic356.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(538, x, y));
                            targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 0, map, null, x, y, Enums.Direction.Up, true, true, false);
                            for (int i = 0; i < targets.Count; i++) {
                                AddExtraStatus(targets[i], MapManager.RetrieveActiveMap(targets[i].MapID), "Shocker", 30, null, "", hitlist);
                            }
                        }
                        break;
                }
            }
            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #21
0
        public static void ChangeAttackBuff(ICharacter character, ICharacter attacker, IMap map, int counter, PacketHitList hitlist)
        {
            if (counter < 0) {
                if (character.VolatileStatus.GetStatus("Mist") != null) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s stats didn't drop due to the mist!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }
                if (attacker != character && character.VolatileStatus.GetStatus("Substitute") != null) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Substitute!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }

                //twist band
                if (character.HasActiveItem(172)) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Twist Band prevented its Attack stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }

                if (HasActiveBagItem(character, 49, 0, 0)) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s item prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }

                if (HasAbility(character, "White Smoke") && !HasAbility(attacker, "Mold Breaker")) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s White Smoke prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }

                if (HasAbility(character, "Clear Body") && !HasAbility(attacker, "Mold Breaker")) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Clear Body prevented its stats from dropping!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }

                if (HasAbility(character, "Hyper Cutter") && !HasAbility(attacker, "Mold Breaker")) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Hyper Cutter prevented its Attack from dropping!", Text.WhiteSmoke), character.X, character.Y, 10);
                    return;
                }
            }

            if (HasAbility(character, "Contrary") && !HasAbility(attacker, "Mold Breaker")) {
                counter *= -1;
            }

            if (HasAbility(character, "Simple") && !HasAbility(attacker, "Mold Breaker")) {
                counter *= 2;
            }

            if (character.AttackBuff >= 10 && counter > 0) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack won't go higher!", Text.WhiteSmoke), character.X, character.Y, 10);
                return;
            } else if (character.AttackBuff <= -10 && counter < 0) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack won't go lower!", Text.WhiteSmoke), character.X, character.Y, 10);
                return;
            }

            if (character.AttackBuff + counter > 10) {
                counter = 10 - character.AttackBuff;
            } else if (character.AttackBuff + counter < -10) {
                counter = -10 - character.AttackBuff;
            }

            if (counter == 0) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack didn't change.", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter == 1) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose slightly.", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter == -1) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell slightly.", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter == 2) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose sharply!", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter == -2) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell harshly!", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter > 2) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack rose drastically!", Text.WhiteSmoke), character.X, character.Y, 10);
            } else if (counter < -2) {
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Attack fell drastically!", Text.WhiteSmoke), character.X, character.Y, 10);
            }
            character.AttackBuff += counter;

            if (counter < 0 && HasAbility(character, "Defiant")) {
                //hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " defied the stat change!", Text.WhiteSmoke), character.X, character.Y, 10);
                ChangeAttackBuff(character, map, 2, hitlist);
            }
            if (counter < 0 && HasAbility(character, "Competitive")) {
                //hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " defied the stat change!", Text.WhiteSmoke), character.X, character.Y, 10);
                ChangeSpAtkBuff(character, map, 2, hitlist);
            }
        }
예제 #22
0
 public static void BlowBack(ICharacter character, IMap map, Enums.Direction dir, PacketHitList hitlist)
 {
     if (HasAbility(character, "Suction Cups")) {
         hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Suction Cups prevented it from being blown back!", Text.WhiteSmoke), character.X, character.Y, 10);
     } else if (character.HasActiveItem(111)) {
         hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Iron Ball prevented it from being blown back!", Text.WhiteSmoke), character.X, character.Y, 10);
     } else {
         WarpToNearestWall(character, map, dir, hitlist);
         hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was blown back!", Text.WhiteSmoke), character.X, character.Y, 10);
     }
 }
예제 #23
0
        public static void HandleDeath(PacketHitList hitlist, Client client, Enums.KillType killType, bool autoSwitch)
        {
            PacketHitList.MethodStart(ref hitlist);

            //aftermath
            if (HasAbility(client.Player.GetActiveRecruit(), "Aftermath")) {
                bool explode = true;
                if (!HasAbility(client.Player.GetActiveRecruit(), "Mold Breaker")) {
                    TargetCollection checkedTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, client.Player.Map, null, 0, 0, Enums.Direction.Up, true, true, false);
                    for (int i = 0; i < checkedTargets.Count; i++) {
                        if (HasAbility(checkedTargets[i], "Damp")) {
                            explode = false;
                        }
                    }
                }

                if (explode) {
                    hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateBattleMsg(client.Player.GetActiveRecruit().Name + " exploded!", Text.BrightRed), client.Player.X, client.Player.Y, 10);
                    hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("magic216.wav"), client.Player.X, client.Player.Y, 10);
                    for (int i = client.Player.X - 1; i <= client.Player.X + 1; i++) {
                        for (int j = client.Player.Y - 1; j <= client.Player.Y + 1; j++) {
                            if (i < 0 || j < 0 || i > client.Player.Map.MaxX || j > client.Player.Map.MaxY) {

                            } else {
                                hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSpellAnim(497, i, j));
                            }
                        }
                    }

                        TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Room, 1, client.Player.Map, client.Player.GetActiveRecruit(), client.Player.X, client.Player.Y, Enums.Direction.Up, true, true, true);
                        for (int i = 0; i < targets.Count; i++) {
                        if (client.Player.Map.Moral == Enums.MapMoral.None) {
                            if (targets[i].HP > 0) {
                                if (HasActiveBagItem(targets[i], 6, 0, 0)) {
                                    DamageCharacter(targets[i], client.Player.Map, 1, Enums.KillType.Tile, hitlist, true);
                                } else {
                                    DamageCharacter(targets[i], client.Player.Map, targets[i].MaxHP / 4, Enums.KillType.Tile, hitlist, true);
                                }
                            }
                            }
                        }

                } else {
                    hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("magic320.wav"), client.Player.X, client.Player.Y, 10);
                    hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSpellAnim(505, client.Player.X, client.Player.Y));
                    hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateBattleMsg("The damp conditions prevented an explosion!", Text.Blue), client.Player.X, client.Player.Y, 10);
                }
            }

            //death flag
            TargetCollection witnesses = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, client.Player.Map, client.Player.GetActiveRecruit(), 0, 0, Enums.Direction.Up, false, true, false);
            for (int i = 0; i < witnesses.Count; i++) {
                AddExtraStatus(witnesses[i], client.Player.Map, "SawAllyFaint", 0, null, "", hitlist);
            }

            // Remove status
            client.Player.GetActiveRecruit().StatusAilment = Enums.StatusAilment.OK;
            client.Player.GetActiveRecruit().StatusAilmentCounter = 0;

            List<ExtraStatus> passedStatus = GetTeamStatus(client.Player.GetActiveRecruit());

            RemoveAllBondedExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, hitlist, false);

            client.Player.GetActiveRecruit().VolatileStatus.Clear();

            foreach (ExtraStatus status in passedStatus) {
                client.Player.GetActiveRecruit().VolatileStatus.Add(status);
            }

            RefreshCharacterTraits(client.Player.GetActiveRecruit(), client.Player.Map, hitlist);

            PacketBuilder.AppendStatusAilment(client, hitlist);

            RemoveBuffs(client.Player.GetActiveRecruit());

            if (Ranks.IsDisallowed(client, Enums.Rank.Moniter)) {
                client.Player.Hunted = false;
                PacketBuilder.AppendHunted(client, hitlist);
            }
            client.Player.Dead = true;
            PacketBuilder.AppendDead(client, hitlist);

            AskAfterDeathQuestion(client);

            /*
            if (client.Player.GetActiveRecruit().HeldItemSlot > -1) {
                if (client.Player.GetActiveRecruit().HeldItem.Num == 222) {//Enigma Berry
                    if (Server.Math.Rand(0, 10) == 0) {
                        Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!!!", Text.BrightGreen);
                        client.Player.GetActiveRecruit().RestoreVitals();
                        client.Player.GetActiveRecruit().RestoreBelly();
                        Messenger.SendPlayerMoves(client);

                        foreach (ExtraStatus status in passedStatus) {
                            client.Player.GetActiveRecruit().VolatileStatus.Add(status);
                        }
                        PacketHitList.MethodEnded(ref hitlist);
                        return;
                    }
                }
            }

            if (client.Player.TournamentMatchUp != null) {
                client.Player.TournamentMatchUp.EndMatchUp(client.Player.TournamentMatchUp.SelectOtherMember(client).Client.Player.CharID);
                PacketHitList.MethodEnded(ref hitlist);
                return;
            }

            //For Reviver Seeds
            int slot = client.Player.HasItem(489);
            if (client.Player.MapID == MapManager.GenerateMapID(660)) {
                slot = 0;
            }
            if (slot > 0) {
                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!", Text.BrightGreen);
                client.Player.GetActiveRecruit().RestoreVitals();
                client.Player.GetActiveRecruit().RestoreBelly();
                Messenger.SendPlayerMoves(client);

                client.Player.TakeItem(489, 1);
                client.Player.GiveItem(488, 1);
                //NetScript.SetPlayerInvItemNum(index, slot, 488);
                Messenger.SendInventory(client);

                foreach (ExtraStatus status in passedStatus) {
                    client.Player.GetActiveRecruit().VolatileStatus.Add(status);
                }
                PacketHitList.MethodEnded(ref hitlist);
                return;

            }
            /*

            //Sacred Ash
            slot = client.Player.HasItem(523);
            if (client.Player.MapID == MapManager.GenerateMapID(660)) {
                slot = 0;
            }
            if (slot > 0) {
                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " was revived!", Text.BrightGreen);
                client.Player.GetActiveRecruit().RestoreVitals();
                client.Player.GetActiveRecruit().RestoreBelly();
                Messenger.SendPlayerMoves(client);
                client.Player.GetActiveRecruit().AttackBuff += 2;
                client.Player.GetActiveRecruit().DefenseBuff += 2;
                client.Player.GetActiveRecruit().SpeedBuff += 2;
                client.Player.GetActiveRecruit().SpAtkBuff += 2;

                client.Player.TakeItem(523, 1);

                Messenger.SendInventory(client);
                return;
            }

            if (autoSwitch && client.Player.ActiveSlot != 0) {
                int activeSlot = client.Player.ActiveSlot;
                string name = client.Player.GetActiveRecruit().Name;
                foreach (ExtraStatus status in passedStatus) {
                    client.Player.GetActiveRecruit().VolatileStatus.Add(status);
                    Messenger.BattleMsg(client, status.Name, Text.BrightRed);
                }

                client.Player.SwapActiveRecruit(0);
                client.Player.RestoreRecruitStats(activeSlot);

                client.Player.RemoveFromTeam(activeSlot);
                if (!string.IsNullOrEmpty(name)) {
                    Messenger.BattleMsg(client, name + " has fainted and returned home!", Text.BrightRed);
                } else {
                    Messenger.BattleMsg(client, "Your team member has fainted and returned home!", Text.BrightRed);
                }
                Messenger.SendActiveTeam(client);
            } else {
                HandleGameOver(client, killType);
            }
            if (exPlayer.Get(client).VoltorbFlip) {
                Messenger.PlaySound(client, "Leave Slot Machine.wav");
            } else {
                Messenger.PlaySound(client, "Death.wav");
            }
            */
            //Messenger.SendBattleDivider(client);
            //RefreshCharacterTraits(client.Player.GetActiveRecruit(), client.Player.Map, hitlist);
            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #24
0
        public static void ClearChamber(IMap map, int startX, int startY, int endX, int endY, PacketHitList hitlist)
        {
            if (map.MapType != Enums.MapType.RDungeonMap) return;
            PacketHitList.MethodStart(ref hitlist);
            int[,] intArray = new int[map.MaxX + 1, map.MaxY + 1];
            for (int x = startX; x <= endX; x++) {
                for (int y = startY; y <= endY; y++) {
                    if (map.Tile[x,y].Type == Enums.TileType.ScriptedSign) {
                        if (map.Tile[x,y].Data1 == 9) {
                            if (map.Tile[x, y].String1.IsNumeric()) {
                                map.SpawnItem(map.Tile[x, y].String1.ToInt(), 1, false, false, map.Tile[x, y].String2, x, y, null);
                            }
                            intArray[x, y] = map.Tile[x, y].String3.ToInt();
                            RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]);
                        } else if (map.Tile[x,y].Data1 == 10) {
                            intArray[x, y] = 3;
                            RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic161.wav"), x, y, 10);
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The chamber was opened!", Text.WhiteSmoke), x, y, 10);
                        }
                    } else if (map.Tile[x, y].RDungeonMapValue >= 1280 && map.Tile[x, y].RDungeonMapValue < 1536) {
                        intArray[x, y] = 1025;
                        RDungeonFloorGen.AmbiguateTile(map.Tile[x, y]);
                        map.Tile[x, y].Type = Enums.TileType.Blocked;
                    }
                }
            }
            DungeonArrayFloor.TextureDungeon(intArray, startX+1, startY+1, endX-1, endY-1);
            for (int x = startX; x <= endX; x++) {
                for (int y = startY; y <= endY; y++) {
                    map.Tile[x, y].RDungeonMapValue = intArray[x, y];
                }
            }

            RDungeonFloorGen.TextureDungeonMap((RDungeonMap)map, startX, startY, endX, endY);

            for (int x = startX; x <= endX; x++) {
                for (int y = startY; y <= endY; y++) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateTilePacket(x, y, map));
                }
            }

            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #25
0
        public static void ReviveCharacter(ICharacter character, IMap map, bool fullHeal, PacketHitList hitlist)
        {
            try {
            PacketHitList.MethodStart(ref hitlist);
            if (fullHeal) {
                character.HP = character.MaxHP;
                for (int i = 0; i < character.Moves.Length; i++) {
                    character.Moves[i].CurrentPP = character.Moves[i].MaxPP;
                }
                if (character.CharacterType == Enums.CharacterType.Recruit) {
                    ((Recruit)character).RestoreBelly();
                }
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was fully revived!", Text.BrightGreen));
            } else {
                int hp = character.MaxHP / 2;
                if (hp < 1) hp = 1;
                character.HP = hp;
                //restore belly to 20
                if (character.CharacterType == Enums.CharacterType.Recruit) {
                    Recruit recruit = character as Recruit;
                    if (recruit.Belly < 25) {
                        recruit.Belly = 25;
                        PacketBuilder.AppendBelly(recruit.Owner, hitlist);
                    }
                }
                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was revived!", Text.BrightGreen));
            }

            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic682.wav"), character.X, character.Y, 10);
            hitlist.AddPacketToMap(map, PacketBuilder.CreateSpellAnim(509, character.X, character.Y));

            if (character.CharacterType == Enums.CharacterType.Recruit) {
                ((Recruit)character).Owner.Player.Dead = false;
                PacketBuilder.AppendDead(((Recruit)character).Owner, hitlist);
                Messenger.ForceEndStoryTo(((Recruit)character).Owner);
            }

            RefreshCharacterMoves(character, map, hitlist);

            PacketHitList.MethodEnded(ref hitlist);
            } catch (Exception ex) {
                Messenger.AdminMsg(ex.ToString(), Text.Black);
            }
        }
예제 #26
0
        public static void EnterArena(Client client, ICharacter character, IMap map, string param2, string param3, PacketHitList hitlist)
        {
            PacketHitList.MethodStart(ref hitlist);

            //activate set-level mode for tanren arena
            if (map.MapID == MapManager.GenerateMapID(1718)) client.Player.BeginTempStatMode(50, true);

            if (param2.IsNumeric() && param3.IsNumeric()) {
                RandomWarp(character, map, false, hitlist, param2.ToInt(), param2.ToInt(), param3.ToInt(), param3.ToInt());
            } else {
                RandomWarp(character, map, false, hitlist, 5, 24, 7, 23);
            }
            hitlist.AddPacketToMap(map, PacketBuilder.CreateSoundPacket("magic256.wav"), character.X, character.Y, 10);
            hitlist.AddPacketToMap(map, PacketBuilder.CreateChatMsg(client.Player.Name + " has entered the arena!", Text.BrightGreen));

            for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                if (client.Player.Team[i].Loaded) { // Yes, there needs to be a check
                    client.Player.Team[i].HP = client.Player.Team[i].MaxHP;
                    client.Player.Team[i].RestoreBelly();
                    client.Player.Team[i].StatusAilment = Enums.StatusAilment.OK;
                    client.Player.Team[i].StatusAilmentCounter = 0;

                    for (int j = 0; j < 4; j++) {
                        if (client.Player.GetActiveRecruit().Moves[i].MoveNum != 0) {

                            client.Player.Team[i].Moves[j].CurrentPP = client.Player.Team[i].Moves[j].MaxPP;
                        }
                    }
                    RemoveBuffs(client.Player.Team[i]);
                    RemoveAllBondedExtraStatus(client.Player.Team[i], map, hitlist, false);
                    client.Player.Team[i].VolatileStatus.Clear();
                }
            }

            //remove statuses

            if (HasAbility(client.Player.GetActiveRecruit(), "Illusion")) {
                int selectedSlot = client.Player.ActiveSlot;
                    for (int i = 1; i < 4; i++) {
                        if (client.Player.Team[(selectedSlot + i) % 4] != null && client.Player.Team[(selectedSlot + i) % 4].Loaded) {
                            selectedSlot = (selectedSlot + i) % 4;
                            break;
                        }
                    }
                    if (selectedSlot != client.Player.ActiveSlot) {
                        AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", client.Player.Team[selectedSlot].Sprite, null, "", hitlist);
                    }
                }

                //set illusion
                if (client.Player.GetActiveRecruit().HasActiveItem(213)) {
                    AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 25, null, "", hitlist);
                }
                if (client.Player.GetActiveRecruit().HasActiveItem(224)) {
                    AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 300, null, "", hitlist);
                }
                if (client.Player.GetActiveRecruit().HasActiveItem(244)) {
                    AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 387, null, "", hitlist);
                }
                if (client.Player.GetActiveRecruit().HasActiveItem(245)) {
                    AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 390, null, "", hitlist);
                }
                if (client.Player.GetActiveRecruit().HasActiveItem(246)) {
                    AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Illusion", 393, null, "", hitlist);
                }

                RefreshCharacterTraits(client.Player.GetActiveRecruit(), map, hitlist);

                if (!client.Player.Dead) {
                    if (HasAbility(client.Player.GetActiveRecruit(), "Sand Stream")) {
                        SetMapWeather(map, Enums.Weather.Sandstorm, hitlist);
                    } else if (HasAbility(client.Player.GetActiveRecruit(), "Snow Warning")) {
                        SetMapWeather(map, Enums.Weather.Hail, hitlist);
                    } else if (HasAbility(client.Player.GetActiveRecruit(), "Drizzle")) {
                        SetMapWeather(map, Enums.Weather.Raining, hitlist);
                    } else if (HasAbility(client.Player.GetActiveRecruit(), "Drought")) {
                        SetMapWeather(map, Enums.Weather.Sunny, hitlist);
                    } else if (HasAbility(client.Player.GetActiveRecruit(), "Air Lock")) {
                        SetMapWeather(map, Enums.Weather.None, hitlist);
                    } else if (HasAbility(client.Player.GetActiveRecruit(), "Cloud Nine")) {
                        SetMapWeather(map, Enums.Weather.None, hitlist);
                    }
                }

                if (HasAbility(client.Player.GetActiveRecruit(), "Download")) {
                    int totalDef = 0;
                    int totalSpDef = 0;
                    TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, client.Player.GetActiveRecruit(), client.Player.GetActiveRecruit().X, client.Player.GetActiveRecruit().Y, Enums.Direction.Up, true, false, false);
                    for (int i = 0; i < targets.Foes.Count; i++) {
                        totalDef += targets.Foes[i].Def;
                        totalSpDef += targets.Foes[i].SpclDef;
                    }

                if (totalDef < totalSpDef) {
                    ChangeAttackBuff(client.Player.GetActiveRecruit(), map, 1, hitlist);
                } else {
                    ChangeSpAtkBuff(client.Player.GetActiveRecruit(), map, 1, hitlist);
                }
            }
            PacketHitList.MethodEnded(ref hitlist);
        }
예제 #27
0
        private static void HealCharacter(ICharacter character, IMap map, int hp, PacketHitList hitlist)
        {
            try {
                if (character.VolatileStatus.GetStatus("HealBlock") != null) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " couldn't recover HP due to the Heal Block!", Text.BrightRed), character.X, character.Y, 10);
                    return;
                }

                if (character.HP + hp > character.MaxHP) {
                    hp = character.MaxHP - character.HP;
                }

                character.HP += hp;

                if (hp <= 0) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s HP didn't change.", Text.BrightGreen), character.X, character.Y, 10);
                    //BothWaysBattleMsg(setup, setup.Defender.Name + " took no damage!", Text.BrightRed);
                } else if (character.HP == character.MaxHP) {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was fully healed!", Text.BrightGreen), character.X, character.Y, 10);
                } else {
                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " recovered " + hp + " HP!", Text.BrightGreen), character.X, character.Y, 10);
                    //BothWaysBattleMsg(setup, setup.Defender.Name + " took " + damage + " damage!", Text.BrightRed);
                }
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: HealCharacter: " + character.Name, Text.Black);
                Messenger.AdminMsg(ex.ToString(), Text.Black);
                throw new Exception();
            }
        }
예제 #28
0
        public static bool CheckStatusProtection(ICharacter character, ICharacter attacker, IMap map, string status, string tag, bool msg, PacketHitList hitlist)
        {
            try {
            PacketHitList.MethodStart(ref hitlist);
            ExtraStatus checkStatus;
            string[] statusParam = status.Split(':');

            //if (statusParam[0] == "Confusion" && statusParam[1].ToInt() <= 0) {
            //    if (character.CharacterType == Enums.CharacterType.Recruit && ((Recruit)character).Owner.Player.Confusion <= 0) {
            //        PacketHitList.MethodEnded(ref hitlist);
            //        return true;
            //    } else if (character.CharacterType == Enums.CharacterType.MapNpc && !((MapNpc)character).Confused) {
            //        PacketHitList.MethodEnded(ref hitlist);
            //        return true;
            //    }

            //    if (character.HasActiveItem(347)) {
            //        if (msg) {
            //            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from confusion due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
            //        }
            //        PacketHitList.MethodEnded(ref hitlist);
            //        return true;
            //    }
            //}

            if (IsStatusBad(status)) {
                if (character.VolatileStatus.GetStatus("Safeguard") != null && (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0)))) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Safeguard!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                        //pokemon specific item
                        if (HasActiveBagItem(character, 4, -1, (int)GetCharacterWeather(character)) || HasActiveBagItem(character, 4, (int)GetCharacterWeather(character), -1) || HasActiveBagItem(character, 29, 0, 0)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        //Type Gems
                        if (character.HasActiveItem(595) && GetCharacterWeather(character) == Enums.Weather.Cloudy) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the White Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(596) && GetCharacterWeather(character) == Enums.Weather.Sunny) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Fiery Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(597) && (GetCharacterWeather(character) == Enums.Weather.Raining || GetCharacterWeather(character) == Enums.Weather.Thunder)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Aqua Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(600) && GetCharacterWeather(character) == Enums.Weather.Hail) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Icy Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(602) && GetCharacterWeather(character) == Enums.Weather.Cloudy) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Poison Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(603) && GetCharacterWeather(character) == Enums.Weather.Sandstorm) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Earth Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(605) && GetCharacterWeather(character) == Enums.Weather.Fog) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Psyche Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(606) && (GetCharacterWeather(character) == Enums.Weather.None || GetCharacterWeather(character) == Enums.Weather.Ambiguous)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Guard Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(609) && (GetCharacterWeather(character) == Enums.Weather.None || GetCharacterWeather(character) == Enums.Weather.Ambiguous)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Dragon Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(610) && GetCharacterWeather(character) == Enums.Weather.Fog) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Dark Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }
                        if (character.HasActiveItem(611) && GetCharacterWeather(character) == Enums.Weather.Sandstorm) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by the Metal Gem!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;

                        }

                        if (HasAbility(character, "Leaf Guard") && GetCharacterWeather(character) == Enums.Weather.Sunny && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Leaf Guard!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (attacker != character && statusParam[0] != "Pause" && statusParam[0] != "Taunt" &&
                            statusParam[0] != "Torment" && statusParam[0] != "Encore" && statusParam[0] != "MoveSeal" &&
                            statusParam[0] != "Disable" && statusParam[0] != "PerishCount" && statusParam[0] != "Curse" &&
                            statusParam[0] != "Attract" && statusParam[0] != "Grounded" && character.VolatileStatus.GetStatus("Substitute") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by Substitute!", Text.BrightCyan), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
            }

            switch (statusParam[0]) {
                case "OK": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(347)) {
                            if (msg) {
                                switch (character.StatusAilment) {
                                    case Enums.StatusAilment.Burn: {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from the burn due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                                        }
                                        break;
                                    case Enums.StatusAilment.Freeze: {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't thaw out due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                                        }
                                        break;
                                    case Enums.StatusAilment.Paralyze: {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from paralysis due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                                        }
                                        break;
                                    case Enums.StatusAilment.Poison: {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't recover from poison due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                                        }
                                        break;
                                    case Enums.StatusAilment.Sleep: {
                                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't wake up due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                                        }
                                        break;
                                }
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Burn": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) {
                                checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                                if (checkStatus != null && checkStatus.Tag == "1") {
                                    if (msg) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from burns!", Text.BrightCyan), character.X, character.Y, 10);
                                    }
                                    PacketHitList.MethodEnded(ref hitlist);
                                    return true;
                                }
                            }

                            if (character.HasActiveItem(633)) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Rawst Scarf!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (HasAbility(character, "Water Veil") && !HasAbility(character, "Flare Boost") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Water Veil protected it from a burn!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.Type1 == Enums.PokemonType.Fire || character.Type2 == Enums.PokemonType.Fire) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get burned!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                        } else if (character.StatusAilment == Enums.StatusAilment.Burn) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already burned!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        } else {
                            //if (msg) {
                            //	hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10);
                            //}
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Freeze": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) {
                                checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                                if (checkStatus != null && checkStatus.Tag == "2") {
                                    if (msg) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from being frozen!", Text.BrightCyan), character.X, character.Y, 10);
                                    }
                                    PacketHitList.MethodEnded(ref hitlist);
                                    return true;
                                }
                            }

                            if (character.HasActiveItem(634)) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Aspear Scarf!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                            if (HasAbility(character, "Magma Armor") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Magma Armor protected it from being frozen!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.Type1 == Enums.PokemonType.Ice || character.Type2 == Enums.PokemonType.Ice) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get frozen!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                        } else if (character.StatusAilment == Enums.StatusAilment.Freeze) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already frozen!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        } else {
                            //if (msg) {
                            //	hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10);
                            //}
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Paralyze": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) {
                                checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                                if (checkStatus != null && checkStatus.Tag == "3") {
                                    if (msg) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from paralysis!", Text.BrightCyan), character.X, character.Y, 10);
                                    }
                                    PacketHitList.MethodEnded(ref hitlist);
                                    return true;
                                }
                            }

                            if (character.HasActiveItem(632)) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Cheri Scarf!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                            if (HasAbility(character, "Limber") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Limber prevented it from being paralyzed!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                        } else if (character.StatusAilment == Enums.StatusAilment.Paralyze) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already paralyzed!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        } else {
                            //if (msg) {
                            //	hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10);
                            //}
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Poison": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) {
                                checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                                if (checkStatus != null && checkStatus.Tag == "4") {
                                    if (msg) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from poison!", Text.BrightCyan), character.X, character.Y, 10);
                                    }
                                    PacketHitList.MethodEnded(ref hitlist);
                                    return true;
                                }
                            }
                            if (HasAbility(character, "Immunity") && !HasAbility(character, "Toxic Boost") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Immunity prevented it from being poisoned!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.Type1 == Enums.PokemonType.Poison || character.Type2 == Enums.PokemonType.Poison || character.Type1 == Enums.PokemonType.Steel || character.Type2 == Enums.PokemonType.Steel) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s type doesn't get poisoned!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                            if (character.HasActiveItem(483)) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected by its Pecha Scarf!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                        } else if (character.StatusAilment == Enums.StatusAilment.Poison) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already poisoned!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        } else {
                            //if (msg) {
                            //	hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10);
                            //}
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                    }
                    break;
                case "Sleep": {
                        if (character.StatusAilment == Enums.StatusAilment.OK) {
                            if (attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) {
                                checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                                if (checkStatus != null && checkStatus.Tag == "5") {
                                    if (msg) {
                                        hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from paralysis!", Text.BrightCyan), character.X, character.Y, 10);
                                    }
                                    PacketHitList.MethodEnded(ref hitlist);
                                    return true;
                                }
                            }

                            //Sweet Veil
                            if (HasAbility(character, "Sweet Veil") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Sweet Veil!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.HasActiveItem(59)) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Insomniscope prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.VolatileStatus.GetStatus("Sleepless") != null) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't fall asleep!", Text.BrightRed), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (HasAbility(character, "Insomnia") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Insomnia prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (HasAbility(character, "Vital Spirit") && !HasAbility(attacker, "Mold Breaker")) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Vital Spirit prevented it from falling asleep!", Text.WhiteSmoke), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                        } else if (character.StatusAilment == Enums.StatusAilment.Sleep) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already asleep!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        } else {
                            //if (msg) {
                            //	hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " wasn't burned", Text.BrightRed), character.X, character.Y, 10);
                            //}
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Confusion": {

                    if (character.VolatileStatus.GetStatus("Confusion") != null) {
                        if (msg) {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10);
                        }
                        PacketHitList.MethodEnded(ref hitlist);
                        return true;
                    }

                    if ((attacker == null || !(HasAbility(attacker, "Infiltrator") || HasActiveBagItem(attacker, 7, 0, 0))) && character.VolatileStatus.GetStatus("Confusion Guard") != null) {
                        if (msg) {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected from confusion!", Text.BrightCyan), character.X, character.Y, 10);
                        }
                        PacketHitList.MethodEnded(ref hitlist);
                        return true;
                    }

                    if (character.HasActiveItem(323)) {
                        if (msg) {
                            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Persim Band prevented confusion!", Text.BrightRed), character.X, character.Y, 10);
                        }
                        PacketHitList.MethodEnded(ref hitlist);
                        return true;
                    }
                        if (HasAbility(character, "Own Tempo") && !HasAbility(character, "Tangled Feet") && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Own Tempo prevented it from becoming confused!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        //if (character.CharacterType == Enums.CharacterType.Recruit) {
                        //    if (((Recruit)character).Owner.Player.Confusion > 0 && statusParam[1].ToInt() > 0) {
                        //        if (msg) {
                        //            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10);
                        //        }
                        //        PacketHitList.MethodEnded(ref hitlist);
                        //        return true;
                        //    }
                        //} else {
                        //    if (((MapNpc)character).Confused) {
                        //        if (msg) {
                        //            hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already confused!", Text.BrightRed), character.X, character.Y, 10);
                        //        }
                        //        PacketHitList.MethodEnded(ref hitlist);
                        //        return true;
                        //    }
                        //}
                    }
                    break;
                case "Cringe": {

                        if (HasAbility(character, "Inner Focus") && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Inner Focus prevented it from cringing!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Immobilize": {
                        if (character.VolatileStatus.GetStatus("Immobilize") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already Immobilized!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " was protected from being immobilized by the Shed Shell!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided immobilization with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Nightmare": {
                        if (character.VolatileStatus.GetStatus("Nightmare") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Nightmare!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(498)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg("The Lunar Wing protected " + character.Name + " from the nightmare!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "GastroAcid": {
                        if (character.VolatileStatus.GetStatus("GastroAcid") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Gastro Acid!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Attract": {
                        if (character.VolatileStatus.GetStatus("Attract") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already infatuated!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                        if (HasAbility(character, "Oblivious") && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided infatuation with Oblivious!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                        if (HasActiveBagItem(character, 14, 0, 0)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            return true;
                        }
                    }
                    break;
                case "Encore": {
                        if (HasActiveBagItem(character, 14, 0, 0)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            return true;
                        }
                    }
                    break;
                case "Torment": {
                        if (HasActiveBagItem(character, 14, 0, 0)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            return true;
                        }
                    }
                    break;
                case "Taunt": {
                        if (HasActiveBagItem(character, 14, 0, 0)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is protected by its item!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            return true;
                        }
                    }
                    break;
                case "Embargo": {
                        if (character.VolatileStatus.GetStatus("Embargo") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Embargo!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "HealBlock": {
                        if (character.VolatileStatus.GetStatus("HealBlock") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already under the effects of Heal Block!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Substitute": {
                        if (character.VolatileStatus.GetStatus("Substitute") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a substitute!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Ingrain": {
                        if (character.VolatileStatus.GetStatus("Ingrain") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has its roots planted!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "AquaRing": {
                        if (character.VolatileStatus.GetStatus("AquaRing") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has an Aqua Ring!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Wish": {
                        if (character.VolatileStatus.GetStatus("Wish") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already being wished upon!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Exposed": {
                        if (character.VolatileStatus.GetStatus("Exposed") != null) {
                            if (msg && !HasActiveBagItem(character, 20, 9, 0) && !HasActiveBagItem(character, 20, 6, 0)) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already exposed!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MiracleEye": {
                        if (character.VolatileStatus.GetStatus("MiracleEye") != null) {
                            if (msg && !HasActiveBagItem(character, 20, 2, 0)) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can already hit Dark-type Pok�mon with Psychic-type moves!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Bind": {
                        if (character.VolatileStatus.GetStatus("Bind:0") != null && statusParam[1] == "0" ||
                            character.VolatileStatus.GetStatus("Bind:1") != null && statusParam[1] == "1") {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40) && statusParam[1] == "0") {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Clamp": {
                        if (character.VolatileStatus.GetStatus("Clamp:0") != null && statusParam[1] == "0" ||
                            character.VolatileStatus.GetStatus("Clamp:1") != null && statusParam[1] == "1") {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40) && statusParam[1] == "0") {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Wrap": {
                        if (character.VolatileStatus.GetStatus("Wrap:0") != null && statusParam[1] == "0" ||
                            character.VolatileStatus.GetStatus("Wrap:1") != null && statusParam[1] == "1") {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40) && statusParam[1] == "0") {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "FireSpin": {
                        if (character.VolatileStatus.GetStatus("FireSpin") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Fire Spin!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Whirlpool": {
                        if (character.VolatileStatus.GetStatus("Whirlpool") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Whirlpool!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Infestation": {
                        if (character.VolatileStatus.GetStatus("Infesation") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by an Infestation!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "SandTomb": {
                        if (character.VolatileStatus.GetStatus("SandTomb") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Sand Tomb!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MagmaStorm": {
                        if (character.VolatileStatus.GetStatus("MagmaStorm") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already trapped by Magma Storm!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.HasActiveItem(40)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s Shed Shell protected it from being trapped!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Run Away")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " avoided being trapped with Run Away!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "LeechSeed": {
                        if (statusParam[1] == "0") {

                            if (character.VolatileStatus.GetStatus("LeechSeed") != null) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a Leech Seed!", Text.WhiteSmoke), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }

                            if (character.Type1 == Enums.PokemonType.Grass || character.Type2 == Enums.PokemonType.Grass) {
                                if (msg) {
                                    hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " didn't take on the Leech Seed.", Text.WhiteSmoke), character.X, character.Y, 10);
                                }
                                PacketHitList.MethodEnded(ref hitlist);
                                return true;
                            }
                        }
                    }
                    break;
                case "TypeReduce": {
                        checkStatus = character.VolatileStatus.GetStatus("TypeReduce");
                        if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already takes reduced damage from " + (Enums.PokemonType)statusParam[1].ToInt() + " -type moves!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "TypeBoost": {
                        checkStatus = character.VolatileStatus.GetStatus("TypeBoost");
                        if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + (Enums.PokemonType)statusParam[1].ToInt() + " -type moves are already boosted!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "AttackReturn": {
                        checkStatus = character.VolatileStatus.GetStatus("AttackReturn");
                        if (checkStatus != null && statusParam[1].ToInt() == checkStatus.Counter) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already set to counter " + (Enums.MoveCategory)statusParam[1].ToInt() + " moves!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "FlashFire": {
                        if (character.VolatileStatus.GetStatus("FlashFire") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already powered up by Flash Fire!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MoveSeal": {
                        if (character.Moves[statusParam[1].ToInt()].MoveNum <= 0) {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.VolatileStatus.GetStatus(status) != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s " + MoveManager.Moves[character.Moves[statusParam[1].ToInt()].MoveNum].Name + " is already sealed!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Disable": {
                        if (character.Moves[statusParam[1].ToInt()].MoveNum == 0) {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.VolatileStatus.GetStatus("Disable") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has a move disabled!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Stockpile": {
                    checkStatus = character.VolatileStatus.GetStatus("Stockpile");
                        if (checkStatus != null && checkStatus.Counter >= 3) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't stockpile any more!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Roost": {
                        if (map.Tile[character.X, character.Y].Type == Enums.TileType.MobileBlock) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't land here!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "PerishCount": {
                    checkStatus = character.VolatileStatus.GetStatus("PerishCount");
                        if (checkStatus != null && checkStatus.Counter <= statusParam[1].ToInt()) {
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "FutureSight": {
                        if (character.VolatileStatus.GetStatus("FutureSight") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already targeted by Future Sight!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "FocusEnergy": {
                        if (character.VolatileStatus.GetStatus("FocusEnergy") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already focused!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Yawn": {

                        if (character.VolatileStatus.GetStatus("Sleepless") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy its sleeplessness!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Insomnia") && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Insomnia!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (HasAbility(character, "Vital Spirit") && !HasAbility(attacker, "Mold Breaker")) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't become drowsy due to Vital Spirit!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.VolatileStatus.GetStatus("Yawn") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already yawning!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.StatusAilment != Enums.StatusAilment.OK) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " didn't yawn!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Sleepless": {
                        if (character.StatusAilment == Enums.StatusAilment.Sleep && character.HasActiveItem(347)) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " can't wake up due to the Blight Clay!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }

                        if (character.VolatileStatus.GetStatus("Sleepless") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already sleepless!", Text.BrightRed), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Status Guard": {
                    checkStatus = character.VolatileStatus.GetStatus("Status Guard");
                        if (checkStatus != null && tag == checkStatus.Tag) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected from the " + (Enums.StatusAilment)tag.ToInt() + " status!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Confusion Guard": {
                        if (character.VolatileStatus.GetStatus("Confusion Guard") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected from confusion", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Wide Guard": {
                        if (character.VolatileStatus.GetStatus("WideGuard") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Wide Guard!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Quick Guard": {
                        if (character.VolatileStatus.GetStatus("QuickGuard") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Quick Guard!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Protect": {
                        if (character.VolatileStatus.GetStatus("Protect") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Endure": {
                        if (character.VolatileStatus.GetStatus("Endure") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already enduring!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MagicCoat": {
                        if (character.VolatileStatus.GetStatus("MagicCoat") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already protected by Magic Coat!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MagnetRise": {
                        if (character.VolatileStatus.GetStatus("MagnetRise") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already levitating with Magnet Rise!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Telekinesis": {
                        if (character.VolatileStatus.GetStatus("Telekinesis") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " is already floating from Telekinesis!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "Counter": {
                        if (character.VolatileStatus.GetStatus("Counter") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Counter up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MirrorCoat": {
                        if (character.VolatileStatus.GetStatus("MirrorCoat") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Mirror Coat up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "MetalBurst": {
                        if (character.VolatileStatus.GetStatus("MetalBurst") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Metal Burst up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;
                case "DestinyBond": {
                        if (character.VolatileStatus.GetStatus("DestinyBond") != null) {
                            if (msg) {
                                hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " already has Destiny Bond up!", Text.WhiteSmoke), character.X, character.Y, 10);
                            }
                            PacketHitList.MethodEnded(ref hitlist);
                            return true;
                        }
                    }
                    break;

            }

            PacketHitList.MethodEnded(ref hitlist);
            return false;
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: CheckStatusProtection " + status + " " + tag, Text.Black);

                Messenger.AdminMsg(ex.ToString(), Text.Black);

                return false;
            }
        }
예제 #29
0
 private static void HealCharacterPP(ICharacter character, IMap map, int pp, PacketHitList hitlist)
 {
     for (int i = 0; i < Constants.MAX_PLAYER_MOVES; i++) {
         if (character.Moves[i] != null) {
             character.Moves[i].CurrentPP += pp;
             if (character.Moves[i].CurrentPP > character.Moves[i].MaxPP) {
                 character.Moves[i].CurrentPP = character.Moves[i].MaxPP;
             }
         }
     }
     if (character.CharacterType == Enums.CharacterType.Recruit) {
         PacketBuilder.AppendPlayerMoves(((Recruit)character).Owner, hitlist);
     }
     hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + "'s moves regained " + pp + " PP.", Text.BrightGreen), character.X, character.Y, 10);
 }
예제 #30
0
 public static void Flinch(ICharacter character, ICharacter attacker, IMap map, PacketHitList hitlist)
 {
     if (!CheckStatusProtection(character, attacker, map, "Cringe", true, hitlist)) {
         if (character.AttackTimer == null || character.AttackTimer.Tick < Core.GetTickCount().Tick) {
             character.AttackTimer = new TickCount(Core.GetTickCount().Tick);
         }
         character.AttackTimer = new TickCount(character.AttackTimer.Tick + 2000);
         hitlist.AddPacketToMap(map, PacketBuilder.CreateBattleMsg(character.Name + " cringed!", Text.BrightRed), character.X, character.Y, 10);
     }
     if (HasAbility(character, "Steadfast")) {
         ChangeSpeedBuff(character, map, 1, hitlist);
     }
 }