diff --git a/doc/status_change.txt b/doc/status_change.txt index d90c508767..19ebe1d777 100644 --- a/doc/status_change.txt +++ b/doc/status_change.txt @@ -1035,9 +1035,9 @@ SC_JAILED () desc: val1: -SC_ENCHANTARMS () - desc: - val1: +SC_ENCHANTARMS (EFST_WEAPONPROPERTY) + desc: Changes the element of a target's weapon. + val1: Element value from skill_db SC_MAGICALATTACK () desc: diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 0f54ea22de..fea3b62bf5 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -2782,7 +2782,7 @@ static int battle_get_weapon_element(struct Damage* wd, struct block_list *src, element = sd->spiritcharm_type; // Summoning 10 spiritcharm will endow your weapon // on official endows override all other elements [helvetica] if(sc && sc->data[SC_ENCHANTARMS]) // Check for endows - element = sc->data[SC_ENCHANTARMS]->val2; + element = sc->data[SC_ENCHANTARMS]->val1; } else if( element == -2 ) //Use enchantment's element element = status_get_attack_sc_element(src,sc); else if( element == -3 ) //Use random element diff --git a/src/map/skill.cpp b/src/map/skill.cpp index ff8437844c..ab97bdbfa9 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -6596,9 +6596,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case ITEM_ENCHANTARMS: - clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start2(src,bl,type,100,skill_lv, - skill_get_ele(skill_id,skill_lv), skill_get_time(skill_id,skill_lv))); + clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_get_ele(skill_id, skill_lv), skill_get_time(skill_id, skill_lv))); break; case TK_SEVENWIND: @@ -13035,7 +13033,7 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_ else if (ele == -1) { val1 = status->rhw.ele; if (sc && sc->data[SC_ENCHANTARMS]) - val1 = sc->data[SC_ENCHANTARMS]->val2; + val1 = sc->data[SC_ENCHANTARMS]->val1; } switch (val1) { @@ -17749,7 +17747,7 @@ int skill_maelstrom_suction(struct block_list *bl, va_list ap) void skill_enchant_elemental_end(struct block_list *bl, int type) { struct status_change *sc; - const enum sc_type scs[] = { SC_ENCPOISON, SC_ASPERSIO, SC_FIREWEAPON, SC_WATERWEAPON, SC_WINDWEAPON, SC_EARTHWEAPON, SC_SHADOWWEAPON, SC_GHOSTWEAPON, SC_ENCHANTARMS }; + const enum sc_type scs[] = { SC_ENCPOISON, SC_ASPERSIO, SC_FIREWEAPON, SC_WATERWEAPON, SC_WINDWEAPON, SC_EARTHWEAPON, SC_SHADOWWEAPON, SC_GHOSTWEAPON }; int i; nullpo_retv(bl); @@ -17758,6 +17756,7 @@ void skill_enchant_elemental_end(struct block_list *bl, int type) if (!sc->count) return; + status_change_end(bl, SC_ENCHANTARMS, INVALID_TIMER); // Should always end for (i = 0; i < ARRAYLENGTH(scs); i++) if (type != scs[i] && sc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER); diff --git a/src/map/status.cpp b/src/map/status.cpp index 60a015fc15..8bc066aaa7 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -495,7 +495,7 @@ void initChangeTables(void) set_sc( CG_LONGINGFREEDOM , SC_LONGING , EFST_LONGING , SCB_SPEED|SCB_ASPD ); set_sc( CG_HERMODE , SC_HERMODE , EFST_HERMODE , SCB_NONE ); set_sc( CG_TAROTCARD , SC_TAROTCARD , EFST_TAROTCARD, SCB_NONE ); - set_sc( ITEM_ENCHANTARMS , SC_ENCHANTARMS , EFST_BLANK , SCB_ATK_ELE ); + set_sc( ITEM_ENCHANTARMS , SC_ENCHANTARMS , EFST_WEAPONPROPERTY, SCB_ATK_ELE ); set_sc( SL_HIGH , SC_SPIRIT , EFST_SOULLINK, SCB_ALL ); set_sc( KN_ONEHAND , SC_ONEHAND , EFST_ONEHANDQUICKEN, SCB_ASPD ); set_sc( GS_FLING , SC_FLING , EFST_BLANK , SCB_DEF|SCB_DEF2 ); @@ -7372,7 +7372,7 @@ unsigned char status_calc_attack_element(struct block_list *bl, struct status_ch if(!sc || !sc->count) return cap_value(element, 0, UCHAR_MAX); if(sc->data[SC_ENCHANTARMS]) - return sc->data[SC_ENCHANTARMS]->val2; + return sc->data[SC_ENCHANTARMS]->val1; if(sc->data[SC_WATERWEAPON] || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2) ) return ELE_WATER; @@ -10321,10 +10321,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty // end previous enchants skill_enchant_elemental_end(bl,type); // Make sure the received element is valid. - if (val2 >= ELE_ALL) - val2 = val2%ELE_ALL; - else if (val2 < 0) - val2 = rnd()%ELE_ALL; + if (val1 >= ELE_ALL) + val1 = val1%ELE_ALL; + else if (val1 < 0) + val1 = rnd()%ELE_ALL; break; case SC_CRITICALWOUND: val2 = 20*val1; // Heal effectiveness decrease @@ -11339,6 +11339,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty // Values that must be set regardless of flag&4 e.g. val_flag [Ind] switch(type) { // Start |1 val_flag setting + case SC_ENCHANTARMS: case SC_ROLLINGCUTTER: case SC_BANDING: case SC_SPHERE_1: