Преглед на файлове

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1022 54d463be-8e91-2dee-dedb-b68131a5f0ec

(no author) преди 20 години
родител
ревизия
b99eedf204
променени са 2 файла, в които са добавени 10 реда и са изтрити 6 реда
  1. 4 0
      Changelog.txt
  2. 6 6
      src/map/skill.c

+ 4 - 0
Changelog.txt

@@ -1,5 +1,8 @@
 Date	Added
+
 02/02
+	* Added checks to prevent some crashes in skill.c
+	  [Full credit to shinomori] [SVN 1022: Ajarn]
         * Removed nullpo check in skillnotok() -- otherwise it will display fail 
           messages for monster skills [celest]
         * Added crash check for Ice Wall [celest]
@@ -25,6 +28,7 @@ Date	Added
           to char disconnection -- Fixes an odd crash with lazy mob AI [celest]
 	* Added at(@) command @autoloot, which turns autoloot on or off for the
 	  player who uses it [Upa-Kun]
+	  
 01/29
 	* Fixed Storage Bug with Named Stackable items. Thanks to Nimion [Lupus]
 		e.g. Arrows, Iron, Elemental stones, etc...

+ 6 - 6
src/map/skill.c

@@ -5819,7 +5819,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 	if(!goflag)
 		return 0;
 	ts->tick=tick;
-	
+
 	switch(sg->unit_id){
 	case 0x83:	/* ƒTƒ“ƒNƒ`ƒ…ƒAƒŠ */
 		{
@@ -5867,7 +5867,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 				if (sc_data[type].timer==-1)
 					status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
 				else if((unit2 = (struct skill_unit *)sc_data[type].val2) && unit2 != src){
-					if(unit2->group && DIFF_TICK(sg->tick,unit2->group->tick) > 0)
+					if(unit2 && unit2->group && DIFF_TICK(sg->tick,unit2->group->tick) > 0)
 						status_change_start(bl,type,sg->skill_lv,(int)src,0,0,0,0);
 					ts->tick-=sg->interval;
 				}
@@ -6020,7 +6020,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 				if (sc_data[type].timer==-1)
 					status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 				else if((unit2=(struct skill_unit *)sc_data[type].val2) && unit2 != src ){
-					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
+					if(unit2 && unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
 						status_change_start(bl,type,sg->skill_lv,(int)src,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 					ts->tick-=sg->interval;
 				}
@@ -6057,7 +6057,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 					status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
 						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 				else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
+					if(unit2 && unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
 						status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
 							(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 					ts->tick-=sg->interval;
@@ -6077,7 +6077,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 					status_change_start(bl,type,sg->skill_lv,(sg->val1)>>16,(sg->val1)&0xffff,
 						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 				else if((unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
+					if(unit2 && unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 )
 						status_change_start(bl,type,sg->skill_lv,(sg->val1)>>16,(sg->val1)&0xffff,
 							(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 					ts->tick-=sg->interval;
@@ -6097,7 +6097,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 					skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
 				}
 				else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
-					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 ) {
+					if(unit2 && unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 ) {
 						status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
 							(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
 						skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);