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

* Extended debugging code for bugreport:3504 (related r14599).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14801 54d463be-8e91-2dee-dedb-b68131a5f0ec
ai4rei 14 éve
szülő
commit
40ec74d163
4 módosított fájl, 30 hozzáadás és 4 törlés
  1. 2 0
      Changelog-Trunk.txt
  2. 4 0
      src/map/pc.h
  3. 22 3
      src/map/status.c
  4. 2 1
      src/map/status.h

+ 2 - 0
Changelog-Trunk.txt

@@ -1,5 +1,7 @@
 Date	Added
 
+2011/04/21
+	* Extended debugging code for bugreport:3504 (related r14599). [Ai4rei]
 2011/04/20
 	* Fixed quest_check checking exactly 3 quest objectives instead of MAX_QUEST_OBJECTIVES (since r13959). [Gepard]
 2011/04/17

+ 4 - 0
src/map/pc.h

@@ -421,6 +421,10 @@ struct map_session_data {
 
 	unsigned int bg_id;
 	unsigned short user_font;
+
+	// temporary debugging of bug #3504
+	const char* delunit_prevfile;
+	int delunit_prevline;
 };
 
 //Update this max as necessary. 55 is the value needed for Super Baby currently

+ 22 - 3
src/map/status.c

@@ -6429,7 +6429,7 @@ int status_change_clear(struct block_list* bl, int type)
 /*==========================================
  * ƒXƒe�[ƒ^ƒXˆÙ�í�I—¹
  *------------------------------------------*/
-int status_change_end(struct block_list* bl, enum sc_type type, int tid)
+int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line)
 {
 	struct map_session_data *sd;
 	struct status_change *sc;
@@ -6588,10 +6588,27 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
 			break;
 		case SC_DANCING:
 			{
+				const char* prevfile = "<unknown>";
+				int prevline = 0;
 				struct map_session_data *dsd;
 				struct status_change_entry *dsc;
 				struct skill_unit_group *group;
 
+				if( sd )
+				{
+					if( sd->delunit_prevfile )
+					{// initially this is NULL, when a character logs in
+						prevfile = sd->delunit_prevfile;
+						prevline = sd->delunit_prevline;
+					}
+					else
+					{
+						prevfile = "<none>";
+					}
+					sd->delunit_prevfile = file;
+					sd->delunit_prevline = line;
+				}
+
 				if(sce->val4 && sce->val4 != BCT_SELF && (dsd=map_id2sd(sce->val4)))
 				{// end status on partner as well
 					dsc = dsd->sc.data[SC_DANCING];
@@ -6608,10 +6625,12 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
 
 					if( group == NULL )
 					{
-						ShowDebug("status_change_end: SC_DANCING is missing skill unit group (val1=%d, val2=%d, val3=%d, val4=%d, timer=%d, tid=%d, char_id=%d, map=%s, x=%d, y=%d). Please report this! (#3504)\n",
+						ShowDebug("status_change_end: SC_DANCING is missing skill unit group (val1=%d, val2=%d, val3=%d, val4=%d, timer=%d, tid=%d, char_id=%d, map=%s, x=%d, y=%d, prev=%s:%d, from=%s:%d). Please report this! (#3504)\n",
 							sce->val1, sce->val2, sce->val3, sce->val4, sce->timer, tid,
 							sd ? sd->status.char_id : 0,
-							mapindex_id2name(map_id2index(bl->m)), bl->x, bl->y);
+							mapindex_id2name(map_id2index(bl->m)), bl->x, bl->y,
+							prevfile, prevline,
+							file, line);
 					}
 
 					sce->val2 = 0;

+ 2 - 1
src/map/status.h

@@ -1276,7 +1276,8 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
 #define sc_start4(bl, type, rate, val1, val2, val3, val4, tick) status_change_start(bl,type,100*(rate),val1,val2,val3,val4,tick,0)
 
 int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
-int status_change_end(struct block_list* bl, enum sc_type type, int tid);
+int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
+#define status_change_end(bl,type,tid) status_change_end_(bl,type,tid,__FILE__,__LINE__)
 int kaahi_heal_timer(int tid, unsigned int tick, int id, intptr data);
 int status_change_timer(int tid, unsigned int tick, int id, intptr data);
 int status_change_timer_sub(struct block_list* bl, va_list ap);