summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-03-19 22:02:26 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-03-19 22:02:26 +0000
commit4718c2c268bacd011912a5a3a483f192995eee9a (patch)
treeb7ba043c17232df91183382e38cd29a2b35785fe
parent566c55b79cfb5f09bd9ba9543eca1ff74786578c (diff)
downloadhercules-4718c2c268bacd011912a5a3a483f192995eee9a.tar.gz
hercules-4718c2c268bacd011912a5a3a483f192995eee9a.tar.bz2
hercules-4718c2c268bacd011912a5a3a483f192995eee9a.tar.xz
hercules-4718c2c268bacd011912a5a3a483f192995eee9a.zip
Changed the dynamic mobs system to also unload mobs that have respawn time but are already spawned - 22M less mem usage (bugreport:1197).
Also added a check to not respawn mobs on maps with no players (potentially unsafe operation, needs further inspection). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12402 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt5
-rw-r--r--src/map/mob.c7
-rw-r--r--src/map/npc.c2
3 files changed, 13 insertions, 1 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index f19f62799..9c7c517d1 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,11 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2008/03/19
+ * Changed the dynamic mobs system to also unload mobs that have respawn
+ time but are already spawned - 22M less mem usage (bugreport:1197)
+ - also added a check to not respawn mobs on maps with no players
+ (potentially unsafe operation, needs further inspection)
2008/03/18
* Fixed invited party members not displaying correctly (bugreport:1199)
* Fixed OnPCLoginEvent not working correctly (bugreport:1182) [ultramage]
diff --git a/src/map/mob.c b/src/map/mob.c
index a26726b21..36efd6614 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -888,6 +888,13 @@ int mob_spawn (struct mob_data *md)
md->bl.x = md->spawn->x;
md->bl.y = md->spawn->y;
+ if( map[md->spawn->m].users == 0 && md->spawn->state.dynamic )
+ {// cache the mob instead of spawning it
+ //FIXME: deleting 'md' is a potentially dangerous operation
+ unit_free(&md->bl,0);
+ return 0;
+ }
+
if ((md->bl.x == 0 && md->bl.y == 0) || md->spawn->xs || md->spawn->ys)
{ //Monster can be spawned on an area.
if (!map_search_freecell(&md->bl, -1,
diff --git a/src/map/npc.c b/src/map/npc.c
index 68b979a28..58cfac285 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2335,7 +2335,7 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
data = aMalloc(sizeof(struct spawn_data));
memcpy(data, &mob, sizeof(struct spawn_data));
- if( !battle_config.dynamic_mobs || data->delay1 || data->delay2 ) {
+ if( !battle_config.dynamic_mobs ) {
data->state.dynamic = false;
npc_parse_mob2(data);
npc_delay_mob += data->num;