summaryrefslogblamecommitdiff
path: root/npc/006-7/ctrl.txt
blob: a8c58dd8961a66aadd9f426c595b6a7edf6f615f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                        





                                                                                             


                                                     
                                




                                                                                                     


                                                                                             
                                                        
                                        
                                                         
         








                                                         

                                                 


                                                                       
                                                                     






















                                                        
                                                                   









                                                                        
 
                              






                      
                                 

                                                   
                                                                                        

                                
                                                                             
                   
                                   


                     


                                                                            











                                                              
                
 






                                           





                                                                   
                                                                                           



                                                                                            
 

     






                            

             


        
// TMW2 Script
// Author:
//    Jesusalva

006-7,44,50,0	script	#OutOf0067	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    if (!$@ICICLE_CHALLENGE)
        warp "006-6", 40, 36;
    end;

OnRw:
    getexp 1000000, 0;
    Mobpt += 10000;
    dispbottom l("Der Schneemann has been defeated: %s Monster Points gained.", fnum(10000));
    end;
}

006-7,44,50,0	script	Ice Lord	NPC_YETIFLY,{
    if ($@ICICLE_CHALLENGE) end;
    if (.ticks > gettimetick(2)) {
        mesn;
        mesq l("This challenge will be available in %s. Please wait until then.", FuzzyTime(.ticks));
        close;
    }
    mesn;
    mesq l("With Magic and Blades, The Icicle shall break. Do you undertake the challenge?");
    mesc l("Advised: 6+ players"), 1;
    mesc l("Advised: 1+ mage, 1+ tanker, 2+ healer"), 1;
    mesc l("Time Limit: 90 minutes"), 1;
    mesc l("Enter/Leave after start: %s", b(l("NO"))), 1;
    next;
    select
        l("Not yet."),
        l("Bring it on!"),
        rif(REBIRTH, l("Bring me, my worst nightmare."));
    mes "";
    if (@menu == 1) {
        closeclientdialog;
        close;
    }

    .ticks = gettimetick(2) + 5400; // 90 minutes
    .BOSS = monster("006-7", 44, 36, "Der Schneemann", SnowmanBoss, 1);
    .@mlt = (@menu == 2 ? 10 : 15);

    setunitdata(.BOSS, UDT_MAXHP, 1000000 * .@mlt / 10); // 1M ~ 1.5M
    setunitdata(.BOSS, UDT_HP,    1000000 * .@mlt / 10);
    // Reconfigure the AI
    .@opt=getunitdata(.BOSS, 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(.BOSS, UDT_MODE, .@opt);

    // Nerf the damage, but never miss a hit
    setunitdata(.BOSS, UDT_ATKMIN,   60 * .@mlt / 10); // 60~90 dmg
    setunitdata(.BOSS, UDT_ATKMAX,   60 * .@mlt / 10);
    setunitdata(.BOSS, UDT_ADELAY, 2220 / .@mlt * 10); // 2220 or 1480ms
    setunitdata(.BOSS, UDT_HIT,      2400);

    // Boosting the defense is not necessary
    // It nerfs weapons to 40% (bows to 20%)
    // Then it resists 50% of Neutral element.
    // Note it is strong against Water (25% dmg)
    // And weak against Fire (snow) and Wind (100% dmg)
    // Otherwise, behave as Ghost element

    $@ICICLE_CHALLENGE = true;
    disablenpc .name$;
    initnpctimer;
    closeclientdialog;
    close;

// Heart
OnTimer5000:
    /* Maybe the fight is over */
    if (!mobcount("006-7", "all"))
        maptimer2("006-7", 10, "#OutOf0067::OnRw");
    if (.ticks < gettimetick(2) || !mobcount("006-7", "all") || !getmapusers("006-7")) {
        killmonsterall("006-7");
        enablenpc .name$;
        .ticks = min(.ticks, gettimetick(2) + 1800); // Min. Cooldown: 30 min
        .beats = 0;
        $@ICICLE_CHALLENGE = false;
        stopnpctimer;
        end;
    }

    /* Prepare some data */
    .@hp = getunitdata(.BOSS, UDT_HP) * 100 / getunitdata(.BOSS, UDT_MAXHP);
    getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, .BOSS);
    .@c=getunits(BL_PC, .@pcs, MAX_CYCLE_PC, .@m$);
    .@mvp=0;.@rnd=0;.@def=0;
    for (.@i = 0; .@i < .@c; .@i++) {
        if (!.@rnd || !rand2(.@c))
            .@rnd=.@pcs[.@i];
        if (getunitdata(.@pcs[.@i], UDT_DEF) > .@def) {
            if (getunitdata(.@pcs[.@i], UDT_HP) < 1) continue;
            .@mvp=.@pcs[.@i];
            .@def=getunitdata(.@pcs[.@i], UDT_DEF);
        }
    }
    .beats += 1;

    /* Everyone is dead, get rid of them */
    if (!.@mvp || !.@rnd) {
        mapwarp("006-7", "006-6", 40, 36);
        initnpctimer;
        end;
    }

    /* Decide the skill to use based on ~5s beats over 3 minutes */
    switch (.beats % 18) {
    // Summon Reinforcements (every 60s)
    case 0:
    case 6:
    case 12:
        unittalk(.BOSS, "Come forth, ##Bsnow army##b, for the Icicle shall live forever!");
        specialeffect(64, AREA, .BOSS);
        sleep(500);
        monster("006-7", 44, 22, strmobinfo(1, Snowman), Snowman, max(1, (11 - .@hp) / 10));
        break;

    }

    initnpctimer;
    end;

OnInit:
    .distance = 4;
    .ticks = gettimetick(2);
    .beats = 0;
    .mvp = 0;
    .def = 0;
    end;
}