summaryrefslogblamecommitdiff
path: root/npc/023-2/mk.txt
blob: f2037966c44220e62a25f54879968b18fb7442fd (plain) (tree)
1
2
3
4
5
6
7
8
9
10





                            
                           


                                                                 
        
                              
          

        


                  
               
            

         
            













                                                       
                                                      
               
                                                      
               





                                                                                                                                          


                
         
                                      


                                                                                                                 

                                                                                     
                                                 
                   
                                        
                                     

                                                                                                                                 

                                                                                           
                                    
                                            
            
                                                                                                
                                                                                             




                                                             
                                                                                                     
 

                                                                   

                                                          
 





                                    



                              





                                      
                                      
                                         
                                        


                                    




                 




                                                                                                                


                    
                         



                                                                                                                                                          
                                   
                                                                            
     

                                      


                                                                                                                                                                                                               
                                                    
     


          
                                                                                       
                                                         
                                                                                                                    
                                      
                   
                                        
                   




                     
              




                                                                                                                                                        
                          
                                                                                                          
                                                                                                                      








                                                                       
        


        

 













































































                                                                 
                                                        

        
                                                                 






                                                      
// TMW2 scripts.
// Authors:
//    Jesusalva
// Description:
//    Nivalis Liberation Day

// The Walking Monster King
023-2,121,35,0	script	The Monster King#NLib	NPC_MONSTERKING,{
    end;

OnTouch:
    npctalk3 get_race() + "!";
    die();
    end;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    .sakar = 0;
    .MK = 0;

OnHour00:
OnReprocess:
    if (!$NLIB_DAY) {
        disablenpc .name$;
        end;
    }
    switch ($NLIB_DAY) {
        case 1:
            movenpc(.name$, 121, 35, DIR_WEST); break;
        case 2:
            movenpc(.name$, 105, 37, DIR_NORTH); break;
        case 3:
            movenpc(.name$, 105, 51, DIR_SOUTH); break;
        case 4:
            movenpc(.name$, 102, 63, DIR_WEST); break;
        case 5:
            movenpc(.name$, 81, 59, DIR_NORTH); break;
        case 6:
            movenpc(.name$, 53, 53, DIR_SOUTH); break;
        case 7:
            movenpc(.name$, 36, 99, DIR_SOUTH); break;
        default:
            channelmes("#world", "A bug happened: Monster King # Nivalis Liberation Day - Value Out of Range."); disablenpc .name$; break;
    }

    end;

// Event Handler

L_Finish:
    $MANA_BLVL-=10; // Set level to 30
    // Just being bigger is not enough. Must be over the double for the advantage draw (about 1 player for 10m)
    if (.victory_count > (.defeat_count*2)) {
        announce "The fight ends in draw! The Monster King did accomplish what he set, though...", bc_all|bc_npc;
        channelmes("#world", "Congratulations for the draw, that was a good fight.");
        channelmes("#world", "The Monster King stole whatever he wanted and left.");
    // Reproduce the same bonus from Alpha Server
    $@EXP_EVENT=25;
    donpcevent "@exprate::OnPlayerCall";
    $MANA_BLVL-=5; // Set level to 25
    } else if (.victory_count < 100) { // 1 player for 5 minutes is enough to prevent this loss
        announce "The Monster King, after moping the floor with the players, accomplish what he set, and left...", bc_all|bc_npc;
        channelmes("#world", "The players failed miserably in stopping the Monster King.");
        // Reproduce the same penalty from Beta Server
        $@EXP_EVENT=rand2(-50, -25);
        donpcevent "@exprate::OnPlayerCall";
    } else {
        announce "The fight ends in draw, with advantage to the Monster King...", bc_all|bc_npc;
        channelmes("#world", "The players weren't capable to really harm the Monster King.");
    }
L_Finish2:
    killmonsterall("023-2");
    .wcycle=0;
    maptimer("023-2", 10, "The Monster King#NLib::OnReturn");
    channelmes("#world", "*FINAL SCORE -  PLAYERS "+.victory_count+" : "+.defeat_count+" MONSTERS*");

    // Game Storyline advances: The Town Blockade Stage is now over
    $GAME_STORYLINE=1;
    $MK_TEMPVAR=gettimeparam(GETTIME_DAYOFMONTH)+
                MK_IDLE_DURATION+rand2(MK_IDLE_VARIATION);

    // Clean up the event
    $NIVALIS_LIBDATE=gettimetick(2);
    $NLIB_DAY=0;
    $NLIB_HIGHTIME=0;
    $NLIB_HIGHNAME$="";
    disablenpc "Lightbringer#NLib";
    enablenpc "#019-1_70_21";
    enablenpc "#019-2_37_55";
    enablenpc "#020-1_70_128";
    enablenpc "#020-1_107_55";

    removemapflag("019-3", mf_bexp);
    removemapflag("019-3", mf_nosave);
    removemapflag("020-1", mf_bexp);
    removemapflag("020-1", mf_nosave);
    removemapflag("023-2", mf_bexp);
    removemapflag("023-2", mf_nosave);
    removemapflag("023-2", mf_nopenalty);
    removemapmask "019-3", MASK_MATTACK;
    setmapflag("019-3",mf_bexp,100);
    setmapflag("020-1",mf_bexp,100);
    setmapflag("023-2",mf_bexp,100);
    stopnpctimer;
    end;

OnTimer3000:
    .wcycle+=3;
    .@pl=getareausers("023-2", 21, 109, 31, 114);
    .@pla=getmapusers("023-2");
    if (.@pl <= 0 && .@pla > 0)
        mapannounce "023-2", "##1WARNING: Players outside the Monster King room counts toward DEFEAT count!", 0;
    .victory_count+=.@pl;

    // Processment
    if (.@pl <= 0) {
        .defeat_count+=1;
    } else if (.wcycle % 30 == 3) {
        areamonster "023-2", 21, 109, 31, 114, "Monster", any(AngryScorpion, BlackSlime, BlackScorpion, Wolvern, BlueSlime, SlimeBlast, CaveMaggot), .@pl;
    } else if (.wcycle % 30 == 18) {
        areamonster "023-2", 21, 109, 31, 114, "Monster", any(BlackSlime, BlueSlime, SlimeBlast), 1; // PS. Drop “Demure Dark Soul” ¬.¬
    } else if (.wcycle % 60 == 0) {
        mapannounce "023-2", str(15-(.wcycle/60))+" minute(s) remaining", 0;
    }
    if (.wcycle >= 900) goto L_Finish;
    initnpctimer;
    // Andrei Sakar's Fake Chant
    if (.wcycle % 15 < 3) {
        unittalk(.sakar, sprintf("Come %s %s, and %s %s!", any("great", "magnificent"), any("light", "oath", "sacrament"), any("devastate", "annihilate", "obliterate", "liquidate", "eviscerate"), "nearby"));
        harm(.MK, 100, HARM_MISC, Ele_Holy, .sakar);
    }
    end;

OnVictory:
    channelmes("#world", "The Monster King was defeated by players, and had to flee!");
    channelmes("#world", "Getting magic is now easier!");
    announce "Players have defeated the Monster King! He fleed from the cave after leaving a decoy!", bc_all|bc_npc;
    $MANA_BLVL-=10; // Set level to 20
    $@EXP_EVENT=25;
    donpcevent "@exprate::OnPlayerCall";
    goto L_Finish2;
    end;

OnBegin:
    .defeat_count=0;
    .victory_count=0;
    .wcycle=0;
    channelmes("#world", "The fight against the Monster King ends in 15 minutes. If he is forced to flee, that'll result as victory.");
    channelmes("#world", "Each cycle there are players fighting against him will result in victory points. The opposite will result in defeat points.");
    channelmes("#world", "More players fighting will result in more victory points. This may affect drastically the result.");
    channelmes("#world", "Defeat, decided by a certain threshold of points, will result in MAGIC BEING PERMANENTLY HARDER TO OBTAIN.");
    announce "The Alliance attacks the Monster King! 15 minutes! Rules in #world", bc_all|bc_npc;
    movenpc(.name$, 0, 0);
    .MK=monster("023-2", 24, 111, "The Monster King", MonsterKing, 1, "The Monster King#NLib::OnVictory");
    .sakar=monster("023-2", 30, 109, "Andrei Sakar", AndreiSakar, 1, "The Monster King#NLib::OnSkip", Size_Medium, 1);
    areamonster "023-2", 21, 109, 31, 114, "Monster", AngryScorpion, 1;
    areamonster "023-2", 21, 109, 31, 114, "Monster", BlackSlime, 2;
    areamonster "023-2", 21, 109, 31, 114, "Monster", BlueSlime, 1;
    areamonster "023-2", 21, 109, 31, 114, "Monster", CaveMaggot, 1;
    initnpctimer;
    end;

OnReturn:
    warp "019-2", 43, 55;
    end;

OnSkip:
    end;
}


// Floor triggers
023-2,121,35,0	script	#NLIB_T01	NPC_HIDDEN,1,2,{

OnTouch:
    if ($NLIB_DAY == 1) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    }
    end;
}


023-2,110,36,0	script	#NLIB_T02	NPC_HIDDEN,2,2,{

OnTouch:
    if ($NLIB_DAY == 2) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    } else if ($NLIB_DAY < 2) {
        slide 114, 36;
        dispbottom l("I should not veer off too much the path.");
    }
    end;
}

023-2,105,50,0	script	#NLIB_T03	NPC_HIDDEN,2,2,{

OnTouch:
    if ($NLIB_DAY == 3) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    } else if ($NLIB_DAY < 3) {
        slide 104, 48;
        dispbottom l("I should not veer off too much the path.");
    }
    end;
}

023-2,104,62,0	script	#NLIB_T04	NPC_HIDDEN,0,0,{

OnTouch:
    if ($NLIB_DAY == 4) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    } else if ($NLIB_DAY < 4) {
        slide 104, 61;
        dispbottom l("I should not veer off too much the path.");
    }
    end;
}

023-2,86,59,0	script	#NLIB_T05	NPC_HIDDEN,2,5,{

OnTouch:
    if ($NLIB_DAY == 5) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    } else if ($NLIB_DAY < 5) {
        slide 91, 61;
        dispbottom l("I should not veer off too much the path.");
    }
    end;
}

023-2,53,49,0	script	#NLIB_T06	NPC_HIDDEN,0,5,{

OnTouch:
    if ($NLIB_DAY == 6) {
        @QNL3=1;
        dispbottom l("I've found the Monster King.");
    } else if ($NLIB_DAY < 6) {
        slide 55, 48;
        dispbottom l("I should not veer off too much the path.");
    }
    end;
}

023-2,35,90,0	script	#NLIB_T07	NPC_HIDDEN,1,3,{

OnTouch:
    if ((gettime(2) < 25 || gettime(2) > 45) && !$@GM_OVERRIDE) {
        slide 39, 89;
        dispbottom l("I should not go ahead... yet.");
    }
    end;
}