summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt7
-rw-r--r--src/map/skill.c19
-rw-r--r--src/map/status.c12
3 files changed, 22 insertions, 16 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index ff85e5425..59079d046 100644
--- a/Changelog-Trunk.txt
+++ b/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
diff --git a/src/map/skill.c b/src/map/skill.c
index c9d449bdf..0e1889ef6 100644
--- a/src/map/skill.c
+++ b/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;
diff --git a/src/map/status.c b/src/map/status.c
index 04e01b8ba..5a9ce2531 100644
--- a/src/map/status.c
+++ b/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