// 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; }