package server.maps; import client.MapleCharacter; import client.MapleClient; import client.MapleQuestStatus; import client.Skill; import client.SkillEntry; import client.SkillFactory; import constants.GameConstants; import java.awt.Point; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ScheduledFuture; import scripting.event.EventManager; import scripting.map.MapScriptManager; import scripting.npc.NPCScriptManager; import server.MapleItemInformationProvider; import server.Randomizer; import server.Timer.EventTimer; import server.Timer.MapTimer; import server.life.MapleLifeFactory; import server.life.MapleMonster; import server.life.OverrideMonsterStats; import server.maps.MapleNodes.DirectionInfo; import server.quest.MapleQuest; import tools.FileoutputUtil; import tools.MaplePacketCreator; import tools.packet.MobPacket; import tools.packet.NPCPacket; import tools.packet.UIPacket; public class MapScriptMethods { private static final Point witchTowerPos = new Point(-60, 184); private static enum onFirstUserEnter { //new Stuff mCastle_enter, mapFU_910028310, mapFU_910028360, mapFU_910028330, mapFU_910028350, boss_Event_PinkZakum, dojang_Eff, dojang_Msg, PinkBeen_before, onRewordMap, StageMsg_together, StageMsg_crack, StageMsg_davy, StageMsg_goddess, party6weatherMsg, StageMsg_juliet, StageMsg_romio, moonrabbit_mapEnter, astaroth_summon, boss_Ravana, boss_Ravana_mirror, killing_BonusSetting, killing_MapSetting, metro_firstSetting, balog_bonusSetting, balog_summon, easy_balog_summon, Sky_TrapFEnter, shammos_Fenter, PRaid_D_Fenter, PRaid_B_Fenter, summon_pepeking, Xerxes_summon, VanLeon_Before, cygnus_Summon, storymap_scenario, shammos_FStart, kenta_mapEnter, iceman_FEnter, iceman_Boss, prisonBreak_mapEnter, Visitor_Cube_poison, Visitor_Cube_Hunting_Enter_First, VisitorCubePhase00_Start, visitorCube_addmobEnter, Visitor_Cube_PickAnswer_Enter_First_1, visitorCube_medicroom_Enter, visitorCube_iceyunna_Enter, Visitor_Cube_AreaCheck_Enter_First, visitorCube_boomboom_Enter, visitorCube_boomboom2_Enter, CubeBossbang_Enter, MalayBoss_Int, mPark_summonBoss, magnus_summon, Ranmaru_Before, banban_Summon, pierre_Summon, queen_summon0, abysscave_ent, NULL; private static onFirstUserEnter fromString(String Str) { try { return valueOf(Str); } catch (IllegalArgumentException ex) { return NULL; } } }; private static enum onUserEnter { onUserEnter_866100000, q59000_tuto, onUserEnter_866191000, onUserEnter_866103000, onUserEnter_866104000, onUserEnter_866105000, onUserEnter_866106000, onUserEnter_866107000, onUserEnter_866109000, onUserEnter_866135000, onUserEnter_866138000, onUserEnter_866000130, enter_866033000, direction_59054, direction_59061, direction_59063, direction_59070, direction_59070b, Advanture_tuto33, Ranmaru_ExitCheck, root_camera, root_ereb00, enter_101072002, enter_101073300, enter_101073201, enter_101073110, enter_101073010, enter_101070000, evolvingDirection1, evolvingDirection2, np_tuto_0_0_before, np_tuto_0_0, enter_931060110, enter_931060120, dubl2Tuto0, dubl2Tuto10, dublTuto21, dublTuto23, enter_masRoom, enter_23214, map_913070000, map_913070001, map_913070002, map_913070003, map_913070004, map_913070020, map_913070050, mihail_direc, PTtutor000, PTtutor100, PTtutor200, PTtutor300, PTtutor301, PTtutor400, PTtutor500, PTjob1, PTjob2M, babyPigMap, crash_Dragon, cygnus_Minimap, check_q20833, evanleaveD, getDragonEgg, meetWithDragon, go1010100, go1010200, go1010300, go1010400, evanPromotion, PromiseDragon, evanTogether, incubation_dragon, TD_MC_Openning, TD_MC_gasi, TD_MC_title, startEreb, dojang_Msg, dojang_1st, reundodraco, undomorphdarco, explorationPoint, goAdventure, go10000, go20000, go30000, go40000, go50000, go1000000, go1010000, go1020000, go2000000, goArcher, goPirate, goRogue, goMagician, goSwordman, goLith, iceCave, mirrorCave, aranDirection, rienArrow, rien, check_count, Massacre_first, Massacre_result, aranTutorAlone, evanAlone, dojang_QcheckSet, Sky_StageEnter, outCase, balog_buff, balog_dateSet, Sky_BossEnter, Sky_GateMapEnter, shammos_Enter, shammos_Result, shammos_Base, dollCave00, dollCave01, dollCave02, Sky_Quest, enterBlackfrog, onSDI, blackSDI, summonIceWall, metro_firstSetting, start_itemTake, findvioleta, pepeking_effect, TD_MC_keycheck, TD_MC_gasi2, in_secretroom, sealGarden, TD_NC_title, TD_neo_BossEnter, PRaid_D_Enter, PRaid_B_Enter, PRaid_Revive, PRaid_W_Enter, PRaid_WinEnter, PRaid_FailEnter, Resi_tutor10, Resi_tutor20, Resi_tutor30, Resi_tutor40, Resi_tutor50, Resi_tutor60, Resi_tutor70, Resi_tutor80, Resi_tutor50_1, summonSchiller, q31102e, q2614M, q31103s, jail, VanLeon_ExpeditionEnter, cygnus_ExpeditionEnter, knights_Summon, TCMobrevive, mPark_stageEff, moonrabbit_takeawayitem, StageMsg_crack, shammos_Start, iceman_Enter, prisonBreak_1stageEnter, VisitorleaveDirectionMode, visitorPT_Enter, VisitorCubePhase00_Enter, visitor_ReviveMap, cannon_tuto_01, cannon_tuto_direction, cannon_tuto_direction1, cannon_tuto_direction2, userInBattleSquare, merTutorDrecotion00, merTutorDrecotion10, merTutorDrecotion20, merStandAlone, merOutStandAlone, merTutorSleep00, merTutorSleep01, merTutorSleep02, np_tuto_0_5, np_tuto_0_8, EntereurelTW, ds_tuto_ill0, //ds_tuto_1_0, ds_tuto_3_0, ds_tuto_3_1, ds_tuto_4_0, ds_tuto_5_0, ds_tuto_2_prep, ds_tuto_1_before, ds_tuto_2_before, enter_edelstein, angelic_tuto0, standbyAzwan, patrty6_1stIn, ds_tuto_home_before, ds_tuto_ani, azwan_stageEff, magnus_enter_HP, q53251_enter, q53244_dun_in, rootabyssTakeItem, PTjob3M, PTjob3M_1, PTjob3M2, PTjob4M, PTjob4M_1, PTjob4M2, hayatoJobChange, /*kenjiTutoDirection,*/ NULL; private static onUserEnter fromString(String Str) { try { return valueOf(Str); } catch (IllegalArgumentException ex) { return NULL; } } }; private static enum directionInfo { merTutorDrecotion01, merTutorDrecotion02, merTutorDrecotion03, merTutorDrecotion04, merTutorDrecotion05, merTutorDrecotion12, merTutorDrecotion21, ds_tuto_0_1, ds_tuto_0_2, ds_tuto_0_3, NULL; private static directionInfo fromString(String Str) { try { return valueOf(Str); } catch (IllegalArgumentException ex) { return NULL; } } }; public static void startScript_FirstUser(MapleClient c, String scriptName) { if (c.getPlayer() == null) { return; } switch (onFirstUserEnter.fromString(scriptName)) { case mCastle_enter: c.getSession().write(UIPacket.MapEff("event/mCastle")); break; case mapFU_910028310: final MapleMap map = c.getPlayer().getMap(); map.resetFully(); c.getPlayer().getMap().startMapEffect("Be sure to clean up the Party Room!", 5120079); break; case mapFU_910028360: c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().startMapEffect("Get rid of the Whipped Cream Wight.", 5120079); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9500579), new Point(733, 146)); break; case mapFU_910028330: c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().startMapEffect("Hunt down Witch Cats and collect 10 Party Outfix Boxes.", 5120079); break; case mapFU_910028350: c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().startMapEffect("Vanquish those ghosts and find the letter.", 5120079); break; case boss_Event_PinkZakum: c.getPlayer().getMap().startMapEffect("DO NOT BE ALARMED! The Pink Zakum clone was just to help adventurers like you relieve stress!", 5120039); break; case PinkBeen_before: { handlePinkBeanStart(c); break; } case onRewordMap: { reloadWitchTower(c); break; } //5120019 = orbis(start_itemTake - onUser) case moonrabbit_mapEnter: { c.getPlayer().getMap().startMapEffect("Gather the Primrose Seeds around the moon and protect the Moon Bunny!", 5120016); break; } case Ranmaru_Before: { if (c.getPlayer().getMap().getMobsSize() == 0) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9421581), new Point(109, 123)); break; } } case pierre_Summon: { if (c.getPlayer().getMap().getMobsSize() == 0) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8900000), new Point(497, 551)); break; } } case queen_summon0: { if (c.getPlayer().getMap().getMobsSize() == 0) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8920000), new Point(4, 135)); break; } } case abysscave_ent: { if (c.getPlayer().getMap().getMobsSize() == 0) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8930000), new Point(256, 443)); break; } } case banban_Summon: { if (c.getPlayer().getMap().getMobsSize() == 0) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8910000), new Point(256, 443)); break; } } case StageMsg_goddess: { switch (c.getPlayer().getMapId()) { case 920010000: c.getPlayer().getMap().startMapEffect("Please save me by collecting Cloud Pieces!", 5120019); break; case 920010100: c.getPlayer().getMap().startMapEffect("Bring all the pieces here to save Minerva!", 5120019); break; case 920010200: c.getPlayer().getMap().startMapEffect("Destroy the monsters and gather Statue Pieces!", 5120019); break; case 920010300: c.getPlayer().getMap().startMapEffect("Destroy the monsters in each room and gather Statue Pieces!", 5120019); break; case 920010400: c.getPlayer().getMap().startMapEffect("Play the correct LP of the day!", 5120019); break; case 920010500: c.getPlayer().getMap().startMapEffect("Find the correct combination!", 5120019); break; case 920010600: c.getPlayer().getMap().startMapEffect("Destroy the monsters and gather Statue Pieces!", 5120019); break; case 920010700: c.getPlayer().getMap().startMapEffect("Get the right combination once you get to the top!", 5120019); break; case 920010800: c.getPlayer().getMap().startMapEffect("Summon and defeat Papa Pixie!", 5120019); break; } break; } case StageMsg_crack: { switch (c.getPlayer().getMapId()) { case 922010100: c.getPlayer().getMap().startMapEffect("请消灭所有怪物!", 5120018); break; case 922010200: c.getPlayer().getMap().startSimpleMapEffect("Collect all the passes!", 5120018); break; case 922010300: c.getPlayer().getMap().startMapEffect("请消灭所有怪物!", 5120018); break; case 922010400: c.getPlayer().getMap().startMapEffect("请消灭次元洞里的所有怪物!", 5120018); break; case 922010500: c.getPlayer().getMap().startMapEffect("收集诶一个次元洞里的通行证!", 5120018); break; case 922010600: c.getPlayer().getMap().startMapEffect("到达顶端!", 5120018); break; case 922010700: c.getPlayer().getMap().startMapEffect("请消灭所有怪物!", 5120018); break; case 922010800: c.getPlayer().getMap().startSimpleMapEffect("得到正确的组合!", 5120018); break; case 922010900: c.getPlayer().getMap().startMapEffect("打败阿丽莎乐!", 5120018); break; } break; } case StageMsg_together: { switch (c.getPlayer().getMapId()) { case 103000800: c.getPlayer().getMap().startMapEffect("Solve the question and gather the amount of passes!", 5120017); break; case 103000801: c.getPlayer().getMap().startMapEffect("Get on the ropes and unveil the correct combination!", 5120017); break; case 103000802: c.getPlayer().getMap().startMapEffect("Get on the platforms and unveil the correct combination!", 5120017); break; case 103000803: c.getPlayer().getMap().startMapEffect("Get on the barrels and unveil the correct combination!", 5120017); break; case 103000804: c.getPlayer().getMap().startMapEffect("Defeat King Slime and his minions!", 5120017); break; } break; } case StageMsg_romio: { switch (c.getPlayer().getMapId()) { case 926100000: c.getPlayer().getMap().startMapEffect("Please find the hidden door by investigating the Lab!", 5120021); break; case 926100001: c.getPlayer().getMap().startMapEffect("Find your way through this darkness!", 5120021); break; case 926100100: c.getPlayer().getMap().startMapEffect("Fill the beakers to power the energy!", 5120021); break; case 926100200: c.getPlayer().getMap().startMapEffect("Get the files for the experiment through each door!", 5120021); break; case 926100203: c.getPlayer().getMap().startMapEffect("Please defeat all the monsters!", 5120021); break; case 926100300: c.getPlayer().getMap().startMapEffect("Find your way through the Lab!", 5120021); break; case 926100401: c.getPlayer().getMap().startMapEffect("Please, protect my love!", 5120021); break; } break; } case StageMsg_juliet: { switch (c.getPlayer().getMapId()) { case 926110000: c.getPlayer().getMap().startMapEffect("Please find the hidden door by investigating the Lab!", 5120022); break; case 926110001: c.getPlayer().getMap().startMapEffect("Find your way through this darkness!", 5120022); break; case 926110100: c.getPlayer().getMap().startMapEffect("Fill the beakers to power the energy!", 5120022); break; case 926110200: c.getPlayer().getMap().startMapEffect("Get the files for the experiment through each door!", 5120022); break; case 926110203: c.getPlayer().getMap().startMapEffect("Please defeat all the monsters!", 5120022); break; case 926110300: c.getPlayer().getMap().startMapEffect("Find your way through the Lab!", 5120022); break; case 926110401: c.getPlayer().getMap().startMapEffect("Please, protect my love!", 5120022); break; } break; } case party6weatherMsg: { switch (c.getPlayer().getMapId()) { case 930000000: c.getPlayer().getMap().startMapEffect("Step in the portal to be transformed.", 5120023); break; case 930000100: c.getPlayer().getMap().startMapEffect("Defeat the poisoned monsters!", 5120023); break; case 930000200: c.getPlayer().getMap().startMapEffect("Eliminate the spore that blocks the way by purifying the poison!", 5120023); break; case 930000300: c.getPlayer().getMap().startMapEffect("Uh oh! The forest is too confusing! Find me, quick!", 5120023); break; case 930000400: c.getPlayer().getMap().startMapEffect("Purify the monsters by getting Purification Marbles from me!", 5120023); break; case 930000500: c.getPlayer().getMap().startMapEffect("Find the Purple Magic Stone!", 5120023); break; case 930000600: c.getPlayer().getMap().startMapEffect("Place the Magic Stone on the altar!", 5120023); break; } break; } case prisonBreak_mapEnter: { break; } case StageMsg_davy: { switch (c.getPlayer().getMapId()) { case 925100000: c.getPlayer().getMap().startMapEffect("Defeat the monsters outside of the ship to advance!", 5120020); break; case 925100100: c.getPlayer().getMap().startMapEffect("We must prove ourselves! Get me Pirate Medals!", 5120020); break; case 925100200: c.getPlayer().getMap().startMapEffect("Defeat the guards here to pass!", 5120020); break; case 925100300: c.getPlayer().getMap().startMapEffect("Eliminate the guards here to pass!", 5120020); break; case 925100400: c.getPlayer().getMap().startMapEffect("Lock the doors! Seal the root of the Ship's power!", 5120020); break; case 925100500: c.getPlayer().getMap().startMapEffect("Destroy the Lord Pirate!", 5120020); break; } final EventManager em = c.getChannelServer().getEventSM().getEventManager("Pirate"); if (c.getPlayer().getMapId() == 925100500 && em != null && em.getProperty("stage5") != null) { int mobId = Randomizer.nextBoolean() ? 9300107 : 9300119; //lord pirate final int st = Integer.parseInt(em.getProperty("stage5")); switch (st) { case 1: mobId = Randomizer.nextBoolean() ? 9300119 : 9300105; //angry break; case 2: mobId = Randomizer.nextBoolean() ? 9300106 : 9300105; //enraged break; } final MapleMonster shammos = MapleLifeFactory.getMonster(mobId); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().registerMonster(shammos); } c.getPlayer().getMap().spawnMonsterOnGroundBelow(shammos, new Point(411, 236)); } break; } case astaroth_summon: { c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9400633), new Point(600, -26)); //rough estimate break; } case boss_Ravana_mirror: case boss_Ravana: { //event handles this so nothing for now until i find out something to do with it c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.serverMessageNotice("Ravana has appeared!")); break; } case killing_BonusSetting: { //spawns monsters according to mapid //910320010-910320029 = Train 999 bubblings. //926010010-926010029 = 30 Yetis //926010030-926010049 = 35 Yetis //926010050-926010069 = 40 Yetis //926010070-926010089 - 50 Yetis (specialized? immortality) //TODO also find positions to spawn these at c.getPlayer().getMap().resetFully(); c.getSession().write(MaplePacketCreator.showEffect("killing/bonus/bonus")); c.getSession().write(MaplePacketCreator.showEffect("killing/bonus/stage")); Point pos1 = null, pos2 = null, pos3 = null; int spawnPer = 0; int mobId = 0; //9700019, 9700029 //9700021 = one thats invincible if (c.getPlayer().getMapId() >= 910320010 && c.getPlayer().getMapId() <= 910320029) { pos1 = new Point(121, 218); pos2 = new Point(396, 43); pos3 = new Point(-63, 43); mobId = 9700020; spawnPer = 10; } else if (c.getPlayer().getMapId() >= 926010010 && c.getPlayer().getMapId() <= 926010029) { pos1 = new Point(0, 88); pos2 = new Point(-326, -115); pos3 = new Point(361, -115); mobId = 9700019; spawnPer = 10; } else if (c.getPlayer().getMapId() >= 926010030 && c.getPlayer().getMapId() <= 926010049) { pos1 = new Point(0, 88); pos2 = new Point(-326, -115); pos3 = new Point(361, -115); mobId = 9700019; spawnPer = 15; } else if (c.getPlayer().getMapId() >= 926010050 && c.getPlayer().getMapId() <= 926010069) { pos1 = new Point(0, 88); pos2 = new Point(-326, -115); pos3 = new Point(361, -115); mobId = 9700019; spawnPer = 20; } else if (c.getPlayer().getMapId() >= 926010070 && c.getPlayer().getMapId() <= 926010089) { pos1 = new Point(0, 88); pos2 = new Point(-326, -115); pos3 = new Point(361, -115); mobId = 9700029; spawnPer = 20; } else { break; } for (int i = 0; i < spawnPer; i++) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new Point(pos1)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new Point(pos2)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new Point(pos3)); } c.getPlayer().startMapTimeLimitTask(120, c.getPlayer().getMap().getReturnMap()); break; } case mPark_summonBoss: { if (c.getPlayer().getEventInstance() != null && c.getPlayer().getEventInstance().getProperty("boss") != null && c.getPlayer().getEventInstance().getProperty("boss").equals("0")) { for (int i = 9800119; i < 9800125; i++) { final MapleMonster boss = MapleLifeFactory.getMonster(i); c.getPlayer().getEventInstance().registerMonster(boss); c.getPlayer().getMap().spawnMonsterOnGroundBelow(boss, new Point(c.getPlayer().getMap().getPortal(2).getPosition())); } } break; } case shammos_Fenter: { if (c.getPlayer().getMapId() >= 921120100 && c.getPlayer().getMapId() < 921120300) { final MapleMonster shammos = MapleLifeFactory.getMonster(9300275); if (c.getPlayer().getEventInstance() != null) { int averageLevel = 0, size = 0; for (MapleCharacter pl : c.getPlayer().getEventInstance().getPlayers()) { averageLevel += pl.getLevel(); size++; } if (size <= 0) { return; } averageLevel /= size; shammos.changeLevel(averageLevel); c.getPlayer().getEventInstance().registerMonster(shammos); if (c.getPlayer().getEventInstance().getProperty("HP") == null) { c.getPlayer().getEventInstance().setProperty("HP", averageLevel + "000"); } shammos.setHp(Long.parseLong(c.getPlayer().getEventInstance().getProperty("HP"))); } c.getPlayer().getMap().spawnMonsterWithEffectBelow(shammos, new Point(c.getPlayer().getMap().getPortal(0).getPosition()), 12); shammos.switchController(c.getPlayer(), false); c.getSession().write(MobPacket.getNodeProperties(shammos, c.getPlayer().getMap())); /*} else if (c.getPlayer().getMapId() == (GameConstants.GMS ? 921120300 : 921120500) && c.getPlayer().getMap().getAllMonstersThreadsafe().size() == 0) { final MapleMonster shammos = MapleLifeFactory.getMonster(9300281); if (c.getPlayer().getEventInstance() != null) { int averageLevel = 0, size = 0; for (MapleCharacter pl : c.getPlayer().getEventInstance().getPlayers()) { averageLevel += pl.getLevel(); size++; } if (size <= 0) { return; } averageLevel /= size; shammos.changeLevel(Math.max(120, Math.min(200, averageLevel))); } c.getPlayer().getMap().spawnMonsterOnGroundBelow(shammos, new Point(350, 170));*/ } break; } //5120038 = dr bing. 5120039 = visitor lady. 5120041 = unknown dr bing. case iceman_FEnter: { if (c.getPlayer().getMapId() >= 932000100 && c.getPlayer().getMapId() < 932000300) { final MapleMonster shammos = MapleLifeFactory.getMonster(9300438); if (c.getPlayer().getEventInstance() != null) { int averageLevel = 0, size = 0; for (MapleCharacter pl : c.getPlayer().getEventInstance().getPlayers()) { averageLevel += pl.getLevel(); size++; } if (size <= 0) { return; } averageLevel /= size; shammos.changeLevel(averageLevel); c.getPlayer().getEventInstance().registerMonster(shammos); if (c.getPlayer().getEventInstance().getProperty("HP") == null) { c.getPlayer().getEventInstance().setProperty("HP", averageLevel + "000"); } shammos.setHp(Long.parseLong(c.getPlayer().getEventInstance().getProperty("HP"))); } c.getPlayer().getMap().spawnMonsterWithEffectBelow(shammos, new Point(c.getPlayer().getMap().getPortal(0).getPosition()), 12); shammos.switchController(c.getPlayer(), false); c.getSession().write(MobPacket.getNodeProperties(shammos, c.getPlayer().getMap())); } break; } case PRaid_D_Fenter: { switch (c.getPlayer().getMapId() % 10) { case 0: c.getPlayer().getMap().startMapEffect("Eliminate all the monsters!", 5120033); break; case 1: c.getPlayer().getMap().startMapEffect("Break the boxes and eliminate the monsters!", 5120033); break; case 2: c.getPlayer().getMap().startMapEffect("Eliminate the Officer!", 5120033); break; case 3: c.getPlayer().getMap().startMapEffect("Eliminate all the monsters!", 5120033); break; case 4: c.getPlayer().getMap().startMapEffect("Find the way to the other side!", 5120033); break; } break; } case PRaid_B_Fenter: { c.getPlayer().getMap().startMapEffect("Defeat the Ghost Ship Captain!", 5120033); break; } case summon_pepeking: { c.getPlayer().getMap().resetFully(); final int rand = Randomizer.nextInt(10); int mob_ToSpawn = 100100; if (rand >= 4) { //60% mob_ToSpawn = 3300007; } else if (rand >= 1) { mob_ToSpawn = 3300006; } else { mob_ToSpawn = 3300005; } c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mob_ToSpawn), c.getPlayer().getPosition()); break; } case Xerxes_summon: { c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(6160003), c.getPlayer().getPosition()); break; } case shammos_FStart: c.getPlayer().getMap().startMapEffect("Defeat the monsters!", 5120035); break; case kenta_mapEnter: switch ((c.getPlayer().getMapId() / 100) % 10) { case 1: c.getPlayer().getMap().startMapEffect("Eliminate all the monsters!", 5120052); break; case 2: c.getPlayer().getMap().startMapEffect("Get me 20 Air Bubbles for me to survive!", 5120052); break; case 3: c.getPlayer().getMap().startMapEffect("Help! Make sure I live for three minutes!", 5120052); break; case 4: c.getPlayer().getMap().startMapEffect("Eliminate the two Pianus!", 5120052); break; } //TODOO find out which one it really is, lol break; case cygnus_Summon: { c.getPlayer().getMap().startMapEffect("It's been a long time since I've had guests. It's been even longer since any have left alive.", 5120043); break; } case iceman_Boss: { c.getPlayer().getMap().startMapEffect("You will perish!", 5120050); break; } case Visitor_Cube_poison: { c.getPlayer().getMap().startMapEffect("Eliminate all the monsters!", 5120039); break; } case Visitor_Cube_Hunting_Enter_First: { c.getPlayer().getMap().startMapEffect("Eliminate all the Visitors!", 5120039); break; } case VisitorCubePhase00_Start: { c.getPlayer().getMap().startMapEffect("Eliminate all the flying monsters!", 5120039); break; } case visitorCube_addmobEnter: { c.getPlayer().getMap().startMapEffect("Eliminate all the monsters by moving around the map!", 5120039); break; } case Visitor_Cube_PickAnswer_Enter_First_1: { c.getPlayer().getMap().startMapEffect("One of the aliens must have a clue to the way out.", 5120039); break; } case visitorCube_medicroom_Enter: { c.getPlayer().getMap().startMapEffect("Eliminate all of the Unjust Visitors!", 5120039); break; } case visitorCube_iceyunna_Enter: { c.getPlayer().getMap().startMapEffect("Eliminate all of the Speedy Visitors!", 5120039); break; } case Visitor_Cube_AreaCheck_Enter_First: { c.getPlayer().getMap().startMapEffect("The switch at the top of the room requires a heavy weight.", 5120039); break; } case visitorCube_boomboom_Enter: { c.getPlayer().getMap().startMapEffect("The enemy is powerful! Watch out!", 5120039); break; } case visitorCube_boomboom2_Enter: { c.getPlayer().getMap().startMapEffect("This Visitor is strong! Be careful!", 5120039); break; } case CubeBossbang_Enter: { c.getPlayer().getMap().startMapEffect("This is it! Give it your best shot!", 5120039); break; } case MalayBoss_Int: case storymap_scenario: case VanLeon_Before: case dojang_Msg: case balog_summon: case easy_balog_summon: { //we dont want to reset break; } case metro_firstSetting: case killing_MapSetting: case Sky_TrapFEnter: case balog_bonusSetting: { //not needed c.getPlayer().getMap().resetFully(); break; } case magnus_summon: { c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8880000), c.getPlayer().getPosition()); break; } default: { NPCScriptManager.getInstance().onFirstUserEnter(c, scriptName); //MapScriptManager.getInstance().getMapScript(c, scriptName, true); return; // FileoutputUtil.log("Unhandled script : " + scriptName + ", type : onFirstUserEnter - MAPID " + c.getPlayer().getMapId()); // FileoutputUtil.log(FileoutputUtil.ScriptEx_Log, "Unhandled script : " + scriptName + ", type : onFirstUserEnter - MAPID " + c.getPlayer().getMapId()); // break; } } if (c.getPlayer().isShowPacket()) { c.getPlayer().dropMessage(5, "開始源碼自建地圖onFirstUserEnter腳本:" + scriptName); System.err.println("開始源碼自建地圖onFirstUserEnter腳本:" + scriptName); } } @SuppressWarnings("empty-statement") public static void startScript_User(final MapleClient c, String scriptName) { if (c.getPlayer() == null) { return; } String data = ""; switch (onUserEnter.fromString(scriptName)) { case direction_59070b: { try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390336, "BeastTamerQuestLine4"); Thread.sleep(2000); } catch (InterruptedException e) { } c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(false)); break; } case direction_59070: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390336, "BeastTamerQuestLine3"); break; } case direction_59063: { try { if (c.getPlayer().getQuestStatus(59063) == 1) { MapleQuest.getInstance(59063).forceComplete(c.getPlayer(), 0); } c.getSession().write(UIPacket.getTopMsg("On voyage to Nautilus.")); c.getSession().write(MaplePacketCreator.getClock(1 * 30)); Thread.sleep(30000); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866000240); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } catch (InterruptedException e) { } break; } case direction_59061: { if (c.getPlayer().getQuestStatus(59061) == 1) { MapleQuest.getInstance(59061).forceComplete(c.getPlayer(), 0); //MapleQuest.getInstance(59063).forceStart(c.getPlayer(), 0, null); //MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866000230); //c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } //c.getSession().write(UIPacket.getDirectionStatus(true)); //c.getSession().write(UIPacket.getDirectionInfo(3, 0)); break; } case enter_866033000: { c.getPlayer().getMap().resetFully(); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390915), new Point(-153, 49)); break; } case direction_59054: { try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 100)); Thread.sleep(100); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfoNew((byte) 0, 500, 575, 865)); c.getSession().write(UIPacket.getDirectionInfo(1, 2825)); Thread.sleep(2825); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390313, "BeastTamerQuestLine1"); } catch (InterruptedException e) { } break; } case onUserEnter_866191000: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(0)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390301, "BeastTamerTutIntro1"); break; } case onUserEnter_866138000: { try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.playMovie("BeastTamer.avi", true)); Thread.sleep(75000); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866191000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } catch (InterruptedException e) { } break; } case onUserEnter_866135000: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.IntroDisableUI(true)); if (c.getPlayer().haveItem(2500004, 0)) { c.getPlayer().gainItem(2500004, 1, "");//Animal SP Reset Scroll (Beast Tamer only) final Map<Skill, SkillEntry> sa = new HashMap<>(); sa.put(SkillFactory.getSkill(110000012), new SkillEntry((byte) 14, (byte) 14, -1)); sa.put(SkillFactory.getSkill(110001506), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(110001514), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(110001510), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(110001500), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(110001502), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(112100000), new SkillEntry((byte) 1, (byte) 14, -1)); sa.put(SkillFactory.getSkill(110001501), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(110001501), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(112000000), new SkillEntry((byte) 1, (byte) 14, -1)); c.getPlayer().changeSkillsLevel(sa); } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390300, "BeastTamerTutIntro"); break; } /* case onUserEnter_866109000: { MapleQuest.getInstance(59008).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(59009).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(59009).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(59011).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(59011).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(59013).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(59013).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(59015).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(59015).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(59016).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(59016).forceComplete(c.getPlayer(), 0); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866135000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); break; } case onUserEnter_866107000: { try { c.getPlayer().getMap().resetFully(); if (c.getPlayer().getQuestStatus(59005) == 1) { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390931), new Point(661, 246)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390931), new Point(761, 246)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390931), new Point(861, 246)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390931), new Point(961, 246)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390931), new Point(1061, 246)); } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390300, "BeastTamerTut06"); Thread.sleep(1000); MapleQuest.getInstance(59005).forceComplete(c.getPlayer(), 0); } catch (InterruptedException ex) { } break; } case onUserEnter_866106000: { try { c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.IntroDisableUI(true)); if (!c.getPlayer().getMap().containsNPC(9390381)) { c.getPlayer().getMap().spawnNpc(9390381, new Point(89, 32)); } c.getSession().write(NPCPacket.setNPCSpecialAction(9390381, "summon")); c.getSession().write(UIPacket.getDirectionInfo(1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionStatus(true)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390381, "BeastTamerTut05"); Thread.sleep(6000); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866107000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } catch (InterruptedException e) { } break; } case onUserEnter_866105000: { c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390936), new Point(515, 77)); break; } case onUserEnter_866104000: { try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo(1, 300)); Thread.sleep(300); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390300, "BeastTamerTut04"); Thread.sleep(6000); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(866105000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } catch (InterruptedException e) { } break; } case onUserEnter_866103000: { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390937), new Point(515, 77)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9390935), new Point(278, 70)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.IntroDisableUI(true)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390300, "BeastTamerTut03"); break; } case onUserEnter_866100000: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.IntroDisableUI(true)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9390305, "BeastTamerTut01"); break; } case q59000_tuto: { try { c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(sendHint("Press #e#b[left],[right]#k#n to move around.", 150, 5)); Thread.sleep(5000); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1103005, "TotInfoBT"); MapleQuest.getInstance(28862).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(28862).forceComplete(c.getPlayer(), 0); c.getSession().write(UIPacket.getTopMsg("Earned Forever Single title!")); } catch (InterruptedException e) { } break; }*/ case Advanture_tuto33: { c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.getTopMsg("请击退红蜗牛王.")); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300815), new Point(0, 0)); break; } /* case Advanture_tuto04: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); // c.getSession().write(UIPacket.playMovie("adventurer.avi", true)); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(4000005); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(0)); break; } */ case root_camera: { if (c.getPlayer().getQuestStatus(30000) == 1) { NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1064026, "AbyssTut01"); } break; } case root_ereb00: { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); if (!c.getPlayer().getMap().containsNPC(1064026)) { c.getPlayer().getMap().spawnNpc(1064026, new Point(-113, 88)); } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1064026, "AbyssTut00"); break; } case enter_101072002: { c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1500004, null); break; } case enter_101073300: { c.getPlayer().getMap().resetFully(); if (c.getPlayer().getQuestStatus(32128) == 1) { MapleQuest.getInstance(32128).forceComplete(c.getPlayer(), 0); } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1500016, null); break; } case enter_101073201: { c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); if (!c.getPlayer().getMap().containsNPC(1500026)) { c.getPlayer().getMap().spawnNpc(1500026, new Point(-369, 245)); } if (!c.getPlayer().getMap().containsNPC(1500031)) { c.getPlayer().getMap().spawnNpc(1500031, new Point(55, 245)); } if (!c.getPlayer().getMap().containsNPC(1500032)) { c.getPlayer().getMap().spawnNpc(1500032, new Point(200, 245)); } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1500026, null); break; } case enter_101073110: { c.getPlayer().getMap().resetFully(); if (c.getPlayer().getQuestStatus(32126) == 1) { MapleQuest.getInstance(32126).forceComplete(c.getPlayer(), 0); } c.getSession().write(MaplePacketCreator.getClock(10 * 60)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1500019, null); break; } case enter_101073010: { c.getPlayer().getMap().resetFully(); if (c.getPlayer().getQuestStatus(32123) == 1) { MapleQuest.getInstance(32123).forceComplete(c.getPlayer(), 0); } c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-187, 245)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-187, 245)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-187, 245)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-187, 245)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-187, 245)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-53, 185)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-53, 185)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-53, 185)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-53, 185)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(3501006), new Point(-53, 185)); c.getSession().write(MaplePacketCreator.getClock(10 * 60)); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1500017, null); break; } case enter_101070000: { try { c.getSession().write(UIPacket.getTopMsg("The forest of fairies seems to materialize from nowhere as you exit the passage.")); Thread.sleep(2000); } catch (InterruptedException e) { } c.getSession().write(UIPacket.MapEff("temaD/enter/fairyAcademy")); break; } case evolvingDirection1: { try { MapleQuest.getInstance(1801).forceStart(c.getPlayer(), 9075005, null); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.MapEff("evolving/mapname")); Thread.sleep(4000); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9075005, "TutEvolving1"); break; } case evolvingDirection2: { try { MapleQuest.getInstance(1801).forceComplete(c.getPlayer(), 0); c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.MapEff("evolving/swoo1")); if (!c.getPlayer().getMap().containsNPC(9075004)) { c.getPlayer().getMap().spawnNpc(9075004, new Point(70, 136)); } Thread.sleep(14000); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9075004, "TutEvolving2"); break; } case enter_931060110: { c.getPlayer().saveLocation(SavedLocationType.fromString("TUTORIAL")); try { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 4, 9072200)); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 2)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1200)); Thread.sleep(1200); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 30)); Thread.sleep(30); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9072200, "enter_931060110"); } case enter_931060120: { c.getPlayer().saveLocation(SavedLocationType.fromString("TUTORIAL")); try { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 4, 9072200)); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 2)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1200)); Thread.sleep(1200); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 30)); Thread.sleep(30); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9072200, "enter_931060120"); } case rootabyssTakeItem: { break; } case cannon_tuto_direction: { showIntro(c, "Effect/Direction4.img/cannonshooter/Scene00"); showIntro(c, "Effect/Direction4.img/cannonshooter/out00"); break; } case cannon_tuto_direction1: { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroLock(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction4.img/effect/cannonshooter/balloon/0", 5000, 0, 0, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction4.img/effect/cannonshooter/balloon/1", 5000, 0, 0, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction4.img/effect/cannonshooter/balloon/2", 5000, 0, 0, 1, 0)); c.getSession().write(UIPacket.ShowWZEffect("Effect/Direction4.img/cannonshooter/face04")); c.getSession().write(UIPacket.ShowWZEffect("Effect/Direction4.img/cannonshooter/out01")); c.getSession().write(UIPacket.getDirectionInfo(1, 5000)); break; } case cannon_tuto_direction2: { showIntro(c, "Effect/Direction4.img/cannonshooter/Scene01"); showIntro(c, "Effect/Direction4.img/cannonshooter/out02"); break; } case shammos_Enter: { //nothing to go on inside the map if (c.getPlayer().getEventInstance() != null && c.getPlayer().getMapId() == (GameConstants.GMS ? 921120300 : 921120500)) { NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 2022006, null); } break; } case iceman_Enter: { //nothing to go on inside the map if (c.getPlayer().getEventInstance() != null && c.getPlayer().getMapId() == 932000300) { NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 2159020, null); } break; } case start_itemTake: { //nothing to go on inside the map final EventManager em = c.getChannelServer().getEventSM().getEventManager("OrbisPQ"); if (em != null && em.getProperty("pre").equals("0")) { NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 2013001, null); } break; } case PRaid_W_Enter: { c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_expPenalty", "0")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_ElapssedTimeAtField", "0")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_Point", "-1")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_Bonus", "-1")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_Total", "-1")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_Team", "")); c.getSession().write(MaplePacketCreator.sendPyramidEnergy("PRaid_IsRevive", "0")); c.getPlayer().writePoint("PRaid_Point", "-1"); c.getPlayer().writeStatus("Red_Stage", "1"); c.getPlayer().writeStatus("Blue_Stage", "1"); c.getPlayer().writeStatus("redTeamDamage", "0"); c.getPlayer().writeStatus("blueTeamDamage", "0"); break; } case jail: { if (!c.getPlayer().isIntern()) { c.getPlayer().getQuestNAdd(MapleQuest.getInstance(GameConstants.JAIL_TIME)).setCustomData(String.valueOf(System.currentTimeMillis())); final MapleQuestStatus stat = c.getPlayer().getQuestNAdd(MapleQuest.getInstance(GameConstants.JAIL_QUEST)); if (stat.getCustomData() != null) { final int seconds = Integer.parseInt(stat.getCustomData()); if (seconds > 0) { c.getPlayer().startMapTimeLimitTask(seconds, c.getChannelServer().getMapFactory().getMap(950000100)); } } } break; } case TD_neo_BossEnter: case findvioleta: { c.getPlayer().getMap().resetFully(); break; } case StageMsg_crack: if (c.getPlayer().getMapId() == 922010400) { //2nd stage MapleMapFactory mf = c.getChannelServer().getMapFactory(); int q = 0; for (int i = 0; i < 5; i++) { q += mf.getMap(922010401 + i).getAllMonstersThreadsafe().size(); } if (q > 0) { c.getPlayer().dropMessage(-1, "There are still " + q + " monsters remaining."); } } else if (c.getPlayer().getMapId() >= 922010401 && c.getPlayer().getMapId() <= 922010405) { if (c.getPlayer().getMap().getAllMonstersThreadsafe().size() > 0) { c.getPlayer().dropMessage(-1, "There are still some monsters remaining in this map."); } else { c.getPlayer().dropMessage(-1, "There are no monsters remaining in this map."); } } break; case q31102e: if (c.getPlayer().getQuestStatus(31102) == 1) { MapleQuest.getInstance(31102).forceComplete(c.getPlayer(), 2140000); } break; case q31103s: if (c.getPlayer().getQuestStatus(31103) == 0) { MapleQuest.getInstance(31103).forceComplete(c.getPlayer(), 2142003); } break; case cygnus_Minimap: c.getSession().write(UIPacket.TutInstructionalBalloon("Effect/OnUserEff.img/guideEffect/cygnusTutorial/0")); break; case check_q20833: if (c.getPlayer().getQuestStatus(20833) == 1) { MapleQuest.getInstance(20833).forceComplete(c.getPlayer(), 0); c.getSession().write(UIPacket.getTopMsg("Who's that on the right of the map?")); } break; case q2614M: if (c.getPlayer().getQuestStatus(2614) == 1) { MapleQuest.getInstance(2614).forceComplete(c.getPlayer(), 0); } break; case Resi_tutor20: c.getSession().write(UIPacket.MapEff("resistance/tutorialGuide")); break; case Resi_tutor30: c.getSession().write(UIPacket.TutInstructionalBalloon("Effect/OnUserEff.img/guideEffect/resistanceTutorial/userTalk")); break; case Resi_tutor40: NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 2159012, null); break; case Resi_tutor50: c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 2159006, null); break; case Resi_tutor70: showIntro(c, "Effect/Direction4.img/Resistance/TalkJ"); break; case prisonBreak_1stageEnter: case shammos_Start: case moonrabbit_takeawayitem: case TCMobrevive: case cygnus_ExpeditionEnter: case knights_Summon: case VanLeon_ExpeditionEnter: case Resi_tutor10: case Resi_tutor60: case Resi_tutor50_1: case sealGarden: case in_secretroom: case TD_MC_gasi2: case TD_MC_keycheck: case pepeking_effect: case userInBattleSquare: case summonSchiller: case VisitorleaveDirectionMode: case visitorPT_Enter: case VisitorCubePhase00_Enter: case visitor_ReviveMap: case PRaid_D_Enter: case PRaid_B_Enter: case PRaid_WinEnter: //handled by event case PRaid_FailEnter: //also case PRaid_Revive: //likely to subtract points or remove a life, but idc rly case metro_firstSetting: case blackSDI: case summonIceWall: case onSDI: case enterBlackfrog: case Sky_Quest: //forest that disappeared 240030102 case dollCave00: case dollCave01: case dollCave02: case shammos_Base: case shammos_Result: case Sky_BossEnter: case Sky_GateMapEnter: case balog_dateSet: case balog_buff: case outCase: case Sky_StageEnter: case dojang_QcheckSet: case evanTogether: case merStandAlone: case EntereurelTW: case aranTutorAlone: case evanAlone: { //no idea c.getSession().write(MaplePacketCreator.enableActions()); break; } case merOutStandAlone: { if (c.getPlayer().getQuestStatus(24001) == 1) { MapleQuest.getInstance(24001).forceComplete(c.getPlayer(), 0); c.getPlayer().dropMessage(5, "Quest complete."); } break; } case np_tuto_0_5: { //NPCConversationManager cmnp_tuto_0_5= new NPCConversationManager(c, 0, 0, (byte)0, null); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(MaplePacketCreator.showEffect("phantom/back")); c.getSession().write(UIPacket.getDirectionInfo(3, 4)); c.getSession().write(MaplePacketCreator.showEffect("newPirate/Shuttle/0")); try { Thread.sleep(6000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } c.getSession().write(MaplePacketCreator.showEffect("phantom/back")); c.getSession().write(MaplePacketCreator.showEffect("newPirate/TimeTravel/0")); try { Thread.sleep(5000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } c.getSession().write(MaplePacketCreator.showEffect("newPirate/text1")); try { Thread.sleep(2000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); try { Thread.sleep(1000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); NPCScriptManager.getInstance().start(c, 9270084, "np_tuto_0_5"); } }, 2000); break; } case np_tuto_0_8: { c.getSession().write(UIPacket.IntroEnableUI(1)); if (!c.getPlayer().getMap().containsNPC(9270084)) { c.getPlayer().getMap().spawnNpc(9270084, new Point(146, -120)); } c.getSession().write(UIPacket.getDirectionInfo(3, 2)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo("Effect/DirectionNewPirate.img/effect/tuto/pirateAttack", 2000, 0, -100, 1, 0)); try { Thread.sleep(1000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/17", 2000, 0, -100, 1, 0)); try { Thread.sleep(3000); } catch (InterruptedException e) { FileoutputUtil.log("" + e.toString()); } MapleMap mapto = c.getChannelServer().getMapFactory().getMap(552000050); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } }, 5000); break; } case merTutorSleep00: { showIntro(c, "Effect/Direction5.img/mersedesTutorial/Scene0"); final Map<Skill, SkillEntry> sa = new HashMap<>(); sa.put(SkillFactory.getSkill(20021181), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20021166), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20020109), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(20021110), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(20020111), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(20020112), new SkillEntry((byte) 1, (byte) 1, -1)); c.getPlayer().changeSkillsLevel(sa); break; } case merTutorSleep01: { while (c.getPlayer().getLevel() < 10) { c.getPlayer().levelUp(); } c.getPlayer().changeJob((short) 2300, true); showIntro(c, "Effect/Direction5.img/mersedesTutorial/Scene1"); break; } case merTutorSleep02: { c.getSession().write(UIPacket.IntroEnableUI(0)); break; } case merTutorDrecotion00: { c.getSession().write(UIPacket.playMovie("Mercedes.avi", true)); final Map<Skill, SkillEntry> sa = new HashMap<>(); sa.put(SkillFactory.getSkill(20021181), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(20021166), new SkillEntry((byte) 1, (byte) 1, -1)); c.getPlayer().changeSkillsLevel(sa); try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); Thread.sleep(1500); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 4)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); //npctalk //npctalk Thread.sleep(1800); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/0", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 3000)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); Thread.sleep(3000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/1", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/2", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/3", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/4", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/5", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(MaplePacketCreator.enableActions()); } catch (Exception e) { } c.getPlayer().getMap().resetFully(); c.getPlayer().setDirection(0); break; } case merTutorDrecotion10: { try { Thread.sleep(4000); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/6", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); Thread.sleep(4000); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/8", 2000, 0, -100, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.IntroEnableUI(0)); } catch (Exception e) { } c.getPlayer().setDirection(0); break; } case merTutorDrecotion20: { //TODO 双弩 引导修复到去睡觉 try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/9", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); c.getSession().write(UIPacket.getDirectionStatus(true)); Thread.sleep(4000); c.getSession().write(UIPacket.getDirectionInfo(3, 1)); Thread.sleep(1000); c.getSession().write(UIPacket.IntroLock(true)); final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(910150005); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } catch (Exception e) { } c.getPlayer().setDirection(0); break; } case ds_tuto_ani: { c.getSession().write(UIPacket.playMovie("DemonSlayer1.avi", true)); break; } case Resi_tutor80: case startEreb: case mirrorCave: case babyPigMap: case evanleaveD: { c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); break; } case undomorphdarco: case reundodraco: { c.getPlayer().cancelEffect(MapleItemInformationProvider.getInstance().getItemEffect(2210016), false, -1); break; } case goAdventure: { showIntro(c, "Effect/Direction3.img/goAdventure/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; } case crash_Dragon: showIntro(c, "Effect/Direction4.img/crash/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; case getDragonEgg: showIntro(c, "Effect/Direction4.img/getDragonEgg/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; case meetWithDragon: showIntro(c, "Effect/Direction4.img/meetWithDragon/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; case PromiseDragon: showIntro(c, "Effect/Direction4.img/PromiseDragon/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; case evanPromotion: switch (c.getPlayer().getMapId()) { case 900090000: data = "Effect/Direction4.img/promotion/Scene0" + (c.getPlayer().getGender() == 0 ? "0" : "1"); break; case 900090001: data = "Effect/Direction4.img/promotion/Scene1"; break; case 900090002: data = "Effect/Direction4.img/promotion/Scene2" + (c.getPlayer().getGender() == 0 ? "0" : "1"); break; case 900090003: data = "Effect/Direction4.img/promotion/Scene3"; break; case 900090004: c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(900010000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); return; } showIntro(c, data); break; case mPark_stageEff: c.getPlayer().dropMessage(-1, "要进入下一个阶段,必须消灭所有的怪物!"); switch ((c.getPlayer().getMapId() % 1000) / 100) { case 0: case 1: case 2: case 3: c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/stage")); c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/number/" + (((c.getPlayer().getMapId() % 1000) / 100) + 1))); break; case 4: if (c.getPlayer().getMapId() / 1000000 == 952) { c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/final")); } else { c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/stage")); c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/number/5")); } break; case 5: c.getSession().write(UIPacket.MapEff("monsterPark/stageEff/final")); break; } break; case TD_MC_title: { c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); c.getSession().write(UIPacket.MapEff("temaD/enter/mushCatle")); break; } case TD_NC_title: { switch ((c.getPlayer().getMapId() / 100) % 10) { case 0: c.getSession().write(UIPacket.MapEff("temaD/enter/teraForest")); break; case 1: case 2: case 3: case 4: case 5: case 6: c.getSession().write(UIPacket.MapEff("temaD/enter/neoCity" + ((c.getPlayer().getMapId() / 100) % 10))); break; } break; } case explorationPoint: { if (c.getPlayer().getMapId() == 104000000) { c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/104000000", 12)); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); } } case enter_masRoom: { if (c.getPlayer().getQuestStatus(23213) == 1 && c.getPlayer().getQuestStatus(23214) != 1 && c.getPlayer().getQuestStatus(23214) != 2) {; MapleQuest.getInstance(23213).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(23214).forceStart(c.getPlayer(), 0, "1"); final MapleMap mapp = c.getChannelServer().getMapFactory().getMap(931050120); //exit Map c.getPlayer().changeMap(mapp, mapp.getPortal(0)); } break; } case enter_23214: { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9001038), new Point(816, -14)); break; } case dubl2Tuto0: { try { c.getPlayer().getMap().resetFully(); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getTopMsg("某个下雨天")); c.getSession().write(UIPacket.getTopMsg("飞花园深处.")); c.getSession().write(MaplePacketCreator.DublStart(false)); c.getSession().write(MaplePacketCreator.DublStart(true)); Thread.sleep(4000); } catch (InterruptedException e) { } c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(1, 3000)); MapTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 2)); } }, 20000); MapTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(MaplePacketCreator.DublStart(false)); c.getSession().write(UIPacket.IntroDisableUI(false)); } }, 7000); c.getPlayer().setDirection(0); break; } case dubl2Tuto10: { c.getSession().write(UIPacket.getTopMsg("某个下雨天")); c.getSession().write(UIPacket.getTopMsg("飞花园深处.")); c.getPlayer().setDirection(0); break; } case dublTuto21: { c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300522), new Point(-578, 152)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300521), new Point(-358, 152)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300522), new Point(-138, 152)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300522), new Point(-82, 152)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300522), new Point(-302, 152)); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300522), new Point(-522, 152)); break; } case dublTuto23: { c.getPlayer().getMap().killAllMonsters(false); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300523), new Point(-283, 152)); break; } case np_tuto_0_0_before: { try { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(MaplePacketCreator.environmentChange("newPirate/text0", 12)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 9500)); Thread.sleep(100); } catch (InterruptedException ex) { } c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroEnableUI(0)); c.getPlayer().changeMap(552000010, 0); c.getPlayer().setDirection(0); break; } case np_tuto_0_0: { try { c.getPlayer().getMap().resetFully(); //c.getSession().write(NPCPacket.getCutSceneSkip()); Thread.sleep(8000); } catch (InterruptedException e) { } c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); try { Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/0", 0, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9270083, "np_tuto_0_1"); break; } case map_913070000: { try { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getTopMsg("Mr.Limbert's General Store")); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 500)); Thread.sleep(500); c.getSession().write(UIPacket.getTopMsg("Month 3, Day 4")); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/0", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionFacialExpression(6, 10000)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/1", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/2", 3000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionFacialExpression(4, 8000)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 3000)); Thread.sleep(3000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/3", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionFacialExpression(6, 2000)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); Thread.sleep(500); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 9075005, "tuto001"); break; } case map_913070001: { c.getSession().write(UIPacket.getTopMsg("Mr.Limbert's General Store")); c.getSession().write(UIPacket.getTopMsg("Month 3, Day 4")); break; } case map_913070002: { c.getSession().write(UIPacket.getTopMsg("Mr.Limbert's General Store")); c.getSession().write(UIPacket.getTopMsg("Month 3, Day 8")); break; } case map_913070020: { c.getSession().write(UIPacket.getTopMsg("Mr.Limbert's General Store")); //bigby spawn is not gms like yet c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9001051), new Point(185, 65)); c.getSession().write(MaplePacketCreator.getClock(5 * 60)); MapTimer.getInstance().schedule(new Runnable() { @Override public void run() { if (c.getPlayer().getMapId() == 913070020) { c.getPlayer().changeMap(913070003, 0); } } }, 5 * 60 * 1000); break; } case map_913070004: { try { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getTopMsg("Mr.Limbert's General Store")); c.getSession().write(UIPacket.getTopMsg("Month 3, Day 11")); Thread.sleep(500); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 2)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 1)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/5", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 2)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 500)); Thread.sleep(500); c.getSession().write(UIPacket.getDirectionInfo((byte) 3, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/6", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/4", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/7", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/8", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 1000)); Thread.sleep(1000); c.getSession().write(UIPacket.getTopMsg("Someone suspicious is in the back yard...")); } catch (InterruptedException ex) { } c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(MaplePacketCreator.enableActions()); break; } case map_913070050: { try { MapleQuest.getInstance(20034).forceStart(c.getPlayer(), 1106000, null); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getTopMsg("General Store Yard")); c.getSession().write(MaplePacketCreator.getClock(10 * 60)); MapTimer.getInstance().schedule(new Runnable() { @Override public void run() { if (c.getPlayer().getMapId() >= 913070050 && c.getPlayer().getMapId() < 913070070) { c.getPlayer().changeMap(913070004, 0); } } }, 10 * 60 * 1000); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction7.img/effect/tuto/step0/4", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo((byte) 1, 2000)); Thread.sleep(2000); c.getSession().write(UIPacket.getDirectionFacialExpression(6, 10000)); } catch (InterruptedException ex) { } NPCScriptManager.getInstance().dispose(c); c.removeClickedNPC(); NPCScriptManager.getInstance().start(c, 1106000, "tuto004"); break; } case mihail_direc: { try { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroLock(true)); showIntro(c, "Effect/Direction7.img/mikhail/1st_Job"); while (c.getPlayer().getLevel() < 10) { c.getPlayer().levelUp(); } c.getPlayer().changeJob((short) 5100, true); Thread.sleep(4000); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getPlayer().changeMap(130000000, 0); c.getPlayer().changeChannel(c.getChannel()); } catch (InterruptedException ex) { } break; } case go10000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/10000", 12)); break; case go20000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/20000", 12)); if (c.getPlayer().getQuestStatus(32200) == 0) { MapleQuest.getInstance(32200).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(32200).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(32201).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(32201).forceComplete(c.getPlayer(), 0); MapleQuest.getInstance(32202).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(32202).forceComplete(c.getPlayer(), 0); } break; case go30000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/30000", 12)); break; case go40000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/40000", 12)); break; case go50000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/50000", 12)); break; case go1000000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1000000", 12)); break; case go1010000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1010000", 12)); break; case go1010100: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1010100", 12)); break; case go1010200: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1010200", 12)); break; case go1010300: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1010300", 12)); break; case go1010400: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1010400", 12)); break; case go1020000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/1020000", 12)); c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); break; case go2000000: c.getSession().write(MaplePacketCreator.environmentChange("maplemap/enter/2000000", 12)); break; case enter_edelstein: case patrty6_1stIn: case standbyAzwan: case angelic_tuto0://for now TODO real tut if (c.getPlayer().getJob() == 6001) { while (c.getPlayer().getLevel() < 10) { c.getPlayer().levelUp(); } c.getPlayer().changeJob((short) 6500, true); c.getPlayer().gainItem(1142495, 1, "");//Nova Contractor MapleMap mapto = c.getChannelServer().getMapFactory().getMap(400000000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } break; case PTjob3M2: { if (c.getPlayer().getQuestStatus(25111) == 1) { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); } }, 2500); MapleQuest.getInstance(25111).forceComplete(c.getPlayer(), 0); try { Thread.sleep(3000); } catch (InterruptedException e) { } double timeOut = 0; while (true) { if (timeOut > 10000) { break; } if (c.getPlayer().getJob() == 2410) { c.getSession().write(UIPacket.IntroEnableUI(0)); c.removeClickedNPC(); NPCScriptManager.getInstance().dispose(c); c.getSession().write(MaplePacketCreator.enableActions()); MapleQuest.getInstance(29969).forceComplete(c.getPlayer(), 0); try { Thread.sleep(2000); } catch (InterruptedException e) { } c.getPlayer().changeJob((short) 2411, true); try { Thread.sleep(2000); } catch (InterruptedException e) { } c.getSession().write(MaplePacketCreator.showEffect("phantom/suu")); c.removeClickedNPC(); NPCScriptManager.getInstance().dispose(c); c.getSession().write(MaplePacketCreator.enableActions()); break; } try { Thread.sleep(500); } catch (InterruptedException e) { } timeOut += 100; } } else { c.getPlayer().dropMessage(5, "Or move out and proof your strength!"); } break; } case PTjob4M: { if (c.getPlayer().getQuestStatus(25120) == 1) {// && c.getPlayer().getQuestStatus(25101)!=1 && c.getPlayer().getQuestStatus(25101)!=2) MapleQuest.getInstance(25120).forceComplete(c.getPlayer(), 0); } else { c.getPlayer().dropMessage(5, "Or move out and proof your strength!"); } break; } case PTjob4M_1: { if (c.getPlayer().getJob() == 2411) { c.getPlayer().getMap().resetFully(); c.getPlayer().forceCompleteQuest(25122); if (!c.getPlayer().getMap().containsNPC(2159307)) { c.getPlayer().getMap().spawnNpc(1403002, new Point(302, 182)); } //c.getPlayer().forceCompleteQuest(29970); //NPCScriptManager.getInstance().start(c, 1403002); } else { c.getPlayer().dropMessage(5, "Or move out and proof your strength!"); } break; } case PTjob4M2: { //c.getSession().write(UIPacket.getDirectionInfo(4, 2159310)); if (c.getPlayer().getQuestStatus(25122) == 2 && c.getPlayer().getJob() == 2411) { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text6")); } }, 2500); ScheduledFuture<?> schedule; schedule = EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text5")); } }, 4500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.IntroEnableUI(0)); c.removeClickedNPC(); NPCScriptManager.getInstance().dispose(c); c.getSession().write(MaplePacketCreator.enableActions()); } }, 6500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getPlayer().dropMessage(-1, "Come inside me, Phantom!"); } }, 8500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { double timeOut = 0; while (true) { if (timeOut > 20000) { break; } if (c.getPlayer().getJob() == 2411 && c.getPlayer().getPosition().y == -30) { c.getPlayer().changeJob((short) 2412, true); try { Thread.sleep(1000); } catch (InterruptedException e) { } c.getSession().write(MaplePacketCreator.showEffect("phantom/darkphantom")); break; } try { Thread.sleep(500); } catch (InterruptedException ex) { break; } timeOut += 100; } } }, 9000); } else { c.getPlayer().dropMessage(5, "Or move out, and proof your strength!"); } break; } case q53244_dun_in: { c.getSession().write(UIPacket.IntroEnableUI(0)); try { Thread.sleep(1500); } catch (InterruptedException e) { } c.getPlayer().getMap().resetFully(); c.getPlayer().dropMessage(-1, "Father, There they are. All located in the planets!"); if (!c.getPlayer().getMap().containsNPC(9270084)) { c.getPlayer().getMap().spawnNpc(9270084, new Point(-103, 55)); } if (!c.getPlayer().getMap().containsNPC(9270090)) { c.getPlayer().getMap().spawnNpc(9270090, new Point(65, 55)); } c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/11", 2000, 0, 1, -100, 1)); for (int i = 0; i < 10; i++) { c.getSession().write(UIPacket.getDirectionInfo(3, 5)); try { Thread.sleep(700); } catch (InterruptedException e) { } } c.getSession().write(UIPacket.getDirectionInfo(3, 2)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getPlayer().dropMessage(-1, "Heh heh heh, nguoi da cham soc no tot that day!"); try { Thread.sleep(200); } catch (InterruptedException e) { } c.getSession().write(UIPacket.getDirectionInfo(3, 2)); try { Thread.sleep(200); } catch (InterruptedException e) { } c.getSession().write(UIPacket.getDirectionInfo(3, 0)); //c.getSession().write(UIPacket.getDirectionInfo(4, 1403002)); NPCScriptManager.getInstance().start(c, 9270090, "q53244_dun_in"); } }, 1000); break; } case q53251_enter: { c.getSession().write(UIPacket.IntroEnableUI(1)); try { Thread.sleep(1500); } catch (InterruptedException e) { } c.getPlayer().getMap().resetFully(); if (!c.getPlayer().getMap().containsNPC(9270092)) { c.getPlayer().getMap().spawnNpc(9270092, new Point(352, 55)); } c.getSession().write(UIPacket.getDirectionInfo(3, 2)); try { Thread.sleep(3000); } catch (InterruptedException e) { } EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { NPCScriptManager.getInstance().start(c, 9270092, "q53251_enter"); } }, 1000); //final MapleMap mapmap = c.getChannelServer().getMapFactory().getMap(552000074); break; } case ds_tuto_ill0: { c.getSession().write(UIPacket.getDirectionInfo(1, 6300)); showIntro(c, "Effect/Direction6.img/DemonTutorial/SceneLogo"); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(927000000); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } }, 6300); //wtf break; } case ds_tuto_home_before: { c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(1, 90)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text11")); c.getSession().write(UIPacket.getDirectionInfo(1, 4000)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { showIntro(c, "Effect/Direction6.img/DemonTutorial/Scene2"); } }, 1000); break; } /*case ds_tuto_1_0: { c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(4, 2159310)); NPCScriptManager.getInstance().start(c, 2159310, null); } }, 1000); break; }*/ case ds_tuto_4_0: { //c.getSession().write(UIPacket.IntroDisableUI(true)); //c.getSession().write(UIPacket.IntroEnableUI(1)); //c.getSession().write(UIPacket.getDirectionStatus(true)); //c.getSession().write(UIPacket.getDirectionInfo(3, 0)); //c.getSession().write(UIPacket.getDirectionInfo(4, 2159344)); NPCScriptManager.getInstance().start(c, 2159344, null); break; } case cannon_tuto_01: { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getPlayer().changeSingleSkillLevel(SkillFactory.getSkill(110), (byte) 1, (byte) 1); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(4, 1096000)); NPCScriptManager.getInstance().dispose(c); NPCScriptManager.getInstance().start(c, 1096000, null); break; } case ds_tuto_5_0: { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(4, 2159314)); NPCScriptManager.getInstance().dispose(c); NPCScriptManager.getInstance().start(c, 2159314, null); break; } case ds_tuto_3_0: { c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text12")); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(4, 2159311)); NPCScriptManager.getInstance().dispose(c); NPCScriptManager.getInstance().start(c, 2159311, null); } }, 1000); break; } case ds_tuto_3_1: { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionStatus(true)); if (!c.getPlayer().getMap().containsNPC(2159340)) { c.getPlayer().getMap().spawnNpc(2159340, new Point(175, 0)); c.getPlayer().getMap().spawnNpc(2159341, new Point(300, 0)); c.getPlayer().getMap().spawnNpc(2159342, new Point(600, 0)); } c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/tuto/balloonMsg2/0", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/tuto/balloonMsg1/3", 2000, 0, -100, 1, 0)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(UIPacket.getDirectionInfo(4, 2159340)); NPCScriptManager.getInstance().dispose(c); NPCScriptManager.getInstance().start(c, 2159340, null); } }, 1000); break; } case ds_tuto_2_before: { c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text13")); c.getSession().write(UIPacket.getDirectionInfo(1, 500)); } }, 1000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text14")); c.getSession().write(UIPacket.getDirectionInfo(1, 4000)); } }, 1500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(927000020); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); c.getSession().write(UIPacket.IntroEnableUI(0)); MapleQuest.getInstance(23204).forceStart(c.getPlayer(), 0, null); MapleQuest.getInstance(23205).forceComplete(c.getPlayer(), 0); final Map<Skill, SkillEntry> sa = new HashMap<>(); sa.put(SkillFactory.getSkill(30011170), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(30011169), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(30011168), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(30011167), new SkillEntry((byte) 1, (byte) 1, -1)); sa.put(SkillFactory.getSkill(30010166), new SkillEntry((byte) 1, (byte) 1, -1)); c.getPlayer().changeSkillsLevel(sa); c.getPlayer().changeKeybinding(44, (byte) 1, 30010166); c.getPlayer().changeKeybinding(45, (byte) 1, 30011167); c.getPlayer().changeKeybinding(46, (byte) 1, 30011168); c.getPlayer().changeKeybinding(47, (byte) 1, 30011169); c.getPlayer().changeKeybinding(48, (byte) 1, 30011170); c.getSession().write(MaplePacketCreator.getKeymap(c.getPlayer())); } }, 5500); break; } case ds_tuto_1_before: { c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionInfo(1, 30)); c.getSession().write(UIPacket.getDirectionStatus(true)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 0)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text8")); c.getSession().write(UIPacket.getDirectionInfo(1, 500)); } }, 1000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text9")); c.getSession().write(UIPacket.getDirectionInfo(1, 3000)); } }, 1500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(927000010); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); } }, 4500); break; } case ds_tuto_2_prep: { if (!c.getPlayer().getMap().containsNPC(2159309)) { c.getPlayer().getMap().spawnNpc(2159309, new Point(550, 50)); c.getPlayer().changeKeybinding(44, (byte) 1, 30010166); c.getPlayer().changeKeybinding(45, (byte) 1, 30011167); c.getPlayer().changeKeybinding(46, (byte) 1, 30011168); c.getPlayer().changeKeybinding(47, (byte) 1, 30011169); c.getPlayer().changeKeybinding(48, (byte) 1, 30011170); c.getSession().write(MaplePacketCreator.getKeymap(c.getPlayer())); break; } } case goArcher: { showIntro(c, "Effect/Direction3.img/archer/Scene" + (c.getPlayer().getQuestStatus(32214) == 2 ? "0" : "1")); break; } case goPirate: { showIntro(c, "Effect/Direction3.img/pirate/Scene" + (c.getPlayer().getQuestStatus(32214) == 2 ? "0" : "1")); break; } case goRogue: { showIntro(c, "Effect/Direction3.img/rogue/Scene" + (c.getPlayer().getQuestStatus(32214) == 2 ? "0" : "1")); break; } case goMagician: { showIntro(c, "Effect/Direction3.img/magician/Scene" + (c.getPlayer().getQuestStatus(32214) == 2 ? "0" : "1")); break; } case goSwordman: { showIntro(c, "Effect/Direction3.img/swordman/Scene" + (c.getPlayer().getQuestStatus(32214) == 2 ? "0" : "1")); break; } case goLith: { showIntro(c, "Effect/Direction3.img/goLith/Scene" + (c.getPlayer().getGender() == 0 ? "0" : "1")); break; } case TD_MC_Openning: { showIntro(c, "Effect/Direction2.img/open"); break; } case TD_MC_gasi: { showIntro(c, "Effect/Direction2.img/gasi"); break; } case aranDirection: { switch (c.getPlayer().getMapId()) { case 914090010: data = "Effect/Direction1.img/aranTutorial/Scene0"; break; case 914090011: data = "Effect/Direction1.img/aranTutorial/Scene1" + (c.getPlayer().getGender() == 0 ? "0" : "1"); break; case 914090012: data = "Effect/Direction1.img/aranTutorial/Scene2" + (c.getPlayer().getGender() == 0 ? "0" : "1"); break; case 914090013: data = "Effect/Direction1.img/aranTutorial/Scene3"; break; case 914090100: data = "Effect/Direction1.img/aranTutorial/HandedPoleArm" + (c.getPlayer().getGender() == 0 ? "0" : "1"); break; case 914090200: data = "Effect/Direction1.img/aranTutorial/Maha"; break; } showIntro(c, data); break; } case iceCave: { final Map<Skill, SkillEntry> sa = new HashMap<>(); sa.put(SkillFactory.getSkill(20000014), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20000015), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20000016), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20000017), new SkillEntry((byte) -1, (byte) 0, -1)); sa.put(SkillFactory.getSkill(20000018), new SkillEntry((byte) -1, (byte) 0, -1)); c.getPlayer().changeSkillsLevel(sa); c.getSession().write(UIPacket.ShowWZEffect("Effect/Direction1.img/aranTutorial/ClickLirin")); c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); c.getSession().write(MaplePacketCreator.enableActions()); break; } case rienArrow: { if (c.getPlayer().getInfoQuest(21019).equals("miss=o;helper=clear")) { c.getSession().write(UIPacket.TutInstructionalBalloon("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow3")); } break; } case rien: { if (c.getPlayer().getQuestStatus(21101) == 2 && c.getPlayer().getInfoQuest(21019).equals("miss=o;arr=o;helper=clear")) { // c.getPlayer().updateInfoQuest(21019, "miss=o;arr=o;ck=1;helper=clear"); } c.getSession().write(UIPacket.IntroDisableUI(false)); c.getSession().write(UIPacket.IntroLock(false)); break; } case check_count: { if (c.getPlayer().getMapId() == 950101010 && (!c.getPlayer().haveItem(4001433, 20) || c.getPlayer().getLevel() < 50)) { //ravana Map final MapleMap mapp = c.getChannelServer().getMapFactory().getMap(950101100); //exit Map c.getPlayer().changeMap(mapp, mapp.getPortal(0)); } break; } case magnus_enter_HP: { if (c.getPlayer().getMapId() >= 401060100 && c.getPlayer().getMapId() < 401060100) { final MapleMonster shammos = MapleLifeFactory.getMonster(8880000); if (c.getPlayer().getEventInstance() != null) { int averageLevel = 0, size = 0; for (MapleCharacter pl : c.getPlayer().getEventInstance().getPlayers()) { averageLevel += pl.getLevel(); size++; } if (size <= 0) { return; } averageLevel /= size; shammos.changeLevel(averageLevel); c.getPlayer().getEventInstance().registerMonster(shammos); if (c.getPlayer().getEventInstance().getProperty("HP") == null) { c.getPlayer().getEventInstance().setProperty("HP", averageLevel + "000"); } shammos.setHp(Long.parseLong(c.getPlayer().getEventInstance().getProperty("HP"))); } c.getPlayer().getMap().spawnMonsterWithEffectBelow(shammos, new Point(c.getPlayer().getMap().getPortal(0).getPosition()), 12); shammos.switchController(c.getPlayer(), false); c.getSession().write(MobPacket.getNodeProperties(shammos, c.getPlayer().getMap())); } break; } case azwan_stageEff: { // c.getSession().write(UIPacket.getTopMsg("Remove all the monsters in the field need to be able to move to the next stage.")); switch ((c.getPlayer().getMapId() % 1000) / 100) { case 1: case 2: case 3: c.getSession().write(MaplePacketCreator.showEffect("aswan/stageEff/stage")); c.getSession().write(MaplePacketCreator.showEffect("aswan/stageEff/number/" + (((c.getPlayer().getMapId() % 1000) / 100)))); break; } synchronized (MapScriptMethods.class) { for (MapleMapObject mon : c.getPlayer().getMap().getAllMonster()) { MapleMonster mob = (MapleMonster) mon; if (mob.getEventInstance() == null) { c.getPlayer().getEventInstance().registerMonster(mob); } } } break; } case Massacre_result: { //clear, give exp, etc. //if (c.getPlayer().getPyramidSubway() == null) { c.getSession().write(MaplePacketCreator.showEffect("killing/fail")); //} else { // c.getSession().write(MaplePacketCreator.showEffect("killing/clear")); //} //left blank because pyramidsubway handles this. break; } case hayatoJobChange: { c.getSession().write(UIPacket.playMovie("JPKanna.avi", true)); while (c.getPlayer().getLevel() < 10) { c.getSession().write(MaplePacketCreator.showEffect("JPKanna/text0")); c.getSession().write(MaplePacketCreator.showEffect("JPKanna/text1")); c.getSession().write(MaplePacketCreator.showEffect("JPKanna/text2")); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().levelUp(); c.getPlayer().setExp(0); //c.getPlayer().changeJob((short) 4200); if (c.getPlayer().getQuestStatus(28862) == 1) { MapleQuest.getInstance(28862).forceComplete(c.getPlayer(), 0); } } } /*case kenjiTutoDirection: { c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.IntroEnableUI(1)); c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(MaplePacketCreator.showEffect("JPKenji/text0")); c.getSession().write(UIPacket.getDirectionInfo(1, 7000)); }*/ default: { NPCScriptManager.getInstance().onUserEnter(c, scriptName); //MapScriptManager.getInstance().getMapScript(c, scriptName, false); return; // FileoutputUtil.log("Unhandled script : " + scriptName + ", type : onUserEnter - MAPID " + c.getPlayer().getMapId()); // FileoutputUtil.log(FileoutputUtil.ScriptEx_Log, "Unhandled script : " + scriptName + ", type : onUserEnter - MAPID " + c.getPlayer().getMapId()); // break; } } if (c.getPlayer().isShowPacket()) { c.getPlayer().dropMessage(5, "開始源碼自建地圖onUserEnter腳本:" + scriptName); System.err.println("開始源碼自建地圖onUserEnter腳本:" + scriptName); } } private static int getTiming(int ids) { if (ids <= 5) { return 5; } else if (ids >= 7 && ids <= 11) { return 6; } else if (ids >= 13 && ids <= 17) { return 7; } else if (ids >= 19 && ids <= 23) { return 8; } else if (ids >= 25 && ids <= 29) { return 9; } else if (ids >= 31 && ids <= 35) { return 10; } else if (ids >= 37 && ids <= 38) { return 15; } return 0; } private static int getDojoStageDec(int ids) { if (ids <= 5) { return 0; } else if (ids >= 7 && ids <= 11) { return 1; } else if (ids >= 13 && ids <= 17) { return 2; } else if (ids >= 19 && ids <= 23) { return 3; } else if (ids >= 25 && ids <= 29) { return 4; } else if (ids >= 31 && ids <= 35) { return 5; } else if (ids >= 37 && ids <= 38) { return 6; } return 0; } private static void showIntro(final MapleClient c, final String data) { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.IntroLock(true)); c.getSession().write(UIPacket.ShowWZEffect(data)); } private static void handlePinkBeanStart(MapleClient c) { final MapleMap map = c.getPlayer().getMap(); map.resetFully(); if (!map.containsNPC(2141000)) { map.spawnNpc(2141000, new Point(-190, -42)); } } private static void reloadWitchTower(MapleClient c) { final MapleMap map = c.getPlayer().getMap(); map.killAllMonsters(false); final int level = c.getPlayer().getLevel(); int mob; if (level <= 10) { mob = 9300367; } else if (level <= 20) { mob = 9300368; } else if (level <= 30) { mob = 9300369; } else if (level <= 40) { mob = 9300370; } else if (level <= 50) { mob = 9300371; } else if (level <= 60) { mob = 9300372; } else if (level <= 70) { mob = 9300373; } else if (level <= 80) { mob = 9300374; } else if (level <= 90) { mob = 9300375; } else if (level <= 100) { mob = 9300376; } else { mob = 9300377; } MapleMonster theMob = MapleLifeFactory.getMonster(mob); OverrideMonsterStats oms = new OverrideMonsterStats(); oms.setOMp(theMob.getMobMaxMp()); oms.setOExp(theMob.getMobExp()); oms.setOHp((int) (long) Math.ceil(theMob.getMobMaxHp() * (level / 5.0))); //10k to 4m theMob.setOverrideStats(oms); map.spawnMonsterOnGroundBelow(theMob, witchTowerPos); } public static void startDirectionInfo(MapleCharacter chr, boolean start) { final MapleClient c = chr.getClient(); DirectionInfo di = chr.getMap().getDirectionInfo(start ? 0 : chr.getDirection()); if (di != null && di.eventQ.size() > 0) { if (start) { c.getSession().write(UIPacket.IntroDisableUI(true)); c.getSession().write(UIPacket.getDirectionInfo(3, 4)); } else { for (String s : di.eventQ) { switch (directionInfo.fromString(s)) { case merTutorDrecotion01: //direction info: 1 is probably the time c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/0", 2000, 0, -100, 1, 0)); break; case merTutorDrecotion02: c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/1", 2000, 0, -100, 1, 0)); break; case merTutorDrecotion03: c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/2", 2000, 0, -100, 1, 0)); break; case merTutorDrecotion04: c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/3", 2000, 0, -100, 1, 0)); break; case merTutorDrecotion05: c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/4", 2000, 0, -100, 1, 0)); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/5", 2000, 0, -100, 1, 0)); } }, 2000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.IntroEnableUI(0)); c.getSession().write(MaplePacketCreator.enableActions()); } }, 4000); break; case merTutorDrecotion12: c.getSession().write(UIPacket.getDirectionInfo(3, 2)); c.getSession().write(UIPacket.getDirectionStatus(true)); c.getSession().write(UIPacket.getDirectionInfo("Effect/Direction5.img/effect/mercedesInIce/merBalloon/8", 2000, 0, -100, 1, 0)); c.getSession().write(UIPacket.IntroEnableUI(0)); break; case merTutorDrecotion21: c.getSession().write(UIPacket.getDirectionInfo(3, 1)); c.getSession().write(UIPacket.getDirectionStatus(true)); MapleMap mapto = c.getChannelServer().getMapFactory().getMap(910150005); c.getPlayer().changeMap(mapto, mapto.getPortal(0)); break; case ds_tuto_0_2: c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text1")); break; case ds_tuto_0_1: c.getSession().write(UIPacket.getDirectionInfo(3, 2)); break; case ds_tuto_0_3: c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text2")); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(1, 4000)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text3")); } }, 2000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(1, 500)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text4")); } }, 6000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(1, 4000)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text5")); } }, 6500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(1, 500)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text6")); } }, 10500); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(1, 4000)); c.getSession().write(MaplePacketCreator.showEffect("demonSlayer/text7")); } }, 11000); EventTimer.getInstance().schedule(new Runnable() { @Override public void run() { c.getSession().write(UIPacket.getDirectionInfo(4, 2159307)); NPCScriptManager.getInstance().dispose(c); NPCScriptManager.getInstance().start(c, 2159307, null); } }, 15000); break; } } } c.getSession().write(UIPacket.getDirectionInfo(1, 2000)); chr.setDirection(chr.getDirection() + 1); if (chr.getMap().getDirectionInfo(chr.getDirection()) == null) { chr.setDirection(-1); } } else if (start) { switch (chr.getMapId()) { //hack case 931050300: while (chr.getLevel() < 10) { chr.levelUp(); } final MapleMap mapto = c.getChannelServer().getMapFactory().getMap(931050000); chr.changeMap(mapto, mapto.getPortal(0)); break; } } } }