Spawn and Free Cell Search Behavior (#8324)

- When searching for a map-wide free cell, the tiles 15 cells from the edge are no longer considered
  * Added a configuration to change the edge size to any value between 1 and 40
- When searching for a free cell, the tiles 4-5 cells from the edge are now considered invalid and trigger a retry
  * If you make the edge size smaller than this, it will use edge size instead
- Searching for a free cell now defaults to 50 tries, but if the "no spawn on player" option is active, those failed attempts are not counted towards the limit anymore
- When a monster spawns in a defined area there will now be 8 attempts to spawn it on a valid cell within the area and then one attempt on the center cell; if all 9 attempts fail, there will now be 50 tries to spawn it map-wide before it gives up
- When a monster has fixed spawn coordinates, but those coordinates are a wall, it will now spawn in a random location map-wide instead
  * This also applies to icewall blocking the cell unless the boss_monster command was used
- Each monster in an area spawn will now receive its own spawn center within the spawn area on server start
  * This results in the spawn area being larger but having a bias towards the center
  * Added a configuration to disable this behavior
- Fixed slave monsters always being active and constantly calling the "search freecell" function even though neither them nor their master have been spotted yet
- Fixed map server crash when setting no_spawn_on_player to 100 (follow-up to 33b2b02)
- Updated prontera field spawns to official episode 18+
- Updated all champion mob respawn times to 3 minutes and sorted them by map name
- Fixes #8300
This commit is contained in:
Playtester 2024-05-19 17:12:44 +02:00 committed by GitHub
parent 949a33081f
commit 5d232db89e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 472 additions and 396 deletions

View File

@ -183,3 +183,10 @@ mail_delay: 1000
// Hides items from the player's favorite tab from being sold to a NPC. (Note 1) // Hides items from the player's favorite tab from being sold to a NPC. (Note 1)
hide_fav_sell: no hide_fav_sell: no
// When searching for a random position on the map, how much of the border of the map shall not be considered?
// Officially the 15 tiles from the edge of the map on each side are not considered as target cells.
// On some maps like in Pyramids this causes there to be very few monsters in the outer areas. This also
// affects teleportation. Set this to 1 if you want it to be closer to the old emulator behavior.
// Valid values: 1-40
map_edge_size: 15

View File

@ -163,6 +163,15 @@ no_spawn_on_player: 0
// map regardless of what the mob-spawn file says. // map regardless of what the mob-spawn file says.
force_random_spawn: no force_random_spawn: no
// Should each monster's center cell be randomized? (Note 1)
// Officially, at server start, each monster's center cell is set to a random cell in the spawn area.
// Each time the monster spawns it will spawn in an area around its center cell rather than the
// original center of the spawn definition. This results in a much larger total spawn area and a
// different experience each server start.
// Set this to "no" if you want all monsters of a spawn to spawn around the original center of the
// spawn definition, making the total spawn area much smaller (old eAthena behavior).
randomize_center_cell: yes
// Do summon slaves inherit the passive/aggressive traits of their master? // Do summon slaves inherit the passive/aggressive traits of their master?
// 0: No, retain original mode. // 0: No, retain original mode.
// 1: Slaves are always aggressive. // 1: Slaves are always aggressive.

View File

@ -1,4 +1,4 @@
//===== rAthena Documentation================================ //===== rAthena Documentation================================
//= rAthena Script Commands //= rAthena Script Commands
//===== By:================================================== //===== By:==================================================
//= rAthena Dev Team //= rAthena Dev Team
@ -135,11 +135,26 @@ and 'doc/mapflags.txt'.
<map name>{,<x>{,<y>{,<xs>{,<ys>}}}}%TAB%monster%TAB%<monster name>{,<monster level>}%TAB%<mob id>,<amount>{,<delay1>{,<delay2>{,<event>{,<mob size>{,<mob ai>}}}}} <map name>{,<x>{,<y>{,<xs>{,<ys>}}}}%TAB%monster%TAB%<monster name>{,<monster level>}%TAB%<mob id>,<amount>{,<delay1>{,<delay2>{,<event>{,<mob size>{,<mob ai>}}}}}
Map name is the name of the map the monsters will spawn on. x,y are the Map name is the name of the map the monsters will spawn on. x,y are the
coordinates where the mob should spawn. If xs and ys are non-zero, they coordinates where the mob should spawn. Putting zeros instead of these
specify the 'radius' of a spawn-rectangle area centered at x,y. coordinates will spawn the monsters randomly.
Putting zeros instead of these coordinates will spawn the monsters randomly.
If the coordinates are non-zero and xs and ys are above 1, each monster will
spawn in a radius around x,y. At server start, each monster will get assigned
its own center cell adding or substracting up to (xs-1),(ys-1) from the given
x,y coordinates. Each time a monster respawns, it will spawn in a radius around
its personal center cell by adding or substracting up to (xs-1),(ys-1) again.
This results in a total possible spawn area over all monsters of the spawn line
of (xs,ys)*4-3, but with a strong bias towards the center of that area:
2,2 - 5x5
3,3 - 9x9
4,4 - 13x13
5,5 - 17x17
etc.
Note this is only the initial spawn zone, as mobs random-walk, they are free Note this is only the initial spawn zone, as mobs random-walk, they are free
to move away from their specified spawn region. to move away from their specified spawn region.
You can disable the picking of a random center cell for each monster in the
battle config. (See /conf/battle/monster.conf::randomize_center_cell.)
Monster name is the name the monsters will have on screen, and has no relation Monster name is the name the monsters will have on screen, and has no relation
whatsoever to their names anywhere else. It's the mob id that counts, which whatsoever to their names anywhere else. It's the mob id that counts, which
@ -188,6 +203,8 @@ Natural enemies for AI monsters are normal monsters.
Alternately, a monster spawned using 'boss_monster' instead of 'monster' is able Alternately, a monster spawned using 'boss_monster' instead of 'monster' is able
to be detected on the map with the SC_BOSSMAPINFO status (used by Convex Mirror). to be detected on the map with the SC_BOSSMAPINFO status (used by Convex Mirror).
A boss monster spawn with fixed coordinates will always spawn at the given
coordinates, even if they are blocked (e.g. by Icewall).
** NPC names ** NPC names

View File

@ -3,329 +3,334 @@
//===== By: ================================================== //===== By: ==================================================
//= nanakiwurtz //= nanakiwurtz
//===== Current Version: ===================================== //===== Current Version: =====================================
//= 1.1 //= 1.2
//===== Compatible With: ===================================== //===== Compatible With: =====================================
//= rAthena Project //= rAthena Project
//===== Additional Comments: ================================= //===== Additional Comments: =================================
//= 1.0 First version //= 1.0 First version
//= 1.1 Correct Spawn by Navigation's mob data. [attackjom] //= 1.1 Correct Spawn by Navigation's mob data. [attackjom]
//= 1.2 Correct respawn times and prontera field spawns [Playtester]
//============================================================ //============================================================
abbey02,0,0 monster Swift Zombie Slaughter 2603,3,300000 abbey01,0,0 monster Swift Banshee 2887,3,180000
gl_prison,0,0 monster Solid Zombie Prisoner 2604,1,300000 abbey02,0,0 monster Swift Zombie Slaughter 2603,3,180000
gld_dun04,0,0 monster Zombie Master Ringleader 2605,2,300000 abbey03,0,0 monster Necromancer Ringleader 2736,2,180000
pay_dun00,0,0 monster Furious Zombie 2606,2,300000 abyss_01,0,0 monster Furious Ferus 2832,2,180000
schg_dun01,0,0 monster Elusive Zakudam 2607,2,300000 abyss_02,0,0 monster Acidus Ringleader 2913,2,180000
prt_fild03,0,0 monster Swift Yoyo 2608,2,300000 abyss_03,0,0 monster Solid Acidus 2912,2,180000
ayo_fild02,0,0 monster Solid Yoyo 2609,1,300000 alde_dun01,0,0 monster Arclouze Ringleader 2894,1,180000
pay_fild06,0,0 monster Wormtail Ringleader 2610,3,300000 alde_dun02,0,0 monster Solid High Orc 2805,2,180000
um_fild02,0,0 monster Furious Wootan Fighter 2611,1,300000 alde_dun03,0,0 monster Furious Penomena 2717,2,180000
mosk_dun01,0,0 monster Elusive Wood Goblin 2612,2,300000 alde_dun04,0,0 monster Furious Bathory 2885,1,180000
moc_fild03,0,0 monster Swift Wolf 2613,2,300000 ama_dun01,0,0 monster Miyabi Doll Ringleader 2746,2,180000
gl_step,0,0 monster Solid Wind Ghost 2614,2,300000 ama_dun02,0,0 monster Swift Poison Toad 2704,1,180000
gef_dun03,0,0 monster Solid Wind Ghost 2614,1,300000 ama_dun03,0,0 monster Furious Shinobi 2664,2,180000
pay_fild01,0,0 monster Willow Ringleader 2615,2,300000 ama_fild01,0,0 monster Swift Karakasa 2789,2,180000
um_fild04,0,0 monster Furious Wild Rose 2616,1,300000 anthell01,0,0 monster Elusive Deniro 2857,3,180000
gon_dun03,0,0 monster Elusive Evil Nymph 2617,2,300000 anthell02,0,0 monster Solid Andre 2902,2,180000
gl_sew01,0,0 monster Solid Whisper 2618,1,300000 arug_dun01,0,0 monster Elusive Banshee Master 2886,2,180000
treasure_n2,0,0 monster Weak Skeleton Ringleader 2619,2,300000 ayo_dun01,0,0 monster Leaf Cat Ringleader 2781,2,180000
gl_cas02,0,0 monster Furious Wanderer 2620,2,300000 ayo_dun02,0,0 monster Furious Tamruan 2639,2,180000
gefenia04,0,0 monster Elusive Violy 2621,2,300000 ayo_fild01,0,0 monster Furious Smokie 2654,2,180000
gefenia03,0,0 monster Swift Violy 2622,2,300000 ayo_fild02,0,0 monster Solid Yoyo 2609,1,180000
gefenia02,0,0 monster Solid Violy 2623,2,300000 beach_dun,0,0 monster Swift Medusa 2759,2,180000
ein_fild04,0,0 monster Venomous Ringleader 2624,2,300000 beach_dun2,0,0 monster Furious Stalactic Golem 2644,2,180000
juperos_01,0,0 monster Furious Venatu 2625,3,300000 beach_dun3,0,0 monster Elusive Thara Frog 2635,2,180000
mosk_dun03,0,0 monster Elusive Vavayaga 2626,2,300000 bif_fild01,0,0 monster Miming Ringleader 2751,2,180000
ra_san01,0,0 monster Swift Vanberk 2627,2,300000 bif_fild02,0,0 monster Furious Little Fatum 2777,2,180000
iz_dun01,0,0 monster Solid Vadon 2628,2,300000 bra_dun01,0,0 monster Swift Piranha 2709,2,180000
ein_fild02,0,0 monster Ungoliant Ringleader 2629,2,300000 bra_dun02,0,0 monster Solid Iara 2795,3,180000
bra_fild01,0,0 monster Furious Toucan 2630,3,300000 bra_fild01,0,0 monster Furious Toucan 2630,3,180000
ma_fild01,0,0 monster Elusive Tiyanak 2631,2,300000 c_tower1,0,0 monster Solid Rideword 2682,2,180000
prt_sewb4,0,0 monster Solid Thief Bug 2632,2,300000 c_tower2,0,0 monster Furious Clock 2871,1,180000
prt_sewb3,0,0 monster Thief Bug Ringleader 2633,3,300000 c_tower3,0,0 monster Elusive Alarm 2910,1,180000
prt_sewb2,0,0 monster Furious Thief Bug 2634,2,300000 c_tower4,0,0 monster Clock Ringleader 2870,2,180000
beach_dun3,0,0 monster Elusive Thara Frog 2635,2,300000 cmd_fild01,0,0 monster Elusive Grove 2808,2,180000
ein_fild03,0,0 monster Swift Teddy Bear 2636,2,300000 cmd_fild02,0,0 monster Swift Seal 2829,3,180000
man_fild03,0,0 monster Solid Tatacho 2637,1,300000 cmd_fild03,0,0 monster Solid Alligator 2907,3,180000
mjo_dun01,0,0 monster Tarou Ringleader 2638,2,300000 cmd_fild04,0,0 monster Sea Otter Ringleader 2668,2,180000
ayo_dun02,0,0 monster Furious Tamruan 2639,2,300000 cmd_fild06,0,0 monster Furious Golem 2812,2,180000
gl_sew03,0,0 monster Elusive Sting 2640,2,300000 cmd_fild07,0,0 monster Elusive Raggler 2694,2,180000
lhz_fild02,0,0 monster Swift Stem Worm 2641,2,300000 cmd_fild08,0,0 monster Elusive Deniro 2857,2,180000
moc_fild13,0,0 monster Solid Steel Chonchon 2642,3,300000 cmd_fild09,0,0 monster Swift Metaller 2754,2,180000
ve_fild07,0,0 monster Stapo Ringleader 2643,2,300000 dew_dun01,0,0 monster Elusive Comodo 2867,2,180000
beach_dun2,0,0 monster Furious Stalactic Golem 2644,2,300000 dew_dun02,0,0 monster Solid Banaspaty 2888,2,180000
prt_fild02,0,0 monster Elusive Stainer 2645,3,300000 dew_fild01,0,0 monster Swift Rafflesia Arnoldi 2906,2,180000
treasure_n1,0,0 monster Swift Spore 2646,2,300000 dic_dun01,0,0 monster Swift Uni-horn Scaraba 2799,2,180000
tur_dun02,0,0 monster Solid Solider 2647,2,300000 dic_dun02,0,0 monster Elusive Antler Scaraba 2896,2,180000
pay_dun02,0,0 monster Soldier Skeleton Ringleader 2648,3,300000 dic_dun03,0,0 monster Furious Rake Scaraba 2693,2,180000
pay_dun01,0,0 monster Furious Soldier Skeleton 2649,2,300000 dic_fild01,0,0 monster Swift Centipede 2873,2,180000
tha_t09,0,0 monster Elusive Lady Solace 2650,2,300000 //--Remove after Thanatos Ravamped Patch dic_fild02,0,0 monster Dolomedes Ringleader 2850,2,180000
pay_dun03,0,0 monster Swift Sohee 2651,2,300000 ecl_fild01,0,0 monster Elusive Menblatt 2758,1,180000
ice_dun02,0,0 monster Solid Snowier 2652,2,300000 ecl_tdun01,0,0 monster Solid Cenere 2874,1,180000
pay_fild02,0,0 monster Boa Ringleader 2653,3,300000 ecl_tdun02,0,0 monster Solid Antique Book 2898,1,180000
ayo_fild01,0,0 monster Furious Smokie 2654,2,300000 ecl_tdun03,0,0 monster Swift Antique Book 2897,1,180000
yuno_fild06,0,0 monster Elusive Sleeper 2655,1,300000 ein_dun01,0,0 monster Elusive Pitman 2708,2,180000
yuno_fild02,0,0 monster Swift Sleeper 2656,2,300000 ein_dun02,0,0 monster Solid Mineral 2750,2,180000
odin_tem02,0,0 monster Solid Skogul 2657,1,300000 ein_fild02,0,0 monster Ungoliant Ringleader 2629,2,180000
gld2_pay,0,0 monster Skeleton General Ringleader 2658,2,300000 ein_fild03,0,0 monster Swift Teddy Bear 2636,2,180000
gld_dun01_2,0,0 monster Furious Skeleton General 2659,2,300000 ein_fild04,0,0 monster Venomous Ringleader 2624,2,180000
mjo_dun03,0,0 monster Elusive Skeleton Worker 2660,2,300000 ein_fild05,0,0 monster Furious Noxious 2727,2,180000
ice_dun01,0,0 monster Swift Siroma 2661,1,300000 ein_fild06,0,0 monster Solid Holden 2745,2,180000
mosk_fild02,0,0 monster Solid Side Winder 2662,1,300000 ein_fild07,0,0 monster Metaling Ringleader 2756,2,180000
mjolnir_03,0,0 monster Side Winder Ringleader 2663,2,300000 ein_fild08,0,0 monster Solid Metaling 2755,2,180000
ama_dun03,0,0 monster Furious Shinobi 2664,2,300000 ein_fild09,0,0 monster Solid Porcellio 2700,2,180000
tha_t11,0,0 monster Elusive Mistress of Shelter 2665,2,300000 //--Remove after Thanatos Ravamped Patch gef_dun00,0,0 monster Furious Hunter Fly 2797,1,180000
hu_fild06,0,0 monster Swift Shellfish 2666,1,300000 gef_dun01,0,0 monster Elusive Ghoul 2823,2,180000
lhz_dun03,0,0 monster Solid Cecil Damon 2667,3,300000 gef_dun02,0,0 monster Solid Deviruchi 2854,2,180000
cmd_fild04,0,0 monster Sea Otter Ringleader 2668,2,300000 gef_dun03,0,0 monster Solid Wind Ghost 2614,1,180000
iz_dun05,0,0 monster Furious Lamp Rey 2669,2,300000 gef_fild00,0,0 monster Elusive Chonchon 2872,2,180000
moc_fild18,0,0 monster Elusive Scorpion 2670,3,300000 gef_fild01,0,0 monster Furious Roda Frog 2679,2,180000
mjolnir_09,0,0 monster Swift Savage Babe 2671,2,300000 gef_fild02,0,0 monster Solid Coco 2869,3,180000
prt_maze01,0,0 monster Solid Savage 2672,2,300000 gef_fild03,0,0 monster Solid Orc Lady 2725,3,180000
mjolnir_07,0,0 monster Savage Ringleader 2673,3,300000 gef_fild04,0,0 monster Solid Mandragora 2765,2,180000
moc_fild16,0,0 monster Furious Sandman 2674,2,300000 gef_fild05,0,0 monster Swift Creamy 2863,2,180000
thor_v03,0,0 monster Elusive Salamander 2675,2,300000 gef_fild06,0,0 monster Solid Petite 2715,2,180000
treasure02,0,0 monster Swift Sailor Skeleton 2676,1,300000 gef_fild07,0,0 monster Swift Poring 2699,2,180000
ra_fild12,0,0 monster Solid Roween 2677,2,300000 gef_fild08,0,0 monster Swift Petite 2714,2,180000
prt_fild00,0,0 monster Roda Frog Ringleader 2678,2,300000 gef_fild09,0,0 monster Swift Coco 2868,2,180000
gef_fild01,0,0 monster Furious Roda Frog 2679,2,300000 gef_fild10,0,0 monster Furious Orc Warrior 2722,2,180000
prt_fild07,0,0 monster Elusive Rocker 2680,2,300000 gef_fild11,0,0 monster Swift Goblin 2814,3,180000
tha_t01,0,0 monster Swift Rideword 2681,2,300000 gefenia01,0,0 monster Swift False Angel 2834,2,180000
//tha_t01,0,0 monster Swift Rideword 2681,1,300000 //--Applied after Thanatos Revamped Patch. gefenia02,0,0 monster Solid Violy 2623,2,180000
c_tower1,0,0 monster Solid Rideword 2682,2,300000 gefenia03,0,0 monster Swift Violy 2622,2,180000
gon_fild01,0,0 monster Dumpling Child Ringleader 2683,2,300000 gefenia04,0,0 monster Elusive Violy 2621,2,180000
tha_t10,0,0 monster Furious Baroness of Retribution 2684,2,300000 //--Remove after Thanatos Ravamped Patch gl_cas01,0,0 monster Elusive Carat 2877,2,180000
tha_t08,0,0 monster Elusive Baroness of Retribution 2685,2,300000
//tha_t08,0,0 monster Elusive Baroness of Retribution 2685,1,300000 //--Applied after Thanatos Revamped Patch.
tha_t07,0,0 monster Swift Baroness of Retribution 2686,2,300000
//tha_t07,0,0 monster Swift Baroness of Retribution 2686,1,300000 //--Applied after Thanatos Revamped Patch.
in_sphinx2,0,0 monster Solid Requiem 2687,2,300000
lhz_dun01,0,0 monster Remover Ringleader 2688,3,300000
mal_dun01,0,0 monster Elusive Red Eruma 2689,2,300000
gl_knt02,0,0 monster Swift Raydric 2690,2,300000
gl_knt01,0,0 monster Solid Raydric 2691,2,300000
lhz_dun02,0,0 monster Laurell Weinder Ringleader 2692,3,300000
dic_dun03,0,0 monster Furious Rake Scaraba 2693,2,300000
cmd_fild07,0,0 monster Elusive Raggler 2694,2,300000
lhz_fild01,0,0 monster Swift Rafflesia 2695,3,300000
lhz_fild01,0,0 monster Poring Ringleader 2696,2,300000
lhz_fild01,0,0 monster Furious Poring 2697,2,300000
lhz_fild01,0,0 monster Elusive Poring 2698,2,300000
gef_fild07,0,0 monster Swift Poring 2699,2,300000
ein_fild09,0,0 monster Solid Porcellio 2700,2,300000
prt_maze03,0,0 monster Poporing Ringleader 2701,2,300000
prt_maze02,0,0 monster Furious Poporing 2702,2,300000
pay_fild04,0,0 monster Elusive Poporing 2703,2,300000
ama_dun02,0,0 monster Swift Poison Toad 2704,1,300000
mjolnir_06,0,0 monster Solid Poison Spore 2705,3,300000
odin_tem03,0,0 monster Plasma Ringleader 2706,2,300000
iz_dun00,0,0 monster Furious Plankton 2707,2,300000
ein_dun01,0,0 monster Elusive Pitman 2708,2,300000
bra_dun01,0,0 monster Swift Piranha 2709,2,300000
spl_fild01,0,0 monster Solid Dark Pinguicula 2710,2,300000
spl_fild02,0,0 monster Pinguicula Ringleader 2711,2,300000
moc_fild12,0,0 monster Furious Picky 2712,2,300000
iz_dun03,0,0 monster Elusive Phen 2713,2,300000
gef_fild08,0,0 monster Swift Petite 2714,2,300000
gef_fild06,0,0 monster Solid Petite 2715,2,300000
treasure02,0,0 monster Penomena Ringleader 2716,2,300000
alde_dun03,0,0 monster Furious Penomena 2717,2,300000
moc_fild02,0,0 monster Elusive Peco Peco 2718,2,300000
in_sphinx5,0,0 monster Swift Pasana 2719,2,300000
um_fild03,0,0 monster Solid Parasite 2720,1,300000
tha_t05,0,0 monster Owl Duke Ringleader 2721,2,300000
//tha_t05,0,0 monster Owl Duke Ringleader 2721,3,300000 //--Applied after Thanatos Revamped Patch.
gef_fild10,0,0 monster Furious Orc Warrior 2722,2,300000
orcsdun01,0,0 monster Elusive Orc Zombie 2723,2,300000
orcsdun02,0,0 monster Swift Orc Skeleton 2724,2,300000
gef_fild03,0,0 monster Solid Orc Lady 2725,3,300000
tha_t12,0,0 monster Dame of Sentinel Ringleader 2726,2,300000 //--Remove after Thanatos Ravamped Patch
ein_fild05,0,0 monster Furious Noxious 2727,2,300000
hu_fild05,0,0 monster Elusive Novus 2728,2,300000
hu_fild04,0,0 monster Swift Novus 2729,2,300000
hu_fild02,0,0 monster Solid Novus 2730,2,300000
hu_fild01,0,0 monster Novus Ringleader 2731,2,300000
mag_dun02,0,0 monster Furious Nightmare Terror 2732,2,300000
gl_chyard_,0,0 monster Elusive Wraith Dead (Nightmare) 2733,2,180000,0
gl_cas02_,0,0 monster Furious Wanderer (Nightmare) 2734,2,180000,0 gl_cas02_,0,0 monster Furious Wanderer (Nightmare) 2734,2,180000,0
man_fild01,0,0 monster Solid Nephentes 2735,2,300000 gl_cas02,0,0 monster Furious Wanderer 2620,2,180000
abbey03,0,0 monster Necromancer Ringleader 2736,2,300000 gl_church,0,0 monster Elusive Evil Druid 2838,2,180000
xmas_dun02,0,0 monster Furious Myst Case 2737,2,300000 gl_chyard_,0,0 monster Elusive Wraith Dead (Nightmare) 2733,2,180000,0
ve_fild04,0,0 monster Elusive Muscipular 2738,2,300000 gl_chyard,0,0 monster Furious Dark Priest 2861,2,180000
moc_pryd03,0,0 monster Swift Mummy 2739,2,300000 gl_dun01,0,0 monster Solid Arclouze 2893,1,180000
moc_pryd02,0,0 monster Solid Mummy 2740,2,300000 gl_dun02,0,0 monster Furious Majoruros 2767,1,180000
moc_fild01,0,0 monster Muka Ringleader 2741,3,300000 gl_in01,0,0 monster Marionette Ringleader 2761,1,180000
moc_fild22,0,0 monster Furious Incarnation of Morocc 2742,3,300000 gl_knt01,0,0 monster Solid Raydric 2691,2,180000
moc_fild21,0,0 monster Elusive Incarnation of Morocc 2743,2,300000 gl_knt02,0,0 monster Swift Raydric 2690,2,180000
moc_fild20,0,0 monster Swift Incarnation of Morocc 2744,1,300000 gl_prison,0,0 monster Solid Zombie Prisoner 2604,1,180000
ein_fild06,0,0 monster Solid Holden 2745,2,300000 gl_prison1,0,0 monster Furious Injustice 2792,2,180000
ama_dun01,0,0 monster Miyabi Doll Ringleader 2746,2,300000 gl_sew01,0,0 monster Solid Whisper 2618,1,180000
moc_prydn1,0,0 monster Furious Minorous 2747,2,300000 gl_sew02,0,0 monster Furious Gargoyle 2827,1,180000
moc_pryd05,0,0 monster Elusive Minorous 2748,2,300000 gl_sew03,0,0 monster Elusive Sting 2640,2,180000
in_sphinx4,0,0 monster Swift Minorous 2749,1,300000 gl_sew04,0,0 monster Furious Anolian 2899,2,180000
ein_dun02,0,0 monster Solid Mineral 2750,2,300000 gl_step,0,0 monster Solid Wind Ghost 2614,2,180000
bif_fild01,0,0 monster Miming Ringleader 2751,2,300000 glast_01,0,0 monster Gargoyle Ringleader 2826,1,180000
moc_prydn2,0,0 monster Furious Mimic 2752,2,300000 gld_dun01_2,0,0 monster Furious Skeleton General 2659,2,180000
moc_pryd06,0,0 monster Elusive Mimic 2753,2,300000 gld_dun01,0,0 monster Solid Leib Olmai 2780,2,180000
cmd_fild09,0,0 monster Swift Metaller 2754,2,300000 gld_dun02_2,0,0 monster Swift Angra Mantis 2901,2,180000
ein_fild08,0,0 monster Solid Metaling 2755,2,300000 gld_dun02,0,0 monster Giant Hornet Ringleader 2821,2,180000
ein_fild07,0,0 monster Metaling Ringleader 2756,2,300000 gld_dun03_2,0,0 monster Elusive Dark Hammer Kobold 2818,2,180000
iz_dun04,0,0 monster Furious Merman 2757,2,300000 gld_dun03,0,0 monster Furious Caterpillar 2876,2,180000
ecl_fild01,0,0 monster Elusive Menblatt 2758,1,300000 gld_dun04_2,0,0 monster Solid Dark Shadow 2820,2,180000
beach_dun,0,0 monster Swift Medusa 2759,2,300000 gld_dun04,0,0 monster Zombie Master Ringleader 2605,2,180000
mjo_dun02,0,0 monster Solid Martin 2760,2,300000 gld2_ald,0,0 monster Elusive Angra Mantis 2900,2,180000
gl_in01,0,0 monster Marionette Ringleader 2761,1,300000 gld2_gef,0,0 monster Swift Dark Shadow 2819,2,180000
xmas_fild01,0,0 monster Furious Marin 2762,1,300000 gld2_pay,0,0 monster Skeleton General Ringleader 2658,2,180000
in_sphinx3,0,0 monster Elusive Marduk 2763,1,300000 gld2_prt,0,0 monster Furious Dark Hammer Kobold 2817,2,180000
prt_maze03,0,0 monster Swift Mantis 2764,2,300000 gon_dun01,0,0 monster Swift Bloody Butterfly 2883,2,180000
gef_fild04,0,0 monster Solid Mandragora 2765,2,300000 gon_dun02,0,0 monster Solid Enchanted Peach Tree 2775,1,180000
ma_dun01,0,0 monster Manananggal Ringleader 2766,2,300000 gon_dun03,0,0 monster Elusive Evil Nymph 2617,2,180000
gl_dun02,0,0 monster Furious Majoruros 2767,1,300000 gon_fild01,0,0 monster Dumpling Child Ringleader 2683,2,180000
prt_fild09,0,0 monster Elusive Magnolia 2768,2,300000 hu_fild01,0,0 monster Novus Ringleader 2731,2,180000
ve_fild03,0,0 monster Swift Magmaring 2769,2,300000 hu_fild02,0,0 monster Solid Novus 2730,2,180000
prt_fild08,0,0 monster Solid Lunatic 2770,1,300000 hu_fild04,0,0 monster Swift Novus 2729,2,180000
prt_fild01,0,0 monster Lunatic Ringleader 2771,2,300000 hu_fild05,0,0 monster Elusive Novus 2728,2,180000
niflheim,0,0 monster Furious Lude 2772,1,300000 hu_fild06,0,0 monster Swift Shellfish 2666,1,180000
spl_fild03,0,0 monster Elusive Luciola Vespa 2773,1,300000 ice_dun01,0,0 monster Swift Siroma 2661,1,180000
nif_fild02,0,0 monster Swift Loli Ruri 2774,1,300000 ice_dun02,0,0 monster Solid Snowier 2652,2,180000
gon_dun02,0,0 monster Solid Enchanted Peach Tree 2775,1,300000 ice_dun03,0,0 monster Swift Ice Titan 2794,2,180000
new_1-3,0,0 monster Baby Poring Ringleader 2776,2,300000 in_sphinx1,0,0 monster Elusive Drainliar 2847,1,180000
bif_fild02,0,0 monster Furious Little Fatum 2777,2,300000 in_sphinx2,0,0 monster Solid Requiem 2687,2,180000
lou_dun01,0,0 monster Elusive Jing Guai 2778,2,300000 in_sphinx3,0,0 monster Elusive Marduk 2763,1,180000
mosk_dun02,0,0 monster Swift Les 2779,1,300000 in_sphinx4,0,0 monster Swift Minorous 2749,1,180000
gld_dun01,0,0 monster Solid Leib Olmai 2780,2,300000 in_sphinx5,0,0 monster Swift Pasana 2719,2,180000
ayo_dun01,0,0 monster Leaf Cat Ringleader 2781,2,300000 iz_dun00,0,0 monster Furious Plankton 2707,2,180000
teg_dun02,0,0 monster Furious Wickebine Tres 2782,2,300000,0 iz_dun01,0,0 monster Solid Vadon 2628,2,180000
teg_dun01,0,0 monster Elusive Eremes 2783,2,300000,0 iz_dun02,0,0 monster Solid Cornutus 2864,2,180000
ra_fild06,0,0 monster Swift Kobold Archer 2784,3,300000 iz_dun03,0,0 monster Elusive Phen 2713,2,180000
ra_fild05,0,0 monster Solid Kobold 2785,3,300000 iz_dun04,0,0 monster Furious Merman 2757,2,180000
thor_v02,0,0 monster Knocker Ringleader 2786,1,300000 iz_dun05,0,0 monster Furious Lamp Rey 2669,2,180000
mjolnir_08,0,0 monster Furious Beetle King 2787,2,300000 jupe_core,0,0 monster Swift Dimik 2853,3,180000
thor_v01,0,0 monster Elusive Kasa 2788,2,300000 juperos_01,0,0 monster Furious Venatu 2625,3,180000
ama_fild01,0,0 monster Swift Karakasa 2789,2,300000 juperos_02,0,0 monster Furious Apocalypse 2895,3,180000
moc_pryd04,0,0 monster Solid Isis 2790,2,300000 kh_dun01,0,0 monster Aliza Ringleader 2908,1,180000
ra_san02,0,0 monster Isilla Ringleader 2791,2,300000 kh_dun02,0,0 monster Furious Alicel 2909,1,180000
gl_prison1,0,0 monster Furious Injustice 2792,2,300000 kh_kiehl01,0,0 monster Furious Constant 2866,2,180000
lou_fild01,0,0 monster Elusive Mi Gao 2793,1,300000 lhz_dun01,0,0 monster Remover Ringleader 2688,3,180000
ice_dun03,0,0 monster Swift Ice Titan 2794,2,300000 lhz_dun02,0,0 monster Laurell Weinder Ringleader 2692,3,180000
bra_dun02,0,0 monster Solid Iara 2795,3,300000 lhz_dun03,0,0 monster Solid Cecil Damon 2667,3,180000
lou_dun02,0,0 monster Yao Jun Ringleader 2796,1,300000 lhz_dun04,0,0 monster Celia Ringleader 2875,3,180000
gef_dun00,0,0 monster Furious Hunter Fly 2797,1,300000 lhz_fild01,0,0 monster Swift Rafflesia 2695,3,180000
prt_fild05,0,0 monster Elusive Hornet 2798,2,300000 lhz_fild01,0,0 monster Poring Ringleader 2696,2,180000
dic_dun01,0,0 monster Swift Uni-horn Scaraba 2799,2,300000 lhz_fild01,0,0 monster Furious Poring 2697,2,180000
pay_fild09,0,0 monster Solid Horn 2800,2,300000 lhz_fild01,0,0 monster Elusive Poring 2698,2,180000
ra_san03,0,0 monster Hodremlin Ringleader 2801,2,300000 lhz_fild02,0,0 monster Swift Stem Worm 2641,2,180000
moc_fild17,0,0 monster Furious Hode 2802,2,300000 lhz_fild03,0,0 monster Furious Breeze 2881,3,180000
ra_fild04,0,0 monster Elusive Hill Wind 2803,3,300000 lou_dun01,0,0 monster Elusive Jing Guai 2778,2,180000
ra_fild03,0,0 monster Swift Hill Wind 2804,3,300000 lou_dun02,0,0 monster Yao Jun Ringleader 2796,1,180000
alde_dun02,0,0 monster Solid High Orc 2805,2,300000 lou_dun03,0,0 monster Elusive Zhu Po Long 2862,1,180000
yuno_fild04,0,0 monster Harpy Ringleader 2806,3,300000 lou_fild01,0,0 monster Elusive Mi Gao 2793,1,180000
yuno_fild03,0,0 monster Furious Harpy 2807,3,300000 ma_dun01,0,0 monster Manananggal Ringleader 2766,2,180000
cmd_fild01,0,0 monster Elusive Grove 2808,2,300000 ma_fild01,0,0 monster Elusive Tiyanak 2631,2,180000
pay_fild10,0,0 monster Swift Greatest General 2809,2,300000 ma_fild02,0,0 monster Solid Bungisngis 2879,2,180000
yuno_fild09,0,0 monster Solid Grand Peco 2810,2,300000 mag_dun01,0,0 monster Furious Explosion 2837,1,180000
yuno_fild08,0,0 monster Grand Peco Ringleader 2811,2,300000 mag_dun02,0,0 monster Furious Nightmare Terror 2732,2,180000
cmd_fild06,0,0 monster Furious Golem 2812,2,300000 mal_dun01,0,0 monster Elusive Red Eruma 2689,2,180000
prt_fild11,0,0 monster Elusive Goblin 2813,3,300000 man_fild01,0,0 monster Solid Nephentes 2735,2,180000
gef_fild11,0,0 monster Swift Goblin 2814,3,300000 man_fild02,0,0 monster Elusive Bradium Golem 2882,2,180000
yuno_fild11,0,0 monster Solid Goat 2815,2,300000 man_fild03,0,0 monster Solid Tatacho 2637,1,180000
yuno_fild07,0,0 monster Goat Ringleader 2816,2,300000 mjo_dun01,0,0 monster Tarou Ringleader 2638,2,180000
gld2_prt,0,0 monster Furious Dark Hammer Kobold 2817,2,300000 mjo_dun02,0,0 monster Solid Martin 2760,2,180000
gld_dun03_2,0,0 monster Elusive Dark Hammer Kobold 2818,2,300000 mjo_dun03,0,0 monster Elusive Skeleton Worker 2660,2,180000
gld2_gef,0,0 monster Swift Dark Shadow 2819,2,300000 mjolnir_01,0,0 monster Swift Caramel 2878,2,180000
gld_dun04_2,0,0 monster Solid Dark Shadow 2820,2,300000 mjolnir_02,0,0 monster Solid Elder Willow 2840,3,180000
gld_dun02,0,0 monster Giant Hornet Ringleader 2821,2,300000 mjolnir_03,0,0 monster Side Winder Ringleader 2663,2,180000
nameless_n,0,0 monster Furious Ghoul 2822,1,300000 mjolnir_04,0,0 monster Furious Driller 2846,3,180000
gef_dun01,0,0 monster Elusive Ghoul 2823,2,300000 mjolnir_05,0,0 monster Swift Argiope 2892,2,180000
yuno_fild12,0,0 monster Swift Geographer 2824,1,300000 mjolnir_06,0,0 monster Solid Poison Spore 2705,3,180000
yuno_fild01,0,0 monster Solid Geographer 2825,2,300000 mjolnir_07,0,0 monster Savage Ringleader 2673,3,180000
glast_01,0,0 monster Gargoyle Ringleader 2826,1,300000 mjolnir_08,0,0 monster Furious Beetle King 2787,2,180000
gl_sew02,0,0 monster Furious Gargoyle 2827,1,300000 mjolnir_09,0,0 monster Swift Savage Babe 2671,2,180000
ve_fild01,0,0 monster Elusive Galion 2828,1,300000 mjolnir_10,0,0 monster Furious Argos 2890,2,180000
cmd_fild02,0,0 monster Swift Seal 2829,3,300000 mjolnir_11,0,0 monster Elusive Argiope 2891,2,180000
tur_dun05,0,0 monster Solid Freezer 2830,1,300000 mjolnir_12,0,0 monster Furious Dustiness 2842,2,180000
tur_dun03,0,0 monster Freezer Ringleader 2831,1,300000 moc_fild01,0,0 monster Muka Ringleader 2741,3,180000
abyss_01,0,0 monster Furious Ferus 2832,2,300000 moc_fild02,0,0 monster Elusive Peco Peco 2718,2,180000
prt_sewb1,0,0 monster Elusive Familiar 2833,1,300000 moc_fild03,0,0 monster Swift Wolf 2613,2,180000
gefenia01,0,0 monster Swift False Angel 2834,2,300000 moc_fild07,0,0 monster Drops Ringleader 2845,3,180000
prt_fild06,0,0 monster Solid Fabre 2835,2,300000 moc_fild11,0,0 monster Furious Baby Desert Wolf 2856,3,180000
pay_fild03,0,0 monster Fabre Ringleader 2836,3,300000 moc_fild12,0,0 monster Furious Picky 2712,2,180000
mag_dun01,0,0 monster Furious Explosion 2837,1,300000 moc_fild13,0,0 monster Solid Steel Chonchon 2642,3,180000
gl_church,0,0 monster Elusive Evil Druid 2838,2,300000 moc_fild16,0,0 monster Furious Sandman 2674,2,180000
prt_fild10,0,0 monster Swift Elder Willow 2839,3,300000 moc_fild17,0,0 monster Furious Hode 2802,2,180000
mjolnir_02,0,0 monster Solid Elder Willow 2840,3,300000 moc_fild18,0,0 monster Elusive Scorpion 2670,3,180000
ra_san04,0,0 monster Echio Ringleader 2841,1,300000 moc_fild20,0,0 monster Swift Incarnation of Morocc 2744,1,180000
mjolnir_12,0,0 monster Furious Dustiness 2842,2,300000 moc_fild21,0,0 monster Elusive Incarnation of Morocc 2743,2,180000
um_fild01,0,0 monster Swift Dryad 2843,2,300000 moc_fild22,0,0 monster Furious Incarnation of Morocc 2742,3,180000
ve_fild02,0,0 monster Solid Drosera 2844,2,300000 moc_pryd02,0,0 monster Solid Mummy 2740,2,180000
moc_fild07,0,0 monster Drops Ringleader 2845,3,300000 moc_pryd03,0,0 monster Swift Mummy 2739,2,180000
mjolnir_04,0,0 monster Furious Driller 2846,3,300000 moc_pryd04,0,0 monster Solid Isis 2790,2,180000
in_sphinx1,0,0 monster Elusive Drainliar 2847,1,300000 moc_pryd05,0,0 monster Elusive Minorous 2748,2,180000
tur_dun01,0,0 monster Swift Dragon Tail 2848,1,300000 moc_pryd06,0,0 monster Elusive Mimic 2753,2,180000
nyd_dun01,0,0 monster Solid Draco 2849,2,300000 moc_prydn1,0,0 monster Furious Minorous 2747,2,180000
dic_fild02,0,0 monster Dolomedes Ringleader 2850,2,300000 moc_prydn2,0,0 monster Furious Mimic 2752,2,180000
pay_dun04,0,0 monster Furious Dokebi 2851,2,300000 mosk_dun01,0,0 monster Elusive Wood Goblin 2612,2,180000
nif_fild01,0,0 monster Elusive Disguise 2852,2,300000 mosk_dun02,0,0 monster Swift Les 2779,1,180000
jupe_core,0,0 monster Swift Dimik 2853,3,300000 mosk_dun03,0,0 monster Elusive Vavayaga 2626,2,180000
gef_dun02,0,0 monster Solid Deviruchi 2854,2,300000 mosk_fild02,0,0 monster Solid Side Winder 2662,1,180000
ra_fild01,0,0 monster Baby Desert Wolf Ringleader 2855,2,300000 nameless_n,0,0 monster Furious Ghoul 2822,1,180000
moc_fild11,0,0 monster Furious Baby Desert Wolf 2856,3,300000 new_1-3,0,0 monster Baby Poring Ringleader 2776,2,180000
cmd_fild08,0,0 monster Elusive Deniro 2857,2,300000 nif_fild01,0,0 monster Elusive Disguise 2852,2,180000
anthell01,0,0 monster Elusive Deniro 2857,3,300000 nif_fild02,0,0 monster Swift Loli Ruri 2774,1,180000
tha_t06,0,0 monster Swift Death Word 2858,2,300000 niflheim,0,0 monster Furious Lude 2772,1,180000
//tha_t06,0,0 monster Swift Death Word 2858,3,300000 //--Applied after Thanatos Revamped Patch. nyd_dun01,0,0 monster Solid Draco 2849,2,180000
tha_t04,0,0 monster Solid Death Word 2859,2,300000 odin_tem01,0,0 monster Breeze Ringleader 2880,1,180000
tha_t03,0,0 monster Death Word Ringleader 2860,2,300000 odin_tem02,0,0 monster Solid Skogul 2657,1,180000
gl_chyard,0,0 monster Furious Dark Priest 2861,2,300000 odin_tem03,0,0 monster Plasma Ringleader 2706,2,180000
lou_dun03,0,0 monster Elusive Zhu Po Long 2862,1,300000 orcsdun01,0,0 monster Elusive Orc Zombie 2723,2,180000
gef_fild05,0,0 monster Swift Creamy 2863,2,300000 orcsdun02,0,0 monster Swift Orc Skeleton 2724,2,180000
iz_dun02,0,0 monster Solid Cornutus 2864,2,300000 pay_dun00,0,0 monster Furious Zombie 2606,2,180000
xmas_dun01,0,0 monster Cookie Ringleader 2865,2,300000 pay_dun01,0,0 monster Furious Soldier Skeleton 2649,2,180000
kh_kiehl01,0,0 monster Furious Constant 2866,2,300000 pay_dun02,0,0 monster Soldier Skeleton Ringleader 2648,3,180000
dew_dun01,0,0 monster Elusive Comodo 2867,2,300000 pay_dun03,0,0 monster Swift Sohee 2651,2,180000
gef_fild09,0,0 monster Swift Coco 2868,2,300000 pay_dun04,0,0 monster Furious Dokebi 2851,2,180000
gef_fild02,0,0 monster Solid Coco 2869,3,300000 pay_fild01,0,0 monster Willow Ringleader 2615,2,180000
c_tower4,0,0 monster Clock Ringleader 2870,2,300000 pay_fild02,0,0 monster Boa Ringleader 2653,3,180000
c_tower2,0,0 monster Furious Clock 2871,1,300000 pay_fild03,0,0 monster Fabre Ringleader 2836,3,180000
gef_fild00,0,0 monster Elusive Chonchon 2872,2,300000 pay_fild04,0,0 monster Elusive Poporing 2703,2,180000
dic_fild01,0,0 monster Swift Centipede 2873,2,300000 pay_fild06,0,0 monster Wormtail Ringleader 2610,3,180000
ecl_tdun01,0,0 monster Solid Cenere 2874,1,300000 pay_fild07,0,0 monster Bigfoot Ringleader 2884,2,180000
lhz_dun04,0,0 monster Celia Ringleader 2875,3,300000 pay_fild09,0,0 monster Solid Horn 2800,2,180000
gld_dun03,0,0 monster Furious Caterpillar 2876,2,300000 pay_fild10,0,0 monster Swift Greatest General 2809,2,180000
gl_cas01,0,0 monster Elusive Carat 2877,2,300000 prt_fild00,0,0 monster Roda Frog Ringleader 2678,2,180000
mjolnir_01,0,0 monster Swift Caramel 2878,2,300000 prt_fild01,0,0 monster Lunatic Ringleader 2771,2,180000
ma_fild02,0,0 monster Solid Bungisngis 2879,2,300000 prt_fild02,0,0 monster Elusive Stainer 2645,3,180000
odin_tem01,0,0 monster Breeze Ringleader 2880,1,300000 prt_fild03,0,0 monster Swift Yoyo 2608,2,180000
lhz_fild03,0,0 monster Furious Breeze 2881,3,300000 prt_fild04,0,0 monster Elusive Ambernite 2905,2,180000
man_fild02,0,0 monster Elusive Bradium Golem 2882,2,300000 prt_fild05,0,0 monster Elusive Hornet 2798,2,180000
gon_dun01,0,0 monster Swift Bloody Butterfly 2883,2,300000 prt_fild06,0,0 monster Solid Fabre 2835,2,180000
pay_fild07,0,0 monster Bigfoot Ringleader 2884,2,300000 prt_fild07,0,0 monster Elusive Rocker 2680,3,180000
alde_dun04,0,0 monster Furious Bathory 2885,1,300000 prt_fild08,0,0 monster Solid Lunatic 2770,1,180000
arug_dun01,0,0 monster Elusive Banshee Master 2886,2,300000 prt_fild08,0,0 monster Poring Ringleader 2696,1,180000
abbey01,0,0 monster Swift Banshee 2887,3,300000 prt_fild08,0,0 monster Furious Poring 2697,1,180000
dew_dun02,0,0 monster Solid Banaspaty 2888,2,300000 prt_fild08,0,0 monster Elusive Poring 2698,1,180000
tur_dun04,0,0 monster Assaulter Ringleader 2889,1,300000 prt_fild08,0,0 monster Swift Poring 2699,1,180000
mjolnir_10,0,0 monster Furious Argos 2890,2,300000 prt_fild09,0,0 monster Elusive Magnolia 2768,2,180000
mjolnir_11,0,0 monster Elusive Argiope 2891,2,300000 prt_fild10,0,0 monster Swift Elder Willow 2839,3,180000
mjolnir_05,0,0 monster Swift Argiope 2892,2,300000 prt_fild11,0,0 monster Elusive Goblin 2813,3,180000
gl_dun01,0,0 monster Solid Arclouze 2893,1,300000 prt_maze01,0,0 monster Solid Savage 2672,2,180000
alde_dun01,0,0 monster Arclouze Ringleader 2894,1,300000 prt_maze02,0,0 monster Furious Poporing 2702,2,180000
juperos_02,0,0 monster Furious Apocalypse 2895,3,300000 prt_maze03,0,0 monster Poporing Ringleader 2701,2,180000
dic_dun02,0,0 monster Elusive Antler Scaraba 2896,2,300000 prt_maze03,0,0 monster Swift Mantis 2764,2,180000
ecl_tdun03,0,0 monster Swift Antique Book 2897,1,300000 prt_sewb1,0,0 monster Elusive Familiar 2833,1,180000
ecl_tdun02,0,0 monster Solid Antique Book 2898,1,300000 prt_sewb2,0,0 monster Furious Thief Bug 2634,2,180000
gl_sew04,0,0 monster Furious Anolian 2899,2,300000 prt_sewb3,0,0 monster Thief Bug Ringleader 2633,3,180000
gld2_ald,0,0 monster Elusive Angra Mantis 2900,2,300000 prt_sewb4,0,0 monster Solid Thief Bug 2632,2,180000
gld_dun02_2,0,0 monster Swift Angra Mantis 2901,2,300000 ra_fild01,0,0 monster Baby Desert Wolf Ringleader 2855,2,180000
anthell02,0,0 monster Solid Andre 2902,2,300000 ra_fild03,0,0 monster Swift Hill Wind 2804,3,180000
tha_t02,0,0 monster Ancient Mimic Ringleader 2903,2,300000 ra_fild04,0,0 monster Elusive Hill Wind 2803,3,180000
ra_fild08,0,0 monster Furious Anacondaq 2904,2,300000 ra_fild05,0,0 monster Solid Kobold 2785,3,180000
prt_fild04,0,0 monster Elusive Ambernite 2905,2,300000 ra_fild06,0,0 monster Swift Kobold Archer 2784,3,180000
dew_fild01,0,0 monster Swift Rafflesia Arnoldi 2906,2,300000 ra_fild08,0,0 monster Furious Anacondaq 2904,2,180000
cmd_fild03,0,0 monster Solid Alligator 2907,3,300000 ra_fild12,0,0 monster Solid Roween 2677,2,180000
kh_dun01,0,0 monster Aliza Ringleader 2908,1,300000 ra_san01,0,0 monster Swift Vanberk 2627,2,180000
kh_dun02,0,0 monster Furious Alicel 2909,1,300000 ra_san02,0,0 monster Isilla Ringleader 2791,2,180000
c_tower3,0,0 monster Elusive Alarm 2910,1,300000 ra_san03,0,0 monster Hodremlin Ringleader 2801,2,180000
ra_san05,0,0 monster Swift Agav 2911,2,300000 ra_san04,0,0 monster Echio Ringleader 2841,1,180000
abyss_03,0,0 monster Solid Acidus 2912,2,300000 ra_san05,0,0 monster Swift Agav 2911,2,180000
abyss_02,0,0 monster Acidus Ringleader 2913,2,300000 schg_dun01,0,0 monster Elusive Zakudam 2607,2,180000
spl_fild01,0,0 monster Solid Dark Pinguicula 2710,2,180000
spl_fild02,0,0 monster Pinguicula Ringleader 2711,2,180000
spl_fild03,0,0 monster Elusive Luciola Vespa 2773,1,180000
teg_dun01,0,0 monster Elusive Eremes 2783,2,180000,0
teg_dun02,0,0 monster Furious Wickebine Tres 2782,2,180000,0
tha_t01,0,0 monster Swift Rideword 2681,2,180000
//tha_t01,0,0 monster Swift Rideword 2681,1,180000 //--Applied after Thanatos Revamped Patch.
tha_t02,0,0 monster Ancient Mimic Ringleader 2903,2,180000
tha_t03,0,0 monster Death Word Ringleader 2860,2,180000
tha_t04,0,0 monster Solid Death Word 2859,2,180000
tha_t05,0,0 monster Owl Duke Ringleader 2721,2,180000
//tha_t05,0,0 monster Owl Duke Ringleader 2721,3,180000 //--Applied after Thanatos Revamped Patch.
tha_t06,0,0 monster Swift Death Word 2858,2,180000
//tha_t06,0,0 monster Swift Death Word 2858,3,180000 //--Applied after Thanatos Revamped Patch.
tha_t07,0,0 monster Swift Baroness of Retribution 2686,2,180000
//tha_t07,0,0 monster Swift Baroness of Retribution 2686,1,180000 //--Applied after Thanatos Revamped Patch.
tha_t08,0,0 monster Elusive Baroness of Retribution 2685,2,180000
//tha_t08,0,0 monster Elusive Baroness of Retribution 2685,1,180000 //--Applied after Thanatos Revamped Patch.
tha_t09,0,0 monster Elusive Lady Solace 2650,2,180000 //--Remove after Thanatos Ravamped Patch
tha_t10,0,0 monster Furious Baroness of Retribution 2684,2,180000 //--Remove after Thanatos Ravamped Patch
tha_t11,0,0 monster Elusive Mistress of Shelter 2665,2,180000 //--Remove after Thanatos Ravamped Patch
tha_t12,0,0 monster Dame of Sentinel Ringleader 2726,2,180000 //--Remove after Thanatos Ravamped Patch
thor_v01,0,0 monster Elusive Kasa 2788,2,180000
thor_v02,0,0 monster Knocker Ringleader 2786,1,180000
thor_v03,0,0 monster Elusive Salamander 2675,2,180000
treasure_n1,0,0 monster Swift Spore 2646,2,180000
treasure_n2,0,0 monster Weak Skeleton Ringleader 2619,2,180000
treasure02,0,0 monster Swift Sailor Skeleton 2676,1,180000
treasure02,0,0 monster Penomena Ringleader 2716,2,180000
tur_dun01,0,0 monster Swift Dragon Tail 2848,1,180000
tur_dun02,0,0 monster Solid Solider 2647,2,180000
tur_dun03,0,0 monster Freezer Ringleader 2831,1,180000
tur_dun04,0,0 monster Assaulter Ringleader 2889,1,180000
tur_dun05,0,0 monster Solid Freezer 2830,1,180000
um_fild01,0,0 monster Swift Dryad 2843,2,180000
um_fild02,0,0 monster Furious Wootan Fighter 2611,1,180000
um_fild03,0,0 monster Solid Parasite 2720,1,180000
um_fild04,0,0 monster Furious Wild Rose 2616,1,180000
ve_fild01,0,0 monster Elusive Galion 2828,1,180000
ve_fild02,0,0 monster Solid Drosera 2844,2,180000
ve_fild03,0,0 monster Swift Magmaring 2769,2,180000
ve_fild04,0,0 monster Elusive Muscipular 2738,2,180000
ve_fild07,0,0 monster Stapo Ringleader 2643,2,180000
xmas_dun01,0,0 monster Cookie Ringleader 2865,2,180000
xmas_dun02,0,0 monster Furious Myst Case 2737,2,180000
xmas_fild01,0,0 monster Furious Marin 2762,1,180000
yuno_fild01,0,0 monster Solid Geographer 2825,2,180000
yuno_fild02,0,0 monster Swift Sleeper 2656,2,180000
yuno_fild03,0,0 monster Furious Harpy 2807,3,180000
yuno_fild04,0,0 monster Harpy Ringleader 2806,3,180000
yuno_fild06,0,0 monster Elusive Sleeper 2655,1,180000
yuno_fild07,0,0 monster Goat Ringleader 2816,2,180000
yuno_fild08,0,0 monster Grand Peco Ringleader 2811,2,180000
yuno_fild09,0,0 monster Solid Grand Peco 2810,2,180000
yuno_fild11,0,0 monster Solid Goat 2815,2,180000
yuno_fild12,0,0 monster Swift Geographer 2824,1,180000

View File

@ -3,7 +3,7 @@
//===== By: ================================================== //===== By: ==================================================
//= Athena (1.0) //= Athena (1.0)
//===== Current Version: ===================================== //===== Current Version: =====================================
//= 1.7 //= 1.8
//===== Additional Comments: ================================= //===== Additional Comments: =================================
//= 1.2 fixed some map name typos [Lupus] //= 1.2 fixed some map name typos [Lupus]
//= 1.3 Official kRO 10.1 spawns [Playtester] //= 1.3 Official kRO 10.1 spawns [Playtester]
@ -11,6 +11,7 @@
//= 1.5 Updated to Renewal spawns. //= 1.5 Updated to Renewal spawns.
//= 1.6 Added Prontera Field 8 duplicates. [Euphy] //= 1.6 Added Prontera Field 8 duplicates. [Euphy]
//= 1.7 Correct Spawn by Navigation's mob data. [attackjom] //= 1.7 Correct Spawn by Navigation's mob data. [attackjom]
//= 1.8 Official 18.1 Field 8 spawns, duplicates removed [Playtester]
//============================================================ //============================================================
//================================================== //==================================================
@ -90,36 +91,27 @@ prt_fild07,225,110,5,5 monster Black Mushroom 1084,3,360000,180000
//================================================== //==================================================
// prt_fild08 - Prontera Field // prt_fild08 - Prontera Field
//================================================== //==================================================
prt_fild08,0,0 monster Poring 1002,110,5000 prt_fild08,0,0 monster Poring 1002,20,5000
prt_fild08,0,0 monster Lunatic 1063,110,5000 prt_fild08,0,0 monster Lunatic 1063,20,5000
prt_fild08,0,0 monster Fabre 1007,88,5000 prt_fild08,0,0 monster Fabre 1007,10,5000
prt_fild08,0,0 monster Little Poring 2398,33,50000 prt_fild08,305,233,10,10 monster Poring 1002,2,15000
prt_fild08,0,0 monster Pupa 1008,66,5000 prt_fild08,305,233,10,10 monster Lunatic 1063,2,15000
prt_fild08,305,233,10,10 monster Fabre 1007,2,15000
//================================================== prt_fild08,271,249,20,20 monster Poring 1002,5,15000
// prt_fild08 - Duplicates prt_fild08,271,249,20,20 monster Lunatic 1063,5,15000
//================================================== prt_fild08,271,249,20,20 monster Fabre 1007,5,15000
prt_fild08a,0,0 monster Poring 1002,110,5000 prt_fild08,94,335,50,50 monster Poring 1002,20,10000
prt_fild08a,0,0 monster Lunatic 1063,110,5000 prt_fild08,166,334,50,50 monster Poring 1002,20,10000
prt_fild08a,0,0 monster Fabre 1007,88,5000 prt_fild08,253,337,50,50 monster Poring 1002,20,10000
prt_fild08a,0,0 monster Little Poring 2398,33,50000 prt_fild08,228,230,30,30 monster Lunatic 1063,10,10000
prt_fild08a,0,0 monster Pupa 1008,66,5000 prt_fild08,246,263,50,50 monster Lunatic 1063,10,10000
prt_fild08b,0,0 monster Poring 1002,110,5000 prt_fild08,190,237,50,50 monster Lunatic 1063,10,10000
prt_fild08b,0,0 monster Lunatic 1063,110,5000 prt_fild08,100,256,50,50 monster Lunatic 1063,10,10000
prt_fild08b,0,0 monster Fabre 1007,88,5000 prt_fild08,70,164,70,70 monster Fabre 1007,20,10000
prt_fild08b,0,0 monster Little Poring 2398,33,50000 prt_fild08,144,147,70,70 monster Fabre 1007,20,10000
prt_fild08b,0,0 monster Pupa 1008,66,5000 prt_fild08,263,79,90,90 monster Fabre 1007,20,10000
prt_fild08c,0,0 monster Poring 1002,110,5000 prt_fild08,336,113,40,40 monster Pupa 1008,20,10000
prt_fild08c,0,0 monster Lunatic 1063,110,5000 prt_fild08,330,269,40,40 monster Little Poring 2398,20,10000
prt_fild08c,0,0 monster Fabre 1007,88,5000
prt_fild08c,0,0 monster Little Poring 2398,33,50000
prt_fild08c,0,0 monster Pupa 1008,66,5000
prt_fild08d,0,0 monster Poring 1002,110,5000
prt_fild08d,0,0 monster Lunatic 1063,110,5000
prt_fild08d,0,0 monster Fabre 1007,88,5000
prt_fild08d,0,0 monster Little Poring 2398,33,50000
prt_fild08d,0,0 monster Pupa 1008,66,5000
//================================================== //==================================================
// prt_fild09 - Prontera Field // prt_fild09 - Prontera Field

View File

@ -11497,6 +11497,8 @@ static const struct _battle_data {
{ "mob_respawn_time", &battle_config.mob_respawn_time, 1000, 1000, INT_MAX, }, { "mob_respawn_time", &battle_config.mob_respawn_time, 1000, 1000, INT_MAX, },
{ "mob_unlock_time", &battle_config.mob_unlock_time, 2000, 0, INT_MAX, }, { "mob_unlock_time", &battle_config.mob_unlock_time, 2000, 0, INT_MAX, },
{ "map_edge_size", &battle_config.map_edge_size, 15, 1, 40, },
{ "randomize_center_cell", &battle_config.randomize_center_cell, 1, 0, 1, },
{ "feature.stylist", &battle_config.feature_stylist, 1, 0, 1, }, { "feature.stylist", &battle_config.feature_stylist, 1, 0, 1, },
{ "feature.banking_state_enforce", &battle_config.feature_banking_state_enforce, 0, 0, 1, }, { "feature.banking_state_enforce", &battle_config.feature_banking_state_enforce, 0, 0, 1, },

View File

@ -749,6 +749,8 @@ struct Battle_Config
int mob_respawn_time; int mob_respawn_time;
int mob_unlock_time; int mob_unlock_time;
int map_edge_size;
int randomize_center_cell;
int feature_stylist; int feature_stylist;
int feature_banking_state_enforce; int feature_banking_state_enforce;

View File

@ -1699,9 +1699,9 @@ static int map_count_sub(struct block_list *bl,va_list ap)
* &2 = the target should be able to walk to the target tile. * &2 = the target should be able to walk to the target tile.
* &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting) * &4 = there shouldn't be any players around the target tile (use the no_spawn_on_player setting)
*------------------------------------------*/ *------------------------------------------*/
int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int16 rx, int16 ry, int flag) int map_search_freecell(struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag, int32 tries)
{ {
int tries, spawn=0; int spawn=0;
int bx, by; int bx, by;
if( !src && (!(flag&1) || flag&2) ) if( !src && (!(flag&1) || flag&2) )
@ -1731,21 +1731,23 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1
return 0; return 0;
} }
if (rx >= 0 && ry >= 0) { int16 edge = battle_config.map_edge_size;
tries = (rx * 2 + 1) * (ry * 2 + 1); int16 edge_valid = std::min(edge, (int16)5);
if (tries > 100) tries = 100; // In most situations there are 50 tries officially (default value)
} else {
tries = mapdata->xs*mapdata->ys;
if (tries > 500) tries = 500;
}
while(tries--) { while(tries--) {
*x = (rx >= 0) ? rnd_value(bx - rx, bx + rx) : rnd_value<int16>(1, mapdata->xs - 1); // For map-wide search, the configured tiles from the edge are not considered (default: 15)
*y = (ry >= 0) ? rnd_value(by - ry, by + ry) : rnd_value<int16>(1, mapdata->ys - 1); *x = (rx >= 0) ? rnd_value(bx - rx, bx + rx) : rnd_value<int16>(edge, mapdata->xs - edge - 1);
*y = (ry >= 0) ? rnd_value(by - ry, by + ry) : rnd_value<int16>(edge, mapdata->ys - edge - 1);
if (*x == bx && *y == by) if (*x == bx && *y == by)
continue; //Avoid picking the same target tile. continue; //Avoid picking the same target tile.
// Cells outside the map or within 4-5 cells of the map edge are considered invalid officially
// Note that unlike the other edge, this isn't symmetric (NE - 4 cells, SW - 5 cells)
// If for some reason edge size was set to below 5 cells, we consider them as valid
if (*x < edge_valid || *x > mapdata->xs - edge_valid || *y < edge_valid || *y > mapdata->ys - edge_valid)
continue;
if (map_getcell(m,*x,*y,CELL_CHKREACH)) if (map_getcell(m,*x,*y,CELL_CHKREACH))
{ {
if(flag&2 && !unit_can_reach_pos(src, *x, *y, 1)) if(flag&2 && !unit_can_reach_pos(src, *x, *y, 1))
@ -1754,11 +1756,12 @@ int map_search_freecell(struct block_list *src, int16 m, int16 *x,int16 *y, int1
if (spawn >= 100) return 0; //Limit of retries reached. if (spawn >= 100) return 0; //Limit of retries reached.
if (spawn++ < battle_config.no_spawn_on_player && if (spawn++ < battle_config.no_spawn_on_player &&
map_foreachinallarea(map_count_sub, m, map_foreachinallarea(map_count_sub, m,
*x-AREA_SIZE, *y-AREA_SIZE, *x - AREA_SIZE, *y - AREA_SIZE,
*x+AREA_SIZE, *y+AREA_SIZE, BL_PC) *x + AREA_SIZE, *y + AREA_SIZE, BL_PC)) {
) tries++; // This failure should not affect the number of official tries
continue; continue;
} }
}
return 1; return 1;
} }
} }

View File

@ -1124,7 +1124,7 @@ int map_count_oncell(int16 m,int16 x,int16 y,int type,int flag);
struct skill_unit *map_find_skill_unit_oncell(struct block_list *,int16 x,int16 y,uint16 skill_id,struct skill_unit *, int flag); struct skill_unit *map_find_skill_unit_oncell(struct block_list *,int16 x,int16 y,uint16 skill_id,struct skill_unit *, int flag);
// search and creation // search and creation
int map_get_new_object_id(void); int map_get_new_object_id(void);
int map_search_freecell(struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag); int map_search_freecell(struct block_list *src, int16 m, int16 *x, int16 *y, int16 rx, int16 ry, int flag, int32 tries = 50);
bool map_closest_freecell(int16 m, int16 *x, int16 *y, int type, int flag); bool map_closest_freecell(int16 m, int16 *x, int16 *y, int type, int flag);
// //
int map_quit(map_session_data *); int map_quit(map_session_data *);

View File

@ -474,6 +474,8 @@ struct mob_data* mob_spawn_dataset(struct spawn_data *data)
md->spawn_timer = INVALID_TIMER; md->spawn_timer = INVALID_TIMER;
md->deletetimer = INVALID_TIMER; md->deletetimer = INVALID_TIMER;
md->skill_idx = -1; md->skill_idx = -1;
md->centerX = data->x;
md->centerY = data->y;
status_set_viewdata(&md->bl, md->mob_id); status_set_viewdata(&md->bl, md->mob_id);
status_change_init(&md->bl); status_change_init(&md->bl);
unit_dataset(&md->bl); unit_dataset(&md->bl);
@ -1084,11 +1086,12 @@ int mob_setdelayspawn(struct mob_data *md)
int mob_count_sub(struct block_list *bl, va_list ap) { int mob_count_sub(struct block_list *bl, va_list ap) {
int mobid[10], i; int mobid[10], i;
ARR_FIND(0, 10, i, (mobid[i] = va_arg(ap, int)) == 0); //fetch till 0 ARR_FIND(0, 10, i, (mobid[i] = va_arg(ap, int)) == 0); //fetch till 0
if (mobid[0]) { //if there one let's check it otherwise go backward mob_data* md = BL_CAST(BL_MOB, bl);
TBL_MOB *md = BL_CAST(BL_MOB, bl); if (md && mobid[0]) { //if there one let's check it otherwise go backward
ARR_FIND(0, 10, i, md->mob_id == mobid[i]); ARR_FIND(0, 10, i, md->mob_id == mobid[i]);
return (i < 10) ? 1 : 0; return (i < 10) ? 1 : 0;
} }
// If not counting monsters, count all
return 1; //backward compatibility return 1; //backward compatibility
} }
@ -1116,20 +1119,33 @@ int mob_spawn (struct mob_data *md)
if (md->spawn) { //Respawn data if (md->spawn) { //Respawn data
md->bl.m = md->spawn->m; md->bl.m = md->spawn->m;
md->bl.x = md->spawn->x; md->bl.x = md->centerX;
md->bl.y = md->spawn->y; md->bl.y = md->centerY;
if( (md->bl.x == 0 && md->bl.y == 0) || md->spawn->xs || md->spawn->ys ) // Search can be skipped for boss monster spawns if spawn location is fixed
{ //Monster can be spawned on an area. // We can't skip normal monsters as they should pick a random location if the cell is blocked (e.g. Icewall)
if( !map_search_freecell(&md->bl, -1, &md->bl.x, &md->bl.y, md->spawn->xs, md->spawn->ys, battle_config.no_spawn_on_player?4:0) ) // The center cell has a 1/(xs*ys) chance to be picked if free
{ // retry again later if ((!md->spawn->state.boss || (md->bl.x == 0 && md->bl.y == 0) || md->spawn->xs != 1 || md->spawn->ys != 1)
if( md->spawn_timer != INVALID_TIMER ) && (md->spawn->xs + md->spawn->ys < 1 || !rnd_chance(1, md->spawn->xs * md->spawn->ys) || !map_getcell(md->bl.m, md->bl.x, md->bl.y, CELL_CHKREACH)))
{
// Officially the area is split into 4 squares, 4 lines and 1 dot and for each of those there is one attempt
// We simplify this to trying 8 times in the whole area and then at the center cell even though that's not fully accurate
// Try to spawn monster in defined area (8 tries)
if (!map_search_freecell(&md->bl, -1, &md->bl.x, &md->bl.y, md->spawn->xs-1, md->spawn->ys-1, battle_config.no_spawn_on_player?4:0, 8))
{
// If area search failed and center cell not reachable, try to spawn the monster anywhere on the map (50 tries)
if (!map_getcell(md->bl.m, md->bl.x, md->bl.y, CELL_CHKREACH) && !map_search_freecell(&md->bl, -1, &md->bl.x, &md->bl.y, -1, -1, battle_config.no_spawn_on_player?4:0))
{
// Retry again later
if (md->spawn_timer != INVALID_TIMER)
delete_timer(md->spawn_timer, mob_delayspawn); delete_timer(md->spawn_timer, mob_delayspawn);
md->spawn_timer = add_timer(tick + battle_config.mob_respawn_time,mob_delayspawn,md->bl.id,0); md->spawn_timer = add_timer(tick + battle_config.mob_respawn_time, mob_delayspawn, md->bl.id, 0);
return 1; return 1;
} }
} }
else if( battle_config.no_spawn_on_player > 99 && map_foreachinallrange(mob_count_sub, &md->bl, AREA_SIZE, BL_PC) ) }
if( battle_config.no_spawn_on_player > 99 && map_foreachinallrange(mob_count_sub, &md->bl, AREA_SIZE, BL_PC) )
{ // retry again later (players on sight) { // retry again later (players on sight)
if( md->spawn_timer != INVALID_TIMER ) if( md->spawn_timer != INVALID_TIMER )
delete_timer(md->spawn_timer, mob_delayspawn); delete_timer(md->spawn_timer, mob_delayspawn);
@ -2091,6 +2107,13 @@ static int mob_ai_sub_lazy(struct mob_data *md, va_list args)
md->last_thinktime=tick; md->last_thinktime=tick;
if (md->master_id) { if (md->master_id) {
if (!mob_is_spotted(md)) {
// Get mob data of master
mob_data* mmd = map_id2md(md->master_id);
// If neither master nor slave have been spotted we don't have to execute the slave AI
if (mmd && !mob_is_spotted(mmd))
return 0;
}
mob_ai_sub_hard_slavemob (md,tick); mob_ai_sub_hard_slavemob (md,tick);
return 0; return 0;
} }

View File

@ -354,6 +354,7 @@ struct mob_data {
uint32 spotted_log[DAMAGELOG_SIZE]; uint32 spotted_log[DAMAGELOG_SIZE];
struct spawn_data *spawn; //Spawn data. struct spawn_data *spawn; //Spawn data.
int spawn_timer; //Required for Convex Mirror int spawn_timer; //Required for Convex Mirror
int16 centerX, centerY; // Spawn center of this individual monster
struct s_mob_lootitem *lootitems; struct s_mob_lootitem *lootitems;
short mob_id; short mob_id;
unsigned int tdmg; //Stores total damage given to the mob, for exp calculations. [Skotlex] unsigned int tdmg; //Stores total damage given to the mob, for exp calculations. [Skotlex]

View File

@ -5180,6 +5180,13 @@ void npc_parse_mob2(struct spawn_data* mob)
{ {
struct mob_data* md = mob_spawn_dataset(mob); struct mob_data* md = mob_spawn_dataset(mob);
md->spawn = mob; md->spawn = mob;
// Determine center cell for each mob in the spawn line
if (battle_config.randomize_center_cell) {
if (mob->xs > 1)
md->centerX = rnd_value(mob->x - mob->xs + 1, mob->x + mob->xs - 1);
if (mob->ys > 1)
md->centerY = rnd_value(mob->y - mob->ys + 1, mob->y + mob->ys - 1);
}
md->spawn->active++; md->spawn->active++;
mob_spawn(md); mob_spawn(md);
} }
@ -5188,7 +5195,7 @@ void npc_parse_mob2(struct spawn_data* mob)
static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath) static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
{ {
int num, mob_id, mob_lv = -1, delay = 5000, size = -1, w1count, w4count; int num, mob_id, mob_lv = -1, delay = 5000, size = -1, w1count, w4count;
short m, x = 0, y = 0, xs = -1, ys = -1; short m, x = 0, y = 0, xs = 0, ys = 0;
char mapname[MAP_NAME_LENGTH_EXT], mobname[NAME_LENGTH], sprite[NAME_LENGTH]; char mapname[MAP_NAME_LENGTH_EXT], mobname[NAME_LENGTH], sprite[NAME_LENGTH];
struct spawn_data mob, *data; struct spawn_data mob, *data;
int ai = AI_NONE; // mob_ai int ai = AI_NONE; // mob_ai
@ -5197,7 +5204,7 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
mob.state.boss = !strcmpi(w2,"boss_monster"); mob.state.boss = !strcmpi(w2,"boss_monster");
// w1=<map name>{,<x>,<y>,<xs>{,<ys>}} // w1=<map name>{,<x>,<y>{,<xs>,<ys>}}
// w3=<mob name>{,<mob level>} // w3=<mob name>{,<mob level>}
// w4=<mob id>,<amount>{,<delay1>{,<delay2>{,<event>{,<mob size>{,<mob ai>}}}}} // w4=<mob id>,<amount>{,<delay1>{,<delay2>{,<event>{,<mob size>{,<mob ai>}}}}}
if( ( w1count = sscanf(w1, "%15[^,],%6hd,%6hd,%6hd,%6hd", mapname, &x, &y, &xs, &ys) ) < 1 if( ( w1count = sscanf(w1, "%15[^,],%6hd,%6hd,%6hd,%6hd", mapname, &x, &y, &xs, &ys) ) < 1
@ -5289,28 +5296,35 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
mob.state.ai = static_cast<enum mob_ai>(ai); mob.state.ai = static_cast<enum mob_ai>(ai);
if (mob.xs < 0) { if (mob.xs < 0) {
if (w1count > 3) { ShowWarning("npc_parse_mob: Negative x-span %hd for mob ID %d (file '%s', line '%d'). Defaulting to map-wide.\n", mob.xs, mob_id, filepath, strline(buffer, start - buffer));
ShowWarning("npc_parse_mob: Negative x-span %hd for mob ID %d (file '%s', line '%d').\n", mob.xs, mob_id, filepath, strline(buffer, start - buffer));
}
mob.xs = 0; mob.xs = 0;
} }
else if (mob.xs == 0 && mob.x > 0) {
// Fixed X coordinate
// Need to set this to 1 as we reduce it by 1 when calling the search function
mob.xs = 1;
}
if (mob.ys < 0) { if (mob.ys < 0) {
if (w1count > 4) { ShowWarning("npc_parse_mob: Negative y-span %hd for mob ID %d (file '%s', line '%d'). Defaulting to map-wide.\n", mob.ys, mob_id, filepath, strline(buffer, start - buffer));
ShowWarning("npc_parse_mob: Negative y-span %hd for mob ID %d (file '%s', line '%d').\n", mob.ys, mob_id, filepath, strline(buffer, start - buffer));
}
mob.ys = 0; mob.ys = 0;
} }
else if (mob.ys == 0 && mob.y > 0) {
// Fixed Y coordinate
// Need to set this to 1 as we reduce it by 1 when calling the search function
mob.ys = 1;
}
if (mob.num > 1 && battle_config.mob_count_rate != 100) { if (mob.num > 1 && battle_config.mob_count_rate != 100) {
if ((mob.num = mob.num * battle_config.mob_count_rate / 100) < 1) if ((mob.num = mob.num * battle_config.mob_count_rate / 100) < 1)
mob.num = 1; mob.num = 1;
} }
if (battle_config.force_random_spawn || (mob.x == 0 && mob.y == 0)) if (battle_config.force_random_spawn || (mob.x == 0 && mob.y == 0)
|| (mob.xs == 1 && mob.ys == 1 && !map_getcell(mob.m, mob.x, mob.y, CELL_CHKREACH)))
{ //Force a random spawn anywhere on the map. { //Force a random spawn anywhere on the map.
mob.x = mob.y = 0; mob.x = mob.y = 0;
mob.xs = mob.ys = -1; mob.xs = mob.ys = 0;
} }
// Check if monsters should have variance applied to their respawn time // Check if monsters should have variance applied to their respawn time

View File

@ -7037,7 +7037,7 @@ enum e_setpos pc_setpos_savepoint( map_session_data& sd, clr_type clrtype ){
*------------------------------------------*/ *------------------------------------------*/
char pc_randomwarp(map_session_data *sd, clr_type type, bool ignore_mapflag) char pc_randomwarp(map_session_data *sd, clr_type type, bool ignore_mapflag)
{ {
int x,y,i=0; int16 x,y,i=0;
nullpo_ret(sd); nullpo_ret(sd);
@ -7046,9 +7046,10 @@ char pc_randomwarp(map_session_data *sd, clr_type type, bool ignore_mapflag)
if (mapdata->getMapFlag(MF_NOTELEPORT) && !ignore_mapflag) //Teleport forbidden if (mapdata->getMapFlag(MF_NOTELEPORT) && !ignore_mapflag) //Teleport forbidden
return 3; return 3;
int edge = battle_config.map_edge_size;
do { do {
x = rnd()%(mapdata->xs-2)+1; x = rnd_value<int16>(edge, mapdata->xs - edge - 1);
y = rnd()%(mapdata->ys-2)+1; y = rnd_value<int16>(edge, mapdata->ys - edge - 1);
} while((map_getcell(sd->bl.m,x,y,CELL_CHKNOPASS) || (!battle_config.teleport_on_portal && npc_check_areanpc(1,sd->bl.m,x,y,1))) && (i++) < 1000); } while((map_getcell(sd->bl.m,x,y,CELL_CHKNOPASS) || (!battle_config.teleport_on_portal && npc_check_areanpc(1,sd->bl.m,x,y,1))) && (i++) < 1000);
if (i < 1000) if (i < 1000)