summaryrefslogblamecommitdiff
path: root/npc/012-1/guards.txt
blob: ca691996197796ed36a7d4f07080181ca085018e (plain) (tree)
1
2
3
4
5
6
7
8
9






                                                    

                                         
                                                 
                                                     

                                                           
                                                                                                          





                                                                                                                          
                                                              

          















                                             




                                             





                                                                                                                                      
         



                                        






                                                          
                               
                               



















                                                                                     
                                                                                  
                                      




                                      

                                      




                                       

                          
                             
                                                             
                                             



                                      
                                                                             










                                                                                  
                                                                          
                          
                        

                                                                              


                                                                             
             
                                                              






                                                          


                   














                                                                                                                                                      




                                                   

                                                                                         


          










 
                          
        

                                                                           
                                                   
                                                                                                                           
                     
                                                



                                               
                                                                      
                                                                         
                                         

                                      

                                       
                                            

                                         


















                                    
                             

                          

                            
                                                                                                                                       
                                                                          
          
 
                                  


                                                                








                                                
          
 
                                      
      
              



                                                                           
                               
                                                                                                                        
                            

            



                  
                               
                                                  
                                                          

                                                                                     
                                                





                                            
 












 
                        
                                                    


                                                                             







                                                                                                                   
                                                        
           

                                                                                               
         


                                                                                
         


                                                                                       
         

                                                                                                       






                                                                                                     
              
                               





                                                                         

                           


            
                                   
                                                                                                                      
                            


            
                         
                                                                                                                         
                              
              
 
                                            
                                                                                                        


                                                                                                            
                                                                                                                        



                       

                                                                                       

                                                                                      
                                    
                                                                                                                                                                      

        
              
                                                                    
                               
                                                                                                                                     
                                     
                                                                                                                        


                                                                                   
                                                                                                                          

                            
                                                                                                                          

                            
                                                                                                                          

                            
                                                                                                                          

                            
                                                                                                                          
     
                                                                    





                                                                                                           
             
              
              

                      
                        

                                                                               
                                                                                                             

                                                                                            



                                                                                                                    

     
                                 

                                      




                                                                       
                                                                                                                           

                                                                    
                                                                                                                                   
     
                                  
                                                    









                                                                                                                                   
                                                                          
                                                                                                            

                                      
                                                                                                                          


         
                          
                               



                                                                                                                
                                                   






                                      

                                            
                                           
                                                             
                                            
                                    
                                    

















                                   
                            

                         

                           

                                                            
                                                                                      
                 
                                                  
                                                                                       


                                                                          
                                    
                                                    
                    
                                 

                  
                                   
                                                

                                                                  
                                  


                                                                                 


         
                   







                                                                                            










 









                                                    

               



                                
                                      


                                                          
                                  

                                                
                                    

                      



             
                                                         
                                                              
                                        

                                           
                                                
                            
                                           
                                          
                                      
                                           











                       





















































                                                                                       





















                                                                             



















                                                    



                                                    
 
              
          
                            
             
                                                                                         
                                                                      


                 
         




































                                                                      
                     




























                                                       
 

                 


        
                 


        
// TMW2 scripts.
// Authors:
//    Jesusalva
// Description:
//    Protect Hurnscald

012-1,71,24,0	script	Lieutenant Paul	NPC_PLAYER,{
    .@q=getq(HurnscaldQuest_Lieutenant);
    .@k=getq2(HurnscaldQuest_Lieutenant);
    // The Monster King guild have a special menu
    if (!$HURNS_LIBDATE && is_master()) goto L_Admus;
    if (strcharinfo(2) == "Monster King") goto L_MKControl;
    mesn;
    mesq l("We are @@ since the last great attack from the Monster King.", FuzzyTime($HURNS_LIBDATE,1,2));
    next;
    mesn;
    mesq l("Many citzens are still in fear. Paths are closed, economy is a disaster, things are not here.");
    next;
    mesn;
    mesq l("But we are working day and night. We hope that soon, more people come out and this place gets lively again.");
    if (BaseLevel >= 20 && MPQUEST && .@q <= 15) goto L_Quest;
    close;

// Paul's quest
L_Quest:
    next;
    // Quest State, Legacy value
    @fc=0;
    if (.@q == 0 && BaseLevel >= 20) @fc=1;
    if (.@q == 1 && BaseLevel >= 22) @fc=2;
    if (.@q == 2 && BaseLevel >= 24) @fc=3;
    if (.@q == 3 && BaseLevel >= 26) @fc=4;
    if (.@q == 4 && BaseLevel >= 28) @fc=5;
    if (.@q == 5 && BaseLevel >= 30) @fc=6;
    if (.@q == 6 && BaseLevel >= 32) @fc=7;
    if (.@q == 7 && BaseLevel >= 34) @fc=8;
    if (.@q == 8 && BaseLevel >= 36) @fc=9;
    if (.@q == 9 && BaseLevel >= 38) @fc=10;
    if (.@q == 10 && BaseLevel >= 40) @fc=11;
    if (.@q == 11 && BaseLevel >= 44) @fc=12;
    if (.@q == 12 && BaseLevel >= 48) @fc=13;
    if (.@q == 13 && BaseLevel >= 52) @fc=14;
    if (.@q == 14 && BaseLevel >= 56) @fc=15;
    if (.@q == 15 && BaseLevel >= 60) @fc=16;
    if (@fc)
        goto L_Assign;
    mesn;
    mesq l("I see you are a Monster Hunting Quest Participant, right? I don't need your help right now, but maybe later, who knows?");
    close;

L_Assign:
    // 2 ** 0 = 1 * 100 = 100 mob points
    // 2 ** 1 = 2 * 99  = 198 mob points
    // 2 ** 2 = 4 * 98  = 392 mob points
    // ...
    // 2 ** 9 = 512 * 91 = 46592 mob points (when fc = 10)
    // Then comes the stupdly high table
    // 2 ** 10 = 1024 * 90 = 92,160 mpt (when fc = 11)
    // 2 ** 11 = 2048 * 89 = 182k
    // 2 ** 12 = 4096 * 88 = 360k
    // 2 ** 13 = 8192 * 87 = 712k
    // ... 2 ^ 15 * 85 = 2.8 million
    @rq=(2**(@fc-1))*(101-@fc);
    if (@fc == 16) @rq=1500000;

    // Check if you already met objective
    if (.@k > 0 && Mobpt >= .@k+@rq) {
        setq HurnscaldQuest_Lieutenant, @fc, 0;
        Mobpt-=@rq;
        mesn;
        mesq l("Good job collecting the monster points for me. Here's your reward.");
        @xp=1000;
        // reward is 30% from reference level exp to level up
        switch (@fc) {
            case 1: @xp=486; break;
            case 2: @xp=597; break;
            case 3: @xp=751; break;
            case 4: @xp=1028; break;
            case 5: @xp=1342; break;
            case 6: @xp=2399; break;
            case 7: @xp=3128; break;
            case 8: @xp=4190; break;
            case 9: @xp=5303; break;
            case 10: @xp=6532; break;
            /* After this it demands so much XP, I raised the rate from 30 to 100%
            case 11: @xp=10234; break;
            case 12: @xp=12630; break;
            case 13: @xp=15908; break;
            case 14: @xp=19212; break;
            case 15: @xp=22792; break;
            case 16: @xp=34577; break;
            */
            case 11: @xp=34212; break;
            case 12: @xp=53026; break;
            case 13: @xp=75973; break;
            case 14: @xp=142784; break;
            case 15: @xp=215198; break;
            case 16: @xp=365914; break;
        }
        getexp @xp, @fc*3;
        Zeny=Zeny+@fc*15+@fc;
        mesc l("* Gained @@ EXP and @@ Job Exp", @xp, @fc*3);
        mesc l("* Gained @@ GP", @fc*15+@fc);
        // Welcome to the stupid table
        if (@fc >= 10) {
            switch (@fc) {
                case 10:
                    .@tea=Coffee; .@gift=BronzeGift; .@rare=ScrollSTerranite;
                    break;
                case 11:
                    .@tea=ChamomileTea; .@gift=SilverGift; .@rare=WhiskeyAle;
                    break;
                case 12:
                    .@tea=SpearmintTea; .@gift=SilverGift; .@rare=PrecisionPotion;
                    break;
                case 13:
                    .@tea=OolongTea; .@gift=GoldenGift; .@rare=SacredLifePotion;
                    break;
                case 14:
                    .@tea=JasmineTea; .@gift=GoldenGift; .@rare=MercBoxEE;
                    break;
                case 15:
                    .@tea=YerbaMate; .@gift=PrismGift; .@rare=MysteriousFruit;
                    break;
                default: // 16+
                    .@tea=ElixirOfLife; .@gift=PrismGift; .@rare=MylarinDust;
                    break;
            }
            mesc l("For your incredibly hard work, you got:");
            mesf("* %d %s", 1, getitemlink(.@tea));
            mesf("* %d %s", 1, getitemlink(.@gift));
            mesf("##B* %d %s##b", 1, getitemlink(.@rare));
            getitem .@rare, 1;
            getitem .@gift, 1;
            getitem .@tea, 1;
        }
        close;
    }
    // Assign quest
    else if (.@k == 0) {
        mesn;
        mesq l("Maybe you can help our city guard. I see you are a Monster Hunting Quest Participant, right?");
        next;
        mesn;
        mesq l("So, I'm placing a special bounty for @@ Mob Points.", @rq);
        mesq l("You currently have @@, so if you accept and come back later with @@ Mob Points, I'll mark the bounty as complete.", Mobpt, Mobpt+@rq);
        next;
        mesc l("Accept quest?");
        if (askyesno() == ASK_YES) {
            setq HurnscaldQuest_Lieutenant, @fc-1, Mobpt;
        }
    }
    // Resume quest
    else {
        // Reset if needed
        if (Mobpt-.@k < 0) {
            setq2 HurnscaldQuest_Lieutenant, Mobpt;
            .@k=0;
        }
        mesn;
        mesq l("You have collected and additional of @@/@@ Mob Points.", Mobpt-.@k, @rq);
    }
    close;












// Liberation Day facility
L_Admus:
    mes ".:: " + col("HURNSCALD LIBERATION DAY - ADMUS PANEL", 2) + " ::.";
    mesc l("For HLib, a GM must take the role of the Monster King");
    mesc l("Protip: Use @hide to don't interfer.");
    mes l("Determine Team Size (If everyone is ready and stdby at Tulimshar, use: @@. Minimum 2 players.)", getusers(1)-1);
    input $@BG1_SIZE;
    if ($@BG1_SIZE < 2 && !$@GM_OVERRIDE) close;
    $@BG1_SIZE=$@BG1_SIZE+1;

    kickwaitingroomall("Hurnsguard");
    setmapflagnosave("012-1", "000-1", 22, 22);
    //setmapflag("012-1", mf_nocommand); // This is just too powerful!
    setmapflag("012-1",mf_zone,"MMO"); // MMO Zone: Overrides GM Commands
    setmapflag("012-1", mf_battleground);
    setmapflag("012-1", mf_nopenalty);
    setmapflag("012-1",mf_bexp,126);
    enablenpc "Hurnsguard";
	donpcevent "Hurnsguard::OnSet";
	donpcevent "Lieutenant Paul::OnSet";
    addmapmask "012-1", MASK_MATTACK;
    addmapmask "012-1", MASK_EVILSANCTUM;
    pvpon("012-1");
    disablenpc "#012-1_22_62";
    disablenpc "#012-1_79_17";
    disablenpc "#012-1_79_102";
    disablenpc "#012-1_132_101";
    disablenpc "#012-1_65_55";
    disablenpc "#012-1_89_58";
    disablenpc "#012-1_101_55";
    disablenpc "#012-1_121_71";
    disablenpc "#012-1_116_66";
    disablenpc "#012-1_110_56";
    disablenpc "#012-1_102_69";
    disablenpc "Andrei Sakar";
    disablenpc "Dyrin The Traveler";
    disablenpc "Gwendolyn";
    disablenpc "Jack";
    disablenpc "Locamit";
    disablenpc "Richard";
    disablenpc "Soul Menhir#hurns";
    disablenpc "HurnsShip#M";
    disablenpc "Hinnak";
    disablenpc "Tezzerin";
    disablenpc "Luffyx";
    disablenpc "Shoppa Kep";
    announce "##1Hear ya, hear ya! There are "+str($@BG1_SIZE-1)+" vacant slots at Hurnsguard to LIBERATE HURNSCALD!", bc_all | bc_npc;
    mesc "You are assigned to Monster Forces. Do not leave Hurnscald.", 1;
    close;

// Monster King Siege (deprecated)
L_MKControl:
    mesn;
    mes l("Oh noes! You've found the Hurnscald control panel!");
    next;
    select
        l("Abort"),
        l("Initiate a siege");
    mes "";
    if (@menu == 2) {
        doevent "#HurnscaldSiege::OnStartSiege";
        closedialog;
    }
    close;

// Hurnscald Liberation Day Core Logic
OnSet:
    .CYCLES=0;
	waitingroom("Monster Army", 2, "start#hurns_lib::OnReadyCheck", 1);
    end;

OnEnterBG:
    debugmes "Paul::OnEnterBG";
	$@FK_Team2 = waitingroom2bg("012-1",141, 65,"start#hurns_lib::OnPlayer2Quit","start#hurns_lib::OnPlayer2Death");
    setbgteam $@FK_Team2, 2;
	end;

OnInit:
    .sex = G_MALE;
    .distance = 4;

    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, BullHelmet);
    setunitdata(.@npcId, UDT_HEADMIDDLE, LieutenantArmor);
    setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers);
    setunitdata(.@npcId, UDT_SHIELD, LousyMoccasins);    // TODO FIXME: Display Boots
    setunitdata(.@npcId, UDT_WEAPON, Backsword);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 12);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 15);

    end;
}















// Liberation Day Script
012-1,122,25,0	script	Hurnsguard	NPC_PLAYER,{
    //query_sql("SELECT online FROM `char` WHERE name='Saulc GM'", .@online);
    // TODO
    .@online=$@BG1_SIZE;
    if (!.@online) {
        mesn;
        mesq l("We are planning to take over Hurnscald from the Monster King, and we will need everybody's help.");
        next;
        mesn;
        mesq l("As soon that Saulc GM get back, we can start.");
        close;
    }
    mesc l("Hurnscald Liberation Day special event"), 3;
    mes "";
    mesc l("The objective of this event is to ##Bslay the Monster Admiral##b.");
    mesc l("If you die, you ##Bwon't##b be able to rejoin, but you won't suffer the penalty.");
    next;
    mesc l("If all players there die, Hurnscald WON'T BE LIBERATED.");
    mesc l("This basically means that it'll be another day without it.");
    mesc l("Also, the more players survive, the better rewards will be given.");
    next;
    mesc l("Right click on this NPC to join the Hurnscald Alliance."), 3;
    mesc l("The number of players must be precise, meaning if someone doesn't joins,");
    mesc l("the event won't start and HURNSCALD WON'T BE LIBERATED.");
    next;
    mesc l("Once you join the Alliance, you won't be able to talk with people outside it.");
    mesc l("Additionaly, all your movement will be restricted until either you're warped or log out.");
    close;

OnSet:
	waitingroom("Hurnscald Alliance", $@BG1_SIZE, "start#hurns_lib::OnReadyCheck", $@BG1_SIZE-1);
    end;

OnInit:
    .CYCLES=0;
    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, GoldenWarlordPlate); // Light armor
    setunitdata(.@npcId, UDT_HEADMIDDLE, JeansChaps); // Pants
    setunitdata(.@npcId, UDT_HEADBOTTOM, DeepBlackBoots); // Shoes
    setunitdata(.@npcId, UDT_WEAPON, BugSlayer);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 13);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 7);
    if ($HURNS_LIBDATE)
        disablenpc(.name$);
	end;

OnEnterBG:
    debugmes "Alliance::OnEnterBG";
	$@FK_Team1 = waitingroom2bg("012-1",141, 65,"start#hurns_lib::OnPlayerQuit","start#hurns_lib::OnPlayerDeath");
    setbgteam $@FK_Team1, 1;
	end;

OnDoEvent:
    debugmes "OnDoEvent";
	mapannounce("012-1", "Find and slay the Monster Admiral! DO NOT ATTACK GUARDS. Don't let everyone die!", bc_map);
    .@Pl=getmapusers("012-1");
    .CYCLES=0;

    // Guards won't attack the Monster Staff
    areamonster("012-1", 52, 45, 127, 80, "Monster Sergeant", Forain, .@Pl/3+1, "Hurnsguard::OnXtreem");
    areamonster("012-1", 52, 45, 127, 80, "Monster Sergeant", Moonshroom, .@Pl/2+1, "Hurnsguard::OnXtreem");
    areamonster("012-1", 52, 45, 127, 80, "Monster Soldier", AngryScorpion, .@Pl, "Hurnsguard::OnSkip");
    for (.@i = 0; .@i < .@Pl; .@i++)
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Friendly Guard", FallenGuard1, "Cassia::OnSkip");
	initnpctimer();
    end;

OnSkip:
    // Here, coins drop rate are based on REMAINING PLAYERS and DEFEATED MONSTER LEVEL.
    // A level 100 monster can have a 5% drop bonus against a level 0 monster.
    // You have 1.2% of base chance, plus 0.5% each player + 0.05% each monster level.
    if (rand(10000) <= 120 + (getmapusers("012-1")*50) + (strmobinfo(3,killedrid)*5))
        getmapxy(.@m$, .@x, .@y, 0);
        makeitem(any(Plushroom, Chagashroom, Bread, HalfCroconut, Aquada, CasinoCoins, CactusCocktail, AppleCocktail, CherryCocktail), any(1,1,2), "012-1", .@x, .@y);
    end;

OnTimer300000:
    .@Pl=getmapusers("012-1")+mobcount("012-1", "Cassia::OnSkip")-1;
    .@Pla=getmapusers("012-1");
    .@Mb=mobcount("012-1", "Hurnsguard::OnSkip")+mobcount("012-1", "Hurnsguard::OnXtreem")+2; // Saulc GM is an enemy for server code
    for (.@i = 0; .@i < .@Pla; .@i++)
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Friendly Guard", FallenGuard1, "Cassia::OnSkip");

    // See if we need extra guards, depending on how outnumbered allied forces are.
    if ((.@Mb / .@Pl) > 7) {
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    }
    if ((.@Mb / .@Pl) > 6) {
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    }
    if ((.@Mb / .@Pl) > 5) {
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    }
    if ((.@Mb / .@Pl) > 4) {
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    }
    if ((.@Mb / .@Pl) > 3) {
    	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    }
    .@Pl=getmapusers("012-1")+mobcount("012-1", "Cassia::OnSkip")-1;
    .@Pla=getmapusers("012-1")-1;

	mapannounce("012-1", "Survivors: "+.@Pla+" Hurnscald Alliance: "+.@Pl+"  Monsters: "+.@Mb, bc_map);
    initnpctimer;
    end;

OnTimer10000:
OnTimer120000:
OnTimer240000:
    .CYCLES=.CYCLES+1;

    // Scripted monsters
    if (.CYCLES == 2) {
    	mapannounce("012-1", "Monster Lieutenant appears! Watch out!", bc_map);
    	bg_monster($@FK_Team2, "012-1", 65, 71, "Monster Lieutenant", NightScorpion, "Hurnsguard::OnXtreem");
    } else if (.CYCLES == 3) {
    	mapannounce("012-1", "Monster Admiral appears! Kill it to liberate Hurns!", bc_map);
    	.@boss=bg_monster($@FK_Team2, "012-1", 65, 71, "Monster Admiral", GiantMutatedBat, "Hurnsguard::OnVictory");
        // Give huge amounts of health to the boss (Default: 43310)
        setunitdata(.@boss, UDT_MAXHP, 100000);
        setunitdata(.@boss, UDT_HP,    100000);
    }

    // One monster per user alive
    .@Pl=getmapusers("012-1");
    for (.@i = 0; .@i < .@Pl; .@i++) {
        .@monsterId=any(CaveMaggot, RedSlime, LavaSlime, BlackScorpion,
        AngryRedScorpion, Sarracenus, Snake, MountainSnake, GreenSlime,
        Bandit, BlackScorpion, HouseMaggot, AngryScorpion, MagicGoblin,
        Pinkie, Mouboo, Scorpion, Yeti);

    	bg_monster($@FK_Team2, "012-1", rand(69, 136), rand(83, 74), "Monster Soldier", .@monsterId, "Hurnsguard::OnSkip");
        // 40% odds of having an extra monster spawned (player loop)
        if (rand(1,5) % 2 == 0)
        	bg_monster($@FK_Team2, "012-1", rand(69, 136), rand(83, 74), "Monster Soldier", .@monsterId, "Hurnsguard::OnSkip");
    }
    // One slime blast per general
    .@Mgg=mobcount("012-1", "Hurnsguard::OnXtreem");
    for (.@i = 0; .@i < .@Mgg; .@i++) {
    	bg_monster($@FK_Team2, "012-1", rand(69, 136), rand(83, 74), "Monster Soldier", SlimeBlast, "Cassia::OnSkip");
    }
    // One Magic Goblin or Pinkie per cycle
    for (.@i = 0; .@i < .CYCLES; .@i++) {
        if (rand(1,2) == 1)
        	bg_monster($@FK_Team2, "012-1", rand(69, 136), rand(83, 74), "Monster Soldier", Pinkie, "Hurnsguard::OnSkip");
        else
        	bg_monster($@FK_Team2, "012-1", rand(69, 136), rand(83, 74), "Monster Soldier", MagicGoblin, "Hurnsguard::OnSkip");
    }
    // Spawn Angry Scorpions on the whole map. These monsters are neutral!
    areamonster("012-1", 33, 16, 137, 100, "Monster Soldier", AngryScorpion, .CYCLES, "Hurnsguard::OnSkip");

    // One extra guard on every summon
	bg_monster($@FK_Team1, "012-1", rand(131, 136), rand(64, 80), "Additional Guard", FallenGuard2, "Cassia::OnSkip");
    end;

OnXtreem:
    if (rand2(0,100) > 50)
        getitem StrangeCoin, 2;
    // Here, the drop is a Bronze Gift, based on living players and players nearby.
    // You have 0.1% of base chance, plus 0.2% each fighting player + 1% each near player.
    getmapxy(.@m$, .@x, .@y, 0);
    if (rand(10000) <= 10 + (getmapusers("012-1")*20) + (getareausers("012-1", .@x-8, .@x+8, .@y-8, .@y+8)*100))
        makeitem(BronzeGift, 1, "012-1", .@x, .@y);
    end;

OnVictory:
    $HURNS_LIBDATE=gettimetick(2);
    removemapflag("012-1", mf_nosave);
    disablenpc "Hurnsguard";
    pvpoff("012-1");
    removemapmask "012-1", MASK_MATTACK;
    removemapmask "012-1", MASK_EVILSANCTUM;
    //removemapflag("012-1", mf_nocommand);
    setmapflag("012-1",mf_zone,"Normal2"); // Revert MMO Zone
    removemapflag("012-1", mf_battleground);
    removemapflag("012-1", mf_bexp);
    setmapflag("012-1",mf_bexp,100);
    enablenpc "#012-1_22_62";
    enablenpc "#012-1_79_17";
    enablenpc "#012-1_79_102";
    enablenpc "#012-1_132_101";
    enablenpc "#012-1_65_55";
    enablenpc "#012-1_89_58";
    enablenpc "#012-1_101_55";
    enablenpc "#012-1_121_71";
    enablenpc "#012-1_116_66";
    enablenpc "#012-1_110_56";
    enablenpc "#012-1_102_69";
    enablenpc "Andrei Sakar";
    enablenpc "Dyrin The Traveler";
    enablenpc "Gwendolyn";
    enablenpc "Jack";
    enablenpc "Locamit";
    enablenpc "Richard";
    enablenpc "Soul Menhir#hurns";
    enablenpc "HurnsShip#M";
    enablenpc "Hinnak";
    enablenpc "Tezzerin";
    enablenpc "Luffyx";
    enablenpc "Shoppa Kep";
    announce "##2Hurnscald was recovered!", bc_all | bc_npc;
    killmonster("012-1", "All");
    changemusic "012-1", "tws_birds_in_the_sunrise.ogg"; // Play a more peaceful tune.
    stopnpctimer;
    maptimer("012-1", 10, "Hurnsguard::OnReward");
    // Here, coins drop rate are based on REMAINING PLAYERS and DEFEATED MONSTER LEVEL.
    // You have $coinsrate of base chance, plus 2% for each living player.
    // $coinsrate is set on Aeros Event Master, and defaults to 6%
    if (rand(10000) <= $coinsrate + (getmapusers("012-1")*200))
        getmapxy(.@m$, .@x, .@y, 0);
        makeitem(StrangeCoin, 1, "012-1", .@x, .@y);
    //Karma=Karma+1;
    $MOST_HEROIC$=strcharinfo(0);
    bg_destroy(1);
    bg_destroy(2);
    // Auto-schedule Liberation Day
    // a month from now, to happen on a saturday
    .@offset = gettime(GETTIME_WEEKDAY); // How long since sunday?
    .@offset += 1; // Move it to Saturday
    .@offset += 30; // Add a month
    .@offset += gettimeparam(GETTIME_DAYOFMONTH); // Apply offset to the all days
    $NLIB_SEQDAY = .@offset; // Schedule the event

    end;

OnReward:
	bg_leave();
    // Let's say we have 5 players for reference. Subtract a Game Master, he doesn't counts.
    .@Pl=getmapusers("012-1")-1;
    getexp .@Pl*600, .@Pl*30; // 3,000 exp, 150 jxp
    Zeny=Zeny+.@Pl*300; // 1,500 gp
    end;

}












//== Battleground Engine ======================
012-1,0,0,0	script	start#hurns_lib	NPC_HIDDEN,{
OnInit:
	end;

OnEnable:
	end;

OnPlayerQuit:
OnPlayerDeath:
OnPlayer2Quit:
OnPlayer2Death:
	bg_leave();
    // Check if we are done for.
    warp "000-1", 22, 22;
    .@Pl=getmapusers("012-1");
    if (.@Pl <= 1 && !$@GM_OVERRIDE) {
        announce "##1Hurnscald is lost!", bc_all | bc_npc;
        disablenpc "Hurnsguard";
        pvpoff("012-1");
        removemapmask "012-1", 10;
        removemapflag("012-1", mf_nocommand);
        removemapflag("012-1", mf_battleground);
        killmonster("012-1", "all");
        bg_destroy(1);
        bg_destroy(2);
    }
	end;

OnReadyCheck:
	.@Alliance = getwaitingroomstate(0,"Hurnsguard");
    debugmes "Check:" +str(.@Alliance)+"<"+ str($@BG1_SIZE-1);
	if ( .@Alliance < $@BG1_SIZE-1 )
		end;
	donpcevent "Hurnsguard::OnEnterBG";
	donpcevent "Lieutenant Paul::OnEnterBG";
    debugmes "Prepare Warp";
	bg_warp $@FK_Team1,"012-1",141, 65;
	bg_warp $@FK_Team2,"012-1",69, 71;
    changemusic "012-1", "misuse.ogg";
	donpcevent "Hurnsguard::OnDoEvent";
	//initnpctimer;
	end;
}









// Handle Guard's logic
function	script	CheckpointGuard	{
    mesn;
    mesq l("I am stationed here to protect Hurnscald from monsters.");
    next;
    mesn;
    mesq l("If the Monster King attack, I will try to control inbound monsters here.");
    close;
    return;
}

012-1,81,18,0	script	Checkpoint Guard#1	NPC_GUARD2,{
    CheckpointGuard();
    end;

OnInit:
    .sex = G_FEMALE;
    .distance = 5;
    end;
}


012-1,26,60,0	script	Checkpoint Guard#2	NPC_GUARD1,{
    CheckpointGuard();
    end;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    end;
}

012-1,80,98,0	script	Checkpoint Guard#3	NPC_GUARD2,{
    CheckpointGuard();
    end;

OnInit:
    .sex = G_FEMALE;
    .distance = 5;
    end;
}


012-1,134,98,0	script	Checkpoint Guard#4	NPC_GUARD1,{
    CheckpointGuard();
    end;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    end;
}

012-1,94,56,0	script	Guard#012-1.1	NPC_GUARD1,{
    .@q=getq(HurnscaldQuest_HungryGuard);
    if (.@q == 0) {
        mesn l("Guard");
        mesq l("Hey, you! Could you bring me an @@?", getitemlink(RedApple));
        next;
        mesn l("Guard");
        mesq l("I'm hungry like a bear :b");
        if (!countitem(RedApple))
            close;
        select
            l("Here, you can have this one!"),
            l("Nope, sorry!");
        mes "";
        if (@menu == 1) {
            delitem RedApple, 1;
            setq HurnscaldQuest_HungryGuard, 1;
            getexp 500, 0;
            mesn l("Guard");
            mesq l("Oooh, many thanks! ^.^");
        }
        close;
    }
    legiontalk;
    end;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    end;
}


012-1,112,65,0	script	Guard#012-1.2	NPC_GUARD2,{
    legiontalk;
    end;

OnInit:
    .sex = G_FEMALE;
    .distance = 5;
    end;
}



012-1,0,0,0	script	#HurnscaldSiege	NPC_HIDDEN,{
    end;

// Begin Siege
OnMKSiege:
    $@SIEGE_ABORTED = false;
OnStartSiege:
    kamibroadcast(col("WARNING! WARNING! Monster Army is moving towards Hurnscald!!",1));
    do_siege("012-1", "014-3", "HURNS", TP_HURNS, .name$, .siegetime);
    initnpctimer;
    end;

// Timers
OnTimer5000:
    .siegetime+=5;
    do_siege("012-1", "014-3", "HURNS", TP_HURNS, .name$, .siegetime);
    switch (.siegetime) {
    // Monster Army arrives in town
    case 60:
        disablenpc "Oscar";
        disablenpc "Gwendolyn";
        disablenpc "Milly";
        disablenpc "LOFBot";
        disablenpc "Locamit";
        disablenpc "Andrei Sakar";
        disablenpc "Luffyx";
        disablenpc "Tezzerin";
        disablenpc "Hinnak";
        disablenpc "Igor";
        disablenpc "Dyrin The Traveler";
        disablenpc "Mahad";
        disablenpc "Jack";
        break;
    // Monster Army deployed in town
    case 90:
        disablenpc "Shoppa Kep";
        disablenpc "Richard";

        disablenpc "Celestia";
        disablenpc "Airlia";
        disablenpc "Nicholas";
        disablenpc "Wyara";
        disablenpc "Alan";
        disablenpc "Khafar";
        disablenpc "Melina";
        disablenpc "Helena";
        disablenpc "Rakinorf, Mayor";
        break;
    // Monster army have withdrawn completly
    case MK_SIEGE_DURATION:
        .siegetime=0;
        announce(("Hurnscald siege is over!"), bc_all);
        enablenpc "Gwendolyn";
        enablenpc "Milly";
        enablenpc "LOFBot";
        enablenpc "Locamit";
        enablenpc "Andrei Sakar";
        enablenpc "Luffyx";
        enablenpc "Tezzerin";
        enablenpc "Hinnak";
        enablenpc "Igor";
        enablenpc "Dyrin The Traveler";
        enablenpc "Mahad";
        enablenpc "Jack";
        enablenpc "Shoppa Kep";
        enablenpc "Richard";
        enablenpc "Celestia";
        enablenpc "Airlia";
        enablenpc "Nicholas";
        enablenpc "Wyara";
        enablenpc "Alan";
        enablenpc "Khafar";
        enablenpc "Melina";
        enablenpc "Helena";
        enablenpc "Rakinorf, Mayor";
        enablenpc "Oscar";
        stopnpctimer;
        end;
        break;
    }

    // Loop again
    initnpctimer;
    end;

OnInit:
    .siegetime=0;
    end;
}