Example #1
0
        public bool WillSpawnNow(MapNpcPreset npc)
        {
            int NPCNum = npc.NpcNum;

            if (NPCNum <= 0)
            {
                return(false);
            }

            if (NpcManager.Npcs[NPCNum].SpawnWeather != Enums.Weather.Ambiguous)
            {
                if (this.Weather != NpcManager.Npcs[NPCNum].SpawnWeather)
                {
                    return(false);
                }
            }

            switch (Globals.ServerTime)
            {
            case Enums.Time.Dawn:
            {
                if (NpcManager.Npcs[NPCNum].SpawnsAtDawn)
                {
                    return(true);
                }
            }
            break;

            case Enums.Time.Day:
            {
                if (NpcManager.Npcs[NPCNum].SpawnsAtDay)
                {
                    return(true);
                }
            }
            break;

            case Enums.Time.Dusk:
            {
                if (NpcManager.Npcs[NPCNum].SpawnsAtDusk)
                {
                    return(true);
                }
            }
            break;

            case Enums.Time.Night:
            {
                if (NpcManager.Npcs[NPCNum].SpawnsAtNight)
                {
                    return(true);
                }
            }
            break;
            }

            return(false);
        }
 public RDungeonFloor()
 {
     Traps = new List<int>();
     Weather = new List<Enums.Weather>();
     Npc = new MapNpcPreset[Constants.MAX_MAP_NPCS];
     for (int i = 0; i < Npc.Length; i++) {
         Npc[i] = new MapNpcPreset();
     }
     Items = new int[16];
     options = new GeneratorOptions();
 }
Example #3
0
        public static void CloneMapNpcs(IMap sourceMap, IMap destinationMap)
        {
            for (int i = 0; i < sourceMap.Npc.Count; i++) {
                MapNpcPreset newNpc = new MapNpcPreset();
                newNpc.NpcNum = sourceMap.Npc[i].NpcNum;
                newNpc.MinLevel = sourceMap.Npc[i].MinLevel;
                newNpc.MaxLevel = sourceMap.Npc[i].MaxLevel;
                newNpc.SpawnX = sourceMap.Npc[i].SpawnX;
                newNpc.SpawnY = sourceMap.Npc[i].SpawnY;
                newNpc.AppearanceRate = sourceMap.Npc[i].AppearanceRate;
                newNpc.StartStatus = sourceMap.Npc[i].StartStatus;
                newNpc.StartStatusCounter = sourceMap.Npc[i].StartStatusCounter;
                newNpc.StartStatusChance = sourceMap.Npc[i].StartStatusChance;

                destinationMap.Npc.Add(newNpc);
            }
        }
Example #4
0
        public static void CloneMapNpcs(IMap sourceMap, IMap destinationMap)
        {
            for (int i = 0; i < sourceMap.Npc.Count; i++)
            {
                MapNpcPreset newNpc = new MapNpcPreset();
                newNpc.NpcNum             = sourceMap.Npc[i].NpcNum;
                newNpc.MinLevel           = sourceMap.Npc[i].MinLevel;
                newNpc.MaxLevel           = sourceMap.Npc[i].MaxLevel;
                newNpc.SpawnX             = sourceMap.Npc[i].SpawnX;
                newNpc.SpawnY             = sourceMap.Npc[i].SpawnY;
                newNpc.AppearanceRate     = sourceMap.Npc[i].AppearanceRate;
                newNpc.StartStatus        = sourceMap.Npc[i].StartStatus;
                newNpc.StartStatusCounter = sourceMap.Npc[i].StartStatusCounter;
                newNpc.StartStatusChance  = sourceMap.Npc[i].StartStatusChance;

                destinationMap.Npc.Add(newNpc);
            }
        }
Example #5
0
 public static void AddNpcToMap(IMap map, int npcNum, int minLevel, int maxLevel, int appearanceRate)
 {
     MapNpcPreset npc = new MapNpcPreset();
     npc.NpcNum = npcNum;
     npc.MinLevel = minLevel;
     npc.MaxLevel = maxLevel;
     npc.AppearanceRate = appearanceRate;
     map.Npc.Add(npc);
 }
Example #6
0
 public static void SpawnNpcToMap(IMap map, int npcNum, int minLevel, int maxLevel, int spawnX, int spawnY, PacketHitList packetlist)
 {
     PacketHitList.MethodStart(ref packetlist);
     MapNpcPreset npc = new MapNpcPreset();
     npc.SpawnX = spawnX;
     npc.SpawnY = spawnY;
     npc.NpcNum = npcNum;
     npc.MinLevel = minLevel;
     npc.MaxLevel = maxLevel;
     map.SpawnNpc(npc);
     PacketHitList.MethodEnded(ref packetlist);
 }
 public static void SpawnNpcs(Client client, IMap imap)
 {
     //new NPC code
     //hack it in for now, make it clean later...
     int rand;
     int[] npcs = new int[] { 558, 559, 560, 571, 572, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863 };
     if (imap.MaxX == 19) imap.MaxNpcs = 8;
     else imap.MaxNpcs = 16;
     imap.MinNpcs = 2;
     imap.NpcSpawnTime = 300;
     for (int i = 1; i <= 9; i++) {
         MapNpcPreset npc = new MapNpcPreset();
         rand = Server.Math.Rand(0, npcs.Length);
         npc.NpcNum = npcs[rand];
         if (npcs[rand] == 859) {
             npc.MinLevel = 10;
             npc.MaxLevel = 10;
         } else {
             npc.MinLevel = 70;
             npc.MaxLevel = 100;
         }
         npc.AppearanceRate = 100;
         imap.Npc.Add(npc);
     }
     if (imap.MaxX == 19) {
         rand = Server.Math.Rand(0, 20);
         if (rand == 0) { //no NPCs
             //do nothing
         } else if (rand > 0 && rand <= 3) { //1 NPC
             imap.MinNpcs = 1;
         } else if (rand > 3 && rand <= 9) { //2 NPCs
             imap.MinNpcs = 2;
         } else if (rand > 9 && rand <= 15) { //3 NPCs
             imap.MinNpcs = 3;
         } else if (rand > 15 && rand <= 18) { //4 NPCs
             imap.MinNpcs = 4;
         } else { //rand == 19, 5 NPCs
             imap.MinNpcs = 5;
         }
     } else {
         rand = Server.Math.Rand(0,25);
         if (rand == 0) { //no NPCs
             //do nothing
         } else if (rand > 0 && rand <= 2) { //1 NPC
             imap.MinNpcs = 1;
         } else if (rand > 2 && rand <= 5) { //2 NPCs
             imap.MinNpcs = 2;
         } else if (rand > 5 && rand <= 9) { //3 NPCs
             imap.MinNpcs = 3;
         } else if (rand > 9 && rand <= 14) { //4 NPCs
             imap.MinNpcs = 4;
         } else if (rand > 14 && rand <= 18) { //5 NPCs
             imap.MinNpcs = 5;
         } else if (rand > 18 && rand <= 21) { //6 NPCs
             imap.MinNpcs = 6;
         } else if (rand > 21 && rand <= 23) { //7 NPCs
             imap.MinNpcs = 7;
         } else { //rand == 24, 8 NPCs
             imap.MinNpcs = 8;
         }
        	}
 }
Example #8
0
 public MapNpc SpawnNpc(MapNpcPreset npc)
 {
     return(SpawnNpc(npc, false));
 }
Example #9
0
 public void SpawnNpc(MapNpcPreset npc)
 {
     SpawnNpc(npc, false);
 }
Example #10
0
        public bool WillSpawnNow(MapNpcPreset npc)
        {
            int NPCNum = npc.NpcNum;
            if (NPCNum <= 0) return false;

            switch (Globals.ServerTime) {
                case Enums.Time.Dawn: {
                        if (NpcManager.Npcs[NPCNum].SpawnsAtDawn) {
                            return true;
                        }
                    }
                    break;
                case Enums.Time.Day: {
                        if (NpcManager.Npcs[NPCNum].SpawnsAtDay) {
                            return true;
                        }
                    }
                    break;
                case Enums.Time.Dusk: {
                        if (NpcManager.Npcs[NPCNum].SpawnsAtDusk) {
                            return true;
                        }
                    }
                    break;
                case Enums.Time.Night: {
                        if (NpcManager.Npcs[NPCNum].SpawnsAtNight) {
                            return true;
                        }
                    }
                    break;
            }

            return false;
        }
Example #11
0
 public void Remove(MapNpcPreset npcPreset)
 {
     npcPresets.Remove(npcPreset);
     rawMap.Npc.Remove(npcPreset.RawNpcPreset);
 }
Example #12
0
        public static RDungeon LoadRDungeon(int dungeonNum)
        {
            RDungeon dungeon = new RDungeon(dungeonNum);
            string FilePath = IO.Paths.RDungeonsFolder + "rdungeon" + dungeonNum.ToString() + ".dat";
            using (System.IO.StreamReader reader = new System.IO.StreamReader(FilePath)) {
                while (!(reader.EndOfStream)) {
                    string[] parse = reader.ReadLine().Split('|');
                    switch (parse[0].ToLower()) {
                        case "rdungeondata":
                            if (parse[1].ToLower() != "v4") {
                                reader.Close();
                                reader.Dispose();
                                return null;
                            }
                            break;
                        case "data":
                            dungeon.DungeonName = parse[1];
                            dungeon.Direction = (Enums.Direction)parse[2].ToInt();
                            dungeon.MaxFloors = parse[3].ToInt();
                            dungeon.Recruitment = parse[4].ToBool();
                            dungeon.Exp = parse[5].ToBool();
                            dungeon.WindTimer = parse[6].ToInt();
                            dungeon.RDungeonIndex = parse[7].ToInt();
                            break;
                        case "floor": {
                                RDungeonFloor floor = new RDungeonFloor();
                                floor.Options.TrapMin = parse[1].ToInt();
                                floor.Options.TrapMax = parse[2].ToInt();
                                floor.Options.ItemMin = parse[3].ToInt();
                                floor.Options.ItemMax = parse[4].ToInt();
                                floor.Options.Intricacy = parse[5].ToInt();
                                floor.Options.RoomWidthMin = parse[6].ToInt();
                                floor.Options.RoomWidthMax = parse[7].ToInt();
                                floor.Options.RoomLengthMin = parse[8].ToInt();
                                floor.Options.RoomLengthMax = parse[9].ToInt();
                                floor.Options.HallTurnMin = parse[10].ToInt();
                                floor.Options.HallTurnMax = parse[11].ToInt();
                                floor.Options.HallVarMin = parse[12].ToInt();
                                floor.Options.HallVarMax = parse[13].ToInt();
                                floor.Options.WaterFrequency = parse[14].ToInt();
                                floor.Options.Craters = parse[15].ToInt();
                                floor.Options.CraterMinLength = parse[16].ToInt();
                                floor.Options.CraterMaxLength = parse[17].ToInt();
                                floor.Options.CraterFuzzy = parse[18].ToBool();
                                floor.Options.MinChambers = parse[19].ToInt();
                                floor.Options.MaxChambers = parse[20].ToInt();

                                floor.Darkness = parse[21].ToInt();
                                floor.GoalType = (Enums.RFloorGoalType)parse[22].ToInt();
                                floor.GoalMap = parse[23].ToInt();
                                floor.GoalX = parse[24].ToInt();
                                floor.GoalY = parse[25].ToInt();
                                floor.Music = parse[26];

                                #region terrain

                                #region wall
                                floor.StairsX = parse[27].ToInt();
                                floor.StairsSheet = parse[28].ToInt();

                                floor.mGroundX = parse[29].ToInt();
                                floor.mGroundSheet = parse[30].ToInt();

                                floor.mTopLeftX = parse[31].ToInt();
                                floor.mTopLeftSheet = parse[32].ToInt();
                                floor.mTopCenterX = parse[33].ToInt();
                                floor.mTopCenterSheet = parse[34].ToInt();
                                floor.mTopRightX = parse[35].ToInt();
                                floor.mTopRightSheet = parse[36].ToInt();

                                floor.mCenterLeftX = parse[37].ToInt();
                                floor.mCenterLeftSheet = parse[38].ToInt();
                                floor.mCenterCenterX = parse[39].ToInt();
                                floor.mCenterCenterSheet = parse[40].ToInt();
                                floor.mCenterRightX = parse[41].ToInt();
                                floor.mCenterRightSheet = parse[42].ToInt();

                                floor.mBottomLeftX = parse[43].ToInt();
                                floor.mBottomLeftSheet = parse[44].ToInt();
                                floor.mBottomCenterX = parse[45].ToInt();
                                floor.mBottomCenterSheet = parse[46].ToInt();
                                floor.mBottomRightX = parse[47].ToInt();
                                floor.mBottomRightSheet = parse[48].ToInt();

                                floor.mInnerTopLeftX = parse[49].ToInt();
                                floor.mInnerTopLeftSheet = parse[50].ToInt();
                                floor.mInnerBottomLeftX = parse[51].ToInt();
                                floor.mInnerBottomLeftSheet = parse[52].ToInt();

                                floor.mInnerTopRightX = parse[53].ToInt();
                                floor.mInnerTopRightSheet = parse[54].ToInt();
                                floor.mInnerBottomRightX = parse[55].ToInt();
                                floor.mInnerBottomRightSheet = parse[56].ToInt();

                                floor.mColumnTopX = parse[57].ToInt();
                                floor.mColumnTopSheet = parse[58].ToInt();
                                floor.mColumnCenterX = parse[59].ToInt();
                                floor.mColumnCenterSheet = parse[60].ToInt();
                                floor.mColumnBottomX = parse[61].ToInt();
                                floor.mColumnBottomSheet = parse[62].ToInt();

                                floor.mRowLeftX = parse[63].ToInt();
                                floor.mRowLeftSheet = parse[64].ToInt();
                                floor.mRowCenterX = parse[65].ToInt();
                                floor.mRowCenterSheet = parse[66].ToInt();
                                floor.mRowRightX = parse[67].ToInt();
                                floor.mRowRightSheet = parse[68].ToInt();

                                floor.mIsolatedWallX = parse[69].ToInt();
                                floor.mIsolatedWallSheet = parse[70].ToInt();

                                floor.mGroundAltX = parse[71].ToInt();
                                floor.mGroundAltSheet = parse[72].ToInt();
                                floor.mGroundAlt2X = parse[73].ToInt();
                                floor.mGroundAlt2Sheet = parse[74].ToInt();

                                floor.mTopLeftAltX = parse[75].ToInt();
                                floor.mTopLeftAltSheet = parse[76].ToInt();
                                floor.mTopCenterAltX = parse[77].ToInt();
                                floor.mTopCenterAltSheet = parse[78].ToInt();
                                floor.mTopRightAltX = parse[79].ToInt();
                                floor.mTopRightAltSheet = parse[80].ToInt();

                                floor.mCenterLeftAltX = parse[81].ToInt();
                                floor.mCenterLeftAltSheet = parse[82].ToInt();
                                floor.mCenterCenterAltX = parse[83].ToInt();
                                floor.mCenterCenterAltSheet = parse[84].ToInt();
                                floor.mCenterCenterAlt2X = parse[85].ToInt();
                                floor.mCenterCenterAlt2Sheet = parse[86].ToInt();
                                floor.mCenterRightAltX = parse[87].ToInt();
                                floor.mCenterRightAltSheet = parse[88].ToInt();

                                floor.mBottomLeftAltX = parse[89].ToInt();
                                floor.mBottomLeftAltSheet = parse[90].ToInt();
                                floor.mBottomCenterAltX = parse[91].ToInt();
                                floor.mBottomCenterAltSheet = parse[92].ToInt();
                                floor.mBottomRightAltX = parse[93].ToInt();
                                floor.mBottomRightAltSheet = parse[94].ToInt();

                                floor.mInnerTopLeftAltX = parse[95].ToInt();
                                floor.mInnerTopLeftAltSheet = parse[96].ToInt();
                                floor.mInnerBottomLeftAltX = parse[97].ToInt();
                                floor.mInnerBottomLeftAltSheet = parse[98].ToInt();

                                floor.mInnerTopRightAltX = parse[99].ToInt();
                                floor.mInnerTopRightAltSheet = parse[100].ToInt();
                                floor.mInnerBottomRightAltX = parse[101].ToInt();
                                floor.mInnerBottomRightAltSheet = parse[102].ToInt();

                                floor.mColumnTopAltX = parse[103].ToInt();
                                floor.mColumnTopAltSheet = parse[104].ToInt();
                                floor.mColumnCenterAltX = parse[105].ToInt();
                                floor.mColumnCenterAltSheet = parse[106].ToInt();
                                floor.mColumnBottomAltX = parse[107].ToInt();
                                floor.mColumnBottomAltSheet = parse[108].ToInt();

                                floor.mRowLeftAltX = parse[109].ToInt();
                                floor.mRowLeftAltSheet = parse[110].ToInt();
                                floor.mRowCenterAltX = parse[111].ToInt();
                                floor.mRowCenterAltSheet = parse[112].ToInt();
                                floor.mRowRightAltX = parse[113].ToInt();
                                floor.mRowRightAltSheet = parse[114].ToInt();

                                floor.mIsolatedWallAltX = parse[115].ToInt();
                                floor.mIsolatedWallAltSheet = parse[116].ToInt();

                                #endregion

                                #region water

                                floor.mWaterX = parse[117].ToInt();
                                floor.mWaterSheet = parse[118].ToInt();
                                floor.mWaterAnimX = parse[119].ToInt();
                                floor.mWaterAnimSheet = parse[120].ToInt();

                                floor.mShoreTopLeftX = parse[121].ToInt();
                                floor.mShoreTopLeftSheet = parse[122].ToInt();
                                floor.mShoreTopRightX = parse[123].ToInt();
                                floor.mShoreTopRightSheet = parse[124].ToInt();
                                floor.mShoreBottomRightX = parse[125].ToInt();
                                floor.mShoreBottomRightSheet = parse[126].ToInt();
                                floor.mShoreBottomLeftX = parse[127].ToInt();
                                floor.mShoreBottomLeftSheet = parse[128].ToInt();
                                floor.mShoreDiagonalForwardX = parse[129].ToInt();
                                floor.mShoreDiagonalForwardSheet = parse[130].ToInt();
                                floor.mShoreDiagonalBackX = parse[131].ToInt();
                                floor.mShoreDiagonalBackSheet = parse[132].ToInt();

                                floor.mShoreTopX = parse[133].ToInt();
                                floor.mShoreTopSheet = parse[134].ToInt();
                                floor.mShoreRightX = parse[135].ToInt();
                                floor.mShoreRightSheet = parse[136].ToInt();
                                floor.mShoreBottomX = parse[137].ToInt();
                                floor.mShoreBottomSheet = parse[138].ToInt();
                                floor.mShoreLeftX = parse[139].ToInt();
                                floor.mShoreLeftSheet = parse[140].ToInt();
                                floor.mShoreVerticalX = parse[141].ToInt();
                                floor.mShoreVerticalSheet = parse[142].ToInt();
                                floor.mShoreHorizontalX = parse[143].ToInt();
                                floor.mShoreHorizontalSheet = parse[144].ToInt();

                                floor.mShoreInnerTopLeftX = parse[145].ToInt();
                                floor.mShoreInnerTopLeftSheet = parse[146].ToInt();
                                floor.mShoreInnerTopRightX = parse[147].ToInt();
                                floor.mShoreInnerTopRightSheet = parse[148].ToInt();
                                floor.mShoreInnerBottomRightX = parse[149].ToInt();
                                floor.mShoreInnerBottomRightSheet = parse[150].ToInt();
                                floor.mShoreInnerBottomLeftX = parse[151].ToInt();
                                floor.mShoreInnerBottomLeftSheet = parse[152].ToInt();

                                floor.mShoreInnerTopX = parse[153].ToInt();
                                floor.mShoreInnerTopSheet = parse[154].ToInt();
                                floor.mShoreInnerRightX = parse[155].ToInt();
                                floor.mShoreInnerRightSheet = parse[156].ToInt();
                                floor.mShoreInnerBottomX = parse[157].ToInt();
                                floor.mShoreInnerBottomSheet = parse[158].ToInt();
                                floor.mShoreInnerLeftX = parse[159].ToInt();
                                floor.mShoreInnerLeftSheet = parse[160].ToInt();

                                floor.mShoreSurroundedX = parse[161].ToInt();
                                floor.mShoreSurroundedSheet = parse[162].ToInt();

                                floor.mShoreTopLeftAnimX = parse[163].ToInt();
                                floor.mShoreTopLeftAnimSheet = parse[164].ToInt();
                                floor.mShoreTopRightAnimX = parse[165].ToInt();
                                floor.mShoreTopRightAnimSheet = parse[166].ToInt();
                                floor.mShoreBottomRightAnimX = parse[167].ToInt();
                                floor.mShoreBottomRightAnimSheet = parse[168].ToInt();
                                floor.mShoreBottomLeftAnimX = parse[169].ToInt();
                                floor.mShoreBottomLeftAnimSheet = parse[170].ToInt();
                                floor.mShoreDiagonalForwardAnimX = parse[171].ToInt();
                                floor.mShoreDiagonalForwardAnimSheet = parse[172].ToInt();
                                floor.mShoreDiagonalBackAnimX = parse[173].ToInt();
                                floor.mShoreDiagonalBackAnimSheet = parse[174].ToInt();

                                floor.mShoreTopAnimX = parse[175].ToInt();
                                floor.mShoreTopAnimSheet = parse[176].ToInt();
                                floor.mShoreRightAnimX = parse[177].ToInt();
                                floor.mShoreRightAnimSheet = parse[178].ToInt();
                                floor.mShoreBottomAnimX = parse[179].ToInt();
                                floor.mShoreBottomAnimSheet = parse[180].ToInt();
                                floor.mShoreLeftAnimX = parse[181].ToInt();
                                floor.mShoreLeftAnimSheet = parse[182].ToInt();
                                floor.mShoreVerticalAnimX = parse[183].ToInt();
                                floor.mShoreVerticalAnimSheet = parse[184].ToInt();
                                floor.mShoreHorizontalAnimX = parse[185].ToInt();
                                floor.mShoreHorizontalAnimSheet = parse[186].ToInt();

                                floor.mShoreInnerTopLeftAnimX = parse[187].ToInt();
                                floor.mShoreInnerTopLeftAnimSheet = parse[188].ToInt();
                                floor.mShoreInnerTopRightAnimX = parse[189].ToInt();
                                floor.mShoreInnerTopRightAnimSheet = parse[190].ToInt();
                                floor.mShoreInnerBottomRightAnimX = parse[191].ToInt();
                                floor.mShoreInnerBottomRightAnimSheet = parse[192].ToInt();
                                floor.mShoreInnerBottomLeftAnimX = parse[193].ToInt();
                                floor.mShoreInnerBottomLeftAnimSheet = parse[194].ToInt();

                                floor.mShoreInnerTopAnimX = parse[195].ToInt();
                                floor.mShoreInnerTopAnimSheet = parse[196].ToInt();
                                floor.mShoreInnerRightAnimX = parse[197].ToInt();
                                floor.mShoreInnerRightAnimSheet = parse[198].ToInt();
                                floor.mShoreInnerBottomAnimX = parse[199].ToInt();
                                floor.mShoreInnerBottomAnimSheet = parse[200].ToInt();
                                floor.mShoreInnerLeftAnimX = parse[201].ToInt();
                                floor.mShoreInnerLeftAnimSheet = parse[202].ToInt();

                                floor.mShoreSurroundedAnimX = parse[203].ToInt();
                                floor.mShoreSurroundedAnimSheet = parse[204].ToInt();

                                #endregion
                                #endregion

                                floor.GroundTile.Type = (Enums.TileType)parse[205].ToInt();
                                floor.GroundTile.Data1 = parse[206].ToInt();
                                floor.GroundTile.Data2 = parse[207].ToInt();
                                floor.GroundTile.Data3 = parse[208].ToInt();
                                floor.GroundTile.String1 = parse[209];
                                floor.GroundTile.String2 = parse[210];
                                floor.GroundTile.String3 = parse[211];

                                floor.HallTile.Type = (Enums.TileType)parse[212].ToInt();
                                floor.HallTile.Data1 = parse[213].ToInt();
                                floor.HallTile.Data2 = parse[214].ToInt();
                                floor.HallTile.Data3 = parse[215].ToInt();
                                floor.HallTile.String1 = parse[216];
                                floor.HallTile.String2 = parse[217];
                                floor.HallTile.String3 = parse[218];

                                floor.WaterTile.Type = (Enums.TileType)parse[219].ToInt();
                                floor.WaterTile.Data1 = parse[220].ToInt();
                                floor.WaterTile.Data2 = parse[221].ToInt();
                                floor.WaterTile.Data3 = parse[222].ToInt();
                                floor.WaterTile.String1 = parse[223];
                                floor.WaterTile.String2 = parse[224];
                                floor.WaterTile.String3 = parse[225];

                                floor.WallTile.Type = (Enums.TileType)parse[226].ToInt();
                                floor.WallTile.Data1 = parse[227].ToInt();
                                floor.WallTile.Data2 = parse[228].ToInt();
                                floor.WallTile.Data3 = parse[229].ToInt();
                                floor.WallTile.String1 = parse[230];
                                floor.WallTile.String2 = parse[231];
                                floor.WallTile.String3 = parse[232];

                                floor.NpcSpawnTime = parse[233].ToInt();
                                floor.NpcMin = parse[234].ToInt();
                                floor.NpcMax = parse[235].ToInt();

                                int maxItems = parse[236].ToInt();
                                int maxNpcs = parse[237].ToInt();
                                int maxSpecialTiles = parse[238].ToInt();
                                int maxWeather = parse[239].ToInt();
                                int maxChambers = parse[240].ToInt();

                                int n = 241;

                                RDungeonItem item;
                                MapNpcPreset npc;
                                RDungeonTrap specialTile;
                                Server.RDungeons.RDungeonPresetChamber presetChamber;

                                for (int i = 0; i < maxItems; i++) {
                                        item = new RDungeonItem();
                                    item.ItemNum = parse[n].ToInt();
                                    item.MinAmount = parse[n+1].ToInt();
                                    item.MaxAmount = parse[n+2].ToInt();
                                    item.AppearanceRate = parse[n+3].ToInt();
                                    item.StickyRate = parse[n+4].ToInt();
                                    item.Tag = parse[n+5];
                                    item.Hidden = parse[n+6].ToBool();
                                    item.OnGround = parse[n+7].ToBool();
                                    item.OnWater = parse[n+8].ToBool();
                                    item.OnWall = parse[n+9].ToBool();
                                    floor.Items.Add(item);
                                    n += 10;
                                }

                                for (int i = 0; i < maxNpcs; i++) {
                                    npc = new MapNpcPreset();
                                    npc.NpcNum = parse[n].ToInt();
                                    npc.MinLevel = parse[n + 1].ToInt();
                                    npc.MaxLevel = parse[n + 2].ToInt();
                                    npc.AppearanceRate = parse[n + 3].ToInt();
                                    npc.StartStatus = (Enums.StatusAilment)parse[n + 4].ToInt();
                                    npc.StartStatusCounter = parse[n + 5].ToInt();
                                    npc.StartStatusChance = parse[n + 6].ToInt();
                                    floor.Npcs.Add(npc);
                                    n+= 7;
                                }

                                for (int i = 0; i < maxSpecialTiles; i++) {
                                        specialTile = new RDungeonTrap();
                                        specialTile.SpecialTile.Type = (Enums.TileType)parse[n].ToInt();
                                        specialTile.SpecialTile.Data1 = parse[n + 1].ToInt();
                                        specialTile.SpecialTile.Data2 = parse[n + 2].ToInt();
                                        specialTile.SpecialTile.Data3 = parse[n + 3].ToInt();
                                        specialTile.SpecialTile.String1 = parse[n + 4];
                                        specialTile.SpecialTile.String2 = parse[n + 5];
                                        specialTile.SpecialTile.String3 = parse[n + 6];
                                        specialTile.SpecialTile.Ground = parse[n + 7].ToInt();
                                        specialTile.SpecialTile.GroundSet = parse[n + 8].ToInt();
                                        specialTile.SpecialTile.GroundAnim = parse[n + 9].ToInt();
                                        specialTile.SpecialTile.GroundAnimSet = parse[n + 10].ToInt();
                                        specialTile.SpecialTile.Mask = parse[n + 11].ToInt();
                                        specialTile.SpecialTile.MaskSet = parse[n + 12].ToInt();
                                        specialTile.SpecialTile.Anim	 = parse[n + 13].ToInt();
                                        specialTile.SpecialTile.AnimSet = parse[n + 14].ToInt();
                                        specialTile.SpecialTile.Mask2 = parse[n + 15].ToInt();
                                        specialTile.SpecialTile.Mask2Set = parse[n + 16].ToInt();
                                        specialTile.SpecialTile.M2Anim = parse[n + 17].ToInt();
                                        specialTile.SpecialTile.M2AnimSet = parse[n + 18].ToInt();
                                        specialTile.SpecialTile.Fringe = parse[n + 19].ToInt();
                                        specialTile.SpecialTile.FringeSet = parse[n + 20].ToInt();
                                        specialTile.SpecialTile.FAnim = parse[n + 21].ToInt();
                                        specialTile.SpecialTile.FAnimSet = parse[n + 22].ToInt();
                                        specialTile.SpecialTile.Fringe2 = parse[n + 23].ToInt();
                                        specialTile.SpecialTile.Fringe2Set = parse[n + 24].ToInt();
                                        specialTile.SpecialTile.F2Anim = parse[n + 25].ToInt();
                                        specialTile.SpecialTile.F2AnimSet = parse[n + 26].ToInt();
                                        specialTile.SpecialTile.RDungeonMapValue = parse[n + 27].ToInt();
                                        specialTile.AppearanceRate = parse[n + 28].ToInt();
                                        floor.SpecialTiles.Add(specialTile);
                                    n+= 29;
                                }

                                for (int i = 0; i < maxWeather; i++) {
                                    floor.Weather.Add((Enums.Weather)parse[n].ToInt());
                                    n++;
                                }
                                for (int i = 0; i < maxChambers; i++)
                                {
                                    presetChamber = new Server.RDungeons.RDungeonPresetChamber();
                                    presetChamber.ChamberNum = parse[n].ToInt();
                                    presetChamber.String1 = parse[n + 1];
                                    presetChamber.String2 = parse[n + 2];
                                    presetChamber.String3 = parse[n + 3];
                                    n += 3;
                                }
                                dungeon.Floors.Add(floor);
                            }
                            break;

                    }
                }
            }
            return dungeon;
        }
Example #13
0
 public void RemoveNpc(int mapNpcNum)
 {
     Npc[mapNpcNum] = new MapNpcPreset();
 }
Example #14
0
        public static void CreateChamber(RDungeonMap map, DungeonArrayFloor arrayFloor, int chamberNum, string string1, string string2, string string3)
        {
            try {
                bool started = false;
                //Messenger.AdminMsg(chamberNum.ToString(), Text.Black);
                switch (chamberNum) {
                    case 1: {//pre-mapped
                        DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.Chamber.X, arrayFloor.Chamber.Y];
                        string[] start = string2.Split(':');
                        string[] end = string3.Split(':');
                        int sourceX = start[0].ToInt();
                        int sourceY = start[1].ToInt();
                        int xDiff = end[0].ToInt() - sourceX + 1;
                        int yDiff = end[1].ToInt() - sourceY + 1;

                        IMap sourceMap = MapManager.RetrieveMap(string1.ToInt());
                        for (int x = 0; x < xDiff; x++) {
                            for (int y = 0; y < yDiff; y++) {
                                MapCloner.CloneTile(sourceMap, sourceX + x, sourceY + y, map.Tile[room.StartX + x, room.StartY + y]);
                                arrayFloor.MapArray[room.StartX + x, room.StartY + y] = sourceMap.Tile[sourceX + x, sourceY + y].RDungeonMapValue;
                            }
                        }
                        }
                        break;
                    case 2: {//no chamber

                        }
                        break;
                    case 3: {//chamber that accepts start and end

                        }
                        break;
                    case 4: {//Ice Puzzle
                            int startX = 0;
                            int startY = 0;
                            string[] parse = string1.Split(':');
                            bool start = false;
                            bool end = false;
                            if (parse[0] == "1") {
                                start = true;
                            }
                            if (parse[1] == "1") {
                                end = true;
                            }
                            if (start && end) {
                                for (int x = 0; x < map.MaxX; x++) {
                                    for (int y = 0; y < map.MaxY; y++) {
                                        map.Tile[x, y].Type = Enums.TileType.Blocked;
                                        arrayFloor.MapArray[x, y] = 1025;
                                    }
                                }
                            }

                            DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.Chamber.X, arrayFloor.Chamber.Y];
                            parse = string3.Split(':');
                            int xDiff = room.EndX - room.StartX + 1;
                            int yDiff = room.EndY - room.StartY + 1;
                            int[,] intArray = new int[xDiff - 2, yDiff-2];

                            if (start && end) {

                                intArray = RandomIce.GenIcePuzzle(xDiff - 2, yDiff-2, parse[2].ToInt(), parse[3].ToInt(), parse[4].ToInt(), parse[5].ToInt(), parse[6].ToInt(), false, false);
                            } else if (end) {
                                intArray = RandomIce.GenIcePuzzle(xDiff - 2, yDiff-2, parse[2].ToInt(), parse[3].ToInt(), parse[4].ToInt(), parse[5].ToInt(), parse[6].ToInt(), true, false);
                            }

                            //put it on the map
                            for (int y = 0; y < yDiff; y++) {
                                for (int x = 0; x < xDiff; x++) {
                                    if (x == 0 || x == xDiff - 1 || y == 0 || y == yDiff - 1) {
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Slippery;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 2;
                                    } else if (intArray[x-1,y-1] == RandomIce.START) {

                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Walkable;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 6;
                                        startX = x;
                                        startY = y;
                                        started = true;
                                    } else if (intArray[x-1,y-1] == RandomIce.END) {

                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.RDungeonGoal;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 7;
                                    } else if (intArray[x-1,y-1] == RandomIce.BLOCK) {
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Blocked;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1;
                                    } else if (intArray[x-1,y-1] == RandomIce.GROUND) {
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Hallway;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 3;
                                    } else {
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Slippery;
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 2;
                                    }

                                }
                            }

                            if (!start && end) {
                                if (startX == 1) {
                                    map.Tile[room.StartX + startX - 1, room.StartY + startY].Type = Enums.TileType.Walkable;
                                    arrayFloor.MapArray[room.StartX + startX - 1, room.StartY + startY] = 6;
                                } else if (startX == xDiff - 2) {
                                    map.Tile[room.StartX + startX + 1, room.StartY + startY].Type = Enums.TileType.Walkable;
                                    arrayFloor.MapArray[room.StartX + startX + 1, room.StartY + startY] = 6;
                                    }
                                if (startY == 1) {
                                    map.Tile[room.StartX + startX, room.StartY + startY - 1].Type = Enums.TileType.Walkable;
                                    arrayFloor.MapArray[room.StartX + startX, room.StartY + startY - 1] = 6;
                                } else if (startY == yDiff - 2) {
                                    map.Tile[room.StartX + startX, room.StartY + startY + 1].Type = Enums.TileType.Walkable;
                                    arrayFloor.MapArray[room.StartX + startX, room.StartY + startY + 1] = 6;
                                }
                            }

                            if (start && end) {
                                map.Tile[room.StartX, room.StartY].Type = Enums.TileType.Scripted;
                                map.Tile[room.StartX, room.StartY].Data1 = 15;
                                map.Tile[room.StartX, room.StartY].Data3 = 1;
                                arrayFloor.MapArray[room.StartX, room.StartY] = 4;
                            } else if (end) {
                                map.Tile[room.StartX, room.StartY].Type = Enums.TileType.Walkable;
                                arrayFloor.MapArray[room.StartX, room.StartY] = 3;
                                map.Tile[room.EndX, room.EndY].Type = Enums.TileType.Walkable;
                                arrayFloor.MapArray[room.EndX, room.EndY] = 3;
                            }
                            if (!started && start) {
                                Messenger.AdminMsg("Bad puzzle generated", Text.Red);
                            }
                        }
                        break;
                    case 10: {//pre-mapped locked chamber
                        DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.Chamber.X, arrayFloor.Chamber.Y];

                        //IMap sourceMap = MapManager.RetrieveMap(string1.ToInt());
                        for (int x = 0; x < 5; x++) {
                            for (int y = 0; y < 5; y++) {
                                if (x == 2 && y == 3) {
                                    map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.ScriptedSign;
                                    map.Tile[room.StartX + x, room.StartY + y].Mask2 = 6;
                                    map.Tile[room.StartX + x, room.StartY + y].Mask2Set = 4;
                                    map.Tile[room.StartX + x, room.StartY + y].Data1 = 10;
                                    map.Tile[room.StartX + x, room.StartY + y].String1 = "-2:-3";
                                    map.Tile[room.StartX + x, room.StartY + y].String2 = "2:1";
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1025;
                                } else if (x == 0 || y == 0 || x == 4 || y == 4) {
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 4;
                                } else if (x == 1 || y == 1 || x == 3 || y == 3) {
                                    map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.Blocked;
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1025;
                                } else if (x == 2 && y == 2) {
                                    map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.ScriptedSign;
                                    map.Tile[room.StartX + x, room.StartY + y].Data1 = 9;
                                    map.Tile[room.StartX + x, room.StartY + y].String1 = string1;
                                    map.Tile[room.StartX + x, room.StartY + y].String2 = string2;
                                    map.Tile[room.StartX + x, room.StartY + y].String3 = "3";
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1025;
                                }

                            }
                        }
                        }
                        break;
                    case 11: {//3x3 kecleon shop
                        DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.Chamber.X, arrayFloor.Chamber.Y];

                        //IMap sourceMap = MapManager.RetrieveMap(string1.ToInt());
                        //Messenger.AdminMsg("Room creating", Text.Red);
                        for (int x = 0; x < 7; x++) {
                            for (int y = 0; y < 7; y++) {
                                if (x <= 1 || y <= 1 || x >= 5 || y >= 5) {
                                    //free space
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 4;
                                } else if (x == 2 || y == 2 || x == 4 || y == 4) {
                                    if (Server.Math.Rand(0,2) == 0) {
                                        //shop
                                        int itemNum = 0;
                                        int itemVal = 1;
                                        string tag = "";
                                        int price = 1;
                                        string[] itemSelection = string2.Split(';');
                                        string[] priceSelection = string3.Split(';');
                                        int chosenIndex = Server.Math.Rand(0, itemSelection.Length);
                                        string[] chosenItem = itemSelection[chosenIndex].Split(',');
                                        if (chosenItem[0].IsNumeric()) {
                                            if (chosenItem.Length == 2 && chosenItem[1].IsNumeric()) {
                                                itemNum = chosenItem[0].ToInt();
                                                itemVal = chosenItem[1].ToInt();
                                                price = priceSelection[chosenIndex].ToInt();
                                            } else if (chosenItem.Length == 3 && chosenItem[2].IsNumeric()) {
                                                itemNum = chosenItem[0].ToInt();
                                                itemVal = chosenItem[1].ToInt();
                                                tag = chosenItem[2];
                                                price = priceSelection[chosenIndex].ToInt();
                                            } else {
                                                itemNum = chosenItem[0].ToInt();
                                                price = priceSelection[chosenIndex].ToInt();
                                            }
                                        }
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.DropShop;
                                        map.Tile[room.StartX + x, room.StartY + y].Mask2 = 67;
                                        map.Tile[room.StartX + x, room.StartY + y].Mask2Set = 0;
                                        map.Tile[room.StartX + x, room.StartY + y].Data1 = price; //price per unit
                                        map.Tile[room.StartX + x, room.StartY + y].Data2 = itemNum; //item
                                        map.Tile[room.StartX + x, room.StartY + y].Data3 = itemVal; //amount
                                        map.Tile[room.StartX + x, room.StartY + y].String1 = "";//no tag//no charID
                                        map.Tile[room.StartX + x, room.StartY + y].String2 = "";//no tag
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1027;
                                    } else {
                                        map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.DropShop;
                                        map.Tile[room.StartX + x, room.StartY + y].Mask2 = 67;
                                        map.Tile[room.StartX + x, room.StartY + y].Mask2Set = 0;
                                        map.Tile[room.StartX + x, room.StartY + y].Data1 = 0; //price per unit
                                        map.Tile[room.StartX + x, room.StartY + y].Data2 = 0; //item
                                        map.Tile[room.StartX + x, room.StartY + y].Data2 = 0; //amount
                                        map.Tile[room.StartX + x, room.StartY + y].String1 = "";//no tag//no charID
                                        map.Tile[room.StartX + x, room.StartY + y].String2 = "";//no tag
                                        arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1027;
                                    }
                                } else if (x == 3 && y == 3) {
                                    map.Tile[room.StartX + x, room.StartY + y].Type = Enums.TileType.NPCAvoid;
                                    map.Tile[room.StartX + x, room.StartY + y].Mask2 = 67;
                                    map.Tile[room.StartX + x, room.StartY + y].Mask2Set = 0;
                                    arrayFloor.MapArray[room.StartX + x, room.StartY + y] = 1027;
                                    MapNpcPreset npc = new MapNpcPreset();
                                    npc.SpawnX = room.StartX + x;
                                    npc.SpawnY = room.StartY + y;
                                    npc.NpcNum = 32;
                                    npc.MinLevel = 100;
                                    npc.MaxLevel = 100;
                                    map.Npc.Add(npc);
                                }

                            }
                        }
                        //Messenger.AdminMsg("Room created: " + map.Name, Text.Red);
                        }
                        break;
                    default: {
                            if (arrayFloor.Start.X == arrayFloor.Chamber.X && arrayFloor.Start.Y == arrayFloor.Chamber.Y) {
                                DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.Start.X, arrayFloor.Start.Y];
                                arrayFloor.MapArray[room.StartX, room.StartY] = DungeonArrayFloor.STARTTILE;
                            }
                            if (arrayFloor.End.X == arrayFloor.Chamber.X && arrayFloor.End.Y == arrayFloor.Chamber.Y) {
                                DungeonArrayRoom room = arrayFloor.Rooms[arrayFloor.End.X, arrayFloor.End.Y];
                                arrayFloor.MapArray[room.StartX + 1, room.StartY] = DungeonArrayFloor.ENDTILE;
                            }
                        }
                        break;
                }
            } catch (Exception e) {
                Messenger.AdminMsg(e.ToString(), Text.Black);
            }
        }
Example #15
0
        public void SpawnNpc(MapNpcPreset npc, bool checkSight)
        {
            int  NPCNum  = 0;
            int  X       = 0;
            int  Y       = 0;
            bool Spawned = false;

            // Check for empty NPC slot
            int npcSlot = FindOpenNpcSlot();

            if (npcSlot < 0 || npcSlot >= Constants.MAX_MAP_NPCS)
            {
                return;
            }

            NPCNum = npc.NpcNum;
            if (NPCNum > 0)
            {
                ActiveNpc[npcSlot].Num    = NPCNum;
                ActiveNpc[npcSlot].Target = null;

                ActiveNpc[npcSlot].Name = NpcManager.Npcs[NPCNum].Name;
                ActiveNpc[npcSlot].Form = NpcManager.Npcs[NPCNum].Form;

                //if (NpcManager.Npcs[NPCNum].ShinyChance != 0 && Server.Math.Rand(0, NpcManager.Npcs[NPCNum].ShinyChance) == 0) ActiveNpc[npcSlot].Shiny = true;
                ActiveNpc[npcSlot].Sex = Pokedex.Pokedex.GetPokemonForm(NpcManager.Npcs[NPCNum].Species, ActiveNpc[npcSlot].Form).GenerateLegalSex();

                ActiveNpc[npcSlot].AttackTimer = new TickCount(Core.GetTickCount().Tick);
                ActiveNpc[npcSlot].PauseTimer  = new TickCount(Core.GetTickCount().Tick);

                //if (Npc[npcSlot].MinLevel == -1) {
                //Npc[npcSlot].MinLevel = NpcManager.Npcs[Npc[npcSlot].NpcNum].RecruitLevel;
                if (npc.MinLevel <= 0)
                {
                    npc.MinLevel = 1;
                    npc.MaxLevel = 1;
                }// else {
                //        Console.WriteLine("Npc found!");
                //    }
                //}
                ActiveNpc[npcSlot].Level = Server.Math.Rand(npc.MinLevel, npc.MaxLevel + 1);
                //set initial stats
                ActiveNpc[npcSlot].CalculateOriginalSprite();
                ActiveNpc[npcSlot].CalculateOriginalStats();
                ActiveNpc[npcSlot].CalculateOriginalType();
                ActiveNpc[npcSlot].CalculateOriginalAbility();
                //ActiveNpc[npcSlot].CalculateOriginalMobility();


                ActiveNpc[npcSlot].HP = ActiveNpc[npcSlot].MaxHP;

                ActiveNpc[npcSlot].Direction = (Enums.Direction)Server.Math.Rand(0, 4);

                ActiveNpc[npcSlot].GenerateMoveset();

                if (Moral == Enums.MapMoral.None)
                {
                    ActiveNpc[npcSlot].GenerateHeldItem();
                }

                if (Server.Math.Rand(0, 100) < npc.StartStatusChance)
                {
                    ActiveNpc[npcSlot].StatusAilment        = npc.StartStatus;
                    ActiveNpc[npcSlot].StatusAilmentCounter = npc.StartStatusCounter;
                }

                if (npc.SpawnX < 0 | npc.SpawnY < 0)
                {
                    // We'll try 100 times to randomly place the sprite
                    for (int i = 1; i <= 50; i++)
                    {
                        if (Tile[X, Y].Type == Enums.TileType.Walkable || Tile[X, Y].Type == Enums.TileType.Slow)
                        {
                            if (checkSight)
                            {
                                bool seen = false;
                                foreach (Client client in GetClients())
                                {
                                    if (CanCharacterSeeDestination(client.Player.GetActiveRecruit(), X, Y))
                                    {
                                        seen = true;
                                        break;
                                    }
                                }
                                if (!seen)
                                {
                                    ActiveNpc[npcSlot].X = X;
                                    ActiveNpc[npcSlot].Y = Y;
                                    Spawned = true;
                                    break;
                                }
                            }
                            else
                            {
                                ActiveNpc[npcSlot].X = X;
                                ActiveNpc[npcSlot].Y = Y;
                                Spawned = true;
                                break;
                            }
                        }
                    }

                    for (int i = 1; i <= 50; i++)
                    {
                        X = Server.Math.Rand(0, MaxX + 1);
                        Y = Server.Math.Rand(0, MaxY + 1);

                        // Check if the tile is walkable
                        if (Tile[X, Y].Type == Enums.TileType.Walkable)
                        {
                            ActiveNpc[npcSlot].X = X;
                            ActiveNpc[npcSlot].Y = Y;
                            Spawned = true;
                            break;
                        }
                    }
                }
                else
                {
                    // We no longer subtract one because Rand is ListIndex -1.
                    ActiveNpc[npcSlot].X = npc.SpawnX;
                    ActiveNpc[npcSlot].Y = npc.SpawnY;
                    Spawned = true;
                }

                // Didn't spawn, so now we'll just try to find a free tile
                if (!Spawned)
                {
                    for (Y = 0; Y <= MaxY; Y++)
                    {
                        for (X = 0; X <= MaxX; X++)
                        {
                            if (Tile[X, Y].Type == Enums.TileType.Walkable)
                            {
                                ActiveNpc[npcSlot].X = X;
                                ActiveNpc[npcSlot].Y = Y;
                                Spawned = true;
                            }
                        }
                    }
                }

                // If we suceeded in spawning then send it to everyone
                if (Spawned)
                {
                    PacketHitList hitlist = null;
                    PacketHitList.MethodStart(ref hitlist);
                    PacketBuilder.AppendNpcSpawn(MapManager.RetrieveActiveMap(MapID), hitlist, npcSlot);

                    Scripting.ScriptManager.InvokeFunction("OnNpcSpawn", MapManager.RetrieveActiveMap(MapID), npc, ActiveNpc[npcSlot], hitlist);

                    PacketHitList.MethodEnded(ref hitlist);
                }
            }
        }
Example #16
0
 public void SpawnNpc(MapNpcPreset npc)
 {
     SpawnNpc(npc, false);
 }
Example #17
0
        public static void Commands(Client client, Command command)
        {
            try
            {
                string joinedArgs = JoinArgs(command.CommandArgs);
                PacketHitList hitlist = null;
                PacketHitList.MethodStart(ref hitlist);

                switch (command[0])
                {
                    case "/savelogs":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Logger.SaveLogs();
                                Messenger.PlayerMsg(client, "Logs have been saved.", Text.BrightGreen);
                            }
                        }
                        break;
                    case "/textstory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Story story = new Story();

                                StoryBuilderSegment segment = new StoryBuilderSegment();

                                StoryBuilder.AppendSaySegment(segment, joinedArgs, 25, 0, 0);

                                segment.AppendToStory(story);

                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    StoryManager.PlayStory(i, story);
                                }
                            }
                        }
                        break;
                    case "/spawnminions":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                for (int i = 0; i < joinedArgs.ToInt(); i++)
                                {
                                    MapNpcPreset npc = new MapNpcPreset();
                                    npc.SpawnX = 22; //-1;
                                    npc.SpawnY = 32; //-1;
                                    npc.NpcNum = 1368;
                                    npc.MinLevel = 90;
                                    npc.MaxLevel = 100;
                                    client.Player.Map.SpawnNpc(npc);
                                }
                            }
                        }
                        break;
                    case "/serverstatus":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Server.Globals.ServerStatus = joinedArgs;
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Server Status] " + client.Player.Name + " changed the server status to: '" + joinedArgs + "'");
                            }
                        }
                        break;
                    case "/togglequiz":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                InQuiz = !InQuiz;
                                QuestionReady = false;
                                Messenger.AdminMsg("[Staff] In Quiz: " + InQuiz.ToString(), Text.BrightBlue);
                            }
                        }
                        break;
                    case "/questionready":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                QuestionReady = true;
                                Messenger.AdminMsg("[Staff] Question Ready: " + QuestionReady.ToString(), Text.BrightGreen);
                                for (int a = 8; a >= 0; a--)
                                {
                                    Messenger.MapMsg(client.Player.MapID, "You can answer in: " + a, Text.BrightGreen);
                                    System.Threading.Thread.Sleep(1000);
                                    CanAnswer = false;
                                }

                                Messenger.MapMsg(client.Player.MapID, "You can now buzz in!", Text.BrightGreen);
                                CanAnswer = true;
                            }
                        }
                        break;
                    case "/yatterman":
                        {
                            if (client.Player.CharID.Substring(1).ToInt() % 2 == 0)
                            {
                                Messenger.PlayerMsg(client, "All of the PINK", System.Drawing.Color.LimeGreen);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Slightly less PINK", Text.White);
                            }
                        }
                        break;
                    case "/glomp":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (client.Player.CharID.Substring(1).ToInt() % 2 == 0)
                                {
                                    Messenger.MapMsg(client.Player.MapID, "Plusle Power! " + client.Player.Name + " used Glomp!", Text.Red);
                                }
                                else
                                {
                                    Messenger.MapMsg(client.Player.MapID, "Minun Power! " + client.Player.Name + " used Glomp!", Text.Cyan);
                                }

                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                            }

                        }
                        break;

                    case "/setquizanswer":
                        {
                            if (InQuiz)
                            {
                                if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                                {
                                    QuizAnswer = joinedArgs.ToLower();
                                    Messenger.AdminMsg("[Staff] Quiz answer set to: " + QuizAnswer, Text.BrightBlue);
                                }
                            }

                        }
                        break;
                    case "/buzz":
                        {
                            if (InQuiz && QuestionReady && CanAnswer)
                            {
                                //QuestionReady = false;
                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    if (i.IsPlaying())
                                    {

                                        Messenger.BattleMsg(i, client.Player.Name + " has answered with: " + joinedArgs, Text.BrightGreen);

                                        /* Story story = new Story();

                                         StoryBuilderSegment segment = new StoryBuilderSegment();

                                         StoryBuilder.AppendSaySegment(segment, client.Player.Name + " has buzzed in! " + client.Player.Name + "'s answer is...", -1, 0, 0);
                                         StoryBuilder.AppendSaySegment(segment, joinedArgs, -1, 0, 0);

                                         segment.AppendToStory(story);

                                         StoryManager.PlayStory(i, story);*/
                                    }

                                }
                                if (CanAnswer && joinedArgs.ToLower() == QuizAnswer)
                                {
                                    foreach (Client i in client.Player.Map.GetClients())
                                    {
                                        Messenger.PlayerMsg(i, client.Player.Name + " has answered correctly! The answer was: " + QuizAnswer, Text.Yellow);

                                    }
                                    QuestionReady = false;
                                    QuizAnswer = "";
                                }
                            }
                        }
                        break;
                    /*case "/plaza": {
                            //if (Ranks.IsAllowed(client, Server.Enums.Rank.Moniter)) {
                            IMap map = client.Player.Map;
                            //if (map.MapType == Enums.MapType.Standard && map.Name.StartsWith("Exbel")) {
                            //	exPlayer.Get(client).PlazaEntranceMap = client.Player.MapID;
                            //	exPlayer.Get(client).PlazaEntranceX = client.Player.X;
                            //	exPlayer.Get(client).PlazaEntranceY = client.Player.Y;

                            //	Messenger.PlayerWarp(client, 1777, 16, 20);
                            //	Messenger.PlayerMsg(client, "Welcome to the plaza!", Text.BrightGreen);
                            //} else {
                                Messenger.PlayerMsg(client, "You cannot enter the plaza from here!", Text.BrightRed);
                            //}
                        }
                        break;*/
                    //case "/leaveplaza": {
                    //        IMap map = client.Player.Map;
                    //        if (map.Name == "Delite Plaza") {
                    //            if (!string.IsNullOrEmpty(exPlayer.Get(client).PlazaEntranceMap)) {
                    //                Messenger.PlayerWarp(client, exPlayer.Get(client).PlazaEntranceMap, exPlayer.Get(client).PlazaEntranceX, exPlayer.Get(client).PlazaEntranceY);
                    //            }
                    //        }
                    //    }
                    //    break;
                    case "/endgame":
                        {
                            if (exPlayer.Get(client).SnowballGameInstance.GameLeader == client)
                            {
                                exPlayer.Get(client).SnowballGameInstance.EndGame();
                                Messenger.PlayerMsg(client, "You have ended the game.", Text.Yellow);
                            }
                        }
                        break;
                    case "/snowballplayers":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (Main.ActiveSnowballGames.Count > 0)
                                {
                                    Messenger.PlayerMsg(client, "Blue Team:", Text.Yellow);
                                    foreach (Client teamClient in Main.ActiveSnowballGames.Values[0].BlueTeam)
                                    {
                                        Messenger.PlayerMsg(client, teamClient.Player.Name, Text.Yellow);
                                    }
                                    Messenger.PlayerMsg(client, "Green Team:", Text.Yellow);
                                    foreach (Client teamClient in Main.ActiveSnowballGames.Values[0].GreenTeam)
                                    {
                                        Messenger.PlayerMsg(client, teamClient.Player.Name, Text.Yellow);
                                    }
                                }
                            }
                        }
                        break;
                    case "/gmmode":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                Server.Globals.GMOnly = !Server.Globals.GMOnly;
                                Messenger.PlayerMsg(client, "GM Only Mode Active: " + Server.Globals.GMOnly, Text.Yellow);
                            }
                        }
                        break;
                    case "/copymap":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                IMap baseMap = MapManager.RetrieveMap(command[1]);
                                IMap destinationMap = MapManager.RetrieveMap(command[2], true);
                                MapCloner.CloneMapTileProperties(baseMap, destinationMap);
                                MapCloner.CloneMapTiles(baseMap, destinationMap);
                                destinationMap.Revision++;
                                destinationMap.Save();
                                Messenger.PlayerWarp(client, destinationMap, 25, 25);
                            }
                        }
                        break;
                    case "/packetcaching":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Server.Globals.PacketCaching = !Server.Globals.PacketCaching;
                                Messenger.PlayerMsg(client, "Packet caching is: " + (Server.Globals.PacketCaching ? "on!" : "off!"), Text.BrightGreen);
                            }
                        }
                        break;
                    case "/foolsstory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    //if (i != client) {
                                    StoryManager.PlayStory(i, 369 - 1);
                                    //}
                                }
                            }
                        }
                        break;
                    case "/foolsmode":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Server.Globals.FoolsMode = !Server.Globals.FoolsMode;
                                Messenger.SendDataToAll(TcpPacket.CreatePacket("foolsmode", Server.Globals.FoolsMode.ToIntString()));
                                Messenger.PlayerMsg(client, "April fool's mode is: " + (Server.Globals.FoolsMode ? "on!" : "off!"), Text.BrightGreen);
                            }
                        }
                        break;
                    case "/lokmovementall":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.AdminMsg("[Staff] Movement locked...", Text.BrightBlue);
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying() && Ranks.IsDisallowed(i, Enums.Rank.Moniter))
                                    {
                                        i.Player.MovementLocked = true;

                                        Messenger.PlayerMsg(i, "Movement has been locked, temporarily", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/unlokmovementall":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.AdminMsg("[Staff] Movement unlocked...", Text.BrightBlue);
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying())
                                    {
                                        i.Player.MovementLocked = false;

                                        Messenger.PlayerMsg(i, "Movement has been unlocked [Debugging]", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/lokmovementmap":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.AdminMsg("[Staff] Movement locked...", Text.BrightBlue);
                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    if (i.IsPlaying() && Ranks.IsDisallowed(i, Enums.Rank.Moniter))
                                    {
                                        i.Player.MovementLocked = true;

                                        Messenger.PlayerMsg(i, "You find yourself stuck to the floor!", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/unlokmovementmap":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.AdminMsg("[Staff] Movement unlocked...", Text.BrightBlue);
                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    if (i.IsPlaying())
                                    {
                                        i.Player.MovementLocked = false;

                                        Messenger.PlayerMsg(i, "You can move again!", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/currentsection":
                        {
                            if (exPlayer.Get(client).StoryEnabled)
                            {
                                if (command.CommandArgs.Count == 2)
                                {
                                    client.Player.StoryHelper.SaveSetting("[MainStory]-CurrentSection", joinedArgs.ToInt().ToString());
                                }
                                Messenger.PlayerMsg(client, "Current section: " + client.Player.StoryHelper.ReadSetting("[MainStory]-CurrentSection").ToInt().ToString(), Text.BrightGreen);
                            }
                        }
                        break;
                    case "/resetstory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                StoryHelper.ResetStory(client);
                            }

                        }
                        break;
                    case "/storymode":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                exPlayer.Get(client).StoryEnabled = !exPlayer.Get(client).StoryEnabled;
                                Messenger.PlayerMsg(client, "Story mode is now " + (exPlayer.Get(client).StoryEnabled ? "on!" : "off!"), Text.BrightGreen);
                            }
                        }
                        break;

                    case "/staffauction":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                if (Auction.StaffAuction == false)
                                {
                                    Auction.StaffAuction = true;
                                    Messenger.AdminMsg("[Staff] Staff-only auction mode is now active.", Text.BrightBlue);
                                }
                                else if (Auction.StaffAuction == true)
                                {
                                    Auction.StaffAuction = false;
                                    Messenger.AdminMsg("[Staff] Staff-only auction mode is now disabled.", Text.BrightBlue);
                                }
                            }
                        }

                        break;
                    case "/itemowners":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                IMap map = client.Player.Map;

                                for (int i = 0; i < map.ActiveItem.Length; i++)
                                {
                                    if ((map.ActiveItem[i].Num > 0))
                                    {
                                        Messenger.PlayerMsg(client, i + ". \'" + map.ActiveItem[i].TimeDropped.Tick + "\'", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    //case "/dungeonopen": {
                    //        Messenger.PlayerMsg(client, "Dungeon Unlocked: " + DungeonRules.IsDungeonUnlocked(client, joinedArgs.ToInt()), Text.BrightGreen);
                    //    }
                    //    break;
                    case "/givejob":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                //if (!client.Player.JobList.HasCompletedMission("0|-1|1|1|7|0|0|1|1|1|-1|1|0|3|0|0|-1|-1|-1|-1|0|-1|-1|-1|")) {
                                //client.Player.JobList.AddJob("0|-1|0|0|7|0|0|3|1|9|-1|46|0|3|0|0|-1|-1|-1|-1|0|-1|-1|-1|");

                                Messenger.PlayerMsg(client, "Job added!", Text.BrightGreen);
                                Messenger.SendJobList(client);
                            }
                        }
                        break;
                    case "/dungeonnpcs":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                IMap map = client.Player.Map;

                                for (int i = 0; i < map.Npc.Count; i++)
                                {
                                    if ((map.Npc[i].NpcNum > 0))
                                    {
                                        Messenger.PlayerMsg(client, map.Npc[i].NpcNum.ToString(), Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/rdstartcheck":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                for (int i = 0; i < 10; i++)
                                {
                                    RDungeonMap map = RDungeonFloorGen.GenerateFloor(client, 54, 49, RDungeonManager.RDungeons[54].Floors[49].Options);
                                    Messenger.PlayerMsg(client, i.ToString(), Text.Black);
                                }
                            }
                        }
                        break;
                    case "/activemaps":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                IMap[] activeMaps = MapManager.ToArray();
                                Messenger.PlayerMsg(client, "Active Maps: " + activeMaps.Length.ToString(), Text.BrightGreen);
                                foreach (IMap map in activeMaps)
                                {
                                    Messenger.PlayerMsg(client, map.Name, Text.Yellow);
                                    int total = 0;
                                    foreach (MapPlayer playerOnMap in map.PlayersOnMap.GetPlayers())
                                    {
                                        //Messenger.PlayerMsg(client, "-" + playerOnMap, Text.Yellow);
                                        total++;
                                    }
                                    Messenger.PlayerMsg(client, "Total in map: " + total, Text.Red);
                                }
                            }
                        }
                        break;
                    case "/daynight":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Server.Events.World.TimedEventManager.TimedEvents["DayCycle"].OnTimeElapsed(Server.Core.GetTickCount());
                                Messenger.PlayerMsg(client, Server.Globals.ServerTime.ToString(), Text.BrightGreen);
                                //}
                            }
                        }
                        break;
                    case "/currenttime":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                TimeSpan time = new TimeSpan(0, 0, 0, 0, client.Player.MissionBoard.LastGenTime);
                                Messenger.PlayerMsg(client, time.TotalSeconds.ToString(), Text.BrightGreen);
                                time = new TimeSpan(0, 0, 0, 0, Server.Core.GetTickCount().Tick);
                                Messenger.PlayerMsg(client, time.TotalSeconds.ToString(), Text.BrightGreen);
                                //}
                            }
                        }
                        break;
                    case "/tournyplayers":
                        {
                            Tournament tourny = client.Player.Tournament;
                            if (tourny != null)
                            {
                                if (tourny.RegisteredMembers[client] != null)
                                {
                                    if (tourny.RegisteredMembers[client].Admin)
                                    {
                                        tourny.PlayersNeeded = joinedArgs.ToInt();
                                        Messenger.PlayerMsg(client, "The current player requirement is: " + tourny.PlayersNeeded.ToString(), Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/createtourny":
                        {
                            Tournament tourny = TournamentManager.CreateTournament(client, joinedArgs, "s1193", 10, 10);
                            tourny.AddCombatMap("s1194");
                        }
                        break;
                    case "/jointourny":
                        {
                            Tournament tourny = TournamentManager.Tournaments[joinedArgs.ToInt()];
                            tourny.RegisterPlayer(client);
                        }
                        break;
                    case "/estlevel":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                exPlayer.Get(client).ElectrolockLevel = joinedArgs.ToInt();
                                Messenger.PlayerMsg(client, "EST level set to: " + joinedArgs.ToInt(), Text.BrightGreen);
                            }
                        }
                        break;
                    case "/april":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                //TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
                                //DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, easternZone);

                                //var tomorrow1am = easternTime.AddDays(1).Date;
                                //double totalHours = (int)( tomorrow1am - easternTime).TotalHours;
                                //Messenger.PlayerMsg(client, "Time: " + totalHours.ToString(), Text.Red);

                            }
                            break;
                        }
                    case "/restartserver":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Admin))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }
                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Server] Server restart initiated by: " + client.Player.Name);
                            RestartServer();
                        }
                        break;
                    case "/checktime":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, joinedArgs + "'s total play time: " + n.Player.Statistics.TotalPlayTime.ToString(), Text.BrightGreen);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/lastlogin":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];

                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    IDataColumn[] columns = dbConnection.Database.RetrieveRow("characteristics", "CharID", "Name=\"" + playerName + "\"");
                                    if (columns != null)
                                    {
                                        string charID = (string)columns[0].Value;
                                        string lastLogin = (string)dbConnection.Database.RetrieveRow("character_statistics", "LastLogin", "CharID=\"" + charID + "\"")[0].Value;
                                        Messenger.PlayerMsg(client, playerName + "'s last login: "******"Staff", "[Info Request] " + client.Player.Name + " checked " + playerName + "'s last login");
                                    }
                                }
                            }

                        }
                        break;
                    case "/checkparty":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Party party = PartyManager.FindParty(client.Player.PartyID);
                                int onlineClients = 0;
                                if (party != null)
                                {
                                    foreach (Client client2 in party.GetOnlineMemberClients())
                                    {
                                        onlineClients++;
                                    }
                                    Messenger.PlayerMsg(client, "Members: " + onlineClients, Text.BrightBlue);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "No Party", Text.BrightBlue);
                                }
                            }
                        }
                        break;
                    case "/playtime":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                TimeSpan longestPlayTime = new TimeSpan();
                                string playerName = "";
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying())
                                    {
                                        TimeSpan currentTime = i.Player.Statistics.TotalPlayTime + (DateTime.UtcNow - i.Player.Statistics.LoginTime);
                                        if (currentTime > longestPlayTime)
                                        {
                                            playerName = i.Player.Name;
                                            longestPlayTime = currentTime;
                                        }
                                    }
                                }
                                Messenger.PlayerMsg(client, "Longest play time:\n" + playerName + " (" + longestPlayTime.ToString() + ")", Text.BrightBlue);
                            }
                        }
                        break;
                    case "/fastshutdown":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerMsg(client, "[SECRET] Fast shutdown started.", Text.BrightRed);
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    foreach (Client i in ClientManager.GetClients())
                                    {
                                        if (i.IsPlaying())
                                        {
                                            i.Player.SaveCharacterData(dbConnection);
                                            i.Player.SavingLocked = true;
                                        }
                                    }
                                }

                                Messenger.PlayerMsg(client, "Everyone saved, shutting down...", Text.BrightRed);
                                Environment.Exit(0);
                            }
                        }
                        break;
                    case "/shutdown":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int waitingTime = 30;
                                string messageText = "";
                                if (!string.IsNullOrEmpty(joinedArgs))
                                {
                                    messageText = joinedArgs;
                                }
                                for (int i = waitingTime; i >= 1; i--)
                                {
                                    Server.Globals.ServerStatus = "Please prepare for a server shutdown for maintenance. It will begin in " + i + " seconds." + messageText;
                                    System.Threading.Thread.Sleep(1000);
                                }
                                Messenger.AdminMsg("[Staff] Server shutdown in progress... Saving all players...", Text.BrightBlue);
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Server] Server shutdown initiated by: " + client.Player.Name);
                                Server.Globals.ServerStatus = "Saving your data... Please wait...";
                                try
                                {
                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                    {
                                        foreach (Client i in ClientManager.GetClients())
                                        {
                                            if (i.IsPlaying())
                                            {
                                                i.Player.SaveCharacterData(dbConnection);
                                                i.Player.SavingLocked = true;

                                                Messenger.PlayerMsg(i, "You saved the game!", Text.BrightGreen);
                                            }
                                        }
                                    }
                                    Messenger.PlayerMsg(client, "Everyone has been saved!", Text.Yellow);
                                }
                                catch { }
                                System.Threading.Thread shutdownTimerThread = new System.Threading.Thread(delegate()
                                {
                                    waitingTime = 30;
                                    for (int i = waitingTime; i >= 1; i--)
                                    {
                                        Server.Globals.ServerStatus = "The server will be shutting down in " + i + " seconds.";
                                        System.Threading.Thread.Sleep(1000);
                                    }
                                    Environment.Exit(0);
                                }
                                );
                                shutdownTimerThread.Start();
                            }
                        }
                        break;
                    case "/warn*":
                    case "/warn":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(command[1], true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(command[1]);
                                }
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(n, "You have been warned by a staff member: " + command[2] /* + "\n-" + client.Player.Name*/, System.Drawing.Color.Orange);
                                    Messenger.AdminMsg("[Staff] " + client.Player.Name + " has warned " + n.Player.Name + ": " + command[2], Text.BrightBlue);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Warning Issued] " + client.Player.Name + " warned " + n.Player.Name + " with message: " + command[2]);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/getcharinfo":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    CharacterInformation charInfo = PlayerManager.RetrieveCharacterInformation(dbConnection, joinedArgs);
                                    if (charInfo != null)
                                    {
                                        Messenger.PlayerMsg(client, "Info for " + charInfo.Name + ":", Text.Yellow);
                                        Messenger.PlayerMsg(client, "Account: " + charInfo.Account, Text.Yellow);
                                        Messenger.PlayerMsg(client, "CharID: " + charInfo.ID, Text.Yellow);
                                        Messenger.PlayerMsg(client, "Char Slot: " + charInfo.Slot, Text.Yellow);
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Info Request] " + client.Player.Name + " checked the character information for: " + command[1]);
                                    }
                                }
                            }
                        }
                        break;
                    case "/clearjoblist":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    n.Player.JobList.JobList.Clear();
                                    Messenger.SendJobList(n);
                                    Messenger.PlayerMsg(n, "Your job list has been cleared!", Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "You have cleared " + joinedArgs + "'s job list!", Text.BrightGreen);
                                    //Messenger.PlayerMsg(client, joinedArgs + " ID is: " + n.Player.CharID, Text.BrightGreen);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/void":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerWarpToVoid(client);
                            }
                        }
                        break;
                    case "/voidplayer*":
                    case "/voidplayer":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(playerName);
                                }

                                if (n != null)
                                {
                                    Messenger.PlayerWarpToVoid(n);
                                    Messenger.GlobalMsg(n.Player.Name + " has been swallowed by the void...", Text.Red);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, playerName + " could not be found.", Text.Green);
                                }
                            }
                        }
                        break;
                    case "/unvoid":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                string playerName = command[1];
                                Client n;
                                n = ClientManager.FindClient(playerName);
                                IMap map = n.Player.Map;
                                if (map.MapType == Enums.MapType.Void)
                                {
                                    Server.Maps.Void @void = map as Server.Maps.Void;
                                    @void.SafeExit = true;
                                    Messenger.PlayerWarp(n, 1015, 25, 25);
                                    Messenger.PlayerMsg(n, "You have been unvoided.", Text.BrightGreen);
                                    Messenger.PlayerMsg(client, playerName + " has been unvoided.", Text.BrightGreen);
                                }
                            }
                        }
                        break;
                    case "/getid":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, joinedArgs + " ID is: " + n.Player.CharID, Text.BrightGreen);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/regenboard":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                client.Player.MissionBoard.GenerateMission();
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Missions] " + client.Player.Name + " regenerated their mission board.");
                            }
                        }
                        break;
                    case "/who":
                        {
                            int count = 0;
                            foreach (Client i in ClientManager.GetClients())
                            {
                                if (i.TcpClient.Socket.Connected && i.IsPlaying())
                                {
                                    count++;
                                }
                            }
                            Messenger.PlayerMsg(client, "Players online: " + count, Text.Yellow);
                        }
                        break;
                    case "/saveall":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    try
                                    {
                                        foreach (Client i in ClientManager.GetClients())
                                        {
                                            i.Player.SaveCharacterData(dbConnection);
                                            Messenger.PlayerMsg(i, "You saved the game!", Text.BrightGreen);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Messenger.PlayerMsg(client, ex.ToString(), Text.BrightRed);
                                    }
                                }
                                Messenger.PlayerMsg(client, "Everyone has been saved!", Text.Yellow);
                            }
                        }
                        break;
                    case "/isveteran":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.Veteran.ToString(), Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/explode":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.GlobalMsg(client.Player.Name + " has exploded.", Text.BrightRed);
                            }
                        }
                        break;

                    case "/silentkick*":
                    case "/silentkick":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];
                                Client kickedClient;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    kickedClient = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    kickedClient = ClientManager.FindClient(playerName);
                                }
                                if (kickedClient != null)
                                {
                                    if (command.CommandArgs.Count > 2 && !String.IsNullOrEmpty(command[2]))
                                    {
                                        Messenger.AdminMsg("[Staff] " + kickedClient.Player.Name + " has been disconnected silently from the server by " + client.Player.Name + "! " + "Reason: " + command[2], Text.BrightBlue);
                                        kickedClient.CloseConnection();
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Kick] " + client.Player.Name + " silently kicked " + playerName + " from the server with reason: " + command[2]);
                                    }
                                    else
                                    {
                                        Messenger.AdminMsg("[Staff] " + kickedClient.Player.Name + " has been disconnected silently from the server by " + client.Player.Name + "!", Text.BrightBlue);
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Kick] " + client.Player.Name + " silently kicked " + playerName + " from the server.");
                                        kickedClient.CloseConnection();
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Unable to find player!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "/kick*":
                    case "/kick":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];
                                Client kickedClient;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    kickedClient = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    kickedClient = ClientManager.FindClient(playerName);
                                }
                                if (kickedClient != null)
                                {
                                    if (command.CommandArgs.Count > 2 && !String.IsNullOrEmpty(command[2]))
                                    {
                                        Messenger.AdminMsg(kickedClient.Player.Name + " has been kicked from the server by " + client.Player.Name + "!" + " Reason: " + command[2], Text.BrightBlue);
                                        Messenger.PlainMsg(kickedClient, "You have been kicked from the server!  Reason: " + command[2], Enums.PlainMsgType.MainMenu);
                                        kickedClient.CloseConnection();
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Kick] " + client.Player.Name + " kicked " + playerName + " from the server with reason: " + command[2]);
                                    }
                                    else
                                    {
                                        Messenger.AdminMsg("[Staff] " + kickedClient.Player.Name + " has been kicked from the server by " + client.Player.Name, Text.BrightBlue);
                                        Messenger.PlainMsg(kickedClient, "You have been kicked from the server!", Enums.PlainMsgType.MainMenu);
                                        kickedClient.CloseConnection();
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Kick] " + client.Player.Name + " kicked " + playerName + " from the server.");
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Unable to find player!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "/ban*":
                    case "/ban":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];
                                string banTimeDays = "-----";
                                Client bannedClient;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    bannedClient = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    bannedClient = ClientManager.FindClient(playerName);
                                }

                                if (command.CommandArgs.Count > 2 && command[2].IsNumeric())
                                {
                                    banTimeDays = DateTime.Now.AddDays(Convert.ToDouble(command[2])).ToString();
                                }

                                if (bannedClient != null)
                                {
                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                    {
                                        Bans.BanPlayer(dbConnection, bannedClient.IP.ToString(), bannedClient.Player.CharID,
                                            bannedClient.Player.AccountName + "/" + bannedClient.Player.Name, bannedClient.MacAddress, bannedClient.BiosId,
                                            client.Player.CharID, client.IP.ToString(), banTimeDays, Enums.BanType.Ban);
                                        Messenger.AdminMsg("[Staff] " + bannedClient.Player.Name + " has been banned by " + client.Player.Name + "!", Text.BrightBlue);
                                        PlayerInfoReport(bannedClient);
                                        Messenger.PlainMsg(bannedClient, "You have been banned!", Enums.PlainMsgType.MainMenu);
                                        bannedClient.CloseConnection();
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Ban] " + client.Player.Name + " banned " + playerName + ".");
                                    }
                                }
                                else
                                {
                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                    {
                                        IDataColumn[] columns = dbConnection.Database.RetrieveRow("characteristics", "CharID", "Name=\"" + playerName + "\"");
                                        if (columns != null)
                                        {
                                            string charID = (string)columns[0].Value;
                                            string foundIP = (string)dbConnection.Database.RetrieveRow("character_statistics", "LastIPAddressUsed", "CharID=\"" + charID + "\"")[0].Value;
                                            string foundMac = (string)dbConnection.Database.RetrieveRow("character_statistics", "LastMacAddressUsed", "CharID=\"" + charID + "\"")[0].Value;
                                            string storedUUID = (string)dbConnection.Database.RetrieveRow("character_statistics", "StoredUUID", "CharID=\"" + charID + "\"")[0].Value;
                                            //get previous IP and mac
                                            Bans.BanPlayer(dbConnection, foundIP, charID, playerName, foundMac, storedUUID,
                                                client.Player.CharID, client.IP.ToString(), banTimeDays, Enums.BanType.Ban);
                                            Messenger.AdminMsg("[Staff] " + bannedClient.Player.Name + " has been banned by " + client.Player.Name + "!", Text.BrightBlue);
                                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Ban] " + client.Player.Name + " banned " + playerName + ".");
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "Unable to find player!", Text.BrightRed);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "/htest":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.OpenVisitHouseMenu(client);
                            }
                        }
                        break;
                    case "/emptyhouse":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                            {
                                List<Client> clientList = new List<Client>();

                                foreach (Client n in client.Player.Map.GetClients())
                                {
                                    if (n != client && Ranks.IsDisallowed(client, Enums.Rank.Moniter))
                                    {
                                        clientList.Add(n);
                                    }
                                }

                                foreach (Client n in clientList)
                                {
                                    if (!string.IsNullOrEmpty(exPlayer.Get(n).HousingCenterMap))
                                    {
                                        Messenger.PlayerWarp(n, exPlayer.Get(n).HousingCenterMap, exPlayer.Get(n).HousingCenterX, exPlayer.Get(n).HousingCenterY);
                                    }
                                }
                                Messenger.PlayerMsg(client, "All visitors have been kicked from your house!", Text.Yellow);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You aren't in your house!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/leavehouse":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType == Server.Enums.MapType.House)
                            {
                                if (!string.IsNullOrEmpty(exPlayer.Get(client).HousingCenterMap))
                                {
                                    Messenger.PlayerWarp(client, exPlayer.Get(client).HousingCenterMap, exPlayer.Get(client).HousingCenterX, exPlayer.Get(client).HousingCenterY);
                                }
                            }
                        }
                        break;
                    case "/houseentrance":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                            {
                                //Messenger.AskQuestion(client, "HouseSpawn", "Will you set your house's entrance here?", -1);
                                Messenger.AskQuestion(client, "HouseSpawn", "Will you set your house's entrance here?  It will cost 500 Poké.", -1);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't set your house entrance here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/houseroof":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                            {
                                if (map.Indoors)
                                {
                                    Messenger.AskQuestion(client, "HouseRoof", "Will you open your house's roof and expose it to time and weather conditions?  It will cost 500 Poké.", -1);
                                }
                                else
                                {
                                    Messenger.AskQuestion(client, "HouseRoof", "Will you close your house to time and weather conditions?  It will cost 500 Poké.", -1);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't set your house roof here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/houseweather":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Silver)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    if (map.Indoors)
                                    {
                                        Messenger.PlayerMsg(client, "You can't set your house weather unless you open your house with /houseroof", Text.BrightRed);
                                    }
                                    else
                                    {
                                        Messenger.OpenChangeWeatherMenu(client);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't set your house weather here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Silver or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/houselight":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Silver)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenChangeDarknessMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't set your house lights here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Silver or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/houseexpand":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Gold)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenChangeBoundsMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't expand your house here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Gold or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/houseshop":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Bronze)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenAddShopMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't place a shop here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Bronze or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/housesign":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Bronze)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenAddSignMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't place a sign here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Bronze or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/housesound":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Bronze)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenAddSoundMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't place a sound tile here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Bronze or higher.", Text.BrightRed);
                            }
                        }
                        break;
                    case "/housenotice":
                        {
                            IMap map = client.Player.Map;
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            if (client.Player.ExplorerRank >= Enums.ExplorerRank.Bronze)
                            {
                                if (map.MapType == Server.Enums.MapType.House && ((House)map).OwnerID == client.Player.CharID)
                                {
                                    Messenger.OpenAddNoticeMenu(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You can't place a notice tile here!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house until your Explorer Rank is Bronze or higher.", Text.BrightRed);
                            }
                        }
                        break;

                    //test2

                    case "/darktest":
                        {
                            /*if (Ranks.IsAllowed(client, Enums.Rank.Scripter)) {
                                foreach (Client i in ClientManager.GetClients()) {
                                    if (i.IsPlaying() && i.Player.AccountName == "Dandy") {
                                        i.Player.Access = Enums.Rank.Mapper;
                                    }
                                }
                            }*/
                            break;
                        }

                    //mapkill

                    case "/kipz":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                if (client.Player.MapID == MapManager.GenerateMapID(1129))
                                {
                                    IMap map = client.Player.Map;
                                    foreach (Client i in map.GetClients())
                                    {
                                        StoryManager.PlayStory(i, 94);
                                    }
                                }
                            }
                        }
                        break;
                    case "/stafflist":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerMsg(client, "The staff that are currently online are:", Text.Green);
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (Ranks.IsAllowed(i, Enums.Rank.Moniter))
                                    {
                                        Messenger.PlayerMsg(client, "(" + i.Player.Access.ToString() + ")" + i.Player.Name, Text.Green);
                                    }
                                }
                            }
                        }
                        break;
                    case "/isitrandom":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int rand = Server.Math.Rand(0, 10);
                                Messenger.PlayerMsg(client, rand.ToString(), Text.Green);

                            }
                        }
                        break;
                    case "/rdungeonscriptgoal":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                RDungeonScriptGoal(client, joinedArgs.ToInt(), 0, 0);
                            }
                        }
                        break;
                    case "/fdh":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                for (int i = 1; i <= 2000; i++)
                                {
                                    //for (int x = 0; x <= MapManager.RetrieveMapGeneralInfo(i).MaxX; x++) {
                                    //    for (int y = 0; y <= MapManager.RetrieveMapGeneralInfo(i).MaxY; y++) {
                                    // TODO: map tile info [Scripts]
                                    /* Can't get info on a nonactive map's tiles...
                                    if (NetScript.GetAttribute(i, x, y) == Enums.TileType.Shop /*|| NetScript.GetAttribute(i, x, y) == Enums.TileType.Warp) {
                                        if (NetScript.GetTileData1(i, x, y) == /*243 joinedArg.ToInt()) {
                                            NetScript.PlayerMsg(client, "Found warp! On Map " + i.ToString() + " X: " + x.ToString() + " Y: " + y.ToString(), Text.Yellow);
                                            //return;
                                        }
                                    }
                                    */
                                    //    }
                                    //}
                                }
                            }
                        }
                        break;
                    case "/findaccount":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.Player.AccountName.ToLower() == joinedArgs.ToLower())
                                    {
                                        Messenger.PlayerMsg(client, "Found account! [" + i.Player.AccountName + "/" + i.Player.Name + "]", Text.BrightGreen);
                                    }
                                }
                            }
                        }
                        break;
                    case "/cc":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                n.CloseConnection();
                                Messenger.PlayerMsg(client, "CC/ " + n.Player.Name, Text.Blue);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "That is not a valid command!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/regenlotto":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Lottery.ForceGenLottoNumbers();
                                Messenger.PlayerMsg(client, "Lottery numbers regenerated!", Text.Yellow);
                            }
                        }
                        break;
                    case "/lottostats":
                        {
                            // TODO: /lottostats lottery
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.PlayerMsg(client, "Lottery Stats:", Text.BrightGreen);
                                Messenger.PlayerMsg(client, "Lottery Payout: " + Lottery.LotteryPayout, Text.BrightGreen);
                                Messenger.PlayerMsg(client, "Lottery Earnings: " + Lottery.LotteryEarnings, Text.BrightGreen);
                                Messenger.PlayerMsg(client, "Last Lottery Earnings: " + Lottery.LastLotteryEarnings, Text.BrightGreen);
                                Messenger.PlayerMsg(client, "Total Lottery Earnings: " + Lottery.TotalLotteryEarnings, Text.BrightGreen);
                            }
                        }
                        break;
                    //debug
                    //testbuff
                    case "/playeros":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                Messenger.PlayerMsg(client, n.Player.Name + " OS info:", Text.Yellow);
                                Messenger.PlayerMsg(client, n.Player.GetOSVersion(), Text.Yellow);
                                Messenger.PlayerMsg(client, ".NET info:", Text.Yellow);
                                Messenger.PlayerMsg(client, n.Player.GetDotNetVersion(), Text.Yellow);
                                Messenger.PlayerMsg(client, "Client info:", Text.Yellow);
                                Messenger.PlayerMsg(client, n.Player.GetClientEdition(), Text.Yellow);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "That is not a valid command!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/lounge":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerWarp(client, 1466, 39, 21);
                                Messenger.PlayerMsg(client, "Welcome to the staff headquarters!", Text.Yellow);
                                //110
                            }
                        }
                        break;
                    case "/gccollect":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                GC.Collect();
                                Messenger.PlayerMsg(client, "Garbage collected!", Text.BrightGreen);
                            }
                        }
                        break;
                    case "/adminmsg":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                //DatabaseManager.OptionsDB.SaveSetting("Generic", "AdminMsg", joinedArgs);
                                //Messenger.PlayerMsg(client, "Admin message changed to: \"" + joinedArgs + "\"", Text.BrightGreen);
                            }
                        }
                        break;
                    case "/motd":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                Server.Settings.MOTD = joinedArgs;
                                Messenger.GlobalMsg("MOTD changed to: " + joinedArgs, Text.BrightCyan);
                                Server.Settings.SaveMOTD();
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[MOTD] " + client.Player.Name + " set the MOTD to: " + joinedArgs);
                            }
                        }
                        break;

                    #region CTF Commands
                    case "/ctfcreate":
                        {
                            if (client.Player.MapID == MapManager.GenerateMapID(CTF.HUBMAP))
                            {
                                if (ActiveCTF == null)
                                {
                                    ActiveCTF = new CTF(CTF.CTFGameState.NotStarted);
                                }
                                if (ActiveCTF.GameState == CTF.CTFGameState.NotStarted)
                                {
                                    ActiveCTF.CreateGame(client);
                                    return;
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "A game of Capture The Flag is already started!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "/ctfjoin":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You cannot join the game because you are muted!", Text.BrightRed);
                            }
                            if (client.Player.MapID == MapManager.GenerateMapID(CTF.HUBMAP))
                            {
                                if (ActiveCTF == null)
                                {
                                    Messenger.PlayerMsg(client, "No game has been started yet!", Text.BrightRed);
                                }
                                else if (ActiveCTF.GameState == CTF.CTFGameState.WaitingForPlayers)
                                {
                                    if (exPlayer.Get(client).InCTF == false)
                                    {
                                        ActiveCTF.AddToGame(client);
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "You have already joined the game!", Text.BrightRed);
                                    }
                                }
                                else
                                {
                                    if (ActiveCTF.GameState == CTF.CTFGameState.Started)
                                    {
                                        Messenger.PlayerMsg(client, "There is already a game of Capture The Flag that has been started!", Text.BrightRed);
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "No game of Capture The Flag has been created yet!", Text.BrightRed);
                                    }
                                }
                            }
                        }
                        break;
                    case "/ctfleave":
                        {
                            if (client.Player.MapID == MapManager.GenerateMapID(CTF.REDMAP) || client.Player.MapID == MapManager.GenerateMapID(CTF.BLUEMAP))
                            {
                                ActiveCTF.RemoveFromGame(client);
                            }
                        }
                        break;
                    case "/ctfstart":
                        {
                            if (ActiveCTF.GameLeader == client)
                            {
                                ActiveCTF.StartGame();
                                ActiveCTF.CTFMsg("This game of Capture The Flag has started.", Text.Yellow);
                                ActiveCTF.CTFMsg("This game will have " + ActiveCTF.BlueFlags + " flags!", Text.Yellow);
                            }
                        }
                        break;
                    case "/ctfflags":
                        {
                            if (ActiveCTF.GameLeader == client && ActiveCTF.GameState == CTF.CTFGameState.WaitingForPlayers)
                            {
                                ActiveCTF.RedFlags = joinedArgs.ToInt();
                                ActiveCTF.BlueFlags = joinedArgs.ToInt();
                                Messenger.PlayerMsg(client, "This game will have " + ActiveCTF.BlueFlags + " flags!", Text.Yellow);
                            }
                        }
                        break;
                    case "/ctfend":
                        {
                            if (ActiveCTF.GameLeader == client)
                            {
                                ActiveCTF.EndGame(client);
                                Messenger.PlayerMsg(client, "You have ended the game.", Text.Yellow);
                            }
                        }
                        break;
                    case "/ctfforceend":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                ActiveCTF.EndGame(client.Player.Name);
                                Messenger.PlayerMsg(client, "You have ended the game.", Text.Yellow);
                            }
                        }
                        break;
                    case "/ctf":
                        {
                            if (ActiveCTF.GameState == CTF.CTFGameState.Started)
                            {
                                if (exPlayer.Get(client).InCTF)
                                {
                                    ActiveCTF.CTFMsg(client.Player.Name + " [CTF]: " + joinedArgs, Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/ctft":
                        {
                            if (ActiveCTF.GameState == CTF.CTFGameState.Started)
                            {
                                if (exPlayer.Get(client).InCTF)
                                {
                                    ActiveCTF.CTFTMsg(client, client.Player.Name + " [CTF Team]: " + joinedArgs, Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/ctfgen":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                RDungeonMap dungeonMap = RDungeonFloorGen.GenerateFloor(client, 39, 0, RDungeonManager.RDungeons[39].Floors[0].Options);
                                Messenger.PlayerWarp(client, dungeonMap, dungeonMap.StartX, dungeonMap.StartY);
                            }
                        }
                        break;
                    #endregion CTF Commands
                    case "/checkstack":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                if (n == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else if (command[2].ToInt() <= 0)
                                {
                                    Messenger.PlayerMsg(client, "Invalid item number.", Text.BrightRed);
                                }
                                else if (n == client)
                                {
                                    Messenger.PlayerMsg(client, "Your amount of " + ItemManager.Items[command[2].ToInt()].Name + ": " + n.Player.HasItem(command[2].ToInt()).ToString(), Text.Yellow);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s amount of " + ItemManager.Items[command[2].ToInt()].Name + ": " + n.Player.HasItem(command[2].ToInt()).ToString(), Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/checkinv*":
                    case "/checkinv":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(joinedArgs, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(joinedArgs);
                                }
                                Messenger.PlayerMsg(client, n.Player.Name + "'s Inventory:", Text.Yellow);
                                InventoryItem item;
                                for (int i = 1; i <= n.Player.MaxInv; i++)
                                {
                                    item = n.Player.Inventory[i];
                                    int amount = 0;
                                    string msg = item.Num + " ";
                                    if (item.Num > 0)
                                    {
                                        msg += ItemManager.Items[item.Num].Name;
                                        amount = item.Amount;
                                    }
                                    if (amount > 0)
                                    {
                                        msg += " (" + amount.ToString() + ")";
                                    }
                                    if (item.Tag != "")
                                    {
                                        msg += " [" + item.Tag + "]";
                                    }
                                    if (msg != "")
                                    {
                                        Messenger.PlayerMsg(client, msg, Text.Yellow);
                                    }
                                }
                            }
                        }
                        break;
                    case "/clearinv":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                for (int i = 1; i <= client.Player.MaxInv; i++)
                                {
                                    client.Player.TakeItemSlot(i, client.Player.Inventory[i].Amount, true);
                                }
                                Messenger.PlayerMsg(client, "Inventory Cleared", Text.Yellow);
                            }
                        }
                        break;
                    case "/checkbank*":
                    case "/checkbank":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(joinedArgs, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(joinedArgs);
                                }
                                Messenger.PlayerMsg(client, n.Player.Name + "'s Bank:", Text.Yellow);
                                InventoryItem item;
                                for (int i = 1; i <= n.Player.MaxBank; i++)
                                {
                                    item = n.Player.Bank[i];
                                    int amount = 0;
                                    string msg = "";
                                    if (item.Num > 0)
                                    {
                                        msg = ItemManager.Items[item.Num].Name;
                                        amount = item.Amount;
                                    }
                                    if (amount > 0)
                                    {
                                        msg += " (" + amount.ToString() + ")";
                                    }
                                    if (msg != "")
                                    {
                                        Messenger.PlayerMsg(client, msg, Text.Yellow);
                                    }
                                }
                            }
                        }
                        break;
                    case "/checktile":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Tile tile = client.Player.Map.Tile[client.Player.X, client.Player.Y];
                                Messenger.PlayerMsg(client, tile.Type.ToString(), Text.Yellow);
                                Messenger.PlayerMsg(client, "Ground: " + tile.GroundSet + ":" + tile.Ground, Text.Yellow);
                                Messenger.PlayerMsg(client, "GroundAnim: " + tile.GroundAnimSet + ":" + tile.GroundAnim, Text.Yellow);
                                Messenger.PlayerMsg(client, "Mask: " + tile.MaskSet + ":" + tile.Mask, Text.Yellow);
                                Messenger.PlayerMsg(client, "MaskAnim: " + tile.AnimSet + ":" + tile.Anim, Text.Yellow);
                                Messenger.PlayerMsg(client, "Mask2: " + tile.Mask2Set + ":" + tile.Mask2, Text.Yellow);
                                Messenger.PlayerMsg(client, "Mask2Anim: " + tile.M2AnimSet + ":" + tile.M2Anim, Text.Yellow);
                                Messenger.PlayerMsg(client, "Fringe: " + tile.FringeSet + ":" + tile.Fringe, Text.Yellow);
                                Messenger.PlayerMsg(client, "FringeAnim: " + tile.FAnimSet + ":" + tile.FAnim, Text.Yellow);
                                Messenger.PlayerMsg(client, "Fringe2: " + tile.Fringe2Set + ":" + tile.Fringe2, Text.Yellow);
                                Messenger.PlayerMsg(client, "Fringe2Anim: " + tile.F2AnimSet + ":" + tile.F2Anim, Text.Yellow);
                                Messenger.PlayerMsg(client, "Data1: " + tile.Data1, Text.Yellow);
                                Messenger.PlayerMsg(client, "Data2: " + tile.Data2, Text.Yellow);
                                Messenger.PlayerMsg(client, "Data3: " + tile.Data3, Text.Yellow);
                                Messenger.PlayerMsg(client, "String1: " + tile.String1, Text.Yellow);
                                Messenger.PlayerMsg(client, "String2: " + tile.String2, Text.Yellow);
                                Messenger.PlayerMsg(client, "String3: " + tile.String3, Text.Yellow);
                            }
                        }
                        break;
                    case "/checkmoves":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                Messenger.PlayerMsg(client, n.Player.Name + "'s Moves:", Text.Yellow);
                                for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++)
                                {
                                    if (n.Player.Team[i] != null && n.Player.Team[i].Loaded)
                                    {
                                        Messenger.PlayerMsg(client, "Team #" + i + ": " + Pokedex.GetPokemon(n.Player.Team[i].Species).Name, Text.Yellow);
                                        for (int j = 0; j < 4; j++)
                                        {
                                            if (n.Player.Team[i].Moves[j].MoveNum > 0)
                                            {
                                                Messenger.PlayerMsg(client, MoveManager.Moves[n.Player.Team[i].Moves[j].MoveNum].Name, Text.Yellow);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "/checkmissions":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                Messenger.PlayerMsg(client, n.Player.Name + "'s Mission Board:", Text.Yellow);
                                foreach (WonderMail mail in n.Player.MissionBoard.BoardMissions)
                                {
                                    Messenger.PlayerMsg(client, mail.Title, Text.Yellow);
                                }
                                Messenger.PlayerMsg(client, n.Player.Name + "'s Job List:", Text.Yellow);
                                foreach (WonderMailJob job in n.Player.JobList.JobList)
                                {
                                    Messenger.PlayerMsg(client, job.Mission.Title, Text.Yellow);
                                }
                            }
                        }
                        break;
                    //checkpts ~ what pts? THERE ARE NO PTS ANYMORE
                    #region Auction Commands
                    case "/masswarpauction":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    Messenger.AskQuestion(i, "MassWarpAuction", client.Player.Name + " is inviting you to join an auction!  Would you like to play?", -1);
                                }
                            }
                        }
                        break;
                    case "/createauction":
                        {
                            if (client.Player.MapID == Auction.AUCTION_MAP)
                            {
                                if (!Auction.StaffAuction)
                                {
                                    Auction.CreateAuction(client);
                                }
                                else if (Auction.StaffAuction && Ranks.IsAllowed(client, Enums.Rank.Mapper))
                                {
                                    Auction.CreateAuction(client);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "A staff held auction is in progress. You may not create an auction at this time!", Text.BrightRed);
                                }

                            }

                        }
                        break;
                    case "/startauction":
                        {
                            Auction.StartAuction(client);
                        }
                        break;
                    case "/endauction":
                        {
                            Auction.EndAuction(client);
                        }
                        break;
                    case "/auctionadminhelp":
                        {
                            Auction.SayHelp(client);
                        }
                        break;
                    case "/auctionhelp":
                        {
                            Auction.SayPlayerHelp(client);
                        }
                        break;
                    case "/checkbidder":
                        {
                            Auction.CheckBidder(client);
                        }
                        break;
                    case "/setauctionitem":
                        {
                            Auction.SetAuctionItem(client, joinedArgs);
                        }
                        break;
                    case "/setauctionminbid":
                        {
                            Auction.SetAuctionMinBid(client, joinedArgs.ToInt());
                        }
                        break;
                    case "/setbidincrement":
                        {
                            Auction.SetBidIncrement(client, joinedArgs.ToInt());
                        }
                        break;
                    case "/bid":
                        {
                            if (client.Player.HasItem(1) >= joinedArgs.ToInt())
                            {
                                Auction.UpdateBids(client, joinedArgs.ToInt());
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You don't have enough Poké!", Text.BrightRed);
                            }
                        }
                        break;

                    #endregion Auction Commands
                    case "/reward":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    //	i.Player.GiveItem(746, 1);
                                    i.Player.GiveItem(133, 3);
                                    Messenger.PlayerMsg(i, "You have been awarded three event tokens for participating!", Text.BrightGreen);
                                }
                            }
                        }
                        break;
                    case "/givetokens":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n;
                                n = ClientManager.FindClient(command[1]);
                                int numTokens = command[2].ToInt();

                                n.Player.GiveItem(133, numTokens);
                                Messenger.PlayerMsg(n, client.Player.Name + " has awarded you " + numTokens + " event tokens!", Text.BrightGreen);
                                Messenger.AdminMsg("[Staff] " + client.Player.Name + " has given " + n.Player.Name + " " + numTokens + " event tokens!", Text.BrightBlue);
                            }
                        }
                        break;
                    case "/setname*":
                    case "/setname":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                Client n;
                                string newName = command[2];
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(command[1], true); // Attempt to find our player if they have a difficult name
                                }
                                else
                                {
                                    n = ClientManager.FindClient(command[1]);
                                }

                                n.Player.Name = newName;
                                Messenger.SendPlayerData(n);
                            }
                        }
                        break;

                    case "/setguild":
                        {
                            try
                            {
                                if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                                {
                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                    {
                                        Client n = ClientManager.FindClient(command[1]);
                                        string guildName = command[2];
                                        if (n != null)
                                        {
                                            // DataManager.Players.PlayerDataManager.AddGuildMember(dbConnection.Database, guildName, n.Player.CharID);
                                            // DataManager.Players.PlayerDataManager.SetGuildAccess(dbConnection.Database, n.Player.CharID, (int)Enums.GuildRank.Founder);
                                            // n.Player.GuildName = guildName;
                                            //  n.Player.GuildAccess = Enums.GuildRank.Founder;

                                            // DataManager.Players.PlayerDataManager.RemoveGuildMember(dbConnection.Database, n.Player.CharID);
                                            n.Player.GuildName = command[2];
                                            // n.Player.GuildAccess = Enums.GuildRank.None;

                                            Messenger.SendPlayerGuild(n);
                                        }
                                    }
                                }
                            }
                            catch (Exception ex) { }
                        }
                        break;
                    //case "/checkowner": {
                    //        if (Ranks.IsAllowed(client, Enums.Rank.Moniter)) {
                    //            if (client.Player.Map.Owner != null) {
                    //                Messenger.PlayerMsg(client, "The owner of this place is: " + client.Player.Map.Owner, Text.Yellow);
                    //            }
                    //        }
                    //    }
                    //    break;
                    //blockpm
                    //closeserver
                    //closeall
                    //closenonplayers

                    case "/hb":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                string playerMap = client.Player.MapID;
                                Messenger.MapMsg(playerMap, "H", Text.Blue);
                                Messenger.MapMsg(playerMap, "A", Text.Green);
                                Messenger.MapMsg(playerMap, "P", Text.Cyan);
                                Messenger.MapMsg(playerMap, "P", Text.Red);
                                Messenger.MapMsg(playerMap, "Y", Text.Magenta);
                                Messenger.MapMsg(playerMap, "-", Text.Grey);
                                Messenger.MapMsg(playerMap, "B", Text.Brown);
                                Messenger.MapMsg(playerMap, "I", Text.BrightBlue);
                                Messenger.MapMsg(playerMap, "R", Text.BrightGreen);
                                Messenger.MapMsg(playerMap, "T", Text.BrightCyan);
                                Messenger.MapMsg(playerMap, "H", Text.BrightRed);
                                Messenger.MapMsg(playerMap, "D", Text.Pink);
                                Messenger.MapMsg(playerMap, "A", Text.Yellow);
                                Messenger.MapMsg(playerMap, "Y", Text.Blue);
                                Messenger.MapMsg(playerMap, joinedArgs + "!", Text.White);
                                Messenger.PlaySoundToMap(client.Player.MapID, "magic7.wav");
                            }
                        }
                        break;
                    case "/pk":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Client n = ClientManager.FindClient(joinedArgs);
                                    if (n != null)
                                    {
                                        //n.Player.PK = !n.Player.PK;
                                        Messenger.SendPlayerData(n);
                                    }
                                }
                            }
                        }
                        break;
                    case "/eat":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Client n = ClientManager.FindClient(joinedArgs);
                                    if (n != null)
                                    {
                                        Messenger.GlobalMsg(client.Player.Name + " has eaten " + n.Player.Name + "!", Text.Yellow);
                                        Messenger.PlayerWarp(n, 509, 11, 8);
                                        //} else if (n == index) {
                                        //    NetScript.PlayerMsg(index, "You cant eat yourself!", Text.BrightRed);
                                    }
                                    else if (n == null)
                                    {
                                        Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to pick somebody to eat!", Text.Black);
                                }
                            }
                        }
                        break;
                    case "/._.":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Client n = ClientManager.FindClient(joinedArgs);
                                    if (n != null)
                                    {
                                        Messenger.GlobalMsg(client.Player.Name + " has stared into the eternal soul of " + n.Player.Name + "!", System.Drawing.Color.MidnightBlue);
                                        Messenger.PlayerWarp(n, 2000, 9, 6);
                                        //} else if (n == index) {
                                        //    NetScript.PlayerMsg(index, "You cant eat yourself!", Text.BrightRed);
                                    }
                                    else if (n == null)
                                    {
                                        Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to pick somebody to stare into the eternal soul of!", Text.Black);
                                }
                            }
                        }
                        break;
                    case "/addnews":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    try
                                    {
                                        Server.Settings.AddNews(joinedArgs);
                                        Messenger.GlobalMsg("Updated News: " + joinedArgs, Text.Yellow);
                                    }
                                    catch (Exception ex)
                                    {
                                        Messenger.PlayerMsg(client, ex.ToString(), Text.Red);
                                    }
                                    Messenger.PlayerMsg(client, "News updated!", Text.Yellow);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "The new news cant be blank!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "/reloadnews":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                Server.Settings.LoadNews();
                                Messenger.PlayerMsg(client, "News have been reloaded!", Text.Yellow);
                            }
                        }
                        break;
                    case "/news":
                        {
                            Messenger.PlayerMsg(client, "Latest News:", Text.Yellow);
                            for (int i = 0; i < Server.Settings.News.Count; i++)
                            {
                                Messenger.PlayerMsg(client, Server.Settings.News[i], Text.Yellow);
                            }

                        }
                        break;
                    case "/givemove":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                if (n != null)
                                {
                                    int moveNum;
                                    if (command[2].IsNumeric() && command[2].ToInt() > 1 && command[2].ToInt() <= MoveManager.Moves.MaxMoves)
                                    {
                                        moveNum = command[2].ToInt();
                                        n.Player.GetActiveRecruit().LearnNewMove(moveNum);
                                        Messenger.PlayerMsg(client, "You have taught " + n.Player.Name + " the move " + MoveManager.Moves[moveNum].Name, Text.Yellow);
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Move Given] " + client.Player.Name + " gave " + n.Player.Name + " the move " + MoveManager.Moves[moveNum].Name);

                                    }
                                    else
                                    {
                                        moveNum = -1;
                                        for (int i = 1; i <= MoveManager.Moves.MaxMoves; i++)
                                        {
                                            if (MoveManager.Moves[i].Name.ToLower().StartsWith(command[2].ToLower()))
                                            {
                                                moveNum = i;
                                            }
                                        }
                                        if (moveNum > -1)
                                        {

                                            n.Player.GetActiveRecruit().LearnNewMove(moveNum);
                                            Messenger.PlayerMsg(client, "You have taught " + n.Player.Name + " the move " + MoveManager.Moves[moveNum].Name, Text.Yellow);
                                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Move Given] " + client.Player.Name + " gave " + n.Player.Name + " the move " + MoveManager.Moves[moveNum].Name);
                                        }
                                    }
                                    Messenger.SendPlayerMoves(n);
                                }
                            }
                        }
                        break;
                    //global
                    //fakeadmin
                    //serverontime, obsolete
                    case "/hunt":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (client.Player.ProtectionOff)
                                {
                                    client.Player.ProtectionOff = false;
                                    client.Player.Hunted = false;
                                    Messenger.PlayerMsg(client, "You are no longer hunted.", Text.BrightGreen);
                                }
                                else
                                {
                                    client.Player.ProtectionOff = true;
                                    client.Player.Hunted = true;
                                    Messenger.PlayerMsg(client, "You are now hunted.", Text.BrightGreen);
                                }
                                PacketBuilder.AppendHunted(client, hitlist);
                            }
                        }
                        break;
                    case "/learnmove":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                int move = command[1].ToInt();
                                if (move <= MoveManager.Moves.MaxMoves)
                                {
                                    client.Player.GetActiveRecruit().LearnNewMove(move);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Move Given] " + client.Player.Name + " gave themselves the move: " + MoveManager.Moves[move].Name);
                                }
                                Messenger.SendPlayerMoves(client);
                            }
                        }
                        break;
                    case "/give":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                int itemAmount = command[2].ToInt();
                                string item = command[3];
                                if (itemAmount == 0)
                                {
                                    Messenger.PlayerMsg(client, "Invalid item amount.", Text.BrightRed);
                                }
                                else if (n == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else
                                {
                                    if (item.IsNumeric())
                                    {
                                        if (item.ToInt() <= 0 || item.ToInt() > Server.Items.ItemManager.Items.MaxItems)
                                        {
                                            Messenger.PlayerMsg(client, "Invalid item number.", Text.BrightRed);
                                        }
                                        else
                                        {
                                            if (ItemManager.Items[item.ToInt()].StackCap <= 1)
                                            {
                                                for (int i = itemAmount; i > 0; i--)
                                                {
                                                    n.Player.GiveItem(item.ToInt(), 1);
                                                }
                                                Messenger.PlayerMsg(client, "You have given " + n.Player.Name + " " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                                Messenger.PlayerMsg(n, client.Player.Name + " has given you " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Item Given] " + client.Player.Name + " gave " + n.Player.Name + " " + itemAmount + " " + ItemManager.Items[item.ToInt()].Name);
                                            }
                                            else
                                            {
                                                n.Player.GiveItem(item.ToInt(), itemAmount);
                                                Messenger.PlayerMsg(client, "You have given " + n.Player.Name + " " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                                Messenger.PlayerMsg(n, client.Player.Name + " has given you " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Item Given] " + client.Player.Name + " gave " + n.Player.Name + " " + itemAmount + " " + ItemManager.Items[item.ToInt()].Name);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        int itemNum = -1;
                                        for (int i = Server.Items.ItemManager.Items.MaxItems; i > 0; i--)
                                        {
                                            if (ItemManager.Items[i].Name.ToLower().StartsWith(item.ToLower()))
                                            {
                                                itemNum = i;
                                            }
                                        }
                                        if (itemNum == -1)
                                        {
                                            Messenger.PlayerMsg(client, "Unable to find an item that starts with " + item, Text.Yellow);
                                        }
                                        else
                                        {
                                            n.Player.GiveItem(itemNum, itemAmount);
                                            Messenger.PlayerMsg(client, "You have given " + n.Player.Name + " " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                            Messenger.PlayerMsg(n, client.Player.Name + " has given you " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + "!", Text.Yellow);
                                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Item Given] " + client.Player.Name + " gave " + n.Player.Name + " " + itemAmount + " " + ItemManager.Items[item.ToInt()].Name);
                                        }
                                    }
                                }

                            }
                        }
                        break;
                    case "/take":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                int itemAmount = command[2].ToInt();
                                string item = command[3];
                                if (itemAmount == 0)
                                {
                                    Messenger.PlayerMsg(client, "Invalid item amount.", Text.BrightRed);
                                }
                                else if (n == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else
                                {
                                    if (item.IsNumeric())
                                    {
                                        if (item.ToInt() <= 0 || item.ToInt() > Server.Items.ItemManager.Items.MaxItems)
                                        {
                                            Messenger.PlayerMsg(client, "Invalid item number.", Text.BrightRed);
                                        }
                                        else
                                        {
                                            n.Player.TakeItem(item.ToInt(), itemAmount);
                                            Messenger.PlayerMsg(client, "You have taken " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + " from " + n.Player.Name + "!", Text.Yellow);
                                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Item Taken] " + client.Player.Name + " took " + itemAmount + " " + ItemManager.Items[item.ToInt()].Name + " from " + n.Player.Name);
                                            //NetScript.PlayerMsg(player, NetScript.GetPlayerName(index) + " has given you " +  itemAmount.ToString() + " " + NetScript.GetItemName(item.ToInt()) + "!", Text.Yellow);
                                        }
                                    }
                                    else
                                    {
                                        int itemNum = -1;
                                        for (int i = Server.Items.ItemManager.Items.MaxItems; i > 0; i--)
                                        {
                                            if (ItemManager.Items[i].Name.ToLower().StartsWith(item.ToLower()))
                                            {
                                                itemNum = i;
                                            }
                                        }
                                        if (itemNum == -1)
                                        {
                                            Messenger.PlayerMsg(client, "Unable to find an item that starts with " + item, Text.Yellow);
                                        }
                                        else
                                        {
                                            n.Player.TakeItem(itemNum, itemAmount);
                                            Messenger.PlayerMsg(client, "You have taken " + itemAmount.ToString() + " " + ItemManager.Items[item.ToInt()].Name + " from " + n.Player.Name + "!", Text.Yellow);
                                            Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Item Taken] " + client.Player.Name + " took " + itemAmount + " " + ItemManager.Items[item.ToInt()].Name + " from " + n.Player.Name);
                                            //NetScript.PlayerMsg(player, NetScript.GetPlayerName(index) + " has given you " +  itemAmount.ToString() + " " + NetScript.GetItemName(itemNum) + "!", Text.Yellow);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "/save":
                        {
                            if (client.Player.SavingLocked == false)
                            {
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    client.Player.SaveCharacterData(dbConnection);
                                }
                                Messenger.PlayerMsg(client, "You have saved the game!", Text.BrightGreen);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You cannot save right now!", Text.BrightRed);
                            }
                        }
                        break;
                    //damageturn ~ obsolete because nothing targets anything anymore
                    case "/s":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying() && i.Player.Access == Enums.Rank.Scripter)
                                    {
                                        Messenger.PlayerMsg(i, client.Player.Name + " [Script Chat]: " + joinedArgs, System.Drawing.Color.MediumSlateBlue);

                                    }
                                }

                            }
                        }
                        break;
                    case "/g":
                        {
                            if (!string.IsNullOrEmpty(client.Player.GuildName) && !string.IsNullOrEmpty(joinedArgs) && client.Player.Muted == false)
                            {
                                OnChatMessageRecieved(client, joinedArgs, Enums.ChatMessageType.Guild);
                                Server.Logging.ChatLogger.AppendToChatLog("Guild Chat/" + client.Player.GuildName, client.Player.Name + ": " + joinedArgs);
                                /*
                                List<System.Drawing.Color> textChoices = new List<System.Drawing.Color>();

                                textChoices.Add(Text.Blue);
                                textChoices.Add(Text.Green);
                                textChoices.Add(Text.Cyan);
                                textChoices.Add(Text.Red);
                                textChoices.Add(Text.Magenta);
                                textChoices.Add(Text.Grey);
                                textChoices.Add(Text.Brown);
                                textChoices.Add(Text.BrightBlue);
                                textChoices.Add(Text.BrightGreen);
                                textChoices.Add(Text.BrightCyan);
                                textChoices.Add(Text.BrightRed);
                                textChoices.Add(Text.Pink);
                                textChoices.Add(Text.Yellow);
                                textChoices.Add(Text.Blue);
                                */
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying() && (Ranks.IsAllowed(i, Enums.Rank.Moniter) || i.Player.GuildName == client.Player.GuildName))
                                    {
                                        Messenger.PlayerMsg(i, client.Player.Name + " [" + client.Player.GuildName + "]: " + joinedArgs, System.Drawing.Color.MediumSpringGreen);

                                    }
                                }

                            }
                        }
                        break;
                    case "/finditemend":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int itemsFound = 0;
                                for (int i = 0; i < Server.Items.ItemManager.Items.MaxItems; i++)
                                {
                                    if (ItemManager.Items[i].Name.ToLower().EndsWith(joinedArgs.ToLower()))
                                    {
                                        Messenger.PlayerMsg(client, ItemManager.Items[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                        itemsFound++;
                                        //return;
                                    }
                                }
                                if (itemsFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "Unable to find an item that starts with '" + joinedArgs + "'", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/finditem":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int itemsFound = 0;
                                if (String.IsNullOrEmpty(joinedArgs))
                                {
                                    Messenger.PlayerMsg(client, "Type in an item name.", Text.Yellow);
                                }
                                else
                                {
                                    for (int i = 0; i < Server.Items.ItemManager.Items.MaxItems; i++)
                                    {
                                        if (ItemManager.Items[i].Name.ToLower().Contains(joinedArgs.ToLower()))
                                        {
                                            Messenger.PlayerMsg(client, ItemManager.Items[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                            itemsFound++;
                                            //return;
                                        }
                                    }
                                    if (itemsFound == 0)
                                    {
                                        Messenger.PlayerMsg(client, "Unable to find an item that starts with '" + joinedArgs + "'", Text.Yellow);
                                    }
                                }
                            }
                        }
                        break;

                    case "/itemcheck":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                for (int i = 810; i <= 810; i++)
                                {

                                    ItemManager.Items[i].Name = "Poké Flute";
                                    Messenger.SendUpdateItemToAll(i);
                                    //ItemManager.SaveItem(i);
                                    Messenger.PlayerMsg(client, i + ": " + ItemManager.Items[i].Name, Text.Yellow);

                                }

                            }
                        }
                        break;
                    case "/itemreq":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                for (int i = 1; i <= 1900; i++)
                                {

                                }

                            }
                        }
                        break;
                    case "/itemdesc":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                for (int i = 612; i <= 628; i++)
                                {
                                    if (ItemManager.Items[i].ScriptedReq == 1)
                                    {
                                        ItemManager.Items[i].Desc = "A treasure for " + (Enums.PokemonType)ItemManager.Items[i].ReqData1 + "-Types.  Give it to a team member to prevent damage from " +
                                            (Enums.PokemonType)ItemManager.Items[i].Data2 + "-type attacks for the team's " + (Enums.PokemonType)ItemManager.Items[i].ReqData1 + "-Type team members.";
                                        Messenger.SendUpdateItemToAll(i);
                                        ItemManager.SaveItem(i);
                                        Messenger.PlayerMsg(client, ItemManager.Items[i].Name, Text.Yellow);
                                    }
                                }
                            }

                        }
                        break;
                    case "/findnpc":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int npcsFound = 0;
                                if (String.IsNullOrEmpty(joinedArgs))
                                {
                                    Messenger.PlayerMsg(client, "Type in an npc name.", Text.Yellow);
                                }
                                else
                                {
                                    for (int i = 1; i <= Server.Npcs.NpcManager.Npcs.MaxNpcs; i++)
                                    {
                                        if (NpcManager.Npcs[i].Name.ToLower().Contains(joinedArgs.ToLower()))
                                        {
                                            Messenger.PlayerMsg(client, NpcManager.Npcs[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                            npcsFound++;
                                            //return;
                                        }
                                    }
                                    if (npcsFound == 0)
                                    {
                                        Messenger.PlayerMsg(client, "Unable to find an npc that starts with '" + joinedArgs + "'", Text.Yellow);
                                    }
                                }
                            }
                        }
                        break;
                    case "/findnpcuse":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (joinedArgs.IsNumeric())
                                {
                                    int npcNum = joinedArgs.ToInt();
                                    if (npcNum > 0 && npcNum <= Server.Npcs.NpcManager.Npcs.MaxNpcs)
                                    {
                                        int itemsFound = 0;
                                        Messenger.PlayerMsg(client, "NPC# " + npcNum + " (" + NpcManager.Npcs[npcNum].Name + ") is found in RDungeons:", Text.Yellow);
                                        for (int i = 0; i < RDungeonManager.RDungeons.Count; i++)
                                        {
                                            int rangeStart = -1;
                                            for (int j = 0; j < RDungeonManager.RDungeons[i].Floors.Count; j++)
                                            {
                                                bool npcFoundOnFloor = false;
                                                for (int k = 0; k < RDungeonManager.RDungeons[i].Floors[j].Npcs.Count; k++)
                                                {
                                                    //Messenger.PlayerMsg(client, "--" + k.ToString(), Text.Yellow);
                                                    if (RDungeonManager.RDungeons[i].Floors[j].Npcs[k].NpcNum == npcNum)
                                                    {
                                                        itemsFound++;
                                                        npcFoundOnFloor = true;
                                                        break;
                                                    }
                                                }
                                                if (npcFoundOnFloor)
                                                {
                                                    if (rangeStart == -1) rangeStart = j;
                                                }
                                                else
                                                {
                                                    if (rangeStart != -1)
                                                    {
                                                        int rangeEnd = j;
                                                        if (rangeEnd - rangeStart == 1)
                                                        {
                                                            Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1), Text.Yellow);
                                                        }
                                                        else
                                                        {
                                                            Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1) + "-F" + rangeEnd, Text.Yellow);
                                                        }
                                                        rangeStart = -1;
                                                    }
                                                }
                                            }
                                            if (rangeStart != -1)
                                            {
                                                int rangeEnd = RDungeonManager.RDungeons[i].Floors.Count;
                                                if (rangeEnd - rangeStart == 1)
                                                {
                                                    Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1), Text.Yellow);
                                                }
                                                else
                                                {
                                                    Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1) + "-F" + rangeEnd, Text.Yellow);
                                                }
                                                rangeStart = -1;
                                            }
                                        }
                                        if (itemsFound <= 0)
                                        {
                                            Messenger.PlayerMsg(client, "[None]", Text.Yellow);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Input Out of Range", Text.Yellow);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Input invalid.", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/finditemuse":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (joinedArgs.IsNumeric())
                                {
                                    int npcNum = joinedArgs.ToInt();
                                    if (npcNum > 0 && npcNum <= Server.Items.ItemManager.Items.MaxItems)
                                    {
                                        int itemsFound = 0;
                                        Messenger.PlayerMsg(client, "Item# " + npcNum + " (" + ItemManager.Items[npcNum].Name + ") is found in RDungeons:", Text.Yellow);
                                        for (int i = 0; i < RDungeonManager.RDungeons.Count; i++)
                                        {
                                            int rangeStart = -1;
                                            for (int j = 0; j < RDungeonManager.RDungeons[i].Floors.Count; j++)
                                            {
                                                bool itemFoundOnFloor = false;
                                                for (int k = 0; k < RDungeonManager.RDungeons[i].Floors[j].Items.Count; k++)
                                                {
                                                    //Messenger.PlayerMsg(client, "--" + k.ToString(), Text.Yellow);
                                                    if (RDungeonManager.RDungeons[i].Floors[j].Items[k].ItemNum == npcNum)
                                                    {
                                                        itemsFound++;
                                                        itemFoundOnFloor = true;
                                                        break;
                                                    }
                                                }
                                                if (itemFoundOnFloor)
                                                {
                                                    if (rangeStart == -1) rangeStart = j;
                                                }
                                                else
                                                {
                                                    if (rangeStart != -1)
                                                    {
                                                        int rangeEnd = j;
                                                        if (rangeEnd - rangeStart == 1)
                                                        {
                                                            Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1), Text.Yellow);
                                                        }
                                                        else
                                                        {
                                                            Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1) + "-F" + rangeEnd, Text.Yellow);
                                                        }
                                                        rangeStart = -1;
                                                    }
                                                }
                                            }
                                            if (rangeStart != -1)
                                            {
                                                int rangeEnd = RDungeonManager.RDungeons[i].Floors.Count;
                                                if (rangeEnd - rangeStart == 1)
                                                {
                                                    Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1), Text.Yellow);
                                                }
                                                else
                                                {
                                                    Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + " F" + (rangeStart + 1) + "-F" + rangeEnd, Text.Yellow);
                                                }
                                                rangeStart = -1;
                                            }
                                        }
                                        if (itemsFound <= 0)
                                        {
                                            Messenger.PlayerMsg(client, "[None]", Text.Yellow);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Input Out of Range", Text.Yellow);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Input invalid.", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/finddex":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int npcsFound = 0;
                                for (int i = 1; i <= Constants.TOTAL_POKEMON; i++)
                                {
                                    if (Pokedex.GetPokemon(i).Name.ToLower().Contains(joinedArgs.ToLower()))
                                    {
                                        foreach (PokemonForm form in Pokedex.GetPokemon(i).Forms)
                                        {
                                            Messenger.PlayerMsg(client, Pokedex.GetPokemon(i).Name + "'s dex number is " + i, Text.Yellow);
                                        }
                                        npcsFound++;
                                        //return;
                                    }
                                }
                                if (npcsFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "Unable to find an Pokemon that starts with '" + joinedArgs + "'", Text.Yellow);
                                }
                            }
                        }
                        break;
                    //case "/findmap": {
                    //        //how to check inactive maps?
                    //        if (Ranks.IsAllowed(client, Enums.Rank.Mapper)) {
                    //            int mapsFound = 0;
                    //            if (!string.IsNullOrEmpty(joinedArgs)) {
                    //                for (int i = 1; i <= Server.Settings.MaxMaps; i++) {
                    //                    MapGeneralInfo generalInfo = MapManager.RetrieveMapGeneralInfo(i);
                    //                    if (generalInfo.Name.ToLower().StartsWith(joinedArgs.ToLower())) {
                    //                        Messenger.PlayerMsg(client, generalInfo.Name + "'s number is " + i.ToString(), Text.Yellow);
                    //                        mapsFound++;
                    //                        //return;
                    //                    }
                    //                }
                    //                if (mapsFound == 0) {
                    //                    Messenger.PlayerMsg(client, "Unable to find a map that starts with '" + joinedArgs + "'", Text.Yellow);
                    //                }
                    //            }
                    //        }
                    //    }
                    //    break;
                    case "/findmove":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int movesFound = 0;
                                for (int i = 1; i <= MoveManager.Moves.MaxMoves; i++)
                                {
                                    if (MoveManager.Moves[i].Name.ToLower().Contains(joinedArgs.ToLower()))
                                    {
                                        Messenger.PlayerMsg(client, MoveManager.Moves[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                        movesFound++;
                                        //return;
                                    }
                                }
                                if (movesFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "Unable to find a move that starts with '" + joinedArgs + "'", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/findmoverange":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter) && joinedArgs.IsNumeric())
                            {
                                Enums.MoveRange range = (Enums.MoveRange)joinedArgs.ToInt();
                                int movesFound = 0;
                                Messenger.PlayerMsg(client, "Moves with " + range + " range", Text.Yellow);
                                for (int i = 1; i <= MoveManager.Moves.MaxMoves; i++)
                                {
                                    if (MoveManager.Moves[i].RangeType == range && !String.IsNullOrEmpty(MoveManager.Moves[i].Name))
                                    {
                                        Messenger.PlayerMsg(client, "#" + i + ": " + MoveManager.Moves[i].Name, Text.Yellow);
                                        movesFound++;
                                        //return;
                                    }
                                }
                                if (movesFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "[None]", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/findrdungeon":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int itemsFound = 0;
                                for (int i = 0; i < RDungeonManager.RDungeons.Count; i++)
                                {
                                    if (RDungeonManager.RDungeons[i].DungeonName.ToLower().Contains(joinedArgs.ToLower()))
                                    {
                                        Messenger.PlayerMsg(client, RDungeonManager.RDungeons[i].DungeonName + "'s number is " + (i + 1).ToString(), Text.Yellow);
                                        itemsFound++;
                                        //return;
                                    }
                                }
                                if (itemsFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "Unable to find a random dungeon that starts with '" + joinedArgs + "'", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/finddungeon":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int itemsFound = 0;
                                for (int i = 1; i < DungeonManager.Dungeons.Count; i++)
                                {
                                    if (DungeonManager.Dungeons[i].Name.ToLower().Contains(joinedArgs.ToLower()))
                                    {
                                        Messenger.PlayerMsg(client, DungeonManager.Dungeons[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                        itemsFound++;
                                        //return;
                                    }
                                }
                                if (itemsFound == 0)
                                {
                                    Messenger.PlayerMsg(client, "Unable to find a dungeon that starts with '" + joinedArgs + "'", Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/addfriend":
                        {
                            client.Player.AddFriend(joinedArgs);
                        }
                        break;
                    case "/removefriend":
                        {
                            client.Player.RemoveFriend(joinedArgs);
                        }
                        break;
                    //storytile
                    //clearstorytile
                    case "/unlockstory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                client.Player.SetStoryState(command[1].ToInt() - 1, false);
                                Messenger.PlayerMsg(client, "Chapter " + (command[1].ToInt()) + " has been unlocked!", Text.Yellow);
                            }
                        }
                        break;
                    case "/setstorystate":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                client.Player.SetStoryState(command[1].ToInt() - 1, command[2].ToBool());
                                Messenger.PlayerMsg(client, "Chapter " + (command[1].ToInt()) + " has been set!", Text.Yellow);
                            }
                        }
                        break;
                    case "/resetstats":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    n.Player.Team[0].AtkBonus = 0;
                                    n.Player.Team[0].DefBonus = 0;
                                    n.Player.Team[0].SpclAtkBonus = 0;
                                    n.Player.Team[0].SpclDefBonus = 0;
                                    n.Player.Team[0].SpdBonus = 0;
                                    Messenger.PlayerMsg(client, "Stats have been reset for " + n.Player.Name + "!", Text.Green);
                                    Messenger.PlayerMsg(n, "Your stats have been reset!", Text.Green);
                                }
                            }
                        }
                        break;
                    case "/recruitnum":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.GetActiveRecruit().RecruitIndex.ToString(), Text.Green);
                                }
                            }
                        }
                        break;
                    case "/storytest":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.PlayerWarp(client, 500, 7, 9);
                                Messenger.PlayerMsg(client, "Welcome to the story test map!", Text.Yellow);
                            }
                        }
                        break;
                    case "/teststory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {

                                client.Player.SetStoryState(joinedArgs.ToInt() - 1, false);

                                StoryManager.PlayStory(client, joinedArgs.ToInt() - 1);
                            }
                        }
                        break;
                    case "/teststorybreak":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {

                                Messenger.ForceEndStoryTo(client);
                                client.Player.MovementLocked = false;
                            }
                        }
                        break;

                    case "/findlockedstory":
                        {
                            // TODO: /findlockedstory [What's this do?]
                        }
                        break;
                    //muteadmin
                    case "/mute*":
                    case "/mute":
                        {
                            Client n;
                            string[] subCommand = command[0].Split('*');
                            if (subCommand.Length > 1)
                            {
                                n = ClientManager.FindClient(joinedArgs, true);
                            }
                            else
                            {
                                n = ClientManager.FindClient(joinedArgs);
                            }
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter) && n != null)
                            {
                                n.Player.Muted = true;
                                n.Player.Status = "MUTED";
                                Messenger.PlayerMsg(n, "You have been muted.", Text.Green);
                                Messenger.AdminMsg("[Staff] " + client.Player.Name + " has muted " + n.Player.Name + ".", Text.BrightBlue);
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Mute Issued] " + client.Player.Name + " muted " + n.Player.Name);

                                PlayerInfoReport(n);

                                Messenger.SendPlayerData(n);
                            }
                        }
                        break;
                    case "/permamute*":
                    case "/permamute":
                        {
                            try
                            {
                                if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                                {
                                    string playerName = command[1];
                                    string muteTimeDays = "-----";
                                    Client bannedClient;

                                    string[] subCommand = command[0].Split('*');

                                    if (subCommand.Length > 1)
                                    {
                                        bannedClient = ClientManager.FindClient(playerName, true);
                                    }
                                    else
                                    {
                                        bannedClient = ClientManager.FindClient(playerName);
                                    }

                                    if (command.CommandArgs.Count > 2 && command[2].IsNumeric())
                                    {
                                        muteTimeDays = DateTime.Now.AddDays(Convert.ToDouble(command[2])).ToString();
                                    }

                                    if (bannedClient != null)
                                    {
                                        bannedClient.Player.Muted = true;
                                        bannedClient.Player.Status = "MUTED";
                                        Messenger.PlayerMsg(bannedClient, "You have been permamuted.", Text.Green);
                                        Messenger.AdminMsg("[Staff] " + client.Player.Name + " has permamuted " + bannedClient.Player.Name + ".", Text.BrightBlue);
                                        Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Permamute Issued] " + client.Player.Name + " muted " + bannedClient.Player.Name);
                                        PlayerInfoReport(bannedClient);
                                        Messenger.SendPlayerData(bannedClient);
                                        using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                        {
                                            Bans.BanPlayer(dbConnection, bannedClient.IP.ToString(), bannedClient.Player.CharID,
                                                bannedClient.Player.AccountName + "/" + bannedClient.Player.Name, bannedClient.MacAddress, bannedClient.BiosId,
                                                client.Player.CharID, client.IP.ToString(), muteTimeDays, Enums.BanType.Mute);
                                        }
                                    }
                                    else
                                    {
                                        using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                        {
                                            IDataColumn[] columns = dbConnection.Database.RetrieveRow("characteristics", "CharID", "Name=\"" + playerName + "\"");
                                            if (columns != null)
                                            {
                                                string charID = (string)columns[0].Value;
                                                string foundIP = (string)dbConnection.Database.RetrieveRow("character_statistics", "LastIPAddressUsed", "CharID=\"" + charID + "\"")[0].Value;
                                                string foundMac = (string)dbConnection.Database.RetrieveRow("character_statistics", "LastMacAddressUsed", "CharID=\"" + charID + "\"")[0].Value;
                                                string storedUUID = (string)dbConnection.Database.RetrieveRow("character_statistics", "StoredUUID", "CharID=\"" + charID + "\"")[0].Value;
                                                //get previous IP and mac
                                                Bans.BanPlayer(dbConnection, foundIP, charID, playerName, foundMac, storedUUID,
                                                    client.Player.CharID, client.IP.ToString(), muteTimeDays, Enums.BanType.Mute);
                                                Messenger.AdminMsg("[Staff] " + client.Player.Name + " has permamuted " + bannedClient.Player.Name + ".", Text.BrightBlue);
                                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Permamute Issued] " + client.Player.Name + " muted " + bannedClient.Player.Name);
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "Unable to find player!", Text.BrightRed);
                                            }
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Messenger.AdminMsg("Error: Permamute", Text.White);
                                Messenger.AdminMsg(ex.ToString(), Text.White);
                            }
                        }
                        break;
                    case "/unmute*":
                    case "/unmute":
                        {
                            Client n;
                            string[] subCommand = command[0].Split('*');
                            if (subCommand.Length > 1)
                            {
                                n = ClientManager.FindClient(joinedArgs, true);
                            }
                            else
                            {
                                n = ClientManager.FindClient(joinedArgs);
                            }
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter) && n != null)
                            {
                                n.Player.Muted = false;
                                n.Player.Status = "";
                                Messenger.PlayerMsg(n, "You have been unmuted.", Text.Green);
                                Messenger.AdminMsg("[Staff] " + client.Player.Name + " has unmuted " + n.Player.Name + ".", Text.BrightBlue);
                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Unmute] " + client.Player.Name + " unmuted " + n.Player.Name);
                                Messenger.SendPlayerData(n);
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    Bans.RemoveBan(dbConnection, "BannedPlayerID", n.Player.CharID);
                                }
                            }
                        }
                        break;
                    case "/kill":
                        {
                            // TODO: /kill [Scripts]
                            Messenger.PlayerMsg(client, "That is (kinda) not a valid command!", Text.BrightRed);
                        }
                        break;
                    case "/jail":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command.CommandArgs.Count == 2)
                                {
                                    Client n = ClientManager.FindClient(joinedArgs);
                                    if (n != null)
                                    {
                                        if (n != client)
                                        {
                                            string mapID = n.Player.MapID;
                                            if (mapID == MapManager.GenerateMapID(666))
                                            {
                                                Messenger.PlayerMsg(client, "The player is already in jail!", Text.BrightRed);
                                            }
                                            else
                                            {
                                                Messenger.PlayerWarp(n, 666, 10, 12);
                                                Messenger.PlayerMsg(n, "You have been jailed! " + "Please wait for " + client.Player.Name + " or another online staff member to assess the situation.", Text.Yellow);
                                                Messenger.AdminMsg("[Staff] " + n.Player.Name + " has been sent to jail by " + client.Player.Name + "!", Text.BrightBlue);
                                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Jail] " + client.Player.Name + " jailed " + n.Player.Name);
                                            }
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "You can't jail yourself!", Text.BrightRed);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                    }
                                }
                            }
                        }
                        break;
                    case "/unjail":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command.CommandArgs.Count == 2)
                                {
                                    Client n = ClientManager.FindClient(joinedArgs);
                                    if (n != null)
                                    {
                                        if (n != client)
                                        {
                                            string mapID = n.Player.MapID;
                                            if (mapID != MapManager.GenerateMapID(666))
                                            {
                                                Messenger.PlayerMsg(client, "The player is not in jail!", Text.BrightRed);
                                            }
                                            else
                                            {
                                                Messenger.PlayerWarp(n, Crossroads, 25, 25);
                                                Messenger.PlayerMsg(n, "You have been unjailed by " + client.Player.Name + "!", Text.Yellow);
                                                Messenger.AdminMsg("[Staff] " + n.Player.Name + " has been freed from jail by " + client.Player.Name + "!", Text.BrightBlue);
                                                Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Unjail] " + client.Player.Name + " unjailed " + n.Player.Name);
                                            }
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "You can't unjail yourself!", Text.BrightRed);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                    }
                                }
                            }
                        }
                        break;
                    //warphere
                    case "/tostartall":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                //if (command[1].IsNumeric()) {
                                List<Client> clientList = new List<Client>();

                                foreach (Client n in client.Player.Map.GetClients())
                                {
                                    clientList.Add(n);
                                }

                                foreach (Client n in clientList)
                                {
                                    Messenger.PlayerWarp(n, 1015, 25, 25);
                                    n.Player.Dead = false;
                                    PacketBuilder.AppendDead(n, hitlist);
                                    Messenger.PlayerMsg(n, "You have been warped to the crossroads by " + client.Player.Name + "!", Text.BrightGreen);
                                    Messenger.PlayerMsg(client, n.Player.Name + " has been warped to the crossroads!", Text.BrightGreen);
                                }

                                //} else {

                                //}

                            }
                        }
                        break;
                    case "/tostart*":
                    case "/tostart":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = joinedArgs;
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(playerName);
                                }
                                if (n != null)
                                {
                                    Messenger.PlayerWarp(n, 1015, 25, 25);
                                    n.Player.Dead = false;
                                    PacketBuilder.AppendDead(n, hitlist);
                                    Messenger.PlayerMsg(n, "You have been warped to the crossroads by " + client.Player.Name + "!", Text.BrightGreen);
                                    Messenger.PlayerMsg(client, n.Player.Name + " has been warped to the crossroads!", Text.BrightGreen);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Warp Event] " + client.Player.Name + " warped " + n.Player.Name + " to The Crossroads.");
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/world":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerWarp(client, 538, 10, 17);
                                Messenger.PlayerMsg(client, "Welcome to the World Map!", Text.BrightGreen);
                            }
                        }
                        break;
                    case "/warpto":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                if (command[1].IsNumeric())
                                {

                                    Messenger.PlayerWarp(client, command[1].ToInt(), client.Player.X, client.Player.Y);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Warp Event] " + client.Player.Name + " warped to map " + command[1] + " - " + client.Player.Map.Name);
                                }
                                else
                                {
                                    // TODO: /warpto findmap method [Scripts]
                                    //findmap method

                                }
                            }
                        }
                        break;
                    case "/warpmeto*":
                    case "/warpmeto":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client target;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    target = ClientManager.FindClient(joinedArgs, true);
                                }
                                else
                                {
                                    target = ClientManager.FindClient(joinedArgs);
                                }
                                if (target != null)
                                {
                                    Messenger.PlayerWarp(client, target.Player.GetCurrentMap(), target.Player.X, target.Player.Y);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Warp Event] " + client.Player.Name + " warped to " + target.Player.Name + " on map: " + target.Player.MapID + " - " + target.Player.Map.Name);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player could not be found.", Text.Green);
                                }
                            }
                        }
                        break;
                    case "/warptome*":
                    case "/warptome":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client target;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    target = ClientManager.FindClient(joinedArgs, true);
                                }
                                else
                                {
                                    target = ClientManager.FindClient(joinedArgs);
                                }
                                if (target != null)
                                {
                                    Messenger.PlayerWarp(target, client.Player.GetCurrentMap(), client.Player.X, client.Player.Y);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Warp Event] " + client.Player.Name + " warped " + target.Player.Name + " to them on map:" + client.Player.MapID + " - " + client.Player.Map.Name);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player could not be found.", Text.Green);
                                }
                            }
                        }
                        break;
                    //masswarp
                    case "/help":
                        {
                            //...
                        }
                        break;
                    case "/viewemotes":
                        {
                            //will make the command when we make the emotes
                        }
                        break;
                    case "/map*":
                    case "/map":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string playerName = command[1];
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(playerName);
                                }

                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.Name + " is at Map " + n.Player.MapID, Text.Green);
                                    Messenger.PlayerMsg(client, n.Player.Map.Name, Text.Green);
                                    Messenger.PlayerMsg(client, n.Player.X + ", " + n.Player.Y, Text.Green);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Info Request] " + client.Player.Name + " checked " + n.Player.Name + "'s map.");
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, playerName + " could not be found.", Text.Green);
                                }
                            }
                        }
                        break;
                    case "/tcpid":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                string playerName = command[1];
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(playerName);
                                }

                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.TcpID.EndPoint.ToString(), Text.Yellow);
                                    Messenger.PlayerMsg(client, ClientManager.GetClient(n.TcpID).Player.Name, Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/playerin":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                //if (command[1].IsNumeric()) {
                                //Messenger.PlayerMsg(client, "Players in this map :", Text.Yellow);
                                //foreach (MapPlayer playerOnMap in client.Player.Map.PlayersOnMap.GetPlayers()) {
                                //    Messenger.PlayerMsg(client, playerOnMap.PlayerID, Text.Yellow);
                                //}
                                int count = 0;
                                foreach (Client i in client.Player.Map.GetClients())
                                {
                                    count++;
                                    //Messenger.PlayerMsg(client, i.Player.Name, Text.Yellow);
                                }
                                Messenger.PlayerMsg(client, "Clients in this map: " + count, Text.Yellow);
                                //foreach (Client i in client.Player.Map.GetClients()) {
                                //Messenger.PlayerMsg(client, i.Player.Name, Text.Yellow);
                                //}

                                //} else {

                                //}

                            }
                        }
                        break;
                    case "/playerindungeon":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command[1].IsNumeric())
                                {
                                    foreach (Client i in ClientManager.GetClients())
                                    {
                                        if (i.IsPlaying() && i.Player.Map.MapType == Enums.MapType.RDungeonMap
                                            && ((RDungeonMap)i.Player.Map).RDungeonIndex == command[1].ToInt() - 1)
                                        {
                                            Messenger.PlayerMsg(client, i.Player.Name + " is on Floor " + (((RDungeonMap)i.Player.Map).RDungeonFloor + 1), Text.BrightCyan);
                                        }
                                    }
                                }
                                else
                                {

                                }
                            }
                        }
                        break;
                    case "/playerintc":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying() && i.Player.Map.MapType == Enums.MapType.RDungeonMap
                                        && ((RDungeonMap)i.Player.Map).RDungeonIndex >= 70 && ((RDungeonMap)i.Player.Map).RDungeonIndex <= 86)
                                    {
                                        Messenger.PlayerMsg(client, i.Player.Name + " is on #" + (((RDungeonMap)i.Player.Map).RDungeonIndex + 1), Text.BrightCyan);
                                        Messenger.PlayerMsg(client, "-Floor " + (((RDungeonMap)i.Player.Map).RDungeonFloor + 1), Text.Yellow);
                                    }
                                }

                            }
                        }
                        break;
                    case "/playerindungeons":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int total = 0;
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying() && i.Player.Map.Moral == Enums.MapMoral.None)
                                    {

                                        Messenger.PlayerMsg(client, i.Player.Name + " is at " + i.Player.Map.Name, Text.BrightCyan);
                                        total++;
                                    }
                                }
                                Messenger.PlayerMsg(client, "Total: " + total, Text.BrightCyan);

                            }
                        }
                        break;
                    case "/hp":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s HP: " + n.Player.GetActiveRecruit().HP.ToString(), Text.Yellow);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/playerid":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s ID: " + n.Player.CharID, Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "/forceswap":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                Client n = ClientManager.FindClient(command[1]);
                                if (n != null)
                                {
                                    int slot = 0;
                                    //for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                                    if (n.Player.Team[command[2].ToInt()] != null && n.Player.Team[command[2].ToInt()].Loaded)
                                    {
                                        slot = command[2].ToInt();
                                    }
                                    //}
                                    n.Player.SwapActiveRecruit(slot);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/info*":
                    case "/info":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(joinedArgs, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(joinedArgs);
                                }

                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, "Account: " + n.Player.AccountName + ", Name: " + n.Player.Name, Text.Yellow);
                                    for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++)
                                    {
                                        if (n.Player.Team[i] != null && n.Player.Team[i].Loaded)
                                        {
                                            Messenger.PlayerMsg(client, "Team #" + i + ": " + Pokedex.GetPokemon(n.Player.Team[i].Species).Name + " Lv." + n.Player.Team[i].Level, Text.Yellow);
                                            Messenger.PlayerMsg(client, "HP: " + n.Player.Team[i].HP + "/" + n.Player.Team[i].MaxHP, Text.Yellow);
                                            Messenger.PlayerMsg(client, "Exp: " + n.Player.Team[i].Exp + "/" + n.Player.Team[i].GetNextLevel(), Text.Yellow);
                                            Messenger.PlayerMsg(client, "Atk/Sp.Atk: " + n.Player.Team[i].Atk + "/" + n.Player.Team[i].SpclAtk, Text.Yellow);
                                            Messenger.PlayerMsg(client, "Def/Sp.Def: " + n.Player.Team[i].Def + "/" + n.Player.Team[i].SpclDef, Text.Yellow);
                                            Messenger.PlayerMsg(client, "Speed: " + n.Player.Team[i].Spd, Text.Yellow);
                                        }
                                    }
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Info Request] " + client.Player.Name + " checked " + n.Player.Name + "'s team information.");
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/statusinfo":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {

                                    for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++)
                                    {
                                        if (n.Player.Team[i] != null && n.Player.Team[i].Loaded)
                                        {
                                            Messenger.PlayerMsg(client, "Team #" + i + ": " + Pokedex.GetPokemon(n.Player.Team[i].Species).Name + "/" + n.Player.Team[i].StatusAilment, Text.Yellow);
                                            for (int j = 0; j < n.Player.Team[i].VolatileStatus.Count; j++)
                                            {
                                                Messenger.PlayerMsg(client, n.Player.Team[i].VolatileStatus[j].Name +
                                                    "/" + n.Player.Team[i].VolatileStatus[j].Counter + "/" + n.Player.Team[i].VolatileStatus[j].Tag, Text.Yellow);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/getip*":
                    case "/getip":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                string playerName = command[1];
                                Client n;
                                string[] subCommand = command[0].Split('*');
                                if (subCommand.Length > 1)
                                {
                                    n = ClientManager.FindClient(playerName, true);
                                }
                                else
                                {
                                    n = ClientManager.FindClient(playerName);
                                }

                                if (n != null)
                                {
                                    if (Ranks.IsAllowed(n, Enums.Rank.ServerHost))
                                    {
                                        Messenger.PlayerMsg(client, n.Player.Name + "'s IP: 46.4.166.141", Text.Yellow);
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, n.Player.Name + "'s IP: " + n.IP.ToString(), Text.Yellow);
                                    }
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s MAC: " + n.MacAddress, Text.Yellow);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Info Request] " + client.Player.Name + " checked " + n.Player.Name + "'s IP/MAC.");

                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/findip":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerMsg(client, "Searching for players with the IP: \"" + joinedArgs + "\"", Text.BrightBlue);
                                foreach (Client n in ClientManager.GetClients())
                                {
                                    if (n.IsPlaying())
                                    {
                                        if (n.IP.ToString().StartsWith(joinedArgs))
                                        {
                                            Messenger.PlayerMsg(client, n.Player.AccountName + "/" + n.Player.Name + ": " + n.IP.ToString(), Text.BrightGreen);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    //getindex; no indexes
                    //poke, hug, praise, yawn, wave
                    case "/praise":
                        {
                            if (client.Player.Muted == false)
                            {
                                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " gave praise to " + joinedArgs + "!", Text.Green);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/hug":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Messenger.MapMsg(client.Player.MapID, client.Player.Name + " has hugged " + command[1] + "!", Text.White);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to pick somebody to hug!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;

                    case "/notepad":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    if (command[1].ToLower() != "artmax")
                                    {
                                        Messenger.MapMsg(client.Player.MapID, client.Player.Name + " threw a notepad at " + command[1] + "!", Text.Yellow);
                                    }
                                    else
                                    {
                                        Messenger.MapMsg(client.Player.MapID, client.Player.Name + " threw a notepad at " + command[1] + " (nuclear strike!)", Text.Yellow);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to pick somebody to throw a notepad at!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/time":
                        {
                            Messenger.PlayerMsg(client, "It is currently: " + Server.Globals.ServerTime, Text.BrightGreen);
                        }
                        break;

                    case "/me":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Messenger.MapMsg(client.Player.MapID, client.Player.Name + " " + joinedArgs, Text.BrightBlue);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to include something to say besides your name!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;

                    case "/poke":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Messenger.MapMsg(client.Player.MapID, client.Player.Name + " poked " + command[1] + ".", Text.Yellow);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You have to pick somebody to poke!", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/yawn":
                        {
                            if (client.Player.Muted == false)
                            {
                                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " let out a loud yawn " + joinedArgs + "~", Text.BrightBlue);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/wave":
                        {
                            if (client.Player.Muted == false)
                            {
                                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " waved at " + joinedArgs + ".", Text.BrightGreen);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/away":
                        {
                            if (client.Player.Muted == true)
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                            else if (client.Player.MapID == "s791" || client.Player.MapID == "s792")
                            {
                                Messenger.PlayerMsg(client, "You cannot be away while playing Capture The Flag!", Text.BrightRed);
                            }
                            else if (client.Player.Status.ToLower() == "away")
                            {
                                client.Player.Status = "";
                                Messenger.GlobalMsg(client.Player.Name + " has returned from being away.", Text.Yellow);
                                Messenger.SendPlayerData(client);
                            }
                            else
                            {
                                client.Player.Status = "Away";
                                Messenger.GlobalMsg(client.Player.Name + " is now away.", Text.Yellow);
                                Messenger.SendPlayerData(client);
                            }
                        }
                        break;
                    case "/wb*":
                    case "/wb":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (command.CommandArgs.Count >= 2)
                                {
                                    Client n;
                                    string[] subCommand = command[0].Split('*');
                                    if (subCommand.Length > 1)
                                    {
                                        n = ClientManager.FindClient(joinedArgs, true);
                                    }
                                    else
                                    {
                                        n = ClientManager.FindClient(joinedArgs);
                                    }
                                    if (n != null)
                                    {
                                        Messenger.MapMsg(client.Player.MapID, client.Player.Name + " welcomes " + n.Player.Name + " back to " + Settings.GameNameShort + "!", Text.White);
                                    }
                                    else if (n == null)
                                    {
                                        Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Pick someone to welcome back.", Text.Black);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/pichu!":
                        {
                            if (client.Player.Muted == false)
                            {
                                if (client.Player.GetActiveRecruit().Species == 172)
                                {
                                    Messenger.PlaySoundToMap(client.Player.MapID, "Pichu!.wav");
                                }
                            }
                        }
                        break;
                    case "/muwaha":
                        {
                            if (client.Player.Muted == false)
                            {
                                Messenger.PlaySoundToMap(client.Player.MapID, "magic1268.wav");
                            }
                        }
                        break;
                    case "/status":
                        {
                            if (client.Player.Muted == true)
                            {
                                Messenger.PlayerMsg(client, "You have been muted!", Text.BrightRed);
                            }
                            else if (exPlayer.Get(client).InCTF == false && exPlayer.Get(client).InSnowballGame == false
                                       && joinedArgs != "MUTED")
                            {
                                if (!string.IsNullOrEmpty(joinedArgs))
                                {
                                    string status = joinedArgs;
                                    if (joinedArgs.Length > 10)
                                    {
                                        status = joinedArgs.Substring(0, 10);
                                    }
                                    client.Player.Status = status;
                                    Messenger.SendPlayerData(client);
                                }
                                else
                                {
                                    client.Player.Status = "";
                                    Messenger.SendPlayerData(client);
                                }
                            }
                        }
                        break;
                    case "/giveup":
                        {
                            GiveUp(client);
                        }
                        break;
                    case "/watch":
                        {
                            if (client.Player.MapID == MapManager.GenerateMapID(660) || client.Player.MapID == MapManager.GenerateMapID(1718))
                            {
                                TcpPacket packet = new TcpPacket("focusonpoint");
                                packet.AppendParameters(15, 15);
                                Messenger.SendDataTo(client, packet);
                                client.Player.MovementLocked = true;
                            }
                        }
                        break;

                    case "/stopwatch":
                        {
                            if (client.Player.MapID == MapManager.GenerateMapID(660) || client.Player.MapID == MapManager.GenerateMapID(1718))
                            {
                                TcpPacket packet = new TcpPacket("focusonpoint");
                                packet.AppendParameters(-1, -1);
                                Messenger.SendDataTo(client, packet);
                                client.Player.MovementLocked = false;
                            }
                        }
                        break;
                    case "/sethouse":
                        {
                            if (exPlayer.Get(client).IsValidPlayerSpawn(client.Player.MapID) == true
                                && client.Player.Map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.Blocked)
                            {
                                exPlayer.Get(client).SpawnMap = client.Player.MapID;
                                exPlayer.Get(client).SpawnX = client.Player.X;
                                exPlayer.Get(client).SpawnY = client.Player.Y;
                                Messenger.PlayerMsg(client, "Spawn point saved!", Text.Yellow);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "This is not a valid spawn point!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/rstart":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command[1].IsNumeric())
                                {
                                    int floor = 1;
                                    if (command.CommandArgs.Count > 2 && command[2].IsNumeric())
                                    {
                                        floor = command[2].ToInt();
                                    }
                                    //RDungeonManager.LoadRDungeon(command[1].ToInt() - 1);
                                    client.Player.WarpToRDungeon(command[1].ToInt() - 1, floor - 1);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[RDungeon Warp] " + client.Player.Name + " warped to " + RDungeonManager.RDungeons[command[1].ToInt() - 1].DungeonName + ", Floor: " + floor);

                                }
                            }
                        }
                        break;

                    case "/findstory":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                int storiesFound = 0;
                                if (String.IsNullOrEmpty(joinedArgs))
                                {
                                    Messenger.PlayerMsg(client, "This is not the story you are looking for. (Because you didn't specify anything!)", Text.Yellow);
                                }
                                else
                                {
                                    for (int i = 0; i < Server.Stories.StoryManagerBase.Stories.MaxStories; i++)
                                    {
                                        if (StoryManagerBase.Stories[i].Name.ToLower().Contains(joinedArgs.ToLower()))
                                        {
                                            Messenger.PlayerMsg(client, StoryManagerBase.Stories[i].Name + "'s number is " + i.ToString(), Text.Yellow);
                                            storiesFound++;
                                            //return;
                                        }
                                    }
                                    if (storiesFound == 0)
                                    {
                                        Messenger.PlayerMsg(client, "Unable to find a story that starts with '" + joinedArgs + "'", Text.Yellow);
                                    }
                                }
                            }

                        }
                        break;
                    case "/nextfloor":
                        {
                            try
                            {
                                if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                                {
                                    if (client.Player.Map.MapType == Enums.MapType.RDungeonMap && ((RDungeonMap)client.Player.Map).RDungeonIndex > -1)
                                    {
                                        client.Player.WarpToRDungeon(((RDungeonMap)client.Player.Map).RDungeonIndex, ((RDungeonMap)client.Player.Map).RDungeonFloor + 1);
                                    }

                                }
                            }
                            catch (Exception ex)
                            {
                                Messenger.AdminMsg("nextfloor error", Text.Pink);
                                Messenger.AdminMsg(ex.ToString(), Text.Pink);
                            }
                        }
                        break;
                    case "/confuse":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                AddExtraStatus(client.Player.GetActiveRecruit(), client.Player.Map, "Confusion", 5, null, "", hitlist);
                                //Confuse(client.Player.GetActiveRecruit(), client.Player.Map, 5, null);
                            }
                        }
                        break;
                    case "/hittime":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                client.Player.GetActiveRecruit().TimeMultiplier = 500;
                                PacketBuilder.AppendTimeMultiplier(client, hitlist);
                            }
                        }
                        break;
                    case "/visible":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                PacketBuilder.AppendVisibility(client, hitlist, false);
                            }
                        }
                        break;
                    case "/infoexp":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                Messenger.PlayerMsg(client, client.Player.ExplorerRank.ToString(), Text.BrightRed);
                            }
                        }
                        break;
                    case "/testexp":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                client.Player.MissionExp += command[1].ToInt();
                                MissionManager.ExplorerRankUp(client);
                            }
                        }
                        break;
                    case "/fixrank":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    n.Player.ExplorerRank = Enums.ExplorerRank.Normal;
                                    MissionManager.ExplorerRankUp(n);
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s rank is fixed now!", Text.Yellow);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/;":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic675.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 9, 1, 2, hitlist);
                        }
                        break;
                    case "/'":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic664.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 6, 2, 1, hitlist);
                        }
                        break;
                    case "/*":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic678.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 5, 2, 1, hitlist);
                        }
                        break;
                    case "/)":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            PacketBuilder.AppendEmote(client, 7, 2, 1, hitlist);
                        }
                        break;
                    case "/))":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic721.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 7, 2, 7, hitlist);
                        }
                        break;
                    case "/)))":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic657.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 7, 2, 8, hitlist);
                        }
                        break;
                    case "/.":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic700.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 12, 2, 1, hitlist);
                        }
                        break;
                    case "/..":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic700.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 12, 2, 2, hitlist);
                        }
                        break;
                    case "/...":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic700.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 12, 2, 3, hitlist);
                        }
                        break;
                    case "/!":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic667.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 13, 2, 1, hitlist);
                        }
                        break;
                    case "/?":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic665.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 8, 2, 1, hitlist);
                        }
                        break;
                    case "/!?":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic671.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 11, 2, 1, hitlist);
                        }
                        break;
                    case "/+":
                        {
                            if (client.Player.Muted)
                            {
                                Messenger.PlayerMsg(client, "You are muted!", Text.BrightRed);
                                return;
                            }
                            hitlist.AddPacketToMap(client.Player.Map, PacketBuilder.CreateSoundPacket("Magic674.wav"), client.Player.X, client.Player.Y, 10);
                            PacketBuilder.AppendEmote(client, 10, 2, 1, hitlist);
                        }
                        break;
                    case "/testailment":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command[1].IsNumeric() && command[1].ToInt() >= 0 && command[1].ToInt() < 6)
                                {

                                    SetStatusAilment(client.Player.GetActiveRecruit(), client.Player.Map, (Enums.StatusAilment)(command[1].ToInt()), 1, null);
                                    //    for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                                    //    {
                                    //        if (client.Player.Map.ActiveNpc[i].Num > 0)
                                    //        {
                                    //            client.Player.Map.ActiveNpc[i].ChangeStatusAilment((Enums.StatusAilment)(command[1].ToInt()), 1);
                                    //        }
                                    //    }
                                }
                            }
                        }
                        break;
                    case "/addvstatus":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                if (command[1].IsNumeric())
                                {
                                    ExtraStatus status = new ExtraStatus();
                                    status.Name = client.Player.GetActiveRecruit().VolatileStatus.Count.ToString();
                                    status.Emoticon = command[1].ToInt();
                                    client.Player.GetActiveRecruit().VolatileStatus.Add(status);
                                    PacketBuilder.AppendVolatileStatus(client, hitlist);

                                    IMap clientMap = client.Player.Map;
                                    for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                                    {
                                        if (clientMap.ActiveNpc[i].Num > 0)
                                        {
                                            clientMap.ActiveNpc[i].VolatileStatus.Add(status);
                                            PacketBuilder.AppendNpcVolatileStatus(MapManager.RetrieveActiveMap(clientMap.ActiveNpc[i].MapID), hitlist, i);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "/removevstatus":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                client.Player.GetActiveRecruit().VolatileStatus.Clear();
                                PacketBuilder.AppendVolatileStatus(client, hitlist);

                                IMap clientMap = client.Player.Map;
                                for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                                {
                                    if (clientMap.ActiveNpc[i].Num > 0)
                                    {
                                        clientMap.ActiveNpc[i].VolatileStatus.Clear();
                                        PacketBuilder.AppendNpcVolatileStatus(MapManager.RetrieveActiveMap(clientMap.ActiveNpc[i].MapID), hitlist, i);
                                    }
                                }
                            }
                        }
                        break;
                    /*case "/diagonal": {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter)) {
                                IMap clientMap = client.Player.Map;
                                for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                                    if (clientMap.ActiveNpc[i].Num > 0) {
                                        clientMap.ActiveNpc[i].X += 3;
                                        clientMap.ActiveNpc[i].Y += 3;
                                        PacketBuilder.AppendNpcXY(MapManager.RetrieveActiveMap(clientMap.ActiveNpc[i].MapID), hitlist, i);
                                    }
                                }
                            }
                        }
                        break;*/
                    case "/checkailment":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.PlayerMsg(client, client.Player.GetActiveRecruit().StatusAilment.ToString() + client.Player.GetActiveRecruit().StatusAilmentCounter.ToString(), Text.BrightRed);
                            }
                        }
                        break;
                    case "/checkdungeons":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(joinedArgs);
                                if (n != null)
                                {
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s completed dungeons:", Text.Yellow);
                                    for (int i = 0; i < Server.Dungeons.DungeonManager.Dungeons.Count; i++)
                                    {
                                        Messenger.PlayerMsg(client, Server.Dungeons.DungeonManager.Dungeons[i].Name + ": " + n.Player.GetDungeonCompletionCount(i), Text.Yellow);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/testegg":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {

                            }
                        }
                        break;
                    case "/speedlimit":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                if (command[1].IsNumeric() && command[1].ToInt() >= 0 && command[1].ToInt() < 7)
                                {

                                    client.Player.GetActiveRecruit().SpeedLimit = (Enums.Speed)(command[1].ToInt());
                                    PacketBuilder.AppendSpeedLimit(client, hitlist);
                                }
                            }
                        }
                        break;
                    case "/testdeath":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                client.Player.Hunted = false;
                                PacketBuilder.AppendHunted(client, hitlist);
                                client.Player.Dead = true;
                                PacketBuilder.AppendDead(client, hitlist);

                                AskAfterDeathQuestion(client);
                            }
                        }
                        break;
                    case "/mobile":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command[1].IsNumeric())
                                {
                                    client.Player.GetActiveRecruit().Mobility[command[1].ToInt()] = true;
                                    PacketBuilder.AppendMobility(client, hitlist);
                                }
                            }
                        }
                        break;
                    case "/immobile":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command[1].IsNumeric())
                                {
                                    client.Player.GetActiveRecruit().Mobility[command[1].ToInt()] = false;
                                    PacketBuilder.AppendMobility(client, hitlist);
                                }
                            }
                        }
                        break;
                    case "/createparty":
                        {
                            PartyManager.CreateNewParty(client);
                        }
                        break;
                    case "/joinparty":
                        {
                            if (client.Player.PartyID == null)
                            {
                                Party party = PartyManager.FindPlayerParty(ClientManager.FindClient(joinedArgs));
                                PartyManager.JoinParty(party, client);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You are already in a party!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/leaveparty":
                        {
                            if (client.Player.PartyID != null)
                            {
                                if (client.Player.Map.Moral == Enums.MapMoral.None)
                                {
                                    Messenger.PlayerMsg(client, "You can't leave the party here!", Text.BrightRed);
                                }
                                else
                                {
                                    Party party = PartyManager.FindPlayerParty(client);
                                    PartyManager.RemoveFromParty(party, client);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You are not in a party!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/myparty":
                        {
                            if (client.Player.PartyID != null)
                            {
                                Party party = PartyManager.FindPlayerParty(client);
                                Messenger.PlayerMsg(client, "Players in your party:", Text.Black);
                                foreach (Client i in party.GetOnlineMemberClients())
                                {
                                    Messenger.PlayerMsg(client, i.Player.Name, Text.White);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You are not in a party!", Text.BrightRed);
                            }
                        }
                        break;
                    case "/kickparty":
                        {
                            try
                            {
                                if (client.Player.PartyID != null)
                                {
                                    Client targetPlayer = ClientManager.FindClient(command[1]);
                                    if (targetPlayer.Player.PartyID == client.Player.PartyID)
                                    {

                                        Party party = PartyManager.FindPlayerParty(client);
                                        if (party.GetLeader() == client)
                                        {
                                            Client n = ClientManager.FindClient(joinedArgs);
                                            if (n != null)
                                            {
                                                if (n.Player.Map.Moral == Enums.MapMoral.None)
                                                {
                                                    Messenger.PlayerMsg(client, "The party member can't be kicked there!", Text.BrightRed);
                                                }
                                                else
                                                {
                                                    PartyManager.RemoveFromParty(party, n);
                                                }
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "Unable to find player.", Text.BrightRed);
                                            }
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "You are not the party leader!", Text.BrightRed);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Player is not in your party!", Text.BrightRed);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You are not in a party!", Text.BrightRed);
                                }
                            }
                            catch (Exception ex)
                            {
                                Messenger.AdminMsg(ex.ToString(), Text.White);
                            }
                        }
                        break;
                    case "/moduleswitch":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                client.Player.SetActiveExpKitModule(Enums.ExpKitModules.Counter);
                            }
                        }
                        break;
                    case "/sticky":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command[1].IsNumeric())
                                {
                                    client.Player.SetItemSticky(command[1].ToInt(), true);
                                }
                            }
                        }
                        break;
                    case "/thticky":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {
                                if (command[1].IsNumeric())
                                {
                                    client.Player.SetItemSticky(command[1].ToInt(), false);
                                }
                            }
                        }
                        break;
                    case "/trade":
                        {
                            Client n = ClientManager.FindClient(joinedArgs);
                            if (n != null)
                            {
                                if (n.Player.MapID == client.Player.MapID)
                                {
                                    client.Player.RequestTrade(n);
                                    Messenger.PlayerMsg(client, "You have asked " + n.Player.Name + " to trade with you!", Text.BrightGreen);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                            }
                        }
                        break;
                    case "/editemoticon":
                    case "/editemotions":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("emoticoneditor"));
                            }
                        }
                        break;
                    case "/edititem":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                if (command[1].IsNumeric())
                                {
                                    int n = command[1].ToInt();

                                    // Prevent hacking
                                    if (n < 0 | n > Server.Items.ItemManager.Items.MaxItems)
                                    {
                                        Messenger.HackingAttempt(client, "Invalid Item Index");
                                        return;
                                    }

                                    Messenger.SendEditItemTo(client, n);
                                }

                            }
                        }
                        break;
                    case "/edititems":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendItemEditor(client);
                            }
                        }
                        break;
                    case "/editmove":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                if (command[1].IsNumeric())
                                {
                                    int n = command[1].ToInt(-1);

                                    // Prevent hacking
                                    if (n < 0 | n > MoveManager.Moves.MaxMoves)
                                    {
                                        Messenger.HackingAttempt(client, "Invalid Move Index");
                                        return;
                                    }

                                    Messenger.SendEditMoveTo(client, n);
                                }

                            }
                        }
                        break;
                    case "/editmoves":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("moveeditor"));
                            }
                        }
                        break;
                    case "/editdungeon":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                if (command[1].IsNumeric())
                                {
                                    if (command[1].ToInt() < 0 && command[1].ToInt() >= DungeonManager.Dungeons.Count)
                                    {
                                        Server.Network.Messenger.HackingAttempt(client, "Invalid Dungeon Number");
                                    }
                                    Messenger.SendEditDungeonTo(client, command[1].ToInt());
                                }
                            }
                        }
                        break;
                    case "/editdungeons":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("dungeoneditor"));
                            }
                        }
                        break;
                    case "/editnpc":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                if (command[1].IsNumeric())
                                {
                                    int n = command[1].ToInt();

                                    // Prevent hacking
                                    /*if (n < 0 || n > Server.Npcs.NpcManager.Npcs.MaxNpcs) {
                                        Messenger.HackingAttempt(client, "Invalid Npc Index");
                                        return;
                                    }*/
                                    Messenger.SendNpcAiTypes(client);
                                    Messenger.SendEditNpcTo(client, n);
                                }

                            }
                        }
                        break;
                    case "/editnpcs":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("npceditor"));
                            }
                        }
                        break;
                    case "/editrdungeon":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                if (command[1].IsNumeric())
                                {
                                    int n = command[1].ToInt();
                                    if (n < 0 || n > RDungeonManager.RDungeons.Count - 1)
                                    {
                                        Messenger.PlayerMsg(client, "Invalid dungeon client", Text.BrightRed);
                                        return;
                                    }

                                    Messenger.SendEditRDungeonTo(client, n);
                                }

                            }
                        }
                        break;
                    case "/editrdungeons":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("rdungeoneditor"));
                            }
                        }
                        break;
                    case "/editstory":
                    case "/editstories":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("storyeditor"));
                            }
                        }
                        break;
                    case "/mapreport":
                        {
                            // Prevent hacking
                            //if (Ranks.IsDisallowed(client, Enums.Rank.Mapper)) {
                            //Messenger.HackingAttempt(client, "Admin Cloning");
                            //return;
                            //}
                            // TODO: Fix MapReport to work with on-demand map loading system
                            //TcpPacket packet = new TcpPacket("mapreport");
                            //for (int i = 1; i <= Server.Settings.MaxMaps; i++) {
                            //packet.AppendParameter(MapManager.Maps[i].Name);
                            //packet.AppendParameter("-Not Implemented-");
                            //}

                            //Messenger.SendDataTo(client, packet);
                        }
                        break;
                    case "/editevolutions":
                    case "/editevolution":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("evolutioneditor"));
                            }
                        }
                        break;
                    case "/editshop":
                    case "/editshops":
                        {
                            // Prevent Hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Server.Network.Messenger.HackingAttempt(client, "Admin Cloning");
                            }
                            else
                            {
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("shopeditor"));
                            }
                        }
                        break;
                    case "/testrecall":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                Messenger.SendRecallMenu(client, false);
                            }

                        }
                        break;
                    case "/test":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                Debug.RunTest(client);
                            }
                        }
                        break;
                    case "/setform":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                client.Player.GetActiveRecruit().SetForm(command[1].ToInt());
                                Messenger.SendPlayerData(client);
                                Messenger.SendActiveTeam(client);
                                Messenger.SendStats(client);
                            }
                        }
                        break;
                    case "/setgender":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                if (n != null)
                                {
                                    n.Player.GetActiveRecruit().Sex = (Enums.Sex)command[2].ToInt();
                                    RefreshCharacterTraits(n.Player.GetActiveRecruit(), n.Player.Map, hitlist);
                                    Messenger.SendPlayerData(n);
                                    Messenger.SendActiveTeam(n);
                                    Messenger.SendStats(n);
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s " + n.Player.GetActiveRecruit().Name + "'s gender was set to " + ((Enums.Sex)command[2].ToInt()).ToString(), Text.Pink);
                                    Server.Logging.ChatLogger.AppendToChatLog("Staff", "[Characteristics] " + client.Player.Name + " changed the gender of " + n.Player.Name + "'s " + n.Player.GetActiveRecruit().Name + " to " + ((Enums.Sex)command[2].ToInt()).ToString());
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/offlinetostart":
                        {
                            try
                            {
                                if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                                {
                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                    {
                                        dbConnection.Database.ExecuteNonQuery("UPDATE mdx_players.location " +
                                            "JOIN mdx_players.characteristics ON mdx_players.characteristics.CharID = mdx_players.location.CharID " +
                                            "SET mdx_players.location.Map = \'s1015\' " +
                                            "WHERE characteristics.Name = \'" + command[1] + "\';");
                                        Messenger.PlayerMsg(client, "Character has been offline-warped to the crossroads", Text.Yellow);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Messenger.PlayerMsg(client, ex.ToString(), Text.Black);
                            }
                        }
                        break;
                    case "/fixhouse":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Client n = ClientManager.FindClient(command[1]);
                                if (n != null)
                                {
                                    string houseID = MapManager.GenerateHouseID(n.Player.CharID, 0);
                                    // Make an empty house
                                    DataManager.Maps.HouseMap rawHouse = new DataManager.Maps.HouseMap(houseID);
                                    rawHouse.Owner = n.Player.CharID;
                                    rawHouse.Room = 0;
                                    IMap map = new House(rawHouse);
                                    map.Moral = Enums.MapMoral.House;
                                    map.Name = n.Player.Name + "'s House";
                                    map.Save();
                                    Messenger.PlayerMsg(client, n.Player.Name + "'s house is cleared.", Text.Pink);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "/addmaps":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Admin))
                            {

                                for (int i = 2002; i <= 3000; i++)
                                {
                                    // Make an empty house
                                    DataManager.Maps.Map rawMap = new DataManager.Maps.Map("s" + i);
                                    Server.Maps.Map map = new Server.Maps.Map(rawMap);
                                    map.Save();
                                    Messenger.PlayerMsg(client, "Map " + i + " added.", Text.Pink);
                                }
                                Messenger.PlayerMsg(client, "Maps added.", Text.Pink);
                            }
                        }
                        break;
                    case "/copycharacter":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                //try {
                                //    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) {
                                //
                                //        PlayerDataManager.CopyCharacter(dbConnection.Database, command[1], command[2]);
                                //        Messenger.PlayerMsg(client, "Character copied from " + command[1] + " to " + command[2], Text.Black);
                                //    }
                                //} catch (Exception ex) {
                                //    Messenger.PlayerMsg(client, ex.ToString(), Text.Black);
                                //}
                            }

                        }
                        break;
                    case "/addnpcs":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Scripter))
                            {
                                for (int i = 2002; i <= 3000; i++)
                                {
                                    NpcManager.SaveNpc(i);
                                    Messenger.PlayerMsg(client, "NPC " + i + " added.", Text.BrightGreen);
                                }
                            }
                        }
                        break;
                    default:
                        {
                            Messenger.PlayerMsg(client, "That is not a valid command.", Text.BrightRed);
                        }
                        break;
                }

                PacketHitList.MethodEnded(ref hitlist);
            }
            catch (Exception ex)
            {
                Messenger.AdminMsg("Error: Command (" + command.CommandArgs[0] + ")", Text.Black);
                //Messenger.AdminMsg(ex.ToString(), Text.Black);
            }
        }
Example #18
0
        public static void StoryScript(Client client, int scriptNum, string param1, string param2, string param3, bool paused)
        {
            // Called when a script from a story is run
            try {

            switch (scriptNum) {
                case 0: {
                        Messenger.SendPlayerData(client);
                    }
                    break;
                case 1: {
                        if (client.Player.Map.MapType != Enums.MapType.Instanced) return;
                        InstancedMap map = client.Player.Map as InstancedMap;
                        MapNpcPreset npc = new MapNpcPreset();
                        string[] loc = param1.Split(':');

                        string[] lvl = param3.Split(':');
                        npc.SpawnX = loc[0].ToInt();
                        npc.SpawnY = loc[1].ToInt();
                        npc.NpcNum = param2.ToInt();
                        npc.MinLevel = lvl[0].ToInt(); // TODO: Adjust npc level
                        npc.MaxLevel = lvl[1].ToInt(); // TODO: Adjust npc level
                        //Messenger.AdminMsg(npc.SpawnX+"/"+npc.SpawnY+"/"+npc.NpcNum+"/"+npc.MinLevel+"/"+npc.MaxLevel, Text.Pink);
                        map.SpawnNpc(npc);

                    }
                    break;
                case 2: {
                        if (client.Player.Map.MapType != Enums.MapType.Instanced) return;
                        InstancedMap map = client.Player.Map as InstancedMap;
                        string[] loc = param1.Split(':');
                        map.SetTile(loc[0].ToInt(), loc[1].ToInt(), 3, 4, 3);
                        map.SetAttribute(loc[0].ToInt(), loc[1].ToInt(), Enums.TileType.Scripted, 46, 0, 0, param2, "-1", "");
                        Messenger.SendTile(loc[0].ToInt(), loc[1].ToInt(), map);
                    }
                    break;
                case 3: {
                        if (client.Player.Map.MapType != Enums.MapType.Instanced) return;
                        InstancedMap map = client.Player.Map as InstancedMap;
                        string[] loc = param1.Split(':');
                        string[] dest = param2.Split(':');
                        map.SetTile(loc[0].ToInt(), loc[1].ToInt(), 3, 4, 3);
                        map.SetAttribute(loc[0].ToInt(), loc[1].ToInt(), Enums.TileType.Warp, dest[0].ToInt(), dest[1].ToInt(), dest[2].ToInt(), "", "", "");
                        Messenger.SendTile(loc[0].ToInt(), loc[1].ToInt(), map);
                    }
                    break;
                case 4: {
                        IMap map = client.Player.Map;
                        map.Npc[1].SpawnX = 9;
                        map.Npc[1].SpawnY = 7;
                        map.Npc[2].SpawnX = 6;
                        map.Npc[2].SpawnY = 11;
                        map.Npc[3].SpawnX = 13;
                        map.Npc[3].SpawnY = 11;
                        map.Npc[1].NpcNum = 306;
                        map.Npc[2].NpcNum = 259;
                        map.Npc[3].NpcNum = 259;
                        //map.SetNpc(0, 500);
                        //map.SetNpc(1, 500);
                        //map.SetNpc(2, 500);
                        for (int i = 1; i <= 3; i++) {
                            //map.SpawnNpc(i);
                        }
                    }
                    break;
                case 5: {
                        //sound
                        Messenger.PlaySoundToMap(client.Player.Map.MapID, param1);
                    }
                    break;
                case 6: {
                        IMap map = client.Player.Map;
                        map.Npc[1].SpawnX = 9;
                        map.Npc[1].SpawnY = 3;
                        map.Npc[1].NpcNum = 337;
                        //map.SpawnNpc(1);
                    }
                    break;
                case 7: {// Luxio Tribe Battle
                        // 167 - Luxio
                        // 177 - Luxray
                        // 5 luxio, 1 luxray
                        IMap map = client.Player.Map;
                        map.Npc[1].SpawnX = 10;
                        map.Npc[1].SpawnY = 5;
                        map.Npc[2].SpawnX = 7;
                        map.Npc[2].SpawnY = 6;
                        map.Npc[3].SpawnX = 12;
                        map.Npc[3].SpawnY = 6;
                        map.Npc[4].SpawnX = 7;
                        map.Npc[4].SpawnY = 8;
                        map.Npc[5].SpawnX = 12;
                        map.Npc[5].SpawnY = 8;
                        map.Npc[6].SpawnX = 12;
                        map.Npc[6].SpawnY = 9;
                        map.Npc[7].SpawnX = 10;
                        map.Npc[7].SpawnY = 7;
                        map.Npc[1].NpcNum = 177;
                        for (int i = 2; i <= 7; i++) {
                            map.Npc[i].NpcNum = 167;
                        }
                        for (int i = 1; i <= 7; i++) {
                            //map.SpawnNpc(i);
                        }
                    }
                    break;
                case 8: {
                        client.Player.GiveItem(159, 1);
                    }
                    break;
                case 9: {
                        client.Player.SetStoryState(157, false);
                    }
                    break;
                case 10: {//Start Registeel Battle: First wave of bronzongs
                        BossBattles.StartBossWave(client, "Registeel", 1);
                    }
                    break;
                case 11: {//Registeel Battle: second wave of bronzongs
                        BossBattles.StartBossWave(client, "Registeel", 2);
                    }
                    break;
                case 12: {//Registeel Battle: Registeel itself
                        BossBattles.StartBossWave(client, "Registeel", 3);
                    }
                    break;
                case 13: {//leaving Forlorn Tower by fee
                        int amount = client.Player.HasItem(1);
                        if (amount > 0) {
                            client.Player.TakeItem(1, (amount / 2));
                        }
                        Messenger.PlayerWarp(client, 684, 13, 20);
                    }
                    break;
                case 14: {
                        if (exPlayer.Get(client).StoryEnabled) {
                            int currentSection = client.Player.StoryHelper.ReadSetting("[MainStory]-CurrentSection").ToInt();
                            client.Player.StoryHelper.SaveSetting("[MainStory]-CurrentSection", (currentSection + 1).ToString());
                        }
                    }
                    break;
                case 15: {//murkrows attack (wave 1)
                        IMap map = client.Player.Map;

                        map.SetAttribute(7, 10, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(13, 10, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(7, 14, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(13, 14, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(4, 18, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(16, 18, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(4, 8, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(16, 8, Enums.TileType.Scripted, 3, 0, 0, "", "", "");

                        map.SetNpcSpawnPoint(1, 3, 10);
                        map.SetNpcSpawnPoint(2, 4, 11);
                        map.SetNpcSpawnPoint(3, 6, 10);
                        map.SetNpcSpawnPoint(4, 7, 11);
                        map.SetNpcSpawnPoint(5, 8, 10);
                        map.SetNpcSpawnPoint(6, 9, 11);
                        map.SetNpcSpawnPoint(7, 10, 10);
                        map.SetNpcSpawnPoint(8, 11, 11);
                        map.SetNpcSpawnPoint(9, 12, 10);
                        map.SetNpcSpawnPoint(10, 13, 11);
                        map.SetNpcSpawnPoint(11, 14, 10);
                        map.SetNpcSpawnPoint(12, 16, 11);
                        map.SetNpcSpawnPoint(13, 17, 10);

                        for (int i = 1; i <= 13; i++) {
                            map.Npc[i].NpcNum = 224;
                        }

                        //map.SpawnNpc(1);
                        //map.SpawnNpc(2);
                        //map.SpawnNpc(3);
                        //map.SpawnNpc(4);
                        //map.SpawnNpc(5);
                        //map.SpawnNpc(6);
                        //map.SpawnNpc(7);
                        //map.SpawnNpc(8);
                        //map.SpawnNpc(9);
                        //map.SpawnNpc(10);
                        //map.SpawnNpc(11);
                        //map.SpawnNpc(12);
                        //map.SpawnNpc(13);

                    }
                    break;
                case 16: {//murkrows attack (ambush)
                        IMap map = client.Player.Map;

                        map.SetAttribute(7, 10, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(13, 10, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(7, 14, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(13, 14, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(4, 18, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(16, 18, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(4, 8, Enums.TileType.Scripted, 3, 0, 0, "", "", "");
                        map.SetAttribute(16, 8, Enums.TileType.Scripted, 3, 0, 0, "", "", "");

                        map.SetNpcSpawnPoint(1, 9, 7);
                        map.SetNpcSpawnPoint(2, 10, 7);
                        map.SetNpcSpawnPoint(3, 11, 7);
                        map.SetNpcSpawnPoint(4, 9, 8);
                        map.SetNpcSpawnPoint(5, 11, 8);
                        map.SetNpcSpawnPoint(6, 9, 9);
                        map.SetNpcSpawnPoint(7, 10, 9);
                        map.SetNpcSpawnPoint(8, 11, 9);
                        map.SetNpcSpawnPoint(9, 8, 8);
                        map.SetNpcSpawnPoint(10, 8, 9);
                        map.SetNpcSpawnPoint(11, 12, 8);
                        map.SetNpcSpawnPoint(12, 12, 9);
                        map.SetNpcSpawnPoint(13, 10, 10);

                        for (int i = 1; i <= 13; i++) {
                            map.Npc[i].NpcNum = 220;
                        }

                        //map.SpawnNpc(1);
                        //map.SpawnNpc(2);
                        //map.SpawnNpc(3);
                        //map.SpawnNpc(4);
                        //map.SpawnNpc(5);
                        //map.SpawnNpc(6);
                        //map.SpawnNpc(7);
                        //map.SpawnNpc(8);
                        //map.SpawnNpc(9);
                        //map.SpawnNpc(10);
                        //map.SpawnNpc(11);
                        //map.SpawnNpc(12);
                        //map.SpawnNpc(13);

                        if (client.Player.GetActiveRecruit().HeldItem.Num != 142) {
                            Messenger.BattleMsg(client, "There was a trap underneath!", Text.BrightRed);
                            Messenger.BattleMsg(client, "The trap exploded!", Text.BrightRed);
                            //Messenger.SpellAnim(497, client.Player.MapID, client.Player.X, client.Player.Y);
                            //DamagePlayer(client, Convert.ToInt32((client.Player.GetActiveRecruit().HP + 0.5) / 2), Enums.KillType.Npc);

                            Messenger.PlaySoundToMap(client.Player.MapID, "magic64.wav");
                            Messenger.BattleMsg(client, "The trap drained all your PP!", Text.BrightRed);
                            //Messenger.SpellAnim(493, client.Player.MapID, client.Player.X, client.Player.Y);
                            for (int i = 0; i < client.Player.GetActiveRecruit().Moves.Length; i++) {
                                client.Player.GetActiveRecruit().Moves[i].CurrentPP = 0;
                                //Messenger.SendMovePPUpdate(client, i);
                            }
                            Messenger.PlaySound(client, "PP Zero.wav");
                            Messenger.BattleMsg(client, "Poison spikes shot out!", Text.BrightRed);
                            //Messenger.SpellAnim(496, client.Player.MapID, client.Player.X, client.Player.Y);
                            Messenger.PlaySoundToMap(client.Player.MapID, "magic23.wav");
                            SetStatusAilment(client.Player.GetActiveRecruit(), client.Player.Map, Enums.StatusAilment.Poison, 1, null);
                            Messenger.BattleMsg(client, "Mud splashed up from the ground!", Text.BrightRed);
                            //Messenger.SpellAnim(495, client.Player.MapID, client.Player.X, client.Player.Y);
                            Messenger.PlaySoundToMap(client.Player.MapID, "magic65.wav");
                            switch (Server.Math.Rand(0, 4)) {
                                case 0: {
                                        client.Player.GetActiveRecruit().AttackBuff = 0;
                                    }
                                    break;
                                case 1: {
                                        client.Player.GetActiveRecruit().DefenseBuff = 0;
                                    }
                                    break;
                                case 2: {
                                        client.Player.GetActiveRecruit().SpAtkBuff = 0;
                                    }
                                    break;
                                case 3: {
                                        client.Player.GetActiveRecruit().SpeedBuff = 0;
                                    }
                                    break;
                            }
                            //Messenger.SpellAnim(494, client.Player.MapID, client.Player.X, client.Player.Y);
                            //Grimy(client);
                            Messenger.PlaySoundToMap(client.Player.MapID, "Magic65.wav");
                            //PlayerInvDrop(client);
                            Messenger.MapMsg(client.Player.MapID, client.Player.Name + " tripped!", Text.BrightRed);
                            Messenger.PlaySoundToMap(client.Player.MapID, "magic55.wav");
                            Messenger.BattleMsg(client, "You were pelted with chestnuts!", Text.BrightRed);
                            //DamagePlayer(client, 50, Enums.KillType.Npc);

                            Messenger.PlaySoundToMap(client.Player.MapID, "pain.wav");
                            Messenger.BattleMsg(client, "The trap broke down...", Text.Black);
                        }
                    }
                    break;
                case 17: {//murkrows and honchkrow attack
                        IMap map = client.Player.Map;
                        map.SetNpcSpawnPoint(1, 6, 9);
                        map.SetNpcSpawnPoint(2, 14, 9);
                        map.SetNpcSpawnPoint(3, 6, 11);
                        map.SetNpcSpawnPoint(4, 14, 11);
                        map.SetNpcSpawnPoint(5, 5, 13);
                        map.SetNpcSpawnPoint(6, 15, 13);
                        map.SetNpcSpawnPoint(7, 6, 15);
                        map.SetNpcSpawnPoint(8, 14, 15);
                        map.SetNpcSpawnPoint(9, 8, 14);
                        map.SetNpcSpawnPoint(10, 12, 14);
                        map.SetNpcSpawnPoint(11, 6, 18);
                        map.SetNpcSpawnPoint(12, 14, 18);
                        map.SetNpcSpawnPoint(13, 10, 16);
                        map.SetNpcSpawnPoint(14, 10, 7);

                        map.SetNpc(1, 220);
                        map.SetNpc(2, 220);
                        map.SetNpc(3, 220);
                        map.SetNpc(4, 220);
                        map.SetNpc(5, 220);
                        map.SetNpc(6, 220);
                        map.SetNpc(7, 220);
                        map.SetNpc(8, 220);
                        map.SetNpc(9, 220);
                        map.SetNpc(10, 220);
                        map.SetNpc(11, 220);
                        map.SetNpc(12, 220);
                        map.SetNpc(13, 220);
                        map.SetNpc(14, 221);

                        //map.SpawnNpc(1);
                        //map.SpawnNpc(2);
                        //map.SpawnNpc(3);
                        //map.SpawnNpc(4);
                        //map.SpawnNpc(5);
                        //map.SpawnNpc(6);
                        //map.SpawnNpc(7);
                        //map.SpawnNpc(8);
                        //map.SpawnNpc(9);
                        //map.SpawnNpc(10);
                        //map.SpawnNpc(11);
                        //map.SpawnNpc(12);
                        //map.SpawnNpc(13);
                        //map.SpawnNpc(14);

                    }
                    break;
                case 18: {//honchkrow defeated, warp opens.
                        IMap map = client.Player.Map;
                        map.SetTile(10, 6, 96, 4, 3);
                        map.SetTile(10, 5, 112576, 9, 3);
                        map.SetTile(10, 4, 112128, 9, 3);
                        // Left old code in case I did the math wrong...
                        //map.SetTile(10, 5, 128, 8032, 9, 3);
                        //map.SetTile(10, 4, 128, 8000, 9, 3);
                        map.SetAttribute(10, 6, Enums.TileType.Scripted, 46, 0, 0, "16", "683", "9:16");
                        Messenger.SendTile(10, 4, map);
                        Messenger.SendTile(10, 5, map);
                        Messenger.SendTile(10, 6, map);
                    }
                    break;
                case 19: {//daniel's fireplace question
                        if (client.Player.GetActiveRecruit().HasMove(452)) {
                            Messenger.AskQuestion(client, "Fireplace", "Will you use Rock Smash on the fireplace?", -1);
                        }
                    }
                    break;
                case 20: {//go into abandoned mansion
                        Messenger.AskQuestion(client, "AbandonedMansion2", "Only the team leader may enter this dungeon, is that OK?", -1);

                    }
                    break;
                case 21: {//vs. gengar
                        IMap map = client.Player.Map;
                        if (map.MapType != Enums.MapType.Instanced) {
                            client.CloseConnection();
                            return;
                        }
                        map.SetNpcSpawnPoint(1, 11, 6);
                        map.SetNpcSpawnPoint(2, 12, 8);
                        map.SetNpcSpawnPoint(3, 14, 8);
                        map.SetNpc(1, 804);
                        map.SetNpc(2, 809);
                        map.SetNpc(3, 812);
                        //map.SpawnNpc(1);
                        //map.SpawnNpc(2);
                        //map.SpawnNpc(3);

                    }
                    break;
                case 22: {//vs. Rotom
                        IMap map = client.Player.Map;

                        if (map.Name == "West Wing End") {
                            InstancedMap mapa = new InstancedMap(MapManager.GenerateMapID("i"));
                            MapCloner.CloneMapTiles(MapManager.RetrieveMap(825), mapa);
                            Messenger.PlayerWarp(client, mapa, 9, 10);
                            mapa.SetNpcSpawnPoint(1, 9, 3);
                            mapa.SetNpc(1, 806);
                            //mapa.SpawnNpc(1);

                        } else if (map.Name == "East Wing End") {

                            InstancedMap mapa = new InstancedMap(MapManager.GenerateMapID("i"));
                            MapCloner.CloneMapTiles(MapManager.RetrieveMap(826), mapa);
                            Messenger.PlayerWarp(client, mapa, 10, 10);
                            mapa.SetNpcSpawnPoint(1, 10, 3);
                            mapa.SetNpc(1, 807);
                            //mapa.SpawnNpc(1);

                        }
                    }
                    break;
                case 23: {//go into Hallowed Well
                        Messenger.AskQuestion(client, "HallowedWell2", "Only the team leader may enter this dungeon, and no Pokémon may be recruited.  Is that OK?", -1);
                    }
                    break;
                case 24: {//spiritomb battle
                        client.Player.TakeItem(251, 1);
                        IMap map = client.Player.Map;
                        map.SetNpcSpawnPoint(1, 9, 8);
                        map.SetNpc(1, 805);
                        //map.SpawnNpc(1);
                    }
                    break;
                case 25: {//spiritomb joins
                        // Fixed, uncomment when needed
                        // TODO: Spritomb joins
                        //client.Player.AddToRecruitmentBank(37, 209, 40, (ulong)1, 1, 0, 0, 40, 55, 10, 40, 1, 805, "Spiritomb");
                        Messenger.PlaySoundToMap(client.Player.MapID, "JoinGame.wav");
                    }
                    break;
                case 26: {//learn wish
                        client.Player.GetActiveRecruit().LearnNewMove(268);
                    }
                    break;
                case 27: {//vs. Articuno*
                        IMap map = client.Player.Map;
                        map.SetNpc(1, 440);
                        map.SetNpcSpawnPoint(1, 12, 11);
                        //map.SpawnNpc(1);
                    }
                    break;
                case 28: {//Give Natural Gift
                        Messenger.PlayerMsg(client, "You were given a Natural Gift!", Text.Yellow);
                        client.Player.GiveItem(232, 1);
                    }
                    break;
                case 29: {//Give Holly Present
                        Messenger.PlayerMsg(client, "You were given a Holly Present!", Text.Yellow);
                        client.Player.GiveItem(233, 1);
                    }
                    break;
                case 30: {//Give Mystery Gift
                        Messenger.PlayerMsg(client, "You were given a Mystery Gift!", Text.Yellow);
                        client.Player.GiveItem(234, 1);
                    }
                    break;
                case 31: {//Give PMDCP Present
                        Messenger.PlayerMsg(client, "You were given a PMDCP Present!", Text.Yellow);
                        client.Player.GiveItem(231, 1);
                    }
                    break;
                case 32: {//take white herb
                        Messenger.PlayerMsg(client, "You gave away some Candy Canes.", Text.Yellow);
                        client.Player.TakeItem(212, 12);
                    }
                    break;
                case 33: {//take soft string
                        Messenger.PlayerMsg(client, "You gave away some Soft String.", Text.Yellow);
                        client.Player.TakeItem(208, 20);
                    }
                    break;
                case 34: {//take soft snow
                        Messenger.PlayerMsg(client, "You gave away some Soft Snow.", Text.Yellow);
                        client.Player.TakeItem(209, 50);
                    }
                    break;
                case 35: {//Take ornaments
                        client.Player.GiveItem(174, 1);
                        Messenger.PlayerMsg(client, "You obtained a Shell Bell!", Text.Yellow);
                    }
                    break;
                case 36: {//vs. Heatran
                        IMap map = client.Player.Map;
                        map.SetNpc(1, 404);
                        map.SetNpcSpawnPoint(1, 12, 11);
                        //map.SpawnNpc(1);
                    }
                    break;
                case 37: {//vs. Xatu
                        BossBattles.RunPostIntroStoryBossBattle(client, "Pitch-Black Pit");
                    }
                    break;
                case 38: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "TinyGrotto");
                    }
                    break;
                case 39: {

                    BossBattles.RunBossBattleCleanup(client, client.Player.Map.Name);
                    }
                    break;
                case 40: {
                        client.Player.GiveItem(779, 1, "");
                    }
                    break;
                case 41: { // Post intro boss battle for Seaside Cavern
                        BossBattles.RunPostIntroStoryBossBattle(client, "SeasideCavern");
                    }
                    break;
                case 42: { // enter dungeon (random)

                        DungeonRules.StartRDungeon(client, param1, param2, param3);
                    }
                    break;
                case 43: {
                        BossBattles.StartBossWave(client, "ElectrostasisTowerA1", 1);
                    }
                    break;
                case 44: {
                        BossBattles.RunBossBattleCleanup(client, "ElectrostasisTowerA1");
                    }
                    break;
                case 45: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "ElectrostasisTowerA2");
                    }
                    break;
                case 46: {
                        //battle fossil & battle egg
                        int npcNum = -1;
                        switch (param1.ToInt()) {
                            case 138: //omanyte
                                npcNum = 272;
                            break;
                            case 140: //kabuto
                                npcNum = 250;
                            break;
                            case 142: //aerodactyl
                                npcNum = 132;
                            break;
                            case 345: //lileep
                                npcNum = 956;
                            break;
                            case 347: //anorith
                                npcNum = 957;
                            break;
                            case 408: //cranidos
                                npcNum = 959;
                            break;
                            case 410: //shieldon
                                npcNum = 958;
                            break;
                            case 566: //archen
                                npcNum = 973;
                            break;
                            break;
                            //case 566: //tirtouga
                            //	npcNum = 979;
                            //break;
                        }
                        if (npcNum > 0) {

                            MapNpcPreset npc = new MapNpcPreset();
                            npc.SpawnX = 9;
                            npc.SpawnY = 3;
                            npc.NpcNum = npcNum;
                            npc.MinLevel = param2.ToInt();
                            npc.MaxLevel = param2.ToInt();
                            client.Player.Map.SpawnNpc(npc);
                        }
                    }
                    break;
                case 47: {//egg hatch
                        int item = -1;
                        string[] recruitArgs = null;
                        for (int i = 1; i <= client.Player.MaxInv; i++) {
                            if (client.Player.Inventory[i].Num == 131) {
                                string[] eggArgs = client.Player.Inventory[i].Tag.Split(';');
                                if (eggArgs.Length <= 1 || !eggArgs[1].IsNumeric()) {
                                    client.Player.TakeItemSlot(i, 1, true);
                                } else {
                                    int step = eggArgs[1].ToInt();
                                    if (step <= 1) {
                                        item = i;
                                        recruitArgs = eggArgs[0].Split(',');
                                    }
                                    break;
                                }
                            }
                        }

                        if (item != -1) {

                            Recruit recruit = new Recruit(client);
                            //recruit.SpriteOverride = -1;
                            recruit.Level = 1;
                            recruit.Species = recruitArgs[0].ToInt();
                            recruit.Sex = Pokedex.GetPokemonForm(recruitArgs[0].ToInt()).GenerateLegalSex();
                            recruit.Name = Pokedex.GetPokemon(recruitArgs[0].ToInt()).Name;
                            recruit.NpcBase = 0;

                            recruit.GenerateMoveset();

                            //for egg moves, where applicable
                            List<int> eggMoves = GenerateEggMoveset(recruit.Species, recruit.Form, -1);

                            for (int i = 0; i < 4; i++) {
                                if (eggMoves.Count > 0) {
                                    int moveNum = eggMoves[Server.Math.Rand(0, eggMoves.Count)];
                                    recruit.Moves[i] = new RecruitMove();
                                    recruit.Moves[i].MoveNum = moveNum;
                                    recruit.Moves[i].MaxPP = Server.Moves.MoveManager.Moves[moveNum].MaxPP;
                                    recruit.Moves[i].CurrentPP = recruit.Moves[i].MaxPP;
                                    eggMoves.Remove(moveNum);
                                }
                            }

                            for (int i = 0; i < 4; i++) {
                                if (eggMoves.Contains(client.Player.GetActiveRecruit().Moves[i].MoveNum)) {
                                    int moveNum = client.Player.GetActiveRecruit().Moves[i].MoveNum;
                                    recruit.Moves[i] = new RecruitMove();
                                    recruit.Moves[i].MoveNum = moveNum;
                                    recruit.Moves[i].MaxPP = Server.Moves.MoveManager.Moves[moveNum].MaxPP;
                                    recruit.Moves[i].CurrentPP = recruit.Moves[i].MaxPP;
                                    eggMoves.Remove(client.Player.GetActiveRecruit().Moves[i].MoveNum);
                                }
                            }

                            int openSlot = client.Player.FindOpenTeamSlot();
                            int recruitIndex = -1;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) {
                                recruitIndex = client.Player.AddToRecruitmentBank(dbConnection, recruit);
                            }

                            if (recruitIndex != -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);
                            }

                            client.Player.TakeItemSlot(item, 1, true);

                            if (recruitArgs.Length > 1) client.Player.GiveItem(recruitArgs[1].ToInt(), 1);

                        }

                    }
                    break;
                case 48: {//teach egg move

                        int species = client.Player.GetActiveRecruit().Species;

                        if (Server.Evolutions.EvolutionManager.FindPreEvolution(species) > -1) {
                            species = Server.Evolutions.EvolutionManager.FindPreEvolution(species);
                        }
                        if (Server.Evolutions.EvolutionManager.FindPreEvolution(species) > -1) {
                            species = Server.Evolutions.EvolutionManager.FindPreEvolution(species);
                        }

                        List<int> eggMoves = GenerateEggMoveset(species, client.Player.GetActiveRecruit().Form, -1);

                        Messenger.PlayerMsg(client, "Poof!", Text.BrightGreen);
                        Messenger.PlaySound(client, "magic22.wav");
                        Messenger.SpellAnim(504, client.Player.MapID, client.Player.X, client.Player.Y);
                        if (eggMoves.Count > 0) {
                            client.Player.GetActiveRecruit().LearnNewMove(eggMoves[Server.Math.Rand(0, eggMoves.Count)]);
                            Messenger.SendPlayerMoves(client);
                        } else {
                            Messenger.PlayerMsg(client, "But nothing happened...", Text.Grey);
                        }

                    }
                    break;
                case 49: {//take egg

                        int item = -1;
                        string[] recruitArgs = null;
                        for (int i = 1; i <= client.Player.MaxInv; i++) {
                            if (client.Player.Inventory[i].Num == 131) {
                                string[] eggArgs = client.Player.Inventory[i].Tag.Split(';');
                                if (eggArgs.Length <= 1 || !eggArgs[1].IsNumeric()) {
                                    client.Player.TakeItemSlot(i, 1, true);
                                } else {
                                    int step = eggArgs[1].ToInt();
                                    if (step <= 1) {
                                        item = i;
                                        recruitArgs = eggArgs[0].Split(',');
                                    }
                                    break;
                                }
                            }
                        }

                        if (item != -1) {
                            client.Player.TakeItemSlot(item, 1, true);
                        }

                    }
                    break;
                case 50: {
                        BossBattles.StartBossWave(client, "ElectrostasisTowerA1", 2);
                    }
                    break;
                case 51: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "CliffsideRelic");
                    }
                    break;
                case 52: {//enter dungeon (normal map)
                        DungeonRules.StartDungeon(client, param1, param2, param3);
                    }
                    break;
                case 53: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "ThunderstormForest");
                    }
                    break;
                case 54: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "ThunderstormForestPart2");
                    }
                    break;
                case 55: { // Open tournament listing
                        Messenger.SendTournamentListingTo(client, null);
                    }
                    break;
                case 56: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "SourRootMini");
                    }
                    break;
                case 57: {//start boss battle
                        BossBattles.PrepareBossRoom(client, (InstancedMap)client.Player.Map);
                    }
                    break;
                case 58: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "SourRoot");
                    }
                    break;
                case 59: {//run post intro story boss battle

                        BossBattles.RunPostIntroStoryBossBattle(client, param1);
                    }
                    break;
                case 60: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "SaunaCavernMini");
                    }
                    break;
                case 61: {//enter arena
                        for (int i = 1; i <= client.Player.MaxInv; i++) {
                            if (client.Player.Inventory[i].Num > 0
                                && ItemManager.Items[client.Player.Inventory[i].Num].Type != Enums.ItemType.Held && ItemManager.Items[client.Player.Inventory[i].Num].Type != Enums.ItemType.HeldByParty
                                && ItemManager.Items[client.Player.Inventory[i].Num].Type != Enums.ItemType.HeldInBag) {
                                bool held = false;

                                for (int j = 0; j < Constants.MAX_ACTIVETEAM; j++) {
                                    if (client.Player.Team[j] != null
                                        && client.Player.Team[j].HeldItemSlot == i) {
                                        held = true;
                                    }

                                }

                                if (!held) {
                                    int slot = i;
                                    int amount = client.Player.Inventory[slot].Amount;
                                    int X = client.Player.Inventory[slot].Num;
                                    string tag = client.Player.Inventory[slot].Tag;
                                    int j = client.Player.FindBankSlot(X, amount);
                                    if (j == -1) {
                                        Messenger.PlayerMsg(client, "The storage can't store all items!", Text.BrightRed);
                                        return;
                                    }

                                    client.Player.TakeItemSlot(slot, amount, true);
                                    client.Player.GiveBankItem(X, amount, tag, j);

                                }
                            }
                        }
                        Messenger.PlayerMsg(client, "Items were sent to storage!", Text.Yellow);
                        EnterArena(client, client.Player.GetActiveRecruit(), client.Player.Map, param2, param3, null);
                    }
                    break;
                case 62: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "SaunaCavern");
                    }
                    break;
                case 64: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "CrystalRuins");
                    }
                    break;
                case 66: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "FrozenCitadel");
                    }
                    break;
                case 68: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "SouthernSea");
                    }
                    break;
                case 69: {
                        BossBattles.RunPostIntroStoryBossBattle(client, "LenilePit");
                    }
                    break;
                case 70: {
                        Messenger.PlayerWarp(client, 1035, 9, 7);
                    }
                    break;
                case 71: {//teach tutor move
                        int species = client.Player.GetActiveRecruit().Species;

                        List<int> eggMoves = GenerateTutorMoveset(species, client.Player.GetActiveRecruit().Form, param1.ToInt());

                        Messenger.PlayerMsg(client, "GOOOOONG!", Text.BrightGreen);
                        Messenger.PlaySound(client, "magic1011.wav");
                        Messenger.SpellAnim(498, client.Player.MapID, client.Player.X, client.Player.Y);
                        if (eggMoves.Count > 0) {
                            client.Player.GetActiveRecruit().LearnNewMove(eggMoves[Server.Math.Rand(0, eggMoves.Count)]);
                            Messenger.SendPlayerMoves(client);
                        } else {
                            Messenger.PlayerMsg(client, "But nothing happened...", Text.Grey);
                        }
                    }
                    break;

               }
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: StoryScript " + scriptNum + ": " + param1 + "-" + param2 + "-" + param3, Text.Black);

                Messenger.AdminMsg(ex.ToString(), Text.Black);
            }
        }
        public static void LoadRDungeon(int dungeonNum, MySql database)
        {
            RDungeon dungeon = new RDungeon(dungeonNum);

            string query = "SELECT name, " +
                "up, " +
                "allow_recruit, " +
                "allow_exp, " +
                "time_limit " +
                "FROM rdungeon WHERE rdungeon.num = \'" + dungeonNum + "\'";

            DataColumnCollection row = database.RetrieveRow(query);
            if (row != null)
            {
                dungeon.DungeonName = row["name"].ValueString;
                bool isUp = row["up"].ValueString.ToBool();
                if (isUp)
                {
                    dungeon.Direction = Enums.Direction.Up;
                }
                else
                {
                    dungeon.Direction = Enums.Direction.Down;
                }
                dungeon.Recruitment = row["allow_recruit"].ValueString.ToBool();
                dungeon.Exp = row["allow_exp"].ValueString.ToBool();
                dungeon.WindTimer = row["time_limit"].ValueString.ToInt();
            }

            query = "SELECT floor_num, " +
                "trap_min, " +
                "trap_max, " +
                "item_min, " +
                "item_max, " +
                "intricacy, " +
                "room_width_min, " +
                "room_width_max, " +
                "room_length_min, " +
                "room_length_max, " +
                "hall_turn_min, " +
                "hall_turn_max, " +
                "hall_var_min, " +
                "hall_var_max, " +
                "water_chance, " +
                "craters, " +
                "crater_min, " +
                "crater_max, " +
                "crater_fuzz, " +
                "npc_respawn, " +
                "npc_min, " +
                "npc_max, " +
                "stairs, " +
                "ground, " +
                "ground_alt1, " +
                "ground_alt2, " +
                "top_left, " +
                "top_center, " +
                "top_right, " +
                "center_left, " +
                "center_center, " +
                "center_right, " +
                "bottom_left, " +
                "bottom_center, " +
                "bottom_right, " +
                "top_left_in, " +
                "top_right_in, " +
                "bottom_left_in, " +
                "bottom_right_in, " +
                "col_top, " +
                "col_center, " +
                "col_bottom, " +
                "row_left, " +
                "row_center, " +
                "row_right, " +
                "isolated, " +
                "stairs_set, " +
                "ground_set, " +
                "ground_alt1_set, " +
                "ground_alt2_set, " +
                "top_left_set, " +
                "top_center_set, " +
                "top_right_set, " +
                "center_left_set, " +
                "center_center_set, " +
                "center_right_set, " +
                "bottom_left_set, " +
                "bottom_center_set, " +
                "bottom_right_set, " +
                "top_left_in_set, " +
                "top_right_in_set, " +
                "bottom_left_in_set, " +
                "bottom_right_in_set, " +
                "col_top_set, " +
                "col_center_set, " +
                "col_bottom_set, " +
                "row_left_set, " +
                "row_center_set, " +
                "row_right_set, " +
                "isolated_set, " +
                "top_left_alt, " +
                "top_center_alt, " +
                "top_right_alt, " +
                "center_left_alt, " +
                "center_center_alt1, " +
                "center_center_alt2, " +
                "center_right_alt, " +
                "bottom_left_alt, " +
                "bottom_center_alt, " +
                "bottom_right_alt, " +
                "top_left_in_alt, " +
                "top_right_in_alt, " +
                "bottom_left_in_alt, " +
                "bottom_right_in_alt, " +
                "col_top_alt, " +
                "col_center_alt, " +
                "col_bottom_alt, " +
                "row_left_alt, " +
                "row_center_alt, " +
                "row_right_alt, " +
                "isolated_alt, " +
                "top_left_alt_set, " +
                "top_center_alt_set, " +
                "top_right_alt_set, " +
                "center_left_alt_set, " +
                "center_center_alt1_set, " +
                "center_center_alt2_set, " +
                "center_right_alt_set, " +
                "bottom_left_alt_set, " +
                "bottom_center_alt_set, " +
                "bottom_right_alt_set, " +
                "top_left_in_alt_set, " +
                "top_right_in_alt_set, " +
                "bottom_left_in_alt_set, " +
                "bottom_right_in_alt_set, " +
                "col_top_alt_set, " +
                "col_center_alt_set, " +
                "col_bottom_alt_set, " +
                "row_left_alt_set, " +
                "row_center_alt_set, " +
                "row_right_alt_set, " +
                "isolated_alt_set, " +
                "water, " +
                "shore_top_left, " +
                "shore_top_right, " +
                "shore_bottom_left, " +
                "shore_bottom_right, " +
                "shore_diag_forth, " +
                "shore_diag_back, " +
                "shore_top, " +
                "shore_left, " +
                "shore_right, " +
                "shore_bottom, " +
                "shore_vert, " +
                "shore_horiz, " +
                "shore_top_left_in, " +
                "shore_top_right_in, " +
                "shore_bottom_left_in, " +
                "shore_bottom_right_in, " +
                "shore_top_in, " +
                "shore_left_in, " +
                "shore_right_in, " +
                "shore_bottom_in, " +
                "shore_isolated, " +
                "water_set, " +
                "shore_top_left_set, " +
                "shore_top_right_set, " +
                "shore_bottom_left_set, " +
                "shore_bottom_right_set, " +
                "shore_diag_forth_set, " +
                "shore_diag_back_set, " +
                "shore_top_set, " +
                "shore_left_set, " +
                "shore_right_set, " +
                "shore_bottom_set, " +
                "shore_vert_set, " +
                "shore_horiz_set, " +
                "shore_top_left_in_set, " +
                "shore_top_right_in_set, " +
                "shore_bottom_left_in_set, " +
                "shore_bottom_right_in_set, " +
                "shore_top_in_set, " +
                "shore_left_in_set, " +
                "shore_right_in_set, " +
                "shore_bottom_in_set, " +
                "shore_isolated_set, " +
                "water_anim, " +
                "shore_top_left_anim, " +
                "shore_top_right_anim, " +
                "shore_bottom_left_anim, " +
                "shore_bottom_right_anim, " +
                "shore_diag_forth_anim, " +
                "shore_diag_back_anim, " +
                "shore_top_anim, " +
                "shore_left_anim, " +
                "shore_right_anim, " +
                "shore_bottom_anim, " +
                "shore_vert_anim, " +
                "shore_horiz_anim, " +
                "shore_top_left_in_anim, " +
                "shore_top_right_in_anim, " +
                "shore_bottom_left_in_anim, " +
                "shore_bottom_right_in_anim, " +
                "shore_top_in_anim, " +
                "shore_left_in_anim, " +
                "shore_right_in_anim, " +
                "shore_bottom_in_anim, " +
                "shore_isolated_anim, " +
                "water_anim_set, " +
                "shore_top_left_anim_set, " +
                "shore_top_right_anim_set, " +
                "shore_bottom_left_anim_set, " +
                "shore_bottom_right_anim_set, " +
                "shore_diag_forth_anim_set, " +
                "shore_diag_back_anim_set, " +
                "shore_top_anim_set, " +
                "shore_left_anim_set, " +
                "shore_right_anim_set, " +
                "shore_bottom_anim_set, " +
                "shore_vert_anim_set, " +
                "shore_horiz_anim_set, " +
                "shore_top_left_in_anim_set, " +
                "shore_top_right_in_anim_set, " +
                "shore_bottom_left_in_anim_set, " +
                "shore_bottom_right_in_anim_set, " +
                "shore_top_in_anim_set, " +
                "shore_left_in_anim_set, " +
                "shore_right_in_anim_set, " +
                "shore_bottom_in_anim_set, " +
                "shore_isolated_anim_set, " +
                "ground_type, " +
                "ground_data1, " +
                "ground_data2, " +
                "ground_data3, " +
                "ground_string1, " +
                "ground_string2, " +
                "ground_string3, " +
                "hall_type, " +
                "hall_data1, " +
                "hall_data2, " +
                "hall_data3, " +
                "hall_string1, " +
                "hall_string2, " +
                "hall_string3, " +
                "water_type, " +
                "water_data1, " +
                "water_data2, " +
                "water_data3, " +
                "water_string1, " +
                "water_string2, " +
                "water_string3, " +
                "wall_type, " +
                "wall_data1, " +
                "wall_data2, " +
                "wall_data3, " +
                "wall_string1, " +
                "wall_string2, " +
                "wall_string3, " +
                "goal_type, " +
                "goal_map, " +
                "goal_x, " +
                "goal_y, " +
                "darkness, " +
                "music " +
                "FROM rdungeon_floor WHERE rdungeon_floor.num = \'" + dungeonNum + "\'";

            List<DataColumnCollection> columnCollections = database.RetrieveRows(query);
            if (columnCollections == null) columnCollections = new List<DataColumnCollection>();
            foreach (DataColumnCollection columnCollection in columnCollections)
            {
                RDungeonFloor floor = new RDungeonFloor();

                int floorNum = columnCollection["floor_num"].ValueString.ToInt();
                floor.Options.TrapMin = columnCollection["trap_min"].ValueString.ToInt();
                floor.Options.TrapMax = columnCollection["trap_max"].ValueString.ToInt();
                floor.Options.ItemMin = columnCollection["item_min"].ValueString.ToInt();
                floor.Options.ItemMax = columnCollection["item_max"].ValueString.ToInt();
                floor.Options.Intricacy = columnCollection["intricacy"].ValueString.ToInt();
                floor.Options.RoomWidthMin = columnCollection["room_width_min"].ValueString.ToInt();
                floor.Options.RoomWidthMax = columnCollection["room_width_max"].ValueString.ToInt();
                floor.Options.RoomLengthMin = columnCollection["room_length_min"].ValueString.ToInt();
                floor.Options.RoomLengthMax = columnCollection["room_length_max"].ValueString.ToInt();
                floor.Options.HallTurnMin = columnCollection["hall_turn_min"].ValueString.ToInt();
                floor.Options.HallTurnMax = columnCollection["hall_turn_max"].ValueString.ToInt();
                floor.Options.HallVarMin = columnCollection["hall_var_min"].ValueString.ToInt();
                floor.Options.HallVarMax = columnCollection["hall_var_max"].ValueString.ToInt();
                floor.Options.WaterFrequency = columnCollection["water_chance"].ValueString.ToInt();
                floor.Options.Craters = columnCollection["craters"].ValueString.ToInt();
                floor.Options.CraterMinLength = columnCollection["crater_min"].ValueString.ToInt();
                floor.Options.CraterMaxLength = columnCollection["crater_max"].ValueString.ToInt();
                floor.Options.CraterFuzzy = columnCollection["crater_fuzz"].ValueString.ToBool();

                floor.NpcSpawnTime = columnCollection["npc_respawn"].ValueString.ToInt();
                floor.NpcMin = columnCollection["npc_min"].ValueString.ToInt();
                floor.NpcMax = columnCollection["npc_max"].ValueString.ToInt();

                floor.StairsX = columnCollection["stairs"].ValueString.ToInt();
                floor.mGroundX = columnCollection["ground"].ValueString.ToInt();
                floor.mGroundAltX = columnCollection["ground_alt1"].ValueString.ToInt();
                floor.mGroundAlt2X = columnCollection["ground_alt2"].ValueString.ToInt();
                floor.mTopLeftX = columnCollection["top_left"].ValueString.ToInt();
                floor.mTopCenterX = columnCollection["top_center"].ValueString.ToInt();
                floor.mTopRightX = columnCollection["top_right"].ValueString.ToInt();
                floor.mCenterLeftX = columnCollection["center_left"].ValueString.ToInt();
                floor.mCenterCenterX = columnCollection["center_center"].ValueString.ToInt();
                floor.mCenterRightX = columnCollection["center_right"].ValueString.ToInt();
                floor.mBottomLeftX = columnCollection["bottom_left"].ValueString.ToInt();
                floor.mBottomCenterX = columnCollection["bottom_center"].ValueString.ToInt();
                floor.mBottomRightX = columnCollection["bottom_right"].ValueString.ToInt();
                floor.mInnerTopLeftX = columnCollection["top_left_in"].ValueString.ToInt();
                floor.mInnerTopRightX = columnCollection["top_right_in"].ValueString.ToInt();
                floor.mInnerBottomLeftX = columnCollection["bottom_left_in"].ValueString.ToInt();
                floor.mInnerBottomRightX = columnCollection["bottom_right_in"].ValueString.ToInt();
                floor.mColumnTopX = columnCollection["col_top"].ValueString.ToInt();
                floor.mColumnCenterX = columnCollection["col_center"].ValueString.ToInt();
                floor.mColumnBottomX = columnCollection["col_bottom"].ValueString.ToInt();
                floor.mRowLeftX = columnCollection["row_left"].ValueString.ToInt();
                floor.mRowCenterX = columnCollection["row_center"].ValueString.ToInt();
                floor.mRowRightX = columnCollection["row_right"].ValueString.ToInt();
                floor.mIsolatedWallX = columnCollection["isolated"].ValueString.ToInt();

                floor.StairsSheet = columnCollection["stairs_set"].ValueString.ToInt();
                floor.mGroundSheet = columnCollection["ground_set"].ValueString.ToInt();
                floor.mGroundAltSheet = columnCollection["ground_alt1_set"].ValueString.ToInt();
                floor.mGroundAlt2Sheet = columnCollection["ground_alt2_set"].ValueString.ToInt();
                floor.mTopLeftSheet = columnCollection["top_left_set"].ValueString.ToInt();
                floor.mTopCenterSheet = columnCollection["top_center_set"].ValueString.ToInt();
                floor.mTopRightSheet = columnCollection["top_right_set"].ValueString.ToInt();
                floor.mCenterLeftSheet = columnCollection["center_left_set"].ValueString.ToInt();
                floor.mCenterCenterSheet = columnCollection["center_center_set"].ValueString.ToInt();
                floor.mCenterRightSheet = columnCollection["center_right_set"].ValueString.ToInt();
                floor.mBottomLeftSheet = columnCollection["bottom_left_set"].ValueString.ToInt();
                floor.mBottomCenterSheet = columnCollection["bottom_center_set"].ValueString.ToInt();
                floor.mBottomRightSheet = columnCollection["bottom_right_set"].ValueString.ToInt();
                floor.mInnerTopLeftSheet = columnCollection["top_left_in_set"].ValueString.ToInt();
                floor.mInnerTopRightSheet = columnCollection["top_right_in_set"].ValueString.ToInt();
                floor.mInnerBottomLeftSheet = columnCollection["bottom_left_in_set"].ValueString.ToInt();
                floor.mInnerBottomRightSheet = columnCollection["bottom_right_in_set"].ValueString.ToInt();
                floor.mColumnTopSheet = columnCollection["col_top_set"].ValueString.ToInt();
                floor.mColumnCenterSheet = columnCollection["col_center_set"].ValueString.ToInt();
                floor.mColumnBottomSheet = columnCollection["col_bottom_set"].ValueString.ToInt();
                floor.mRowLeftSheet = columnCollection["row_left_set"].ValueString.ToInt();
                floor.mRowCenterSheet = columnCollection["row_center_set"].ValueString.ToInt();
                floor.mRowRightSheet = columnCollection["row_right_set"].ValueString.ToInt();
                floor.mIsolatedWallSheet = columnCollection["isolated_set"].ValueString.ToInt();

                floor.mTopLeftAltX = columnCollection["top_left_alt"].ValueString.ToInt();
                floor.mTopCenterAltX = columnCollection["top_center_alt"].ValueString.ToInt();
                floor.mTopRightAltX = columnCollection["top_right_alt"].ValueString.ToInt();
                floor.mCenterLeftAltX = columnCollection["center_left_alt"].ValueString.ToInt();
                floor.mCenterCenterAltX = columnCollection["center_center_alt1"].ValueString.ToInt();
                floor.mCenterCenterAlt2X = columnCollection["center_center_alt2"].ValueString.ToInt();
                floor.mCenterRightAltX = columnCollection["center_right_alt"].ValueString.ToInt();
                floor.mBottomLeftAltX = columnCollection["bottom_left_alt"].ValueString.ToInt();
                floor.mBottomCenterAltX = columnCollection["bottom_center_alt"].ValueString.ToInt();
                floor.mBottomRightAltX = columnCollection["bottom_right_alt"].ValueString.ToInt();
                floor.mInnerTopLeftAltX = columnCollection["top_left_in_alt"].ValueString.ToInt();
                floor.mInnerTopRightAltX = columnCollection["top_right_in_alt"].ValueString.ToInt();
                floor.mInnerBottomLeftAltX = columnCollection["bottom_left_in_alt"].ValueString.ToInt();
                floor.mInnerBottomRightAltX = columnCollection["bottom_right_in_alt"].ValueString.ToInt();
                floor.mColumnTopAltX = columnCollection["col_top_alt"].ValueString.ToInt();
                floor.mColumnCenterAltX = columnCollection["col_center_alt"].ValueString.ToInt();
                floor.mColumnBottomAltX = columnCollection["col_bottom_alt"].ValueString.ToInt();
                floor.mRowLeftAltX = columnCollection["row_left_alt"].ValueString.ToInt();
                floor.mRowCenterAltX = columnCollection["row_center_alt"].ValueString.ToInt();
                floor.mRowRightAltX = columnCollection["row_right_alt"].ValueString.ToInt();
                floor.mIsolatedWallAltX = columnCollection["isolated_alt"].ValueString.ToInt();

                floor.mTopLeftAltSheet = columnCollection["top_left_alt_set"].ValueString.ToInt();
                floor.mTopCenterAltSheet = columnCollection["top_center_alt_set"].ValueString.ToInt();
                floor.mTopRightAltSheet = columnCollection["top_right_alt_set"].ValueString.ToInt();
                floor.mCenterLeftAltSheet = columnCollection["center_left_alt_set"].ValueString.ToInt();
                floor.mCenterCenterAltSheet = columnCollection["center_center_alt1_set"].ValueString.ToInt();
                floor.mCenterCenterAlt2Sheet = columnCollection["center_center_alt2_set"].ValueString.ToInt();
                floor.mCenterRightAltSheet = columnCollection["center_right_alt_set"].ValueString.ToInt();
                floor.mBottomLeftAltSheet = columnCollection["bottom_left_alt_set"].ValueString.ToInt();
                floor.mBottomCenterAltSheet = columnCollection["bottom_center_alt_set"].ValueString.ToInt();
                floor.mBottomRightAltSheet = columnCollection["bottom_right_alt_set"].ValueString.ToInt();
                floor.mInnerTopLeftAltSheet = columnCollection["top_left_in_alt_set"].ValueString.ToInt();
                floor.mInnerTopRightAltSheet = columnCollection["top_right_in_alt_set"].ValueString.ToInt();
                floor.mInnerBottomLeftAltSheet = columnCollection["bottom_left_in_alt_set"].ValueString.ToInt();
                floor.mInnerBottomRightAltSheet = columnCollection["bottom_right_in_alt_set"].ValueString.ToInt();
                floor.mColumnTopAltSheet = columnCollection["col_top_alt_set"].ValueString.ToInt();
                floor.mColumnCenterAltSheet = columnCollection["col_center_alt_set"].ValueString.ToInt();
                floor.mColumnBottomAltSheet = columnCollection["col_bottom_alt_set"].ValueString.ToInt();
                floor.mRowLeftAltSheet = columnCollection["row_left_alt_set"].ValueString.ToInt();
                floor.mRowCenterAltSheet = columnCollection["row_center_alt_set"].ValueString.ToInt();
                floor.mRowRightAltSheet = columnCollection["row_right_alt_set"].ValueString.ToInt();
                floor.mIsolatedWallAltSheet = columnCollection["isolated_alt_set"].ValueString.ToInt();

                floor.mWaterX = columnCollection["water"].ValueString.ToInt();
                floor.mShoreTopLeftX = columnCollection["shore_top_left"].ValueString.ToInt();
                floor.mShoreTopRightX = columnCollection["shore_top_right"].ValueString.ToInt();
                floor.mShoreBottomLeftX = columnCollection["shore_bottom_left"].ValueString.ToInt();
                floor.mShoreBottomRightX = columnCollection["shore_bottom_right"].ValueString.ToInt();
                floor.mShoreDiagonalForwardX = columnCollection["shore_diag_forth"].ValueString.ToInt();
                floor.mShoreDiagonalBackX = columnCollection["shore_diag_back"].ValueString.ToInt();
                floor.mShoreTopX = columnCollection["shore_top"].ValueString.ToInt();
                floor.mShoreLeftX = columnCollection["shore_left"].ValueString.ToInt();
                floor.mShoreRightX = columnCollection["shore_right"].ValueString.ToInt();
                floor.mShoreBottomX = columnCollection["shore_bottom"].ValueString.ToInt();
                floor.mShoreVerticalX = columnCollection["shore_vert"].ValueString.ToInt();
                floor.mShoreHorizontalX = columnCollection["shore_horiz"].ValueString.ToInt();
                floor.mShoreInnerTopLeftX = columnCollection["shore_top_left_in"].ValueString.ToInt();
                floor.mShoreInnerTopRightX = columnCollection["shore_top_right_in"].ValueString.ToInt();
                floor.mShoreInnerBottomLeftX = columnCollection["shore_bottom_left_in"].ValueString.ToInt();
                floor.mShoreInnerBottomRightX = columnCollection["shore_bottom_right_in"].ValueString.ToInt();
                floor.mShoreInnerTopX = columnCollection["shore_top_in"].ValueString.ToInt();
                floor.mShoreInnerLeftX = columnCollection["shore_left_in"].ValueString.ToInt();
                floor.mShoreInnerRightX = columnCollection["shore_right_in"].ValueString.ToInt();
                floor.mShoreInnerBottomX = columnCollection["shore_bottom_in"].ValueString.ToInt();
                floor.mShoreSurroundedX = columnCollection["shore_isolated"].ValueString.ToInt();

                floor.mWaterSheet = columnCollection["water_set"].ValueString.ToInt();
                floor.mShoreTopLeftSheet = columnCollection["shore_top_left_set"].ValueString.ToInt();
                floor.mShoreTopRightSheet = columnCollection["shore_top_right_set"].ValueString.ToInt();
                floor.mShoreBottomLeftSheet = columnCollection["shore_bottom_left_set"].ValueString.ToInt();
                floor.mShoreBottomRightSheet = columnCollection["shore_bottom_right_set"].ValueString.ToInt();
                floor.mShoreDiagonalForwardSheet = columnCollection["shore_diag_forth_set"].ValueString.ToInt();
                floor.mShoreDiagonalBackSheet = columnCollection["shore_diag_back_set"].ValueString.ToInt();
                floor.mShoreTopSheet = columnCollection["shore_top_set"].ValueString.ToInt();
                floor.mShoreLeftSheet = columnCollection["shore_left_set"].ValueString.ToInt();
                floor.mShoreRightSheet = columnCollection["shore_right_set"].ValueString.ToInt();
                floor.mShoreBottomSheet = columnCollection["shore_bottom_set"].ValueString.ToInt();
                floor.mShoreVerticalSheet = columnCollection["shore_vert_set"].ValueString.ToInt();
                floor.mShoreHorizontalSheet = columnCollection["shore_horiz_set"].ValueString.ToInt();
                floor.mShoreInnerTopLeftSheet = columnCollection["shore_top_left_in_set"].ValueString.ToInt();
                floor.mShoreInnerTopRightSheet = columnCollection["shore_top_right_in_set"].ValueString.ToInt();
                floor.mShoreInnerBottomLeftSheet = columnCollection["shore_bottom_left_in_set"].ValueString.ToInt();
                floor.mShoreInnerBottomRightSheet = columnCollection["shore_bottom_right_in_set"].ValueString.ToInt();
                floor.mShoreInnerTopSheet = columnCollection["shore_top_in_set"].ValueString.ToInt();
                floor.mShoreInnerLeftSheet = columnCollection["shore_left_in_set"].ValueString.ToInt();
                floor.mShoreInnerRightSheet = columnCollection["shore_right_in_set"].ValueString.ToInt();
                floor.mShoreInnerBottomSheet = columnCollection["shore_bottom_in_set"].ValueString.ToInt();
                floor.mShoreSurroundedSheet = columnCollection["shore_isolated_set"].ValueString.ToInt();

                floor.mWaterAnimX = columnCollection["water_anim"].ValueString.ToInt();
                floor.mShoreTopLeftAnimX = columnCollection["shore_top_left_anim"].ValueString.ToInt();
                floor.mShoreTopRightAnimX = columnCollection["shore_top_right_anim"].ValueString.ToInt();
                floor.mShoreBottomLeftAnimX = columnCollection["shore_bottom_left_anim"].ValueString.ToInt();
                floor.mShoreBottomRightAnimX = columnCollection["shore_bottom_right_anim"].ValueString.ToInt();
                floor.mShoreDiagonalForwardAnimX = columnCollection["shore_diag_forth_anim"].ValueString.ToInt();
                floor.mShoreDiagonalBackAnimX = columnCollection["shore_diag_back_anim"].ValueString.ToInt();
                floor.mShoreTopAnimX = columnCollection["shore_top_anim"].ValueString.ToInt();
                floor.mShoreLeftAnimX = columnCollection["shore_left_anim"].ValueString.ToInt();
                floor.mShoreRightAnimX = columnCollection["shore_right_anim"].ValueString.ToInt();
                floor.mShoreBottomAnimX = columnCollection["shore_bottom_anim"].ValueString.ToInt();
                floor.mShoreVerticalAnimX = columnCollection["shore_vert_anim"].ValueString.ToInt();
                floor.mShoreHorizontalAnimX = columnCollection["shore_horiz_anim"].ValueString.ToInt();
                floor.mShoreInnerTopLeftAnimX = columnCollection["shore_top_left_in_anim"].ValueString.ToInt();
                floor.mShoreInnerTopRightAnimX = columnCollection["shore_top_right_in_anim"].ValueString.ToInt();
                floor.mShoreInnerBottomLeftAnimX = columnCollection["shore_bottom_left_in_anim"].ValueString.ToInt();
                floor.mShoreInnerBottomRightAnimX = columnCollection["shore_bottom_right_in_anim"].ValueString.ToInt();
                floor.mShoreInnerTopAnimX = columnCollection["shore_top_in_anim"].ValueString.ToInt();
                floor.mShoreInnerLeftAnimX = columnCollection["shore_left_in_anim"].ValueString.ToInt();
                floor.mShoreInnerRightAnimX = columnCollection["shore_right_in_anim"].ValueString.ToInt();
                floor.mShoreInnerBottomAnimX = columnCollection["shore_bottom_in_anim"].ValueString.ToInt();
                floor.mShoreSurroundedAnimX = columnCollection["shore_isolated_anim"].ValueString.ToInt();

                floor.mWaterAnimSheet = columnCollection["water_anim_set"].ValueString.ToInt();
                floor.mShoreTopLeftAnimSheet = columnCollection["shore_top_left_anim_set"].ValueString.ToInt();
                floor.mShoreTopRightAnimSheet = columnCollection["shore_top_right_anim_set"].ValueString.ToInt();
                floor.mShoreBottomLeftAnimSheet = columnCollection["shore_bottom_left_anim_set"].ValueString.ToInt();
                floor.mShoreBottomRightAnimSheet = columnCollection["shore_bottom_right_anim_set"].ValueString.ToInt();
                floor.mShoreDiagonalForwardAnimSheet = columnCollection["shore_diag_forth_anim_set"].ValueString.ToInt();
                floor.mShoreDiagonalBackAnimSheet = columnCollection["shore_diag_back_anim_set"].ValueString.ToInt();
                floor.mShoreTopAnimSheet = columnCollection["shore_top_anim_set"].ValueString.ToInt();
                floor.mShoreLeftAnimSheet = columnCollection["shore_left_anim_set"].ValueString.ToInt();
                floor.mShoreRightAnimSheet = columnCollection["shore_right_anim_set"].ValueString.ToInt();
                floor.mShoreBottomAnimSheet = columnCollection["shore_bottom_anim_set"].ValueString.ToInt();
                floor.mShoreVerticalAnimSheet = columnCollection["shore_vert_anim_set"].ValueString.ToInt();
                floor.mShoreHorizontalAnimSheet = columnCollection["shore_horiz_anim_set"].ValueString.ToInt();
                floor.mShoreInnerTopLeftAnimSheet = columnCollection["shore_top_left_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerTopRightAnimSheet = columnCollection["shore_top_right_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerBottomLeftAnimSheet = columnCollection["shore_bottom_left_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerBottomRightAnimSheet = columnCollection["shore_bottom_right_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerTopAnimSheet = columnCollection["shore_top_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerLeftAnimSheet = columnCollection["shore_left_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerRightAnimSheet = columnCollection["shore_right_in_anim_set"].ValueString.ToInt();
                floor.mShoreInnerBottomAnimSheet = columnCollection["shore_bottom_in_anim_set"].ValueString.ToInt();
                floor.mShoreSurroundedAnimSheet = columnCollection["shore_isolated_anim_set"].ValueString.ToInt();

                floor.GroundTile.Type = (Enums.TileType)columnCollection["ground_type"].ValueString.ToInt();
                floor.GroundTile.Data1 = columnCollection["ground_data1"].ValueString.ToInt();
                floor.GroundTile.Data2 = columnCollection["ground_data2"].ValueString.ToInt();
                floor.GroundTile.Data3 = columnCollection["ground_data3"].ValueString.ToInt();
                floor.GroundTile.String1 = columnCollection["ground_string1"].ValueString;
                floor.GroundTile.String2 = columnCollection["ground_string2"].ValueString;
                floor.GroundTile.String3 = columnCollection["ground_string3"].ValueString;

                floor.HallTile.Type = (Enums.TileType)columnCollection["hall_type"].ValueString.ToInt();
                floor.HallTile.Data1 = columnCollection["hall_data1"].ValueString.ToInt();
                floor.HallTile.Data2 = columnCollection["hall_data2"].ValueString.ToInt();
                floor.HallTile.Data3 = columnCollection["hall_data3"].ValueString.ToInt();
                floor.HallTile.String1 = columnCollection["hall_string1"].ValueString;
                floor.HallTile.String2 = columnCollection["hall_string2"].ValueString;
                floor.HallTile.String3 = columnCollection["hall_string3"].ValueString;

                floor.WaterTile.Type = (Enums.TileType)columnCollection["water_type"].ValueString.ToInt();
                floor.WaterTile.Data1 = columnCollection["water_data1"].ValueString.ToInt();
                floor.WaterTile.Data2 = columnCollection["water_data2"].ValueString.ToInt();
                floor.WaterTile.Data3 = columnCollection["water_data3"].ValueString.ToInt();
                floor.WaterTile.String1 = columnCollection["water_string1"].ValueString;
                floor.WaterTile.String2 = columnCollection["water_string2"].ValueString;
                floor.WaterTile.String3 = columnCollection["water_string3"].ValueString;

                floor.WallTile.Type = (Enums.TileType)columnCollection["wall_type"].ValueString.ToInt();
                floor.WallTile.Data1 = columnCollection["wall_data1"].ValueString.ToInt();
                floor.WallTile.Data2 = columnCollection["wall_data2"].ValueString.ToInt();
                floor.WallTile.Data3 = columnCollection["wall_data3"].ValueString.ToInt();
                floor.WallTile.String1 = columnCollection["wall_string1"].ValueString;
                floor.WallTile.String2 = columnCollection["wall_string2"].ValueString;
                floor.WallTile.String3 = columnCollection["wall_string3"].ValueString;

                floor.GoalType = (Enums.RFloorGoalType)columnCollection["goal_type"].ValueString.ToInt();
                floor.GoalMap = columnCollection["goal_map"].ValueString.ToInt();
                floor.GoalX = columnCollection["goal_x"].ValueString.ToInt();
                floor.GoalY = columnCollection["goal_y"].ValueString.ToInt();
                floor.Darkness = columnCollection["darkness"].ValueString.ToInt();
                floor.Music = columnCollection["music"].ValueString;

                string query2 = "SELECT item_index, " +
                    "item_num, " +
                    "min_val, " +
                    "max_val, " +
                    "chance, " +
                    "sticky_chance, " +
                    "tag, " +
                    "hidden, " +
                    "on_ground, " +
                    "on_water, " +
                    "on_wall " +
                    "FROM rdungeon_item WHERE rdungeon_item.num = \'" + dungeonNum + "\' AND rdungeon_item.floor_num = \'" + floorNum + "\'";

                List<DataColumnCollection> columnCollections2 = database.RetrieveRows(query2);
                if (columnCollections2 == null) columnCollections2 = new List<DataColumnCollection>();
                foreach (DataColumnCollection columnCollection2 in columnCollections2)
                {
                    RDungeonItem item = new RDungeonItem();
                    int itemInd = columnCollection2["item_index"].ValueString.ToInt();
                    item.ItemNum = columnCollection2["item_num"].ValueString.ToInt();
                    item.MinAmount = columnCollection2["min_val"].ValueString.ToInt();
                    item.MaxAmount = columnCollection2["max_val"].ValueString.ToInt();
                    item.AppearanceRate = columnCollection2["chance"].ValueString.ToInt();
                    item.StickyRate = columnCollection2["sticky_chance"].ValueString.ToInt();
                    item.Tag = columnCollection2["tag"].ValueString;
                    item.Hidden = columnCollection2["hidden"].ValueString.ToBool();
                    item.OnGround = columnCollection2["on_ground"].ValueString.ToBool();
                    item.OnWater = columnCollection2["on_water"].ValueString.ToBool();
                    item.OnWall = columnCollection2["on_wall"].ValueString.ToBool();

                    floor.Items.Add(item);
                }

                query2 = "SELECT npc_index, " +
                    "npc_num, " +
                    "min_level, " +
                    "max_level, " +
                    "chance, " +
                    "status, " +
                    "status_counter, " +
                    "status_chance " +
                    "FROM rdungeon_npc WHERE rdungeon_npc.num = \'" + dungeonNum + "\' AND rdungeon_npc.floor_num = \'" + floorNum + "\'";

                columnCollections2 = database.RetrieveRows(query2);
                if (columnCollections2 == null) columnCollections2 = new List<DataColumnCollection>();
                foreach (DataColumnCollection columnCollection2 in columnCollections2)
                {
                    MapNpcPreset npc = new MapNpcPreset();
                    int npcInd = columnCollection2["npc_index"].ValueString.ToInt();
                    npc.NpcNum = columnCollection2["npc_num"].ValueString.ToInt();
                    npc.MinLevel = columnCollection2["min_level"].ValueString.ToInt();
                    npc.MaxLevel = columnCollection2["max_level"].ValueString.ToInt();
                    npc.AppearanceRate = columnCollection2["chance"].ValueString.ToInt();
                    npc.StartStatus = (Enums.StatusAilment)columnCollection2["status"].ValueString.ToInt();
                    npc.StartStatusCounter = columnCollection2["status_counter"].ValueString.ToInt();
                    npc.StartStatusChance = columnCollection2["status_chance"].ValueString.ToInt();

                    floor.Npcs.Add(npc);
                }

                query2 = "SELECT tile_index, " +
                    "tile_type, " +
                    "data1, " +
                    "data2, " +
                    "data3, " +
                    "string1, " +
                    "string2, " +
                    "string3, " +
                    "ground, " +
                    "mask1, " +
                    "mask2, " +
                    "fringe1, " +
                    "fringe2, " +
                    "ground_set, " +
                    "mask1_set, " +
                    "mask2_set, " +
                    "fringe1_set, " +
                    "fringe2_set, " +
                    "ground_anim, " +
                    "mask1_anim, " +
                    "mask2_anim, " +
                    "fringe1_anim, " +
                    "fringe2_anim, " +
                    "ground_anim_set, " +
                    "mask1_anim_set, " +
                    "mask2_anim_set, " +
                    "fringe1_anim_set, " +
                    "fringe2_anim_set, " +
                    "rdungeon_value, " +
                    "chance " +
                    "FROM rdungeon_tile WHERE rdungeon_tile.num = \'" + dungeonNum + "\' AND rdungeon_tile.floor_num = \'" + floorNum + "\'";

                columnCollections2 = database.RetrieveRows(query2);
                if (columnCollections2 == null) columnCollections2 = new List<DataColumnCollection>();
                foreach (DataColumnCollection columnCollection2 in columnCollections2)
                {
                    RDungeonTrap tile = new RDungeonTrap();
                    int tileInd = columnCollection2["tile_index"].ValueString.ToInt();
                    tile.Type = (Enums.TileType)columnCollection2["tile_type"].ValueString.ToInt();
                    tile.Data1 = columnCollection2["data1"].ValueString.ToInt();
                    tile.Data2 = columnCollection2["data2"].ValueString.ToInt();
                    tile.Data3 = columnCollection2["data3"].ValueString.ToInt();
                    tile.String1 = columnCollection2["string1"].ValueString;
                    tile.String2 = columnCollection2["string2"].ValueString;
                    tile.String3 = columnCollection2["string3"].ValueString;
                    tile.Ground = columnCollection2["ground"].ValueString.ToInt();
                    tile.Mask = columnCollection2["mask1"].ValueString.ToInt();
                    tile.Mask2 = columnCollection2["mask2"].ValueString.ToInt();
                    tile.Fringe = columnCollection2["fringe1"].ValueString.ToInt();
                    tile.Fringe2 = columnCollection2["fringe2"].ValueString.ToInt();
                    tile.GroundSet = columnCollection2["ground_set"].ValueString.ToInt();
                    tile.MaskSet = columnCollection2["mask1_set"].ValueString.ToInt();
                    tile.Mask2Set = columnCollection2["mask2_set"].ValueString.ToInt();
                    tile.FringeSet = columnCollection2["fringe1_set"].ValueString.ToInt();
                    tile.Fringe2Set = columnCollection2["fringe2_set"].ValueString.ToInt();
                    tile.GroundAnim = columnCollection2["ground_anim"].ValueString.ToInt();
                    tile.Anim = columnCollection2["mask1_anim"].ValueString.ToInt();
                    tile.M2Anim = columnCollection2["mask2_anim"].ValueString.ToInt();
                    tile.FAnim = columnCollection2["fringe1_anim"].ValueString.ToInt();
                    tile.F2Anim = columnCollection2["fringe2_anim"].ValueString.ToInt();
                    tile.GroundAnimSet = columnCollection2["ground_anim_set"].ValueString.ToInt();
                    tile.AnimSet = columnCollection2["mask1_anim_set"].ValueString.ToInt();
                    tile.M2AnimSet = columnCollection2["mask2_anim_set"].ValueString.ToInt();
                    tile.FAnimSet = columnCollection2["fringe1_anim_set"].ValueString.ToInt();
                    tile.F2AnimSet = columnCollection2["fringe2_anim_set"].ValueString.ToInt();
                    tile.RDungeonMapValue = columnCollection2["rdungeon_value"].ValueString.ToInt();
                    tile.AppearanceRate = columnCollection2["chance"].ValueString.ToInt();

                    floor.SpecialTiles.Add(tile);
                }

                query2 = "SELECT weather_index, " +
                    "weather_type " +
                    "FROM rdungeon_weather WHERE rdungeon_weather.num = \'" + dungeonNum + "\' AND rdungeon_weather.floor_num = \'" + floorNum + "\'";

                columnCollections2 = database.RetrieveRows(query2);
                if (columnCollections2 == null) columnCollections2 = new List<DataColumnCollection>();
                foreach (DataColumnCollection columnCollection2 in columnCollections2)
                {

                    int weatherInd = columnCollection2["weather_index"].ValueString.ToInt();
                    Enums.Weather weather = (Enums.Weather)columnCollection2["weather_type"].ValueString.ToInt();

                    floor.Weather.Add(weather);
                }

                query2 = "SELECT chamber_index, " +
                    "chamber_num, " +
                    "string1, " +
                    "string2, " +
                    "string3 " +
                    "FROM rdungeon_chamber WHERE rdungeon_chamber.num = \'" + dungeonNum + "\' AND rdungeon_chamber.floor_num = \'" + floorNum + "\'";

                columnCollections2 = database.RetrieveRows(query2);
                if (columnCollections2 == null) columnCollections2 = new List<DataColumnCollection>();
                foreach (DataColumnCollection columnCollection2 in columnCollections2)
                {
                    RDungeonPresetChamber chamber = new RDungeonPresetChamber();
                    int chamberInd = columnCollection2["chamber_index"].ValueString.ToInt();
                    chamber.ChamberNum = columnCollection2["chamber_num"].ValueString.ToInt();
                    chamber.String1 = columnCollection2["string1"].ValueString;
                    chamber.String2 = columnCollection2["string2"].ValueString;
                    chamber.String3 = columnCollection2["string3"].ValueString;

                    floor.Options.Chambers.Add(chamber);
                }

                dungeon.Floors.Add(floor);
            }

            rdungeons.RDungeons.Add(dungeonNum, dungeon);
        }
Example #20
0
        public static void SpawnNpcInRange(IMap map, int x, int y, int range, PacketHitList hitlist)
        {
            if (map.Npc.Count == 0) return;

            if (map.SpawnMarker >= map.Npc.Count) map.SpawnMarker = map.Npc.Count - 1;

            for (int i = 0; i < 100; i++) {
                if (Server.Math.Rand(0, 100) < map.Npc[map.SpawnMarker].AppearanceRate && map.WillSpawnNow(map.Npc[map.SpawnMarker])) {
                    break;
                }
                map.SpawnMarker++;
                if (map.SpawnMarker >= map.Npc.Count) map.SpawnMarker = 0;
            }

            MapNpcPreset spawningNpc = new MapNpcPreset();
            spawningNpc.NpcNum = map.Npc[map.SpawnMarker].NpcNum;
            spawningNpc.MinLevel = map.Npc[map.SpawnMarker].MinLevel;
            spawningNpc.MaxLevel = map.Npc[map.SpawnMarker].MaxLevel;
            spawningNpc.StartStatus = Enums.StatusAilment.OK;

            for (int i = 1; i <= 500; i++) {
                int X = Server.Math.Rand(x - range, x + range + 1);
                int Y = Server.Math.Rand(y - range, y + range + 1);

                // Check if the tile is walkable
                if (X >= 0 && X <= map.MaxX && Y >= 0 && Y <= map.MaxY && map.Tile[X, Y].Type == Enums.TileType.Walkable) {
                    spawningNpc.SpawnX = X;
                    spawningNpc.SpawnY = Y;
                    break;
                }
            }

            if (spawningNpc.SpawnX > -1) map.SpawnNpc(spawningNpc);

            map.SpawnMarker++;
            if (map.SpawnMarker >= map.Npc.Count) map.SpawnMarker = 0;
        }
Example #21
0
 public MapNpc SpawnNpc(MapNpcPreset npc, bool checkSight)
 {
     return(SpawnNpc(npc, checkSight, true));
 }
Example #22
0
 public void Add(MapNpcPreset npcPreset)
 {
     npcPresets.Add(npcPreset);
     rawMap.Npc.Add(npcPreset.RawNpcPreset);
 }
Example #23
0
 public void Add(MapNpcPreset npcPreset)
 {
     npcPresets.Add(npcPreset);
     rawMap.Npc.Add(npcPreset.RawNpcPreset);
 }
Example #24
0
 public void Remove(MapNpcPreset npcPreset)
 {
     npcPresets.Remove(npcPreset);
     rawMap.Npc.Remove(npcPreset.RawNpcPreset);
 }
Example #25
0
        public static void RunPostIntroStoryBossBattle(Client client, string tag)
        {
            if (client.Player.Map.MapType != Enums.MapType.Instanced) return;
            InstancedMap map = client.Player.Map as InstancedMap;
            switch (map.MapBase) {
                case 1287: {//Tiny Grotto Depths

                        //if (map.Name == "Tiny Grotto Depths") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 3;
                        npc.NpcNum = 502;
                        npc.MinLevel = 6;
                        npc.MaxLevel = 6;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 114: { //sour root miniboss

                        //if (map.Name == "Sour Root Chamber") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 7;
                        npc.SpawnY = 5;
                        npc.NpcNum = 481;
                        npc.MinLevel = 14;
                        npc.MaxLevel = 14;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 115: { // sour root boss

                        //if (map.Name == "Sour Root Lair") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 3;
                        npc.NpcNum = 480;
                        npc.MinLevel = 17;
                        npc.MaxLevel = 17;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 255: { // seaside cavern

                        //if (map.Name == "Seaside Cavern Pit") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 5;
                        npc.NpcNum = 487;
                        npc.MaxLevel = 15;
                        npc.MinLevel = 15;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                //                case "ElectrostasisTowerA1": {
                //
                //                        if (map.Name == "Electrostasis Tower Chamber") {
                //                            int nosepassLevel = 1;
                //                            map.Npc[1].SpawnX = 8;
                //                            map.Npc[1].SpawnY = 24;
                //                            map.Npc[1].NpcNum = 587;
                //map.Npc[1].Level = nosepassLevel;

                //                            map.Npc[2].SpawnX = 13;
                //                            map.Npc[2].SpawnY = 22;
                //                            map.Npc[2].NpcNum = 587;
                //map.Npc[2].Level = nosepassLevel;

                //                            map.Npc[3].SpawnX = 7;
                //                            map.Npc[3].SpawnY = 20;
                //                            map.Npc[3].NpcNum = 587;
                //map.Npc[3].Level = nosepassLevel;

                //                            map.Npc[4].SpawnX = 15;
                //                            map.Npc[4].SpawnY = 19;
                //                            map.Npc[4].NpcNum = 587;
                //map.Npc[4].Level = nosepassLevel;

                //                            for (int i = 1; i <= 4; i++) {
                //map.SpawnNpc(map.Npc[i]);
                //                                map.ActiveNpc[i].Target = client;
                //                            }
                //                        }
                //                    }
                //                    break;
                case 1288: { // cliffside

                        //if (map.Name == "Cliffside Relic") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 3;
                        npc.NpcNum = 397;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 531: { // thunderstorm forest

                        if (tag == "ThunderstormForest") {
                            MapNpcPreset npc = new MapNpcPreset();
                            npc.SpawnX = 9;
                            npc.SpawnY = 6;
                            npc.NpcNum = 139;
                            npc.MinLevel = 20;
                            npc.MaxLevel = 20;
                            map.SpawnNpc(npc);
                        } else if (tag == "ThunderstormForestPart2") {
                            MapNpcPreset npc = new MapNpcPreset();
                            npc.SpawnX = 9;
                            npc.SpawnY = 6;
                            npc.NpcNum = 177;
                            npc.MinLevel = 30;
                            npc.MaxLevel = 30;
                            map.SpawnNpc(npc);
                        }
                    }
                    break;
                case 1248: { // sauna cave miniboss

                        //if (map.Name == "Sauna Cavern Chamber") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 6;
                        npc.NpcNum = 381;
                        npc.MinLevel = 40;
                        npc.MaxLevel = 40;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1263: { //sauna cave boss

                        //if (map.Name == "Sauna Cavern Source") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 11;
                        npc.SpawnY = 4;
                        npc.NpcNum = 389;
                        npc.MinLevel = 45;
                        npc.MaxLevel = 45;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1526: { //Deep Winden Forest Clearing

                        //if (map.Name == "Deep Winden Forest Clearing") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 8;
                        npc.MinLevel = 40;
                        npc.MaxLevel = 40;
                        npc.NpcNum = 1060;

                        map.SpawnNpc(npc);

                        MapNpcPreset minion = new MapNpcPreset();
                        npc.SpawnX = 8;
                        npc.SpawnY = 6;
                        npc.MinLevel = 35;
                        npc.MaxLevel = 35;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 10;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 11;
                        minion.SpawnY = 7;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 7;

                        map.SpawnNpc(minion);
                        //}
                    }
                    break;
                case 1744: { //Inferno Volcano Core

                        //if (map.Name == "Inferno Volcano Core") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 4;
                        npc.MinLevel = 80;
                        npc.MaxLevel = 80;
                        npc.NpcNum = 1220;

                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1745: { //Mysterious Jungle Undergrowth

                        //if (map.Name == "Mysterious Jungle Undergrowth") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.MinLevel = 85;
                        npc.MaxLevel = 85;
                        npc.NpcNum = 1219;

                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1392: { //crystal ruins

                        //if (map.Name == "Crystal Ruins Hall") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 5;
                        npc.NpcNum = 145;
                        npc.MinLevel = 45;
                        npc.MaxLevel = 45;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1394: { //crystal castle

                        //if (map.Name == "Crystal Castle Throne") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.NpcNum = 578;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;

                        map.SpawnNpc(npc);

                        MapNpcPreset minion = new MapNpcPreset();
                        minion.SpawnX = 6;
                        minion.SpawnY = 5;
                        minion.NpcNum = 812;
                        minion.MinLevel = 55;
                        minion.MaxLevel = 55;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 14;

                        map.SpawnNpc(minion);
                        //}
                    }
                    break;
                case 1362: { // southern sea

                        //if (map.Name == "Southern Sea Depths") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 7;
                        npc.SpawnY = 9;
                        npc.NpcNum = 640;
                        npc.MinLevel = 60;
                        npc.MaxLevel = 60;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 9;
                        npc.NpcNum = 641;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1994: { // Boss Rush Test Map

                        //if (map.Name == "Boss Rush Test Map") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 5;
                        npc.NpcNum = 1401;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.NpcNum = 1402;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 8;
                        npc.SpawnY = 4;
                        npc.NpcNum = 1403;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1990: { // Boss Rush 2

                        //if (map.Name == "Boss Rush 2") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 7;
                        npc.NpcNum = 1404;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 8;
                        npc.SpawnY = 8;
                        npc.NpcNum = 1405;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 8;
                        npc.NpcNum = 1406;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 539: { // Boss Rush 4

                        //if (map.Name == "Boss Rush 4") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 6;
                        npc.NpcNum = 1410;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 3;
                        npc.NpcNum = 1411;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 16;
                        npc.SpawnY = 5;
                        npc.NpcNum = 1412;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 4;
                        npc.SpawnY = 5;
                        npc.NpcNum = 1413;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 496: { // Boss Rush 5

                        //if (map.Name == "Boss Rush 4") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 10;
                        npc.NpcNum = 1414;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 10;
                        npc.NpcNum = 1415;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 7;
                        npc.SpawnY = 8;
                        npc.NpcNum = 1416;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 12;
                        npc.SpawnY = 8;
                        npc.NpcNum = 1417;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1292: { //barricade miniboss

                        map.SetAttribute(5, 9, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                        Messenger.SendTile(5, 9, map);

                        map.SetTile(5, 10, 5, 4, 1);
                        map.SetAttribute(5, 10, Enums.TileType.Blocked, 0, 0, 0, "", "", "");
                        Messenger.SendTile(5, 10, map);
                        bool test = false;
                        if (Ranks.IsAllowed(client, Enums.Rank.Mapper) && test) {
                            Messenger.PlayerMsg(client, "This is a test battle to investigate the freezes in the Mt. Barricade Mini boss battle", Text.Black);
                            MapNpcPreset npc = new MapNpcPreset();
                            //Hariyama
                            npc.NpcNum = 1;
                            npc.MinLevel = 50;
                            npc.MaxLevel = 50;
                            npc.SpawnX = 5;
                            npc.SpawnY = 6;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 10;
                            npc.SpawnY = 2;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 12;
                            npc.SpawnY = 11;
                            map.SpawnNpc(npc);
                            npc.MinLevel = 40;
                            npc.MaxLevel = 40;
                            npc.SpawnX = 10;
                            npc.SpawnY = 5;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 14;
                            npc.SpawnY = 7;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 8;
                            npc.SpawnY = 8;
                            map.SpawnNpc(npc);
                        } else {
                            MapNpcPreset npc = new MapNpcPreset();
                            //Hariyama
                            npc.NpcNum = 472;
                            npc.MinLevel = 50;
                            npc.MaxLevel = 50;
                            npc.SpawnX = 5;
                            npc.SpawnY = 6;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 10;
                            npc.SpawnY = 2;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 12;
                            npc.SpawnY = 11;
                            map.SpawnNpc(npc);

                            //Makuhita
                            npc.NpcNum = 183;
                            npc.MinLevel = 40;
                            npc.MaxLevel = 40;
                            npc.SpawnX = 10;
                            npc.SpawnY = 5;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 14;
                            npc.SpawnY = 7;
                            map.SpawnNpc(npc);
                            npc.SpawnX = 8;
                            npc.SpawnY = 8;
                            map.SpawnNpc(npc);
                        }
                    }
                    break;
                case 1294: { //barricade

                        //if (map.Name == "Mt. Barricade Peak") {

                        MapNpcPreset npc = new MapNpcPreset();

                        //Tyranitar
                        npc.NpcNum = 421;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;
                        npc.SpawnX = 17;
                        npc.SpawnY = 12;
                        map.SpawnNpc(npc);

                        //Skarmory
                        npc.NpcNum = 438;
                        npc.MinLevel = 50;
                        npc.MaxLevel = 50;
                        npc.SpawnX = 14;
                        npc.SpawnY = 13;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 19;
                        npc.SpawnY = 13;
                        map.SpawnNpc(npc);

                        //Gliscor
                        npc.NpcNum = 437;
                        npc.MinLevel = 50;
                        npc.MaxLevel = 50;
                        npc.SpawnX = 14;
                        npc.SpawnY = 16;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 19;
                        npc.SpawnY = 16;
                        map.SpawnNpc(npc);

                        //Pupitar
                        npc.NpcNum = 439;
                        npc.MinLevel = 45;
                        npc.MaxLevel = 45;
                        npc.SpawnX = 13;
                        npc.SpawnY = 17;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 20;
                        npc.SpawnY = 17;
                        map.SpawnNpc(npc);

                        //Larvitar
                        npc.NpcNum = 416;
                        npc.MinLevel = 40;
                        npc.MaxLevel = 40;
                        npc.SpawnX = 13;
                        npc.SpawnY = 18;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 16;
                        npc.SpawnY = 20;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 18;
                        npc.SpawnY = 20;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 20;
                        npc.SpawnY = 18;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1335: { //abandoned attic

                        //if (map.Name == "Abandoned Attic End") {
                        MapNpcPreset npc = new MapNpcPreset();

                        //litwicks
                        npc.NpcNum = 840;
                        npc.MinLevel = 13;
                        npc.MaxLevel = 13;
                        npc.SpawnX = 5;
                        npc.SpawnY = 7;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 7;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 9;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 11;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 13;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 5;

                        //lampents
                        npc.NpcNum = 841;
                        npc.MinLevel = 20;
                        npc.MaxLevel = 20;
                        npc.SpawnX = 7;
                        npc.SpawnY = 4;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 11;
                        map.SpawnNpc(npc);

                        //chandelure
                        npc.SpawnX = 9;
                        npc.SpawnY = 3;
                        npc.NpcNum = 845;
                        npc.MinLevel = 28;
                        npc.MaxLevel = 28;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 718: { //abandoned basement

                        //if (map.Name == "Abandoned Basement Pit") {
                        MapNpcPreset npc = new MapNpcPreset();

                        //rotom
                        npc.SpawnX = 9;
                        npc.SpawnY = 4;
                        npc.MinLevel = 30;
                        npc.MaxLevel = 30;
                        if (Server.Math.Rand(0, 2) == 0) {
                            npc.NpcNum = 806;
                        } else {
                            npc.NpcNum = 807;
                        }
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 534: {

                        //if (map.Name == "Lenile Cavern Pit") {
                        MapNpcPreset npc = new MapNpcPreset();

                        //lapras
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.MinLevel = 45;
                        npc.MaxLevel = 45;
                        npc.NpcNum = 886;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1563: { //pitch black pit

                        //if (map.Name == "Pitch-Black Pit") {
                        MapNpcPreset npc = new MapNpcPreset();

                        //Xatu
                        npc.SpawnX = 10;
                        npc.SpawnY = 3;
                        npc.MinLevel = 100;
                        npc.MaxLevel = 100;
                        npc.NpcNum = 579;
                        map.SpawnNpc(npc);

                        //Ninetales
                        npc.SpawnX = 4;
                        npc.SpawnY = 7;
                        npc.MinLevel = 83;
                        npc.MaxLevel = 83;
                        npc.NpcNum = 855;
                        map.SpawnNpc(npc);

                        //Drapion
                        npc.SpawnX = 15;
                        npc.SpawnY = 7;
                        npc.MinLevel = 90;
                        npc.MaxLevel = 90;
                        npc.NpcNum = 856;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1048: {//Exbel Woods Clearing

                        //if (map.Name == "Exbel Woods Clearing") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 6;
                        npc.NpcNum = 963;
                        npc.MinLevel = 5;
                        npc.MaxLevel = 5;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1851: {//Beach Bunker

                        //if (map.Name == "Tiny Grotto Depths") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 7;
                        npc.NpcNum = 150;
                        npc.MinLevel = 60;
                        npc.MaxLevel = 60;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 8;
                        npc.SpawnY = 7;
                        npc.NpcNum = 954;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.NpcNum = 954;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 7;
                        npc.SpawnY = 5;
                        npc.NpcNum = 955;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;
                        map.SpawnNpc(npc);
                        npc.SpawnX = 11;
                        npc.SpawnY = 9;
                        npc.NpcNum = 955;
                        npc.MinLevel = 55;
                        npc.MaxLevel = 55;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1722: { //articuno
                        MapNpcPreset npc = new MapNpcPreset();

                        //articuno
                        npc.SpawnX = 9;
                        npc.SpawnY = 5;
                        npc.MinLevel = 45;
                        npc.MaxLevel = 45;
                        npc.NpcNum = 1061;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1765: {//Inferno Volcano
                        //if (map.Name == "Inferno Volcano") {
                        MapNpcPreset npc = new MapNpcPreset();

                        //Torkoal
                        npc.SpawnX = 10;
                        npc.SpawnY = 2;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1221;
                        map.SpawnNpc(npc);

                        //Magmar
                        npc.SpawnX = 8;
                        npc.SpawnY = 4;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1222;
                        map.SpawnNpc(npc);

                        //Ninetales
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1223;
                        map.SpawnNpc(npc);

                        //Flareon
                        npc.SpawnX = 12;
                        npc.SpawnY = 4;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1224;
                        map.SpawnNpc(npc);

                        //Magcargo
                        npc.SpawnX = 12;
                        npc.SpawnY = 6;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1225;
                        map.SpawnNpc(npc);

                        //Camerupt
                        npc.SpawnX = 14;
                        npc.SpawnY = 6;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1226;
                        map.SpawnNpc(npc);

                        //Charizard
                        npc.SpawnX = 10;
                        npc.SpawnY = 8;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1227;
                        map.SpawnNpc(npc);

                        //Magmortar
                        npc.SpawnX = 12;
                        npc.SpawnY = 8;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1228;
                        map.SpawnNpc(npc);

                        //Rapidash
                        npc.SpawnX = 10;
                        npc.SpawnY = 10;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1229;
                        map.SpawnNpc(npc);

                        //Typhlosion
                        npc.SpawnX = 8;
                        npc.SpawnY = 8;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1230;
                        map.SpawnNpc(npc);

                        //Houndoom
                        npc.SpawnX = 8;
                        npc.SpawnY = 6;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1231;
                        map.SpawnNpc(npc);

                        //Infernape
                        npc.SpawnX = 6;
                        npc.SpawnY = 6;
                        npc.MinLevel = 70;
                        npc.MaxLevel = 70;
                        npc.NpcNum = 1232;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1701: { //Flareon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Flareon
                        npc.SpawnX = 9;
                        npc.SpawnY = 4;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1195;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1702: { //Leafeon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Leafeon
                        npc.SpawnX = 10;
                        npc.SpawnY = 5;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1196;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1703: { //Vaporeon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Vaporeon
                        npc.SpawnX = 9;
                        npc.SpawnY = 4;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1197;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1704: { //Glaceon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Glaceon
                        npc.SpawnX = 9;
                        npc.SpawnY = 5;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1198;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1705: { //Jolteon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Jolteon
                        npc.SpawnX = 10;
                        npc.SpawnY = 5;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1199;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1706: { //Umbreon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Umbreon
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1200;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1707: { //Espeon
                        MapNpcPreset npc = new MapNpcPreset();

                        //Espeon
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.MinLevel = 72;
                        npc.MaxLevel = 72;
                        npc.NpcNum = 1201;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1708: { //Ho-oh
                        MapNpcPreset npc = new MapNpcPreset();

                        //Ho-oh
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.MinLevel = 80;
                        npc.MaxLevel = 80;
                        npc.NpcNum = 1202;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1692: { //Hitmonchan
                        MapNpcPreset npc = new MapNpcPreset();

                        //Hitmonchan
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.MinLevel = 50;
                        npc.MaxLevel = 50;
                        npc.NpcNum = 1233;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1694: { //Hitmonlee
                        MapNpcPreset npc = new MapNpcPreset();

                        //Hitmonlee
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.MinLevel = 50;
                        npc.MaxLevel = 50;
                        npc.NpcNum = 1234;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 1715: { //Tanren Dojo Hollow
                        MapNpcPreset npc = new MapNpcPreset();

                        //Hitmontop
                        npc.SpawnX = 10;
                        npc.SpawnY = 7;
                        npc.MinLevel = 60;
                        npc.MaxLevel = 60;
                        npc.NpcNum = 1235;
                        map.SpawnNpc(npc);

                        //Hitmonlee
                        npc.SpawnX = 8;
                        npc.SpawnY = 6;
                        npc.MinLevel = 60;
                        npc.MaxLevel = 60;
                        npc.NpcNum = 1234;
                        map.SpawnNpc(npc);

                        //Hitmonchan
                        npc.SpawnX = 11;
                        npc.SpawnY = 6;
                        npc.MinLevel = 60;
                        npc.MaxLevel = 60;
                        npc.NpcNum = 1233;
                        map.SpawnNpc(npc);
                        //}
                    }
                    break;
                case 982: { //Honeydrop Meadow Clearing

                        //if (map.Name == "Honeydrop Meadow Clearing") {
                        MapNpcPreset npc = new MapNpcPreset();
                        npc.SpawnX = 9;
                        npc.SpawnY = 4;
                        npc.MinLevel = 32;
                        npc.MaxLevel = 32;
                        npc.NpcNum = 1397;

                        map.SpawnNpc(npc);

                        MapNpcPreset minion = new MapNpcPreset();
                        npc.SpawnX = 10;
                        npc.SpawnY = 4;
                        npc.MinLevel = 21;
                        npc.MaxLevel = 21;
                        npc.NpcNum = 1398;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 8;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 8;
                        minion.SpawnY = 3;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 9;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 10;

                        map.SpawnNpc(minion);

                        minion.SpawnY = 5;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 9;
                        minion.SpawnY = 5;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 8;
                        minion.SpawnY = 5;

                        map.SpawnNpc(minion);
                        //}
                    }
                    break;
                case 1754: { //Tanren Mines, Dead End

                        //if (map.Name == "Tanren Mines, Dead End") {
                        MapNpcPreset minion = new MapNpcPreset();
                        minion.SpawnX = 9;
                        minion.SpawnY = 7;
                        minion.MinLevel = 50;
                        minion.MaxLevel = 50;
                        minion.NpcNum = 1503;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 10;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 8;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 8;
                        minion.SpawnY = 6;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 9;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 10;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 11;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 7;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 4;
                        minion.SpawnY = 7;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 5;

                        map.SpawnNpc(minion);

                        minion.SpawnY = 8;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 4;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 13;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 14;

                        map.SpawnNpc(minion);

                        minion.SpawnY = 7;

                        map.SpawnNpc(minion);

                        minion.SpawnX = 13;

                        map.SpawnNpc(minion);
                        //}
                    }
                    break;
                case 1007: { //Tanren Mines Ancient Cavern

                        map.SetAttribute(12, 12, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                        Messenger.SendTile(12, 12, map);

                        map.SetTile(12, 13, 5, 4, 1);
                        map.SetAttribute(12, 13, Enums.TileType.Blocked, 0, 0, 0, "", "", "");
                        Messenger.SendTile(12, 13, map);

                        MapNpcPreset npc = new MapNpcPreset();
                        //Regirock
                        npc.NpcNum = 1529;
                        npc.MinLevel = 65;
                        npc.MaxLevel = 65;
                        npc.SpawnX = 11;
                        npc.SpawnY = 12;
                        map.SpawnNpc(npc);
                    }
                    break;

            }
        }
Example #26
0
 public void RemoveNpc(int mapNpcNum)
 {
     Npc[mapNpcNum] = new MapNpcPreset();
 }
        public static RDungeonMap GenerateFloor(Client client, int dungeonIndex, int floorNum, GeneratorOptions options)
        {
            RDungeon dungeon = RDungeonManager.RDungeons[dungeonIndex];
            RDungeonFloor floor = dungeon.Floors[floorNum];

            //decide on a chamber
            RDungeonChamberReq req = null;
            int chamber = -1;
            if (options.Chambers.Count > 0) {
                chamber = Math.Rand(0, options.Chambers.Count);
                req = (RDungeonChamberReq)Scripting.ScriptManager.InvokeFunction("GetChamberReq", options.Chambers[chamber].ChamberNum, options.Chambers[chamber].String1, options.Chambers[chamber].String2, options.Chambers[chamber].String3);
            }

            // Generate the ASCII map

            DungeonArrayFloor arrayFloor = new DungeonArrayFloor(options, req);
            //int[,] arrayMap = ASCIIFloorGen.GenASCIIMap(options);

            //ASCIIFloorGen.TextureDungeon(arrayMap);

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            watch.Start();

            // Prepare the base map
            DataManager.Maps.RDungeonMap rDungeonMap = new DataManager.Maps.RDungeonMap(MapManager.GenerateMapID(RDungeonMap.ID_PREFIX));
            rDungeonMap.MaxX = arrayFloor.MapArray.GetUpperBound(0);
            rDungeonMap.MaxY = arrayFloor.MapArray.GetUpperBound(1);
            rDungeonMap.Tile = new DataManager.Maps.Tile[rDungeonMap.MaxX + 1, rDungeonMap.MaxY + 1];
            rDungeonMap.RDungeonIndex = dungeonIndex;
            rDungeonMap.RDungeonFloor = floorNum;

            RDungeonMap map = new RDungeonMap(rDungeonMap);

            for (int x = 0; x <= rDungeonMap.Tile.GetUpperBound(0); x++) {
                for (int y = 0; y <= rDungeonMap.Tile.GetUpperBound(1); y++) {
                    AmbiguateTile(map.Tile[x,y]);
                }
            }

            map.Name = GenerateName(dungeonIndex, floorNum);

            map.Revision = 0;
            map.OriginalDarkness = floor.Darkness;
            map.HungerEnabled = true;
            map.RecruitEnabled = dungeon.Recruitment;
            map.ExpEnabled = dungeon.Exp;
            map.TimeLimit = dungeon.WindTimer;
            map.DungeonIndex = dungeon.DungeonIndex;
            map.MinNpcs = floor.NpcMin;
            map.MaxNpcs = floor.NpcMax;
            map.NpcSpawnTime = floor.NpcSpawnTime;

            if (Globals.ServerWeather != Enums.Weather.Ambiguous) {
                map.Weather = Globals.ServerWeather;
            } else if (floor.Weather.Count > 0) {
                map.Weather = floor.Weather[Server.Math.Rand(0, floor.Weather.Count)];
            }

            map.Music = floor.Music;

            //texture chamber
            if (arrayFloor.Chamber.X != -1 && arrayFloor.Chamber.Y != -1) {
                Scripting.ScriptManager.InvokeSub("CreateChamber", map, arrayFloor, options.Chambers[chamber].ChamberNum, options.Chambers[chamber].String1, options.Chambers[chamber].String2, options.Chambers[chamber].String3);
            }

            DungeonArrayFloor.TextureDungeon(arrayFloor.MapArray);

            for (int x = 0; x <= rDungeonMap.Tile.GetUpperBound(0); x++) {
                for (int y = 0; y <= rDungeonMap.Tile.GetUpperBound(1); y++) {
                    map.Tile[x, y].RDungeonMapValue = arrayFloor.MapArray[x, y];
                }
            }

            TextureDungeonMap(map);

            //block borders
            for (int y = 0; y <= map.MaxY; y++) {
                map.Tile[0, y].Type = Enums.TileType.Blocked;
                map.Tile[map.MaxX, y].Type = Enums.TileType.Blocked;
            }
            for (int x = 0; x <= map.MaxX; x++) {
                map.Tile[x, 0].Type = Enums.TileType.Blocked;
                map.Tile[x, map.MaxY].Type = Enums.TileType.Blocked;
            }

            watch.Stop();

            foreach (MapNpcPreset npc in floor.Npcs) {
                MapNpcPreset newNpc = new MapNpcPreset();
                newNpc.NpcNum = npc.NpcNum;
                newNpc.MinLevel = npc.MinLevel;
                newNpc.MaxLevel = npc.MaxLevel;
                newNpc.SpawnX = npc.SpawnX;
                newNpc.SpawnY = npc.SpawnY;
                newNpc.AppearanceRate = npc.AppearanceRate;
                newNpc.StartStatus = npc.StartStatus;
                newNpc.StartStatusCounter = npc.StartStatusCounter;
                newNpc.StartStatusChance = npc.StartStatusChance;
                map.Npc.Add(newNpc);
            }

            map.SpawnItems();
            int n = Server.Math.Rand(options.ItemMin, options.ItemMax + 1);
            if (floor.Items.Count == 0) {
                n = 0;
            } else if (n > Constants.MAX_MAP_ITEMS) {
                n = Constants.MAX_MAP_ITEMS;
            }
            int slot = 0;
            int itemX = -1, itemY = -1;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < 100; j++) {
                    bool spawned = false;
                    if (Server.Math.Rand(0, 100) < floor.Items[slot].AppearanceRate) {
                        arrayFloor.GenItem(floor.Items[slot].OnGround, floor.Items[slot].OnWater, floor.Items[slot].OnWall, ref itemX, ref itemY);
                        if (itemX > -1) {
                            map.SpawnItem(floor.Items[slot].ItemNum, Server.Math.Rand(floor.Items[slot].MinAmount, floor.Items[slot].MaxAmount + 1),
                                          (Server.Math.Rand(0, 100) < floor.Items[slot].StickyRate), floor.Items[slot].Hidden, floor.Items[slot].Tag, itemX, itemY, null);
                            spawned = true;
                        }

                    }
                    slot++;
                    if (slot >= floor.Items.Count) slot = 0;
                    if (spawned) break;
                }
            }

            //map.SpawnNpcs();
            map.NpcSpawnWait = new TickCount(Core.GetTickCount().Tick);

            return map;
        }
Example #28
0
        public void SpawnNpc(MapNpcPreset npc, bool checkSight)
        {
            int NPCNum = 0;
            int X = 0;
            int Y = 0;
            bool Spawned = false;

            // Check for empty NPC slot
            int npcSlot = FindOpenNpcSlot();

            if (npcSlot < 0 || npcSlot >= Constants.MAX_MAP_NPCS) {
                return;
            }

            NPCNum = npc.NpcNum;
            if (NPCNum > 0) {

                ActiveNpc[npcSlot].Num = NPCNum;
                ActiveNpc[npcSlot].Target = null;

                ActiveNpc[npcSlot].Name = NpcManager.Npcs[NPCNum].Name;
                ActiveNpc[npcSlot].Form = NpcManager.Npcs[NPCNum].Form;

                //if (NpcManager.Npcs[NPCNum].ShinyChance != 0 && Server.Math.Rand(0, NpcManager.Npcs[NPCNum].ShinyChance) == 0) ActiveNpc[npcSlot].Shiny = true;
                ActiveNpc[npcSlot].Sex = Pokedex.Pokedex.GetPokemonForm(NpcManager.Npcs[NPCNum].Species, ActiveNpc[npcSlot].Form).GenerateLegalSex();

                ActiveNpc[npcSlot].AttackTimer = new TickCount(Core.GetTickCount().Tick);
                ActiveNpc[npcSlot].PauseTimer = new TickCount(Core.GetTickCount().Tick);

                //if (Npc[npcSlot].MinLevel == -1) {
                //Npc[npcSlot].MinLevel = NpcManager.Npcs[Npc[npcSlot].NpcNum].RecruitLevel;
                if (npc.MinLevel <= 0) {
                    npc.MinLevel = 1;
                    npc.MaxLevel = 1;
                }// else {
                //        Console.WriteLine("Npc found!");
                //    }
                //}
                ActiveNpc[npcSlot].Level = Server.Math.Rand(npc.MinLevel, npc.MaxLevel + 1);
                //set initial stats
                ActiveNpc[npcSlot].CalculateOriginalSprite();
                ActiveNpc[npcSlot].CalculateOriginalStats();
                ActiveNpc[npcSlot].CalculateOriginalType();
                ActiveNpc[npcSlot].CalculateOriginalAbility();
                //ActiveNpc[npcSlot].CalculateOriginalMobility();

                if (Server.Math.Rand(0, 1000) < 1)
                {
                    ActiveNpc[npcSlot].Shiny = Enums.Coloration.Shiny;
                }

                ActiveNpc[npcSlot].HP = ActiveNpc[npcSlot].MaxHP;

                ActiveNpc[npcSlot].Direction = (Enums.Direction)Server.Math.Rand(0, 4);

                ActiveNpc[npcSlot].GenerateMoveset();

                if (Moral == Enums.MapMoral.None) {
                    ActiveNpc[npcSlot].GenerateHeldItem();
                }

                if (Server.Math.Rand(0, 100) < npc.StartStatusChance) {
                    ActiveNpc[npcSlot].StatusAilment = npc.StartStatus;
                    ActiveNpc[npcSlot].StatusAilmentCounter = npc.StartStatusCounter;
                }

                if (npc.SpawnX < 0 | npc.SpawnY < 0) {
                    // We'll try 100 times to randomly place the sprite
                    for (int i = 1; i <= 50; i++) {
                        if (Tile[X, Y].Type == Enums.TileType.Walkable || Tile[X, Y].Type == Enums.TileType.Slow) {

                            if (checkSight) {
                                bool seen = false;
                                foreach (Client client in GetClients()) {
                                    if (CanCharacterSeeDestination(client.Player.GetActiveRecruit(), X, Y)) {
                                        seen = true;
                                        break;
                                    }
                                }
                                if (!seen) {
                                    ActiveNpc[npcSlot].X = X;
                                    ActiveNpc[npcSlot].Y = Y;
                                    Spawned = true;
                                    break;
                                }
                            } else {
                                ActiveNpc[npcSlot].X = X;
                                ActiveNpc[npcSlot].Y = Y;
                                Spawned = true;
                                break;
                            }
                        }
                    }

                    for (int i = 1; i <= 50; i++) {
                        X = Server.Math.Rand(0, MaxX + 1);
                        Y = Server.Math.Rand(0, MaxY + 1);

                        // Check if the tile is walkable
                        if (Tile[X, Y].Type == Enums.TileType.Walkable) {

                            ActiveNpc[npcSlot].X = X;
                            ActiveNpc[npcSlot].Y = Y;
                            Spawned = true;
                            break;
                        }
                    }
                } else {
                    // We no longer subtract one because Rand is ListIndex -1.
                    ActiveNpc[npcSlot].X = npc.SpawnX;
                    ActiveNpc[npcSlot].Y = npc.SpawnY;
                    Spawned = true;
                }

                // Didn't spawn, so now we'll just try to find a free tile
                if (!Spawned) {
                    for (Y = 0; Y <= MaxY; Y++) {
                        for (X = 0; X <= MaxX; X++) {
                            if (Tile[X, Y].Type == Enums.TileType.Walkable) {
                                ActiveNpc[npcSlot].X = X;
                                ActiveNpc[npcSlot].Y = Y;
                                Spawned = true;
                            }
                        }
                    }
                }

                // If we suceeded in spawning then send it to everyone
                if (Spawned) {
                    PacketHitList hitlist = null;
                    PacketHitList.MethodStart(ref hitlist);
                    PacketBuilder.AppendNpcSpawn(MapManager.RetrieveActiveMap(MapID), hitlist, npcSlot);

                    Scripting.ScriptManager.InvokeFunction("OnNpcSpawn", MapManager.RetrieveActiveMap(MapID), npc, ActiveNpc[npcSlot], hitlist);

                    PacketHitList.MethodEnded(ref hitlist);
                }

            }
        }
Example #29
0
        public static void OnNpcSpawn(IMap map, MapNpcPreset npc, MapNpc spawnedNpc, PacketHitList hitlist)
        {
            try {
                if (spawnedNpc.Num == 0) return;
                bool listed = false;
                for (int i = 0; i < map.Npc.Count; i++) {
                    if (map.Npc[i].NpcNum == spawnedNpc.Num) {
                        listed = true;
                        break;
                    }
                }
                if (!listed && map.MapType == Enums.MapType.RDungeonMap) {
                    //Messenger.AdminMsg("[Admin] An unlisted NPC " + NpcManager.Npcs[spawnedNpc.Num].Name + " spawned on " + map.Name, Text.Red);
                    //map.ActiveNpc[spawnedNpc.MapSlot] = new MapNpc(map.MapID, spawnedNpc.MapSlot);
                    //hitlist.AddPacketToMap(map, TcpPacket.CreatePacket("npcdead", spawnedNpc.MapSlot));
                }
                Client sprinko = ClientManager.FindClient("Sprinko");
                if (sprinko != null && sprinko.Player.Map == map) {
                    Messenger.PlayerMsg(sprinko, "Npc Spawned:" + spawnedNpc.Num, Text.Pink);

                }

                switch (spawnedNpc.Num) {
                    case 33:
                    case 230:
                    case 244:
                    case 245: {//friendly npcs
                            AddExtraStatus(spawnedNpc, map, "Immobilize", 0, null, "", hitlist, false);
                        }
                        break;
                    case 32: {//kecleon

                            map.Npc.Remove(npc);
                        }
                        break;
                    case 1233: {//hitmonchan

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1234: {//hitmonlee

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 340;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1235: {//hitmontop

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 480;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 306: {//regice
                            foreach (Client n in map.GetClients()) {
                                StoryManager.PlayStory(n, 259);
                            }
                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 10;
                            spawnedNpc.SpDefBuff = 10;
                            spawnedNpc.MaxHPBonus = 550;
                            spawnedNpc.SpAtkBuff = 5;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1401: {//Vespiquen (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 150;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1402: {//Roselia (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 100;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1403: {//Vileplume (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 100;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1404: {//Rhyperior (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 195;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1405: {//Golem (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 165;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1406: {//Rhydon (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 165;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1407: {//Lapras (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 335;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1408: {//Gorebyss (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 235;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1409: {//Huntail (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 215;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1410: {//Regice (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 150;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1411: {//Froslass (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.EvasionBuff = 1;
                            spawnedNpc.MaxHPBonus = 100;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1412: {//Beartic (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1413: {//Umbreon (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1414: {//Mogok (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 4;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.AttackBuff = 5;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.MaxHPBonus = 450;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1415: {//Silvan (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 5;
                            spawnedNpc.AttackBuff = 6;
                            spawnedNpc.SpAtkBuff = 5;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1416: {//Erkenwald (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1417: {//Alistar (Boss Rush)

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1397: {//Vespiquen

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 325;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 177: {//Luxray

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.EvasionBuff = 2;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1192: {//Entei
                            foreach (Client n in map.GetClients()) {
                                StoryManager.PlayStory(n, 381);
                            }
                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1194: {//Suicune
                            foreach (Client n in map.GetClients()) {
                                StoryManager.PlayStory(n, 382);
                            }
                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1193: {//Raikou
                            foreach (Client n in map.GetClients()) {
                                StoryManager.PlayStory(n, 380);
                            }
                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1195: {//Flareon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.MaxHPBonus = 350;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1196: {//Leafeon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.MaxHPBonus = 385;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpeedBuff = 7;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1197: {//Vaporeon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 5;
                            spawnedNpc.MaxHPBonus = 425;
                            spawnedNpc.SpAtkBuff = 2;
                            spawnedNpc.SpeedBuff = 9;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1198: {//Glaceon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 350;
                            spawnedNpc.SpAtkBuff = 4;
                            spawnedNpc.EvasionBuff = 2;
                            spawnedNpc.AccuracyBuff = 3;
                            spawnedNpc.SpeedBuff = 6;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1199: {//Jolteon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.SpAtkBuff = 4;
                            spawnedNpc.SpeedBuff = 9;
                            spawnedNpc.EvasionBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1200: {//Umbreon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 500;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 4;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1201: {//Espeon

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.MaxHPBonus = 350;
                            spawnedNpc.SpAtkBuff = 2;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.EvasionBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 1202: {//Ho-Oh

                            map.Npc.Remove(npc);
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.MaxHPBonus = 850;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.HP = spawnedNpc.MaxHP;

                        }
                        break;
                    case 806: {//rotom

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 807: {//rotom

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 434: {//rotom

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 422: {//rotom

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 886: {//lapras

                            spawnedNpc.MaxHPBonus = 550;
                            spawnedNpc.SpeedBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 397: {//golem

                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.MaxHPBonus = 250;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 578: {//froslass

                            spawnedNpc.MaxHPBonus = 350;
                            spawnedNpc.SpeedBuff = 7;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.EvasionBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1527: {//Nidoking

                            spawnedNpc.MaxHPBonus = 350;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1528: {//Nidoking

                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.DefenseBuff = 3;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1529: {//Regirock

                            spawnedNpc.MaxHPBonus = 850;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1521: {//Steelix

                            spawnedNpc.MaxHPBonus = 255;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1523: {//Aggron

                            spawnedNpc.MaxHPBonus = 155;
                            spawnedNpc.SpDefBuff = 3;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1522: {//Golem

                            spawnedNpc.MaxHPBonus = 125;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1520: {//Crobat

                            spawnedNpc.MaxHPBonus = 100;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.AttackBuff = 3;
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 389: {//rhyperior

                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 8;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 145: {//mamoswine

                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 6;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 381: {//rhydon

                            spawnedNpc.MaxHPBonus = 250;
                            spawnedNpc.SpeedBuff = 6;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 640: {//huntail

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.SpAtkBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 641: {//gorebyss

                            spawnedNpc.MaxHPBonus = 250;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 579: {//xatu

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.SpAtkBuff = 4;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 481: {//weepinbell

                            spawnedNpc.MaxHPBonus = 125;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpeedBuff = 3;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1220: {//Groundon

                            spawnedNpc.MaxHPBonus = 775;
                            spawnedNpc.SpeedBuff = 10;
                            spawnedNpc.SpDefBuff = 6;
                            spawnedNpc.DefenseBuff = 6;
                            spawnedNpc.AttackBuff = 5;
                            spawnedNpc.SpAtkBuff = 5;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1060: {//Abomsnow

                            spawnedNpc.MaxHPBonus = 400;
                            spawnedNpc.SpeedBuff = 1;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 480: {//vileplume

                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.SpAtkBuff = 2;
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.SpeedBuff = 6;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1046: {//beartic
                            spawnedNpc.MaxHPBonus = 450;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.EvasionBuff = 1;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 4;
                        }
                        break;
                    case 1047: {//umbreon
                            spawnedNpc.MaxHPBonus = 450;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.DefenseBuff = 4;
                            spawnedNpc.SpDefBuff = 4;
                            spawnedNpc.AttackBuff = 2;
                            spawnedNpc.SpeedBuff = 6;
                        }
                        break;
                    case 1048: {//hitmonlee
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.AttackBuff = 5;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.SpeedBuff = 8;
                        }
                        break;
                    case 1049: {//grumpig
                            spawnedNpc.MaxHPBonus = 250;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.SpAtkBuff = 5;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.SpeedBuff = 6;
                        }
                        break;
                    case 1050: {//clefable
                            spawnedNpc.MaxHPBonus = 250;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.EvasionBuff = 3;
                            spawnedNpc.SpDefBuff = 2;
                            spawnedNpc.DefenseBuff = 2;
                            spawnedNpc.SpeedBuff = 8;
                        }
                        break;
                    case 800: {//mew
                            map.Npc.Remove(npc);
                            spawnedNpc.MaxHPBonus = 50;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            spawnedNpc.AttackBuff = 1;
                            spawnedNpc.DefenseBuff = 1;
                            spawnedNpc.SpAtkBuff = 1;
                            spawnedNpc.SpDefBuff = 1;
                            spawnedNpc.AccuracyBuff = 1;
                            spawnedNpc.EvasionBuff = 1;
                            AddExtraStatus(spawnedNpc, null, map, "Invisible", 1000, null, "", hitlist, false);
                            TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, null, spawnedNpc.X, spawnedNpc.Y, Enums.Direction.Up, true, true, true);
                            for (int i = 0; i < targets.Count; i++) {
                                if (targets[i].CharacterType == Enums.CharacterType.Recruit) {
                                    Messenger.PlayMusic(((Recruit)targets[i]).Owner, "PMDB) Friend Area ~ Final Island.ogg");
                                }
                            }
                        }
                        break;
                    case 846: {//zorua

                            map.Npc.Remove(npc);
                        }
                        break;
                    case 1394: {//Scyther

                            map.Npc.Remove(npc);
                        }
                        break;
                    case 1395: {//Pinsir

                            map.Npc.Remove(npc);
                        }
                        break;
                    case 936: {//vanilluxe
                            //foreach (Client n in map.GetClients()) {
                            //    StoryManager.PlayStory(n, 187);
                            //}
                            map.Npc.Remove(npc);
                            spawnedNpc.MaxHPBonus = 200;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                        }
                        break;
                    case 1061: {//ARTICUNO
                            //map.Npc.Remove(npc);
                            spawnedNpc.MaxHPBonus = 300;
                            spawnedNpc.HP = spawnedNpc.MaxHP;
                            if (map.PlayersOnMap.Count == 1) {
                                InventoryItem item = new InventoryItem();
                                item.Num = 156;
                                item.Tag = "144";
                                spawnedNpc.GiveItem(item);
                            }
                        }
                        break;
                }

                if ((map.MapType == Enums.MapType.RDungeonMap) && spawnedNpc.HeldItem == null) {
                    if (((RDungeonMap)map).RDungeonIndex != 21
                    && ((RDungeonMap)map).RDungeonIndex != 22) {
                        if (Server.Math.Rand(0, 50) <= 0) {
                            //create a chest
                            InventoryItem item = new InventoryItem();
                            item.Num = Server.Math.Rand(531, 542);
                            if (item.Num == 533) item.Num = 542;
                            List<int> possibleItems = new List<int>();
                            if (Server.Math.Rand(0, 31) < 5) {
                                //2* item
                                for (int i = 1001; i <= 1838; i++) {
                                    if (ItemManager.Items[i].Rarity == 2 && !ItemManager.Items[i].Name.EndsWith("`")) {
                                        possibleItems.Add(i);
                                    }
                                }
                            } else {
                                //1* item
                                for (int i = 1001; i <= 1838; i++) {
                                    if (ItemManager.Items[i].Rarity == 1 && !ItemManager.Items[i].Name.EndsWith("`")) {
                                        possibleItems.Add(i);
                                    }
                                }
                            }
                            item.Tag = possibleItems[Server.Math.Rand(0, possibleItems.Count)].ToString();
                            spawnedNpc.GiveItem(item);
                        }
                    }
                }

                if (map.MapType == Enums.MapType.RDungeonMap && spawnedNpc.HeldItem == null) {
                    if (((RDungeonMap)map).RDungeonIndex == 50 && ((RDungeonMap)map).RDungeonFloor >= 2) {
                        if (Server.Math.Rand(0, 10) == 0) {
                            InventoryItem item = new InventoryItem();
                            item.Num = Server.Math.Rand(244, 249);
                            if (item.Num == 247) item.Num = 213;
                            if (item.Num == 248) item.Num = 224;
                            spawnedNpc.GiveItem(item);
                        }
                    } else if (((RDungeonMap)map).RDungeonIndex == 17 && ((RDungeonMap)map).RDungeonFloor >= 25
                    || ((RDungeonMap)map).RDungeonIndex == 18) {
                        if (Server.Math.Rand(0, 10) == 0) {
                            InventoryItem item = new InventoryItem();
                            item.Num = 259;

                            switch (Server.Math.Rand(0, 5)) {
                                case 0: {
                                        item.Tag = "151";
                                    }
                                    break;
                                case 1: {
                                        item.Tag = "251";
                                    }
                                    break;
                                case 2: {
                                        item.Tag = "385";
                                    }
                                    break;
                                case 3: {
                                        item.Tag = "490";
                                    }
                                    break;
                                case 4: {
                                        item.Tag = "492";
                                    }
                                    break;
                            }

                            spawnedNpc.GiveItem(item);
                        }
                    }
                }

                if (HasAbility(spawnedNpc, "Pickup") && map.MapType == Enums.MapType.RDungeonMap && spawnedNpc.HeldItem == null) {
                    RDungeonFloor floor = RDungeonManager.RDungeons[((RDungeonMap)map).RDungeonIndex].Floors[((RDungeonMap)map).RDungeonFloor];
                    if (floor.Items.Count > 0) {
                        int rand = Server.Math.Rand(0, floor.Items.Count);
                        if (Server.Math.Rand(0, 200) <= floor.Items[rand].AppearanceRate) {
                            int amount = (floor.Items[rand].MinAmount + floor.Items[rand].MaxAmount) / 2;
                            InventoryItem item = new InventoryItem();
                            item.Num = floor.Items[rand].ItemNum;
                            item.Amount = amount;
                            item.Tag = floor.Items[rand].Tag;
                            spawnedNpc.GiveItem(item);
                        }
                    }
                }

                if (HasAbility(spawnedNpc, "Honey Gather") && map.MapType == Enums.MapType.RDungeonMap && spawnedNpc.HeldItem == null) {
                    RDungeonFloor floor = RDungeonManager.RDungeons[((RDungeonMap)map).RDungeonIndex].Floors[((RDungeonMap)map).RDungeonFloor];
                    if (Server.Math.Rand(0, 400) <= spawnedNpc.Level) {
                        InventoryItem item = new InventoryItem();
                        item.Num = 11;
                        spawnedNpc.GiveItem(item);
                    }
                }

                if (HasAbility(spawnedNpc, "Illusion")) {
                    TargetCollection friendlyTargets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, spawnedNpc, spawnedNpc.X, spawnedNpc.Y, Enums.Direction.Up, false, true, false);
                    if (friendlyTargets.Friends.Count > 0) {
                        AddExtraStatus(spawnedNpc, map, "Illusion", friendlyTargets[Server.Math.Rand(0, friendlyTargets.Friends.Count)].Sprite, null, "", hitlist);
                    }
                }

                if (spawnedNpc.HasActiveItem(213)) {
                    AddExtraStatus(spawnedNpc, map, "Illusion", 25, null, "", hitlist, false);
                }
                if (spawnedNpc.HasActiveItem(224)) {
                    AddExtraStatus(spawnedNpc, map, "Illusion", 300, null, "", hitlist, false);
                }
                if (spawnedNpc.HasActiveItem(244)) {
                    AddExtraStatus(spawnedNpc, map, "Illusion", 387, null, "", hitlist, false);
                }
                if (spawnedNpc.HasActiveItem(245)) {
                    AddExtraStatus(spawnedNpc, map, "Illusion", 390, null, "", hitlist, false);
                }
                if (spawnedNpc.HasActiveItem(246)) {
                    AddExtraStatus(spawnedNpc, map, "Illusion", 393, null, "", hitlist, false);
                }
                //if (spawnedNpc.HasActiveItem(259) && spawnedNpc.HeldItem.Num == 259 && map.Moral == Enums.MapMoral.House) {
                //    AddExtraStatus(spawnedNpc, map, "Illusion", spawnedNpc.HeldItem.Tag.ToInt(), null, "", hitlist);
                //}

                RefreshCharacterTraits(spawnedNpc, map, hitlist);

                if (map.Tile[spawnedNpc.X, spawnedNpc.Y].Type == Enums.TileType.Arena || map.Moral == Enums.MapMoral.None || map.Moral == Enums.MapMoral.NoPenalty) {
                    if (HasAbility(spawnedNpc, "Sand Stream")) {
                        SetMapWeather(map, Enums.Weather.Sandstorm, hitlist);
                    } else if (HasAbility(spawnedNpc, "Snow Warning")) {
                        SetMapWeather(map, Enums.Weather.Hail, hitlist);
                    } else if (HasAbility(spawnedNpc, "Drizzle")) {
                        SetMapWeather(map, Enums.Weather.Raining, hitlist);
                    } else if (HasAbility(spawnedNpc, "Drought")) {
                        SetMapWeather(map, Enums.Weather.Sunny, hitlist);
                    } else if (HasAbility(spawnedNpc, "Air Lock")) {
                        SetMapWeather(map, Enums.Weather.None, hitlist);
                    } else if (HasAbility(spawnedNpc, "Cloud Nine")) {
                        SetMapWeather(map, Enums.Weather.None, hitlist);
                    }
                }

                if (HasAbility(spawnedNpc, "Download")) {
                    int totalDef = 0;
                    int totalSpDef = 0;
                    TargetCollection targets = MoveProcessor.GetTargetsInRange(Enums.MoveRange.Floor, 0, map, spawnedNpc, spawnedNpc.X, spawnedNpc.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(spawnedNpc, map, 1, hitlist);
                    } else {
                        ChangeSpAtkBuff(spawnedNpc, map, 1, hitlist);
                    }
                }

                if (HasAbility(spawnedNpc, "Stench")) {
                    if (map.NpcSpawnWait == null) map.NpcSpawnWait = Core.GetTickCount();
                    map.NpcSpawnWait = new TickCount(map.NpcSpawnWait.Tick + map.NpcSpawnTime * 500);
                }

                if (HasAbility(spawnedNpc, "Illuminate")) {
                    if (map.NpcSpawnWait == null) map.NpcSpawnWait = Core.GetTickCount();
                    map.NpcSpawnWait = new TickCount(map.NpcSpawnWait.Tick - map.NpcSpawnTime * 500);
                }

                //if (MapManager.ActiveMaps[spawnedNpc.MapID].MapType == Enums.MapType.RDungeonMap) {
                //	RDungeonMap map = (RDungeonMap)MapManager.ActiveMaps[spawnedNpc.MapID];
                //	if (map.RDungeonIndex == 34 && map.RDungeonFloor > 8) {
                //		if (Server.Math.Rand(0, 20) == 0 && !MapContainsNpc(map, 306)) {
                //			foreach(Client n in map.GetClients()) {
                //				StoryManager.PlayStory(n, 185);
                //			}
                //		}
                //	}
                //}
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: OnNpcSpawn", Text.Black);
                Messenger.AdminMsg(map.Name + " with " + spawnedNpc.Num + " from " + spawnedNpc.MapSlot, Text.Pink);
                Messenger.AdminMsg(ex.ToString(), Text.Black);
            }
        }
        public static void SpawnNpcsBad(Client client, IMap imap)
        {
            //super-hack-ish code, just making it work
            int rand, n;
            int[] npcs = new int[] { 558, 559, 560, 571, 572, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863 };

            if (imap.MaxX == 19) {
                rand = Server.Math.Rand(0, 20);
                if (rand == 0) { //no NPCs
                    n = 0;
                } else if (rand > 0 && rand <= 3) { //1 NPC
                    n = 1;
                } else if (rand > 3 && rand <= 9) { //2 NPCs
                    n = 2;
                } else if (rand > 9 && rand <= 15) { //3 NPCs
                    n = 3;
                } else if (rand > 15 && rand <= 18) { //4 NPCs
                    n = 4;
                } else { //rand == 19, 5 NPCs
                    n = 5;
                }
            }
            else {
                rand = Server.Math.Rand(0,25);
                if (rand == 0) { //no NPCs
                    n = 0;
                } else if (rand > 0 && rand <= 2) { //1 NPC
                    n = 1;
                } else if (rand > 2 && rand <= 5) { //2 NPCs
                    n = 2;
                } else if (rand > 5 && rand <= 9) { //3 NPCs
                    n = 3;
                } else if (rand > 9 && rand <= 14) { //4 NPCs
                    n = 4;
                } else if (rand > 14 && rand <= 18) { //5 NPCs
                    n = 5;
                } else if (rand > 18 && rand <= 21) { //6 NPCs
                    n = 6;
                } else if (rand > 21 && rand <= 23) { //7 NPCs
                    n = 7;
                } else { //rand == 24, 8 NPCs
                    n = 8;
                }
               	}

               	for (int i = 1; i <= n; i++) {
                MapNpcPreset npc = new MapNpcPreset();
                rand = Server.Math.Rand(0, npcs.Length);
                npc.NpcNum = npcs[rand];
                if (npcs[rand] == 859) {
                    npc.MinLevel = 10;
                    npc.MaxLevel = 10;
                } else {
                    npc.MinLevel = 50;
                    npc.MaxLevel = 80;
                }
                //npc.AppearanceRate = 100;
                imap.SpawnNpc(npc);
            }
        }
Example #31
0
        public static void QuestionResult(Client client, string questionID, string answer)
        {
            try {
                if (questionID.StartsWith("EnterRDungeon") && answer == "Yes") {
                    if (questionID.Split(':')[3] == "") {
                        client.Player.WarpToRDungeon(questionID.Split(':')[1].ToInt(), questionID.Split(':')[2].ToInt(0));
                    } else if (questionID.Split(':')[3].IsNumeric()) {
                        if (DungeonManager.Dungeons[questionID.Split(':')[3].ToInt()].ScriptList.ContainsKey(2)) {
                            //Story warningStory = DungeonRules.GetEntranceWarning(client, DungeonManager.Dungeons[questionID.Split(':')[3].ToInt()].Name,
                            //	DungeonManager.Dungeons[questionID.Split(':')[3].ToInt()].ScriptList[2].Split(';'));
                        } else {
                            client.Player.WarpToRDungeon(questionID.Split(':')[1].ToInt(), questionID.Split(':')[2].ToInt(0));
                            client.Player.AddDungeonAttempt(questionID.Split(':')[3].ToInt() - 1);
                        }
                    } else {

                    }

                }
                if (questionID.StartsWith("Level1RDungeon") && answer == "Yes") {
                    client.Player.BeginTempStatMode(questionID.Split(':')[3].ToInt(), true);
                    client.Player.WarpToRDungeon(questionID.Split(':')[1].ToInt(), questionID.Split(':')[2].ToInt(0));
                }
                if (questionID.StartsWith("SkyDrop") && answer == "Yes") {
                    string[] param = questionID.Split(':');
                    Messenger.PlayerWarp(client, param[1].ToInt(), param[2].ToInt(), param[3].ToInt());
                }

                if (questionID.StartsWith("SummonGuardian")) {

                    if (answer == "Cancel") {

                    } else if (answer == "Others") {
                        string[] idArray = questionID.Split(':');
                        int page = idArray[1].ToInt() + 1;
                            string[] choicesNum = idArray[2].Split(';');
                                if (choicesNum.Length > 1) {
                                    List<string> choices = new List<string>();
                                    if (5*page >= choicesNum.Length-1) {
                                        page = 0;
                                    }
                                    for (int i = 5*page; i < choicesNum.Length-1; i++) {
                                        if (choices.Count >= 5) {
                                            break;
                                        }
                                        choices.Add("#" + choicesNum[i] + ": " + Pokedex.GetPokemon(choicesNum[i].ToInt()).Name);
                                    }
                                    choices.Add("Others");
                                    choices.Add("Cancel");

                                    Messenger.AskQuestion(client, "SummonGuardian:"+ page + ":" + idArray[2], "Which ally will you call forth?", -1, choices.ToArray());
                                }
                    } else {
                    int legendNumber = answer.Substring(1).Split(':')[0].ToInt();

                    Messenger.PlayerMsg(client, "A light shot up from the Mystery Part, and " + Pokedex.GetPokemon(legendNumber).Name + "'s guardian sign pierced the skies asunder!", Text.Cyan);
                    Messenger.PlaySoundToMap(client.Player.MapID, "magic767.wav");
                    bool taken = false;
                    for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                        if (client.Player.Team[i] != null && client.Player.Team[i].Loaded) {
                            if (client.Player.Team[i].Species == legendNumber) {
                                taken = true;
                                break;
                            }
                        }
                    }
                    if (client.Player.PartyID != null) {
                        Party party = PartyManager.FindPlayerParty(client);
                        foreach (string memberID in party.GetMemberCharacters()) {
                            Client n = ClientManager.FindClientFromCharID(memberID);
                            if (n != null) {
                                for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                                    if (n.Player.Team[i] != null && n.Player.Team[i].Loaded) {
                                        if (n.Player.Team[i].Species == legendNumber) {
                                            taken = true;
                                            break;
                                        }
                                    }
                                }
                            } else {
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) {
                                    List<PMDCP.DatabaseConnector.MySql.DataColumnCollection> rows = dbConnection.Database.RetrieveRows("SELECT D.Species FROM pmdcp_players.recruit_data D " +
                                    "WHERE D.CharID = \'" + memberID + "\';");
                                    if (rows != null) {
                                    for (int i = 0; i < rows.Count; i++) {
                                        if (rows[i]["Species"].ValueString.ToInt() == legendNumber) {
                                            taken = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                                if (!taken) {
                                int openSlot = client.Player.FindOpenTeamSlot();
                                    if (openSlot > -1) {
                                        client.Player.AddToTeamTemp(openSlot,
                                            legendNumber,
                                            0,
                                            100, (Constants.MAX_JOB_LIST + openSlot));
                                        Messenger.PlayerMsg(client, Server.Pokedex.Pokedex.GetPokemon(legendNumber).Name +
                                            " joined the team!", Text.BrightGreen);
                                        Messenger.SendActiveTeam(client);

                                    }
                                } else {
                                    Messenger.PlayerMsg(client, "But " + Server.Pokedex.Pokedex.GetPokemon(legendNumber).Name +
                                            " is already an ally!", Text.BrightGreen);
                                }
                            }
                }

                if (questionID.StartsWith("UseItem")) {
                            if (answer == "Yes") {
                                int num = questionID.Split(':')[1].ToInt();
                                int slot = 0;
                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Num == num && !client.Player.Inventory[i].Sticky) {
                                        slot = i;
                                        break;
                                    }
                                }
                                //Messenger.PlayerMsg(client, "yes" + slot, Text.Blue);
                                if (slot > 0) {
                                    client.Player.UseItem(client.Player.Inventory[slot], slot);
                                }
                            }
                }

                // Called when a player answers a yes/no question
                switch (questionID) {
                    case "Appraisal": {
                            if (answer == "Yes") {
                                int boxes = 0;
                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Num != 0
                                        && ItemManager.Items[client.Player.Inventory[i].Num].Type == Enums.ItemType.Scripted
                                        && ItemManager.Items[client.Player.Inventory[i].Num].Data1 == 12
                                        && !client.Player.Inventory[i].Sticky) {
                                        boxes++;
                                    }
                                }
                                if (client.Player.HasItem(1) >= 150 * boxes) {
                                    client.Player.TakeItem(1, 150 * boxes, true);
                                    for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                        if (client.Player.Inventory[i].Num != 0
                                            && ItemManager.Items[client.Player.Inventory[i].Num].Type == Enums.ItemType.Scripted
                                            && ItemManager.Items[client.Player.Inventory[i].Num].Data1 == 12
                                            && !client.Player.Inventory[i].Sticky) {
                                            OpenBox(client, client.Player.Inventory[i], i);
                                        }
                                    }
                                    Messenger.PlaySoundToMap(client.Player.MapID, "magic227.wav");
                                    Story story = new Story();
                                    StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                    StoryBuilder.AppendSaySegment(segment, "All treasure boxes were opened!", -1, 0, 0);
                                    segment.AppendToStory(story);
                                    StoryManager.PlayStory(client, story);
                                } else {
                                    Messenger.PlayerMsg(client, "You do not have enough to open your boxes!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "Unsticky": {
                            if (answer == "Yes") {
                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Sticky) {
                                        client.Player.SetItemSticky(i, false);
                                    }
                                }
                                Messenger.PlaySoundToMap(client.Player.MapID, "magic231.wav");
                                //Messenger.PlayerMsg(client, "All sticky items have been cleansed!", Text.Cyan);
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "All sticky items have been cleansed!", -1, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);
                            }
                        }
                        break;
                    case "TradeEgg": {
                            if (answer == "Yes") {
                                int takenItem = 0;
                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Num == 110 || client.Player.Inventory[i].Num == 109 || client.Player.Inventory[i].Num == 131) {
                                        takenItem = i;
                                    }
                                }
                                Messenger.PlaySoundToMap(client.Player.MapID, "magic693.wav");
                                client.Player.TakeItemSlot(takenItem, 1, true);
                                client.Player.GiveItem(538, 1, "641;642;643;644;645;646;647;648;649;650;651;652;653;654;655;656;657;" +
                                    "661;662;663;664;665;666;667;668;669;670;671;672;673;674;675;676;677", false);
                                //Messenger.PlayerMsg(client, "You were given a gift in exchange for the Egg!", Text.BrightGreen);
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "You were given a gift in exchange for the Egg!", -1, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);

                            } else {
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "Well, then I hope you take good care of it!", Pokedex.FindByName("Togekiss").ID, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);
                            }
                        }
                        break;
                    case "RecallEggMove": {
                            if (answer == "Yes") {

                                client.Player.TakeItem(702, 1, true);
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "Okay, here goes!", Pokedex.FindByName("Togetic").ID, 0, 0);
                                StoryBuilder.AppendRunScriptAction(segment, 48, "", "", "", true);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);

                            } else {
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "Well, alright then!  Let me know when you feel like learning something fun!", Pokedex.FindByName("Togetic").ID, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);
                            }
                        }
                        break;
                    case "LearnTutorMove": {
                            int item = 0;
                            if (answer == ItemManager.Items[263].Name) {
                                item = 263;
                            } else if (answer == ItemManager.Items[264].Name) {
                                item = 264;
                            } else if (answer == ItemManager.Items[265].Name) {
                                item = 265;
                            } else if (answer == ItemManager.Items[266].Name) {
                                item = 266;
                            }

                            if (item > 0 && client.Player.HasItem(item) > 0) {
                                client.Player.TakeItem(item, 1, true);
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "Very well, let us commence!", Pokedex.FindByName("Bronzong").ID, 0, 0);
                                StoryBuilder.AppendRunScriptAction(segment, 71, item.ToString(), "", "", true);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);

                            } else {
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "Very well.  I shall wait here until you wish to part with your shards.", Pokedex.FindByName("Bronzong").ID, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);
                            }
                        }
                        break;
                    case "ShellBell": {
                            if (answer == "Yes") {
                                int shellCount = 0;
                                int saltCount = 0;
                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Num == 96) {
                                        shellCount++;
                                    } else if (client.Player.Inventory[i].Num == 102) {
                                        saltCount++;
                                    }
                                }

                                if (saltCount >= 5 && shellCount >= 5) {
                                    for (int i = 0; i < 5; i++) {
                                        client.Player.TakeItem(96, 1, true);
                                        client.Player.TakeItem(102, 1, true);
                                    }

                                    Story story = new Story();
                                    StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                    StoryBuilder.AppendSaySegment(segment, "Okay, just give me a moment...", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                    StoryBuilder.AppendPauseAction(segment, 1500);
                                    StoryBuilder.AppendSaySegment(segment, "Ta-da!  Here you go!", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                    StoryBuilder.AppendRunScriptAction(segment, 35, "", "", "", true);
                                    StoryBuilder.AppendPauseAction(segment, 1000);

                                    StoryBuilder.AppendAskQuestionAction(segment, "So what'ja think?  You like it?", segment.Segments.Count + 2, segment.Segments.Count + 4, Pokedex.FindByName("Oshawott").ID);

                                    StoryBuilder.AppendSaySegment(segment, "Awww, gee... thanks!", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                    StoryBuilder.AppendGoToSegmentAction(segment, segment.Segments.Count + 5);
                                    StoryBuilder.AppendSaySegment(segment, "Oh...", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                    StoryBuilder.AppendPauseAction(segment, 500);
                                    StoryBuilder.AppendSaySegment(segment, "I'm sorry...", Pokedex.FindByName("Oshawott").ID, 0, 0);

                                    segment.AppendToStory(story);
                                    StoryManager.PlayStory(client, story);
                                }
                            } else {
                                Story story = new Story();
                                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                StoryBuilder.AppendSaySegment(segment, "You- you don't?", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                StoryBuilder.AppendSaySegment(segment, "Well... okay...", Pokedex.FindByName("Oshawott").ID, 0, 0);
                                segment.AppendToStory(story);
                                StoryManager.PlayStory(client, story);
                            }
                        }
                        break;
                    case "HouseSpawn": {
                            if (answer == "Yes") {
                                if (client.Player.Map.MapType == Server.Enums.MapType.House &&
                                    ((House)client.Player.Map).OwnerID == client.Player.CharID) {
                                        if (client.Player.HasItem(1) >= 500) {
                                            client.Player.TakeItem(1, 500, true);
                                            ((House)client.Player.Map).StartX = client.Player.X;
                                            ((House)client.Player.Map).StartY = client.Player.Y;
                                            client.Player.Map.Save();
                                            Messenger.PlayerMsg(client, "You have set your house's entrance point!", Text.BrightGreen);
                                        } else {
                                            Messenger.PlayerMsg(client, "You don't have enough " + ItemManager.Items[1].Name + "!", Text.BrightRed);
                                        }
                                } else {
                                    Messenger.PlayerMsg(client, "You can't set your house entrance here!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "HouseRoof": {
                            if (answer == "Yes") {
                                if (client.Player.Map.MapType == Server.Enums.MapType.House &&
                                    ((House)client.Player.Map).OwnerID == client.Player.CharID) {
                                        if (client.Player.HasItem(1) >= 500) {
                                            client.Player.TakeItem(1, 500, true);
                                            client.Player.Map.Indoors = !client.Player.Map.Indoors;
                                            client.Player.Map.Save();
                                            if (client.Player.Map.Indoors) {
                                                Messenger.PlayerMsg(client, "You have closed your house's roof!", Text.BrightGreen);
                                            } else {
                                                Messenger.PlayerMsg(client, "You have opened your house's roof!", Text.BrightGreen);
                                            }
                                            Messenger.RefreshMap(client);
                                        } else {
                                            Messenger.PlayerMsg(client, "You don't have enough " + ItemManager.Items[1].Name + "!", Text.BrightRed);
                                        }
                                } else {
                                    Messenger.PlayerMsg(client, "You can't set your house entrance here!", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "DiglettMission": {
                            if (answer == "Yes") {
                                StoryManager.PlayStory(client, 415);
                            } else {
                                StoryManager.PlayStory(client, 414);
                            }
                        }
                        break;
                    case "FerryTicketUse": {//originally used in place of Keyblocks during exploitations of the Refresh Glitch.
                            if (answer == "Yes") {
                                client.Player.TakeItem(49, 1);
                                Messenger.PlayerWarp(client, 880, 16, 12);
                            } else {
                                Messenger.PlayerMsg(client, "Ok. Come back later!", Text.Yellow);
                            }
                        }
                        break;
                    case "MassWarpAuction": {
                            if (answer == "Yes") {
                                Messenger.PlayerWarp(client, 363, 10, 13);
                            }
                        }
                        break;
                    case "WarptoForlorn": {
                            if (answer == "Yes") {
                                Messenger.PlayerWarp(client, 684, 4, 29);
                            }
                            //if (answer == true) {
                            //    NetScript.PlayerWarp(index, 1109, 10, 7);
                            //}
                        }
                        break;
                    case "WarptoTanren": {
                            if (answer == "Yes") {
                                Messenger.PlayerWarp(client, 78, 37, 19);
                            }
                            //if (answer == true) {
                            //    NetScript.PlayerWarp(index, 390, 9, 10);
                            //}
                        }
                        break;
                    case "uselotteryticket": {
                            if (answer == "Yes") {
                                Lottery.VerifyWinner(client);
                            }
                        }
                        break;
                    case "buylotteryticket": {
                            if (answer == "Yes") {
                                Lottery.BuyLotteryTicket(client);
                            }
                        }
                        break;
                    case "Fireplace": {
                            if (answer == "Yes") {
                                //Messenger.SpellAnim(452, client.Player.MapID, 15, 4);
                                Messenger.PlaySoundToMap(client.Player.MapID, "magic68.wav");
                                StoryManager.PlayStory(client, 35);
                            }
                        }
                        break;
                    case "Surf": {
                            if (answer == "Yes") {
                                int surfSlot = -1;
                                for (int i = 0; i < Constants.MAX_PLAYER_MOVES; i++) {
                                    if (client.Player.GetActiveRecruit().Moves[i].MoveNum == 462) {
                                        surfSlot = i;
                                    }
                                }

                                if (surfSlot > -1) {
                                    client.Player.GetActiveRecruit().UseMove(surfSlot);
                                }
                            }
                        }
                        break;
                    case "RockClimb": {
                            if (answer == "Yes") {
                                int surfSlot = -1;
                                for (int i = 0; i < Constants.MAX_PLAYER_MOVES; i++) {
                                    if (client.Player.GetActiveRecruit().Moves[i].MoveNum == 456) {
                                        surfSlot = i;
                                    }
                                }

                                if (surfSlot > -1) {
                                    client.Player.GetActiveRecruit().UseMove(surfSlot);
                                }
                            }
                        }
                        break;
                    case "AbandonedMansion": {
                            if (answer == "Yes") {
                                StoryManager.PlayStory(client, 297);
                                //NetScript.AskQuestion(index, "AbandonedMansion2", "Only the team leader may enter this dungeon, is that OK?", -1);
                            }
                        }
                        break;
                    case "AbandonedMansion2": {
                            //Debug.Print("---");
                            if (answer == "Yes") {
                                if (client.Player.MapID == MapManager.GenerateMapID(743)) {
                                    if (client.Player.X == 11) {
                                        Messenger.PlaySoundToMap(client.Player.MapID, "key.wav");
                                        client.Player.TakeItem(249, 1);
                                        Messenger.PlayerMsg(client, "The key dissolves.", Text.Yellow);
                                        client.Player.WarpToRDungeon(16, 0);
                                    } else if (client.Player.X == 21) {
                                        Messenger.PlaySoundToMap(client.Player.MapID, "key.wav");
                                        client.Player.TakeItem(248, 1);
                                        Messenger.PlayerMsg(client, "The key dissolves.", Text.Yellow);
                                        client.Player.WarpToRDungeon(15, 0);
                                    } else if (client.Player.X == 16) {
                                        Messenger.PlaySoundToMap(client.Player.MapID, "key.wav");
                                        client.Player.TakeItem(252, 1);
                                        Messenger.PlayerMsg(client, "The key dissolves.", Text.Yellow);
                                        client.Player.WarpToRDungeon(17, 0);
                                    }
                                }
                            }
                        }
                        break;
                    case "WarptoPokehallow": {
                            if (answer == "Yes") {
                                Messenger.PlayerWarp(client, 743, 16, 11);
                            }
                        }
                        break;
                    case "HallowedWell": {
                            if (answer == "Yes") {
                                StoryManager.PlayStory(client, 294);
                            }
                        }
                        break;
                    case "HallowedWell2": {
                            if (answer == "Yes") {
                                Messenger.PlaySoundToMap(client.Player.MapID, "DeepFall.wav");
                                client.Player.WarpToRDungeon(20, 0);
                            }
                        }
                        break;
                    case "AfterDeath": {
                        switch (answer) {
                            case "Revive": {
                                    AskReviveQuestion(client);
                                }
                                break;
                            case "Switch": {
                                    AskRecruitSwapQuestion(client);
                                }
                                break;
                            case "Escape": {
                                    Messenger.AskQuestion(client, "Escape", "Will you use your Escape Rope to retreat from the dungeon?  It will not count as a defeat.", -1);
                                }
                                break;
                            case "Give Up": {
                                    GiveUp(client);
                                }
                                break;
                            }

                        }
                        break;
                    case "AfterDeathRevive": {
                            if (answer == ItemManager.Items[489].Name) {
                                ActivateRevivalItem(client, 489);
                            } else if (answer == ItemManager.Items[452].Name) {
                                ActivateRevivalItem(client, 452);
                            } else if (answer == ItemManager.Items[451].Name) {
                                ActivateRevivalItem(client, 451);
                            } else if (answer == ItemManager.Items[450].Name) {
                                ActivateRevivalItem(client, 450);
                            } else if (answer == ItemManager.Items[749].Name) {
                                ActivateRevivalItem(client, 749);
                            } else {
                                AskAfterDeathQuestion(client);
                            }
                        }
                        break;
                    case "AfterDeathSwap": {
                        if (answer.StartsWith("Slot #")) {
                            int slot = answer.Substring(6).ToInt() - 1;
                            int activeSlot = client.Player.ActiveSlot;
                            string name = client.Player.GetActiveRecruit().Name;

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

                            foreach (ExtraStatus status in passedStatus) {
                                client.Player.GetActiveRecruit().VolatileStatus.Add(status);
                                Messenger.BattleMsg(client, status.Name, Text.BrightRed);
                            }

                            client.Player.SwapActiveRecruit(slot, true);
                            client.Player.RestoreRecruitStats(activeSlot);

                            client.Player.RemoveFromTeam(activeSlot);

                            client.Player.Dead = false;
                            PacketHitList hitlist = null;
                            PacketHitList.MethodStart(ref hitlist);
                            PacketBuilder.AppendDead(client, hitlist);
                            PacketHitList.MethodEnded(ref hitlist);

                            Messenger.SendActiveTeam(client);
                        } else {
                            AskAfterDeathQuestion(client);
                        }
                        }
                        break;
                    case "GiveUp": {
                            if (answer == "Yes") {
                                Messenger.MapMsg(client.Player.MapID, client.Player.Name + " has given-up on the exploration!", Text.BrightRed);
                                client.Player.GetActiveRecruit().StatusAilment = Enums.StatusAilment.OK;
                                client.Player.GetActiveRecruit().StatusAilmentCounter = 0;
                                HandleGameOver(client, Enums.KillType.Other);
                            } else if (client.Player.Dead) {
                                AskAfterDeathQuestion(client);
                            }
                        }
                        break;
                    case "Escape": {
                            if (answer == "Yes") {
                                int slot = 0;

                                for (int i = 1; i <= client.Player.Inventory.Count; i++) {
                                    if (client.Player.Inventory[i].Num == 350 && !client.Player.Inventory[i].Sticky) {
                                        slot = i;
                                        break;
                                    }
                                }

                                if (slot > 0) {
                                    client.Player.TakeItemSlot(slot, 1, true);
                                    Escape(client);
                                } else {
                                    Messenger.MapMsg(client.Player.MapID, client.Player.Name + " couldn't escape!", Text.BrightRed);
                                }

                            } else if (client.Player.Dead) {
                                AskAfterDeathQuestion(client);
                            }
                        }
                        break;
                    case "TradeItem": {
                            if (answer == "Yes") {
                                int itemTaken = client.Player.FindInvSlot(110);
                                if (client.Player.FindInvSlot(109) > itemTaken) {
                                    itemTaken = client.Player.FindInvSlot(109);
                                }
                                if (client.Player.FindInvSlot(131) > itemTaken) {
                                    itemTaken = client.Player.FindInvSlot(131);
                                }
                                if (itemTaken > -1) {
                                    client.Player.TakeItemSlot(itemTaken, 1, true);
                                    client.Player.GiveItem(538, 1, "38;45;125;290;194;299;300;301;302");
                                }
                            }
                        }
                        break;
                    case "CliffsideTablet": {
                            if (answer == "Yes") {
                                if (client.Player.FindInvSlot(-1) > 0) {
                                    client.Player.GiveItem(479, 1);
                                    IMap map = client.Player.Map;
                                    map.SetTile(10, 1, 0, 10, 3);
                                    map.SetTile(10, 1, 0, 10, 4);
                                    map.SetAttribute(10, 1, Enums.TileType.Blocked, 0, 0, 0, "0", "0", "0");
                                    Messenger.SendTile(10, 1, map);
                                    Messenger.PlayerMsg(client, "You obtained a Tablet!", Text.Yellow);
                                } else {
                                    Messenger.PlayerMsg(client, "Your inventory is full...", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "TournamentAdminOptions": {
                            if (answer == "Start Tournament") {
                                if (client.Player.Tournament != null) {
                                    Tournament tourny = client.Player.Tournament;
                                    if (tourny.RegisteredMembers[client].Admin) {
                                        if (tourny.IsReadyToStart()) {
                                            tourny.StartRound(new MatchUpRules());

                                            Story playerOneStory = new Story();
                                            StoryBuilderSegment playerOneSegment = StoryBuilder.BuildStory();
                                            StoryBuilder.AppendSaySegment(playerOneSegment, "Your match is ready to begin!", -1, 0, 0);
                                            StoryBuilder.AppendMovePlayerAction(playerOneSegment, 8, 2, Enums.Speed.Walking, true);
                                            playerOneSegment.AppendToStory(playerOneStory);

                                            Story playerTwoStory = new Story();
                                            StoryBuilderSegment playerTwoSegment = StoryBuilder.BuildStory();
                                            StoryBuilder.AppendSaySegment(playerTwoSegment, "Your match is ready to begin!", -1, 0, 0);
                                            StoryBuilder.AppendMovePlayerAction(playerTwoSegment, 11, 2, Enums.Speed.Walking, true);
                                            playerTwoSegment.AppendToStory(playerTwoStory);

                                            for (int i = 0; i < tourny.ActiveMatchups.Count; i++) {
                                                StoryManager.PlayStory(tourny.ActiveMatchups[i].PlayerOne.Client, playerOneStory);
                                                StoryManager.PlayStory(tourny.ActiveMatchups[i].PlayerTwo.Client, playerTwoStory);
                                            }
                                        } else {
                                            Messenger.PlayerMsg(client, "The tournament is not ready to start!", Text.BrightRed);
                                        }
                                    }
                                }
                            } else if (answer == "Edit Rules") {
                                if (client.Player.Tournament != null) {
                                    Tournament tourny = client.Player.Tournament;
                                    if (tourny.RegisteredMembers[client].Admin) {
                                        Messenger.SendTournamentRulesEditorTo(client, null);
                                    } else {
                                        Messenger.PlayerMsg(client, "You are not a tournament organizer!", Text.BrightRed);
                                    }
                                }
                            }
                        }
                        break;
                   case "SnowballGameNewGame": {
                   			if (answer == "Yes") {
                   				string waitingGameOwner = SnowballGame.FindWaitingGame();
                   				if (!string.IsNullOrEmpty(waitingGameOwner)) {
                   					Messenger.PlayerMsg(client, "Someone else created a game, please join that game.", Text.BrightRed);
                   					return;
                   				}
                   				SnowballGame snowballGame = new SnowballGame();
                   				snowballGame.Init();
                   				snowballGame.CreateGame(client);

                   				ActiveSnowballGames.Add(client.Player.CharID, snowballGame);
                   				Messenger.MapMsg(client.Player.MapID, client.Player.Name + " created a new game!", Text.BrightGreen);
                   			}
                       }
                       break;
                   case "SnowballGameJoinGame": {
                   			if (answer == "Yes") {
                   				// Join game here

                   				SnowballGame.GetWaitingGame().AddToGame(client);
                   			}
                       }
                       break;
                   case "SnowballGameStart": {
                   			if (answer == "Yes") {
                   				// Star game here

                   				//Messenger.MapMsg(client.Player.MapID, client.Player.Name + " started the game!", Text.BrightGreen);
                   				//Messenger.PlayerMsg(client, "Pretend you started the game.", Text.BrightGreen);
                   				SnowballGame.GetWaitingGame().StartGame(client);
                   			}
                       }
                       break;
                   case "SwapShopTeamList": {
                         if (answer == "Proceed") {

                         List<string> choices = new List<string>();
                         choices.Add(Pokedex.GetPokemon(client.Player.Team[0].Species).Name);
                  		   for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                     		  if (client.Player.Team[i] != null && client.Player.Team[i].Loaded) {
                      		    if (i > 0 && client.Player.Team[i].Species != client.Player.Team[i - 1].Species && client.Player.Team[i].Species != client.Player.Team[0].Species) {
                       			   choices.Add(Pokedex.GetPokemon(client.Player.Team[i].Species).Name);
                          }
                       }
                       }
                          Messenger.AskQuestion(client, "SwapShopItemList", "Whose list of rare exclusive items do you want to see?", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                           }
                         if (answer == "Summary") {

                         List<string> choices = new List<string>();
                         choices.Add(Pokedex.GetPokemon(client.Player.Team[0].Species).Name);
                  		   for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                     		  if (client.Player.Team[i] != null && client.Player.Team[i].Loaded) {
                      		    if (i > 0 && client.Player.Team[i].Species != client.Player.Team[i - 1].Species && client.Player.Team[i].Species != client.Player.Team[0].Species) {
                       			   choices.Add(Pokedex.GetPokemon(client.Player.Team[i].Species).Name);
                          }
                       }
                       }
                          Messenger.AskQuestion(client, "SwapShopItemSummaryList", "Whose list of rare exclusive items do you want to know about?", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                           }
                         if (answer == "Cancel") {
                          Story story = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "You don't wanna swap? Meh-heh-heh... I get it!", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          segment.AppendToStory(story);
                          StoryManager.PlayStory(client, story);
                            }
                         }
                        break;
                      case "SwapShopItemSummaryList" : {
                      int ItemFound = 0;
                      int PokemonID = Pokedex.FindByName(answer).ID;
                      List<string> choices = new List<string>();
                      for (int i = 998; i < 1838; i++) {

                        if (Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData1 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData2 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData3 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData4 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData5) {
                          if (ItemManager.Items[i].Rarity == 3) {
                            choices.Add(ItemManager.Items[i].Name);
                            ItemFound = ItemFound + 1;
                            }
                          }
                          }
                      choices.Add("Cancel");
                     if (ItemFound == 0) {
                          Story story = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh... I'm sorry to disappoint you but I'm afraid that " + answer + " has no rare exclusive items to use at the moment...", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                          segment.AppendToStory(story);
                          StoryManager.PlayStory(client, story);
                       }
                     if (ItemFound == 1) {
                      Messenger.AskQuestion(client, "SwapShopItemSummary", "Here is the rare exclusive item that " + answer + " can use...", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                       }
                     if (ItemFound > 1) {
                      Messenger.AskQuestion(client, "SwapShopItemSummary", "Here are the rare exclusive items that " + answer + " can use...", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                      }
                      }
                        break;
                      case "SwapShopItemList": {
                      int ItemFound = 0;
                      int PokemonID = Pokedex.FindByName(answer).ID;
                      List<string> choices = new List<string>();
                      for (int i = 998; i < 1838; i++) {

                        if (Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData1 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData2 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData3 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData4 || Pokedex.FindByName(answer).ID == ItemManager.Items[i].ReqData5) {
                          if (ItemManager.Items[i].Rarity == 3) {
                            choices.Add(ItemManager.Items[i].Name);
                            ItemFound = ItemFound + 1;
                            }
                          }
                          }
                      choices.Add("Cancel");
                     if (ItemFound == 0) {
                          Story story = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh... I'm sorry to disappoint you but I'm afraid that " + answer + " has no rare exclusive items to use at the moment...", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          segment.AppendToStory(story);
                          StoryManager.PlayStory(client, story);
                       }
                     if (ItemFound == 1) {
                      Messenger.AskQuestion(client, "SwapShopReq", "Here is the rare exclusive item that " + answer + " can use...", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                       }
                     if (ItemFound > 1) {
                      Messenger.AskQuestion(client, "SwapShopReq", "Here are the rare exclusive items that " + answer + " can use...", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                      }
                      }
                        break;
                      case "SwapShopItemSummary": {
                      string ItemReq1;
                      ItemReq1 = "";
                      string ItemReq2;
                      ItemReq2 = "";
                      string ItemReq3 = "";
                      ItemReq3 = "";
                      string ItemReqAny;
                      ItemReqAny = "";
                      string ItemYour;
                      ItemYour = "";
                      int ReqFound = 0;
                      int Item1 = 0;
                      int Item2 = 0;
                      int Item3 = 0;
                      int SwapItemNum = 0;
                      string SwapItem;
                      SwapItem = answer;
                      for (int c = 998; c < 1838; c++) {
                            if (ItemManager.Items[c].Name.Contains(answer)) {
                            int PokemonID = ItemManager.Items[c].ReqData1;
                            SwapItemNum = c;
                        for (int i = 998; i < 1838; i++) {
                         if (PokemonID == ItemManager.Items[i].ReqData1) {
                           if (ItemManager.Items[i].Rarity == 1 || ItemManager.Items[i].Rarity == 2) {
                            ReqFound = ReqFound + 1;
                              if (ReqFound == 1) {
                              ItemReq1 = ItemManager.Items[i].Name;
                              ItemYour = "your ";
                              Item1 = i;
                              }
                              if (ReqFound == 2) {
                              ItemReq2 = ", " + ItemManager.Items[i].Name;
                              Item2 = i;
                              }
                              if (ReqFound == 3) {
                              ItemReq3 = " and " + ItemManager.Items[i].Name;
                              Item3 = i;
                              }
                          } else if (ReqFound == 0) {
                          ItemReqAny = "five different exclusive items";
                          ItemYour = "any ";
                          }
                          }
                          }
                          }
                          }
                          if (answer != "Cancel") {
                          Story summary = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "" + answer + "? " + ItemManager.Items[SwapItemNum].Desc, Pokedex.FindByName("Croagunk").ID, 0, 0);
                          StoryBuilder.AppendSaySegment(segment, "In order to obtain " + answer + ", one must swap " + ItemReq1 + ItemReq2 + ItemReq3 + ItemReqAny + " for it.", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);

                          segment.AppendToStory(summary);
                          StoryManager.PlayStory(client, summary);
                         }
                          if (answer == "Cancel") {
                          Story cancel = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                          segment.AppendToStory(cancel);
                          StoryManager.PlayStory(client, cancel);
                          }

                  }
                        break;
                      case "SwapShopReq": {
                      string ItemReq1;
                      ItemReq1 = "";
                      string ItemReq2;
                      ItemReq2 = "";
                      string ItemReq3 = "";
                      ItemReq3 = "";
                      string ItemReqAny;
                      ItemReqAny = "";
                      string ItemYour;
                      ItemYour = "";
                      int ReqFound = 0;
                      int Item1 = 0;
                      int Item2 = 0;
                      int Item3 = 0;
                      int SwapItemNum = 0;
                      string SwapItem;
                      if (answer != "Cancel") {
                      SwapItem = answer;
                      List<string> choices = new List<string>();
                      choices.Add("Yes, I want to Swap for " + answer);
                      choices.Add("Cancel");
                      for (int c = 998; c < 1838; c++) {
                            if (ItemManager.Items[c].Name.Contains(answer)) {
                            int PokemonID = ItemManager.Items[c].ReqData1;
                            SwapItemNum = c;
                        for (int i = 998; i < 1838; i++) {
                         if (PokemonID == ItemManager.Items[i].ReqData1) {
                           if (ItemManager.Items[i].Rarity == 1 || ItemManager.Items[i].Rarity == 2) {
                            ReqFound = ReqFound + 1;
                              if (ReqFound == 1) {
                              ItemReq1 = ItemManager.Items[i].Name;
                              ItemYour = "your ";
                              Item1 = i;
                              }
                              if (ReqFound == 2) {
                              ItemReq2 = ", " + ItemManager.Items[i].Name;
                              Item2 = i;
                              }
                              if (ReqFound == 3) {
                              ItemReq3 = " and " + ItemManager.Items[i].Name;
                              Item3 = i;
                              }
                          } else if (ReqFound == 0) {
                          ItemReqAny = "five different exclusive items";
                          ItemYour = "any ";
                          }
                          }
                          }
                          }
                          }

                             Messenger.AskQuestion(client, "SwapShopActive", "So you want " + answer + " and wanna swap " + ItemYour + ItemReq1 + ItemReq2 + ItemReq3 + ItemReqAny + " for that? It'll cost ya 5000 Poké, too. Is that okay?", Pokedex.FindByName("Croagunk").ID, choices.ToArray());
                             }
                          else {
                          Story cancel = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "You don't wanna swap? Meh-heh-heh... I get it!", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          segment.AppendToStory(cancel);
                          StoryManager.PlayStory(client, cancel);
                          }

                  }
                        break;
                      case "SwapShopActive" : {
                             string ItemName;
                             ItemName = answer.Replace("Yes, I want to Swap for ", "");
                             int ReqFound = 0;
                             int SwapItemNum = 0;
                             int Item1 = 0;
                             int Item2 = 0;
                             int Item3 = 0;
                             int PokemonID = 0;
                      for (int c = 998; c < 1838; c++) {
                            if (ItemManager.Items[c].Name.Contains(ItemName)) {
                             PokemonID = ItemManager.Items[c].ReqData1;
                            SwapItemNum = c;
                        for (int i = 998; i < 1838; i++) {
                         if (PokemonID == ItemManager.Items[i].ReqData1) {
                           if (ItemManager.Items[i].Rarity == 1 || ItemManager.Items[i].Rarity == 2) {
                            ReqFound = ReqFound + 1;
                              if (ReqFound == 1) {
                              Item1 = i;
                              }
                              if (ReqFound == 2) {
                              Item2 = i;
                              }
                              if (ReqFound == 3) {
                              Item3 = i;
                              }
                          }
                          }
                          }
                          }
                          }
                          if (answer != "Cancel") {
                              if (ReqFound > 0) {
                                      if (client.Player.HasItem(Item1) > 0 && client.Player.HasItem(Item2) > 0 && client.Player.HasItem(Item3) > 0 && client.Player.HasItem(1) >= 5000) {
                              		  Messenger.SpellAnim(491, client.Player.MapID, client.Player.X, client.Player.Y);
                                      Story story = new Story();
                                      StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                      StoryBuilder.AppendRunScriptAction(segment, 5, "magic162.ogg", "", "", true);
                                      StoryBuilder.AppendPauseAction(segment, 500);
                                      StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh! Seems that we brewed up a successful swap there! Here... Take your unbelievably valuable " + ItemName + "! Treat it with respect! Meh-heh-heh!", Pokedex.FindByName("Croagunk").ID, 0, 0);
                                      StoryBuilder.AppendPauseAction(segment, 500);
                                      StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                                      segment.AppendToStory(story);
                                      StoryManager.PlayStory(client, story);
                                      client.Player.TakeItem(Item1, 1);
                                      client.Player.TakeItem(Item2, 1);
                                      client.Player.TakeItem(Item3, 1);
                                      client.Player.TakeItem(1, 5000);
                                      client.Player.GiveItem(SwapItemNum, 1, "", false);
                                    }
                                    else {
                                      Story no = new Story();
                                      StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                      StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh? I'm sorry... You don't seem to have the required items for the Swap process...", Pokedex.FindByName("Croagunk").ID, 0, 0);
                                      StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                                      segment.AppendToStory(no);
                                      StoryManager.PlayStory(client, no);
                                      }
                                      }
                               else {
                               int ItemCount = 0;
                               int Take1 = 0;
                               int Take2 = 0;
                               int Take3 = 0;
                               int Take4 = 0;
                               int Take5 = 0;
                                for (int b = 1; b <= client.Player.Inventory.Count; b++) {
                                int i = client.Player.Inventory[b].Num;
                                 if (i >= 998 && i < 1838) {
                                     if (client.Player.HasItem(i) > 0 && ItemCount == 0) {
                                      Take1 = i;
                                      ItemCount++;
                                      }
                                     if (client.Player.HasItem(i) > 0 && i != Take1 && ItemCount == 1) {
                                      Take2 = i;
                                      ItemCount++;
                                      }
                                     if (client.Player.HasItem(i) > 0 && i != Take1 && i != Take2 && ItemCount == 2) {
                                      Take3 = i;
                                      ItemCount++;
                                      }
                                     if (client.Player.HasItem(i) > 0 && i != Take1 && i != Take2 && client.Player.Inventory[b].Num != Take3 && ItemCount == 3) {
                                      Take4 = i;
                                      ItemCount++;
                                      }
                                     if (client.Player.HasItem(i) > 0 && i != Take1 && i != Take2 && client.Player.Inventory[b].Num != Take3 && client.Player.Inventory[b].Num != Take4 && ItemCount >= 4) {
                                      Take5 = i;
                                      ItemCount++;
                                      }
                                      }
                               }
                                  //  Messenger.PlayerMsg(client, Take1 + "|" + Take2 + "|" + Take3 + "|" + Take4 + "|" + Take5 + "|" +ItemCount, Text.Yellow); // Debug Message
                                   if (ItemCount >= 5 && client.Player.HasItem(1) >= 5000) {
                                        Messenger.SpellAnim(491, client.Player.MapID, client.Player.X, client.Player.Y);
                                        Story yes = new Story();
                                        StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                        StoryBuilder.AppendRunScriptAction(segment, 5, "magic162.ogg", "", "", true);
                                        StoryBuilder.AppendPauseAction(segment, 500);
                                        StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh! Seems that we brewed up a successful swap there! Here... Take your unbelievably valuable " + ItemName + "! Treat it with respect! Meh-heh-heh!", Pokedex.FindByName("Croagunk").ID, 0, 0);
                                        StoryBuilder.AppendPauseAction(segment, 500);
                                        StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                                        segment.AppendToStory(yes);
                                        StoryManager.PlayStory(client, yes);
                                        client.Player.TakeItem(Take1, 1, true);
                                        client.Player.TakeItem(Take2, 1, true);
                                        client.Player.TakeItem(Take3, 1, true);
                                        client.Player.TakeItem(Take4, 1, true);
                                        client.Player.TakeItem(Take5, 1, true);
                                        client.Player.TakeItem(1, 5000, true);
                                        client.Player.GiveItem(SwapItemNum, 1, "", false);
                                        } else if (ItemCount < 5 || client.Player.HasItem(1) < 5000) {
                                          Story no = new Story();
                                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                                          StoryBuilder.AppendSaySegment(segment, "Meh-heh-heh? I'm sorry... You don't seem to have the required items for the Swap process...", Pokedex.FindByName("Croagunk").ID, 0, 0);
                                          StoryBuilder.AppendRunScriptAction(segment, 90, "", "", "", true);
                                     	  segment.AppendToStory(no);
                                     	  StoryManager.PlayStory(client, no);
                                    }
                                    }
                                    }
                          else {
                          Story cancel = new Story();
                          StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          StoryBuilder.AppendSaySegment(segment, "You don't wanna swap? Meh-heh-heh... I get it!", Pokedex.FindByName("Croagunk").ID, 0, 0);
                          segment.AppendToStory(cancel);
                          StoryManager.PlayStory(client, cancel);
                          }
                        }
                        break;
                      case "Spiritomb": {
                      		if (answer == "Yes") {
                      			Messenger.SpellAnim(61, client.Player.MapID, client.Player.X, client.Player.Y);
                                MapNpcPreset npc = new MapNpcPreset();
                                npc.SpawnX = 10;
                                npc.SpawnY = 5;
                                npc.NpcNum = 1748;
                                npc.MinLevel = 30;
                                npc.MaxLevel = 30;
                                client.Player.Map.SpawnNpc(npc);
                                client.Player.TakeItem(251, 1);
                            }
                        }
                        break;
                    case "Candycane": {
                        if (answer == "Yes") {

                        } else if (answer == "Maybe later.") {
              						Story story = new Story();
                          		StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          		StoryBuilder.AppendSaySegment(segment, "Ah, okay! See you next time!", Pokedex.FindByName("Delibird").ID, 0, 0);
                          		segment.AppendToStory(story);
                          		StoryManager.PlayStory(client, story);

                        } else if (answer == "Ah, get lost.") {
                                Story story = new Story();
                          		StoryBuilderSegment segment = StoryBuilder.BuildStory();
                          		StoryBuilder.AppendSaySegment(segment, "...", Pokedex.FindByName("Delibird").ID, 0, 0);
                          		StoryBuilder.AppendSaySegment(segment, "Delibird will remember this.", -1, 0, 0);
                          		segment.AppendToStory(story);
                          		StoryManager.PlayStory(client, story);
                        }
                    }
                    break;

                    }
            } catch (Exception ex) {
                Messenger.AdminMsg("Error: QuestionResult" + ex.ToString(), Text.Black);
            }
        }
Example #32
0
        internal static void ProcessData(Client client, string[] parse)
        {
            //string[] parse = data.Split(TcpPacket.SEP_CHAR);
            if (client.Player == null)
            {
                if (parse[0].ToLower() == "requestnews")
                {
                    Messenger.SendNews(client);
                    client.InitializeClientSystem();
                    return;
                }
            }
            if (client.Player == null)
            {
                Messenger.PlainMsg(client, "Unable to initialize connection. Please retry.", Enums.PlainMsgType.MainMenu);
                return;
            }
            if (!client.Player.LoggedIn)
            {
                #region Not Logged In
                switch (parse[0].ToLower())
                {
                    case "clienterror":
                        {
                            string error = parse[1];
                            error += "\r\n\r\n------- ERROR REPORT END -------\r\n\r\n";
                            Logging.Logger.AppendToLog("/Client Error Logs/" + DateTime.Now.ToShortDateString().Replace("/", "-") + "/log.txt", error);
                        }
                        break;
                    case "requestnews":
                        Messenger.SendNews(client);
                        client.InitializeClientSystem();
                        break;
                    #region Logging In
                    case "login":
                        {
                            if (Globals.ServerClosed)
                            {
                                Messenger.PlainMsg(client, "Server is closed at the moment!", Enums.PlainMsgType.MainMenu);
                                return;
                            }
                            if (ClientManager.CanLogin(parse[1]))
                            {
                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    // Check if the account exists
                                    if (PlayerManager.AccountExists(dbConnection, parse[1]) == false)
                                    {
                                        Messenger.PlainMsg(client, "This account does not exist.", Enums.PlainMsgType.MainMenu);
                                        return;
                                    }
                                    // Check the client version
                                    if (parse[3].ToInt() < Constants.CLIENT_VERSION)
                                    {
                                        Messenger.PlainMsg(client, "Your client is outdated. Please update your client.", Enums.PlainMsgType.MainMenu);
                                        return;
                                    }
                                    // Verify that the client used is a valid one
                                    if (parse[10] != "PMDCPCore")
                                    {
                                        Messenger.PlainMsg(client, "Bad client version! Did you edit the source code?", Enums.PlainMsgType.MainMenu);
                                        return;
                                    }

            #if !DEBUG
                                    if (ClientManager.IsMacAddressConnected(parse[11])) {
                                        Messenger.PlainMsg(client, "You are already playing on this computer!", Enums.PlainMsgType.MainMenu);
                                        return;
                                    }

            #endif

                                    string password = Security.Hash.GenerateMD5Hash(parse[2]).Trim();
                                    if (PlayerManager.IsPasswordCorrect(dbConnection, parse[1], password))
                                    {

                                        client.SetMacAddress(parse[11]);
                                        client.SetBiosIdentification(parse[12]);
                                        // Check if they aren't banned
                                        if (Bans.IsIPBanned(dbConnection, client) == Enums.BanType.Ban || Bans.IsMacBanned(dbConnection, client) == Enums.BanType.Ban)
                                        {
                                            Logging.ChatLogger.AppendToChatLog("Staff", "IP: " + client.IP + " Mac: " + client.MacAddress + " attempted to log on, but was banned.");
                                            Messenger.PlainMsg(client, "You can't enter this world!", Enums.PlainMsgType.MainMenu);
                                            client.SetMacAddress("");
                                            client.SetBiosIdentification("");
                                            return;
                                        }

                                        client.Player.AccountName = parse[1];

                                        client.Player.SetSystemInfo(parse[8], parse[9], parse[10]);
                                        Messenger.SendChars(dbConnection, client);
                                    }
                                    else
                                    {
                                        Messenger.PlainMsg(client, "Invalid password.", Enums.PlainMsgType.MainMenu);
                                    }
                                }
                            }
                            else
                            {
                                Messenger.PlainMsg(client, "You are already in the Pokémon world!", Enums.PlainMsgType.MainMenu);
                            }
                        }
                        break;
                    case "charlistrequest":
                        {
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                Messenger.SendChars(dbConnection, client);
                            }
                        }
                        break;
                    case "usechar":
                        {
                            int charNum = parse[1].ToInt();
                            if (charNum < 1 || charNum > 3)
                                return;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                if (client.Player.CharacterExists(dbConnection, charNum))
                                {
                                    client.Player.LoadCharacter(dbConnection, parse[1].ToInt(1));
                                    if (Globals.GMOnly)
                                    {
                                        if (client.Player.Access == Enums.Rank.Normal)
                                        {
                                            Messenger.PlainMsg(client, "The server is only open to GMs at the moment!", Enums.PlainMsgType.MainMenu);
                                            client.CloseConnection();
                                            //PlayerManager.Players.RemovePlayer(client);
                                            //PlayerManager.Players.AddPlayer(client);
                                            return;
                                        }
                                    }

                                    if (ClientManager.IsCharacterLoggedIn(client.Player.CharID))
                                    {
                                        Messenger.PlainMsg(client, "You are already playing on this computer!", Enums.PlainMsgType.MainMenu);
                                        return;
                                    }

                                    if (Bans.IsCharacterBanned(dbConnection, client.Player.CharID) == Enums.BanType.Ban)
                                    {
                                        Messenger.PlainMsg(client, "This character can't enter the Pokémon world!", Enums.PlainMsgType.MainMenu);
                                        client.Player = new Player(client);
                                        client.CloseConnection();
                                        return;
                                    }

                                    client.Player.Statistics.HandleLogin(client.Player.GetOSVersion(), client.Player.GetDotNetVersion(), client.MacAddress, client.IP);

                                    Messenger.SendJoinGame(client);

                                    //Globals.ServerUI.AddLog(PlayerManager.Players.GetPlayer(client).mLogin + "/" + PlayerManager.Players.GetPlayer(client).mName + " has started playing!");
                                }
                                else
                                {
                                    Messenger.PlainMsg(client, "This character hasn't been sent to the Pokémon world yet!", Enums.PlainMsgType.Chars);
                                    return;
                                }
                            }
                        }
                        break;
                    #endregion
                    #region Account Editing
                    case "gatglasses":
                        {//typo?  then again, we don't need classes...
                            Messenger.SendNewCharClasses(client);
                        }
                        break;
                    case "createaccount":
                        {
                            if (client.Player.LoggedIn == false)
                            {
                                string name = parse[1];
                                string password = parse[2];
                                string email = parse[3];

                                for (int i = 0; i < name.Length; i++)
                                {
                                    int n = (int)Convert.ToChar(name.Substring(i, 1));

                                    if (n == 32 && (i == 0 || i == name.Length - 1))
                                    {
                                        Messenger.PlainMsg(client, "Names cannot begin or end with spaces.", Enums.PlainMsgType.NewAccount);
                                        return;
                                    }

                                    if ((n >= 65 & n <= 90) | (n >= 97 & n <= 122) | (n == 95) | (n == 32) | (n >= 48 & n <= 57))
                                    {
                                    }
                                    else
                                    {
                                        Messenger.PlainMsg(client, "Invalid name, only letters, numbers, spaces, and _ allowed in names.", Enums.PlainMsgType.NewAccount);
                                        return;
                                    }
                                }

                                if (name.Length < 3 || name.Length > 24)
                                {
                                    Messenger.PlainMsg(client, "Name must be between 3 and 24 letters long.", Enums.PlainMsgType.NewAccount);
                                    return;
                                }

                                // TODO: Add email support to account creation [HIGH]
                                //if (Email.Email.IsValidEmail(email) == false) {
                                //    Messenger.PlainMsg(client, "Invalid email.", Enums.PlainMsgType.NewAccount);
                                //    return;
                                //}

                                using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                {
                                    int result = PlayerManager.CreateNewAccount(dbConnection, name, password, "");
                                    if (result == -1)
                                    {
                                        Messenger.PlainMsg(client, "An error occurred while creating your account.", Enums.PlainMsgType.MainMenu);
                                    }
                                    else if (result == 0)
                                    {
                                        Messenger.PlainMsg(client, "Your account has been created!", Enums.PlainMsgType.MainMenu);
                                    }
                                    else if (result == 1)
                                    {
                                        Messenger.PlainMsg(client, "That account already exists!", Enums.PlainMsgType.MainMenu);
                                    }
                                }
                            }
                        }
                        break;
                    case "addchar":
                        {
                            string name = parse[1].Trim();
                            int sex = parse[2].ToInt(-1);
                            //int CharClass = parse[3].ToInt(-1); ((This should be removed too))
                            //int CharNum = parse[4].ToInt(-1);
                            int charNum = parse[3].ToInt(-1);

                            for (int i = 0; i < name.Length; i++)
                            {
                                int n = (int)Convert.ToChar(name.Substring(i, 1));

                                if (n == 32 && (i == 0 || i == name.Length - 1))
                                {
                                    Messenger.PlainMsg(client, "Names cannot begin or end with spaces.", Enums.PlainMsgType.NewChar);
                                    return;
                                }

                                if ((n >= 65 && n <= 90) || (n >= 97 && n <= 122) || (n == 95) || (n == 32) || (n >= 48 && n <= 57))
                                {
                                }
                                else
                                {
                                    //Messenger.SendNewCharClasses(client); ((More classes?))
                                    Messenger.PlainMsg(client, "Invalid name, only letters, numbers, spaces, and _ allowed in names.", Enums.PlainMsgType.NewChar);
                                    return;
                                }
                            }

                            if (name.Length < 3 || name.Length > 24)
                            {
                                Messenger.PlainMsg(client, "Name must be between 3 and 24 letters long.", Enums.PlainMsgType.NewChar);
                                return;
                            }

                            if (charNum < 1 || charNum > 3)
                            {
                                Messenger.PlainMsg(client, "Invalid character number", Enums.PlainMsgType.Chars);
                                return;
                            }

                            if ((sex < (int)Enums.Sex.Genderless) || (sex > (int)Enums.Sex.Female))
                            {
                                Messenger.PlainMsg(client, "Invalid gender", Enums.PlainMsgType.Chars);
                                return;
                            }

                            //if (CharClass < 0 || CharClass > Settings.MaxClasses) {
                            //Messenger.PlainMsg(client, "Invalid class", Enums.PlainMsgType.Chars);
                            //return;
                            //} ((this should be removed. We no longer use classes in the Add Character Window))

                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                if (client.Player.CharacterExists(dbConnection, charNum))
                                {
                                    Messenger.PlainMsg(client, "That character is already in the Pokémon world!", Enums.PlainMsgType.NewChar);
                                    return;
                                }

                                if (PlayerManager.CharacterNameExists(dbConnection, name))
                                {
                                    Messenger.PlainMsg(client, "There's already a character with that name!", Enums.PlainMsgType.NewChar);
                                    return;
                                }

                                client.Player.CreateCharacter(dbConnection, name, (Enums.Sex)sex, charNum, false);
                            }
                        }
                        break;
                    case "delchar":
                        {
                            int charNum = parse[1].ToInt(-1);

                            if (charNum < 1 || charNum > 3)
                            {
                                Messenger.PlainMsg(client, "Invalid character number", Enums.PlainMsgType.Chars);
                                return;
                            }

                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                if (client.Player.CharacterExists(dbConnection, charNum))
                                {
                                    PlayerManager.DeleteCharacter(dbConnection, client.Player.AccountName, charNum);
                                    Messenger.SendChars(dbConnection, client);
                                    Messenger.PlainMsg(client, "The character has been sent back from the Pokémon world, never to return.", Enums.PlainMsgType.Chars);
                                }
                                else
                                {
                                    Messenger.PlainMsg(client, "That character doesn't exist!", Enums.PlainMsgType.Chars);
                                }
                            }
                        }
                        break;
                    case "deleteaccount":
                        {
                            string name = parse[1];
                            string password = parse[2];

                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                if (PlayerManager.AccountExists(dbConnection, name) == false)
                                {
                                    Messenger.PlainMsg(client, "That account does not exist", Enums.PlainMsgType.MainMenu);
                                    return;
                                }

                                if (PlayerManager.IsPasswordCorrect(dbConnection, name, password) == false)
                                {
                                    Messenger.PlainMsg(client, "Incorrect password", Enums.PlainMsgType.MainMenu);
                                    return;
                                }

                                PlayerManager.DeleteAccount(dbConnection, name);
                            }
                            Messenger.PlainMsg(client, "Your account has been deleted!", Enums.PlainMsgType.MainMenu);
                        }
                        break;
                    case "passchange":
                        {
                            string name = parse[1];
                            string oldPass = Security.Hash.GenerateMD5Hash(parse[2]);
                            string newPass = Security.Hash.GenerateMD5Hash(parse[3]);

                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                if (PlayerManager.IsPasswordCorrect(dbConnection, name, oldPass))
                                {
                                    PlayerManager.ChangeAccountPassword(dbConnection, name, oldPass, newPass);
                                    client.Player = new Player(client);
                                    Messenger.PlainMsg(client, "Your password has been changed!", Enums.PlainMsgType.AccountOptions);
                                }
                                else
                                {
                                    Messenger.PlainMsg(client, "Unable to change password.", Enums.PlainMsgType.AccountOptions);
                                }
                            }
                        }
                        break;
                    #endregion
                }
                #endregion
            }
            else
            {
                #region Logged In
                switch (parse[0].ToLower())
                {
                    #region Movement
                    case "playermove":
                        {
                            if (client.Player.GettingMap)
                            {
                                return;
                            }
                            int dir = parse[1].ToInt();
                            int speed = parse[2].ToInt();

                            if (dir < 0 || dir > 3)
                            {
                                return;
                            }
                            if (speed < 0 || speed > 7)
                            {
                                return;
                            }

                            MovementProcessor.ProcessMovement(client, (Enums.Direction)dir, (Enums.Speed)speed, false);
                        }
                        break;
                    case "critmove":
                        {
                            if (client.Player.GettingMap)
                            {
                                return;
                            }
                            int dir = parse[1].ToInt();
                            int speed = parse[2].ToInt();

                            if (dir < 0 || dir > 3)
                            {
                                return;
                            }
                            if (speed < 0 || speed > 7)
                            {
                                return;
                            }

                            MovementProcessor.ProcessMovement(client, (Enums.Direction)dir, (Enums.Speed)speed, true);
                        }
                        break;
                    case "playerdir":
                        {
                            if (client.Player.GettingMap)
                            {
                                return;
                            }
                            int dir = parse[1].ToInt();
                            if (dir < 0 || dir > 3)
                            {
                                return;
                            }

                            client.Player.Direction = (Enums.Direction)dir;
                            PacketHitList hitlist = null;
                            PacketHitList.MethodStart(ref hitlist);
                            PacketBuilder.AppendPlayerDirExcept(client, hitlist);
                            PacketHitList.MethodEnded(ref hitlist);
                        }
                        break;
                    case "requestnewmap":
                        {
                            //if (client.Player.Map.MapType != Enums.MapType.Instanced) {
                            int dir = parse[1].ToInt();

                            if (dir < 0 || dir > 3)
                            {
                                return;
                            }

                            if (MovementProcessor.WillWalkOnWarp(client, (Enums.Direction)dir))
                            {
                                MovementProcessor.ProcessMovement(client, (Enums.Direction)dir, (Enums.Speed)1, true);
                            }
                            else
                            {
                                PacketHitList hitlist = null;
                                PacketHitList.MethodStart(ref hitlist);
                                PacketBuilder.AppendOwnXY(client, hitlist);
                                PacketBuilder.AppendPlayerLock(client, hitlist, false);
                                PacketHitList.MethodEnded(ref hitlist);
                            }
                        }
                        break;
                    case "needmap":
                        {
                            Messenger.NeedMapCheck(client, parse[1].ToBool());
                        }
                        break;
                    case "needmapseamless":
                        {
                            bool[] results = new bool[parse[1].ToInt()];
                            int n = 2;
                            for (int i = 0; i < results.Length; i++)
                            {
                                results[i] = parse[n].ToBool();
                                n += 1;
                            }
                            Messenger.NeedMapCheck(client, results);
                        }
                        break;
                    case "refresh":
                        {
                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "maploaded":
                        {
                            client.Player.Map.ProcessingPaused = true;
                        }
                        break;
                    #endregion
                    #region Attacking
                    case "attack":
                        {
                            if (client.Player.GettingMap) return;
                            client.Player.GetActiveRecruit().UseMove(-1);

                        }
                        break;
                    #endregion
                    #region Attacking - Moves
                    case "forgetspell":
                        {
                            // Spell slot
                            int n = parse[1].ToInt(-1);
                            // Prevent subscript out of range
                            if (n < 0 | n > Constants.MAX_PLAYER_MOVES)
                            {
                                Messenger.HackingAttempt(client, "Invalid Move Slot");
                                return;
                            }

                            if (client.Player.GetActiveRecruit().Moves[n].MoveNum == 0)
                            {
                                Messenger.PlayerMsg(client, "No move here.", Text.Red);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You have forgotten the move \"" + MoveManager.Moves[client.Player.GetActiveRecruit().Moves[n].MoveNum].Name.Trim() + "\"", Text.Green);
                                client.Player.GetActiveRecruit().Moves[n].MoveNum = 0;
                                client.Player.GetActiveRecruit().Moves[n].CurrentPP = -1;
                                client.Player.GetActiveRecruit().Moves[n].MaxPP = -1;
                                Messenger.SendPlayerMoves(client);
                            }

                        }
                        break;
                    case "swapmoves":
                        {
                            int oldMoveSlot = parse[1].ToInt(-1);
                            int newMoveSlot = parse[2].ToInt(-1);
                            if (oldMoveSlot > -1 && oldMoveSlot < 4 && newMoveSlot > -1 && newMoveSlot < 4)
                            {
                                RecruitMove oldMove = client.Player.GetActiveRecruit().Moves[oldMoveSlot];
                                RecruitMove newMove = client.Player.GetActiveRecruit().Moves[newMoveSlot];
                                client.Player.GetActiveRecruit().Moves[oldMoveSlot] = newMove;
                                client.Player.GetActiveRecruit().Moves[newMoveSlot] = oldMove;

                                Messenger.SendPlayerMoves(client);
                            }
                        }
                        break;
                    case "shiftspell":
                        {
                            // Spell slot
                            int n = parse[1].ToInt(-1);

                            // Prevent subscript out of range
                            if (n < 0 | n > Constants.MAX_PLAYER_MOVES)
                            {
                                Messenger.HackingAttempt(client, "Invalid Move Slot");
                                return;
                            }

                            //if (client.Player.GetActiveRecruit().Moves[n].MoveNum == 0) //~no need to check for blank space; you can move blank spaces
                            //{
                            //Messenger.PlayerMsg(client, "No move here.", Text.Red);
                            //}
                            //else
                            //{
                            int movingSpell = client.Player.GetActiveRecruit().Moves[n].MoveNum;
                            int movingSpellCurrentPP = client.Player.GetActiveRecruit().Moves[n].CurrentPP;
                            int movingSpellMaxPP = client.Player.GetActiveRecruit().Moves[n].MaxPP;

                            if (parse[2].ToBool() && n > 0)//shifting up
                            {
                                client.Player.GetActiveRecruit().Moves[n].MoveNum = client.Player.GetActiveRecruit().Moves[n - 1].MoveNum;
                                client.Player.GetActiveRecruit().Moves[n - 1].MoveNum = movingSpell;

                                client.Player.GetActiveRecruit().Moves[n].CurrentPP = client.Player.GetActiveRecruit().Moves[n - 1].CurrentPP;
                                client.Player.GetActiveRecruit().Moves[n - 1].CurrentPP = movingSpellCurrentPP;

                                client.Player.GetActiveRecruit().Moves[n].MaxPP = client.Player.GetActiveRecruit().Moves[n - 1].MaxPP;
                                client.Player.GetActiveRecruit().Moves[n - 1].MaxPP = movingSpellMaxPP;

                                Scripting.ScriptManager.InvokeSub("OnMoveSwapped", client, n, n - 1);
                            }
                            else if (n < 3)//shifting down
                            {
                                client.Player.GetActiveRecruit().Moves[n].MoveNum = client.Player.GetActiveRecruit().Moves[n + 1].MoveNum;
                                client.Player.GetActiveRecruit().Moves[n + 1].MoveNum = movingSpell;

                                client.Player.GetActiveRecruit().Moves[n].CurrentPP = client.Player.GetActiveRecruit().Moves[n + 1].CurrentPP;
                                client.Player.GetActiveRecruit().Moves[n + 1].CurrentPP = movingSpellCurrentPP;

                                client.Player.GetActiveRecruit().Moves[n].MaxPP = client.Player.GetActiveRecruit().Moves[n + 1].MaxPP;
                                client.Player.GetActiveRecruit().Moves[n + 1].MaxPP = movingSpellMaxPP;

                                Scripting.ScriptManager.InvokeSub("OnMoveSwapped", client, n, n + 1);
                            }

                            Messenger.SendPlayerMoves(client);
                            //}
                        }
                        break;
                    case "cast":
                        {
                            if (client.Player.GettingMap) return;
                            client.Player.GetActiveRecruit().UseMove(parse[1].ToInt(-1));
                        }
                        break;
                    #endregion
                    #region Messages
                    case "broadcastmsg":
                        if (CanSayMsg(client, parse[1]))
                        {
                            Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.Global);

                            Logging.ChatLogger.AppendToChatLog("Global", client.Player.Name + ": " + parse[1]);

                            string playerName = client.Player.Name;
                            if (client.Player.Access != Enums.Rank.Normal)
                            {
                                playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                            }

                            Messenger.GlobalMsg("[Global] " + playerName + ": " + parse[1], Text.DarkGrey);
                        }
                        break;
                    case "saymsg":
                        if (CanSayMsg(client, parse[1]))
                        {
                            Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.Map);

                            Logging.ChatLogger.AppendToChatLog("Maps/Map " + client.Player.MapID, client.Player.Name + ": " + parse[1]);

                            string playerName = client.Player.Name;
                            if (client.Player.Access != Enums.Rank.Normal)
                            {
                                playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                            }

                            PacketHitList hitList = null;
                            PacketHitList.MethodStart(ref hitList);
                            IMap playerMap = client.Player.GetCurrentMap();
                            hitList.AddPacketToMap(playerMap, PacketBuilder.CreateChatMsg(playerName + ": " + parse[1], Text.White));
                            hitList.AddPacketToMap(playerMap, PacketBuilder.CreateSpeechBubble(parse[1], client));
                            PacketHitList.MethodEnded(ref hitList);
                        }
                        break;
                    case "emotemsg":
                        if (CanSayMsg(client, parse[1]))
                        {
                            Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.MeMsg);

                            Logging.ChatLogger.AppendToChatLog("Maps/Map " + client.Player.MapID, "(MeMsg) " + client.Player.Name + " " + parse[1]);

                            string playerName = client.Player.Name;
                            if (client.Player.Access != Enums.Rank.Normal)
                            {
                                playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                            }

                            Messenger.MapMsg(client.Player.MapID, playerName + " " + parse[1], Text.Blue);
                        }
                        break;
                    case "globalmsg":
                        if (CanSayMsg(client, parse[1]))
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.Announcement);

                                Logging.ChatLogger.AppendToChatLog("Global", "(Announcement) " + client.Player.Name + ": " + parse[1]);

                                string playerName = client.Player.Name;
                                if (client.Player.Access != Enums.Rank.Normal)
                                {
                                    playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                                }

                                Messenger.GlobalMsg("(Announcement) " + playerName + ": " + parse[1], Text.Green);
                            }
                        }
                        break;
                    case "adminmsg":
                        if (CanSayMsg(client, parse[1]))
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {

                                Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.Staff);

                                Logging.ChatLogger.AppendToChatLog("Staff", client.Player.Name + ": " + parse[1]);

                                string playerName = client.Player.Name;
                                if (client.Player.Access != Enums.Rank.Normal)
                                {
                                    playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                                }

                                Messenger.AdminMsg("[Staff] " + playerName + ": " + parse[1], Text.Cyan);
                            }
                        }
                        break;
                    case "guildmsg":
                        if (CanSayMsg(client, parse[1]) && !string.IsNullOrEmpty(client.Player.GuildName))
                        {
                            Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[1], Enums.ChatMessageType.Guild);

                            //Messenger.PlayerMsg(client, client.Player[client].mName + " (" + client.Player[client].mGuildName + ") " + parse[1], Text.Green);
                            Logging.ChatLogger.AppendToChatLog("Guild Chat/" + client.Player.GuildName, "(" + client.Player.GuildName + ") " + client.Player.Name + parse[1]);

                            string playerName = client.Player.Name;
                            if (client.Player.Access != Enums.Rank.Normal)
                            {
                                playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                            }

                            foreach (Client i in ClientManager.GetClients())
                            {
                                if (i.Player.GuildName == client.Player.GuildName)
                                {
                                    Messenger.PlayerMsg(i, "(" + client.Player.GuildName + ") " + playerName + parse[1], Text.Green);
                                }
                            }
                        }
                        break;
                    case "playermsg":
                        {
                            if (CanSayMsg(client, parse[2]))
                            {
                                Client msgto = ClientManager.FindClient(parse[1]);
                                if (msgto == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else if (msgto == client)
                                {
                                    string sexString = "";
                                    if (client.Player.GetActiveRecruit().Sex == Enums.Sex.Genderless)
                                    {
                                        sexString = "it";
                                    }
                                    else if (client.Player.GetActiveRecruit().Sex == Enums.Sex.Male)
                                    {
                                        sexString = "him";
                                    }
                                    else if (client.Player.GetActiveRecruit().Sex == Enums.Sex.Female)
                                    {
                                        sexString = "her";
                                    }
                                    Messenger.MapMsg(client.Player.MapID, client.Player.Name + " begins to mumble to " + sexString + "self, what a wierdo...", Text.White);
                                }
                                else
                                {
                                    Scripting.ScriptManager.InvokeSub("OnChatMessageRecieved", client, parse[2], Enums.ChatMessageType.PM);

                                    Logging.ChatLogger.AppendToChatLog("PM/" + client.Player.Name, "(" + client.Player.Name + " tells " + msgto.Player.Name + ") " + parse[2]);

                                    string playerName = client.Player.Name;
                                    if (client.Player.Access != Enums.Rank.Normal)
                                    {
                                        playerName = "[c][" + Ranks.GetRankColor(client.Player.Access).ToArgb() + "]" + client.Player.Name + "[/c]";
                                    }

                                    string playerToName = msgto.Player.Name;
                                    if (msgto.Player.Access != Enums.Rank.Normal)
                                    {
                                        playerToName = "[c][" + Ranks.GetRankColor(msgto.Player.Access).ToArgb() + "]" + msgto.Player.Name + "[/c]";
                                    }

                                    Messenger.PlayerMsg(client, "You tell " + playerToName + ", '" + parse[2] + "'", Text.Pink);
                                    Messenger.PlayerMsg(msgto, playerName + " tells you, '" + parse[2] + "'", Text.Pink);
                                }

                            }
                        }
                        break;
                    #endregion
                    #region Recruits
                    case "requestactivecharswap":
                        {//perhaps put a time requirement for switching...
                            if (client.Player.GettingMap) return;
                            //if (client.Player.PK == false) {
                            client.Player.SwapActiveRecruit(parse[1].ToInt(1));
                            //} else {
                            //    Messenger.PlayerMsg(client, "An outlaw can't switch Pokémon!", Text.BrightRed);
                            //}
                        }
                        break;
                    case "switchleader":
                        {
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Assembly)
                            {
                                //if (client.Player.PK == false) {
                                client.Player.SwapLeader(parse[1].ToInt(1));

                                //} else {
                                //    Messenger.PlayerMsg(client, "An outlaw can't switch leaders!", Text.BrightRed);
                                //}
                            }
                            else
                            {
                                Messenger.HackingAttempt(client, "Player not in Assembly");
                            }
                        }
                        break;
                    case "addtoteam":
                        if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Assembly)
                        {
                            int teamSlot = parse[1].ToInt(-1);
                            client.Player.AddToTeam(parse[2].ToInt(-1), teamSlot);
                            if (client.Player.Team[teamSlot] != null && client.Player.Team[teamSlot].Loaded)
                            {
                                client.Player.Team[teamSlot].HP = client.Player.Team[teamSlot].MaxHP;
                            }
                            Messenger.SendActiveTeam(client);
                            Messenger.SendStats(client);
                            Messenger.SendAllRecruits(client);
                        }
                        else
                        {
                            Messenger.SendPlayerData(client);
                            Messenger.HackingAttempt(client, "Player not in Assembly");
                        }
                        break;
                    case "removefromteam":
                        client.Player.RemoveFromTeam(parse[1].ToInt(-1));

                        break;
                    case "standby":
                        client.Player.RemoveFromTeam(parse[1].ToInt(-1));
                        Messenger.SendAllRecruits(client);
                        break;
                    case "releaserecruit":
                        client.Player.RequestedRecruit = new Recruit(client);
                        client.Player.RequestedRecruit.RecruitIndex = parse[1].ToInt(-1);
                        Messenger.AskQuestion(client, "ReleasePokemon", "Are you sure you want to release this recruit?", -1);
                        break;
                    case "changerecruitname":
                        if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Assembly)
                        {
                            if (client.Player.Muted == false)
                            {
                                if (parse[2].Length >= 3 && parse[2].Length <= 24)
                                {
                                    client.Player.ChangeRecruitName(parse[1].ToInt(-1), parse[2]);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Name must be between 3 and 24 letters long.", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You cannot change nicknames while muted!", Text.BrightRed);
                            }
                        }
                        else
                        {
                            Messenger.SendPlayerData(client);
                            Messenger.HackingAttempt(client, "Player not in Assembly");
                        }
                        break;
                    #endregion
                    #region Missions
                    case "acceptmission":
                        {
                            if (client.Player.Map.Moral == Enums.MapMoral.House || client.Player.Map.Moral == Enums.MapMoral.Safe)
                            {
                                int slot = parse[1].ToInt(-1);
                                if (slot > -1 && slot < client.Player.MissionBoard.BoardMissions.Count)
                                {
                                    bool taken = client.Player.JobList.AddJob(new WonderMails.WonderMailJob(client.Player.MissionBoard.BoardMissions[slot]));
                                    if (taken)
                                    {
                                        client.Player.MissionBoard.BoardMissions.RemoveAt(slot);
                                        Messenger.SendRemovedMission(client, slot);
                                        Messenger.SendNewJob(client);
                                    }
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't accept a job here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "startmission":
                        {
                            if (client.Player.Map.Moral == Enums.MapMoral.House || client.Player.Map.Moral == Enums.MapMoral.Safe)
                            {
                                int slot = parse[1].ToInt(-1);
                                if (slot > -1 && slot < client.Player.JobList.JobList.Count)
                                {
                                    client.Player.JobList.JobList[slot].Accepted = Enums.JobStatus.Taken;
                                    Messenger.SendJobAccept(client, slot);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't take a job here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "deletejob":
                        {
                            if (client.Player.Map.Moral == Enums.MapMoral.House || client.Player.Map.Moral == Enums.MapMoral.Safe)
                            {
                                int slot = parse[1].ToInt(-1);
                                if (slot > -1 && slot < client.Player.JobList.JobList.Count)
                                {
                                    client.Player.JobList.RemoveJob(slot);
                                    Messenger.SendDeleteJob(client, slot);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't delete a job here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "sendmission":
                        {
                            if (client.Player.Map.Moral == Enums.MapMoral.House || client.Player.Map.Moral == Enums.MapMoral.Safe)
                            {
                                Client target = ClientManager.FindClient(parse[2]);
                                if (target != null)
                                {
                                    if (target != client)
                                    {
                                        int slot = parse[1].ToInt(-1);
                                        if (target.Player.GetDungeonCompletionCount(client.Player.JobList.JobList[slot].Mission.DungeonIndex) > 0)
                                        {
                                            if (target.Player.JobList.JobList.Count < Constants.MAX_JOB_LIST)
                                            {
                                                if (Combat.MoveProcessor.IsInAreaRange(1, client.Player.X, client.Player.Y, target.Player.X, target.Player.Y))
                                                {

                                                    if (slot > -1 && slot < client.Player.JobList.JobList.Count)
                                                    {
                                                        client.Player.JobList.JobList[slot].SendsRemaining--;
                                                        if (client.Player.JobList.JobList[slot].SendsRemaining <= 0)
                                                        {
                                                            //send sends remaining
                                                            Messenger.SendRemainingJobSends(client, slot);
                                                        }
                                                        target.Player.JobList.AddJobSimple(new WonderMails.WonderMailJob(client.Player.JobList.JobList[slot]));
                                                        Messenger.PlayerMsg(client, "A Wonder Mail was sent to " + target.Player.Name + "!", Text.BrightGreen);
                                                        Messenger.PlayerMsg(target, client.Player.Name + " has sent you a Wonder Mail!", Text.BrightGreen);
                                                        Messenger.SendNewJob(target);
                                                    }

                                                }
                                                else
                                                {
                                                    Messenger.PlayerMsg(client, "You have to stand next to the player to send a Wonder Mail.", Text.BrightRed);
                                                }
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "That player's job list is full.", Text.BrightRed);
                                            }
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "That player has not yet completed the dungeon specified in the Wonder Mail.", Text.BrightRed);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "You can't send a Wonder Mail to yourself!", Text.BrightRed);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "There's no one online with that name.", Text.BrightRed);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't send a Wonder Mail here!", Text.BrightRed);
                            }
                        }
                        break;
                    case "canceljob":
                        {
                            if (client.Player.Map.Moral == Enums.MapMoral.House || client.Player.Map.Moral == Enums.MapMoral.Safe)
                            {
                                int slot = parse[1].ToInt(-1);
                                if (slot > -1 && slot < client.Player.JobList.JobList.Count)
                                {
                                    client.Player.JobList.JobList[slot].Accepted = Enums.JobStatus.Suspended;
                                    Messenger.SendJobAccept(client, slot);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "You can't cancel a job here!", Text.BrightRed);
                            }
                        }
                        break;
                    //case "requestmissioncode": {
                    //        int slot = parse[1].ToInt(-1);
                    //        if (slot > -1 && slot < client.Player.JobList.JobList.Count) {
                    //            if (client.Player.JobList.JobList[slot] != null) {
                    //                WonderMails.IssuedWonderMailEntry entry = WonderMails.WonderMailSystem.FindIssuedWonderMailByCode(client.Player.JobList.JobList[slot].Mission.EncryptedCode);
                    //                if (entry == null) {
                    //                    // This code has not yet been issued
                    //                } else {

                    //                }

                    //                Messenger.SendMissionCode(client, client.Player.JobList.JobList[slot].Mission);
                    //            }
                    //        }
                    //    }
                    //    break;
                    #endregion
                    #region Misc
                    case "ping":
                        //Messenger.SendDataTo(client, TcpPacket.CreatePacket("ping"));
                        break;
                    case "search":
                        {
                            int X = parse[1].ToInt(-1);
                            int Y = parse[2].ToInt(-1);

                            IMap map = client.Player.GetCurrentMap();

                            // Prevent subscript out of range
                            if (X < 0 || X > map.MaxX || Y < 0 || Y > map.MaxY)
                            {
                                return;
                            }

                            // Check for a player
                            foreach (Client i in map.GetClients())
                            {
                                if (i.IsPlaying() && map == i.Player.Map && i.Player.X == X && i.Player.Y == Y)
                                {
                                    // Consider the player
                                    if (MovementProcessor.CanCharacterSeeCharacter(map, client.Player.GetActiveRecruit(), i.Player.GetActiveRecruit()))
                                    {
                                        if (MovementProcessor.CanCharacterIdentifyCharacter(map, client.Player.GetActiveRecruit(), i.Player.GetActiveRecruit()))
                                        {
                                            if (i == client)
                                            {
                                                Messenger.PlayerMsg(client, "You look upon yourself.", Text.Yellow);
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "You see " + i.Player.Name + ".", Text.Yellow);
                                                if (i.Player.GetActiveRecruit().Level >= client.Player.GetActiveRecruit().Level + 5)
                                                {
                                                    Messenger.PlayerMsg(client, "This Pokémon appears to be much more experienced than you.", Text.BrightRed);
                                                }
                                                else if (i.Player.GetActiveRecruit().Level > client.Player.GetActiveRecruit().Level)
                                                {
                                                    Messenger.PlayerMsg(client, "This Pokémon appears to be slightly more experienced than you.", Text.Yellow);
                                                }
                                                else if (i.Player.GetActiveRecruit().Level == client.Player.GetActiveRecruit().Level)
                                                {
                                                    Messenger.PlayerMsg(client, "This Pokémon seems to be about as experienced as you.", Text.White);
                                                }
                                                else if (client.Player.GetActiveRecruit().Level >= i.Player.GetActiveRecruit().Level + 5)
                                                {
                                                    Messenger.PlayerMsg(client, "This Pokémon appears much less experienced than you.", Text.BrightBlue);
                                                }
                                                else if (client.Player.GetActiveRecruit().Level > i.Player.GetActiveRecruit().Level)
                                                {
                                                    Messenger.PlayerMsg(client, "This Pokémon appears slightly less experienced than you.", Text.Yellow);
                                                }
                                            }
                                            return;
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "You see a Pokémon.", Text.Yellow);
                                            return;
                                        }
                                    }
                                }
                            }

                            // Check for an npc
                            for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                            {
                                if (map.ActiveNpc[i].Num > 0)
                                {
                                    if (map.ActiveNpc[i].X == X && map.ActiveNpc[i].Y == Y)
                                    {
                                        if (MovementProcessor.CanCharacterSeeCharacter(map, client.Player.GetActiveRecruit(), map.ActiveNpc[i]))
                                        {
                                            if (MovementProcessor.CanCharacterIdentifyCharacter(map, client.Player.GetActiveRecruit(), map.ActiveNpc[i]))
                                            {
                                                Messenger.PlayerMsg(client, "You see a " + NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + ".", Text.Yellow);

                                                if (!map.RecruitEnabled)
                                                {
                                                    Messenger.PlayerMsg(client, NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + " cannot be recruited in this area.", Text.Yellow);

                                                }
                                                else if (map.ActiveNpc[i].Level >= client.Player.GetActiveRecruit().Level)
                                                {
                                                    Messenger.PlayerMsg(client, NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + "'s level is too high for you to recruit it.", Text.Yellow);

                                                }
                                                else if (NpcManager.Npcs[map.ActiveNpc[i].Num].RecruitRate != 0)
                                                {
                                                    int recruitRate = NpcManager.Npcs[map.ActiveNpc[i].Num].RecruitRate;
                                                    //Messenger.PlayerMsg(client, NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + "'s recruit rate is " + NpcManager.Npcs[map.ActiveNpc[i].Num].RecruitRate + " (+" + client.Player.GetRecruitBonus() + ")", Text.Yellow);
                                                    Messenger.PlayerMsg(client, "You have a " + (recruitRate / 10f) + "% of recruiting " + NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + "!", Text.Yellow);
                                                }
                                                else
                                                {
                                                    Messenger.PlayerMsg(client, NpcManager.Npcs[map.ActiveNpc[i].Num].Name.Trim() + " is not recruitable.", Text.Yellow);
                                                }
                                                return;
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "You see a Pokémon.", Text.Yellow);
                                                return;
                                            }
                                        }
                                    }
                                }
                            }

                            for (int i = 0; i < Constants.MAX_MAP_ITEMS; i++)
                            {
                                if (map.ActiveItem[i].Num > 0/* && !map.ActiveItem[i].Hidden*/)
                                {
                                    if (map.ActiveItem[i].X == X && map.ActiveItem[i].Y == Y)
                                    {
                                        if (MovementProcessor.CanCharacterSeeDestination(map, client.Player.GetActiveRecruit(), X, Y) && !map.ActiveItem[i].Hidden)
                                        {
                                            if (MovementProcessor.CanCharacterIdentifyDestination(map, client.Player.GetActiveRecruit(), X, Y) && !map.ActiveItem[i].Hidden)
                                            {
                                                if (map.ActiveItem[i].Sticky)
                                                {
                                                    Messenger.PlayerMsg(client, "You see a x" + ItemManager.Items[map.ActiveItem[i].Num].Name.Trim() + ".", Text.Yellow);
                                                    return;
                                                }
                                                else
                                                {
                                                    Messenger.PlayerMsg(client, "You see a " + ItemManager.Items[map.ActiveItem[i].Num].Name.Trim() + ".", Text.Yellow);
                                                    return;
                                                }
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "You notice an item.", Text.Yellow);
                                                return;
                                            }
                                        }
                                    }
                                }
                            }

                            Scripting.ScriptManager.InvokeSub("OnClick", client, map, X, Y);
                        }
                        break;
                    case "mapgetitem":
                        {
                            // Check for scripted signs
                            if (client.Player.GettingMap) return;
                            IMap map = client.Player.GetCurrentMap();
                            int newX = client.Player.X;
                            int newY = client.Player.Y;
                            Enums.Direction dir = client.Player.Direction;
                            switch (client.Player.Direction)
                            {
                                case Enums.Direction.Up:
                                    newY--;
                                    break;
                                case Enums.Direction.Down:
                                    newY++;
                                    break;
                                case Enums.Direction.Left:
                                    newX--;
                                    break;
                                case Enums.Direction.Right:
                                    newX++;
                                    break;
                            }
                            if (newX >= 0 && newX < map.MaxX && newY >= 0 && newY < map.MaxY)
                            {
                                if (map.Tile[newX, newY].Type == Enums.TileType.ScriptedSign)
                                {
                                    Scripting.ScriptManager.InvokeSub("ScriptedSign", client, map.Tile[newX, newY].Data1, map.Tile[newX, newY].String1, map.Tile[newX, newY].String2, map.Tile[newX, newY].String3, dir);
                                }
                                else if (map.Tile[newX, newY].Type == Enums.TileType.Key)
                                {
                                    bool moveUsed = false;
                                    for (int i = 0; i < client.Player.GetActiveRecruit().Moves.Length; i++)
                                    {
                                        if (client.Player.GetActiveRecruit().Moves[i].MoveNum > -1)
                                        {
                                            Move move = MoveManager.Moves[client.Player.GetActiveRecruit().Moves[i].MoveNum];
                                            if (move.KeyItem > 0)
                                            {
                                                if (move.KeyItem == map.Tile[newX, newY].Data1)
                                                {
                                                    Messenger.AskQuestion(client, "UseMoveKeyOnEnter", "Would you like to use " + move.Name + "?", -1, new string[] { "Yes", "No" });
                                                    moveUsed = true;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    if (moveUsed == false)
                                    {
                                        for (int i = 1; i <= client.Player.MaxInv; i++)
                                        {
                                            if (client.Player.Inventory[i].Num == map.Tile[newX, newY].Data1)
                                            {
                                                if (ItemManager.Items[client.Player.Inventory[i].Num].Type == Enums.ItemType.Key)
                                                {
                                                    Messenger.AskQuestion(client, "UseKeyOnEnter", "Would you like to use your " + ItemManager.Items[client.Player.Inventory[i].Num].Name + " to unlock the door?", -1, new string[] { "Yes", "No" });
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            client.Player.PickupItem();
                        }
                        break;
                    case "mapdropitem":
                        {
                            if (client.Player.GettingMap) return;
                            int invNum = parse[1].ToInt();
                            int amount = parse[2].ToInt();

                            // Prevent hacking
                            if (invNum < 1 || invNum > client.Player.MaxInv || client.Player.Inventory[invNum].Num <= 0)
                            {
                                Messenger.HackingAttempt(client, "Invalid InvNum: " + invNum);
                                return;
                            }

                            // Prevent hacking
                            if (ItemManager.Items[client.Player.Inventory[invNum].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[invNum].Num].StackCap > 0)
                            {
                                // Check if money and if it is we want to make sure that they aren't trying to drop 0 value
                                if (amount <= 0)
                                {
                                    Messenger.PlayerMsg(client, "You must drop more than 0!", Text.BrightRed);
                                    return;
                                }

                                if (amount > client.Player.Inventory[invNum].Amount)
                                {
                                    Messenger.PlayerMsg(client, "You dont have that much to drop!", Text.BrightRed);
                                    return;
                                }
                            }

                            // Prevent hacking
                            if (ItemManager.Items[client.Player.Inventory[invNum].Num].Type != Enums.ItemType.Currency && ItemManager.Items[client.Player.Inventory[invNum].Num].StackCap > 0)
                            {
                                if (amount > client.Player.Inventory[invNum].Amount)
                                {
                                    Messenger.HackingAttempt(client, "Item amount modification");
                                    return;
                                }
                            }

                            client.Player.DropItem(invNum, amount);
                            //Messenger.SendStats(client);
                        }
                        break;
                    case "adventurelog":
                        {
                            Messenger.SendAdventureLog(client);
                        }
                        break;
                    case "checkarrows":
                        {
                            //int n = ArrowManagerBase.Arrows[parse[1].ToInt()].Pic;
                            //Messenger.SendDataToMap(client.Player.MapID, TcpPacket.CreatePacket("checkarrows", client.ToString(), n.ToString()));
                        }
                        break;
                    case "checkemoticons":
                        {
                            if (client.Player.Muted == false)
                            {
                                int n = EmoticonManagerBase.Emoticons[parse[1].ToInt()].Pic;
                                Messenger.SendDataToMap(client.Player.MapID, TcpPacket.CreatePacket("checkemoticons", client.ToString(), n.ToString()));
                            }
                        }
                        break;
                    case "clienterror":
                        {
                            string error = parse[1];
                            error += "\r\n\r\n------- ERROR REPORT END -------\r\n\r\n";
                            Logging.Logger.AppendToLog("/Client Error Logs/" + DateTime.Now.ToShortDateString().Replace("/", "-") + "/log.txt", error);
                        }
                        break;
                    #endregion
                    #region Scripts
                    case "hotscript1":
                        Scripting.ScriptManager.InvokeSub("HotScript1", client);
                        break;
                    case "hotscript2":
                        Scripting.ScriptManager.InvokeSub("HotScript2", client);
                        break;
                    case "hotscript3":
                        Scripting.ScriptManager.InvokeSub("HotScript3", client);
                        break;
                    case "hotscript4":
                        Scripting.ScriptManager.InvokeSub("HotScript4", client);
                        break;
                    case "questionresult":
                        if (!string.IsNullOrEmpty(client.Player.QuestionID))
                        {
                            string id = client.Player.QuestionID;
                            client.Player.QuestionID = "";

                            if (id.StartsWith("DropItem:"))
                            {
                                if (parse[1] == "Yes")
                                {
                                    string[] parseID = id.Split(':');
                                    int itemSlot = parseID[1].ToInt();
                                    int amount = parseID[2].ToInt();
                                    if (client.Player.Inventory[itemSlot].Num <= 0) return;
                                    if (client.Player.Inventory[itemSlot].Amount < amount) return;
                                    if (amount == 0) amount = 1;
                                    int payout = ItemManager.Items[client.Player.Inventory[itemSlot].Num].Price * amount;
                                    if (client.Player.FindInvSlot(1, payout) == -1)
                                    {
                                        Messenger.PlayerMsg(client, "You can't carry any more " + ItemManager.Items[1].Name + ".", Text.BrightRed);
                                        return;
                                    }
                                    client.Player.GiveItem(1, payout);
                                    Messenger.PlayerMsg(client, "Trade successful!", Text.Yellow);
                                    client.Player.TakeItemSlot(itemSlot, amount, true);
                                    //client.Player.DropItem(itemSlot, amount, null, true);
                                }
                            }

                            switch (id)
                            {
                                case "BuyItem":
                                    {
                                        if (parse[1] == "Yes")
                                        {
                                            if (client.Player.HasItem(1) < client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1)
                                            {
                                                Messenger.PlayerMsg(client, "You don't have enough " + ItemManager.Items[1].Name + " to buy this item!", Text.BrightRed);
                                                return;
                                            }

                                            if (String.IsNullOrEmpty(client.Player.Map.Tile[client.Player.X, client.Player.Y].String1))
                                            {
                                                Messenger.PlayerMsg(client, "Trade successful!", Text.Yellow);
                                                client.Player.PickupItem(true);
                                                client.Player.TakeItem(1, client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1, true);
                                            }
                                            else
                                            {
                                                int slot = client.Player.FindInvSlot(1);
                                                if (slot == -1 || client.Player.Inventory[slot].Num != 1) return;
                                                Messenger.PlayerMsg(client, "Trade successful!", Text.Yellow);
                                                client.Player.PickupItem(true);
                                                client.Player.DropItem(slot, client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1, null, true);
                                            }
                                        }
                                    }
                                    break;
                                case "CreateGuild":
                                    {
                                        #region CreateGuild Result
                                        if (parse[1] == "Cancel")
                                        {
                                            client.Player.GuildName = "";
                                        }
                                        #endregion
                                    }
                                    break;
                                case "GuildStepDown":
                                    {
                                        #region GuildStepDown Result
                                        if (parse[1] == "Yes")
                                        {
                                            Guilds.GuildManager.GuildStepDown(client);
                                        }
                                        #endregion
                                    }
                                    break;
                                case "DisbandGuild":
                                    {
                                        #region DisbandGuild Result
                                        if (parse[1] == "Yes")
                                        {
                                            Guilds.GuildManager.DisbandGuild(client);
                                        }
                                        #endregion
                                    }
                                    break;
                                case "RecruitPokemon":
                                    {
                                        #region RecruitPokemon Result
                                        if (parse[1] == "Yes")
                                        {
                                            int openSlot = client.Player.FindOpenTeamSlot();
                                            int recruitIndex = 0;
                                            if (openSlot != -1)
                                            {
                                                if (client.Player.RequestedRecruit.Level > 0)
                                                {
                                                    using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                                    {
                                                        recruitIndex = client.Player.AddToRecruitmentBank(dbConnection, client.Player.RequestedRecruit);
                                                    }

                                                    if (recruitIndex != -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);
                                                    }
                                                }
                                                else
                                                {
                                                    Messenger.BattleMsg(client, "You cant recruit! Error 2", Text.BrightRed);
                                                }
                                            }
                                            else
                                            {
                                                Messenger.BattleMsg(client, "You cant recruit! Your team is full!", Text.BrightRed);
                                            }
                                        }
                                        else
                                        {
                                            client.Player.RequestedRecruit = null;
                                        }

                                        client.Player.RequestedRecruit = null;
                                        #endregion
                                    }
                                    break;
                                case "ReleasePokemon":
                                    {
                                        #region ReleasePokemon Result
                                        if (parse[1] == "Yes")
                                        {

                                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                            {
                                                client.Player.ReleaseRecruit(dbConnection, client.Player.RequestedRecruit.RecruitIndex);
                                            }

                                        }
                                        client.Player.RequestedRecruit = null;
                                        #endregion
                                    }
                                    break;
                                case "MovesFull":
                                    {
                                        #region MovesFull Result
                                        if (parse[1] == "Yes")
                                        {
                                            bool allowLearn = true;
                                            if (client.Player.GetActiveRecruit().MoveItem != -1)
                                            {
                                                if (client.Player.HasItem(client.Player.GetActiveRecruit().MoveItem, true) > 0)
                                                {
                                                    client.Player.TakeItem(client.Player.GetActiveRecruit().MoveItem, 0, true);
                                                }
                                                else
                                                {
                                                    allowLearn = false;
                                                }
                                            }
                                            if (allowLearn)
                                            {
                                                Messenger.OpenMoveForgetMenu(client);
                                            }
                                            client.Player.GetActiveRecruit().MoveItem = -1;
                                        }
                                        else
                                        {
                                            client.Player.GetActiveRecruit().MoveItem = -1;
                                            Messenger.PlayerMsg(client, "You chose to not learn this move.", Text.White);
                                        }
                                        #endregion
                                    }
                                    break;
                                case "PlayerTradeRequest":
                                    {
                                        #region PlayerTradeRequest Result
                                        if (parse[1] == "Yes")
                                        {
                                            Client tradePartner = ClientManager.FindClientFromCharID(client.Player.TradePartner);
                                            if (tradePartner != null)
                                            {
                                                tradePartner.Player.TradePartner = client.Player.CharID;
                                                Messenger.OpenTradeMenu(client);
                                            }
                                        }
                                        #endregion
                                    }
                                    break;
                                case "SingleEvolution":
                                    {
                                        #region SingleEvolution Result

                                        PacketHitList hitlist = null;
                                        PacketHitList.MethodStart(ref hitlist);

                                        if (parse[1] == "Yes")
                                        {
                                            int speciesNum = client.Player.GetActiveRecruit().Species;
                                            int evoIndex = -1;
                                            for (int z = 0; z < EvolutionManager.Evolutions.MaxEvos; z++)
                                            {
                                                if (EvolutionManager.Evolutions[z].Species == speciesNum)
                                                {
                                                    evoIndex = z;
                                                }
                                            }
                                            if (evoIndex == -1) return;

                                            List<int> viableEvos = EvolutionManager.FindViableEvolutions(client, evoIndex);
                                            if (viableEvos.Count == 1)
                                            {
                                                EvolutionBranch evo = Evolutions.EvolutionManager.Evolutions[evoIndex].Branches[viableEvos[0]];
                                                client.Player.GetActiveRecruit().SetSpecies(evo.NewSpecies);
                                                if (client.Player.GetActiveRecruit().RecruitIndex > -2)
                                                {
                                                    client.Player.PokemonCaught(client.Player.GetActiveRecruit().Species);
                                                }
                                                PacketBuilder.AppendPlayerData(client, hitlist);
                                                Messenger.SendActiveTeam(client);
                                                PacketBuilder.AppendStats(client, hitlist);
                                                hitlist.AddPacket(client, PacketBuilder.CreateChatMsg("You have evolved into " + Pokedex.Pokedex.GetPokemon(client.Player.GetActiveRecruit().Species).Name + "! Congratulations!", Text.Yellow));
                                                Scripting.ScriptManager.InvokeFunction("OnEvoDone", client, evo.ReqScript, evo.Data1, evo.Data2, evo.Data3);
                                            }

                                        }

                                        PacketHitList.MethodEnded(ref hitlist);

                                        #endregion
                                    }
                                    break;
                                case "BranchEvolution":
                                    {
                                        #region BranchEvolution Result
                                        PacketHitList hitlist = null;
                                        PacketHitList.MethodStart(ref hitlist);
                                        if (parse[1] == "Cancel") return;
                                        int speciesNum = client.Player.GetActiveRecruit().Species;
                                        int evoIndex = -1;
                                        for (int z = 0; z < EvolutionManager.Evolutions.MaxEvos; z++)
                                        {
                                            if (EvolutionManager.Evolutions[z].Species == speciesNum)
                                            {
                                                evoIndex = z;
                                            }
                                        }
                                        if (evoIndex == -1) return;

                                        for (int i = 0; i <= EvolutionManager.Evolutions[evoIndex].Branches.Count; i++)
                                        {
                                            bool canEvolve = Scripting.ScriptManager.InvokeFunction("ScriptedEvoReq", client, EvolutionManager.Evolutions[evoIndex].Branches[i].ReqScript, EvolutionManager.Evolutions[evoIndex].Branches[i].Data1, EvolutionManager.Evolutions[evoIndex].Branches[i].Data2, EvolutionManager.Evolutions[evoIndex].Branches[i].Data3).ToBool();
                                            if (canEvolve && EvolutionManager.Evolutions[evoIndex].Branches[i].Name == parse[1])
                                            {
                                                EvolutionBranch evo = Evolutions.EvolutionManager.Evolutions[evoIndex].Branches[i];
                                                client.Player.GetActiveRecruit().SetSpecies(evo.NewSpecies);
                                                if (client.Player.GetActiveRecruit().RecruitIndex > -2)
                                                {
                                                    client.Player.PokemonCaught(client.Player.GetActiveRecruit().Species);
                                                }
                                                PacketBuilder.AppendPlayerData(client, hitlist);
                                                Messenger.SendActiveTeam(client);
                                                PacketBuilder.AppendStats(client, hitlist);
                                                hitlist.AddPacket(client, PacketBuilder.CreateChatMsg("You have evolved into " + Pokedex.Pokedex.GetPokemon(client.Player.GetActiveRecruit().Species).Name + "! Congratulations!", Text.Yellow));
                                                Scripting.ScriptManager.InvokeFunction("OnEvoDone", client, evo.ReqScript, evo.Data1, evo.Data2, evo.Data3);
                                                break;
                                            }
                                        }

                                        PacketHitList.MethodEnded(ref hitlist);

                                        //Scripting.ScriptManager.InvokeFunction("EvoDone", player.Client, Evolutions[evoIndex].Branches[i].ReqScript, Evolutions[evoIndex].Branches[i].Data1, Evolutions[evoIndex].Branches[i].Data2, Evolutions[evoIndex].Branches[i].Data3)
                                        #endregion
                                    }
                                    break;
                                case "UseKeyOnEnter":
                                    {
                                        #region UseKeyOnEnter Result
                                        if (parse[1] == "Yes")
                                        {
                                            IMap map = client.Player.GetCurrentMap();
                                            int newX = client.Player.X;
                                            int newY = client.Player.Y;
                                            Enums.Direction dir = client.Player.Direction;
                                            switch (client.Player.Direction)
                                            {
                                                case Enums.Direction.Up:
                                                    newY--;
                                                    break;
                                                case Enums.Direction.Down:
                                                    newY++;
                                                    break;
                                                case Enums.Direction.Left:
                                                    newX--;
                                                    break;
                                                case Enums.Direction.Right:
                                                    newX++;
                                                    break;
                                            }
                                            if (newX >= 0 && newX < map.MaxX && newY >= 0 && newY < map.MaxY)
                                            {
                                                if (map.Tile[newX, newY].Type == Enums.TileType.Key)
                                                {
                                                    for (int i = 1; i <= client.Player.MaxInv; i++)
                                                    {
                                                        if (client.Player.Inventory[i].Num == map.Tile[newX, newY].Data1)
                                                        {
                                                            client.Player.UseItem(client.Player.Inventory[i], i);
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        else if (parse[1] == "No")
                                        {

                                        }
                                        #endregion
                                    }
                                    break;
                                case "UseMoveKeyOnEnter":
                                    {
                                        #region UseKeyOnEnter Result
                                        if (parse[1] == "Yes")
                                        {
                                            IMap map = client.Player.GetCurrentMap();
                                            int newX = client.Player.X;
                                            int newY = client.Player.Y;
                                            Enums.Direction dir = client.Player.Direction;
                                            switch (client.Player.Direction)
                                            {
                                                case Enums.Direction.Up:
                                                    newY--;
                                                    break;
                                                case Enums.Direction.Down:
                                                    newY++;
                                                    break;
                                                case Enums.Direction.Left:
                                                    newX--;
                                                    break;
                                                case Enums.Direction.Right:
                                                    newX++;
                                                    break;
                                            }
                                            if (newX >= 0 && newX < map.MaxX && newY >= 0 && newY < map.MaxY)
                                            {
                                                if (map.Tile[newX, newY].Type == Enums.TileType.Key)
                                                {
                                                    for (int i = 0; i < client.Player.GetActiveRecruit().Moves.Length; i++)
                                                    {
                                                        if (client.Player.GetActiveRecruit().Moves[i].MoveNum > -1)
                                                        {
                                                            Move move = MoveManager.Moves[client.Player.GetActiveRecruit().Moves[i].MoveNum];
                                                            if (move.KeyItem > 0)
                                                            {
                                                                if (move.KeyItem == map.Tile[newX, newY].Data1)
                                                                {
                                                                    client.Player.GetActiveRecruit().UseMoveKey(map, move, i);
                                                                    break;
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }
                                    break;
                                default:
                                    {
                                        Scripting.ScriptManager.InvokeSub("QuestionResult", client, id, parse[1]);
                                    }
                                    break;
                            }
                        }
                        break;
                    case "checkcommands":
                        if (!client.Player.Dead)
                        {
                            Scripting.ScriptManager.InvokeSub("Commands", client, CommandProcessor.ParseCommand(parse[1].Trim()));
                        }
                        break;
                    case "reloadscripts":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                            }
                            else
                            {
                                Scripting.ScriptManager.Reload();
                                Messenger.PlayerMsg(client, "Scripts reloaded!", Text.Yellow);
                            }
                        }
                        break;
                    #endregion
                    #region Tile Checks
                    case "buysprite":
                        {
                            IMap map = client.Player.GetCurrentMap();
                            if (map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.SpriteChange)
                            {
                                Messenger.PlayerMsg(client, "You need to be on a sprite tile to buy it!", Text.BrightRed);
                                return;
                            }

                            if (map.Tile[client.Player.X, client.Player.Y].Data2 == 0)
                            {
                                client.Player.GetActiveRecruit().SetSpecies(map.Tile[client.Player.X, client.Player.Y].Data1);
                                Messenger.SendStats(client);
                                Messenger.SendInventory(client);
                                Messenger.SendActiveTeam(client);
                                Messenger.SendPlayerData(client);
                                return;
                            }

                            for (int i = 0; i <= client.Player.MaxInv; i++)
                            {
                                if (client.Player.Inventory[i].Num == map.Tile[client.Player.X, client.Player.Y].Data2)
                                {
                                    if (ItemManager.Items[client.Player.Inventory[i].Num].Type == Enums.ItemType.Currency)
                                    {
                                        if (client.Player.Inventory[i].Amount >= map.Tile[client.Player.X, client.Player.Y].Data3)
                                        {
                                            client.Player.TakeItemSlot(i, map.Tile[client.Player.X, client.Player.Y].Data3, true);
                                            Messenger.PlayerMsg(client, "You have bought a new sprite!", Text.BrightGreen);
                                            client.Player.GetActiveRecruit().SetSpecies(map.Tile[client.Player.X, client.Player.Y].Data1);
                                            Messenger.SendStats(client);
                                            //Messenger.SendDataToMap(client.Player.mMap, "checksprite" + TcpManager.SEP_CHAR + client.ToString() + TcpManager.SEP_CHAR + client.Player.GetActiveChar().mSprite.ToString() + TcpManager.SEP_CHAR + TcpManager.END_CHAR);
                                            Messenger.SendInventory(client);
                                            Messenger.SendActiveTeam(client);
                                            Messenger.SendPlayerData(client);
                                        }
                                    }
                                    else
                                    {
                                        if (client.Player.GetItemSlotHolder(i) == -1)
                                        {
                                            client.Player.TakeItemSlot(i, 1, true);
                                            Messenger.PlayerMsg(client, "You have bought a new sprite!", Text.BrightGreen);
                                            client.Player.GetActiveRecruit().SetSpecies(map.Tile[client.Player.X, client.Player.Y].Data1);
                                            Messenger.SendStats(client);
                                            //Messenger.SendDataToMap(client.Player.mMap, "checksprite" + TcpManager.SEP_CHAR + client.ToString() + TcpManager.SEP_CHAR + client.Player.GetActiveChar().mSprite.ToString() + TcpManager.SEP_CHAR + TcpManager.END_CHAR);
                                            Messenger.SendInventory(client);
                                            Messenger.SendActiveTeam(client);
                                            Messenger.SendPlayerData(client);
                                        }
                                    }
                                    if (client.Player.GetItemSlotHolder(i) == -1)
                                    {
                                        return;
                                    }
                                }
                            }

                            Messenger.PlayerMsg(client, "You dont have enough to buy this sprite!", Text.BrightRed);
                        }
                        break;
                    case "buyhouse":
                        {
                            // TODO: Remake "buyhouse" packet processor
                            //IMap map;
                            //if (client.Player.Map != -2) {
                            //    map = MapManager.Maps[client.Player.Map];
                            //} else {
                            //    Messenger.PlayerMsg(client, "You can't buy an instanced map!", Text.BrightRed);
                            //    return;
                            //}
                            //if (map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.House) {
                            //    Messenger.PlayerMsg(client, "You need to be on a house tile to buy it!", Text.BrightRed);
                            //    return;
                            //}

                            //if (map.Tile[client.Player.X, client.Player.Y].Data1 == 0) {
                            //    Messenger.PlayerMsg(client, "You have bought a new house!", Text.BrightGreen);
                            //    map.Owner = client.Player.Name;
                            //    map.Name = client.Player.Name + "'s House";
                            //    map.Revision = map.Revision + 1;
                            //    map.Save();
                            //    //MapManager.SaveMap(map.MapNum);
                            //    Messenger.SendDataToMap(map.MapID, TcpPacket.CreatePacket("checkformap", map.MapID.ToString(), map.Revision.ToString()));
                            //    return;
                            //}

                            //for (int i = 1; i <= Constants.MAX_INV; i++) {
                            //    if (client.Player.Inventory[i].Num == map.Tile[client.Player.X, client.Player.Y].Data1) {
                            //        if (ItemManager.Items[client.Player.Inventory[i].Num].Type == Enums.ItemType.Currency) {
                            //            if (client.Player.Inventory[i].Val >= map.Tile[client.Player.X, client.Player.Y].Data2) {
                            //                client.Player.Inventory[i].Val -= map.Tile[client.Player.X, client.Player.Y].Data2;
                            //                if (client.Player.Inventory[i].Val <= 0) {
                            //                    client.Player.Inventory[i].Val = 0;
                            //                }
                            //                Messenger.PlayerMsg(client, "You have bought a new house!", Text.BrightGreen);
                            //                map.Owner = client.Player.Name;
                            //                map.Name = client.Player.Name + "'s House";
                            //                map.Revision = map.Revision + 1;
                            //                map.Save();
                            //                //MapManager.SaveMap(map.MapNum);
                            //                Messenger.SendDataToMap(map.MapNum, TcpPacket.CreatePacket("CHECKFORMAP", map.MapNum.ToString(), map.Revision.ToString()));
                            //                Messenger.SendInventory(client);
                            //            }
                            //        } else {
                            //            if (client.Player.Weapon != i & client.Player.Weapon != i & client.Player.Shield != i & client.Player.Helmet != i & client.Player.Legs != i & client.Player.Ring != i & client.Player.Necklace != i) {
                            //                client.Player.Inventory[i].Num = 0;
                            //                Messenger.PlayerMsg(client, "You now own a new house!", Text.BrightGreen);
                            //                map.Owner = client.Player.Name;
                            //                map.Name = client.Player.Name + "'s House";
                            //                map.Revision = map.Revision + 1;
                            //                MapManager.SaveMap(map.MapNum);
                            //                Messenger.SendDataToMap(map.MapNum, TcpPacket.CreatePacket("CHECKFORMAP", map.MapNum.ToString(), map.Revision.ToString()));
                            //                Messenger.SendInventory(client);
                            //            }
                            //        }
                            //        if (client.Player.Weapon != i & client.Player.Weapon != i & client.Player.Shield != i & client.Player.Helmet != i & client.Player.Legs != i & client.Player.Ring != i & client.Player.Necklace != i) {
                            //            return;
                            //        }
                            //    }
                            //}

                            //Messenger.PlayerMsg(client, "You dont have enough to buy this house!", Text.BrightRed);
                        }
                        break;
                    #endregion
                    #region Story
                    case "needstory":
                        {
                            if (parse[1] == "yes")
                            {
                                Messenger.SendUpdateStoryTo(client, parse[2].ToInt());
                                if (client.Player.SegmentToStart > -1)
                                {
                                    Messenger.SendStartStoryTo(client, parse[2].ToInt(), client.Player.SegmentToStart);
                                }
                                else
                                {
                                    Messenger.SendStartStoryTo(client, parse[2].ToInt());
                                }
                            }
                            else if (parse[1] == "no")
                            {
                                if (client.Player.SegmentToStart > -1)
                                {
                                    Messenger.SendStartStoryTo(client, parse[2].ToInt(), client.Player.SegmentToStart);
                                }
                                else
                                {
                                    Messenger.SendStartStoryTo(client, parse[2].ToInt());
                                }
                            }
                        }
                        break;
                    case "updatesegment":
                        {
                            client.Player.CurrentSegment = parse[1].ToInt(-1);
                        }
                        break;
                    case "actonaction":
                        {
                            int storyNum = -1;
                            if (client.Player.CurrentChapter != null && !string.IsNullOrEmpty(client.Player.CurrentChapter.ID))
                            {
                                storyNum = client.Player.CurrentChapter.ID.ToInt(-1);
                            }
                            if (client.Player.CurrentChapter != null)
                            {
                                StorySegment story = client.Player.CurrentChapter.Segments[client.Player.CurrentSegment];
                                switch (story.Action)
                                {
                                    case Enums.StoryAction.RunScript:
                                        {
                                            Stories.StoryManager.RunScript(client, story.Parameters.GetValue("ScriptIndex").ToInt(),
                                                story.Parameters.GetValue("ScriptParam1"),
                                                story.Parameters.GetValue("ScriptParam2"),
                                                story.Parameters.GetValue("ScriptParam3"),
                                                story.Parameters.GetValue("Pause").ToBool());
                                        }
                                        break;
                                    case Enums.StoryAction.Padlock:
                                        {
                                            if (storyNum > -1)
                                            {
                                                if (story.Parameters.GetValue("State") == "Unlock")
                                                {
                                                    client.Player.SetStoryState(storyNum, false);
                                                }
                                                else if (story.Parameters.GetValue("State") == "Lock")
                                                {
                                                    client.Player.SetStoryState(storyNum, true);
                                                }
                                            }
                                        }
                                        break;
                                    case Enums.StoryAction.Warp:
                                        {
                                            int X, Y;
                                            if (story.Parameters.GetValue("X") == "-1")
                                            {
                                                X = client.Player.X;
                                            }
                                            else
                                            {
                                                int tmpX = story.Parameters.GetValue("X").ToInt(-1);
                                                if (tmpX > -1)
                                                {
                                                    X = tmpX;
                                                }
                                                else
                                                {
                                                    X = client.Player.X;
                                                }
                                            }
                                            if (story.Parameters.GetValue("Y") == "-1")
                                            {
                                                Y = client.Player.Y;
                                            }
                                            else
                                            {
                                                int tmpY = story.Parameters.GetValue("Y").ToInt(-1);
                                                if (tmpY > -1)
                                                {
                                                    Y = tmpY;
                                                }
                                                else
                                                {
                                                    Y = client.Player.Y;
                                                }
                                            }
                                            Messenger.PlayerWarp(client, story.Parameters.GetValue("MapID"), X, Y);
                                        }
                                        break;
                                }
                            }
                        }
                        break;
                    case "chaptercomplete":
                        {
                            client.Player.CurrentChapter = null;
                            client.Player.CurrentSegment = -1;
                            if (client.Player.StoryPlaybackCache.Count > 0)
                            {
                                if (!string.IsNullOrEmpty(client.Player.StoryPlaybackCache[0].ID) && client.Player.StoryPlaybackCache[0].ID.IsNumeric())
                                {
                                    StoryManager.PlayStory(client, client.Player.StoryPlaybackCache[0].ID.ToInt());
                                }
                                else
                                {
                                    StoryManager.PlayStory(client, client.Player.StoryPlaybackCache[0]);
                                }
                                client.Player.StoryPlaybackCache.RemoveAt(0);
                            }
                        }
                        break;
                    case "storyloadingcomplete":
                        {
                            client.Player.LoadingStory = false;
                        }
                        break;
                    #endregion
                    #region Editors

                    #region Random Dungeons
                    case "requesteditrdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            Messenger.SendRDungeonEditor(client);
                        }
                        break;
                    case "addnewrdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            Messenger.SendAddRDungeonToAll(RDungeonManager.AddRDungeon());
                        }
                        break;
                    case "editrdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            int n = parse[1].ToInt();
                            if (n < 0 || n > RDungeonManager.RDungeons.Count - 1)
                            {
                                Messenger.PlayerMsg(client, "Invalid dungeon client", Text.BrightRed);
                                return;
                            }

                            Messenger.SendEditRDungeonTo(client, n);
                        }
                        break;
                    case "saverdungeon":
                        {//adjust to new variables
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            int z = parse[1].ToInt();

                            RDungeonManager.RDungeons[z].DungeonName = parse[2];
                            RDungeonManager.RDungeons[z].Direction = (Enums.Direction)parse[3].ToInt();
                            int maxFloors = parse[4].ToInt();
                            RDungeonManager.RDungeons[z].Recruitment = parse[5].ToBool();
                            RDungeonManager.RDungeons[z].Exp = parse[6].ToBool();
                            RDungeonManager.RDungeons[z].WindTimer = parse[7].ToInt();
                            RDungeonManager.RDungeons[z].DungeonIndex = parse[8].ToInt();
                            int n = 9;
                            RDungeonManager.RDungeons[z].Floors.Clear();
                            for (int i = 0; i < maxFloors; i++)
                            {
                                RDungeonManager.RDungeons[z].Floors.Add(new RDungeonFloor());
                                RDungeonManager.RDungeons[z].Floors[i].Options.TrapMin = parse[n].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.TrapMax = parse[n + 1].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.ItemMin = parse[n + 2].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.ItemMax = parse[n + 3].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.Intricacy = parse[n + 4].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.RoomWidthMin = parse[n + 5].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.RoomWidthMax = parse[n + 6].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.RoomLengthMin = parse[n + 7].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.RoomLengthMax = parse[n + 8].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.HallTurnMin = parse[n + 9].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.HallTurnMax = parse[n + 10].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.HallVarMin = parse[n + 11].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.HallVarMax = parse[n + 12].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.WaterFrequency = parse[n + 13].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.Craters = parse[n + 14].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.CraterMinLength = parse[n + 15].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.CraterMaxLength = parse[n + 16].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.CraterFuzzy = parse[n + 17].ToBool();
                                RDungeonManager.RDungeons[z].Floors[i].Options.MinChambers = parse[n + 18].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Options.MaxChambers = parse[n + 19].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Darkness = parse[n + 20].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GoalType = (Enums.RFloorGoalType)parse[n + 21].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GoalMap = parse[n + 22].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GoalX = parse[n + 23].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GoalY = parse[n + 24].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].Music = parse[n + 25];

                                n += 26;

                                RDungeonManager.RDungeons[z].Floors[i].StairsX = parse[n].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].StairsSheet = parse[n + 1].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mGroundX = parse[n + 2].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mGroundSheet = parse[n + 3].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mTopLeftX = parse[n + 4].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopLeftSheet = parse[n + 5].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopCenterX = parse[n + 6].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopCenterSheet = parse[n + 7].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopRightX = parse[n + 8].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopRightSheet = parse[n + 9].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mCenterLeftX = parse[n + 10].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterLeftSheet = parse[n + 11].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterX = parse[n + 12].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterSheet = parse[n + 13].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterRightX = parse[n + 14].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterRightSheet = parse[n + 15].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mBottomLeftX = parse[n + 16].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomLeftSheet = parse[n + 17].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomCenterX = parse[n + 18].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomCenterSheet = parse[n + 19].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomRightX = parse[n + 20].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomRightSheet = parse[n + 21].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopLeftX = parse[n + 22].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopLeftSheet = parse[n + 23].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomLeftX = parse[n + 24].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomLeftSheet = parse[n + 25].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopRightX = parse[n + 26].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopRightSheet = parse[n + 27].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomRightX = parse[n + 28].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomRightSheet = parse[n + 29].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mIsolatedWallX = parse[n + 30].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mIsolatedWallSheet = parse[n + 31].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnTopX = parse[n + 32].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnTopSheet = parse[n + 33].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnCenterX = parse[n + 34].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnCenterSheet = parse[n + 35].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnBottomX = parse[n + 36].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnBottomSheet = parse[n + 37].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mRowLeftX = parse[n + 38].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowLeftSheet = parse[n + 39].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowCenterX = parse[n + 40].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowCenterSheet = parse[n + 41].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowRightX = parse[n + 42].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowRightSheet = parse[n + 43].ToInt();

                                n += 44;

                                RDungeonManager.RDungeons[z].Floors[i].mGroundAltX = parse[n].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mGroundAltSheet = parse[n + 1].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mGroundAlt2X = parse[n + 2].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mGroundAlt2Sheet = parse[n + 3].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mTopLeftAltX = parse[n + 4].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopLeftAltSheet = parse[n + 5].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopCenterAltX = parse[n + 6].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopCenterAltSheet = parse[n + 7].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopRightAltX = parse[n + 8].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mTopRightAltSheet = parse[n + 9].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mCenterLeftAltX = parse[n + 10].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterLeftAltSheet = parse[n + 11].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterAltX = parse[n + 12].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterAltSheet = parse[n + 13].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterAlt2X = parse[n + 14].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterCenterAlt2Sheet = parse[n + 15].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterRightAltX = parse[n + 16].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mCenterRightAltSheet = parse[n + 17].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mBottomLeftAltX = parse[n + 18].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomLeftAltSheet = parse[n + 19].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomCenterAltX = parse[n + 20].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomCenterAltSheet = parse[n + 21].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomRightAltX = parse[n + 22].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mBottomRightAltSheet = parse[n + 23].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopLeftAltX = parse[n + 24].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopLeftAltSheet = parse[n + 25].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomLeftAltX = parse[n + 26].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomLeftAltSheet = parse[n + 27].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopRightAltX = parse[n + 28].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerTopRightAltSheet = parse[n + 29].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomRightAltX = parse[n + 30].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mInnerBottomRightAltSheet = parse[n + 31].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mIsolatedWallAltX = parse[n + 32].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mIsolatedWallAltSheet = parse[n + 33].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnTopAltX = parse[n + 34].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnTopAltSheet = parse[n + 35].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnCenterAltX = parse[n + 36].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnCenterAltSheet = parse[n + 37].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnBottomAltX = parse[n + 38].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mColumnBottomAltSheet = parse[n + 39].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mRowLeftAltX = parse[n + 40].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowLeftAltSheet = parse[n + 41].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowCenterAltX = parse[n + 42].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowCenterAltSheet = parse[n + 43].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowRightAltX = parse[n + 44].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mRowRightAltSheet = parse[n + 45].ToInt();

                                n += 46;

                                RDungeonManager.RDungeons[z].Floors[i].mWaterX = parse[n].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mWaterSheet = parse[n + 1].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mWaterAnimX = parse[n + 2].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mWaterAnimSheet = parse[n + 3].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopLeftX = parse[n + 4].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopLeftSheet = parse[n + 5].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopRightX = parse[n + 6].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopRightSheet = parse[n + 7].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomRightX = parse[n + 8].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomRightSheet = parse[n + 9].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomLeftX = parse[n + 10].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomLeftSheet = parse[n + 11].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalForwardX = parse[n + 12].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalForwardSheet = parse[n + 13].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalBackX = parse[n + 14].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalBackSheet = parse[n + 15].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopX = parse[n + 16].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopSheet = parse[n + 17].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreRightX = parse[n + 18].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreRightSheet = parse[n + 19].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomX = parse[n + 20].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomSheet = parse[n + 21].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreLeftX = parse[n + 22].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreLeftSheet = parse[n + 23].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreVerticalX = parse[n + 24].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreVerticalSheet = parse[n + 25].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreHorizontalX = parse[n + 26].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreHorizontalSheet = parse[n + 27].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopLeftX = parse[n + 28].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopLeftSheet = parse[n + 29].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopRightX = parse[n + 30].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopRightSheet = parse[n + 31].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomRightX = parse[n + 32].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomRightSheet = parse[n + 33].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomLeftX = parse[n + 34].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomLeftSheet = parse[n + 35].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopX = parse[n + 36].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopSheet = parse[n + 37].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerRightX = parse[n + 38].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerRightSheet = parse[n + 39].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomX = parse[n + 40].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomSheet = parse[n + 41].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerLeftX = parse[n + 42].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerLeftSheet = parse[n + 43].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreSurroundedX = parse[n + 44].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreSurroundedSheet = parse[n + 45].ToInt();

                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopLeftAnimX = parse[n + 46].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopLeftAnimSheet = parse[n + 47].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopRightAnimX = parse[n + 48].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopRightAnimSheet = parse[n + 49].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomRightAnimX = parse[n + 50].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomRightAnimSheet = parse[n + 51].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomLeftAnimX = parse[n + 52].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomLeftAnimSheet = parse[n + 53].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalForwardAnimX = parse[n + 54].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalForwardAnimSheet = parse[n + 55].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalBackAnimX = parse[n + 56].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreDiagonalBackAnimSheet = parse[n + 57].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopAnimX = parse[n + 58].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreTopAnimSheet = parse[n + 59].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreRightAnimX = parse[n + 60].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreRightAnimSheet = parse[n + 61].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomAnimX = parse[n + 62].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreBottomAnimSheet = parse[n + 63].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreLeftAnimX = parse[n + 64].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreLeftAnimSheet = parse[n + 65].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreVerticalAnimX = parse[n + 66].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreVerticalAnimSheet = parse[n + 67].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreHorizontalAnimX = parse[n + 68].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreHorizontalAnimSheet = parse[n + 69].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopLeftAnimX = parse[n + 70].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopLeftAnimSheet = parse[n + 71].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopRightAnimX = parse[n + 72].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopRightAnimSheet = parse[n + 73].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomRightAnimX = parse[n + 74].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomRightAnimSheet = parse[n + 75].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomLeftAnimX = parse[n + 76].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomLeftAnimSheet = parse[n + 77].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopAnimX = parse[n + 78].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerTopAnimSheet = parse[n + 79].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerRightAnimX = parse[n + 80].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerRightAnimSheet = parse[n + 81].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomAnimX = parse[n + 82].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerBottomAnimSheet = parse[n + 83].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerLeftAnimX = parse[n + 84].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreInnerLeftAnimSheet = parse[n + 85].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreSurroundedAnimX = parse[n + 86].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].mShoreSurroundedAnimSheet = parse[n + 87].ToInt();

                                n += 88;

                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.Type = (Enums.TileType)parse[n].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.Data1 = parse[n + 1].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.Data2 = parse[n + 2].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.Data3 = parse[n + 3].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.String1 = parse[n + 4];
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.String2 = parse[n + 5];
                                RDungeonManager.RDungeons[z].Floors[i].GroundTile.String3 = parse[n + 6];

                                RDungeonManager.RDungeons[z].Floors[i].HallTile.Type = (Enums.TileType)parse[n + 7].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.Data1 = parse[n + 8].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.Data2 = parse[n + 9].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.Data3 = parse[n + 10].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.String1 = parse[n + 11];
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.String2 = parse[n + 12];
                                RDungeonManager.RDungeons[z].Floors[i].HallTile.String3 = parse[n + 13];

                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.Type = (Enums.TileType)parse[n + 14].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.Data1 = parse[n + 15].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.Data2 = parse[n + 16].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.Data3 = parse[n + 17].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.String1 = parse[n + 18];
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.String2 = parse[n + 19];
                                RDungeonManager.RDungeons[z].Floors[i].WaterTile.String3 = parse[n + 20];

                                RDungeonManager.RDungeons[z].Floors[i].WallTile.Type = (Enums.TileType)parse[n + 21].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.Data1 = parse[n + 22].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.Data2 = parse[n + 23].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.Data3 = parse[n + 24].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.String1 = parse[n + 25];
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.String2 = parse[n + 26];
                                RDungeonManager.RDungeons[z].Floors[i].WallTile.String3 = parse[n + 27];

                                RDungeonManager.RDungeons[z].Floors[i].NpcSpawnTime = parse[n + 28].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].NpcMin = parse[n + 29].ToInt();
                                RDungeonManager.RDungeons[z].Floors[i].NpcMax = parse[n + 30].ToInt();

                                n += 31;

                                RDungeonManager.RDungeons[z].Floors[i].Items.Clear();
                                for (int item = 0; item < parse[n].ToInt(); item++)
                                {
                                    RDungeonItem newItem = new RDungeonItem();
                                    newItem.ItemNum = parse[n + item * 10 + 1].ToInt();
                                    newItem.MinAmount = parse[n + item * 10 + 2].ToInt();
                                    newItem.MaxAmount = parse[n + item * 10 + 3].ToInt();
                                    newItem.AppearanceRate = parse[n + item * 10 + 4].ToInt();
                                    newItem.StickyRate = parse[n + item * 10 + 5].ToInt();
                                    newItem.Tag = parse[n + item * 10 + 6];
                                    newItem.Hidden = parse[n + item * 10 + 7].ToBool();
                                    newItem.OnGround = parse[n + item * 10 + 8].ToBool();
                                    newItem.OnWater = parse[n + item * 10 + 9].ToBool();
                                    newItem.OnWall = parse[n + item * 10 + 10].ToBool();

                                    RDungeonManager.RDungeons[z].Floors[i].Items.Add(newItem);
                                }
                                n += RDungeonManager.RDungeons[z].Floors[i].Items.Count * 10 + 1;

                                RDungeonManager.RDungeons[z].Floors[i].Npcs.Clear();
                                for (int npc = 0; npc < parse[n].ToInt(); npc++)
                                {
                                    MapNpcPreset newNpc = new MapNpcPreset();
                                    newNpc.NpcNum = parse[n + npc * 7 + 1].ToInt();
                                    newNpc.MinLevel = parse[n + npc * 7 + 2].ToInt();
                                    newNpc.MaxLevel = parse[n + npc * 7 + 3].ToInt();
                                    newNpc.AppearanceRate = parse[n + npc * 7 + 4].ToInt();
                                    newNpc.StartStatus = (Enums.StatusAilment)parse[n + npc * 7 + 5].ToInt();
                                    newNpc.StartStatusCounter = parse[n + npc * 7 + 6].ToInt();
                                    newNpc.StartStatusChance = parse[n + npc * 7 + 7].ToInt();

                                    RDungeonManager.RDungeons[z].Floors[i].Npcs.Add(newNpc);
                                }
                                n += RDungeonManager.RDungeons[z].Floors[i].Npcs.Count * 7 + 1;

                                RDungeonManager.RDungeons[z].Floors[i].SpecialTiles.Clear();
                                for (int traps = 0; traps < parse[n].ToInt(); traps++)
                                {
                                    RDungeonTrap newTile = new RDungeonTrap();
                                    newTile.Type = (Enums.TileType)parse[n + traps * 29 + 1].ToInt();
                                    newTile.Data1 = parse[n + traps * 29 + 2].ToInt();
                                    newTile.Data2 = parse[n + traps * 29 + 3].ToInt();
                                    newTile.Data3 = parse[n + traps * 29 + 4].ToInt();
                                    newTile.String1 = parse[n + traps * 29 + 5];
                                    newTile.String2 = parse[n + traps * 29 + 6];
                                    newTile.String3 = parse[n + traps * 29 + 7];
                                    newTile.Ground = parse[n + traps * 29 + 8].ToInt();
                                    newTile.GroundSet = parse[n + traps * 29 + 9].ToInt();
                                    newTile.GroundAnim = parse[n + traps * 29 + 10].ToInt();
                                    newTile.GroundAnimSet = parse[n + traps * 29 + 11].ToInt();
                                    newTile.Mask = parse[n + traps * 29 + 12].ToInt();
                                    newTile.MaskSet = parse[n + traps * 29 + 13].ToInt();
                                    newTile.Anim = parse[n + traps * 29 + 14].ToInt();
                                    newTile.AnimSet = parse[n + traps * 29 + 15].ToInt();
                                    newTile.Mask2 = parse[n + traps * 29 + 16].ToInt();
                                    newTile.Mask2Set = parse[n + traps * 29 + 17].ToInt();
                                    newTile.M2Anim = parse[n + traps * 29 + 18].ToInt();
                                    newTile.M2AnimSet = parse[n + traps * 29 + 19].ToInt();
                                    newTile.Fringe = parse[n + traps * 29 + 20].ToInt();
                                    newTile.FringeSet = parse[n + traps * 29 + 21].ToInt();
                                    newTile.FAnim = parse[n + traps * 29 + 22].ToInt();
                                    newTile.FAnimSet = parse[n + traps * 29 + 23].ToInt();
                                    newTile.Fringe2 = parse[n + traps * 29 + 24].ToInt();
                                    newTile.Fringe2Set = parse[n + traps * 29 + 25].ToInt();
                                    newTile.F2Anim = parse[n + traps * 29 + 26].ToInt();
                                    newTile.F2AnimSet = parse[n + traps * 29 + 27].ToInt();
                                    newTile.RDungeonMapValue = parse[n + traps * 29 + 28].ToInt();

                                    newTile.AppearanceRate = parse[n + traps * 29 + 29].ToInt();

                                    RDungeonManager.RDungeons[z].Floors[i].SpecialTiles.Add(newTile);

                                }
                                n += RDungeonManager.RDungeons[z].Floors[i].SpecialTiles.Count * 29 + 1;

                                RDungeonManager.RDungeons[z].Floors[i].Weather.Clear();
                                for (int weather = 0; weather < parse[n].ToInt(); weather++)
                                {
                                    RDungeonManager.RDungeons[z].Floors[i].Weather.Add((Enums.Weather)parse[n + 1 + weather].ToInt());

                                }
                                n += RDungeonManager.RDungeons[z].Floors[i].Weather.Count + 1;

                                RDungeonManager.RDungeons[z].Floors[i].Options.Chambers.Clear();
                                for (int chamber = 0; chamber < parse[n].ToInt(); chamber++)
                                {
                                    RDungeonPresetChamber newChamber = new RDungeonPresetChamber();
                                    newChamber.ChamberNum = parse[n + chamber * 4 + 1].ToInt();
                                    newChamber.String1 = parse[n + chamber * 4 + 2];
                                    newChamber.String2 = parse[n + chamber * 4 + 3];
                                    newChamber.String3 = parse[n + chamber * 4 + 4];

                                    RDungeonManager.RDungeons[z].Floors[i].Options.Chambers.Add(newChamber);
                                }
                                n += RDungeonManager.RDungeons[z].Floors[i].Options.Chambers.Count * 4 + 1;

                            }
                            Messenger.SendUpdateRDungeonToAll(z);
                            RDungeonManager.SaveRDungeon(z);

                        }
                        break;
                    #endregion
                    #region Maps
                    case "mapreportrequest":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }
                            TcpPacket packet = new TcpPacket("mapreport");
                            packet.AppendParameter(MapManager.StandardMapCount);
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Data))
                            {
                                for (int i = 1; i <= MapManager.StandardMapCount; i++)
                                {
                                    //packet.AppendParameter(MapManager.Maps[i].Name);
                                    packet.AppendParameter(DataManager.Maps.MapDataManager.GetMapName(dbConnection.Database, MapManager.GenerateMapID(i)));
                                }
                            }

                            Messenger.SendDataTo(client, packet);
                        }
                        break;
                    case "requesteditmap":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                        {
                            Messenger.HackingAttempt(client, "Admin cloning");
                            return;
                        }
                        if (client.Player.Map.MapType == Enums.MapType.Instanced)
                        {
                            int mapBase = ((InstancedMap)client.Player.Map).MapBase;
                            if (mapBase > 0)
                            {
                                client.Player.BeginUninstancedWarp();
                                Messenger.PlayerWarp(client, mapBase, client.Player.X, client.Player.Y);
                                client.Player.EndUninstancedWarp();
                                Messenger.PlayerMsg(client, "You have been warped to the original map to edit it!", Text.BrightBlue);
                                return;
                            }
                        }
                        if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                        {
                            Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                            return;
                        }
                        client.Player.InMapEditor = true;
                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("editmap"));
                        Messenger.SendMapLatestPropertiesTo(client);
                        break;
                    case "requestedithouse":
                        {
                            if (client.Player.Map.MapType == Enums.MapType.House)
                            {
                                House house = client.Player.Map as House;
                                if (house.OwnerID != client.Player.CharID)
                                {
                                    Messenger.PlayerMsg(client, "This is not your house!", Text.BrightRed);
                                    return;
                                }
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("edithouse"));
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "This is not a house!", Text.BrightRed);
                            }
                        }
                        break;
                    case "mapdata":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                if (client.Player.Map.MapType == Enums.MapType.House)
                                {
                                    if (((House)client.Player.Map).OwnerID != client.Player.CharID)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    return;
                                }
                            }

                            if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                            {
                                Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                                return;
                            }

                            IMap map = null;
                            string mapID = "s0";
                            int n = 0;
                            int X = 0;
                            int Y = 0;
                            n = 1;

                            mapID = client.Player.MapID;
                            if (mapID != parse[n])
                            {
                                Messenger.PlayerMsg(client, "Error Saving: Incorrect Map [Error 3]", Text.BrightRed);
                                return;
                            }
                            if (client.Player.Map.MapType == Enums.MapType.Standard)
                            {
                                map = new Map(new DataManager.Maps.Map(mapID));
                            }
                            else if (client.Player.Map.MapType == Enums.MapType.House)
                            {
                                House houseMap = client.Player.Map as House;

                                DataManager.Maps.HouseMap newHouseMap = new DataManager.Maps.HouseMap(MapManager.GenerateHouseID(houseMap.OwnerID, houseMap.Room));
                                newHouseMap.Owner = houseMap.OwnerID;
                                newHouseMap.Room = houseMap.Room;
                                newHouseMap.StartX = ((House)client.Player.Map).StartX;
                                newHouseMap.StartY = ((House)client.Player.Map).StartY;
                                map = new House(newHouseMap);

                            }
                            map.IsSaving = true;

                            int revision = MapManager.RetrieveActiveMap(mapID).Revision;
                            map.Name = parse[n + 1];
                            map.Revision = revision + 1;
                            map.Moral = (Enums.MapMoral)parse[n + 3].ToInt();
                            map.Up = parse[n + 4].ToInt();
                            map.Down = parse[n + 5].ToInt();
                            map.Left = parse[n + 6].ToInt();
                            map.Right = parse[n + 7].ToInt();
                            map.Music = parse[n + 8];
                            map.Indoors = parse[n + 9].ToBool();
                            map.Weather = (Enums.Weather)parse[n + 10].ToInt();
                            map.MaxX = parse[n + 11].ToInt();
                            map.MaxY = parse[n + 12].ToInt();
                            map.OriginalDarkness = parse[n + 13].ToInt();
                            map.HungerEnabled = parse[n + 14].ToBool();
                            map.RecruitEnabled = parse[n + 15].ToBool();
                            map.ExpEnabled = parse[n + 16].ToBool();
                            map.TimeLimit = parse[n + 17].ToInt();
                            map.MinNpcs = parse[n + 18].ToInt();
                            map.MaxNpcs = parse[n + 19].ToInt();
                            map.NpcSpawnTime = parse[n + 20].ToInt();

                            if (map.MapType == Enums.MapType.Standard)
                            {
                                ((Map)map).Instanced = parse[n + 21].ToBool();
                            }

                            map.Tile = new TileCollection(map.BaseMap, map.MaxX, map.MaxY);

                            n += 22;

                            for (Y = 0; Y <= map.MaxY; Y++)
                            {
                                for (X = 0; X <= map.MaxX; X++)
                                {
                                    map.Tile[X, Y].Ground = parse[n].ToInt();
                                    map.Tile[X, Y].GroundAnim = parse[n + 1].ToInt();
                                    map.Tile[X, Y].Mask = parse[n + 2].ToInt();
                                    map.Tile[X, Y].Anim = parse[n + 3].ToInt();
                                    map.Tile[X, Y].Mask2 = parse[n + 4].ToInt();
                                    map.Tile[X, Y].M2Anim = parse[n + 5].ToInt();
                                    map.Tile[X, Y].Fringe = parse[n + 6].ToInt();
                                    map.Tile[X, Y].FAnim = parse[n + 7].ToInt();
                                    map.Tile[X, Y].Fringe2 = parse[n + 8].ToInt();
                                    map.Tile[X, Y].F2Anim = parse[n + 9].ToInt();
                                    map.Tile[X, Y].Type = (Enums.TileType)parse[n + 10].ToInt();
                                    map.Tile[X, Y].Data1 = parse[n + 11].ToInt();
                                    map.Tile[X, Y].Data2 = parse[n + 12].ToInt();
                                    map.Tile[X, Y].Data3 = parse[n + 13].ToInt();
                                    map.Tile[X, Y].String1 = parse[n + 14];
                                    map.Tile[X, Y].String2 = parse[n + 15];
                                    map.Tile[X, Y].String3 = parse[n + 16];
                                    map.Tile[X, Y].RDungeonMapValue = parse[n + 17].ToInt();
                                    map.Tile[X, Y].GroundSet = parse[n + 18].ToInt();
                                    map.Tile[X, Y].GroundAnimSet = parse[n + 19].ToInt();
                                    map.Tile[X, Y].MaskSet = parse[n + 20].ToInt();
                                    map.Tile[X, Y].AnimSet = parse[n + 21].ToInt();
                                    map.Tile[X, Y].Mask2Set = parse[n + 22].ToInt();
                                    map.Tile[X, Y].M2AnimSet = parse[n + 23].ToInt();
                                    map.Tile[X, Y].FringeSet = parse[n + 24].ToInt();
                                    map.Tile[X, Y].FAnimSet = parse[n + 25].ToInt();
                                    map.Tile[X, Y].Fringe2Set = parse[n + 26].ToInt();
                                    map.Tile[X, Y].F2AnimSet = parse[n + 27].ToInt();
                                    n += 28;

                                    if (map.MapType == Enums.MapType.House)
                                    {
                                        if (map.Tile[X, Y].Type == Enums.TileType.Warp || map.Tile[X, Y].Type == Enums.TileType.Item)
                                        {
                                            Messenger.PlayerMsg(client, "Invalid map tile placed!", Text.BrightRed);
                                            return;
                                        }
                                    }
                                }
                            }

                            int npcCount = parse[n].ToInt();
                            n++;

                            for (X = 0; X < npcCount; X++)
                            {
                                MapNpcPreset newNpc = new MapNpcPreset();
                                newNpc.NpcNum = parse[n].ToInt();
                                newNpc.SpawnX = parse[n + 1].ToInt();
                                newNpc.SpawnY = parse[n + 2].ToInt();
                                newNpc.MinLevel = parse[n + 3].ToInt();
                                newNpc.MaxLevel = parse[n + 4].ToInt();
                                newNpc.AppearanceRate = parse[n + 5].ToInt();
                                newNpc.StartStatus = (Enums.StatusAilment)parse[n + 6].ToInt();
                                newNpc.StartStatusCounter = parse[n + 7].ToInt();
                                newNpc.StartStatusChance = parse[n + 8].ToInt();

                                map.Npc.Add(newNpc);
                                n += 9;
                            }

                            for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                            {
                                map.ClearActiveNpc(i);
                            }

                            // Clear out it all
                            for (int i = 0; i < Constants.MAX_MAP_ITEMS; i++)
                            {
                                map.SpawnItemSlot(i, -1, 0, false, false, "", map.ActiveItem[i].X, map.ActiveItem[i].Y, null);
                                map.ClearActiveItem(i);
                            }

                            map.RemakePlayersList();
                            MapManager.UpdateActiveMap(mapID, map);
                            //MapManager.Maps[mapID] = map;
                            // Save the map
                            map.Save();
                            map.IsSaving = false;
                            // Respawn
                            map.SpawnItems();
                            map.SpawnNpcs();

                            // Refresh map for everyone online
                            foreach (Client i in map.GetClients())
                            {
                                if (i.IsPlaying())
                                {
                                    if (Ranks.IsAllowed(i, Enums.Rank.Mapper))
                                    {
                                        if (map.MapType == Enums.MapType.Standard)
                                        {
                                            Map standardMap = map as Map;
                                            if (standardMap != null)
                                            {
                                                Messenger.SendMapNameUpdate(i, standardMap.MapNum, standardMap.Name);
                                            }
                                        }
                                    }
                                    if (i.Player.MapID == map.MapID)
                                    {
                                        i.Player.InvalidateCachedMap();
                                        Messenger.SendCheckForMap(i);
                                    }
                                }
                            }
                        }
                        break;
                    case "scriptedtileinforequest":
                        {
                            Messenger.SendScriptedTileInfoTo(client, (string)Scripting.ScriptManager.InvokeFunction("ScriptedTileInfo", client, parse[1].ToInt()));
                        }
                        break;
                    case "scriptedsigninforequest":
                        {
                            Messenger.SendScriptedSignInfoTo(client, (string)Scripting.ScriptManager.InvokeFunction("ScriptedSignInfo", client, parse[1].ToInt()));
                        }
                        break;
                    case "mobilityinforequest":
                        {
                            Messenger.SendMobilityInfoTo(client, (string)Scripting.ScriptManager.InvokeFunction("MobilityInfo", client, parse[1].ToInt()));
                        }
                        break;
                    #endregion
                    #region Live Map Editor
                    case "exitmapeditor":
                        {
                            client.Player.InMapEditor = false;
                        }
                        break;
                    case "mapeditortileplaced":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                if (client.Player.Map.MapType == Enums.MapType.House)
                                {
                                    if (((House)client.Player.Map).OwnerID != client.Player.CharID)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    return;
                                }
                            }

                            if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                            {
                                Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                                return;
                            }

                            int x = parse[1].ToInt();
                            int y = parse[2].ToInt();
                            int layer = parse[3].ToInt();
                            int set = parse[4].ToInt();
                            int tile = parse[5].ToInt();

                            IMap map = client.Player.Map;
                            foreach (Client mapper in map.GetClients())
                            {
                                // We only want to check the mappers
                                if (Ranks.IsAllowed(mapper, Enums.Rank.Mapper))
                                {
                                    if (mapper != client)
                                    {
                                        // We're on the same map...
                                        if (mapper.Player.InMapEditor)
                                        {
                                            // We have the map editor open...
                                            Messenger.SendLiveMapEditorTilePlacedData(mapper, x, y, layer, set, tile);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "mapeditorattribplaced":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                if (client.Player.Map.MapType == Enums.MapType.House)
                                {
                                    if (((House)client.Player.Map).OwnerID != client.Player.CharID)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    return;
                                }
                            }

                            if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                            {
                                Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                                return;
                            }

                            int x = parse[1].ToInt();
                            int y = parse[2].ToInt();
                            int type = parse[3].ToInt();
                            int data1 = parse[4].ToInt();
                            int data2 = parse[5].ToInt();
                            int data3 = parse[6].ToInt();
                            string string1 = parse[7];
                            string string2 = parse[8];
                            string string3 = parse[9];
                            int dungeonValue = parse[10].ToInt();

                            IMap map = client.Player.Map;
                            foreach (Client mapper in map.GetClients())
                            {
                                // We only want to check the mappers
                                if (Ranks.IsAllowed(mapper, Enums.Rank.Mapper))
                                {
                                    if (mapper != client)
                                    {
                                        // We're on the same map...
                                        if (mapper.Player.InMapEditor)
                                        {
                                            // We have the map editor open...
                                            Messenger.SendLiveMapEditorAttributePlacedData(mapper, x, y, type, data1, data2, data3,
                                                string1, string2, string3, dungeonValue);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "mapeditorfilllayer":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                if (client.Player.Map.MapType == Enums.MapType.House)
                                {
                                    if (((House)client.Player.Map).OwnerID != client.Player.CharID)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    return;
                                }
                            }

                            if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                            {
                                Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                                return;
                            }

                            int layer = parse[1].ToInt();
                            int set = parse[2].ToInt();
                            int tile = parse[3].ToInt();

                            IMap map = client.Player.Map;
                            foreach (Client mapper in map.GetClients())
                            {
                                // We only want to check the mappers
                                if (Ranks.IsAllowed(mapper, Enums.Rank.Mapper))
                                {
                                    if (mapper != client)
                                    {
                                        // We're on the same map...
                                        if (mapper.Player.InMapEditor)
                                        {
                                            // We have the map editor open...
                                            Messenger.SendLiveMapEditorFillLayerData(mapper, layer, set, tile);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    case "mapeditorfillattribute":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                if (client.Player.Map.MapType == Enums.MapType.House)
                                {
                                    if (((House)client.Player.Map).OwnerID != client.Player.CharID)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                    return;
                                }
                            }

                            if (client.Player.Map.MapType != Enums.MapType.Standard && client.Player.Map.MapType != Enums.MapType.House)
                            {
                                Messenger.PlayerMsg(client, "You can't edit a non-standard map!", Text.BrightRed);
                                return;
                            }

                            int type = parse[1].ToInt();
                            int data1 = parse[2].ToInt();
                            int data2 = parse[3].ToInt();
                            int data3 = parse[4].ToInt();
                            string string1 = parse[5];
                            string string2 = parse[6];
                            string string3 = parse[7];
                            int dungeonValue = parse[8].ToInt();

                            IMap map = client.Player.Map;
                            foreach (Client mapper in map.GetClients())
                            {
                                // We only want to check the mappers
                                if (Ranks.IsAllowed(mapper, Enums.Rank.Mapper))
                                {
                                    if (mapper != client)
                                    {
                                        // We're on the same map...
                                        if (mapper.Player.InMapEditor)
                                        {
                                            // We have the map editor open...
                                            Messenger.SendLiveMapEditorFillAttributeData(mapper, type, data1, data2, data3,
                                                string1, string2, string3, dungeonValue);
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    #endregion
                    #region Items
                    case "requestedititem":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin cloning");
                            return;
                        }
                        Messenger.SendItemEditor(client);
                        break;
                    //case "edititem": { ~unneeded due to the info already being clientside
                    //        int n = -1;
                    //        if (Ranks.IsDisallowed(client, Enums.Rank.Developer)) {
                    //            Messenger.HackingAttempt(client, "Admin cloning");
                    //            return;
                    //        }

                    //        n = parse[1].ToInt();

                    //        if (n < 0 || n > Items.ItemManager.Items.MaxItems) {
                    //            Messenger.HackingAttempt(client, "Invalid item client");
                    //            return;
                    //        }

                    // record in log here
                    //        Messenger.SendEditItemTo(client, n);
                    //    }
                    //    break;
                    case "saveitem":
                        {
                            int n = -1;
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            n = parse[1].ToInt();

                            if (n < 0 || n >= Items.ItemManager.Items.MaxItems)
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            ItemManager.Items[n].Name = parse[2];
                            ItemManager.Items[n].Desc = parse[3];
                            ItemManager.Items[n].Pic = parse[4].ToInt();
                            ItemManager.Items[n].Type = (Enums.ItemType)parse[5].ToInt();
                            ItemManager.Items[n].Data1 = parse[6].ToInt();
                            ItemManager.Items[n].Data2 = parse[7].ToInt();
                            ItemManager.Items[n].Data3 = parse[8].ToInt();
                            ItemManager.Items[n].Price = parse[9].ToInt();
                            ItemManager.Items[n].StackCap = parse[10].ToInt();
                            ItemManager.Items[n].Bound = parse[11].ToBool();
                            ItemManager.Items[n].Loseable = parse[12].ToBool();
                            ItemManager.Items[n].Rarity = parse[13].ToInt();
                            ItemManager.Items[n].ReqData1 = parse[14].ToInt();
                            ItemManager.Items[n].ReqData2 = parse[15].ToInt();
                            ItemManager.Items[n].ReqData3 = parse[16].ToInt();
                            ItemManager.Items[n].ReqData4 = parse[17].ToInt();
                            ItemManager.Items[n].ReqData5 = parse[18].ToInt();
                            ItemManager.Items[n].ScriptedReq = parse[19].ToInt();

                            ItemManager.Items[n].AddHP = parse[20].ToInt();
                            ItemManager.Items[n].AddPP = parse[21].ToInt();
                            ItemManager.Items[n].AddAttack = parse[22].ToInt();
                            ItemManager.Items[n].AddDefense = parse[23].ToInt();
                            ItemManager.Items[n].AddSpAtk = parse[24].ToInt();
                            ItemManager.Items[n].AddSpDef = parse[25].ToInt();
                            ItemManager.Items[n].AddSpeed = parse[26].ToInt();
                            ItemManager.Items[n].AddEXP = parse[27].ToInt();
                            ItemManager.Items[n].AttackSpeed = parse[28].ToInt();
                            ItemManager.Items[n].RecruitBonus = parse[29].ToInt();

                            Messenger.SendUpdateItemToAll(n);
                            ItemManager.SaveItem(n);
                        }
                        break;
                    #endregion
                    #region Stories
                    case "requesteditstory":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                        {
                            Messenger.HackingAttempt(client, "Admin cloning");
                            return;
                        }

                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("storyeditor"));
                        break;
                    case "savestory":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            int n = parse[1].ToInt();

                            if (n < 0 || n > Stories.StoryManager.Stories.MaxStories)
                            {
                                Messenger.HackingAttempt(client, "Invalid story client");
                                return;
                            }
                            Story story = new Story(StoryManager.Stories[n].ID);
                            story.Name = parse[2];
                            story.StoryStart = parse[3].ToInt();
                            story.Revision = StoryManager.Stories[n].Revision + 1;

                            int totalSegments = parse[4].ToInt();
                            int z = 5;
                            for (int i = 0; i < totalSegments; i++)
                            {
                                story.Segments.Add(new StorySegment());
                                int totalParameters = parse[z].ToInt();
                                story.Segments[i].Action = (Enums.StoryAction)parse[z + 1].ToInt();
                                z += 2;
                                for (int a = 0; a < totalParameters; a++)
                                {
                                    story.Segments[i].AddParameter(parse[z], parse[z + 1]);
                                    z += 2;
                                }
                            }
                            int exitContinueCount = parse[z].ToInt();
                            z++;
                            for (int i = 0; i < exitContinueCount; i++)
                            {
                                story.ExitAndContinue.Add(parse[z].ToInt(1));
                                z++;
                            }
                            StoryManager.Stories.Stories[n] = story;
                            Messenger.SendUpdateStoryNameToAll(n);
                            StoryManager.SaveStory(n);
                        }
                        break;
                    case "editstory":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            int n = parse[1].ToInt();
                            if (n < 0 || n > Stories.StoryManager.Stories.MaxStories)
                            {
                                Messenger.HackingAttempt(client, "Invalid story client");
                                return;
                            }
                            Messenger.SendEditStoryTo(client, n);
                        }
                        break;
                    case "requeststory":
                        Messenger.SendUpdateStoryTo(client, parse[1].ToInt());
                        break;
                    #endregion
                    #region Evolutions
                    case "requesteditevo":
                        // Prevent hacking
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }

                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("evoeditor"));
                        break;
                    case "editevo":
                        {

                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // The evo #
                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 || n > Evolutions.EvolutionManager.Evolutions.MaxEvos)
                            {
                                Messenger.HackingAttempt(client, "Invalid Evolution Index");
                                return;
                            }

                            Messenger.SendEditEvoTo(client, n);
                        }
                        break;
                    case "saveevo":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 | n > Evolutions.EvolutionManager.Evolutions.MaxEvos)
                            {
                                Messenger.HackingAttempt(client, "Invalid Evolution Index");
                                return;
                            }
                            Evolution evo = new Evolution();

                            evo.Name = parse[2];
                            evo.Species = parse[3].ToInt();
                            int z = 5;
                            for (int i = 0; i < parse[4].ToInt(); i++)
                            {
                                evo.Branches.Add(new EvolutionBranch());
                                evo.Branches[i].Name = parse[z];
                                evo.Branches[i].NewSpecies = parse[z + 1].ToInt();
                                evo.Branches[i].ReqScript = parse[z + 2].ToInt();
                                evo.Branches[i].Data1 = parse[z + 3].ToInt();
                                evo.Branches[i].Data2 = parse[z + 4].ToInt();
                                evo.Branches[i].Data3 = parse[z + 5].ToInt();
                                z += 6;
                            }
                            EvolutionManager.Evolutions[n] = evo;

                            Messenger.SendUpdateEvoToAll(n);
                            Evolutions.EvolutionManager.SaveEvo(n);
                        }
                        break;
                    #endregion
                    #region NPCs
                    case "requesteditnpc":

                        // Prevent hacking
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }

                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("NPCEDITOR"));
                        break;
                    // :::::::::::::::::::::
                    // :: Edit npc packet ::
                    // :::::::::::::::::::::
                    case "editnpc":
                        {

                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // The npc #
                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 | n > Npcs.NpcManager.Npcs.MaxNpcs)
                            {
                                Messenger.HackingAttempt(client, "Invalid NPC Index");
                                return;
                            }

                            Messenger.SendNpcAiTypes(client);
                            Messenger.SendEditNpcTo(client, n);
                        }
                        break;
                    case "addnewnpc":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            Messenger.SendAddNpcToAll(NpcManager.AddNpc());
                        }
                        break;
                    // :::::::::::::::::::::
                    // :: Save npc packet ::
                    // :::::::::::::::::::::
                    case "savenpc":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 | n > Npcs.NpcManager.Npcs.MaxNpcs)
                            {
                                Messenger.HackingAttempt(client, "Invalid NPC Index");
                                return;
                            }

                            Npc npc = new Npc();

                            // Update the npc
                            npc.Name = parse[2];
                            npc.AttackSay = parse[3];
                            npc.Form = parse[4].ToInt();
                            npc.Species = parse[5].ToInt();
                            npc.ShinyChance = parse[6].ToInt();
                            npc.Behavior = (Enums.NpcBehavior)parse[7].ToInt();
                            npc.RecruitRate = parse[8].ToInt();
                            npc.AIScript = parse[9];
                            npc.SpawnsAtDawn = parse[10].ToBool();
                            npc.SpawnsAtDay = parse[11].ToBool();
                            npc.SpawnsAtDusk = parse[12].ToBool();
                            npc.SpawnsAtNight = parse[13].ToBool();

                            int z = 14;
                            // Load npc moves
                            for (int i = 0; i < npc.Moves.Length; i++)
                            {
                                npc.Moves[i] = parse[z].ToInt();

                                z += 1;
                            }
                            // Load npc drops
                            for (int i = 0; i < npc.Drops.Length; i++)
                            {
                                npc.Drops[i] = new NpcDrop();
                                npc.Drops[i].ItemNum = parse[z].ToInt();
                                npc.Drops[i].ItemValue = parse[z + 1].ToInt();
                                npc.Drops[i].Chance = parse[z + 2].ToInt();
                                npc.Drops[i].Tag = parse[z + 3];

                                z += 4;
                            }
                            NpcManager.Npcs[n] = npc;
                            // Save it
                            Messenger.SendUpdateNpcToAll(n);
                            NpcManager.SaveNpc(n);
                        }
                        break;
                    #endregion
                    #region Shops
                    case "requesteditshop":
                        // Prevent hacking
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }

                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("shopeditor"));
                        break;
                    // ::::::::::::::::::::::
                    // :: Edit shop packet ::
                    // ::::::::::::::::::::::
                    case "editshop":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // The shop #
                            int n = parse[1].ToInt(-1);
                            // Prevent hacking
                            if (n < 0 || n > Shops.ShopManager.Shops.MaxShops)
                            {
                                Messenger.HackingAttempt(client, "Invalid Shop Index");
                                return;
                            }

                            Messenger.SendEditShopTo(client, n);
                        }
                        break;
                    // ::::::::::::::::::::::
                    // :: Save shop packet ::
                    // ::::::::::::::::::::::
                    case "saveshop":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            int ShopNum = parse[1].ToInt(-1);
                            // Prevent hacking
                            if (ShopNum < 0 || ShopNum > Shops.ShopManager.Shops.MaxShops)
                            {
                                Messenger.HackingAttempt(client, "Invalid Shop Index");
                                return;
                            }

                            Shop shop = new Shop();

                            // Update the shop
                            shop.Name = parse[2];
                            shop.JoinSay = parse[3];
                            shop.LeaveSay = parse[4];
                            //shop.FixesItems = parse[5].ToBool(); ;
                            int n = 5;

                            for (int i = 0; i < Constants.MAX_TRADES; i++)
                            {
                                shop.Items[i].GiveItem = parse[n].ToInt();
                                shop.Items[i].GiveValue = parse[n + 1].ToInt();
                                shop.Items[i].GetItem = parse[n + 2].ToInt();
                                //shop.Sections[z].Items[i].GetValue = parse[n + 3].ToInt();
                                n = n + 3;
                            }

                            ShopManager.Shops[ShopNum] = shop;
                            // Save it
                            Messenger.SendUpdateShopToAll(ShopNum);
                            ShopManager.SaveShop(ShopNum);
                        }
                        break;
                    #endregion
                    #region Moves
                    case "requesteditmove":
                        // Prevent hacking
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }

                        Messenger.SendDataTo(client, TcpPacket.CreatePacket("moveeditor"));
                        break;
                    // :::::::::::::::::::::::
                    // :: Edit move packet ::
                    // :::::::::::::::::::::::
                    case "editmove":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // The spell #
                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 | n > Moves.MoveManager.Moves.MaxMoves)
                            {
                                Messenger.HackingAttempt(client, "Invalid Move Index");
                                return;
                            }

                            Messenger.SendEditMoveTo(client, n);
                        }
                        break;
                    // :::::::::::::::::::::::
                    // :: Save move packet ::
                    // :::::::::::::::::::::::
                    case "savemove":
                        { //
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // Move #
                            int n = parse[1].ToInt(-1);

                            // Prevent hacking
                            if (n < 0 | n > Moves.MoveManager.Moves.MaxMoves)
                            {
                                Messenger.HackingAttempt(client, "Invalid Move Index");
                                return;
                            }

                            Move move = new Move();

                            // Update the spell
                            move.Name = parse[2];
                            move.MaxPP = parse[3].ToInt();
                            move.EffectType = (Enums.MoveType)parse[4].ToInt();
                            move.Element = (Enums.PokemonType)parse[5].ToInt();
                            move.MoveCategory = (Enums.MoveCategory)parse[6].ToInt();
                            move.TargetType = (Enums.MoveTarget)parse[7].ToInt();
                            move.RangeType = (Enums.MoveRange)parse[8].ToInt();
                            move.Range = parse[9].ToInt();

                            move.Data1 = parse[10].ToInt();
                            move.Data2 = parse[11].ToInt();
                            move.Data3 = parse[12].ToInt();

                            move.Accuracy = parse[13].ToInt();

                            move.HitTime = parse[14].ToInt();
                            move.HitFreeze = parse[15].ToBool();

                            move.AdditionalEffectData1 = parse[16].ToInt();
                            move.AdditionalEffectData2 = parse[17].ToInt();
                            move.AdditionalEffectData3 = parse[18].ToInt();
                            move.PerPlayer = parse[19].ToBool();
                            move.KeyItem = parse[20].ToInt();

                            move.Sound = parse[21].ToInt();

                            move.AttackerAnim.AnimationType = (Enums.MoveAnimationType)parse[22].ToInt();
                            move.AttackerAnim.AnimationIndex = parse[23].ToInt();
                            move.AttackerAnim.FrameSpeed = parse[24].ToInt();
                            move.AttackerAnim.Repetitions = parse[25].ToInt();

                            move.TravelingAnim.AnimationType = (Enums.MoveAnimationType)parse[26].ToInt();
                            move.TravelingAnim.AnimationIndex = parse[27].ToInt();
                            move.TravelingAnim.FrameSpeed = parse[28].ToInt();
                            move.TravelingAnim.Repetitions = parse[29].ToInt();

                            move.DefenderAnim.AnimationType = (Enums.MoveAnimationType)parse[30].ToInt();
                            move.DefenderAnim.AnimationIndex = parse[31].ToInt();
                            move.DefenderAnim.FrameSpeed = parse[32].ToInt();
                            move.DefenderAnim.Repetitions = parse[33].ToInt();

                            MoveManager.Moves[n] = move;

                            // Save it
                            Messenger.SendUpdateMoveToAll(n);
                            MoveManager.SaveMove(n);
                        }
                        break;
                    #endregion
                    #region Arrows
                    case "requesteditarrow":
                        // Prevent hacking
                        if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        Messenger.SendArrowEditor(client);
                        break;
                    case "editarrow":
                        {
                            // Prevent hacking
                            //if (Ranks.IsDisallowed(client, Enums.Rank.Developer)) {
                            //    Messenger.HackingAttempt(client, "Admin Cloning");
                            //    return;
                            //}
                            //int n = parse[1].ToInt(-1);
                            //if (n < 0 | n > Constants.MAX_ARROWS) {
                            //    Messenger.HackingAttempt(client, "Invalid arrow Index");
                            //    return;
                            //}
                            //Messenger.SendEditArrowTo(client, n);
                        }
                        break;
                    case "savearrow":
                        {
                            // Prevent hacking
                            //if (Ranks.IsDisallowed(client, Enums.Rank.Developer)) {
                            //    Messenger.HackingAttempt(client, "Admin Cloning");
                            //    return;
                            //}
                            //int n = parse[1].ToInt(-1);
                            //if (n < 0 | n > Constants.MAX_ARROWS) {
                            //    Messenger.HackingAttempt(client, "Invalid arrow Index");
                            //    return;
                            //}
                            //ArrowManagerBase.Arrows[n].Name = parse[2];
                            //ArrowManagerBase.Arrows[n].Pic = parse[3].ToInt();
                            //ArrowManagerBase.Arrows[n].Range = parse[4].ToInt();
                            //ArrowManagerBase.Arrows[n].Amount = parse[5].ToInt();
                            //Messenger.SendUpdateArrowToAll(n);
                            //ArrowManagerBase.SaveArrows();
                        }
                        break;
                    #endregion
                    #region Scripts
                    case "requesteditscript":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                Messenger.AdminMsg("All Admins: " + client.Player.Name + " has attempted to access the script editor", Text.BrightRed);
                            }
                            else
                            {
                                Scripting.Editor.EditorHelper.InitTempScript(client);
                                if (parse[1].ToBool() == false)
                                {
                                    Messenger.SendDataTo(client, TcpPacket.CreatePacket("scriptsyntax", System.IO.File.ReadAllText(IO.Paths.ScriptsFolder + "CSharp.syn")));
                                }
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("scripteditstart"));
                                Messenger.SendDataTo(client, TcpPacket.CreatePacket("scripteditdata", "Main.cs", System.IO.File.ReadAllText(IO.Paths.ScriptsFolder + "Main.cs").Replace(TcpPacket.SEP_CHAR, '/')));
                                Scripting.Editor.EditorHelper.SendScriptClasses(client);
                                TcpPacket filelistPacket = new TcpPacket("scriptfilelist");
                                Scripting.Editor.EditorHelper.AppendFileListToPacket(client, filelistPacket);
                                filelistPacket.FinalizePacket();
                                Messenger.SendDataTo(client, filelistPacket);
                                client.Player.InScriptEditor = true;
                            }
                        }
                        break;
                    case "savescript":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            System.IO.File.WriteAllText(Scripting.Editor.EditorHelper.GetTempFolder(client) + parse[1] + ".cs", parse[2]);
                            Messenger.PlayerMsg(client, "File Saved! (Temp)", Text.Yellow);
                        }
                        break;
                    case "finalizescript":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            bool testVal = Scripting.ScriptManager.TestCompile(Scripting.Editor.EditorHelper.GetTempFolder(client));
                            if (testVal)
                            {
                                Scripting.Editor.EditorHelper.SaveScript(client);
                                Messenger.PlayerMsg(client, "Script Compiled and Saved!", Text.Yellow);
                                Scripting.Editor.EditorHelper.SendScriptErrors(client);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Error during script compilation... Script was not saved.", Text.Yellow);
                                Scripting.Editor.EditorHelper.SendScriptErrors(client);
                            }
                        }
                        break;
                    case "savetemp":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning.");
                            return;
                        }
                        else
                        {
                            Scripting.Editor.EditorHelper.SaveTempScript(client, parse[1], parse[2]);
                        }
                        break;
                    case "compilescript":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning.");
                            return;
                        }
                        else
                        {
                            bool testVal = Scripting.ScriptManager.TestCompile(Scripting.Editor.EditorHelper.GetTempFolder(client));
                            if (testVal)
                            {
                                Scripting.Editor.EditorHelper.SaveScript(client);
                                Messenger.PlayerMsg(client, "Script Compiled and Saved!", Text.Yellow);
                                Scripting.Editor.EditorHelper.SendScriptErrors(client);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Error during script compilation... Script was not saved.", Text.Yellow);
                                Scripting.Editor.EditorHelper.SendScriptErrors(client);
                            }
                        }
                        break;
                    case "scripteditexit":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            return;
                        }
                        else
                        {
                            client.Player.InScriptEditor = false;
                            if (System.IO.Directory.Exists(Scripting.Editor.EditorHelper.GetTempFolder(client)))
                            {
                                System.IO.Directory.Delete(Scripting.Editor.EditorHelper.GetTempFolder(client), true);
                            }
                        }
                        break;
                    case "getscriptclasses":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Scripting.Editor.EditorHelper.SendScriptClasses(client);
                        }
                        break;
                    case "getscriptmethods":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Scripting.Editor.EditorHelper.SendScriptMethods(client, parse[1]);
                        }
                        break;
                    case "getscriptparam":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Scripting.Editor.EditorHelper.SendScriptParameters(client, parse[1], parse[2], parse[3].ToInt(1));
                        }
                        break;
                    case "requestscriptsyntax":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Messenger.SendDataTo(client, TcpPacket.CreatePacket("scriptsyntax", System.IO.File.ReadAllText(IO.Paths.ScriptsFolder + "CSharp.syn")));
                        }
                        break;
                    case "requesteditscriptfile":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Messenger.SendDataTo(client, TcpPacket.CreatePacket("scriptfiledata", parse[1], Scripting.Editor.EditorHelper.GetScriptFile(client, parse[1])));
                        }
                        break;
                    case "requestfilelist":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            TcpPacket filelistPacket = new TcpPacket("scriptfilelist");
                            Scripting.Editor.EditorHelper.AppendFileListToPacket(client, filelistPacket);
                            filelistPacket.FinalizePacket();
                            Messenger.SendDataTo(client, filelistPacket);
                        }
                        break;
                    case "addnewclass":
                        if (Ranks.IsDisallowed(client, Enums.Rank.Scripter))
                        {
                            Messenger.HackingAttempt(client, "Admin Cloning");
                            return;
                        }
                        else
                        {
                            Scripting.Editor.EditorHelper.AddNewClass(client, parse[1]);
                            TcpPacket filelistPacket = new TcpPacket("scriptfilelist");
                            Scripting.Editor.EditorHelper.AppendFileListToPacket(client, filelistPacket);
                            filelistPacket.FinalizePacket();
                            Messenger.SendDataTo(client, filelistPacket);
                        }
                        break;

                    #endregion
                    #region Dungeons
                    case "requesteditdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            Messenger.SendDataTo(client, TcpPacket.CreatePacket("dungeoneditor"));
                        }
                        break;
                    case "addnewdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            DungeonManager.AddDungeon();
                            Messenger.SendAddDungeonToAll(DungeonManager.Dungeons.Count - 1);
                        }
                        break;
                    case "savedungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            int n = parse[1].ToInt();

                            if (n < 0 || n > DungeonManager.Dungeons.Count)
                            {
                                return;
                            }

                            Dungeons.Dungeon dungeon = new Dungeon();

                            dungeon.Name = parse[2];
                            dungeon.AllowsRescue = parse[3].ToBool();

                            int scriptCount = parse[4].ToInt();

                            int z = 5;

                            for (int i = 0; i < scriptCount; i++)
                            {
                                dungeon.ScriptList.Add(parse[z].ToInt(), parse[z + 1]);
                                z += 2;
                            }

                            int standardMapCount = parse[z].ToInt();
                            z++;

                            for (int i = 0; i < standardMapCount; i++)
                            {
                                StandardDungeonMap map = new StandardDungeonMap();
                                map.Difficulty = (Enums.JobDifficulty)parse[z].ToInt();
                                map.IsBadGoalMap = parse[z + 1].ToBool();
                                map.MapNum = parse[z + 2].ToInt();
                                z += 3;
                                dungeon.StandardMaps.Add(map);
                            }

                            int randomMapCount = parse[z].ToInt();
                            z++;
                            for (int i = 0; i < randomMapCount; i++)
                            {
                                RandomDungeonMap map = new RandomDungeonMap();
                                map.Difficulty = (Enums.JobDifficulty)parse[z].ToInt();
                                map.IsBadGoalMap = parse[z + 1].ToBool();
                                map.RDungeonIndex = parse[z + 2].ToInt();
                                map.RDungeonFloor = parse[z + 3].ToInt();
                                z += 4;
                                dungeon.RandomMaps.Add(map);
                            }

                            DungeonManager.Dungeons[n] = dungeon;
                            DungeonManager.SaveDungeon(n);
                            Messenger.SendUpdateDungeonToAll(n);
                        }
                        break;
                    case "editdungeon":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            int n = parse[1].ToInt();

                            if (n < 0 || n > DungeonManager.Dungeons.Count)
                            {
                                Messenger.HackingAttempt(client, "Invalid dungeon client");
                                return;
                            }

                            Messenger.SendEditDungeonTo(client, n);
                        }
                        break;
                    #endregion
                    #region Missions
                    case "requesteditmission":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            Messenger.SendDataTo(client, TcpPacket.CreatePacket("missioneditor"));
                        }
                        break;
                    case "savemission":
                        {
                            WonderMails.MissionPool missionPool = new WonderMails.MissionPool();

                            int difficulty = parse[1].ToInt() - 1;

                            int clientCount = parse[2].ToInt();
                            int n = 3;
                            for (int i = 0; i < clientCount; i++)
                            {
                                WonderMails.MissionClientData missionClient = new WonderMails.MissionClientData();
                                missionClient.Species = parse[n].ToInt();
                                missionClient.Form = parse[n + 1].ToInt();
                                missionPool.MissionClients.Add(missionClient);

                                n += 2;

                            }

                            int enemyCount = parse[n].ToInt();
                            n++;

                            for (int i = 0; i < enemyCount; i++)
                            {
                                WonderMails.MissionEnemyData missionEnemy = new WonderMails.MissionEnemyData();
                                missionEnemy.NpcNum = parse[n].ToInt();
                                missionPool.Enemies.Add(missionEnemy);

                                n++;
                            }

                            int rewardCount = parse[n].ToInt();
                            n++;

                            for (int i = 0; i < rewardCount; i++)
                            {

                                WonderMails.MissionRewardData missionReward = new WonderMails.MissionRewardData(); ;
                                missionReward.ItemNum = parse[n].ToInt();
                                missionReward.Amount = parse[n + 1].ToInt();
                                missionReward.Tag = parse[n + 2];
                                missionPool.Rewards.Add(missionReward);

                                n += 3;

                            }

                            WonderMails.WonderMailManager.Missions[difficulty] = missionPool;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Data))
                            {
                                WonderMails.WonderMailManager.SaveMissionPool(dbConnection, difficulty);
                            }
                        }
                        break;
                    case "editmission":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Developer))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }

                            int n = parse[1].ToInt();

                            if (n < 0 || n > 16)
                            {
                                Messenger.HackingAttempt(client, "Invalid mission client");
                                return;
                            }

                            Messenger.SendEditMissionTo(client, n - 1);
                        }
                        break;
                    #endregion

                    #endregion
                    #region Online List
                    case "whosonline":
                        Messenger.SendWhosOnline(client);
                        break;
                    case "onlinelist":
                        Messenger.SendOnlineList(client);
                        break;
                    case "playerinforequest":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Moniter))
                            {
                                string name = parse[1];
                                Client i = ClientManager.FindClient(name);
                                if (i != null)
                                {
                                    Messenger.PlayerMsg(client, "Account: " + i.Player.AccountName.Trim() + ", " + i.Player.Name.Trim(), Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "-=- Stats for " + i.Player.Name + " -=-", Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "Level: " + i.Player.GetActiveRecruit().Level.ToString() + " Exp: " + i.Player.GetActiveRecruit().Exp.ToString() + "/" + i.Player.GetActiveRecruit().GetNextLevel().ToString(), Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "HP: " + i.Player.GetActiveRecruit().HP.ToString() + "/" + i.Player.GetMaxHP().ToString(), Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "Atk: " + i.Player.GetActiveRecruit().Atk.ToString() + "  Def: " + i.Player.GetActiveRecruit().Def.ToString() + "  Sp.Atk: " + i.Player.GetActiveRecruit().SpclAtk.ToString() + "  Sp.Def: " + i.Player.GetActiveRecruit().SpclDef.ToString() + "  Speed: " + i.Player.GetActiveRecruit().Spd.ToString(), Text.BrightGreen);
                                    Messenger.PlayerMsg(client, "Species: " + i.Player.GetActiveRecruit().Species.ToString() + " [" + Pokedex.Pokedex.GetPokemon(i.Player.GetActiveRecruit().Species).Name + "]    Sprite: " + i.Player.GetActiveRecruit().Sprite.ToString(), Text.BrightGreen);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                            }
                        }
                        break;
                    case "getstats":
                        {
                            Messenger.PlayerMsg(client, "-=- Stats for " + client.Player.Name + " -=-", Text.BrightGreen);
                            Messenger.PlayerMsg(client, "Level: " + client.Player.GetActiveRecruit().Level.ToString() + " Exp: " + client.Player.GetActiveRecruit().Exp.ToString() + "/" + client.Player.GetActiveRecruit().GetNextLevel().ToString(), Text.BrightGreen);
                            Messenger.PlayerMsg(client, "HP: " + client.Player.GetActiveRecruit().HP.ToString() + "/" + client.Player.GetMaxHP().ToString(), Text.BrightGreen);
                            Messenger.PlayerMsg(client, "Atk: " + client.Player.GetActiveRecruit().Atk.ToString() + "  Def: " + client.Player.GetActiveRecruit().Def.ToString() + "  Sp.Str: " + client.Player.GetActiveRecruit().SpclAtk.ToString() + "  Sp.Def: " + client.Player.GetActiveRecruit().SpclDef.ToString() + "  Speed: " + client.Player.GetActiveRecruit().Spd.ToString(), Text.BrightGreen);
                            Messenger.PlayerMsg(client, "Species: " + Pokedex.Pokedex.GetPokemon(client.Player.GetActiveRecruit().Species).Name, Text.BrightGreen);
                        }
                        break;
                    #endregion
                    #region Admin Commands
                    case "setaccess":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Admin))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            // The client
                            Client n = ClientManager.FindClient(parse[1]);
                            // The access
                            int i = parse[2].ToInt(-1);

                            // Check for invalid access level
                            if (i >= 0 || i <= 3)
                            {
                                if (client.Player.Name != n.Player.Name)
                                {
                                    // Check if player is on
                                    if (n != null)
                                    {
                                        if (Ranks.IsAllowed(client, (Enums.Rank)i))
                                        {
                                            if (Ranks.IsDisallowed(n, Enums.Rank.Moniter))
                                            {
                                                Messenger.GlobalMsg(n.Player.Name + " has been blessed with administrative access.", Text.BrightBlue);
                                            }

                                            n.Player.Access = (Enums.Rank)i;
                                            Messenger.SendPlayerData(n);

                                            if (Ranks.IsAllowed(n, Enums.Rank.Mapper))
                                            {
                                                n.Player.AddExpKitModule(new AvailableExpKitModule(Enums.ExpKitModules.MapReport, true));
                                            }
                                            else
                                            {
                                                if (n.Player.AvailableExpKitModules.Contains(Enums.ExpKitModules.MapReport))
                                                {
                                                    n.Player.RemoveExpKitModule(Enums.ExpKitModules.MapReport);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Messenger.PlayerMsg(client, "You cannot set someone's access higher than yours!", Text.BrightRed);
                                        }
                                    }
                                    else
                                    {
                                        Messenger.PlayerMsg(client, "Player is not online.", Text.White);
                                    }
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "You cant change your access.", Text.Red);
                                }
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Invalid access level.", Text.Red);
                            }

                        }
                        break;
                    case "setmotd":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            Settings.MOTD = parse[1];
                            Messenger.GlobalMsg("MOTD changed to: " + parse[1], Text.BrightCyan);
                            Settings.SaveMOTD();
                        }
                        break;
                    case "restartserver":
                        {
                            // Prevent hacking
                            if (Ranks.IsDisallowed(client, Enums.Rank.ServerHost))
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning");
                                return;
                            }

                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                foreach (Client i in ClientManager.GetClients())
                                {
                                    if (i.IsPlaying())
                                    {
                                        i.Player.SaveCharacterData(dbConnection);
                                    }
                                }
                            }
                            PlayerManager.SavingEnabled = false;

                            System.Windows.Forms.Application.Restart();
                            System.Environment.Exit(0);
                        }
                        break;
                    case "setsprite":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                int n = parse[1].ToInt(-1);
                                if (n > -1)
                                {
                                    client.Player.GetActiveRecruit().SetSpecies(n);
                                    Messenger.SendPlayerData(client);
                                    Messenger.SendActiveTeam(client);
                                    Messenger.SendStats(client);
                                }
                            }
                        }
                        break;
                    case "setplayersprite":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Admin))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                int n = parse[2].ToInt(-1);
                                Client player = ClientManager.FindClient(parse[1]);
                                if (n > -1 && player != null)
                                {
                                    player.Player.GetActiveRecruit().SetSpecies(n);
                                    Messenger.SendPlayerData(player);
                                    Messenger.SendActiveTeam(player);
                                    Messenger.SendStats(player);
                                }
                            }
                        }
                        break;
                    case "maprespawn":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                IMap map = client.Player.GetCurrentMap();
                                for (int i = 0; i < Constants.MAX_MAP_ITEMS; i++)
                                {
                                    map.SpawnItemSlot(i, -1, 0, false, false, "", map.ActiveItem[i].X, map.ActiveItem[i].Y, null);
                                    map.ClearActiveItem(i);
                                }
                                map.SpawnItems();

                                // Respawn NPCs
                                for (int i = 0; i < Constants.MAX_MAP_NPCS; i++)
                                {
                                    map.ClearActiveNpc(i);
                                }
                                map.SpawnNpcs();
                                Messenger.PlayerMsg(client, "Map respawned.", Text.Blue);
                            }
                        }
                        break;
                    case "kickplayer":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                Client n = ClientManager.FindClient(parse[1]);
                                if (n == client)
                                {
                                    Messenger.PlayerMsg(client, "You can't kick yourself!", Text.BrightRed);
                                }
                                else if (n == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else if (Ranks.IsAllowed(n, client.Player.Access))
                                {
                                    Messenger.PlayerMsg(client, "That is a higher access admin than you!", Text.BrightRed);
                                }
                                else
                                {
                                    //Messenger.GlobalMsg(n.Player.Name + " has been kicked from " + Settings.GameName + " by " + client.Player.Name + "!", Text.White);
                                    //Messenger.AlertMsg(n, "You have been kicked by " + client.Player.Name + "!");
                                    Messenger.PlayerMsg(client, n.Player.Name + " has been kicked from the server!", Text.BrightGreen);
                                    Messenger.PlainMsg(n, "You have been kicked from the server!", Enums.PlainMsgType.MainMenu);
                                    n.CloseConnection();
                                }
                            }
                        }
                        break;
                    case "banplayer":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                Client n = ClientManager.FindClient(parse[1]);
                                if (n == client)
                                {
                                    Messenger.PlayerMsg(client, "You can't kick yourself!", Text.BrightRed);
                                }
                                else if (n == null)
                                {
                                    Messenger.PlayerMsg(client, "Player is offline.", Text.Grey);
                                }
                                else if (Ranks.IsAllowed(n, client.Player.Access))
                                {
                                    Messenger.PlayerMsg(client, "That is a higher access admin than you!", Text.BrightRed);
                                }
                                else
                                {
                                    //  Add banning to scripts
                                    //Messenger.GlobalMsg(n.Player.Name + " has been banned from " + Settings.GameName + " by " + client.Player.Name + "!", Text.White);
                                    //PlayerManager.AddToBanList(((System.Net.IPEndPoint)n.TcpClient.Socket.RemoteEndPoint).Address.ToString(), client.Player.Name, n.Player.Name);
                                    //Messenger.AlertMsg(n, "You have been kicked by " + client.Player.Name + "!");
                                }
                            }
                        }
                        break;
                    case "banlist":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Moniter))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                // TODO: Display ban list
                                //if (PlayerManager.Bans.Count > 0) {
                                //    string list = "";
                                //    for (int i = 0; i < PlayerManager.Bans.Count; i++) {
                                //        list += i.ToString() + ". IP: " + PlayerManager.Bans[i].BannedIP + ", Banned By: " + PlayerManager.Bans[i].BannedBy + ", Banned Player: " + PlayerManager.Bans[i].BannedAccount + "\r\n";
                                //    }
                                //    Messenger.PlayerMsg(client, list, Text.BrightBlue);
                                //} else {
                                //    Messenger.PlayerMsg(client, "There are no bans.", Text.BrightBlue);
                                //}
                            }
                        }
                        break;
                    // TODO: Unban all players/unban single player [MEDIUM]
                    case "banlistdestroy":
                        {

                        }
                        break;
                    case "warpto":
                        {
                            if (Ranks.IsDisallowed(client, Enums.Rank.Mapper))
                            {
                                Messenger.HackingAttempt(client, "Admin cloning");
                                return;
                            }
                            else
                            {
                                Messenger.PlayerWarp(client, parse[1].ToInt(), client.Player.X, client.Player.Y);
                            }
                        }
                        break;
                    case "warptome":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                Client n = ClientManager.FindClient(parse[1]);
                                if (n != null)
                                {
                                    Messenger.PlayerWarp(n, client.Player.Map, client.Player.X, client.Player.Y);
                                }
                            }
                        }
                        break;

                    case "warpmeto":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper))
                            {
                                Client n = ClientManager.FindClient(parse[1]);
                                if (n != null)
                                {
                                    Messenger.PlayerWarp(client, n.Player.Map, n.Player.X, n.Player.Y);
                                }
                            }
                        }
                        break;
                    case "warploc":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Mapper) || client.Player.Map.MapType == Enums.MapType.House && ((House)client.Player.Map).OwnerID == client.Player.CharID)
                            {
                                Messenger.PlayerXYWarp(client, parse[1].ToInt(), parse[2].ToInt());
                            }
                        }
                        break;
                    case "arrowhit":
                        {
                            // TODO: Easy way to damage any player. Modify arrow code to be processed server-side [HIGH]
                            int n = parse[1].ToInt();
                            int z = parse[2].ToInt();
                            int x = parse[3].ToInt();
                            int y = parse[4].ToInt();

                            // BattleProcessor.ArrowHit(client, (Enums.TargetType)n, z);
                        }
                        break;
                    case "saveplayer":
                        {
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                client.Player.SaveCharacterData(dbConnection);
                            }
                            Messenger.PlayerMsg(client, "You have saved the game.", Text.Yellow);
                        }
                        break;
                    case "solid":
                        {
                            if (client.Player.Solid == true)
                            {
                                client.Player.Solid = false;
                                Messenger.PlayerMsg(client, "You can run through players now.", Text.Yellow);
                            }
                            else
                            {
                                client.Player.Solid = true;
                                Messenger.PlayerMsg(client, "You can no longer run through players.", Text.Yellow);
                            }
                            Messenger.SendPlayerData(client);
                        }
                        break;
                    case "weather":
                        {
                            if (Ranks.IsAllowed(client, Enums.Rank.Developer))
                            {
                                int weather = parse[1].ToInt(-1);
                                if (weather > -1 && weather < 13)
                                {
                                    Globals.ServerWeather = (Enums.Weather)weather;
                                    if (Globals.ServerWeather != Enums.Weather.Ambiguous)
                                    {
                                        IMap[] mapArray = MapManager.ToArray();
                                        for (int i = 0; i < mapArray.Length; i++)
                                        {
                                            mapArray[i].Weather = Globals.ServerWeather;
                                        }
                                    }
                                    Messenger.SendWeatherToAll();
                                }
                            }
                            else
                            {
                                Messenger.HackingAttempt(client, "Admin Cloning [Changing Weather]");
                            }
                        }
                        break;
                    #endregion
                    #region Friends List
                    case "sendfriendslist":
                        client.Player.SendFriendsList();
                        break;
                    case "addfriend":
                        client.Player.AddFriend(parse[1]);
                        break;
                    case "removefriend":
                        client.Player.RemoveFriend(parse[1]);
                        break;
                    #endregion
                    #region Guild
                    case "guildpromote":
                        {

                            if (client.Player.GuildAccess < Enums.GuildRank.Founder)
                            {
                                Messenger.PlayerMsg(client, "You are not the owner of this guild!", Text.BrightRed);
                                return;
                            }

                            ListPair<string, int> members;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                members = DataManager.Players.PlayerDataManager.LoadGuild(dbConnection.Database, client.Player.GuildName);

                                if (parse[1].ToInt() > members.Count)
                                {
                                    Messenger.PlayerMsg(client, "That player doesn't seem to be in the guild anymore.", Text.BrightRed);
                                    return;
                                }

                                int adminCount = 0;
                                for (int i = 0; i < members.Count; i++)
                                {
                                    if (members.ValueByIndex(i) > 1)
                                    {
                                        adminCount++;
                                    }
                                }

                                if (client.Player.HasItem(1) < Guilds.GuildManager.PROMOTE_PRICE * adminCount)
                                {
                                    Messenger.PlayerMsg(client, "You need " + Guilds.GuildManager.PROMOTE_PRICE * adminCount + " " + ItemManager.Items[1].Name + " to promote a member.", Text.BrightRed);
                                    return;
                                }

                                client.Player.TakeItem(1, Guilds.GuildManager.PROMOTE_PRICE * adminCount, true);
                                DataManager.Players.PlayerDataManager.SetGuildAccess(dbConnection.Database, members.KeyByIndex(parse[1].ToInt()), (int)Enums.GuildRank.Admin);
                                Messenger.PlayerMsg(client, "The player has been promoted.", Text.Blue);

                            }

                            Client target = ClientManager.FindClientFromCharID(members.KeyByIndex(parse[1].ToInt()));

                            if (target != null)
                            {
                                //Set the player's New access level
                                target.Player.GuildAccess = Enums.GuildRank.Admin;
                                //send the guild access data to all
                                Messenger.SendPlayerGuild(target);
                            }
                            //send the update to all possible guild members
                            Messenger.SendFullGuildUpdate(client.Player.GuildName);
                        }
                        break;
                    case "guilddemote":
                        {

                            if (client.Player.GuildAccess < Enums.GuildRank.Founder)
                            {
                                Messenger.PlayerMsg(client, "You are not the owner of this guild!", Text.BrightRed);
                                return;
                            }
                            ListPair<string, int> members;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                members = DataManager.Players.PlayerDataManager.LoadGuild(dbConnection.Database, client.Player.GuildName);

                                if (parse[1].ToInt() > members.Count)
                                {
                                    Messenger.PlayerMsg(client, "That player doesn't seem to be in the guild anymore.", Text.BrightRed);
                                    return;
                                }

                                DataManager.Players.PlayerDataManager.SetGuildAccess(dbConnection.Database, members.KeyByIndex(parse[1].ToInt()), (int)Enums.GuildRank.Member);
                                Messenger.PlayerMsg(client, "The player has been demoted.", Text.Blue);
                            }

                            Client target = ClientManager.FindClientFromCharID(members.KeyByIndex(parse[1].ToInt()));

                            if (target != null)
                            {
                                //Set the player's New access level
                                target.Player.GuildAccess = Enums.GuildRank.Member;
                                //send the guild access data to all
                                Messenger.SendPlayerGuild(target);
                            }
                            //send the update to all possible guild members
                            Messenger.SendFullGuildUpdate(client.Player.GuildName);
                        }
                        break;
                    // Disown
                    case "guilddisown":
                        {

                            if (client.Player.GuildAccess < Enums.GuildRank.Admin)
                            {
                                Messenger.PlayerMsg(client, "Your guild rank isn't high enough to disown players!", Text.BrightRed);
                                return;
                            }
                            ListPair<string, int> members;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                members = DataManager.Players.PlayerDataManager.LoadGuild(dbConnection.Database, client.Player.GuildName);

                                if (parse[1].ToInt() > members.Count)
                                {
                                    Messenger.PlayerMsg(client, "That player doesn't seem to be in the guild anymore.", Text.BrightRed);
                                    return;
                                }

                                DataManager.Players.PlayerDataManager.RemoveGuildMember(dbConnection.Database, members.KeyByIndex(parse[1].ToInt()));
                                Messenger.PlayerMsg(client, "The player has been disowned.", Text.Blue);
                            }

                            Client target = ClientManager.FindClientFromCharID(members.KeyByIndex(parse[1].ToInt()));

                            if (target != null)
                            {
                                target.Player.GuildName = "";
                                target.Player.GuildAccess = Enums.GuildRank.None;
                                //send the guild access data to all
                                Messenger.SendPlayerGuild(target);
                            }
                            //send the update to all possible guild members
                            Messenger.SendFullGuildUpdate(client.Player.GuildName);
                        }
                        break;
                    // Leave Guild
                    case "guildleave":
                        {
                            // Check if they can leave
                            if (string.IsNullOrEmpty(client.Player.GuildName))
                            {
                                Messenger.PlayerMsg(client, "You are not in a guild.", Text.BrightRed);
                                return;
                            }
                            bool stepDown = false;
                            if (client.Player.GuildAccess > Enums.GuildRank.Member)
                            {
                                stepDown = true;
                            }

                            int index = -1;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                ListPair<string, int> members = DataManager.Players.PlayerDataManager.LoadGuild(dbConnection.Database, client.Player.GuildName);

                                index = members.IndexOfKey(client.Player.CharID);

                                int founders = 0;
                                for (int i = 0; i < members.Count; i++)
                                {
                                    if (members.ValueByIndex(i) == (int)Enums.GuildRank.Founder) founders++;
                                }

                                if (founders == 1 && client.Player.GuildAccess == Enums.GuildRank.Founder)
                                {
                                    Messenger.AskQuestion(client, "DisbandGuild", "As the sole founder of this guild, if you step down, the guild will be disbanded.  Is that OK?", -1);
                                }
                                else if (stepDown)
                                {
                                    Messenger.AskQuestion(client, "GuildStepDown", "Are you sure you want to step down from your current guild position?", -1);
                                }
                                else
                                {
                                    Messenger.AskQuestion(client, "GuildStepDown", "Are you sure you want to leave the guild?", -1);
                                }
                            }
                        }
                        break;
                    // Make A New Guild
                    case "makeguild":
                        {
                            string name = parse[1].Trim();

                            Guilds.GuildManager.RegisterGuild(client, name);

                        }
                        break;
                    case "guildmember":
                        {

                            if (client.Player.GuildAccess < Enums.GuildRank.Admin)
                            {
                                Messenger.PlayerMsg(client, "Your guild rank isn't high enough to add players!", Text.BrightRed);
                                return;
                            }

                            //find character ID from name in database
                            string charID;
                            string guild;
                            Client target = null;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                charID = DataManager.Players.PlayerDataManager.RetrieveCharacterID(dbConnection.Database, parse[1]);

                                if (String.IsNullOrEmpty(charID))
                                {
                                    Messenger.PlayerMsg(client, "The player could not be found.", Text.BrightRed);
                                    return;
                                }

                                target = ClientManager.FindClientFromCharID(charID);

                                if (target == null)
                                {
                                    Messenger.PlayerMsg(client, "That player isn't online!", Text.BrightRed);
                                    return;
                                }

                                if (target.Player.MapID != client.Player.MapID || target.Player.X != client.Player.X || target.Player.Y != client.Player.Y)
                                {
                                    Messenger.PlayerMsg(client, "The joining player needs to be with you on the same tile!", Text.BrightRed);
                                    return;
                                }

                                guild = DataManager.Players.PlayerDataManager.GetGuildName(dbConnection.Database, charID);

                                if (!String.IsNullOrEmpty(guild))
                                {
                                    Messenger.PlayerMsg(client, "That player is already in a guild!", Text.BrightRed);
                                    return;
                                }

                                ListPair<string, int> members = DataManager.Players.PlayerDataManager.LoadGuild(dbConnection.Database, client.Player.GuildName);

                                if (client.Player.HasItem(1) < Guilds.GuildManager.RECRUIT_PRICE * members.Count)
                                {
                                    Messenger.PlayerMsg(client, "You need " + Guilds.GuildManager.RECRUIT_PRICE * members.Count + " " + ItemManager.Items[1].Name + " to add a member.", Text.BrightRed);
                                    return;
                                }

                                client.Player.TakeItem(1, Guilds.GuildManager.RECRUIT_PRICE * members.Count, true);
                                DataManager.Players.PlayerDataManager.AddGuildMember(dbConnection.Database, client.Player.GuildName, charID);
                                Messenger.PlayerMsg(client, "The player has been added to the guild!", Text.Blue);
                            }

                            if (target != null)
                            {
                                target.Player.GuildName = client.Player.GuildName;
                                target.Player.GuildAccess = Enums.GuildRank.Member;
                                //send the guild access data to all
                                Messenger.SendPlayerGuild(target);
                            }
                            //send the update to all possible guild members
                            Messenger.SendFullGuildUpdate(client.Player.GuildName);
                        }
                        break;
                    #endregion
                    #region Items
                    case "useitem":
                        {
                            if (client.Player.GettingMap) return;
                            int invNum = parse[1].ToInt(-1);
                            if (invNum != -1 && (invNum < 1 || invNum > client.Player.MaxInv))
                            {
                                Messenger.HackingAttempt(client, "Invalid InvNum");
                                return;
                            }

                            client.Player.UseItem(client.Player.Inventory[invNum], invNum);
                        }
                        break;
                    case "throwitem":
                        {
                            if (client.Player.GettingMap) return;
                            int invNum = parse[1].ToInt(-1);
                            if (invNum != -1 && (invNum < 1 || invNum > client.Player.MaxInv))
                            {
                                Messenger.HackingAttempt(client, "Invalid InvNum");
                                return;
                            }
                            client.Player.ThrowItem(client.Player.Inventory[parse[1].ToInt(-1)], parse[1].ToInt(-1));
                        }
                        break;
                    case "holditem":
                        {
                            client.Player.HoldItem(parse[1].ToInt(-1));
                        }
                        break;
                    case "removeitem":
                        {
                            client.Player.RemoveItem(parse[1].ToInt(-1));
                        }
                        break;
                    case "swapinvitems":
                        {
                            int oldInvSlot = parse[1].ToInt(-1);
                            int newInvSlot = parse[2].ToInt(-1);
                            if (oldInvSlot > 0 && oldInvSlot <= client.Player.MaxInv && newInvSlot > 0 && newInvSlot <= client.Player.MaxInv)
                            {
                                InventoryItem oldItem = client.Player.Inventory[oldInvSlot];
                                InventoryItem newItem = client.Player.Inventory[newInvSlot];

                                oldItem.Updated = true;
                                newItem.Updated = true;

                                client.Player.Inventory[oldInvSlot] = newItem;
                                client.Player.Inventory[newInvSlot] = oldItem;

                                int[] teamHeldItems = new int[client.Player.Team.Length];
                                bool heldItemsUpdated = false;
                                for (int i = 0; i < client.Player.Team.Length; i++)
                                {
                                    if (client.Player.Team[i].Loaded)
                                    {
                                        teamHeldItems[i] = client.Player.Team[i].HeldItemSlot;
                                    }
                                }
                                for (int i = 0; i < teamHeldItems.Length; i++)
                                {
                                    if (teamHeldItems[i] == oldInvSlot)
                                    {
                                        client.Player.Team[i].HeldItemSlot = newInvSlot;
                                        heldItemsUpdated = true;
                                    }
                                    else if (teamHeldItems[i] == newInvSlot)
                                    {
                                        client.Player.Team[i].HeldItemSlot = oldInvSlot;
                                        heldItemsUpdated = true;
                                    }
                                }

                                PacketHitList hitlist = null;
                                PacketHitList.MethodStart(ref hitlist);

                                Messenger.SendInventoryUpdate(client, oldInvSlot, hitlist);
                                Messenger.SendInventoryUpdate(client, newInvSlot, hitlist);
                                if (heldItemsUpdated)
                                {
                                    PacketBuilder.AppendWornEquipment(client, hitlist);
                                }

                                PacketHitList.MethodEnded(ref hitlist);
                            }
                        }
                        break;
                    #endregion
                    #region Shops
                    case "shoprequest":
                        {
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Shop)
                            {
                                if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1 > 0)
                                {
                                    Messenger.SendTrade(client, client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1);
                                }
                                else
                                {
                                    Messenger.PlayerMsg(client, "There is no shop here.", Text.BrightRed);
                                }
                            }
                        }
                        break;
                    case "shopleave":
                        {
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Shop && client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1 > 0)
                            {
                                int shopNum = client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1;
                                if (Shops.ShopManager.Shops[shopNum].LeaveSay.Trim() != "")
                                {
                                    Messenger.PlayerMsg(client, Shops.ShopManager.Shops[shopNum].LeaveSay.Trim(), Text.Yellow);
                                }
                            }
                        }
                        break;
                    case "traderequest":
                        {
                            // Trade num
                            int n = parse[1].ToInt();
                            int z = parse[2].ToInt();

                            // Prevent hacking
                            if ((z < 0) || (z > Constants.MAX_TRADES))
                            {
                                Messenger.HackingAttempt(client, "Trade Request Modification (index)");
                                return;
                            }
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.Shop)
                            {
                                Messenger.HackingAttempt(client, "Trade Request Modification (tile)");
                                return;
                            }

                            // Index for shop
                            int i = client.Player.GetCurrentMap().Tile[client.Player.X, client.Player.Y].Data1;

                            // Check if inv full
                            if (i <= 0) return;
                            int X = client.Player.FindInvSlot(ShopManager.Shops[i].Items[z].GetItem, n);
                            if (X == -1)
                            {
                                Messenger.PlayerMsg(client, "Trade unsuccessful, inventory full.", Text.BrightRed);
                                return;
                            }
                            if (n == 0)
                            {
                                if (ItemManager.Items[ShopManager.Shops[i].Items[z].GetItem].StackCap > 0)
                                {
                                    Messenger.PlayerMsg(client, "You must buy more than 0!", Text.BrightRed);
                                    return;
                                }
                                else
                                {
                                    n = 1;
                                }

                            }

                            if (ItemManager.Items[ShopManager.Shops[i].Items[z].GetItem].Rarity > (int)client.Player.ExplorerRank + 1)
                            {
                                Messenger.PlayerMsg(client, "Your Explorer Rank is not high enough to receive this item!", Text.BrightRed);
                                return;
                            }

                            // Check if they have the item
                            if (client.Player.HasItem(ShopManager.Shops[i].Items[z].GiveItem) >= ShopManager.Shops[i].Items[z].GiveValue * n)
                            {
                                client.Player.TakeItem(ShopManager.Shops[i].Items[z].GiveItem, ShopManager.Shops[i].Items[z].GiveValue * n);
                                client.Player.GiveItem(ShopManager.Shops[i].Items[z].GetItem, n);
                                Messenger.PlayerMsg(client, "The trade was successful!", Text.Yellow);
                                Messenger.SendInventory(client);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "Trade unsuccessful.", Text.BrightRed);
                            }
                        }
                        break;
                    case "sellitem":
                        {//sell multiples
                            int sellItemNum = parse[2].ToInt();
                            int SellItemAmount = parse[1].ToInt();

                            // Prevent hacking
                            if ((sellItemNum < 0) || (sellItemNum >= ItemManager.Items.MaxItems))
                            {
                                Messenger.HackingAttempt(client, "Trade Request Modification");
                                return;
                            }
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.Shop)
                            {
                                Messenger.HackingAttempt(client, "Trade Request Modification");
                                return;
                            }
                            if (ItemManager.Items[sellItemNum].Price <= 0)
                            {
                                Messenger.PlayerMsg(client, "You can't sell that!", Text.BrightRed);
                                break;
                            }

                            if (SellItemAmount <= 0)
                            {
                                if (ItemManager.Items[sellItemNum].StackCap > 0)
                                {
                                    Messenger.PlayerMsg(client, "You must sell more than 0!", Text.BrightRed);
                                    break;
                                }
                                else
                                {
                                    SellItemAmount = 1;
                                }
                            }
                            if (client.Player.HasItem(sellItemNum) > 0)
                            {
                                if (client.Player.HasItem(sellItemNum) < SellItemAmount)
                                {
                                    Messenger.PlayerMsg(client, "You can't sell more than you have!", Text.BrightRed);
                                    break;
                                }
                                client.Player.TakeItem(sellItemNum, SellItemAmount);
                                client.Player.GiveItem(1, ItemManager.Items[sellItemNum].Price * SellItemAmount);
                                Messenger.SendInventory(client);
                                Messenger.PlayerMsg(client, "You have sold " + SellItemAmount + " " + Items.ItemManager.Items[sellItemNum].Name + "!", Text.BrightGreen);
                                //Messenger.SendDataTo(client, TcpPacket.CreatePacket("updatesell"));
                            }
                        }
                        break;
                    case "moverecall":
                        {
                            int recallMove = parse[1].ToInt();
                            // Prevent hacking
                            if ((recallMove <= 0) || (recallMove > MoveManager.Moves.MaxMoves))
                            {
                                Messenger.HackingAttempt(client, "Move Recall Out of Range :" + recallMove);
                                return;
                            }
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type != Enums.TileType.LinkShop)
                            {
                                return;
                            }

                            int priceItem = client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1;
                            int priceAmount = client.Player.Map.Tile[client.Player.X, client.Player.Y].Data2;
                            bool earlierEvo = (client.Player.Map.Tile[client.Player.X, client.Player.Y].Data3 == 1);
                            if (Items.ItemManager.Items[priceItem].StackCap <= 0 && Items.ItemManager.Items[priceItem].Type != Enums.ItemType.Currency)
                            {
                                priceAmount = 1;
                            }

                            for (int i = 0; i < 4; i++)
                            {
                                if (client.Player.GetActiveRecruit().Moves[i].MoveNum == recallMove)
                                {
                                    Messenger.PlayerMsg(client, "You already know this move.", Text.BrightRed);
                                    return;
                                }
                            }

                            if (earlierEvo)
                            {
                                int species = EvolutionManager.FindPreEvolution(client.Player.GetActiveRecruit().Species);

                                while (species > -1)
                                {

                                    Pokedex.PokemonForm pokemon = Pokedex.Pokedex.GetPokemonForm(species, client.Player.GetActiveRecruit().Form);
                                    if (pokemon != null)
                                    {
                                        for (int n = 0; n < pokemon.LevelUpMoves.Count; n++)
                                        {
                                            if (pokemon.LevelUpMoves[n].Level <= client.Player.GetActiveRecruit().Level)
                                            {
                                                if (pokemon.LevelUpMoves[n].Move == recallMove)
                                                {
                                                    if (client.Player.HasItem(priceItem) >= priceAmount)
                                                    {
                                                        client.Player.TakeItem(priceItem, priceAmount);
                                                        client.Player.GetActiveRecruit().LearnNewMove(recallMove);
                                                        Messenger.SendPlayerMoves(client);
                                                    }
                                                    else
                                                    {
                                                        Messenger.PlayerMsg(client, "You do not have enough to recall a move!", Text.BrightRed);
                                                    }
                                                    return;
                                                }
                                            }
                                        }
                                    }

                                    species = EvolutionManager.FindPreEvolution(species);
                                }
                            }
                            else
                            {
                                Pokedex.PokemonForm pokemon = Pokedex.Pokedex.GetPokemonForm(client.Player.GetActiveRecruit().Species, client.Player.GetActiveRecruit().Form);
                                if (pokemon != null)
                                {
                                    for (int n = 0; n < pokemon.LevelUpMoves.Count; n++)
                                    {
                                        if (pokemon.LevelUpMoves[n].Level <= client.Player.GetActiveRecruit().Level && pokemon.LevelUpMoves[n].Move == recallMove)
                                        {

                                            if (client.Player.HasItem(priceItem) >= priceAmount)
                                            {
                                                client.Player.TakeItem(priceItem, priceAmount);
                                                client.Player.GetActiveRecruit().LearnNewMove(recallMove);
                                                Messenger.SendPlayerMoves(client);
                                            }
                                            else
                                            {
                                                Messenger.PlayerMsg(client, "You do not have enough to recall a move!", Text.BrightRed);
                                            }
                                            return;

                                        }
                                    }

                                }
                            }

                        }
                        break;
                    #endregion
                    #region Bank
                    case "bankdeposit":
                        {
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Bank)
                            {
                                int slot = parse[1].ToInt();
                                int amount = parse[2].ToInt();
                                int X = client.Player.Inventory[slot].Num;
                                string tag = client.Player.Inventory[slot].Tag;
                                int i = client.Player.FindBankSlot(X, amount);
                                if (i == -1)
                                {
                                    Messenger.StorageMessage(client, "The storage is full!");
                                    return;
                                }

                                if (amount > client.Player.Inventory[slot].Amount)
                                {
                                    Messenger.StorageMessage(client, "You cant deposit more than you have!");
                                    return;
                                }

                                if (ItemManager.Items[X].Type == Enums.ItemType.Currency || ItemManager.Items[X].StackCap > 0)
                                {//handle clientside
                                    if (amount <= 0)
                                    {
                                        Messenger.StorageMessage(client, "You must deposit more than 0!");
                                        return;
                                    }
                                }

                                client.Player.TakeItemSlot(slot, amount, true);
                                client.Player.GiveBankItem(X, amount, tag, i);
                            }
                            else
                            {
                                Messenger.HackingAttempt(client, "Player not in Storage");
                            }
                            //Messenger.SendBank(client);
                        }
                        break;
                    case "bankwithdraw":
                        {
                            if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Type == Enums.TileType.Bank)
                            {
                                int slot = parse[1].ToInt();
                                int i = client.Player.Bank[parse[1].ToInt()].Num;
                                string tag = client.Player.Bank[parse[1].ToInt()].Tag;
                                int TempVal = parse[2].ToInt();
                                int X = client.Player.FindInvSlot(i, TempVal);
                                if (X == -1)
                                {
                                    Messenger.StorageMessage(client, "There's no more room in your bag!");
                                    return;
                                }

                                if (TempVal > client.Player.Bank[slot].Amount)
                                {
                                    Messenger.StorageMessage(client, "You cant withdraw more than you have!");
                                    return;
                                }

                                if (ItemManager.Items[i].Type == Enums.ItemType.Currency || ItemManager.Items[i].StackCap > 0)
                                {//handle clientside
                                    if (TempVal <= 0)
                                    {
                                        Messenger.StorageMessage(client, "You must withdraw more than 0!");
                                        return;
                                    }
                                }

                                client.Player.GiveItem(i, TempVal, tag, false);
                                client.Player.TakeBankItem(slot, TempVal);
                            }
                            else
                            {
                                Messenger.HackingAttempt(client, "Player not in Storage");
                            }
                            //Messenger.SendBank(client);
                        }
                        break;
                    case "bankwithdrawmenu":
                        {
                            Messenger.SendBank(client);
                        }
                        break;
                    #endregion
                    #region Custom Menus
                    case "picclick":
                    case "lblclick":
                    case "txtclick":
                    case "menuclosed":
                        client.Player.CustomMenuManager.ProcessTCP(parse);
                        break;
                    #endregion
                    #region Housing
                    case "housevisitrequest":
                        {
                            string ownerName = parse[1];
                            // Now, find the owner ID using the char list...
                            string ownerID;
                            using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                            {
                                ownerID = PlayerManager.RetrieveCharacterID(dbConnection, ownerName);
                            }
                            if (!string.IsNullOrEmpty(ownerID))
                            {
                                Messenger.PlayerWarpToHouse(client, ownerID, 0);
                            }
                            else
                            {
                                Messenger.PlayerMsg(client, "There is no house owned by a player of that name.", Text.BrightRed);
                            }
                        }
                        break;
                    case "addshoprequest":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't place a shop tile here.", Text.BrightRed);
                                return;
                            }
                            int price = parse[1].ToInt();
                            if (client.Player.HasItem(1) < price / House.SHOP_PRICE)
                            {
                                Messenger.PlayerMsg(client, "You need " + price / House.SHOP_PRICE + " " + ItemManager.Items[1].Name + " to place a shop tile.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, price / House.SHOP_PRICE, true);

                            map.Tile[client.Player.X, client.Player.Y].Type = Enums.TileType.DropShop;
                            map.Tile[client.Player.X, client.Player.Y].Data1 = price;
                            map.Tile[client.Player.X, client.Player.Y].Data2 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data3 = 0;
                            map.Tile[client.Player.X, client.Player.Y].String1 = client.Player.CharID;
                            map.Tile[client.Player.X, client.Player.Y].String2 = "";
                            map.Tile[client.Player.X, client.Player.Y].String3 = "";

                            Messenger.PlayerMsg(client, "A shop tile has been placed!  You can now sell items for " + parse[1].ToInt() + " " + ItemManager.Items[1].Name + " by dropping your items on the tile.", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "addnoticerequest":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't place a special tile here.", Text.BrightRed);
                                return;
                            }

                            int totalLength = parse[1].Length + parse[2].Length;
                            if (client.Player.HasItem(1) < House.NOTICE_PRICE)
                            {
                                Messenger.PlayerMsg(client, "You need " + (House.NOTICE_PRICE + House.WORD_PRICE * totalLength) + " " + ItemManager.Items[1].Name + " to place a special tile.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, House.NOTICE_PRICE + House.WORD_PRICE * totalLength, true);

                            map.Tile[client.Player.X, client.Player.Y].Type = Enums.TileType.Notice;
                            map.Tile[client.Player.X, client.Player.Y].Data1 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data2 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data3 = 0;
                            map.Tile[client.Player.X, client.Player.Y].String1 = parse[1];
                            map.Tile[client.Player.X, client.Player.Y].String2 = parse[2];
                            map.Tile[client.Player.X, client.Player.Y].String3 = parse[3];

                            //Messenger.SendTile(client.Player.X, client.Player.Y, client.Player.Map);
                            Messenger.PlayerMsg(client, "A notice tile has been placed!  Step on it to read what it says.", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "addsoundrequest":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't place a special tile here.", Text.BrightRed);
                                return;
                            }

                            if (client.Player.HasItem(1) < House.SOUND_PRICE)
                            {
                                Messenger.PlayerMsg(client, "You need " + House.SOUND_PRICE + " " + ItemManager.Items[1].Name + " to place a special tile.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, House.SOUND_PRICE, true);

                            map.Tile[client.Player.X, client.Player.Y].Type = Enums.TileType.Sound;
                            map.Tile[client.Player.X, client.Player.Y].Data1 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data2 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data3 = 0;
                            map.Tile[client.Player.X, client.Player.Y].String1 = parse[1];
                            map.Tile[client.Player.X, client.Player.Y].String2 = "";
                            map.Tile[client.Player.X, client.Player.Y].String3 = "";

                            //Messenger.SendTile(client.Player.X, client.Player.Y, client.Player.Map);
                            Messenger.PlayerMsg(client, "A sound tile has been placed!  Step on it to play a sound.", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "addsignrequest":
                        {

                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't place a special tile here.", Text.BrightRed);
                                return;
                            }
                            int totalLength = parse[1].Length + parse[2].Length + parse[3].Length;
                            if (client.Player.HasItem(1) < House.WORD_PRICE * totalLength)
                            {
                                Messenger.PlayerMsg(client, "You need " + House.WORD_PRICE * totalLength + " " + ItemManager.Items[1].Name + " to place a special tile.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, House.WORD_PRICE * totalLength, true);

                            map.Tile[client.Player.X, client.Player.Y].Type = Enums.TileType.Sign;
                            map.Tile[client.Player.X, client.Player.Y].Data1 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data2 = 0;
                            map.Tile[client.Player.X, client.Player.Y].Data3 = 0;
                            map.Tile[client.Player.X, client.Player.Y].String1 = parse[1];
                            map.Tile[client.Player.X, client.Player.Y].String2 = parse[2];
                            map.Tile[client.Player.X, client.Player.Y].String3 = parse[3];

                            //Messenger.SendTile(client.Player.X, client.Player.Y, client.Player.Map);
                            Messenger.PlayerMsg(client, "A sign tile has been placed!  Press Enter to read signs.", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "weatherrequest":
                        {

                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't change the weather here.", Text.BrightRed);
                                return;
                            }

                            if (client.Player.HasItem(1) < House.WEATHER_PRICE)
                            {
                                Messenger.PlayerMsg(client, "You need " + House.WEATHER_PRICE + " " + ItemManager.Items[1].Name + " to change the weather.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, House.WEATHER_PRICE, true);

                            map.Weather = (Enums.Weather)parse[1].ToInt();

                            //Messenger.SendTile(client.Player.X, client.Player.Y, client.Player.Map);
                            Messenger.PlayerMsg(client, "The house's weather has been changed!", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "darknessrequest":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't change the lights here.", Text.BrightRed);
                                return;
                            }

                            if (client.Player.HasItem(1) < House.LIGHT_PRICE)
                            {
                                Messenger.PlayerMsg(client, "You need " + House.LIGHT_PRICE + " " + ItemManager.Items[1].Name + " to change the lights.", Text.BrightRed);
                                return;
                            }
                            client.Player.TakeItem(1, House.LIGHT_PRICE, true);

                            map.Darkness = parse[1].ToInt();

                            //Messenger.SendTile(client.Player.X, client.Player.Y, client.Player.Map);
                            Messenger.PlayerMsg(client, "The house's lights have been changed!", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    case "expansionrequest":
                        {
                            IMap map = client.Player.Map;
                            if (map.MapType != Server.Enums.MapType.House || ((House)map).OwnerID != client.Player.CharID)
                            {
                                Messenger.PlayerMsg(client, "You can't expand your house here.", Text.BrightRed);
                                return;
                            }
                            int x = parse[1].ToInt();
                            int y = parse[2].ToInt();
                            int total = ((x + 1) * (y + 1) - (map.MaxX + 1) * (map.MaxY + 1)) * House.TILE_PRICE;
                            if (total > 0)
                            {
                                if (client.Player.HasItem(1) < total)
                                {
                                    Messenger.PlayerMsg(client, "You need " + total + " " + ItemManager.Items[1].Name + " to expand your house.", Text.BrightRed);
                                    return;
                                }
                                client.Player.TakeItem(1, total, true);
                            }

                            if (client.Player.X > x) client.Player.X = x;
                            if (client.Player.Y > y) client.Player.Y = y;
                            int oldX = map.MaxX;
                            int oldY = map.MaxY;
                            TileCollection tiles = new TileCollection(map.BaseMap, x, y);

                            for (int Y = 0; Y <= y && Y <= oldY; Y++)
                            {
                                for (int X = 0; X <= x && X <= oldX; X++)
                                {
                                    tiles[X, Y].Ground = map.Tile[X, Y].Ground;
                                    tiles[X, Y].GroundAnim = map.Tile[X, Y].GroundAnim;
                                    tiles[X, Y].Mask = map.Tile[X, Y].Mask;
                                    tiles[X, Y].Anim = map.Tile[X, Y].Anim;
                                    tiles[X, Y].Mask2 = map.Tile[X, Y].Mask2;
                                    tiles[X, Y].M2Anim = map.Tile[X, Y].M2Anim;
                                    tiles[X, Y].Fringe = map.Tile[X, Y].Fringe;
                                    tiles[X, Y].FAnim = map.Tile[X, Y].FAnim;
                                    tiles[X, Y].Fringe2 = map.Tile[X, Y].Fringe2;
                                    tiles[X, Y].F2Anim = map.Tile[X, Y].F2Anim;
                                    tiles[X, Y].Type = map.Tile[X, Y].Type;
                                    tiles[X, Y].Data1 = map.Tile[X, Y].Data1;
                                    tiles[X, Y].Data2 = map.Tile[X, Y].Data2;
                                    tiles[X, Y].Data3 = map.Tile[X, Y].Data3;
                                    tiles[X, Y].String1 = map.Tile[X, Y].String1;
                                    tiles[X, Y].String2 = map.Tile[X, Y].String2;
                                    tiles[X, Y].String3 = map.Tile[X, Y].String3;
                                    tiles[X, Y].RDungeonMapValue = map.Tile[X, Y].RDungeonMapValue;
                                    tiles[X, Y].GroundSet = map.Tile[X, Y].GroundSet;
                                    tiles[X, Y].GroundAnimSet = map.Tile[X, Y].GroundAnimSet;
                                    tiles[X, Y].MaskSet = map.Tile[X, Y].MaskSet;
                                    tiles[X, Y].AnimSet = map.Tile[X, Y].AnimSet;
                                    tiles[X, Y].Mask2Set = map.Tile[X, Y].Mask2Set;
                                    tiles[X, Y].M2AnimSet = map.Tile[X, Y].M2AnimSet;
                                    tiles[X, Y].FringeSet = map.Tile[X, Y].FringeSet;
                                    tiles[X, Y].FAnimSet = map.Tile[X, Y].FAnimSet;
                                    tiles[X, Y].Fringe2Set = map.Tile[X, Y].Fringe2Set;
                                    tiles[X, Y].F2AnimSet = map.Tile[X, Y].F2AnimSet;
                                }
                            }
                            map.Tile = tiles;

                            Messenger.PlayerMsg(client, "The house's boundaries have been changed!", Text.BrightGreen);

                            Messenger.RefreshMap(client);
                        }
                        break;
                    #endregion
                    #region Moves
                    case "overwritemove":
                        {
                            if (client.Player.GetActiveRecruit().LearningMove != -1)
                            {
                                int moveSlot = parse[1].ToInt(-1);
                                if (moveSlot != -1 && moveSlot >= 0 && moveSlot <= 3)
                                {
                                    if (client.Player.GetActiveRecruit().Moves[moveSlot].MoveNum > 0)
                                    {
                                        client.Player.GetActiveRecruit().Moves[moveSlot].MoveNum = client.Player.GetActiveRecruit().LearningMove;
                                        client.Player.GetActiveRecruit().Moves[moveSlot].MaxPP = MoveManager.Moves[client.Player.GetActiveRecruit().Moves[moveSlot].MoveNum].MaxPP;
                                        client.Player.GetActiveRecruit().Moves[moveSlot].CurrentPP = client.Player.GetActiveRecruit().Moves[moveSlot].MaxPP;
                                        Messenger.PlayerMsg(client, "You have learned a new move!", Text.Yellow);
                                        Messenger.SendPlayerMoves(client);
                                    }
                                }
                            }
                        }
                        break;
                    #endregion
                    #region ExpKit
                    case "activekitmodule":
                        {
                            Enums.ExpKitModules module = (Enums.ExpKitModules)parse[1].ToInt();
                            if (client.Player.AvailableExpKitModules.Contains(module))
                            {
                                client.Player.ActiveExpKitModule = module;
                            }
                        }
                        break;
                    #endregion
                    #region Trading
                    case "settradeitem":
                        {
                            if (!string.IsNullOrEmpty(client.Player.TradePartner))
                            {
                                Client tradePartner = ClientManager.FindClientFromCharID(client.Player.TradePartner);
                                if (tradePartner != null && tradePartner.Player.TradePartner == client.Player.CharID)
                                {
                                    int slot = parse[1].ToInt();
                                    int amount = parse[2].ToInt();

                                    if (slot > -1)
                                    {
                                        if (ItemManager.Items[client.Player.Inventory[slot].Num].Type != Enums.ItemType.Currency && ItemManager.Items[client.Player.Inventory[slot].Num].StackCap <= 0)
                                        {
                                            amount = 1;
                                        }
                                        if (ItemManager.Items[client.Player.Inventory[slot].Num].Bound)
                                        {
                                            Messenger.PlayerMsg(client, "This item cannot be traded!", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                        else if (client.Player.Inventory[slot].Sticky)
                                        {
                                            Messenger.PlayerMsg(client, "You cannot trade a sticky item!", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                        else if (ItemManager.Items[client.Player.Inventory[slot].Num].Rarity > (int)tradePartner.Player.ExplorerRank + 1)
                                        {
                                            Messenger.PlayerMsg(client, "The other person does not have a high enough Explorer Rank to receive this item.", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                        else if (amount == 0 && (ItemManager.Items[client.Player.Inventory[slot].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[slot].Num].StackCap > 0))
                                        {
                                            Messenger.PlayerMsg(client, "You must trade more than 0!", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                        else if (amount > client.Player.Inventory[slot].Amount && (ItemManager.Items[client.Player.Inventory[slot].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[slot].Num].StackCap > 0))
                                        {
                                            Messenger.PlayerMsg(client, "You cannot trade more than you have!", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                        else if (tradePartner.Player.FindInvSlot(client.Player.Inventory[slot].Num) == -1)
                                        {
                                            Messenger.PlayerMsg(client, "The other person does not have enough space to receive this item.", Text.BrightRed);
                                            slot = -1;
                                            amount = 0;
                                        }
                                    }
                                    client.Player.SetTradeItem = slot;
                                    client.Player.SetTradeAmount = amount;

                                    client.Player.ReadyToTrade = false;
                                    tradePartner.Player.ReadyToTrade = false;
                                    Messenger.SendTradeUnconfirm(client);
                                    Messenger.SendTradeUnconfirm(tradePartner);

                                    if (slot > -1)
                                    {
                                        string itemName = Items.ItemManager.Items[client.Player.Inventory[slot].Num].Name;
                                        if (ItemManager.Items[client.Player.Inventory[slot].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[slot].Num].StackCap > 0)
                                        {
                                            itemName += " (" + amount + ")";
                                        }
                                        Messenger.SendTradeSetItemUpdate(tradePartner, client.Player.Inventory[slot].Num, amount, false);
                                        Messenger.SendTradeSetItemUpdate(client, client.Player.Inventory[slot].Num, amount, true);
                                    }
                                    else
                                    {
                                        Messenger.SendTradeSetItemUpdate(tradePartner, -1, 0, false);
                                        Messenger.SendTradeSetItemUpdate(client, -1, 0, true);
                                    }
                                }
                            }
                        }
                        break;
                    case "readytotrade":
                        {
                            if (!string.IsNullOrEmpty(client.Player.TradePartner))
                            {
                                Client tradePartner = ClientManager.FindClientFromCharID(client.Player.TradePartner);
                                if (tradePartner != null && tradePartner.Player.TradePartner == client.Player.CharID)
                                {
                                    int myItem = client.Player.SetTradeItem;
                                    int myAmount = client.Player.SetTradeAmount;
                                    int partnersItem = tradePartner.Player.SetTradeItem;
                                    int partnersAmount = tradePartner.Player.SetTradeAmount;

                                    if (ItemManager.Items[client.Player.Inventory[myItem].Num].Type != Enums.ItemType.Currency && ItemManager.Items[client.Player.Inventory[myItem].Num].StackCap <= 0)
                                    {
                                        myAmount = 1;
                                    }

                                    if (ItemManager.Items[client.Player.Inventory[myItem].Num].Bound)
                                    {
                                        Messenger.PlayerMsg(client, "This item cannot be traded!", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }
                                    else if (client.Player.Inventory[myItem].Sticky)
                                    {
                                        Messenger.PlayerMsg(client, "You cannot trade a sticky item!", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }
                                    else if (ItemManager.Items[client.Player.Inventory[myItem].Num].Rarity > (int)tradePartner.Player.ExplorerRank + 1)
                                    {
                                        Messenger.PlayerMsg(client, "The other person does not have a high enough Explorer Rank to receive this item.", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }
                                    else if (client.Player.SetTradeAmount == 0 && (ItemManager.Items[client.Player.Inventory[myItem].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[myItem].Num].StackCap > 0))
                                    {
                                        Messenger.PlayerMsg(client, "You must trade more than 0!", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }
                                    else if (client.Player.SetTradeAmount > client.Player.Inventory[client.Player.SetTradeItem].Amount && (ItemManager.Items[client.Player.Inventory[myItem].Num].Type == Enums.ItemType.Currency || ItemManager.Items[client.Player.Inventory[myItem].Num].StackCap > 0))
                                    {
                                        Messenger.PlayerMsg(client, "You cannot trade more than you have!", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }
                                    else if (tradePartner.Player.FindInvSlot(client.Player.Inventory[myItem].Num) == -1)
                                    {
                                        Messenger.PlayerMsg(client, "The other person does not have enough space to receive this item.", Text.BrightRed);
                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                    }

                                    if (myItem > -1 && partnersItem > -1)
                                    {

                                        client.Player.ReadyToTrade = true;
                                    }
                                    //TODO: Allow Empty Trading

                                    // Both players have confirmed the trade
                                    if (client.Player.ReadyToTrade && tradePartner.Player.ReadyToTrade)
                                    {
                                        // Start the trade!
                                        int clientItemNum = client.Player.Inventory[client.Player.SetTradeItem].Num;
                                        string clientItemTag = client.Player.Inventory[client.Player.SetTradeItem].Tag;
                                        int clientItemAmount = client.Player.SetTradeAmount;
                                        int partnerItemNum = tradePartner.Player.Inventory[tradePartner.Player.SetTradeItem].Num;
                                        string partnerItemTag = tradePartner.Player.Inventory[tradePartner.Player.SetTradeItem].Tag;
                                        int partnerItemAmount = tradePartner.Player.SetTradeAmount;

                                        tradePartner.Player.ReadyToTrade = false;
                                        client.Player.ReadyToTrade = false;

                                        // Take items from both players.
                                        client.Player.TakeItemSlot(client.Player.SetTradeItem, clientItemAmount, true);
                                        tradePartner.Player.TakeItemSlot(tradePartner.Player.SetTradeItem, partnerItemAmount, true);
                                        // Give items to both players
                                        client.Player.GiveItem(partnerItemNum, partnerItemAmount, partnerItemTag);
                                        tradePartner.Player.GiveItem(clientItemNum, clientItemAmount, clientItemTag);
                                        // Save both players' inventory to prevent cloning!
                                        using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players))
                                        {
                                            client.Player.SaveCharacterData(dbConnection);
                                            tradePartner.Player.SaveCharacterData(dbConnection);
                                        }

                                        //Messenger.SendInventoryUpdate(client, client.Player.SetTradeItem);
                                        //Messenger.SendInventoryUpdate(tradePartner, tradePartner.Player.SetTradeItem);

                                        client.Player.SetTradeItem = -1;
                                        client.Player.SetTradeAmount = 0;
                                        tradePartner.Player.SetTradeItem = -1;
                                        tradePartner.Player.SetTradeAmount = 0;

                                        Messenger.SendTradeComplete(client);
                                        Messenger.SendTradeComplete(tradePartner);
                                    }

                                }
                            }
                        }
                        break;
                    case "endplayertrade":
                        {
                            client.Player.EndTrade(true);
                        }
                        break;
                    #endregion
                    #region Tournament
                    case "jointournament":
                        {
                            Tournament tourny = TournamentManager.Tournaments[parse[1]];
                            if (tourny != null)
                            {
                                tourny.RegisterPlayer(client);
                            }
                        }
                        break;
                    case "viewtournamentrules":
                        {
                            Tournament tourny = TournamentManager.Tournaments[parse[1]];
                            if (tourny != null)
                            {
                                Messenger.SendTournamentRulesTo(client, null, tourny);
                            }
                        }
                        break;
                    case "savetournamentrules":
                        {
                            Tournament tourny = client.Player.Tournament;
                            if (tourny != null)
                            {
                                if (tourny.RegisteredMembers[client].Admin)
                                {
                                    tourny.Rules.SleepClause = parse[1].ToBool();
                                    tourny.Rules.AccuracyClause = parse[2].ToBool();
                                    tourny.Rules.SpeciesClause = parse[3].ToBool();
                                    tourny.Rules.FreezeClause = parse[4].ToBool();
                                    tourny.Rules.OHKOClause = parse[5].ToBool();
                                    tourny.Rules.SelfKOClause = parse[6].ToBool();
                                }
                            }
                        }
                        break;
                    case "spectatetournament":
                        {
                            Tournament tourny = TournamentManager.Tournaments[parse[1]];
                            if (client.Player.Tournament != null)
                            {
                                Tournament playerTourny = client.Player.Tournament;
                                playerTourny.RegisteredMembers.Remove(client);
                            }
                            tourny.RegisterSpectator(client);
                        }
                        break;
                    #endregion
                }
                #endregion

            }
        }
        public static void ConvertV3ToV4(int num)
        {
            DataConverter.RDungeons.V4.RDungeon rdungeonV4 = new Server.DataConverter.RDungeons.V4.RDungeon(num);

            DataConverter.RDungeons.V3.RDungeon rdungeonV3 = Server.DataConverter.RDungeons.V3.RDungeonManager.LoadRDungeon(num);

            rdungeonV4.DungeonName = rdungeonV3.DungeonName;
            rdungeonV4.Direction = rdungeonV3.Direction;
            rdungeonV4.MaxFloors = rdungeonV3.MaxFloors;
            rdungeonV4.Recruitment = rdungeonV3.Recruitment;
            rdungeonV4.Exp = rdungeonV3.Exp;
            rdungeonV4.WindTimer = rdungeonV3.WindTimer;
            rdungeonV4.DungeonIndex = 0;

            for (int i = 0; i < rdungeonV3.Floors.Count; i++)
            {
                DataConverter.RDungeons.V4.RDungeonFloor floor = new DataConverter.RDungeons.V4.RDungeonFloor();

                floor.Options.TrapMin = rdungeonV3.Floors[i].Options.TrapMin;
                floor.Options.TrapMax = rdungeonV3.Floors[i].Options.TrapMax;
                floor.Options.ItemMin = 5;
                floor.Options.ItemMax = 8;
                floor.Options.Intricacy = 6;
                floor.Options.RoomWidthMin = rdungeonV3.Floors[i].Options.RoomWidthMin;
                floor.Options.RoomWidthMax = rdungeonV3.Floors[i].Options.RoomWidthMax;
                floor.Options.RoomLengthMin = rdungeonV3.Floors[i].Options.RoomLengthMin;
                floor.Options.RoomLengthMax = rdungeonV3.Floors[i].Options.RoomLengthMax;
                floor.Options.HallTurnMin = rdungeonV3.Floors[i].Options.HallTurnMin;
                floor.Options.HallTurnMax = rdungeonV3.Floors[i].Options.HallTurnMax;
                floor.Options.HallVarMin = rdungeonV3.Floors[i].Options.HallVarMin;
                floor.Options.HallVarMax = rdungeonV3.Floors[i].Options.HallVarMax;
                floor.Options.WaterFrequency = rdungeonV3.Floors[i].Options.WaterFrequency;
                floor.Options.Craters = rdungeonV3.Floors[i].Options.Craters;
                floor.Options.CraterMinLength = rdungeonV3.Floors[i].Options.CraterMinLength;
                floor.Options.CraterMaxLength = rdungeonV3.Floors[i].Options.CraterMaxLength;
                floor.Options.CraterFuzzy = rdungeonV3.Floors[i].Options.CraterFuzzy;
                floor.Options.MinChambers = 0;
                floor.Options.MaxChambers = 0;

                floor.Darkness = -1;
                floor.GoalType = rdungeonV3.Floors[i].GoalType;
                floor.GoalMap = rdungeonV3.Floors[i].GoalMap;
                floor.GoalX = rdungeonV3.Floors[i].GoalX;
                floor.GoalY = rdungeonV3.Floors[i].GoalY;
                floor.Music = rdungeonV3.Floors[i].Music;

                floor.StairsX = rdungeonV3.Floors[i].StairsX;
                floor.StairsSheet = rdungeonV3.Floors[i].StairsSheet;

                floor.mGroundX = rdungeonV3.Floors[i].mGroundX;
                floor.mGroundSheet = rdungeonV3.Floors[i].mGroundSheet;

                floor.mTopLeftX = rdungeonV3.Floors[i].mTopLeftX;
                floor.mTopLeftSheet = rdungeonV3.Floors[i].mTopLeftSheet;
                floor.mTopCenterX = rdungeonV3.Floors[i].mTopCenterX;
                floor.mTopCenterSheet = rdungeonV3.Floors[i].mTopCenterSheet;
                floor.mTopRightX = rdungeonV3.Floors[i].mTopRightX;
                floor.mTopRightSheet = rdungeonV3.Floors[i].mTopRightSheet;

                floor.mCenterLeftX = rdungeonV3.Floors[i].mCenterLeftX;
                floor.mCenterLeftSheet = rdungeonV3.Floors[i].mCenterLeftSheet;
                floor.mCenterCenterX = rdungeonV3.Floors[i].mCenterCenterX;
                floor.mCenterCenterSheet = rdungeonV3.Floors[i].mCenterCenterSheet;
                floor.mCenterRightX = rdungeonV3.Floors[i].mCenterRightX;
                floor.mCenterRightSheet = rdungeonV3.Floors[i].mCenterRightSheet;

                floor.mBottomLeftX = rdungeonV3.Floors[i].mBottomLeftX;
                floor.mBottomLeftSheet = rdungeonV3.Floors[i].mBottomLeftSheet;
                floor.mBottomCenterX = rdungeonV3.Floors[i].mBottomCenterX;
                floor.mBottomCenterSheet = rdungeonV3.Floors[i].mBottomCenterSheet;
                floor.mBottomRightX = rdungeonV3.Floors[i].mBottomRightX;
                floor.mBottomRightSheet = rdungeonV3.Floors[i].mBottomRightSheet;

                floor.mInnerTopLeftX = rdungeonV3.Floors[i].mInnerTopLeftX;
                floor.mInnerTopLeftSheet = rdungeonV3.Floors[i].mInnerTopLeftSheet;
                floor.mInnerBottomLeftX = rdungeonV3.Floors[i].mInnerBottomLeftX;
                floor.mInnerBottomLeftSheet = rdungeonV3.Floors[i].mInnerBottomLeftSheet;
                floor.mInnerTopRightX = rdungeonV3.Floors[i].mInnerTopRightX;
                floor.mInnerTopRightSheet = rdungeonV3.Floors[i].mInnerTopRightSheet;
                floor.mInnerBottomRightX = rdungeonV3.Floors[i].mInnerBottomRightX;
                floor.mInnerBottomRightSheet = rdungeonV3.Floors[i].mInnerBottomRightSheet;

                floor.mIsolatedWallX = rdungeonV3.Floors[i].mIsolatedWallX;
                floor.mIsolatedWallSheet = rdungeonV3.Floors[i].mIsolatedWallSheet;

                floor.mColumnTopX = rdungeonV3.Floors[i].mColumnTopX;
                floor.mColumnTopSheet = rdungeonV3.Floors[i].mColumnTopSheet;
                floor.mColumnCenterX = rdungeonV3.Floors[i].mColumnCenterX;
                floor.mColumnCenterSheet = rdungeonV3.Floors[i].mColumnCenterSheet;
                floor.mColumnBottomX = rdungeonV3.Floors[i].mColumnBottomX;
                floor.mColumnBottomSheet = rdungeonV3.Floors[i].mColumnBottomSheet;

                floor.mRowLeftX = rdungeonV3.Floors[i].mRowLeftX;
                floor.mRowLeftSheet = rdungeonV3.Floors[i].mRowLeftSheet;
                floor.mRowCenterX = rdungeonV3.Floors[i].mRowCenterX;
                floor.mRowCenterSheet = rdungeonV3.Floors[i].mRowCenterSheet;
                floor.mRowRightX = rdungeonV3.Floors[i].mRowRightX;
                floor.mRowRightSheet = rdungeonV3.Floors[i].mRowRightSheet;

                floor.mGroundAltX= rdungeonV3.Floors[i].mGroundAltX;
                floor.mGroundAltSheet = rdungeonV3.Floors[i].mGroundAltSheet;
                floor.mGroundAlt2X = rdungeonV3.Floors[i].mGroundAlt2X;
                floor.mGroundAlt2Sheet = rdungeonV3.Floors[i].mGroundAlt2Sheet;

                floor.mTopLeftAltX= rdungeonV3.Floors[i].mTopLeftAltX;
                floor.mTopLeftAltSheet = rdungeonV3.Floors[i].mTopLeftAltSheet;
                floor.mTopCenterAltX= rdungeonV3.Floors[i].mTopCenterAltX;
                floor.mTopCenterAltSheet = rdungeonV3.Floors[i].mTopCenterAltSheet;
                floor.mTopRightAltX= rdungeonV3.Floors[i].mTopRightAltX;
                floor.mTopRightAltSheet = rdungeonV3.Floors[i].mTopRightAltSheet;

                floor.mCenterLeftAltX= rdungeonV3.Floors[i].mCenterLeftAltX;
                floor.mCenterLeftAltSheet = rdungeonV3.Floors[i].mCenterLeftAltSheet;
                floor.mCenterCenterAltX= rdungeonV3.Floors[i].mCenterCenterAltX;
                floor.mCenterCenterAltSheet = rdungeonV3.Floors[i].mCenterCenterAltSheet;
                floor.mCenterCenterAlt2X = rdungeonV3.Floors[i].mCenterCenterAlt2X;
                floor.mCenterCenterAlt2Sheet = rdungeonV3.Floors[i].mCenterCenterAlt2Sheet;
                floor.mCenterRightAltX= rdungeonV3.Floors[i].mCenterRightAltX;
                floor.mCenterRightAltSheet = rdungeonV3.Floors[i].mCenterRightAltSheet;

                floor.mBottomLeftAltX= rdungeonV3.Floors[i].mBottomLeftAltX;
                floor.mBottomLeftAltSheet = rdungeonV3.Floors[i].mBottomLeftAltSheet;
                floor.mBottomCenterAltX= rdungeonV3.Floors[i].mBottomCenterAltX;
                floor.mBottomCenterAltSheet = rdungeonV3.Floors[i].mBottomCenterAltSheet;
                floor.mBottomRightAltX= rdungeonV3.Floors[i].mBottomRightAltX;
                floor.mBottomRightAltSheet = rdungeonV3.Floors[i].mBottomRightAltSheet;

                floor.mInnerTopLeftAltX= rdungeonV3.Floors[i].mInnerTopLeftAltX;
                floor.mInnerTopLeftAltSheet = rdungeonV3.Floors[i].mInnerTopLeftAltSheet;
                floor.mInnerBottomLeftAltX= rdungeonV3.Floors[i].mInnerBottomLeftAltX;
                floor.mInnerBottomLeftAltSheet = rdungeonV3.Floors[i].mInnerBottomLeftAltSheet;
                floor.mInnerTopRightAltX= rdungeonV3.Floors[i].mInnerTopRightAltX;
                floor.mInnerTopRightAltSheet = rdungeonV3.Floors[i].mInnerTopRightAltSheet;
                floor.mInnerBottomRightAltX= rdungeonV3.Floors[i].mInnerBottomRightAltX;
                floor.mInnerBottomRightAltSheet = rdungeonV3.Floors[i].mInnerBottomRightAltSheet;

                floor.mIsolatedWallAltX= rdungeonV3.Floors[i].mIsolatedWallAltX;
                floor.mIsolatedWallAltSheet = rdungeonV3.Floors[i].mIsolatedWallAltSheet;

                floor.mColumnTopAltX= rdungeonV3.Floors[i].mColumnTopAltX;
                floor.mColumnTopAltSheet = rdungeonV3.Floors[i].mColumnTopAltSheet;
                floor.mColumnCenterAltX= rdungeonV3.Floors[i].mColumnCenterAltX;
                floor.mColumnCenterAltSheet = rdungeonV3.Floors[i].mColumnCenterAltSheet;
                floor.mColumnBottomAltX= rdungeonV3.Floors[i].mColumnBottomAltX;
                floor.mColumnBottomAltSheet = rdungeonV3.Floors[i].mColumnBottomAltSheet;

                floor.mRowLeftAltX= rdungeonV3.Floors[i].mRowLeftAltX;
                floor.mRowLeftAltSheet = rdungeonV3.Floors[i].mRowLeftAltSheet;
                floor.mRowCenterAltX= rdungeonV3.Floors[i].mRowCenterAltX;
                floor.mRowCenterAltSheet = rdungeonV3.Floors[i].mRowCenterAltSheet;
                floor.mRowRightAltX= rdungeonV3.Floors[i].mRowRightAltX;
                floor.mRowRightAltSheet = rdungeonV3.Floors[i].mRowRightAltSheet;

                floor.mWaterX = rdungeonV3.Floors[i].mWaterX;
                floor.mWaterSheet = rdungeonV3.Floors[i].mWaterSheet;
                floor.mWaterAnimX = rdungeonV3.Floors[i].mWaterAnimX;
                floor.mWaterAnimSheet = rdungeonV3.Floors[i].mWaterAnimSheet;

                floor.mShoreTopLeftX = rdungeonV3.Floors[i].mShoreTopLeftX;
                floor.mShoreTopLeftSheet = rdungeonV3.Floors[i].mShoreTopLeftSheet;
                floor.mShoreTopRightX = rdungeonV3.Floors[i].mShoreTopRightX;
                floor.mShoreTopRightSheet = rdungeonV3.Floors[i].mShoreTopRightSheet;
                floor.mShoreBottomRightX = rdungeonV3.Floors[i].mShoreBottomRightX;
                floor.mShoreBottomRightSheet = rdungeonV3.Floors[i].mShoreBottomRightSheet;
                floor.mShoreBottomLeftX = rdungeonV3.Floors[i].mShoreBottomLeftX;
                floor.mShoreBottomLeftSheet = rdungeonV3.Floors[i].mShoreBottomLeftSheet;
                floor.mShoreDiagonalForwardX = rdungeonV3.Floors[i].mShoreDiagonalForwardX;
                floor.mShoreDiagonalForwardSheet = rdungeonV3.Floors[i].mShoreDiagonalForwardSheet;
                floor.mShoreDiagonalBackX = rdungeonV3.Floors[i].mShoreDiagonalBackX;
                floor.mShoreDiagonalBackSheet = rdungeonV3.Floors[i].mShoreDiagonalBackSheet;
                floor.mShoreTopX = rdungeonV3.Floors[i].mShoreTopX;
                floor.mShoreTopSheet = rdungeonV3.Floors[i].mShoreTopSheet;
                floor.mShoreRightX = rdungeonV3.Floors[i].mShoreRightX;
                floor.mShoreRightSheet = rdungeonV3.Floors[i].mShoreRightSheet;
                floor.mShoreBottomX = rdungeonV3.Floors[i].mShoreBottomX;
                floor.mShoreBottomSheet = rdungeonV3.Floors[i].mShoreBottomSheet;
                floor.mShoreLeftX = rdungeonV3.Floors[i].mShoreLeftX;
                floor.mShoreLeftSheet = rdungeonV3.Floors[i].mShoreLeftSheet;
                floor.mShoreVerticalX = rdungeonV3.Floors[i].mShoreVerticalX;
                floor.mShoreVerticalSheet = rdungeonV3.Floors[i].mShoreVerticalSheet;
                floor.mShoreHorizontalX = rdungeonV3.Floors[i].mShoreHorizontalX;
                floor.mShoreHorizontalSheet = rdungeonV3.Floors[i].mShoreHorizontalSheet;
                floor.mShoreInnerTopLeftX = rdungeonV3.Floors[i].mShoreInnerTopLeftX;
                floor.mShoreInnerTopLeftSheet = rdungeonV3.Floors[i].mShoreInnerTopLeftSheet;
                floor.mShoreInnerTopRightX = rdungeonV3.Floors[i].mShoreInnerTopRightX;
                floor.mShoreInnerTopRightSheet = rdungeonV3.Floors[i].mShoreInnerTopRightSheet;
                floor.mShoreInnerBottomRightX = rdungeonV3.Floors[i].mShoreInnerBottomRightX;
                floor.mShoreInnerBottomRightSheet = rdungeonV3.Floors[i].mShoreInnerBottomRightSheet;
                floor.mShoreInnerBottomLeftX = rdungeonV3.Floors[i].mShoreInnerBottomLeftX;
                floor.mShoreInnerBottomLeftSheet = rdungeonV3.Floors[i].mShoreInnerBottomLeftSheet;
                floor.mShoreInnerTopX = rdungeonV3.Floors[i].mShoreInnerTopX;
                floor.mShoreInnerTopSheet = rdungeonV3.Floors[i].mShoreInnerTopSheet;
                floor.mShoreInnerRightX = rdungeonV3.Floors[i].mShoreInnerRightX;
                floor.mShoreInnerRightSheet = rdungeonV3.Floors[i].mShoreInnerRightSheet;
                floor.mShoreInnerBottomX = rdungeonV3.Floors[i].mShoreInnerBottomX;
                floor.mShoreInnerBottomSheet = rdungeonV3.Floors[i].mShoreInnerBottomSheet;
                floor.mShoreInnerLeftX = rdungeonV3.Floors[i].mShoreInnerLeftX;
                floor.mShoreInnerLeftSheet = rdungeonV3.Floors[i].mShoreInnerLeftSheet;
                floor.mShoreSurroundedX = rdungeonV3.Floors[i].mShoreSurroundedX;
                floor.mShoreSurroundedSheet = rdungeonV3.Floors[i].mShoreSurroundedSheet;

                floor.mShoreTopLeftAnimX = rdungeonV3.Floors[i].mShoreTopLeftAnimX;
                floor.mShoreTopLeftAnimSheet = rdungeonV3.Floors[i].mShoreTopLeftAnimSheet;
                floor.mShoreTopRightAnimX = rdungeonV3.Floors[i].mShoreTopRightAnimX;
                floor.mShoreTopRightAnimSheet = rdungeonV3.Floors[i].mShoreTopRightAnimSheet;
                floor.mShoreBottomRightAnimX = rdungeonV3.Floors[i].mShoreBottomRightAnimX;
                floor.mShoreBottomRightAnimSheet = rdungeonV3.Floors[i].mShoreBottomRightAnimSheet;
                floor.mShoreBottomLeftAnimX = rdungeonV3.Floors[i].mShoreBottomLeftAnimX;
                floor.mShoreBottomLeftAnimSheet = rdungeonV3.Floors[i].mShoreBottomLeftAnimSheet;
                floor.mShoreDiagonalForwardAnimX = rdungeonV3.Floors[i].mShoreDiagonalForwardAnimX;
                floor.mShoreDiagonalForwardAnimSheet = rdungeonV3.Floors[i].mShoreDiagonalForwardAnimSheet;
                floor.mShoreDiagonalBackAnimX = rdungeonV3.Floors[i].mShoreDiagonalBackAnimX;
                floor.mShoreDiagonalBackAnimSheet = rdungeonV3.Floors[i].mShoreDiagonalBackAnimSheet;
                floor.mShoreTopAnimX = rdungeonV3.Floors[i].mShoreTopAnimX;
                floor.mShoreTopAnimSheet = rdungeonV3.Floors[i].mShoreTopAnimSheet;
                floor.mShoreRightAnimX = rdungeonV3.Floors[i].mShoreRightAnimX;
                floor.mShoreRightAnimSheet = rdungeonV3.Floors[i].mShoreRightAnimSheet;
                floor.mShoreBottomAnimX = rdungeonV3.Floors[i].mShoreBottomAnimX;
                floor.mShoreBottomAnimSheet = rdungeonV3.Floors[i].mShoreBottomAnimSheet;
                floor.mShoreLeftAnimX = rdungeonV3.Floors[i].mShoreLeftAnimX;
                floor.mShoreLeftAnimSheet = rdungeonV3.Floors[i].mShoreLeftAnimSheet;
                floor.mShoreVerticalAnimX = rdungeonV3.Floors[i].mShoreVerticalAnimX;
                floor.mShoreVerticalAnimSheet = rdungeonV3.Floors[i].mShoreVerticalAnimSheet;
                floor.mShoreHorizontalAnimX = rdungeonV3.Floors[i].mShoreHorizontalAnimX;
                floor.mShoreHorizontalAnimSheet = rdungeonV3.Floors[i].mShoreHorizontalAnimSheet;
                floor.mShoreInnerTopLeftAnimX = rdungeonV3.Floors[i].mShoreInnerTopLeftAnimX;
                floor.mShoreInnerTopLeftAnimSheet = rdungeonV3.Floors[i].mShoreInnerTopLeftAnimSheet;
                floor.mShoreInnerTopRightAnimX = rdungeonV3.Floors[i].mShoreInnerTopRightAnimX;
                floor.mShoreInnerTopRightAnimSheet = rdungeonV3.Floors[i].mShoreInnerTopRightAnimSheet;
                floor.mShoreInnerBottomRightAnimX = rdungeonV3.Floors[i].mShoreInnerBottomRightAnimX;
                floor.mShoreInnerBottomRightAnimSheet = rdungeonV3.Floors[i].mShoreInnerBottomRightAnimSheet;
                floor.mShoreInnerBottomLeftAnimX = rdungeonV3.Floors[i].mShoreInnerBottomLeftAnimX;
                floor.mShoreInnerBottomLeftAnimSheet = rdungeonV3.Floors[i].mShoreInnerBottomLeftAnimSheet;
                floor.mShoreInnerTopAnimX = rdungeonV3.Floors[i].mShoreInnerTopAnimX;
                floor.mShoreInnerTopAnimSheet = rdungeonV3.Floors[i].mShoreInnerTopAnimSheet;
                floor.mShoreInnerRightAnimX = rdungeonV3.Floors[i].mShoreInnerRightAnimX;
                floor.mShoreInnerRightAnimSheet = rdungeonV3.Floors[i].mShoreInnerRightAnimSheet;
                floor.mShoreInnerBottomAnimX = rdungeonV3.Floors[i].mShoreInnerBottomAnimX;
                floor.mShoreInnerBottomAnimSheet = rdungeonV3.Floors[i].mShoreInnerBottomAnimSheet;
                floor.mShoreInnerLeftAnimX = rdungeonV3.Floors[i].mShoreInnerLeftAnimX;
                floor.mShoreInnerLeftAnimSheet = rdungeonV3.Floors[i].mShoreInnerLeftAnimSheet;
                floor.mShoreSurroundedAnimX = rdungeonV3.Floors[i].mShoreSurroundedAnimX;
                floor.mShoreSurroundedAnimSheet = rdungeonV3.Floors[i].mShoreSurroundedAnimSheet;

                floor.GroundTile = rdungeonV3.Floors[i].GroundTile;
                floor.HallTile = rdungeonV3.Floors[i].HallTile;
                floor.WaterTile = rdungeonV3.Floors[i].WaterTile;
                floor.WallTile = rdungeonV3.Floors[i].WallTile;

                floor.NpcSpawnTime = rdungeonV3.Floors[i].NpcSpawnTime;
                floor.NpcMin = rdungeonV3.Floors[i].NpcMin;
                floor.NpcMax = rdungeonV3.Floors[i].NpcMax;

                RDungeons.V4.RDungeonItem item;
                MapNpcPreset npc;
                RDungeons.V4.RDungeonTrap specialTile;

                for (int j = 0; j < rdungeonV3.Floors[i].Items.Count; j++)
                {
                    if (rdungeonV3.Floors[i].Items[j].ItemNum > 0)
                    {
                        item = new RDungeons.V4.RDungeonItem();
                        item.ItemNum = rdungeonV3.Floors[i].Items[j].ItemNum;
                        item.MinAmount = rdungeonV3.Floors[i].Items[j].MinAmount;
                        item.MaxAmount = rdungeonV3.Floors[i].Items[j].MaxAmount;
                        item.AppearanceRate = rdungeonV3.Floors[i].Items[j].AppearanceRate;
                        item.StickyRate = rdungeonV3.Floors[i].Items[j].StickyRate;
                        item.Tag = rdungeonV3.Floors[i].Items[j].Tag;
                        item.Hidden = rdungeonV3.Floors[i].Items[j].Hidden;
                        item.OnGround = rdungeonV3.Floors[i].Items[j].OnGround;
                        item.OnWater = rdungeonV3.Floors[i].Items[j].OnWater;
                        item.OnWall = rdungeonV3.Floors[i].Items[j].OnWall;
                        floor.Items.Add(item);
                    }

                }
                for (int j = 0; j < rdungeonV3.Floors[i].Npcs.Count; j++)
                {
                    if (rdungeonV3.Floors[i].Npcs[j].NpcNum > 0)
                    {
                        npc = new MapNpcPreset();
                        npc.NpcNum = rdungeonV3.Floors[i].Npcs[j].NpcNum;
                        npc.MinLevel = rdungeonV3.Floors[i].Npcs[j].MinLevel;
                        npc.MaxLevel = rdungeonV3.Floors[i].Npcs[j].MinLevel;
                        npc.AppearanceRate = rdungeonV3.Floors[i].Npcs[j].AppearanceRate;
                        floor.Npcs.Add(npc);
                    }

                }
                foreach (Tile j in rdungeonV3.Floors[i].SpecialTiles)
                {
                    specialTile = new RDungeons.V4.RDungeonTrap();
                    specialTile.SpecialTile = j;
                    specialTile.AppearanceRate = 100;
                    floor.SpecialTiles.Add(specialTile);
                }

                foreach (Enums.Weather j in rdungeonV3.Floors[i].Weather)
                {
                    floor.Weather.Add(j);
                }

                rdungeonV4.Floors.Add(floor);
            }

            Server.DataConverter.RDungeons.V4.RDungeonManager.SaveRDungeon(rdungeonV4, num);
        }