//
029-1,47,97,0|script|Ishi|106
{
if (MPQUEST == 0) goto L_Register;
if (tvis == 0) set tvis, 1;
if (Mobpt < tvis) goto L_NotEnough;
setarray @Items$, "AppleCake", "Arrow", "Beer", "Boots", "InsectLeg", "CactusDrink", "CactusPotion", "Cake", "Candy", "CasinoCoins", "CherryCake", "BirdLeg", "ChocolateBar", "ChocolateCake", "CottonBoots", "CottonCloth", "CottonShirt", "CottonShorts", "FancyHat", "GreenApple", "HardSpike", "IronOre", "Lifestone", "LightBlueDye", "InsectSlime", "Milk", "Orange", "OrangeCake", "OrangeCupcake", "PinkPetal", "PileOfAsh", "PinkAntenna", "PoltergeistPowder", "RawLog", "RedApple", "RedDye", "ScorpionStinger", "SerfHat", "SmallHealingPotion", "SmallMushroom", "SnakeSkin", "SpectrePowder", "Steak", "TinyHealingPotion", "WhiteCake", "WhiteFur", "WispPowder", "YellowDye", "Coal", "ManaDust";
mes "[Ishi the Rewards Master]";
mes "\"Welcome! I see you have " + Mobpt + " Monster Points. Would you like to exchange some of those for items?\"";
next;
set @i, 0;
setarray @Menu$, "", "", "", "", "", "", "", "", "", "", "", "";
callsub S_prep_menu;
menu
@Menu$[0], L_MenuItems,
@Menu$[1], L_MenuItems,
@Menu$[2], L_MenuItems,
@Menu$[3], L_MenuItems,
@Menu$[4], L_MenuItems,
@Menu$[5], L_MenuItems,
@Menu$[6], L_MenuItems,
@Menu$[7], L_MenuItems,
@Menu$[8], L_MenuItems,
@Menu$[9], L_MenuItems,
@Menu$[10], L_MenuItems,
@Menu$[11], L_MenuItems;
L_MenuItems:
// this is for the last entry "No thanks":
if (@menu > @i) goto L_Close;
// this is for the "Give all" entry:
if (@menu == 11) goto L_Give_all;
set @req, @menu;
set @rec, 0;
goto L_Item_Loop;
L_Item_Loop:
if (@rec == @req || Mobpt < tvis) goto L_Item_Done;
callsub S_give_item;
set @rec, @rec + 1;
goto L_Item_Loop;
L_Item_Done:
if (@rec < @req) mes "It looks like your Monster Points were over estimated.";
goto L_Close;
L_Register:
mes "[Ishi the Rewards Master]";
mes "\"Hey, it seems like you didn't register as a quest participant yet! You can sign up with Aidan.\"";
goto L_Close;
L_NotEnough:
mes "[Ishi the Rewards Master]";
mes "\"You don't have enough Monster Points for a reward. You'll need to kill some more monsters first.\"";
goto L_Close;
L_Give_all:
// we need to count how many loop iterations are done there,
// since the server complains about more than 250 (70 according to Jaxad0127)
// gotos without interrupting next statement.
set @gotocounter, 50;
goto L_Give_all_loop;
L_Give_all_loop:
set @gotocounter, @gotocounter - 1;
if (@gotocounter < 1) goto L_Give_all_next;
set @itemgiveerror, 0;
callsub S_give_item;
if (@itemgiveerror != 0) goto L_Close;
goto L_Give_all_loop;
L_Give_all_next:
next;
mes "[Ishi the Rewards Master]";
mes "\"You have received a lot of items. You still have " + Mobpt + " monster points. Shall we continue?\"";
menu
"Yes", L_Give_all,
"No", L_Close;
L_Close:
set @gotocounter, 0;
set @itemgiveerror, 0;
set @pts, 0;
set @dif, 0;
set @i, 0;
cleararray @Menu$[0], "", 10;
cleararray @Items$[0], "", 10;
close;
//////////////////////////////////////////////////
// Subroutines
//////////////////////////////////////////////////
S_prep_menu:
set @pts, Mobpt;
set @dif, tvis;
goto L_Menu_Loop;
L_Menu_Loop:
if (@pts < @dif || @i == 10) goto L_Menu_Check;
set @Menu$[@i], @i + 1;
set @i, @i + 1;
set @pts, @pts - @dif;
set @dif, @dif + 1;
goto L_Menu_Loop;
L_Menu_Check:
// if we are able to give 10, we can enable the option to give all we can have
if (@i != 10) goto L_Menu_Done;
set @Menu$[@i], "Please give me as many as I deserve!";
set @i, @i + 1;
goto L_Menu_Done;
L_Menu_Done:
set @Menu$[@i], "No thanks";
return;
S_give_item:
set @itemgiveerror, 0;
getinventorylist;
if (@inventorylist_count == 100) goto S_give_noinv;
if (Mobpt < tvis) goto S_give_nomobpts;
set Mobpt, Mobpt - tvis;
set tvis, tvis + 1;
set @item$, @Items$[rand(getarraysize(@Items$))];
getitem @item$, 1;
mes "You received one " + getitemlink(@item$) + "!";
return;
S_give_noinv:
mes "Your inventory is full!";
set @itemgiveerror, 1;
return;
S_give_nomobpts:
mes "It looks like your Monster Points were over estimated.";
set @itemgiveerror, 1;
return;
}