From 06bff5ca4d55db05bd46868e551b60807920b29f Mon Sep 17 00:00:00 2001 From: ultramage Date: Thu, 13 Mar 2008 22:09:58 +0000 Subject: Replaced some foreach-based functions by their inlined iterator equivalents. Changed the dynamic mobs system, so that the flag that indicates whether a particular mob can be unloaded is stored in the mob's respawn data structure. Cleaned up related parts of the source code. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12358 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/unit.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/map/unit.c') diff --git a/src/map/unit.c b/src/map/unit.c index ed5980786..5a7a62b96 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1883,18 +1883,23 @@ int unit_free(struct block_list *bl, int clrtype) aFree(md->lootitem); md->lootitem=NULL; } - if (md->guardian_data) + if(md->guardian_data) { if (md->guardian_data->number < MAX_GUARDIANS) md->guardian_data->castle->guardian[md->guardian_data->number].id = 0; aFree(md->guardian_data); md->guardian_data = NULL; } - if (md->spawn && !md->special_state.cached && --(md->spawn->num) == 0) - { //Spawning data is not attached to the map, so free it - //if this is the last mob who is pointing at it. - aFree(md->spawn); - md->spawn = NULL; + if(md->spawn) + { + md->spawn->active--; + md->spawn->num--; + + if( !md->spawn->state.dynamic && md->spawn->num == 0 ) + {// Last freed mob is responsible for deallocating the group's spawn data. + aFree(md->spawn); + md->spawn = NULL; + } } if(md->base_status) { aFree(md->base_status); -- cgit v1.2.3-60-g2f50