Originally posted by [b]Etin[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=1028
Hello.
Spirit of Bard/Dancer is supposed to enable bards to use 'corresponding' dancer skills, and vice-versa. This part is currently working.
Though it also enables the dance effects on the bard/dancer.
Though there is a problem with some parts of the effects, found on Apple of Idun because it is visible:
The healing effect is not effective on the bard/dancer.
The HP augmentation bonus is effective though.
I looked quickly at the code and I guess it's probably related to this fragment:
(http://svn.eathena.ws/svn/ea/branches/stable/src/map/skill.c in the
skill_unit_onplace_timer() function)
CODE
case UNT_APPLEIDUN: //Apple of Idun [Skotlex]
{
int heal;
if (sg->src_id == bl->id)
break;
heal = sg->val2;
if(tsc && tsc->data[SC_CRITICALWOUND])
heal -= heal * tsc->data[SC_CRITICALWOUND]->val2 / 100;
clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
status_heal(bl, heal, 0, 0);
break;
}
The first check does not include a test for the spirit being active or not.
Since other effects are working correctly I guess the way to test it is as found in the
skill_unit_onplace() function:
CODE
if (sg->src_id==bl->id && !(sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_BARDDANCER))
return 0;
So I guess a correct way to check would be:
CODE
case UNT_APPLEIDUN: //Apple of Idun [Skotlex]
{
int heal;
if (sg->src_id == bl->id && !(tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_BARDDANCER))
break;
heal = sg->val2;
if(tsc && tsc->data[SC_CRITICALWOUND])
heal -= heal * tsc->data[SC_CRITICALWOUND]->val2 / 100;
clif_skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
status_heal(bl, heal, 0, 0);
break;
}
The same problem seems to exist on Lullaby and Ugly Dance:
CODE
case UNT_LULLABY:
if (ss->id == bl->id)
break;
skill_additional_effect(ss, bl, sg->skill_id, sg->skill_lv, BF_LONG|BF_SKILL|BF_MISC, tick);
break;
case UNT_UGLYDANCE: //Ugly Dance [Skotlex]
if (ss->id != bl->id)
skill_additional_effect(ss, bl, sg->skill_id, sg->skill_lv, BF_LONG|BF_SKILL|BF_MISC, tick);
break;
Hope this is useful.
Thank you for your work!
Cheers.