// TMW-2 Script
// Author:
// Crazyfefe
// Jesusalva
//
// Do not add void items to array.
// note : the rare item system suck.
003-1,97,97,0 script Ishi NPC_PLAYER,{
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) {
dispbottom l("##1Bug abuser detected! Automatically banning!!");
atcommand "@ban 5mn "+strcharinfo(0);
end;
}
if (BaseLevel < 37) {
@mpq_cost=((BaseLevel*2/3) ** 2);
} else { // From level 37 onwards, we will notice a small drop on price increase factor
@mpq_cost=((BaseLevel*2/3) ** 2)-(BaseLevel*2);
}
if (Mobpt < @mpq_cost)
{
mesn l("Ishi, the Rewards Master");
mesq l("Welcome! I see you have @@ Monster Points. But that isn't enough to get items at your current level, sorry!", Mobpt);
mesc l("I need at minimum @@ 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";
} else {
setarray @Items$, "Bread", "Croconut","Plushroom",
"RedApple","Beer","Candy","Orange","ChocolateBar","BugLeg","CoinBag",
"Coal","SnakeSkin","CottonCloth","GrassSeeds","HardSpike","CobaltHerb","GambogeHerb",
"MauveHerb","IronOre","MaggotSlime","RawLog","ScorpionStinger","SilkCocoon","TreasureKey",
"WhiteFur","EmptyBottle","RustyKnife","Coral","PiouLegs","Cheese","SnakeEgg","RoastedMaggot","BlueDye";
}
setarray @Rares$, "BrimmedHat", 5, "IronIngot", 10, "BronzeGift", 10, "Grenade", 15;
mesn l("Ishi, the Rewards Master");
mesq l("Welcome! I see you have @@ Monster Points. Would you like to exchange some of those for items?", Mobpt);
next;
do
{
select
rif(Mobpt >= @mpq_cost, "1"),
rif(Mobpt >= (@mpq_cost)*2, "2"),
rif(Mobpt >= (@mpq_cost)*3, "3"),
rif(Mobpt >= (@mpq_cost)*4, "4"),
rif(Mobpt >= (@mpq_cost)*5, "5"),
rif(Mobpt >= (@mpq_cost)*6, "6"),
rif(Mobpt >= (@mpq_cost)*7, "7"),
rif(Mobpt >= (@mpq_cost)*8, "8"),
rif(Mobpt >= (@mpq_cost)*9, "9"),
rif(Mobpt >= (@mpq_cost)*10,"10"),
rif(Mobpt >= (@mpq_cost)*11,l("Gimme as many as I deserve!")),
l("Sorry, I have to go now.");
switch (@menu)
{
case 1 :
@var = 1;
goto L_Items;
break;
case 2 :
@var = 2;
goto L_Items;
break;
case 3 :
@var = 3;
goto L_Items;
break;
case 4 :
@var = 4;
goto L_Items;
break;
case 5 :
@var = 5;
goto L_Items;
break;
case 6 :
@var = 6;
goto L_Items;
break;
case 7 :
@var = 7;
goto L_Items;
break;
case 8 :
@var = 8;
goto L_Items;
break;
case 9 :
@var = 9;
goto L_Items;
break;
case 10 :
@var = 10;
goto L_Items;
break;
case 11 :
goto L_Give_all;
break;
default :
goto L_Close;
break;
}
} while (@menu != 12);
closedialog;
goodbye;
close;
L_Close:
@var =0;
close;
L_Items:
//debugmes "Reaching item loop";
for (.@i = 0; .@i < @var; .@i ++)
{
//debugmes "Items: "+str(@var);
.@lucked=0;
.@reward$="";
getinventorylist;
if (@inventorylist_count == 100)
goto L_NoPlace;
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 + atoi(@Rares$[.@b+1]))
{
.@lucked=1;
.@reward$ = @Rares$[.@b];
}
@control = @control + atoi(@Rares$[.@b+1]);
}
}
//debugmes "Setting reward"; // could be if (!.@lucked) but for sanity...
if (.@reward$ == "")
set .@reward$, @Items$[rand(getarraysize(@Items$))];
//debugmes "Check weight";
.@weight = checkweight(.@reward$,1);
if (!.@weight)
goto L_NoPlaceWeight;
//debugmes "Processing...";
Mobpt = Mobpt - @mpq_cost;
getitem .@reward$,1;
//debugmes "Printing...";
if (.@lucked) {
mes "";
mes l("Wow!");
mes l("I can't believe.");
mes l("you got lucky and got a(n) @@!", getitemlink(.@reward$));
mes "";
} else {
mesq l("You received one @@!", getitemlink(.@reward$));
}
}
close;
L_Continue:
mesq l("You still have @@ Monster Points! Do you want more items?", Mobpt);
do
{
select
l("Yes"),
l("No");
switch (@menu)
{
case 1:
goto L_Give_all;
break;
case 2:
goto L_Close;
break;
}
} while (@menu != 2);
L_NoPlace :
mesq l("You seem to run out of place, you should go to the storage.");
close;
L_NoPlaceWeight :
mesq l("You can't carry more items, you should go to the storage.");
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 much points. I can't allow you to take all at once right now. I'll try to give you 50, and you 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;
}