diff options
Diffstat (limited to 'world/map/npc/052-2/storage.txt')
-rw-r--r-- | world/map/npc/052-2/storage.txt | 188 |
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; + +} + |