summaryrefslogblamecommitdiff
path: root/npc/config/events.txt
blob: 3dd43119f4e363a885de3d17275941304b4dfaee (plain) (tree)

















































































































































































                                                                                                                                  

                                                  













































































































































                                                                                                                        
// 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;
}