浏览代码

- Readded the check which prevents Cloaking from activating when your learned level is less than 3 and you aren't next to a wall.
- Some cleanups to the Frenzy/Berserk status change, it should probably work correctly now.


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

skotlex 19 年之前
父节点
当前提交
7cf5521c32
共有 3 个文件被更改,包括 17 次插入4 次删除
  1. 5 1
      Changelog-Trunk.txt
  2. 1 1
      src/map/skill.c
  3. 11 2
      src/map/status.c

+ 5 - 1
Changelog-Trunk.txt

@@ -4,7 +4,11 @@ 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.
 
 2006/07/27
-	* Removed a redeclared variable i in the parsing of the fame list (char-txt
+	* Readded the check which prevents Cloaking from activating when your
+	  learned level is less than 3 and you aren't next to a wall. [Skotlex]
+	* Some cleanups to the Frenzy/Berserk status change, it should probably
+	  work correctly now. [Skotlex]
+	* Removed a redeclared variable i in the parsing of the fame list (char-sql
 	  server) which seems to be the cause of the random memory corruptions.
 	  [Skotlex]
 	* Updated item_db.sql to latest. [Toms]

+ 1 - 1
src/map/skill.c

@@ -4722,7 +4722,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 					|| i==SC_SAFETYWALL || i==SC_SMA
 					)
 					continue;
-				if(i==SC_BERSERK) tsc->data[i].val4=1; //Mark a dispelled berserk to avoid setting hp to 100.
+				if(i==SC_BERSERK) tsc->data[i].val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
 				status_change_end(bl,i,-1);
 			}
 		}

+ 11 - 2
src/map/status.c

@@ -4428,6 +4428,14 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			if (sc->data[SC_QUAGMIRE].timer!=-1 || sc->data[SC_DONTFORGETME].timer!=-1)
 				return 0;
 		break;
+		case SC_CLOAKING:
+			//Avoid cloaking with no wall and low skill level. [Skotlex]
+			//Due to the cloaking card, we have to check the wall versus to known
+			//skill level rather than the used one. [Skotlex]
+			//if (sd && val1 < 3 && skill_check_cloaking(bl))
+			if (sd && pc_checkskill(sd, AS_CLOAKING)< 3 && skill_check_cloaking(bl,sc))
+				return 0;
+			break;
 		case SC_MODECHANGE:
 		{
 			int mode;
@@ -4998,6 +5006,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			//HP healing is performing after the calc_status call.
 			if (sd) sd->canregen_tick = gettick() + 300000;
 			//Val2 holds HP penalty
+			if (!val4) val4 = skill_get_time2(StatusSkillChangeTable[type],val1);
 			if (!val4) val4 = 10000; //Val4 holds damage interval
 			val3 = tick/val4; //val3 holds skill duration
 			tick = val4;
@@ -5853,8 +5862,8 @@ int status_change_end( struct block_list* bl , int type,int tid )
 			break;
 
 		case SC_BERSERK:
-			//val4 indicates if the skill was dispelled. [Skotlex]
-			if(status->hp > 100 && !sc->data[type].val4)
+			//If val2 is removed, no HP penalty (dispelled?) [Skotlex]
+			if(status->hp > 100 && sc->data[type].val2)
 				status_zap(bl, status->hp-100, 0); 
 			if(sc->data[SC_ENDURE].timer != -1)
 				status_change_end(bl, SC_ENDURE, -1);