Jelajahi Sumber

- Corrected crash if itemskill is used without an attached player.
- Removed range checks for autospells as per UltraMage Aegis tests.
- Added chatID skill fail check to skill_check_condition
- Corrected @refresh not re-displaying your spirit spheres nor re-setting your cloth dye.
- Now the "number of attackers" in mob_dead is counted only from online characters on the same map.


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

skotlex 18 tahun lalu
induk
melakukan
36a86d07e4
5 mengubah file dengan 21 tambahan dan 13 penghapusan
  1. 7 0
      Changelog-Trunk.txt
  2. 4 0
      src/map/clif.c
  3. 8 4
      src/map/mob.c
  4. 1 2
      src/map/script.c
  5. 1 7
      src/map/skill.c

+ 7 - 0
Changelog-Trunk.txt

@@ -4,6 +4,13 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2007/04/22
+	* Corrected crash if itemskill is used without an attached player.
+	* Removed range checks for autospells as per UltraMage Aegis tests.
+	* Added chatID skill fail check to skill_check_condition
+	* Corrected @refresh not re-displaying your spirit spheres nor re-setting
+	  your cloth dye.
+	* Now the "number of attackers" in mob_dead is counted only from online
+	  characters on the same map.
 	* Updated the autospell bonus scripts so you don't have to specify all the
 	  attack type criteria. If neither of BF_LONG/BF_SHORT is specified, the
 	  spell will trigger on both. If neither of BF_WEAPON/BF_MAGIC/BF_MISC is

+ 4 - 0
src/map/clif.c

@@ -7634,6 +7634,10 @@ int clif_refresh(struct map_session_data *sd) {
 	clif_updatestatus(sd,SP_INT);
 	clif_updatestatus(sd,SP_DEX);
 	clif_updatestatus(sd,SP_LUK);
+	if (sd->spiritball)
+		clif_spiritball_single(sd->fd, sd);
+	if (sd->vd.cloth_color)
+		clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
 	map_foreachinrange(clif_getareachar,&sd->bl,AREA_SIZE,BL_ALL,sd);
 	clif_weather_check(sd);
 	return 0;

+ 8 - 4
src/map/mob.c

@@ -1790,12 +1790,18 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		}
 	}
 
-	for(i=0,mvp_damage=0;i<DAMAGELOG_SIZE && md->dmglog[i].id;i++)
+	for(i=count=0,mvp_damage=0;i<DAMAGELOG_SIZE && md->dmglog[i].id;i++)
 	{
 		tmpsd[i] = map_charid2sd(md->dmglog[i].id);
 		if(tmpsd[i] == NULL)
 			continue;
-		if(tmpsd[i]->bl.m != m || pc_isdead(tmpsd[i]))
+		if(tmpsd[i]->bl.m != m)
+		{
+			tmpsd[i] = NULL;
+			continue;
+		}
+		count++; //Only logged into same map chars are counted for the total.
+		if (pc_isdead(tmpsd[i]))
 		{
 			tmpsd[i] = NULL;
 			continue;
@@ -1805,7 +1811,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 			tmpsd[i] = NULL;
 			continue;
 		}
-
 		if(mvp_damage<(unsigned int)md->dmglog[i].dmg){
 			third_sd = second_sd;
 			second_sd = mvp_sd;
@@ -1813,7 +1818,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 			mvp_damage=md->dmglog[i].dmg;
 		}
 	}
-	count = i; //Total number of attackers.
 
 	if(!battle_config.exp_calc_type && count > 1)
 	{	//Apply first-attacker 200% exp share bonus

+ 1 - 2
src/map/script.c

@@ -7110,8 +7110,7 @@ BUILDIN_FUNC(itemskill)
 	id=script_getnum(st,2);
 	lv=script_getnum(st,3);
 
-	// 詠唱中にスキルアイテムは使用できない
-	if(sd->ud.skilltimer != -1)
+	if(!sd || sd->ud.skilltimer != -1)
 		return 0;
 
 	sd->skillitem=id;

+ 1 - 7
src/map/skill.c

@@ -1440,9 +1440,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 			else
 				tbl = bl;
 
-			if (tbl != src && !battle_check_range(src, tbl, skill_get_range2(src, skill, skilllv)))
-				continue; //Autoskills DO check for target-src range. [Skotlex]
-			rate = skill_get_inf(skill);
 			switch (skill_get_casttype(skill)) {
 				case CAST_GROUND:
 					skill_castend_pos2(src, tbl->x, tbl->y, skill, skilllv, tick, 0);
@@ -1615,9 +1612,6 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
 			else
 				tbl = src;
 			
-			if (tbl != bl && !battle_check_range(bl, tbl, skill_get_range2(bl, skillid, skilllv)))
-				continue; //Autoskills DO check for target-src range. [Skotlex]
-			
 			switch (skill_get_casttype(skillid)) {
 				case CAST_GROUND:
 					skill_castend_pos2(bl, tbl->x, tbl->y, skillid, skilllv, tick, 0);
@@ -7964,7 +7958,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
 
 	nullpo_retr(0, sd);
 
-	if (lv <= 0) return 0;
+	if (lv <= 0 || sd->chatID) return 0;
 
 	if( battle_config.gm_skilluncond &&
 		pc_isGM(sd)>= battle_config.gm_skilluncond &&