summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Beller <stefanbeller@googlemail.com>2010-12-04 17:30:14 +0100
committerStefan Beller <stefanbeller@googlemail.com>2011-01-02 21:21:17 +0100
commit1d4add86fd5182a0501cda01da154921843ff9a2 (patch)
tree96328792f4035bfc920947b86bbd7a9e9962d742
parentbb0fdcdda1750458cd4cbd64931e6d17850bf442 (diff)
downloadserverdata-1d4add86fd5182a0501cda01da154921843ff9a2.tar.gz
serverdata-1d4add86fd5182a0501cda01da154921843ff9a2.tar.bz2
serverdata-1d4add86fd5182a0501cda01da154921843ff9a2.tar.xz
serverdata-1d4add86fd5182a0501cda01da154921843ff9a2.zip
ishi improved
Ishi now checks your inventory before giving you items! (if there is space in the inventory) The option to get all items was added as well. Coal was added to the list as well.
-rw-r--r--npc/001-1_Tulimshar/rewards_master.txt84
1 files changed, 68 insertions, 16 deletions
diff --git a/npc/001-1_Tulimshar/rewards_master.txt b/npc/001-1_Tulimshar/rewards_master.txt
index 571fe1c8..bd55b0ae 100644
--- a/npc/001-1_Tulimshar/rewards_master.txt
+++ b/npc/001-1_Tulimshar/rewards_master.txt
@@ -5,16 +5,16 @@
if (tvis == 0) set tvis, 1;
if (Mobpt < tvis) goto L_NotEnough;
- setarray @Items$, "AppleCake", "Arrow", "Beer", "Boots", "BugLeg", "CactusDrink", "CactusPotion", "Cake", "Candy", "CasinoCoins", "CherryCake", "ChickenLeg", "ChocolateBar", "ChocolateCake", "CottonBoots", "CottonCloth", "CottonShirt", "CottonShorts", "FancyHat", "GreenApple", "HardSpike", "IronOre", "Lifestone", "LightBlueDye", "MaggotSlime", "Milk", "Orange", "OrangeCake", "OrangeCupcake", "PinkPetal", "PileOfAsh", "PinkAntenna", "PoltergeistPowder", "RawLog", "RedApple", "RedDye", "ScorpionStinger", "SerfHat", "SmallHealingPotion", "SmallMushroom", "SnakeSkin", "SpectrePowder", "Steak", "TinyHealingPotion", "WhiteCake", "WhiteFur", "WispPowder", "YellowDye";
+ setarray @Items$, "AppleCake", "Arrow", "Beer", "Boots", "BugLeg", "CactusDrink", "CactusPotion", "Cake", "Candy", "CasinoCoins", "CherryCake", "ChickenLeg", "ChocolateBar", "ChocolateCake", "CottonBoots", "CottonCloth", "CottonShirt", "CottonShorts", "FancyHat", "GreenApple", "HardSpike", "IronOre", "Lifestone", "LightBlueDye", "MaggotSlime", "Milk", "Orange", "OrangeCake", "OrangeCupcake", "PinkPetal", "PileOfAsh", "PinkAntenna", "PoltergeistPowder", "RawLog", "RedApple", "RedDye", "ScorpionStinger", "SerfHat", "SmallHealingPotion", "SmallMushroom", "SnakeSkin", "SpectrePowder", "Steak", "TinyHealingPotion", "WhiteCake", "WhiteFur", "WispPowder", "YellowDye", "Coal";
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 SUB_prep_menu;
-
+
menu
@Menu$[0], -,
@Menu$[1], -,
@@ -26,20 +26,24 @@
@Menu$[7], -,
@Menu$[8], -,
@Menu$[9], -,
- @Menu$[10], -;
+ @Menu$[10], -,
+ @Menu$[11], -;
+ // this is for the last entry "No thanks":
if (@menu > @i) close;
-
+ // this is for the "Give all" entry:
+ if (@menu == @i) goto L_Give_all;
+
set @req, @menu;
set @rec, 0;
-
+
L_Item_Loop:
if (@rec == @req || Mobpt < tvis) goto L_Item_Done;
-
+
callsub SUB_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.";
close;
@@ -54,6 +58,34 @@ L_NotEnough:
mes "\"You don't have enough Monster Points for a reward. You'll need to kill some more monsters first.\"";
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;
+
+L_Give_all_loop:
+ set @gotocounter, @gotocounter - 1;
+ if (@gotocounter < 1) goto L_Give_all_next;
+ set @itemgiveerror, 0;
+ callsub SUB_give_item;
+ if (@itemgiveerror != 0) goto L_Give_all_done;
+ goto L_Give_all_loop;
+
+L_Give_all_next:
+ next;
+ mes "[Ishi the Rewards Master]";
+ mes "\"You have brought lots of items now. You have still " + Mobpt + " monster points. Shall we continue?\"";
+ menu
+ "yes", L_Give_all,
+ "no", L_Give_all_done;
+ close;
+
+L_Give_all_done:
+ close;
+
//////////////////////////////////////////////////
// Subroutines
//////////////////////////////////////////////////
@@ -61,29 +93,49 @@ L_NotEnough:
SUB_prep_menu:
set @pts, Mobpt;
set @dif, tvis;
-
+
L_Menu_Loop:
- if (@pts < @dif || @i == 10) goto L_Menu_Done;
-
+ 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;
+
L_Menu_Done:
set @Menu$[@i], "No thanks";
return;
SUB_give_item:
+ set @itemgiveerror, 0;
+ getinventorylist;
+ if (@inventorylist_count == 100) goto SUB_give_noinv;
+ if (Mobpt < tvis) goto SUB_give_nomobpts;
set Mobpt, Mobpt - tvis;
set tvis, tvis + 1;
set @item$, @Items$[rand(getarraysize(@Items$))];
-
+
getitem @item$, 1;
-
+
mes "You received one " + getitemname(@item$) + "!";
-
+ return;
+
+SUB_give_noinv:
+ mes "Your inventory is full!";
+ set @itemgiveerror, 1;
+ return;
+
+SUB_give_nomobpts:
+ mes "It looks like your Monster Points were over estimated.";
+ set @itemgiveerror, 1;
return;
}