public static void RDungeonScriptGoal(Client client, int scriptNum, int param1, int param2) { try { switch (scriptNum) { case 0: { int SparkSlot = client.Player.FindInvSlot(484); if (SparkSlot > 0) { StoryManager.PlayStory(client, 38); } else { Messenger.PlayerWarp(client, 72, 9, 8); } } break; case 1: { Messenger.PlayerWarp(client, 586, 10, 35); } break; case 2: {//give a prize MapStatus status = client.Player.Map.TempStatus.GetStatus("TotalTime"); if (status != null) { if (status.Counter < 15) { param1 += 3; } else if (status.Counter < 40) { param1 += 2; } else if (status.Counter < 80) { param1 += 1; } Messenger.PlayerMsg(client, "Got to the next floor in " + ((double)status.Counter / 2)+ " seconds.", Text.Yellow); Messenger.PlayerMsg(client, "A gift appeared in your bag!", Text.BrightGreen); if (param1 == 5) { client.Player.GiveItem(533, 1, "573;575;577;566;561;450"); } else if (param1 == 4) { client.Player.GiveItem(533, 1, "215;444;66;170;299;356;467"); } else if (param1 == 3) { client.Player.GiveItem(533, 1, "398;101;76;68;299;452;68"); } else if (param1 >= 1) { client.Player.GiveItem(533, 1, "451;61;400;355;99"); } else { client.Player.GiveItem(533, 1, "21;489;497;98"); } } client.Player.WarpToRDungeon(((RDungeonMap)client.Player.Map).RDungeonIndex, ((RDungeonMap)client.Player.Map).RDungeonFloor + 1); } break; case 3: {//End of East wing client.Player.SwapActiveRecruit(0); client.Player.RemoveFromTeam(1); client.Player.RemoveFromTeam(2); client.Player.RemoveFromTeam(3); //NetScript.BattleMsg(index, "Your team members returned home!", Text.BrightRed, 0); Messenger.SendActiveTeam(client); InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(718), map); Messenger.PlayerWarp(client, map, 9, 10); Messenger.PlaySound(client, "Warp.wav"); } break; case 4: {//End of abandoned mansion client.Player.SwapActiveRecruit(0); client.Player.RemoveFromTeam(1); client.Player.RemoveFromTeam(2); client.Player.RemoveFromTeam(3); //NetScript.BattleMsg(index, "Your team members returned home!", Text.BrightRed, 0); Messenger.SendActiveTeam(client); InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(716), map); Messenger.PlayerWarp(client, map, 9, 10); Messenger.PlaySound(client, "Warp.wav"); } break; case 5: {//End of abandoned attic client.Player.SwapActiveRecruit(0); client.Player.RemoveFromTeam(1); client.Player.RemoveFromTeam(2); client.Player.RemoveFromTeam(3); //NetScript.BattleMsg(index, "Your team members returned home!", Text.BrightRed, 0); Messenger.SendActiveTeam(client); InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(728), map); Messenger.PlayerWarp(client, map, 13, 10); Messenger.PlaySound(client, "Warp (Escape).wav"); } break; case 6: {//Abandoned attic? loops client.Player.WarpToRDungeon(19, 6); Messenger.PlaySound(client, "magic3.wav"); StoryManager.PlayStory(client, 293); } break; case 7: {//Hallowed Well Bottom //ObjectFactory.GetPlayer(index).IncrementDungeonCompletionCount(9, 1); if (client.Player.Timers.TimerExists("Wind")) { client.Player.Timers.RemoveTimer("Wind"); } client.Player.IncrementDungeonCompletionCount(19, 1); InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(832), map); if (client.Player.GetDungeonCompletionCount(19) < 2) { map.SetAttribute(10, 7, Enums.TileType.Item, 247, 1, 0, "", "", ""); } else { map.SetAttribute(10, 7, Enums.TileType.Item, 520, 1, 0, "", "", ""); } Messenger.PlayerWarp(client, map, 10, 11); } break; case 8: {//spiritomb room in hallowed well InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(835), map); Messenger.PlayerWarp(client, map, 9, 13); if (client.Player.HasItem(251) > 0) { StoryManager.PlayStory(client, 302); } else { map.SetAttribute(9, 2, Enums.TileType.Scripted, 36, 0, 0, "21", "30", ""); map.SetTile(9, 2, 96, 0, 4, 1); Messenger.SendTile(9, 2, map); StoryManager.PlayStory(client, 301); } } break; case 9: {//golden apple room in hallowed well InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(834), map); Messenger.PlayerWarp(client, map, 10, 12); } break; case 10: {//golden fang room in hallowed well InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(833), map); Messenger.PlayerWarp(client, map, 10, 11); } break; case 11: {//heatran battle //BossBattles.StartBossBattle(client, "Heatran"); } break; case 12: { //BossBattles.StartBossBattle(client, "TinyGrotto"); } break; case 13: { //BossBattles.StartBossBattle(client, "CliffsideRelic"); } break; case 14: { //completed tanren tunnel client.Player.IncrementDungeonCompletionCount(24, 1); DungeonRules.ExitDungeon(client, 1328, 4, 16); } break; case 15: { client.Player.EndTempStatMode(); exPlayer.Get(client).WarpToSpawn(false); } break; case 16: {//completed marowak training dojo client.Player.IncrementDungeonCompletionCount(10, 1); //Messenger.PlayerWarp(client, 50, 10, 8); DungeonRules.ExitDungeon(client, 50, 10, 8); } break; case 17: { //completed winden pass client.Player.IncrementDungeonCompletionCount(4, 1); //Messenger.PlayerWarp(client, 921, 17, 21); DungeonRules.ExitDungeon(client, 921, 17, 21); } break; case 18: { client.Player.IncrementDungeonCompletionCount(11, 1); //Messenger.PlayerWarp(client, 50, 10, 8); DungeonRules.ExitDungeon(client, 1734, 13, 19); } break; case 19: {//key-activated next-floor if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1 == 1) { PartyManager.AttemptPartyWarp(client, (Client warpClient) => { exPlayer.Get(warpClient).FirstMapLoaded = false; if (warpClient.Player.Map.MapType == Enums.MapType.RDungeonMap) warpClient.Player.WarpToRDungeon(((RDungeonMap)warpClient.Player.Map).RDungeonIndex, ((RDungeonMap)warpClient.Player.Map).RDungeonFloor + 1); }); } else { int slot = 0; for (int i = 1; i <= client.Player.Inventory.Count; i++) { if (client.Player.Inventory[i].Num == param1 && !client.Player.Inventory[i].Sticky) { slot = i; break; } } if (slot > 0) { Messenger.AskQuestion(client, "UseItem:"+param1, "Will you use your " + ItemManager.Items[param1].Name + " to open the staircase?", -1); } else { Messenger.PlaySoundToMap(client.Player.MapID, "magic132.wav"); Messenger.PlayerMsg(client, "The staircase is sealed... It seems to need a key.", Text.BrightRed); } } } break; case 20: { //BossBattles.StartBossBattle(client, "CrystalRuins"); } break; case 21: {//day/night dungeon variation int RDungeonIndex = param1 - 1; if (Server.Globals.ServerTime == Enums.Time.Night || Server.Globals.ServerTime == Enums.Time.Dusk) { RDungeonIndex = param2 - 1; } PartyManager.AttemptPartyWarp(client, (Client warpClient) => { exPlayer.Get(warpClient).FirstMapLoaded = false; if (warpClient.Player.Map.MapType == Enums.MapType.RDungeonMap) warpClient.Player.WarpToRDungeon(((RDungeonMap)warpClient.Player.Map).RDungeonIndex, ((RDungeonMap)warpClient.Player.Map).RDungeonFloor + 1); }); } break; case 22: {//switch-activated next-floor if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1 == 1) { PartyManager.AttemptPartyWarp(client, (Client warpClient) => { exPlayer.Get(warpClient).FirstMapLoaded = false; warpClient.Player.WarpToRDungeon(param1 - 1, param2 - 1); }); } else { Messenger.PlayerMsg(client, "The passage to the next floor won't open until the switches are pressed...", Text.BrightRed); Messenger.PlaySoundToMap(client.Player.MapID, "magic132.wav"); } } break; case 23: {//switch-activated dungeon end if (client.Player.Map.Tile[client.Player.X, client.Player.Y].Data1 == 1) { PartyManager.AttemptPartyWarp(client, (Client warpClient) => { Messenger.PlayerWarp(warpClient, 1426, 18, 43); int players = (warpClient.Player.Map.PlayersOnMap.Count - 1) % 4; warpClient.Player.Map.SpawnItem(533, 1, false, false, "373;374;375;376;377;378;379;382", 17 + 2 * (players % 2), 11 + 2 * (players / 2), warpClient); if (warpClient.Player.Map.ActiveItem[players].Num != 0) { warpClient.Player.Map.ActiveItem[players].TimeDropped = new TickCount(Core.GetTickCount().Tick + 600000); } }); } else { Messenger.PlayerMsg(client, "The passage to the rooftop won't open until the switches are pressed...", Text.BrightRed); Messenger.PlaySoundToMap(client.Player.MapID, "magic132.wav"); } } break; case 24: {//switch-deactivated end-Harmonic-Tower Messenger.PlayerMsg(client, "The passage to the next floor won't open until the switches are pressed...", Text.BrightRed); } break; case 25: {//end of Harmonic Tower } break; case 26: {//end of Mineral Cave client.Player.IncrementDungeonCompletionCount(15, 1); DungeonRules.ExitDungeon(client, 1361, 6, 7); if (client.Player.Map.MapType == Enums.MapType.Instanced && ((InstancedMap) client.Player.Map).MapBase == 1361) { client.Player.Map.SpawnItem(49, 1, false, false, "", 8, 8, null); } } break; case 27: {//completed Mt. barricade client.Player.IncrementDungeonCompletionCount(18, 1); //Messenger.PlayerWarp(client, 50, 10, 8); DungeonRules.ExitDungeon(client, 1015, 25, 25); } break; case 28: {//tanren chambers int x = -1, y = -1, mapNum = -1, itemX = -1, itemY = -1; InstancedMap iMap = null; switch (param1) { case 0: {//bottom mapNum = 301; x = 25; y = 46; itemX = 25; itemY = 25; } break; case 1: {//depth 1 mapNum = 302; x = 9; y = 10; itemX = 9; itemY = 7; } break; case 2: {//depth 2 mapNum = 303; x = 9; y = 10; itemX = 9; itemY = 6; } break; case 3: {//depth 3 mapNum = 304; x = 9; y = 10; itemX = 9; itemY = 7; } break; } if (mapNum > -1) { string mapID = MapManager.GenerateMapID("i"); bool warp = PartyManager.AttemptPartyWarp(client, (Client warpClient) => { if (iMap == null) { iMap = new InstancedMap(mapID); IMap baseMap = MapManager.RetrieveMap(mapNum); MapCloner.CloneMapTiles(baseMap, iMap); MapCloner.CloneMapNpcs(baseMap, iMap); MapCloner.CloneMapGeneralProperties(baseMap, iMap); iMap.MapBase = mapNum; } Messenger.PlayerWarp(warpClient, iMap, x, y); }); if (warp) { int itemNum = 533; string tag = ""; switch (param2) {//determines reward //Normal case 0: itemNum = 171; break; case 1: tag = "125;355;277;726,1;143;53,20;806,15;716"; break; case 2: tag = "711;452;113;467;136;139;543;170"; break; case 3: tag = "717;327;739,3;15;690;117;353;400"; break; case 4: tag = "399;544;47;260;354;248;451;404"; break; case 5: tag = "329;175;397;21;13;191;47;307"; break; case 6: tag = "759;489;167;144;172;372;16;704"; break; case 7: tag = "489;92;82;497;306;11;151;93"; break; //Elecric case 8: tag = "715;430;806,20;350;88;253;726,5;803"; break; case 9: tag = "716;452;53,15;369;726,1;158;355;18"; break; case 10: tag = "711;454;275;698;298;260;303"; break; case 11: tag = "717;83;327;260;354;249;451;544"; break; case 12: tag = "757;183;167;307;77;719;744,3;421"; break; //Water case 13: tag = "715;427;806,20;350;88;253;726,5;803"; break; case 14: tag = "716;452;806,10;355;101;301;158;718"; break; case 15: tag = "711;796;333;272;349;370;120,1,150;801"; break; case 16: tag = "314;455;442;260;354;249;96"; break; case 17: tag = "751;489;154;372;112;172;157;460"; break; //Grass case 18: tag = "715;424;806,20;350;88;253;726,5;803"; break; case 19: tag = "716;452;53,15;726,1;355;189;72;630"; break; case 20: tag = "711;794;274;457;458;187;184"; break; case 21: tag = "717;120,1,120;327;463;260;451;298;404"; break; case 22: tag = "100;154;721,10;324;397;47;21;810"; break; //Fire case 23: tag = "715;420;806,20;350;88;253;726,5;803"; break; case 24: tag = "716;452;806,10;459;355;94;302;805"; break; case 25: tag = "64;453;273;334;451;47;442;481"; break; case 26: tag = "758;183;167;741,3;441;163;686;134"; break; case 27: tag = "82;489;410;132;304;60,15;345,10;497"; break; //Psychic case 28: tag = "715;425;806,20;350;398;253;726,5;803"; break; case 29: tag = "711;452;143;440;726,1;355;467;468"; break; case 30: tag = "717;498;327;276;466;353;451;298"; break; case 31: tag = "107;742,3;354;249;13;90;99;790"; break; case 32: tag = "761;727,3;293;16;172;719;704;421"; break; //Dark case 33: tag = "715;418;806,20;350;398;253;726,5;803"; break; case 34: tag = "711;143;689;690;280;353;383;456"; break; case 35: tag = "451;12;354;742,3;249;90;44;790"; break; case 36: tag = "810;324;397;45;312;47;701;13"; break; case 37: tag = "760;167;134;16;738,3;172;704;700"; break; //Ghost case 38: tag = "715;428;806,20;350;398;253;726,5;803"; break; case 39: tag = "716;452;143;461;355;469;125;18"; break; case 40: tag = "711;558;462;120,1,150;720;62,10;801"; break; case 41: tag = "717;97;327;283;465;353;383;120,1,128"; break; case 42: tag = "752;727,3;293;744,3"; break; //Fighting case 43: tag = "715;419;806,20;350;398;253;726,5;803"; break; case 44: tag = "711;452;799;143;281;355;72;409"; break; case 45: tag = "717;289;464;353;451;298;120,1,110;303"; break; case 46: tag = "58;47;324;481;21;701;447;699"; break; case 47: tag = "756;167;741,3;144;16;172;421"; break; //Flying case 48: tag = "715;426;53,25;350;398;253;726,5;803"; break; case 49: tag = "711;797;282;260;451;120,1,130;806,7;303"; break; case 50: tag = "95;685;397;47;701;810;396;699"; break; //Steel case 51: tag = "715;297;53,25;350;88;253;726,5;803"; break; case 52: tag = "711;791;288;433;401;120,1,150;720"; break; case 53: tag = "68;176;544;99;354;451;191;90"; break; case 54: tag = "754;183;741,3;134;16;441;744,3;686"; break; //Poison case 55: tag = "715;429;53,25;350;398;253;726,5;803"; break; case 56: tag = "711;452;339;355;170;286;72;630"; break; case 57: tag = "122;481;45;154;248;169;810;99"; break; //Ice case 58: tag = "715;416;53,25;350;88;253;726,5;803"; break; case 59: tag = "716;452;290;215;355;371;349;72"; break; case 60: tag = "717;337;444;442;353;451;120,1,120;285"; break; case 61: tag = "106;742,3;299;312;47;744,4;84;810"; break; //Ground case 62: tag = "715;296;53,25;350;398;253;726,5;803"; break; case 63: tag = "711;452;688;355;120,1,160;72;720;409"; break; case 64: tag = "67;278;84;99;248;102;47;300"; break; //Bug case 65: tag = "715;423;53,25;350;88;253;726,5;803"; break; case 66: tag = "711;792;353;480;120,1,150;260;720;801"; break; case 67: tag = "71;279;99;354;451;248;481;90"; break; case 68: tag = "753;721,10;183;144;411;134;16;441"; break; //Dragon case 69: tag = "715;417;53,25;350;398;253;726,5;803"; break; case 70: tag = "711;327;380;284;260;184;303;690"; break; case 71: tag = "76;45;47;312;701;744,4;111;789"; break; //Rock case 72: tag = "715;295;53,25;350;88;253;726,5;803"; break; case 73: tag = "716;160;355;349;370;336;371;72"; break; case 74: tag = "717;793;544;353;451;53,8;120,1,120;287"; break; case 75: tag = "108;685;397;300;744,4;47;447;789"; break; } iMap.SpawnItem(itemNum, 0, false, false, tag, itemX, itemY, null); if (client.Player.Name == "Hayarotle" || client.Player.Name == "Sprinko") { Messenger.PlayerMsg(client, "Possible items:", Text.Black); string[] itemSelection = tag.Split(';'); for (int i = 0; i < itemSelection.Length; i++) { string[] chosenItem = itemSelection[i].Split(','); if (chosenItem[0].IsNumeric()) { if (chosenItem.Length == 2 && chosenItem[1].IsNumeric()) { Messenger.PlayerMsg(client, chosenItem[1] + " " + ItemManager.Items[chosenItem[0].ToInt()].Name, Text.Yellow); } else if (chosenItem.Length == 3 && chosenItem[2].IsNumeric()) { Messenger.PlayerMsg(client, "a " + ItemManager.Items[chosenItem[0].ToInt()].Name, Text.Yellow); } else { Messenger.PlayerMsg(client, "a " + ItemManager.Items[chosenItem[0].ToInt()].Name, Text.Yellow); } } } } } } } break; } } catch (Exception ex) { Messenger.AdminMsg("Error: RDungeonScriptGoal", Text.Black); Messenger.AdminMsg(ex.ToString(), Text.Black); } }
public static void GenerateMaze(Client client, Server.Enums.Direction dir) { //generates a brand-new maze map for the player and sends it as their current map //warning: code copy-pasted (and revised) from C++, so it won't be neat int x; int y; int r; int[] order = new int[4]; InstancedMap imap = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(1543), imap); //Server.Enums.TileType[,] maze = new Server.Enums.TileType[47,35]; int[,] cells = new int[22,16]; for(int i = 2; i < 45; i++) { //initialize map for (int j = 2; j < 33; j++) { //maze[i,j] = Server.Enums.TileType.Blocked; imap.SetAttribute(i, j, Server.Enums.TileType.Blocked, 0, 0, 0, "", "", ""); imap.SetTile(i, j, 446, 9, 1); } } for(int i = 0; i < 22; i++) { //initialize cells used for prim's algorithm for (int j = 0; j < 16; j++) { cells[i,j] = 0; } } List<int> list1 = new List<int>(); x = Server.Math.Rand(1,22); y = Server.Math.Rand(1,16); cells[x,y] = 2; //maze[2*(x+1),2*(y+1)] = Server.Enums.TileType.Walkable; imap.SetAttribute(2*(x+1), 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1), 0, 0, 1); order = GenerateOrder(); for (int i = 0; i < 4; i++) { switch(order[i]) { case 1: //up if (y > 0) { cells[x,y-1] = 1; list1.Add(x + 22*(y-1)); } break; case 2: //right if (x < 21) { cells[x+1,y] = 1; list1.Add(x+1 + 22*y); } break; case 3: //down if (y < 15) { cells[x,y+1] = 1; list1.Add(x + 22*(y+1)); } break; case 4: //left if (x > 0) { cells[x-1,y] = 1; list1.Add(x-1 + 22*y); } break; } } while(list1.Count > 0) { //Messenger.PlayerMsg(client, list1.Count.ToString(), Text.Black); if (Server.Math.Rand(1,3) > 1) { //take random item from list r = Server.Math.Rand(0, list1.Count); x = list1[r]; list1.RemoveAt(r); } else { //take last element x = list1.Last(); list1.RemoveAt(list1.Count-1); } y = x / 22; x = x % 22; //attach it to random neighbor and add neighbors to queue in random order order = GenerateOrder(); for(int i = 0; i < 4; i++) { switch(order[i]) { case 1: //up if (y > 0) { if (cells[x,y-1] == 0) { //add to queue cells[x,y-1] = 1; list1.Add(x + 22*(y-1)); } else if (cells[x,y-1] == 2 && cells[x,y] == 1) { //attach cells[x,y] = 2; //maze[2*(x+1),2*(y+1)-1] = Server.Enums.TileType.Walkable; //maze[2*(x+1),2*(y+1)] = Server.Enums.TileType.Walkable; imap.SetAttribute(2*(x+1), 2*(y+1)-1, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1)-1, 0, 0, 1); imap.SetAttribute(2*(x+1), 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1), 0, 0, 1); } } break; case 2: //right if (x < 21) { if (cells[x+1,y] == 0) { //add to queue cells[x+1,y] = 1; list1.Add(x+1 + 22*y); } else if (cells[x+1,y] == 2 && cells[x,y] == 1) { //attach cells[x,y] = 2; //maze[2*(x+1)+1,2*(y+1)] = Server.Enums.TileType.Walkable; //maze[2*(x+1),2*(y+1)] = Server.Enums.TileType.Walkable; imap.SetAttribute(2*(x+1)+1, 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1)+1, 2*(y+1), 0, 0, 1); imap.SetAttribute(2*(x+1), 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1), 0, 0, 1); } } break; case 3: //down if (y < 15) { if (cells[x,y+1] == 0) { //add to queue cells[x,y+1] = 1; list1.Add(x + 22*(y+1)); } else if (cells[x,y+1] == 2 && cells[x,y] == 1) { //attach cells[x,y] = 2; //maze[2*(x+1),2*(y+1)+1] = Server.Enums.TileType.Walkable; //maze[2*(x+1),2*(y+1)] = Server.Enums.TileType.Walkable; imap.SetAttribute(2*(x+1), 2*(y+1)+1, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1)+1, 0, 0, 1); imap.SetAttribute(2*(x+1), 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1), 0, 0, 1); } } break; case 4: //left if (x > 0) { if (cells[x-1,y] == 0) { //add to queue cells[x-1,y] = 1; list1.Add(x-1 + 22*y); } else if (cells[x-1,y] == 2 && cells[x,y] == 1) { //attach cells[x,y] = 2; //maze[2*(x+1)-1,2*(y+1)] = Server.Enums.TileType.Walkable; //maze[2*(x+1),2*(y+1)] = Server.Enums.TileType.Walkable; imap.SetAttribute(2*(x+1)-1, 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1)-1, 2*(y+1), 0, 0, 1); imap.SetAttribute(2*(x+1), 2*(y+1), Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2*(x+1), 2*(y+1), 0, 0, 1); } } break; } } } imap.SetTile(23, 32, 0, 0, 1); imap.SetAttribute(23, 32, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(23, 2, 0, 0, 1); imap.SetAttribute(23, 32, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(2, 17, 0, 0, 1); imap.SetAttribute(23, 32, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); imap.SetTile(44, 17, 0, 0, 1); imap.SetAttribute(44, 17, Server.Enums.TileType.Walkable, 0, 0, 0, "", "", ""); DecorateMap(client, imap); //make decoratemap use map's max x/y? //warp player to maze if (dir == Server.Enums.Direction.Up) { x = client.Player.X + 14; if (x > 24) x = 24; y = 32; } else if (dir == Server.Enums.Direction.Down) { x = client.Player.X + 14; if (x > 24) x = 24; y = 2; } else if (dir == Server.Enums.Direction.Left) { x = 44; y = client.Player.Y + 10; } else { //dir == Server.Enums.Direction.Right x = 2; y = client.Player.Y + 10; } Messenger.PlayerWarp(client, imap, x, y); }
public static void StartBossBattle(Client client, InstancedMap bossMap) { if (bossMap.TempStatus.GetStatus("Boss") != null) return; switch (bossMap.MapBase) { case 1422: {//regice // Currently in mission, warp to normal map // TODO: Add regice code here [Scripts] //if (client.Player.ActiveMission != null && client.Player.ActiveMission.WonderMail.Code == "regicecode") { // Messenger.PlayerWarp(client, 1422, 10, 22); // StoryManager.PlayStory(client, 994); //} else {// Not in mission, warp to instanced map // //if (Ranks.IsAllowed(index, Enums.Rank.Moniter)) { // InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); // MapCloner.CloneMapTiles(MapManager.RetrieveMap(1422), map); // map.MapBase = 1422; // Messenger.PlayerWarp(client, map, 10, 21); // StoryManager.PlayStory(client, 989); // //} //} } break; case 914: {//jirachi InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(914), map); map.MapBase = 914; Messenger.PlayerWarp(client, map, 9, 12); StoryManager.PlayStory(client, 149); } break; case 89: {//steelix InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(89), map); map.MapBase = 89; Messenger.PlayerWarp(client, map, 9, 11); map.SetNpcSpawnPoint(1, 9, 5); map.SetNpc(1, 465); //map.SpawnNpc(1); } break; case 590: {//dynamo InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(590), map); map.MapBase = 590; Messenger.PlayerWarp(client, map, 10, 7); map.SetNpc(1, 276); map.SetNpc(2, 277); map.SetNpc(3, 278); //map.SpawnNpc(1); //map.SpawnNpc(2); //map.SpawnNpc(3); } break; case 569: {//groudon InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(569), map); map.MapBase = 569; Messenger.PlayerWarp(client, map, 10, 13); StoryManager.PlayStory(client, 154); } break; case 667: {//honchkrow InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(667), map); map.MapBase = 667; //NetScript.LockPlayer(index); Messenger.PlayerWarp(client, map, 10, 20); //if (Ranks.IsDisallowed(index, Enums.Rank.StoryWriter)) { if (client.Player.GetDungeonCompletionCount(15) < 1) { StoryManager.PlayStory(client, 159); } else { StoryManager.PlayStory(client, 162); } } break; case 424: {//hermi cave //ObjectFactory.GetPlayer(index).IncrementDungeonCompletionCount(9, 1); InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(424), map); map.MapBase = 424; if (client.Player.GetDungeonCompletionCount(9) < 2) { map.SetAttribute(9, 16, Enums.TileType.Item, 370, 1, 0, "", "", ""); map.SetAttribute(10, 16, Enums.TileType.Item, 371, 1, 0, "", "", ""); } else { map.SetAttribute(9, 15, Enums.TileType.Item, 263, 4, 0, "", "", ""); map.SetAttribute(10, 15, Enums.TileType.Item, 264, 4, 0, "", "", ""); map.SetAttribute(8, 16, Enums.TileType.Item, 265, 4, 0, "", "", ""); map.SetAttribute(11, 16, Enums.TileType.Item, 266, 4, 0, "", "", ""); map.SetAttribute(8, 17, Enums.TileType.Item, 266, 4, 0, "", "", ""); map.SetAttribute(11, 17, Enums.TileType.Item, 265, 4, 0, "", "", ""); map.SetAttribute(9, 18, Enums.TileType.Item, 264, 4, 0, "", "", ""); map.SetAttribute(10, 18, Enums.TileType.Item, 263, 4, 0, "", "", ""); map.SetAttribute(9, 16, Enums.TileType.Blocked, 0, 0, 0, "", "", ""); map.SetAttribute(10, 16, Enums.TileType.Blocked, 0, 0, 0, "", "", ""); map.SetAttribute(9, 17, Enums.TileType.Blocked, 0, 0, 0, "", "", ""); map.SetAttribute(10, 17, Enums.TileType.Blocked, 0, 0, 0, "", "", ""); map.SetTile(9, 15, 118400, 7, 5); map.SetTile(10, 15, 118432, 7, 5); map.SetTile(9, 16, 118848, 7, 5); map.SetTile(10, 16, 118880, 7, 5); map.SetTile(9, 17, 119296, 7, 5); map.SetTile(10, 17, 119328, 7, 5); //map.SetTile(9, 15, 128, 8448, 7, 5); //map.SetTile(10, 15, 160, 8448, 7, 5); //map.SetTile(9, 16, 128, 8480, 7, 5); //map.SetTile(10, 16, 160, 8480, 7, 5); //map.SetTile(9, 17, 128, 8512, 7, 5); //map.SetTile(10, 17, 160, 8512, 7, 5); map.SetAttribute(9, 23, Enums.TileType.Story, 147, 2, 0, "", "", ""); } Messenger.PlayerWarp(client, map, 9, 30); //if (ObjectFactory.GetPlayer(index).GetDungeonCompletionCount(9) >= 2) { // NetScript.PlaySound(index, "magic68.wav"); //NetScript.PlayStory(index, 147); //} } break; case 503: {//registeel InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(503), map); map.MapBase = 503; Messenger.PlayerWarp(client, map, 9, 12); StoryManager.PlayStory(client, 37); } break; case 1108: {//mysterious jungle InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(1108), map); map.MapBase = 1108; Messenger.PlayerWarp(client, map, 10, 13); if (client.Player.HasItem(479) > 0) { StoryManager.PlayStory(client, 165); } else { StoryManager.PlayStory(client, 164); } } break; case 174: {//pokemas //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(174), map); //map.MapBase = 174; //Messenger.PlayerWarp(client, map, 12, 19); //StoryManager.PlayStory(client, 170); } break; case 465: {//heatran InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); MapCloner.CloneMapTiles(MapManager.RetrieveMap(465), map); map.MapBase = 465; Messenger.PlayerWarp(client, map, 10, 27); map.SetNpc(1, 404); map.SetNpcSpawnPoint(1, 10, 6); //map.SpawnNpc(1); } break; case 1563: {//xatu //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1563), map); //map.MapBase = 1563; //Messenger.PlayerWarp(client, map, 7, 3); StoryManager.PlayStory(client, 175); } break; //case "Darkrai": { // //instanced map // //warp // //story // } // break; case 1287: {//tiny grotto //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1287), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1287), map); //map.MapBase = 1287; //Messenger.PlayerWarp(client, map, 9, 10); StoryManager.PlayStory(client, 102); //map.SetNpc(0, 502); //map.SetNpcSpawnPoint(0, 9, 3); } break; case 114: {//sour root mini //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(114), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(114), map); //map.MapBase = 114; //Messenger.PlayerWarp(client, map, 7, 12); StoryManager.PlayStory(client, 138); } break; case 115: {//sour root //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(115), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(115), map); //map.MapBase = 115; //Messenger.PlayerWarp(client, map, 10, 10); StoryManager.PlayStory(client, 136); } break; case 255: {//seaside cavern //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(255), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(255), map); //map.MapBase = 255; //map.SetTile(9, 4, 6, 0, 4, 3); //map.SetAttribute(9, 4, Server.Enums.TileType.Blocked, 0, 0, 0, "", "", ""); //Messenger.PlayerWarp(client, map, 9, 9); StoryManager.PlayStory(client, 115); } break; case 1609: { InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); IMap originalMap = MapManager.RetrieveMap(1609); MapCloner.CloneMapTileProperties(originalMap, map); MapCloner.CloneMapTiles(originalMap, map); Messenger.PlayerWarp(client, map, 11, 29); } break; case 1288: {//cliffside //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1288), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1288), map); //map.MapBase = 1288; //Messenger.PlayerWarp(client, map, 10, 10); StoryManager.PlayStory(client, 118); } break; case 531: {//thunderstorm forest //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(531), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(531), map); //map.MapBase = 531; //Messenger.PlayerWarp(client, map, 9, 13); StoryManager.PlayStory(client, 122); } break; case 1248: {//sauna cavern mini //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1248), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1248), map); //map.MapBase = 1248; //Messenger.PlayerWarp(client, map, 9, 12); StoryManager.PlayStory(client, 142); } break; case 1263: {//sauna cavern //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1263), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1263), map); //map.MapBase = 1263; //Messenger.PlayerWarp(client, map, 10, 12); StoryManager.PlayStory(client, 140); } break; case 1392: {//crystal ruins //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1392), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1392), map); //map.MapBase = 1392; //Messenger.PlayerWarp(client, map, 9, 11); StoryManager.PlayStory(client, 186); } break; case 1394: {//frozen citadel //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1394), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1394), map); //map.MapBase = 1394; //Messenger.PlayerWarp(client, map, 10, 10); StoryManager.PlayStory(client, 188); } break; case 1362: {//southern sea //InstancedMap map = new InstancedMap(MapManager.GenerateMapID("i")); //MapCloner.CloneMapTiles(MapManager.RetrieveMap(1362), map); //MapCloner.CloneMapGeneralProperties(MapManager.RetrieveMap(1362), map); //map.MapBase = 1362; //Messenger.PlayerWarp(client, map, 9, 12); StoryManager.PlayStory(client, 144); } break; case 1335: {//Chandalure StoryManager.PlayStory(client, 217); } break; case 718: {//rotom forme StoryManager.PlayStory(client, 215); } break; case 534: {//lapras StoryManager.PlayStory(client, 216); } break; case 1638: {//skylift StoryManager.PlayStory(client, 197); } break; case 1048: {//Exbel Woods Clearing StoryManager.PlayStory(client, 196); } break; case 1851: {//beach bunker StoryManager.PlayStory(client, 203); } break; case 1637: {//snowveil lair StoryManager.PlayStory(client, 326); } break; case 1670: {//snowveil pit StoryManager.PlayStory(client, 328); } break; case 1662: {//snowveil end StoryManager.PlayStory(client, 330); } break; case 1722: {//articuno StoryManager.PlayStory(client, 170); } break; case 1526: {//Deep Winden Forest Clearing StoryManager.PlayStory(client, 322); } break; case 1744: {//Inferno Volcano Core StoryManager.PlayStory(client, 393); } break; case 1745: {//Mysterious Jungle Undergrowth StoryManager.PlayStory(client, 346); } break; case 1765: {//Inferno Volcano StoryManager.PlayStory(client, 141); } break; case 1701: {//Sacred Tower, Fiery Passage StoryManager.PlayStory(client, 370); } break; case 1702: {//Sacred Tower, Garden Passage StoryManager.PlayStory(client, 371); } break; case 1703: {//Sacred Tower, Aquatic Passage StoryManager.PlayStory(client, 372); } break; case 1704: {//Sacred Tower, Frigid Passage StoryManager.PlayStory(client, 373); } break; case 1705: {//Sacred Tower, Electrical Passage StoryManager.PlayStory(client, 374); } break; case 1706: {//Sacred Tower, Malign Passage StoryManager.PlayStory(client, 375); } break; case 1707: {//Sacred Tower, Esoteric Passage StoryManager.PlayStory(client, 376); } break; case 1708: {//Sacred Spire StoryManager.PlayStory(client, 378); } break; case 1692: {//Tanren Dojo, Hitmonchan StoryManager.PlayStory(client, 247); } break; case 1694: {//Tanren Dojo, Hitmonlee StoryManager.PlayStory(client, 267); } break; case 1715: {//Tanren Dojo, Hitmontop StoryManager.PlayStory(client, 323); } break; case 982: {//Honeydrop Meadow Clearing StoryManager.PlayStory(client, 352); } break; case 1994: {//Boss Rush 1 StoryManager.PlayStory(client, 354); } break; case 1990: {//Boss Rush 2 StoryManager.PlayStory(client, 355); } break; case 1983: {//Boss Rush 3 StoryManager.PlayStory(client, 356); } break; case 539: {//Boss Rush 4 StoryManager.PlayStory(client, 357); } break; case 496: {//Boss Rush 5 StoryManager.PlayStory(client, 358); } break; case 1786: {//Boggy Wastes Chamber StoryManager.PlayStory(client, 360); } break; case 787: {//Boggy Wastes Lair StoryManager.PlayStory(client, 362); } break; case 1754: {//Tanren Mines, Dead End StoryManager.PlayStory(client, 425); } break; case 1954: {//Tanren Mines Vestibule StoryManager.PlayStory(client, 210); } break; case 1136: {//Tanren Mines End StoryManager.PlayStory(client, 214); } break; } }