Forráskód Böngészése

Little optimization on MVP tombstone system, maybe fix insane CPU usage spikes(bugreport:5968).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16318 54d463be-8e91-2dee-dedb-b68131a5f0ec
greenboxal2 13 éve
szülő
commit
3c161255d2
3 módosított fájl, 12 hozzáadás és 7 törlés
  1. 9 4
      src/map/mob.c
  2. 2 2
      src/map/mob.h
  3. 1 1
      src/map/unit.c

+ 9 - 4
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);

+ 2 - 2
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;
 };
 
 

+ 1 - 1
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;
 		}