summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxantara <xantara@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-08-05 22:52:11 +0000
committerxantara <xantara@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-08-05 22:52:11 +0000
commitdbc6ed73a3253e5e860385d4a514e55223bc228b (patch)
treec5006fd3ee85d898d2fe365a339499ff12c420d3 /src
parent4a79d5784b33d890ace51d93fb0106b3ab766f73 (diff)
downloadhercules-dbc6ed73a3253e5e860385d4a514e55223bc228b.tar.gz
hercules-dbc6ed73a3253e5e860385d4a514e55223bc228b.tar.bz2
hercules-dbc6ed73a3253e5e860385d4a514e55223bc228b.tar.xz
hercules-dbc6ed73a3253e5e860385d4a514e55223bc228b.zip
- Fixed bugreport:6295, Harmonize formula (now a skill debuff) and behaviour updated (caster also affected)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16587 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/skill.c4
-rw-r--r--src/map/status.c38
2 files changed, 28 insertions, 14 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index f42c2f9db..8246493ae 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -8267,7 +8267,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case MI_HARMONIZE:
- clif_skill_nodamage(src, bl, skillid, skilllv,sc_start(bl, type, 100, skilllv, skill_get_time(skillid,skilllv)));
+ if( src != bl )
+ clif_skill_nodamage(src, src, skillid, skilllv, sc_start(src, type, 100, skilllv, skill_get_time(skillid,skilllv)));
+ clif_skill_nodamage(src, bl, skillid, skilllv, sc_start(bl, type, 100, skilllv, skill_get_time(skillid,skilllv)));
break;
case WM_DEADHILLHERE:
diff --git a/src/map/status.c b/src/map/status.c
index c4a0e5583..7af476fc0 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4035,6 +4035,10 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(str,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ str -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(str,0,USHRT_MAX);
+ }
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && str < 50)
return 50;
if(sc->data[SC_INCALLSTATUS])
@@ -4069,8 +4073,6 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
str += ((sc->data[SC_MARIONETTE2]->val3)>>16)&0xFF;
if(sc->data[SC_GIANTGROWTH])
str += 30;
- if(sc->data[SC_HARMONIZE])
- str += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_SAVAGE_STEAK])
str += sc->data[SC_SAVAGE_STEAK]->val1;
if(sc->data[SC_INSPIRATION])
@@ -4088,6 +4090,10 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(agi,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ agi -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(agi,0,USHRT_MAX);
+ }
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && agi < 50)
return 50;
if(sc->data[SC_CONCENTRATE] && !sc->data[SC_QUAGMIRE])
@@ -4120,8 +4126,6 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
agi += ((sc->data[SC_MARIONETTE2]->val3)>>8)&0xFF;
if(sc->data[SC_ADORAMUS])
agi -= sc->data[SC_ADORAMUS]->val2;
- if(sc->data[SC_HARMONIZE])
- agi += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_DROCERA_HERB_STEAMED])
agi += sc->data[SC_DROCERA_HERB_STEAMED]->val1;
if(sc->data[SC_INSPIRATION])
@@ -4139,6 +4143,10 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(vit,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ vit -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(vit,0,USHRT_MAX);
+ }
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && vit < 50)
return 50;
if(sc->data[SC_INCALLSTATUS])
@@ -4163,8 +4171,6 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
vit += sc->data[SC_MARIONETTE2]->val3&0xFF;
if(sc->data[SC_LAUDAAGNUS])
vit += 4 + sc->data[SC_LAUDAAGNUS]->val1;
- if(sc->data[SC_HARMONIZE])
- vit += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_MINOR_BBQ])
vit += sc->data[SC_MINOR_BBQ]->val1;
if(sc->data[SC_INSPIRATION])
@@ -4182,6 +4188,10 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(int_,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ int_ -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(int_,0,USHRT_MAX);
+ }
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && int_ < 50)
return 50;
if(sc->data[SC_INCALLSTATUS])
@@ -4216,8 +4226,6 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
int_ -= 5 + 5 * sc->data[SC_MANDRAGORA]->val1;
if(sc->data[SC__STRIPACCESSORY])
int_ -= int_ * sc->data[SC__STRIPACCESSORY]->val2 / 100;
- if(sc->data[SC_HARMONIZE])
- int_ += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_COCKTAIL_WARG_BLOOD])
int_ += sc->data[SC_COCKTAIL_WARG_BLOOD]->val1;
if(sc->data[SC_INSPIRATION])
@@ -4235,6 +4243,10 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(dex,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ dex -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(dex,0,USHRT_MAX);
+ }
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && dex < 50)
return 50;
if(sc->data[SC_CONCENTRATE] && !sc->data[SC_QUAGMIRE])
@@ -4269,8 +4281,6 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
dex += ((sc->data[SC_MARIONETTE2]->val4)>>8)&0xFF;
if(sc->data[SC__STRIPACCESSORY])
dex -= dex * sc->data[SC__STRIPACCESSORY]->val2 / 100;
- if(sc->data[SC_HARMONIZE])
- dex += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_SIROMA_ICE_TEA])
dex += sc->data[SC_SIROMA_ICE_TEA]->val1;
if(sc->data[SC_INSPIRATION])
@@ -4288,6 +4298,10 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
if(!sc || !sc->count)
return cap_value(luk,0,USHRT_MAX);
+ if(sc->data[SC_HARMONIZE]) {
+ luk -= sc->data[SC_HARMONIZE]->val2;
+ return (unsigned short)cap_value(luk,0,USHRT_MAX);
+ }
if(sc->data[SC_CURSE])
return 0;
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && luk < 50)
@@ -4312,8 +4326,6 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
luk += 4 + sc->data[SC_LAUDARAMUS]->val1;
if(sc->data[SC__STRIPACCESSORY])
luk -= luk * sc->data[SC__STRIPACCESSORY]->val2 / 100;
- if(sc->data[SC_HARMONIZE])
- luk += sc->data[SC_HARMONIZE]->val2;
if(sc->data[SC_PUTTI_TAILS_NOODLES])
luk += sc->data[SC_PUTTI_TAILS_NOODLES]->val1;
if(sc->data[SC_INSPIRATION])
@@ -8017,7 +8029,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
val2 = 10 * val1;
break;
case SC_HARMONIZE:
- val2 = 3 + 2 * val1;
+ val2 = 5 + 5 * val1;
break;
case SC_VOICEOFSIREN:
val4 = tick / 2000;