// TMW2 scripts. // Author: // Jesusalva // Description: // Some of the event scripts 001-13-2 mapflag zone MMO 001-13-2,47,26,0 script #FoSCore NPC_NO_SPRITE,{ if (!is_admin() && !is_master()) end; if ($@FIRESOFSTEAM_BOSS) end; select l("Ignore this book"), l("Begin Moubootaur Showdown"); mes ""; $@FIRESOFSTEAM_BOSS=(@menu-1)*2; if ($@FIRESOFSTEAM_BOSS == 0) close; select l("Easy Mode"), l("Crazy Mode"), l("Cadis Mode"), l("Crazy Cadis Ultimate Pandorica Mode"), l("Portable Apocalypse"); mes ""; $@FIRESOFSTEAM_DIFF=70+(@menu*30); $@EVENT_01 = PORTHOS_BUSY; switch (@menu) { case 1: .@d$="##2Easy"; break; case 2: .@d$="##3Crazy"; break; case 3: .@d$="##5Cadis"; break; case 4: .@d$="##6Crazy Cadis Ultimate Pandorica"; break; case 5: .@d$="##1Portable Apocalypse"; break; default: .@d$="Unknown"; } mapannounce("001-13-2", "Difficulty Selected: ##B"+.@d$+"##b", 0); changemusic("001-13-2", "mythica.ogg"); closeclientdialog; // Dispose of the GM warp "033-1", 72, 185; sleep(200); // PC no longer attached // Start the event mapwarp("001-13-2", "001-13-2", 47, 37); sleep(200); // Cleanup previous data (if any) $@FOS_ISB=0; $@FOS_MOB=0; $@FOS_AND=0; .Support1=0; .Support2=0; .Support3=0; .Support4=0; .Support5=0; $@FOS_MOB=monster("001-13-2", 47, 32, "Moubootaur (Sealed)", MobMoubootaur, 1, "#FoSCore::OnEventEnd"); .@c = getunits(BL_PC|BL_MER|BL_HOM, .@players, MAX_CYCLE_PC, "001-13-2"); for (.@i = 0; .@i < .@c; .@i++) { sc_start(SC_STUN, 31000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@players[.@i]); } sc_start(SC_STUN, 31000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_MOB); sleep(1000); // Dramatic Silence unittalk($@FOS_MOB, "##1Who dares awake me from my slumber..."); sleep(3000); unittalk($@FOS_MOB, "##1It was not even a decade since I turned a whole world in a Moubootaur Legend for their insolence..."); sleep(5000); maptimer2("001-13-2", 2000, "#FoSCore::OnMFShake"); sleep(2000); unittalk($@FOS_MOB, "##1AND YOU DARE TO NOT LEARN YOUR LESSON?? %%e"); sleep(2000); unittalk($@FOS_MOB, "##1USELESS, UNWORTHY CREATURES!! %%e"); sleep(6000); unittalk($@FOS_MOB, "##1I SHALL TURN THE WHOLE FRICKIN' MULTIVERSE INTO MOUBOOS..."); sleep(6000); unittalk($@FOS_MOB, "##1MY RETURN... IS AT HAND!!"); .@avg=$@FIRESOFSTEAM_DIFF*13/10; // Moubootaur: +30% bonus (+30~60 lvls) // Reconfigure the monster (otherwise it is night immortal) setunitdata($@FOS_MOB, UDT_LEVEL, .@avg); setunitdata($@FOS_MOB, UDT_STR, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_AGI, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_VIT, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_INT, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_DEX, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_LUK, 1+.@avg*3/4); setunitdata($@FOS_MOB, UDT_ADELAY, 1472); setunitdata($@FOS_MOB, UDT_ATKRANGE, 4); // Battle Status setunitdata($@FOS_MOB, UDT_MAXHP, .@avg*1350); setunitdata($@FOS_MOB, UDT_HP, .@avg*1350); setunitdata($@FOS_MOB, UDT_ATKMIN, .@avg*6); setunitdata($@FOS_MOB, UDT_ATKMAX, .@avg*8); setunitdata($@FOS_MOB, UDT_DEF, 12+.@avg*5/3); setunitdata($@FOS_MOB, UDT_MDEF, 1+.@avg); setunitdata($@FOS_MOB, UDT_HIT, .@avg*18); // Advised: x18 setunitdata($@FOS_MOB, UDT_FLEE, .@avg*4); // Advised: x5 setunitdata($@FOS_MOB, UDT_CRIT, 60+.@avg*4/3); // Reconfigure the AI .@opt=getunitdata($@FOS_MOB, UDT_MODE); // Disable looting if (.@opt & MD_LOOTER) .@opt=.@opt^MD_LOOTER; // Add knockback immunity .@opt=.@opt|MD_NOKNOCKBACK; // Mark as boss .@opt=.@opt|MD_BOSS; // Mark as aggressive .@opt=.@opt|MD_AGGRESSIVE; .@opt=.@opt|MD_ANGRY; // Make it more op .@opt=.@opt|MD_DETECTOR; .@opt=.@opt|MD_CASTSENSOR_CHASE; .@opt=.@opt|MD_CASTSENSOR_IDLE; .@opt=.@opt|MD_CHANGECHASE; .@opt=.@opt|MD_CHANGETARGET_MELEE; .@opt=.@opt|MD_CHANGETARGET_CHASE; setunitdata($@FOS_MOB, UDT_MODE, .@opt); sleep(1000); mapannounce("001-13-2", "##1##BON YOUR MARKS...", 0); sleep(2000); mapannounce("001-13-2", "##1##B3...", 0); sleep(1000); mapannounce("001-13-2", "##1##B2...", 0); sleep(1000); mapannounce("001-13-2", "##1##B1...", 0); sleep(1000); mapannounce("001-13-2", "##1##BBEGIN!!", 0); .Support3=monster("001-13-2", 59, 36, "Magic Commander", Moubi, 1); .Support4=monster("001-13-2", 44, 44, "Army Commander", BloodyMouboo, 1); .Support5=monster("001-13-2", 37, 36, "Mouboo Governor", AlphaMouboo, 1); setunitdata(.Support3, UDT_MAXHP, .@avg*300); setunitdata(.Support3, UDT_HP, .@avg*300); setunitdata(.Support4, UDT_MAXHP, .@avg*300); setunitdata(.Support4, UDT_HP, .@avg*300); setunitdata(.Support5, UDT_MAXHP, .@avg*300); setunitdata(.Support5, UDT_HP, .@avg*300); setunitdata(.Support3, UDT_RACE, RC_Legendary); setunitdata(.Support4, UDT_RACE, RC_Legendary); setunitdata(.Support5, UDT_RACE, RC_Legendary); initnpctimer; changemusic("001-13-2", "Arabesque.ogg"); end; ////////////// Player's Victory ////////////// OnEventEnd: stopnpctimer; killmonsterall("001-13-2"); changemusic("001-13-2", "Misty_Shrine.ogg"); mapannounce("001-13-2", "Moubootaur : ##1##BThis is not the place...", 0); sleep(2000); mapannounce("001-13-2", "Moubootaur : ##1##BMy powers are weak here...", 0); sleep(2000); mapannounce("001-13-2", "Moubootaur : ##1##BBut you won't foil my plans forever!", 0); sleep(3000); mapannounce("001-13-2", "Moubootaur : ##1##BI'll come back... Stronger than ever!", 0); sleep(3000); maptimer2("001-13-2", 10, "#FoSCore::OnMFSurvive"); $@EVENT_01 = PORTHOS_UNUSED; end; ////////////// Map Broadcast ////////////// OnMFMark: dispbottom col(l("On your marks..."), 1); end; OnMFShake: sshake(); closeclientdialog; sleep2(1000); sshake(); sshake(); closeclientdialog; end; OnMFDispose: if (ispcdead()) warp("033-1", 72, 191); end; OnMFSurvive: dispbottom l("Mission accomplished. Well played!"); // Mark as "done" on Mirror Lake Quest Tracker ##01_CRQUEST = ##01_CRQUEST | MLP_CR_DEBUT; specialeffect(FX_FANFARE, AREA, getcharid(3)); sleep2(15000); warp("033-1", 72, 191); end; ////////////// Heartbeat ////////////// OnTimer15000: maptimer2("001-13-2", 10, "#FoSCore::OnMFDispose"); sleep(30); if (getmapusers("001-13-2") < 1) goto L_Defeat; // Main cycle if ($@FIRESOFSTEAM_BOSS) { // Handle Moubootaur Magic // But only if .Support3 was defined (control variable) if (!.Support3) {initnpctimer; end;} // Spawn a fiend .@m=monster("001-13-2", 47, 31, "Mouboo", Mouboo, 1); setunitdata(.@m, UDT_RACE, RC_Legendary); .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/80; .@op=getunitdata(.@m, UDT_MODE); .@op=.@op|MD_AGGRESSIVE; setunitdata(.@m, UDT_MAXHP, .@hp); setunitdata(.@m, UDT_HP, .@hp); setunitdata(.@m, UDT_MODE, .@op); // Select random magic from arsenal .@r=rand2(16); switch (.@r) { case 1: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Bleeding", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_BLOODING, BL_PC, 1); break; case 2: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Blind", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_BLIND, BL_PC, 1); break; case 3: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Lag", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_CONFUSION, BL_PC, 1); break; case 4: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Curse", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_CURSE, BL_PC, 1); break; case 5: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Poison", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_POISON, BL_PC, 1); break; case 6: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Sleep", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_SLEEP, BL_PC, 1); break; case 7: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Deadly Poison", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_DPOISON, BL_PC, 1); break; case 8: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Chilling", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_COLD, BL_PC, 1); break; case 9: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Burning", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_BURNING, BL_PC, 1); break; case 10: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Fear", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_FEAR, BL_PC, 1); break; case 11: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Obliterate", 0); rectharm($@FOS_MOB, 7, 7, rand2(700, 900), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM); break; case 12: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Disarm Homun", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_STUN, BL_HOM, 1); break; case 13: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Exterminate Lesserform", 0); rectharm($@FOS_MOB, 7, 7, rand2(800, 1400), HARM_MISC, Ele_Holy, "filter_always", BL_MER | BL_HOM); break; case 14: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Summon Reinforcement", 0); for (.@i=0;.@i <= rand2(4);.@i++) { .@m=monster("001-13-2", rand2(35,43), rand2(35,38), "Reinforcement", any(AlphaMouboo, Moubi, BloodyMouboo, Moubi), 1); setunitdata(.@m, UDT_RACE, RC_Legendary); .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/60; setunitdata(.@m, UDT_MAXHP, .@hp); setunitdata(.@m, UDT_HP, .@hp); } break; case 15: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Wizcat", 0); for (.@i=0;.@i <= 2+rand2(7);.@i++) { .@m=monster("001-13-2", rand2(35,43), rand2(35,38), "Reinforcement", BlackCat, 1); setunitdata(.@m, UDT_RACE, RC_Legendary); .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/70; setunitdata(.@m, UDT_MAXHP, .@hp); setunitdata(.@m, UDT_HP, .@hp); } break; case 16: mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Nuke", 0); rectharm($@FOS_MOB, 14, 14, rand2(450, 750), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM); break; default: // case 0 mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Seal", 0); areasc2("001-13-2", 50, 40, 30, 15000, SC_SILENCE, BL_PC, 1); break; } sleep(rand2(45000)); // Wait a bit longer between magic (random) } initnpctimer; end; ////////////// Player's Defeat ////////////// OnDefeat: L_Defeat: $@FIRESOFSTEAM_BOSS=0; $@FIRESOFSTEAM_DIFF=0; $@FOS_ISB=0; $@FOS_MOB=0; $@FOS_AND=0; .Support1=0; .Support2=0; .Support3=0; .Support4=0; .Support5=0; killmonsterall("001-13-2"); kamibroadcast("The players were defeated at Fires of Steam Showdown.", "Fires of Steam"); $@EVENT_01 = PORTHOS_UNUSED; stopnpctimer; end; OnInit: .boostime = 900000; .subitime = 47000; .distance = 5; .sex = G_OTHER; end; }