浏览代码

* First attempt to fix up the strip skills, please make sure these fixes work (bugreport:3011)
- the minimum rate of strip skills is now 5% for all levels
- duration of strip skills depends on the dex difference between target and caster and can be reduced to 0
- strip skills can now affect bosses (if duration doesn't get reduced to 0 due to their high dex)
- strip skills do a fixed -25% ATK, -15% DEF, -40% VIT or -40% INT independant of skill level
- autocasting Full Strip has a duration now (if dex is high enough)

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

Playtester 16 年之前
父节点
当前提交
7a215a7119
共有 3 个文件被更改,包括 22 次插入16 次删除
  1. 7 0
      Changelog-Trunk.txt
  2. 11 8
      src/map/skill.c
  3. 4 8
      src/map/status.c

+ 7 - 0
Changelog-Trunk.txt

@@ -3,6 +3,13 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2009/04/25
+	* First attempt to fix up the strip skills, please make sure these fixes work (bugreport:3011) [Playtester]
+	- the minimum rate of strip skills is now 5% for all levels
+	- duration of strip skills depends on the dex difference between target and caster and can be reduced to 0
+	- strip skills can now affect bosses (if duration doesn't get reduced to 0 due to their high dex)
+	- strip skills do a fixed -25% ATK, -15% DEF, -40% VIT or -40% INT independant of skill level
+	- autocasting Full Strip has a duration now (if dex is high enough)
 2009/04/20
 	* Fixed safestrncpy trashing the memory before dst when n == 0. (since r10667) [FlavioJS]
 2009/04/15

+ 11 - 8
src/map/skill.c

@@ -4328,9 +4328,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case ST_FULLSTRIP:
 	{
 		unsigned short location = 0;
-		i = 5+2*skilllv;
-		if (sstatus->dex > tstatus->dex)
-			i += (sstatus->dex - tstatus->dex)/5;
+		int d = 0;
+		
+		//Rate in percent
+		i = 5 + 2*skilllv + (sstatus->dex - tstatus->dex)/5;
+		if (i < 5) i = 5; //Minimum rate 5%
+
+		//Duration in ms
+		d = skill_get_time(skillid,skilllv) + (sstatus->dex - tstatus->dex)*500;
+		if (d < 0) d = 0; //Minimum duration 0ms
 
 		switch (skillid) {
 		case RG_STRIPWEAPON:
@@ -4349,11 +4355,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			location = EQP_WEAPON|EQP_SHIELD|EQP_ARMOR|EQP_HELM;
 			break;
 		}
-		//Note that Full Strip autospell doesn't use a duration
-		if (!clif_skill_nodamage(src,bl,skillid,skilllv,
-				skill_strip_equip(bl, location, i, skilllv,
-				sd&&skillid==ST_FULLSTRIP&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv)))
-			&& sd)
+		//Attempts to strip at rate i and duration d
+		if (!clif_skill_nodamage(src,bl,skillid,skilllv,skill_strip_equip(bl, location, i, skilllv, d)) && sd)
 			clif_skill_fail(sd,skillid,0,0); //Nothing stripped.
 	}
 		break;

+ 4 - 8
src/map/status.c

@@ -4989,10 +4989,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			case SC_COMA:
 			case SC_GRAVITATION:
 			case SC_SUITON:
-			case SC_STRIPWEAPON:
-			case SC_STRIPSHIELD:
-			case SC_STRIPARMOR:
-			case SC_STRIPHELM:
 			case SC_RICHMANKIM:
 			case SC_ROKISWEIL:
 			case SC_FOGWALL:
@@ -5305,19 +5301,19 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			break;
 		case SC_STRIPWEAPON:
 			if (!sd) //Watk reduction
-				val2 = 5*val1;
+				val2 = 25;
 			break;
 		case SC_STRIPSHIELD:
 			if (!sd) //Def reduction
-				val2 = 3*val1;
+				val2 = 15;
 			break;
 		case SC_STRIPARMOR:
 			if (!sd) //Vit reduction
-				val2 = 8*val1;
+				val2 = 40;
 			break;
 		case SC_STRIPHELM:
 			if (!sd) //Int reduction
-				val2 = 8*val1;
+				val2 = 40;
 			break;
 		case SC_AUTOSPELL:
 			//Val1 Skill LV of Autospell