summaryrefslogblamecommitdiff
path: root/world/map/npc/031-4/cindyCave.txt
blob: c724733a338e75b8d3394c1d723fb8ef0d6114f0 (plain) (tree)
1
2
3
4
5
6
7
8
9
                  

                                                           

                                                                              
 

                                              
 
                         
                      
 

                                               
 
                                                                                                 
 

                                        

                                                

                                               
 


                                                                                                                                               
                 

              













                                                                                                                                               

                         

           
                              


                                                



                                                                                    

                                 
                                  




                               
                                                            

                                                                            

                 
 
       

                                    
                 
 
         





                                                                                            

                                    

                          

                          



                             
 
             




                                                                                     
 
        


                                                                                      
                 
 
               

                                                                                                       
                 
 
          
                                                                              
                 

                  
                                                       
                 

           
                                                                                                   











                                  
          
 
                              
            
                  


                                 
           


                                                             

            
                                                          



                                       
                                                                                    
                                                       


                                                                 
                    

           

                                                 





                                  



                                                                                                                                
                                                                                               














































                                                                                                    


                                             
                      

                                                                 

           

                                       
 
          


                                                               
                             
                                    


                                  



                                                 

         
                      
                              

                                                                                                                          


                                                                                                 
                            
                   


                                                                                         




                                  
        

         
              



                                                        
 
// author: Jenalya
// state0: Cindy is totally scared and does nothing helpful
// state1: you are able to open the cage
// state2: Cindy is saved, she gives you a reward (wizard hat or wooden staff)
// state3: and greater: Cindy is saved, she asks you to visit them

031-4.gat,42,42,0|script|Cindy|198, {
    if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti;

    set @KEYS_AMOUNT, 10;
    set @minlevel, 70;

    set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
    set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;

    set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);

    if (Sex == 0) set @title$, "Misses";
    if (Sex == 1) set @title$, "Mister";

    if (@rescue_Cindy >= 3) goto L_Please_Visit;
    if (@rescue_Cindy == 2) goto L_Reward;
    if (@rescue_Cindy == 1) goto L_Please_Help;

    mes "There is a little girl in a cage. As you come near, she starts to shiver and back off from you as far as she can in that small cage.";
    next;
    mes "You don't know what to do.";
    goto L_Close;

L_Please_Help:
    mes "There is a little girl in a cage. As you come near, she starts to shiver and back off from you as far as she can in that small cage.";
    next;
    menu
        "Hello Cindy, I'm here to save you.", - ;
    mes "Cindy doesn't look so scared anymore.";
    next;
    mes "[Cindy]";
    mes "\"Hello, dear " + @title$ + " adventurer. Did my mother send you?\"";
    next;
    mes "\"It's so cold in here! Can you please open the cage?\"";
    next;
    mes "\"But be careful. If the Yetis hear you, they will come!\"";
    menu
        "Try to open the cage", L_Try_Cage,
        "Leave", L_Close;
    goto L_Close;

L_Try_Cage:
    if (BaseLevel < @minlevel)
        goto L_To_Weak;
    if (countitem("TreasureKey") < @KEYS_AMOUNT)
        goto L_Not_Enough_Keys;
    delitem "TreasureKey", @KEYS_AMOUNT;
    mes "As you try to open the door of the cage, there is a loud squeaking noise.";
    next;
    mes "You get an uncomfortable feeling and Cindy starts to shiver.";
    if ($@FIGHT_YETI_STATUS != 0)
        goto L_Yeti;
    npctalk "Oh no, the Yetis...";

    // initialize fight
    set $@FIGHT_YETI_STATUS, 1;
    set $@FIGHT_YETI_WAVE, 0;
    set $@YETI_COUNT, 1;
    set $@FIGHT_YETI_PLAYER_COUNT, getmapusers("031-4.gat");
    areamonster "031-4.gat", 0, 0, 95, 91, "", 1072, 1, "Cindy::onPetDeath";

    initnpctimer;
    goto L_Close;

L_Yeti:
    mes "[Cindy]";
    mes "\"Watch out, the Yetis!\"";
    goto L_Close;

L_Reward:
    mes "[Cindy]";
    mes "\"You are a hero! All these strong monsters!\"";
    next;
    mes "\"I've found this thing in the cave - it looks valuable. I want you to have it.\"";
    next;
    getinventorylist;
    if (@inventorylist_count == 100)
        goto L_Full_Inv;

    set @reward, rand(15);
    if (@reward < 10)
        goto L_Wizard_Hat;
    getitem "WoodenStaff", 1;
    set @rescue_Cindy, 3;
    callsub S_Update_Mask;
    goto L_Visit;

L_Wizard_Hat:
    // get a wizard hat in one of the ten colors - no white
    setarray @wizardhats, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209;
    getitem @wizardhats[@reward], 1;
    set @rescue_Cindy, 3;
    callsub S_Update_Mask;

L_Visit:
    mes "\"Thank you so much; please come to my home. It's the house at the beach.\"";
    next;
    mes "\"I'm sure my mother wants to thank you as well.\"";
    goto L_Close;

L_Please_Visit:
    mes "[Cindy]";
    mes "\"Thank you, thank you! You're a hero! Please come home with me to our house at the beach!\"";
    goto L_Close;

L_To_Weak:
    mes "You try to open the cage, but it's stuck. It seems you're too weak!";
    goto L_Close;

L_Not_Enough_Keys:
    mes "You don't have enough keys to open the cage.";
    goto L_Close;

L_Full_Inv:
    mes "\"Oh, it seems you carry so much stuff - I will keep it for you until you can take it.\"";
    goto L_Close;

L_Close:
    set @KEYS_AMOUNT, 0;
    set @Q_Nivalis_state_MASK, 0;
    set @Q_Nivalis_state_SHIFT, 0;
    set @rescue_Cindy, 0;
    set @title$, "";
    set @minlevel, 0;
    set @inventorylist_count, 0;
    cleararray @wizardhats, 0, 10;
    set @reward, 0;
    close;

// Fight logic attached to npc
OnTimer5000:
    setnpctimer 0;
    if ($@FIGHT_YETI_STATUS != 0)
        goto L_CaveLogic;

L_Return_1:
    set $@FIGHT_YETI_PLAYER_COUNT, 0;
    areatimer "031-4.gat", 0, 0, 95, 91, 10, "Cindy::onTick";
    end;

L_CaveLogic:
    set $@FIGHT_YETI_ROUND_PEN, $@FIGHT_YETI_PLAYER_COUNT;
    if ($@FIGHT_YETI_ROUND_PEN > 60)
        set $@FIGHT_YETI_ROUND_PEN, 60;
    if ($@FIGHT_YETI_PLAYER_COUNT <= 0)
        goto L_CleanUp;
    set $@FIGHT_YETI_ROUND_TIMER, $@FIGHT_YETI_ROUND_TIMER + 5; // Advance 5 seconds
    if (mobcount("031-4.gat", "Cindy::onPetDeath") < 0)
        goto L_NextWave;
    if ($@FIGHT_YETI_ROUND_TIMER + $@FIGHT_YETI_ROUND_PEN >= 120)
        goto L_NextWave;
    goto L_Return_1;

L_NextWave:
    set $@FIGHT_YETI_ROUND_TIMER, 0;
    set $@FIGHT_YETI_WAVE, $@FIGHT_YETI_WAVE + 1;
    if ($@FIGHT_YETI_WAVE > 10
        && $@YETI_COUNT == 0)
            goto L_CleanUp;
    if ($@FIGHT_YETI_WAVE > 10
        && $@FIGHT_YETI_WAVE < 22)
            goto L_Return_1;
    if ($@FIGHT_YETI_WAVE > 22)
        areamonster "031-4.gat", 0, 0, 95, 91, "", 1072, $@FIGHT_YETI_WAVE*2 + $@FIGHT_YETI_PLAYER_COUNT*5, "Cindy::onPetDeath";
    if ($@FIGHT_YETI_WAVE > 22)
        set $@YETI_COUNT, $@YETI_COUNT + $@FIGHT_YETI_WAVE*2 + $@FIGHT_YETI_PLAYER_COUNT*5;
    set $@FIGHT_YETI_NUMBER, (5 + (1 * $@FIGHT_YETI_WAVE) + (2 * $@FIGHT_YETI_PLAYER_COUNT))/4;
    set $@YETI_COUNT, $@YETI_COUNT + $@FIGHT_YETI_NUMBER;

    areamonster "031-4.gat", 0, 0, 95, 91, "", 1072, $@FIGHT_YETI_NUMBER, "Cindy::onPetDeath";

    if ($@FIGHT_YETI_WAVE == 1)
        mapannounce "031-4.gat", "Cindy: Yetis!", 0;
    if ($@FIGHT_YETI_WAVE == 2)
        mapannounce "031-4.gat", "Cindy: Watch out!", 0;
    if ($@FIGHT_YETI_WAVE == 3)
        mapannounce "031-4.gat", "Cindy: More of them are coming!", 0;
    if ($@FIGHT_YETI_WAVE == 4)
        mapannounce "031-4.gat", "Cindy: Be careful! More of them!", 0;
    if ($@FIGHT_YETI_WAVE == 5)
        mapannounce "031-4.gat", "Cindy: Attention! There is another bunch of them!", 0;
    if ($@FIGHT_YETI_WAVE == 6)
        mapannounce "031-4.gat", "Cindy: Hang on! More of them!", 0;
    if ($@FIGHT_YETI_WAVE == 7)
        mapannounce "031-4.gat", "Cindy: More Yetis! Will this never end?", 0;
    if ($@FIGHT_YETI_WAVE == 8)
        mapannounce "031-4.gat", "Cindy: There are coming more and more!", 0;
    if ($@FIGHT_YETI_WAVE == 9)
        mapannounce "031-4.gat", "Cindy: Watch your back! There are so many of them!", 0;
    if ($@FIGHT_YETI_WAVE == 10)
        mapannounce "031-4.gat", "Cindy: This seems to be their final attack! I believe in you!", 0;

    if ($@FIGHT_YETI_WAVE == 1)
        mapannounce "031-3.gat", "Cindy: Yetis!", 0;
    if ($@FIGHT_YETI_WAVE == 2)
        mapannounce "031-3.gat", "Cindy: Watch out!", 0;
    if ($@FIGHT_YETI_WAVE == 3)
        mapannounce "031-3.gat", "Cindy: More of them are coming!", 0;
    if ($@FIGHT_YETI_WAVE == 4)
        mapannounce "031-3.gat", "Cindy: Be careful! More of them!", 0;
    if ($@FIGHT_YETI_WAVE == 5)
        mapannounce "031-3.gat", "Cindy: Attention! There is another bunch of them!", 0;
    if ($@FIGHT_YETI_WAVE == 6)
        mapannounce "031-3.gat", "Cindy: Hang on! More of them!", 0;
    if ($@FIGHT_YETI_WAVE == 7)
        mapannounce "031-3.gat", "Cindy: More Yetis! Will this never end?", 0;
    if ($@FIGHT_YETI_WAVE == 8)
        mapannounce "031-3.gat", "Cindy: There are coming more and more!", 0;
    if ($@FIGHT_YETI_WAVE == 9)
        mapannounce "031-3.gat", "Cindy: Watch your back! There are so many of them!", 0;
    if ($@FIGHT_YETI_WAVE == 10)
        mapannounce "031-3.gat", "Cindy: This seems to be their final attack! I believe in you!", 0;

    goto L_Return_1;

// Called on each player once every 5 seconds
onTick:
    if (isdead()) end;
    set $@FIGHT_YETI_PLAYER_COUNT, $@FIGHT_YETI_PLAYER_COUNT + 1;
    end;

onPetDeath:
    set $@YETI_COUNT, $@YETI_COUNT - 1;
    end;

L_CleanUp:
    areatimer "031-4.gat", 0, 0, 95, 91, 10, "Cindy::onReward";
    set $@FIGHT_YETI_STATUS, 0;
    set $@FIGHT_YETI_PLAYER_COUNT, 0;
    set $@FIGHT_YETI_WAVE, 0;
    set $@FIGHT_YETI_ROUND_TIMER, 0;
    set $@YETI_COUNT, 0;
    set $@FIGHT_YETI_ROUND_PEN, 0;
    set $@FIGHT_YETI_NUMBER, 0;
    killmonster "031-4.gat", "Cindy::onPetDeath";
    stopnpctimer;
    setnpctimer 0;
    end;

onReward:
    if (isdead()) end;
    set @bonus, (BaseLevel/2);
    set DailyQuestBonus, DailyQuestBonus + @bonus;
    message strcharinfo(0), "You feel a temporary rush of power and zest for action. " + @bonus + " daily bonus gained." ;
    set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
    set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
    set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
    if (@rescue_Cindy != 1 )
        goto L_End;
    set @rescue_Cindy, 2;
    callsub S_Update_Mask;
    message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you.";
L_End:
    set @bonus, 0;
    set @Q_Nivalis_state_MASK, 0;
    set @Q_Nivalis_state_SHIFT, 0;
    set @rescue_Cindy, 0;
    end;

/////////
S_Update_Mask:
    set QUEST_Nivalis_state,
        (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))
            | (@rescue_Cindy << @Q_Nivalis_state_SHIFT);
    return;
}