summaryrefslogblamecommitdiff
path: root/npc/003-1/ishi.txt
blob: ed16ed3627ad58ccd69554c3bb56e8703fbc1051 (plain) (tree)
1
2
3
4
5
6
7
8
9
               
          

            
  

                                      
 
                                                   
 
                       



                                                                                                                                 
                         


                                                                                                                                                                    

            
 
                         
                                         

                                                                                                       
                                                       



                                                                                  
                                     


                                                                              
     
 
                          

                                           

                                                                                                                                     


              
                         



                                                                             
                                                                                  
            


                                                                                                   
                                                                                                          
                                                                                                                 
     
                                                                                                     
 

                                              
                                     
                                            
                                     
 
                                    



                                      


                                            
                                          


                                              
                                         
                                                
                                         
     

                                    
                          
                                    

                                        
                                    
                                        
 



                                             
                                              
                                         
                                                
                                         

     
                                       

                                                                                                                                     
         
                      
                                                                 
 












                                                                          
 
                   
 
                    
               
                     

                        

                 

        
            

                


          
                                    
                   
                                      
     
                                        
                   
                   
 


                                       


                                                                      

                                 
                                                                                    

                               
                                           
                 
                                                      


             
                                                                                 

                                    
 
                                  
                                   
 

                                   
                           
 
                                 


                          

                                                                           

                   
                                                                  


         
                    


           
                                                                                     


                 
 









                            

           


                                                                        
                                                                                                                                                  






                 
                               
                                                 
                                                      

                                                              







                                            
// TMW-2 Script
// Author:
// Crazyfefe
// Jesusalva
//
// Do not add void items to the array.
// note: the rare item system sucks.

003-1,97,97,0	script	Ishi	NPC_PLAYER_ARGAES,{

    if (MPQUEST == 0) {
        mesn l("Ishi, the Rewards Master");
        mesq l("Hey, it seems like you didn't register as a Monster Hunting Quest participant yet! You can sign up with Aidan.");
        close;
    }
    if (BaseLevel < 10) {
        // TODO: make jail stuff a function and replace this with the new function
        dispbottom l("##1You abused a bug and will be jailed. If this was done in error, you have found a bug. Contact the nearest developer if this is the case.");
        atcommand "@jailfor 5mn "+strcharinfo(0);
        end;
    }

    if (BaseLevel < 37) {
        @mpq_cost=((BaseLevel*2/3) ** 2);
    } else if (BaseLevel <= 50) {
        // From level 37 onwards, we will notice a small drop on price increase factor (until level 50)
        @mpq_cost=((BaseLevel*2/3) ** 2)-(BaseLevel*2);
    } else {
        // After level 50, the formula changes. We don't have exponential anymore.
        // Previous increase reached 67 and will stop at this value.
        @mpq_cost=((50*2/3) ** 2)-(50*2);
        @mpq_cost+=(BaseLevel-50)*67;
        // Of course... We still need to act as if exponent was still there...
        // So we raise it a bit each 3 levels
        @mpq_cost+=(BaseLevel/3)*3;
    }

    if (Mobpt < @mpq_cost)
    {
        mesn l("Ishi, the Rewards Master");
        mesq l("Welcome! I see you have %d Monster Points. But that isn't enough to get items at your current level, sorry!", Mobpt);
        mesc l("I need at minimum %d Monster Points to get items at current level.",@mpq_cost);
        close;
    }

    if (BaseLevel < 25) {
        setarray @Items,   Bread,
                            Candy,Orange,BugLeg,
                            CobaltHerb,GambogeHerb,
                            MauveHerb,MaggotSlime,ScorpionStinger,SilkCocoon,
                            RustyKnife,Coral,PiouLegs,Cheese,RoastedMaggot,RawLog;
    } else {
        setarray @Items,   Bread, Croconut,Plushroom,
                            RedApple,Beer,Candy,Orange,ChocolateBar,BugLeg,CoinBag,
                            Coal,SnakeSkin,CottonCloth,GrassSeeds,HardSpike,CobaltHerb,GambogeHerb,
                            MauveHerb,CopperOre,MaggotSlime,RawLog,ScorpionStinger,SilkCocoon,TreasureKey,
                            WhiteFur,EmptyBottle,RustyKnife,Coral,PiouLegs,Cheese,SnakeEgg,RoastedMaggot,BlueDye;
    }
    setarray @Rares,   BrimmedHat, 5, IronIngot, 10, BronzeGift, 10, ScrollSMaggot, 15, MercBoxB, 15;

    // Push blueprints based on your Job Level
    array_push(@Rares, AlchemyBlueprintA);
    array_push(@Rares, (JobLevel/3));
    array_push(@Rares, EquipmentBlueprintA);
    array_push(@Rares, (JobLevel/3));

    // Additional Loot for level 45+
    if (BaseLevel >= 45) {
        array_push(@Items, IronOre);
        array_push(@Items, SilverOre);
        array_push(@Items, TinOre);
        array_push(@Items, ChocolateMouboo);
        array_push(@Items, MoubooSteak);
        array_push(@Items, Milk);
        array_push(@Items, TolchiAmmoBox);
        array_push(@Items, ShadowHerb);

        array_push(@Rares, AlchemyBlueprintB);
        array_push(@Rares, (JobLevel/6));
        array_push(@Rares, EquipmentBlueprintB);
        array_push(@Rares, (JobLevel/6));
    }

    // Additional Loot for level 75+
    if (BaseLevel >= 75) {
        array_push(@Items, LeadOre);
        array_push(@Items, TitaniumOre);
        array_push(@Items, IridiumOre);
        array_push(@Items, GoldOre);
        array_push(@Items, IronAmmoBox);

        array_push(@Rares, TulimWarpCrystal);
        array_push(@Rares, 40);
        array_push(@Rares, MercBoxA);
        array_push(@Rares, 40);
        array_push(@Rares, AlchemyBlueprintC);
        array_push(@Rares, (JobLevel/9));
        array_push(@Rares, EquipmentBlueprintC);
        array_push(@Rares, (JobLevel/9));
    }

    mesn l("Ishi, the Rewards Master");
    // Highlight the amount of monster points in bold for better visibility since players will probably exchange monster points a lot
    mesq l("Welcome! I see you have ##B%d Monster Points##b. Would you like to exchange some of those for items?", Mobpt);
    next;
    if (@mpq_cost > 0)
        mesc l("You can get up to %d items.", (Mobpt/@mpq_cost));

    menuint
        rif(Mobpt >= @mpq_cost,     "1"), 1,
        rif(Mobpt >= (@mpq_cost)*2, "2"), 2,
        rif(Mobpt >= (@mpq_cost)*3, "3"), 3,
        rif(Mobpt >= (@mpq_cost)*4, "4"), 4,
        rif(Mobpt >= (@mpq_cost)*5, "5"), 5,
        rif(Mobpt >= (@mpq_cost)*6, "6"), 6,
        rif(Mobpt >= (@mpq_cost)*7, "7"), 7,
        rif(Mobpt >= (@mpq_cost)*8, "8"), 8,
        rif(Mobpt >= (@mpq_cost)*9, "9"), 9,
        rif(Mobpt >= (@mpq_cost)*10,"10"), 10,
        rif(Mobpt >= (@mpq_cost)*11,l("Gimme as many as I deserve!")), -1,
        l("Sorry, I have to go now."), 0;

    .@var=@menuret;

    // Special cases
    if (!.@var)
        goto L_Close;
    if (.@var < 0)
        goto L_Give_all;

    goto L_Items;

L_Close:
    .@var=0;
    closedialog;
    goodbye;
    close;

L_Items:
    //debugmes "Reaching item loop";
    freeloop(true);
    for (.@i = 0; .@i < .@var; .@i ++)
    {
        //debugmes "Items: "+str(.@var);
        .@lucked=0;
        .@reward=0;

        if (BaseLevel > 25) {
            //debugmes "Testing rares";
            @lucky = rand(10000) + 1;
            for (.@b = 0; .@b < getarraysize(@Rares); .@b=.@b+2) {
                //debugmes "Checking "+@Rares[.@b]+" - b is now "+.@b;
                //debugmes l("Check @@ <= @@", @lucky, @Rares[.@b+1]);
                if (.@b == 0)
                    @control = 0;
                if(@lucky >= (@control + 1) && @lucky <= @control + (@Rares[.@b+1]))
                {
                    .@lucked=1;
                    .@reward = @Rares[.@b];
                }
                @control = @control + (@Rares[.@b+1]);
            }
        }

        //debugmes "Setting reward"; // could be if (!.@lucked) but for sanity...
        if (!.@reward)
            .@reward=any_of(@Items);

        //debugmes "Check weight";
        inventoryplace .@reward, 1;

        //debugmes "Processing...";
        Mobpt = Mobpt - @mpq_cost;
        getitem .@reward,1;

        //debugmes "Printing...";
        if (.@lucked) {
            mes "";
            mes l("Wow!");
            mes l("I can't believe it.");
            mes l("You got lucky and got a(n) %s!", getitemlink(.@reward));
            mes "";
        } else {
            mesq l("You received one %s!", getitemlink(.@reward));
        }

    }
    freeloop(false);
    close;

L_Continue:
    mesq l("You still have ##B%d Monster Points##b! Do you want more items?", Mobpt);
    select
        l("Yes"),
        l("No");

    switch (@menu)
    {
        case 1:
            goto L_Give_all;
            break;
        case 2:
            goto L_Close;
            break;
    }
    close;

L_Give_all:
    .@var = Mobpt / @mpq_cost;
    if (.@var > 50) { // limit to avoid lag server. Probably a bad idea.
        .@var = 50;
        mes l("You have too many points. I can't allow you to take all at once right now. I'll try to give you 50, and you can come back later!");
        next;
    }

    goto L_Items;
    close;

OnInit:
    .@npcId = getnpcid(.name$);
    //setunitdata(.@npcId, UDT_HEADTOP, NPCEyes);
    setunitdata(.@npcId, UDT_HEADMIDDLE, CopperArmor);
    setunitdata(.@npcId, UDT_HEADBOTTOM, CottonTrousers);
    setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); // Boots
    setunitdata(.@npcId, UDT_HAIRSTYLE, 4);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 13);

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