summaryrefslogtreecommitdiff
path: root/world/map/npc/052-2/storage.txt
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc/052-2/storage.txt')
-rw-r--r--world/map/npc/052-2/storage.txt188
1 files changed, 188 insertions, 0 deletions
diff --git a/world/map/npc/052-2/storage.txt b/world/map/npc/052-2/storage.txt
new file mode 100644
index 00000000..e914635b
--- /dev/null
+++ b/world/map/npc/052-2/storage.txt
@@ -0,0 +1,188 @@
+//-----------------------------------------------------------------------------
+// Illia Forsaken Inn - Storage
+// $@illia_progress = 6
+//
+// Level progress:
+// 0: Initial state
+// 1: Items and/or mobs are spawned
+// 2: All spawns are done and the players killed all mobs
+//-----------------------------------------------------------------------------
+
+052-2.gat,23,69,0|script|#TriggerItemsInvoker|32767,1,0,{
+ set @step, 6;
+ if ($@illia_progress < @step) goto L_ShouldNotBeHere;
+ if (strcharinfo(0) != $@ILLIA_HERO$) end;
+ if ($@illia_level_6_progress == 0) goto L_StartItemInvoker;
+ end;
+
+L_ShouldNotBeHere:
+ percentheal -100, 0;
+ end;
+
+L_StartItemInvoker:
+ set $@illia_level_6_progress, 1;
+ cmdothernpc "#ItemsInvoker", "Start";
+ end;
+
+}
+
+052-2.gat,1,1,0|script|#ItemsInvoker|127,{
+end;
+
+onInit:
+ setarray $@illia_storage_items, 541, 567, 568, 562;
+ setarray $@illia_storage_special_items, 687, 827, 1229;
+ // Map coords : x1,y1, x2,y2, ...
+ setarray $@illia_storage_item_points, 20,67, 22,75, 27,71, 30,73, 34,76, 30,64, 34,65, 34,62, 21,61, 22,64;
+ end;
+
+OnCommandStart:
+ set $@illia_storage_max_items, 20;
+ set $@illia_storage_deviation, (8 + ($Illia_Luvia_Harvest*70)/100)*3;
+ initnpctimer;
+ areatimer "052-2.gat", 19, 60, 35, 78, 10, "#ItemsInvoker::onStart";
+ end;
+
+onStart:
+ message strcharinfo(0), "You feel a strange atmosphere in this room... You sense a strong magic rising from the depth!";
+ end;
+
+OnTimer1000:
+ if ($@illia_storage_max_items == 0)
+ goto L_CheckMobs;
+ set $@item_invoke_index, rand(getarraysize($@illia_storage_item_points)/2);
+ set $@item_invoke_x, $@illia_storage_item_points[$@item_invoke_index*2];
+ set $@item_invoke_y, $@illia_storage_item_points[($@item_invoke_index*2)+1];
+ npcwarp $@item_invoke_x, $@item_invoke_y, "#ItemsInvoker";
+ // This is a fix to force the official mana client to display a npc after a warp.
+ // Note: the manaplus client do not need this.
+ disablenpc "#ItemsInvoker";
+ end;
+
+OnTimer1500:
+ // See the note above.
+ enablenpc "#ItemsInvoker";
+ areatimer "052-2.gat", 19, 60, 35, 78, 10, "#ItemsInvoker::onItem";
+ misceffect FX_GROUND_SPAWN;
+ end;
+
+OnTimer3750:
+ setnpctimer 0;
+ set $@item_invoke_x, 0;
+ set $@item_invoke_y, 0;
+ set $@item_invoke_index, 0;
+ end;
+
+onItem:
+ if (strcharinfo(0) == $@ILLIA_HERO$)
+ goto L_ItemSpawn;
+ end;
+
+L_ItemSpawn:
+ // This section will decide what to spawn: special monster, monster, item, special item
+ // Calculation uses a decreasing variable which introduces a deviation.
+ // Its initial value is based on $@Illia_Luvia_Harvest
+ // * first decide (50% / 50%) if the deviation will be positive or negative
+ // * Apply the deviation to a random number between 0, 100. (note the final value can be < 0 or > 100)
+ // The purpose is that, when the initial deviation is high, there are high chances to get either
+ // a special monster, or a special item.
+ set @m, rand(100);
+ if (@m < 50)
+ set @r, rand(100) - $@illia_storage_deviation;
+ if (@m >= 50)
+ set @r, rand(100) + $@illia_storage_deviation;
+ // Reduce the deviation
+ set $@illia_storage_deviation, $@illia_storage_deviation*83/100;
+ if (@r < 5)
+ goto L_MakeSpecialMonster;
+ if (@r < 50)
+ goto L_MakeMonster;
+ if (@r > 98)
+ goto L_MakeSpecialItem;
+ // Normal item
+ makeitem $@illia_storage_items[rand(getarraysize($@illia_storage_items))], rand(2, 8), "052-2.gat", $@item_invoke_x, $@item_invoke_y;
+ set $@illia_storage_max_items, $@illia_storage_max_items - 1;
+ set @r, 0;
+ end;
+
+L_MakeSpecialMonster:
+ monster "052-2.gat", $@item_invoke_x, $@item_invoke_y, "", 1103, 1, "#ItemsInvoker::onDeath";
+ areatimer "052-2.gat", 19, 60, 35, 78, 10, "#ItemsInvoker::onWtf";
+ set $@illia_storage_max_items, $@illia_storage_max_items - 1;
+ end;
+
+L_MakeMonster:
+ monster "052-2.gat", $@item_invoke_x, $@item_invoke_y, "", 1101, rand(1, 3), "#ItemsInvoker::onDeath";
+ set $@illia_storage_max_items, $@illia_storage_max_items - 1;
+ set @r, 0;
+ end;
+
+L_MakeSpecialItem:
+ makeitem $@illia_storage_special_items[rand(getarraysize($@illia_storage_special_items))], rand(2, 4), "052-2.gat", $@item_invoke_x, $@item_invoke_y;
+ areatimer "052-2.gat", 19, 60, 35, 78, 10, "#ItemsInvoker::onWow";
+ set $@illia_storage_max_items, $@illia_storage_max_items - 1;
+ set @r, 0;
+ end;
+
+L_CheckMobs:
+ if ($@illia_progress != 6)
+ goto L_Clear;
+ if (mobcount("052-2.gat", "#ItemsInvoker::onDeath") < 0)
+ goto L_Stop;
+ setnpctimer 0;
+ end;
+
+L_Clear:
+ stopnpctimer;
+ setnpctimer 0;
+ set $@illia_storage_deviation, 0;
+ set $@illia_storage_max_items, 0;
+ killmonster "052-2.gat", "#ItemsInvoker::onDeath";
+ end;
+
+L_Stop:
+ stopnpctimer;
+ setnpctimer 0;
+ npcwarp 1, 1, "#ItemsInvoker";
+ set $@illia_storage_deviation, 0;
+ set $@illia_storage_max_items, 0;
+ set $@illia_level_6_progress, 2;
+ set $@illia_progress, 7;
+ set $@illia_max_time, $@illia_max_time + 1200;
+ areatimer "052-2.gat", 19, 60, 35, 78, 10, "#ItemsInvoker::onStop";
+ end;
+
+onDeath:
+ end;
+
+onStop:
+ message strcharinfo(0), "The magic seems to quickly dissipate.";
+ end;
+
+onWtf:
+ message strcharinfo(0), "Look out!";
+ end;
+
+onWow:
+ message strcharinfo(0), "Wow, see what appeared!";
+ end;
+
+}
+
+052-2.gat,35,68,0|script|#ToPartyRoom|32767,1,1,{
+ set @step, 6;
+ if ($@illia_progress < @step) goto L_ShouldNotBeHere;
+ if ($@illia_level_6_progress == 2) goto L_Warp;
+ message strcharinfo(0), "The strong magic inside this room prevents you from going further.";
+ end;
+
+L_Warp:
+ warp "052-2.gat", 73, 48;
+ end;
+
+L_ShouldNotBeHere:
+ percentheal -100, 0;
+ end;
+
+}
+