浏览代码

- Status_check_skilluse again does the status_isdead check, but only on non-skills checks.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5597 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 年之前
父节点
当前提交
26841613d9
共有 3 个文件被更改,包括 15 次插入5 次删除
  1. 2 0
      Changelog-Trunk.txt
  2. 1 1
      src/map/battle.c
  3. 12 4
      src/map/status.c

+ 2 - 0
Changelog-Trunk.txt

@@ -5,6 +5,8 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 2006/03/14
+	* Changed a bit status_check_skilluse to check for dead characters, should
+	  fix all the weird attack/attacked while dead bugs. [Skotlex]
 	* Fixed player auto-attack not cancelling when dead. [Skotlex]
 2006/03/13
 	* Finished some checks to make sure Land Protector Only blocks BF_MAGIC

+ 1 - 1
src/map/battle.c

@@ -1605,7 +1605,7 @@ static struct Damage battle_calc_weapon_attack(
 					short index = sd->equip_index[8];
 					
 					wd.damage = status_get_batk(src);
-					if (flag.lh) wd.damage2 = status_get_batk(src);
+					if (flag.lh) wd.damage2 = wd.damage;
 
 					if (index >= 0 &&
 						sd->inventory_data[index] &&

+ 12 - 4
src/map/status.c

@@ -355,12 +355,20 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
 	struct status_change *sc=NULL, *tsc;
 
 	mode = src?status_get_mode(src):MD_CANATTACK;
-	
-	if (!skill_num && !(mode&MD_CANATTACK))
-		return 0; //This mode is only needed for melee attacking.
+
+	if (!skill_num) { //Normal attack checks.
+		if (!(mode&MD_CANATTACK))
+			return 0; //This mode is only needed for melee attacking.
+		//Dead state is not checked for skills as some skills can be used 
+		//by/on dead characters, said checks are left to skill.c [Skotlex]
+		if (src && status_isdead(src))
+			return 0;
+		if (target && status_isdead(target))
+			return 0;
+	}
 
 	if (skill_num == PA_PRESSURE && flag) {
-	//Gloria Avoids pretty much everythng....
+	//Gloria Avoids pretty much everything....
 		tsc = target?status_get_sc(target):NULL;
 		if(tsc) {
 			if (tsc->option&OPTION_HIDE)