diff options
Diffstat (limited to 'world')
-rw-r--r-- | world/map/db/const-quest.txt | 6 | ||||
-rw-r--r-- | world/map/npc/mobs/miner_mania.txt | 209 | ||||
-rw-r--r-- | world/map/npc/scripts.conf | 1 |
3 files changed, 216 insertions, 0 deletions
diff --git a/world/map/db/const-quest.txt b/world/map/db/const-quest.txt index 1bea162b..88ecb334 100644 --- a/world/map/db/const-quest.txt +++ b/world/map/db/const-quest.txt @@ -157,8 +157,14 @@ FLAG_KESHLAM_RAREDROP 131072 // player got the super rare from Keshlam's // BOSS_MEDALS is using bits 1-8 (BYTE_0_SHIFT, BYTE_0_MASK) // BOSS_MEDALS_AVAILABLE is using bits 9-16 (BYTE_1_SHIFT, BYTE_1_MASK) CHRONOS_BOSS_MEDALS_MAX 255 + // constants can only be -2147483648 till 2147483647 so its not possible to make the mask 4293918720 +// Bif rarity constants: +GEM_BIF_CHANCE 5 +NORMAL_BIF_CHANCE 4 +BIG_BIF_CHANCE 8 + // Flags for the battle caves. BATTLE_CAVE1 1 BATTLE_CAVE2 2 diff --git a/world/map/npc/mobs/miner_mania.txt b/world/map/npc/mobs/miner_mania.txt new file mode 100644 index 00000000..db36668a --- /dev/null +++ b/world/map/npc/mobs/miner_mania.txt @@ -0,0 +1,209 @@ + +/////////////////////////////////////////////////////////////////////////////// +// Miner Mania +-|script|Miner_Mania|32767 +{ + close; + +OnInit: +/* +1 tick = 1 sec +If $@bif/slime_mine_maps_x0/y0/x1/y1 = -1 the matching min/max corner value is taken x0 = 0, y0 = 0, x1 = max x, y1 = max y + +$@bifs_big and $@bifs_small must always have the same size as $@bifs + +$@bifs/slimes_multi set after how many ticks this map/spot spawns. +For example multi 6 would spawn on 6th tick which is 6 sec on 1 sec tick duration. +For example if you have multiple sqares on a map and to not spawn <num of squares> * 1 tick faster than other maps, use multi = num of squares: + setarray $@bif_mine_maps$, "009-1", "009-1", "009-1", "009-2", "008-1", "018-1"; + setarray $@bifs_count, 4, 20, 20, 44, 44, 44; + setarray $@bifs_multi, 3, 3, 3, 1, 1, 1; + setarray $@bif_mine_maps_x0, 30, 25, 41, -1, -1, -1; + setarray $@bif_mine_maps_y0, 34, 39, 39, -1, -1, -1; + setarray $@bif_mine_maps_x1, 33, 34, 48, -1, -1, -1; + setarray $@bif_mine_maps_y1, 37, 51, 51, -1, -1, -1; +*/ + + setarray $@bif_mine_maps$, "002-4", "002-5", "005-3", "006-3", "009-3", "011-4", "011-6", "012-3", "012-4", "013-3", "018-3", "014-3", "017-3", "032-3", "043-3", "043-4", "055-3"; + setarray $@bifs_count, 15, 15, 25, 25, 25, 25, 30, 30, 40, 20, 30, 10, 10, 20, 20, 25, 20; + setarray $@bifs_multi, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; + setarray $@bif_mine_maps_x0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1; + setarray $@bif_mine_maps_y0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 96, -1; + setarray $@bif_mine_maps_x1, -1, -1, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1; + setarray $@bif_mine_maps_y1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 147, -1; + setarray $@bifs, Bif, AmethystBif, DiamondBif, EmeraldBif, RubyBif, SapphireBif, TopazBif; + setarray $@bifs_small, SmallBif, SmallAmethystBif, SmallDiamondBif, SmallEmeraldBif, SmallRubyBif, SmallSapphireBif, SmallTopazBif; + setarray $@bifs_big, BigBif, BigAmethystBif, BigDiamondBif, BigEmeraldBif, BigRubyBif, BigSapphireBif, BigTopazBif; + + setarray $@slime_mine_maps$, "002-4", "002-5", "005-3", "006-3", "009-3", "011-4", "011-6", "012-3", "012-4", "013-3", "018-3", "014-3", "017-3", "032-3", "043-3", "043-4", "055-3"; + setarray $@slimes_count, 15, 15, 25, 25, 25, 25, 30, 30, 40, 20, 30, 10, 10, 20, 20, 25, 20; + setarray $@slimes_multi, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; + setarray $@slime_mine_maps_x0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1; + setarray $@slime_mine_maps_y0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 96, -1; + setarray $@slime_mine_maps_x1, -1, -1, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1; + setarray $@slime_mine_maps_y1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 147, -1; + setarray $@slimes, CopperSlime, SilverSlime, BromenalSlime, GoldSlime, IronSlime, CoalSlime; + +// Bifs ----------------------------- + + set .map_count, getarraysize($@bif_mine_maps$[0]); + set .map_nr, 0; + + goto L_BifMapInitLoop; + +L_BifMapInitLoop: + + if ($@bif_mine_maps_x0[.map_nr] > -1) goto L_BifMapInitLoop_x0Set; + + set $@bif_mine_maps_x0[.map_nr], 0; + goto L_BifMapInitLoop_x0Set; + +L_BifMapInitLoop_x0Set: + + if ($@bif_mine_maps_y0[.map_nr] > -1) goto L_BifMapInitLoop_y0Set; + + set $@bif_mine_maps_y0[.map_nr], 0; + goto L_BifMapInitLoop_y0Set; + +L_BifMapInitLoop_y0Set: + + if ($@bif_mine_maps_x1[.map_nr] > -1) goto L_BifMapInitLoop_x1Set; + + set $@bif_mine_maps_x1[.map_nr], getmapmaxx($@bif_mine_maps$[.map_nr]); + goto L_BifMapInitLoop_x1Set; + +L_BifMapInitLoop_x1Set: + + if ($@bif_mine_maps_y1[.map_nr] > -1) goto L_BifMapInitLoop_y1Set; + + set $@bif_mine_maps_y1[.map_nr], getmapmaxy($@bif_mine_maps$[.map_nr]); + goto L_BifMapInitLoop_y1Set; + +L_BifMapInitLoop_y1Set: + + if ($@bifs_multi[.map_nr] < 1) set $@bifs_multi[.map_nr], 1; + set $@bifs_multi_count[.map_nr], $@bifs_multi[.map_nr]; + + set .map_nr, .map_nr + 1; + if (.map_nr < .map_count) goto L_BifMapInitLoop; + +// Slimes ----------------------------- + + set .map_count, getarraysize($@slime_mine_maps$[0]); + set .map_nr, 0; + + goto L_SlimeMapInitLoop; + +L_SlimeMapInitLoop: + + if ($@slime_mine_maps_x0[.map_nr] > -1) goto L_SlimeMapInitLoop_x0Set; + + set $@slime_mine_maps_x0[.map_nr], 0; + goto L_SlimeMapInitLoop_x0Set; + +L_SlimeMapInitLoop_x0Set: + + if ($@slime_mine_maps_y0[.map_nr] > -1) goto L_SlimeMapInitLoop_y0Set; + + set $@slime_mine_maps_y0[.map_nr], 0; + goto L_SlimeMapInitLoop_y0Set; + +L_SlimeMapInitLoop_y0Set: + + if ($@slime_mine_maps_x1[.map_nr] > -1) goto L_SlimeMapInitLoop_x1Set; + + set $@slime_mine_maps_x1[.map_nr], getmapmaxx($@slime_mine_maps$[.map_nr]); + goto L_SlimeMapInitLoop_x1Set; + +L_SlimeMapInitLoop_x1Set: + + if ($@slime_mine_maps_y1[.map_nr] > -1) goto L_SlimeMapInitLoop_y1Set; + + set $@slime_mine_maps_y1[.map_nr], getmapmaxy($@slime_mine_maps$[.map_nr]); + goto L_SlimeMapInitLoop_y1Set; + +L_SlimeMapInitLoop_y1Set: + + if ($@slimes_multi[.map_nr] < 1) set $@slimes_multi[.map_nr], 1; + set $@slimes_multi_count[.map_nr], $@slimes_multi[.map_nr]; + + set .map_nr, .map_nr + 1; + if (.map_nr < .map_count) goto L_SlimeMapInitLoop; + + initnpctimer; + + end; + +OnTimer1000: + +// Bifs ----------------------------- + + set .map_count, getarraysize($@bif_mine_maps$[0]); + set .map_nr, 0; + freeloop 1; // do not check for infinity loop + + goto L_BifMapLoop; + +L_BifMapLoop: + set $@bifs_multi_count[.map_nr], $@bifs_multi_count[.map_nr] - 1; + if ($@bifs_multi_count[.map_nr] >= 1) goto L_BifContinue; + + set $@bifs_multi_count[.map_nr], $@bifs_multi[.map_nr]; + + set .bifs_alive, mobcount($@bif_mine_maps$[.map_nr], "Miner_Mania::OnBifMined" + .map_nr)+1; + set .bifs_respawn_count, $@bifs_count[.map_nr] - .bifs_alive; + + if (.bifs_respawn_count < 1) goto L_BifContinue; + + if (rand(GEM_BIF_CHANCE)<1) set .bif, rand(getarraysize($@bifs[0])-1)+1; + else set .bif, 0; + + if (rand(BIG_BIF_CHANCE)<1) + areamonster $@bif_mine_maps$[.map_nr], $@bif_mine_maps_x0[.map_nr], $@bif_mine_maps_y0[.map_nr], $@bif_mine_maps_x1[.map_nr], $@bif_mine_maps_y1[.map_nr], "", $@bifs_big[.bif], 1, "Miner_Mania::OnBifMined" + .map_nr; + elif (rand(NORMAL_BIF_CHANCE)<1) + areamonster $@bif_mine_maps$[.map_nr], $@bif_mine_maps_x0[.map_nr], $@bif_mine_maps_y0[.map_nr], $@bif_mine_maps_x1[.map_nr], $@bif_mine_maps_y1[.map_nr], "", $@bifs[.bif], 1, "Miner_Mania::OnBifMined" + .map_nr; + else + areamonster $@bif_mine_maps$[.map_nr], $@bif_mine_maps_x0[.map_nr], $@bif_mine_maps_y0[.map_nr], $@bif_mine_maps_x1[.map_nr], $@bif_mine_maps_y1[.map_nr], "", $@bifs_small[.bif], 1, "Miner_Mania::OnBifMined" + .map_nr; + + goto L_BifContinue; + +L_BifContinue: + set .map_nr, .map_nr + 1; + if (.map_nr < .map_count) goto L_BifMapLoop; + +// Slimes ----------------------------- + + set .map_count, getarraysize($@slime_mine_maps$[0]); + set .map_nr, 0; + + goto L_SlimeMapLoop; + +L_SlimeMapLoop: + set $@slimes_multi_count[.map_nr], $@slimes_multi_count[.map_nr] - 1; + if ($@slimes_multi_count[.map_nr] >= 1) goto L_SlimeContinue; + + set $@slimes_multi_count[.map_nr], $@slimes_multi[.map_nr]; + + set .slimes_alive, mobcount($@slime_mine_maps$[.map_nr], "Miner_Mania::OnSlimeSlain" + .map_nr)+1; + set .slimes_respawn_count, $@slimes_count[.map_nr] - .slimes_alive; + + if (.slimes_respawn_count < 1) goto L_SlimeContinue; + + set .slime, rand(getarraysize($@slimes[0])); + + areamonster $@slime_mine_maps$[.map_nr], $@slime_mine_maps_x0[.map_nr], $@slime_mine_maps_y0[.map_nr], $@slime_mine_maps_x1[.map_nr], $@slime_mine_maps_y1[.map_nr], "", $@slimes[.slime], 1, "Miner_Mania::OnSlimeSlain" + .map_nr; + + goto L_SlimeContinue; + +L_SlimeContinue: + set .map_nr, .map_nr + 1; + if (.map_nr < .map_count) goto L_SlimeMapLoop; + + freeloop 0; // re-enable infinity loop check + + stopnpctimer; + setnpctimer 0; + startnpctimer; + + end; +} diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index 7c20ea88..512c8d48 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -64,6 +64,7 @@ npc: npc/items/underworld_troll.txt npc: npc/items/silver_bell.txt // Mob Functions +npc: npc/mobs/miner_mania.txt npc: npc/mobs/mob_points.txt npc: npc/mobs/mob_kill_handler.txt |