//----------------------------------------------------------------------------- // 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,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: heal -Hp, 0; end; L_StartItemInvoker: set $@illia_level_6_progress, 1; donpcevent "#ItemsInvoker::OnCommandStart"; end; } 052-2,1,1,0|script|#ItemsInvoker|32767 { 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 0, "052-2", 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 0, "052-2", 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", $@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", $@item_invoke_x, $@item_invoke_y, "", 1103, 1, "#ItemsInvoker::OnDeath"; areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWtf"; set $@illia_storage_max_items, $@illia_storage_max_items - 1; end; L_MakeMonster: monster "052-2", $@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", $@item_invoke_x, $@item_invoke_y; areatimer 0, "052-2", 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", "#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", "#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; callfunc "UpdateIlliaProgress"; set $@illia_max_time, $@illia_max_time + 900; areatimer 0, "052-2", 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,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", 73, 48; end; L_ShouldNotBeHere: heal -Hp, 0; end; }