From 380cf32eb6eab01d1d6786f9a1255a68a5f9aa1a Mon Sep 17 00:00:00 2001 From: greenboxal2 Date: Mon, 18 Jun 2012 21:51:08 +0000 Subject: Little optimization on MVP tombstone system, maybe fix insane CPU usage spikes(bugreport:5968). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16318 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/mob.c | 13 +++++++++---- src/map/mob.h | 4 ++-- src/map/unit.c | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/map/mob.c b/src/map/mob.c index b3316b5e9..86eee36f5 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -131,9 +131,12 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time) { struct npc_data *nd; + if (md->tomb_npc != NULL) + mvptomb_destroy(md); + CREATE(nd, struct npc_data, 1); - nd->bl.id = md->tomb_nid = npc_get_new_npc_id(); + nd->bl.id = npc_get_new_npc_id(); nd->ud.dir = md->ud.dir; nd->bl.m = md->bl.m; @@ -161,16 +164,18 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time) status_change_init(&nd->bl); unit_dataset(&nd->bl); clif_spawn(&nd->bl); + + md->tomb_npc = nd; } void mvptomb_destroy(struct mob_data *md) { - struct npc_data *nd = (struct npc_data *)map_id2bl(md->tomb_nid); + struct npc_data *nd = md->tomb_npc; if (nd) npc_unload(nd,true); - md->tomb_nid = 0; + md->tomb_npc = NULL; } /*========================================== @@ -966,7 +971,7 @@ int mob_spawn (struct mob_data *md) md->sc.option = md->db->option; // MvP tomb [GreenBox] - if (md->tomb_nid) + if (md->tomb_npc) mvptomb_destroy(md); map_addblock(&md->bl); diff --git a/src/map/mob.h b/src/map/mob.h index b7069c258..953bc287d 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -9,7 +9,7 @@ #include "map.h" // struct status_data, struct view_data, struct mob_skill #include "status.h" // struct status data, struct status_change #include "unit.h" // unit_stop_walking(), unit_stop_attack() - +#include "npc.h" #define MAX_RANDOMMONSTER 4 @@ -175,7 +175,7 @@ struct mob_data { **/ bool can_summon : 1; - int tomb_nid; + struct npc_data *tomb_npc; }; diff --git a/src/map/unit.c b/src/map/unit.c index c955fa686..6d4c9b9cf 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -2331,7 +2331,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) } if( mob_is_clone(md->class_) ) mob_clone_delete(md); - if( md->tomb_nid ) + if( md->tomb_npc ) mvptomb_destroy(md); break; } -- cgit v1.2.3-60-g2f50