Issue information

Issue ID
#1028
Status
Fixed
Severity
None
Started
Hercules Elf Bot
Feb 22, 2008 0:18
Last Post
Hercules Elf Bot
Feb 22, 2008 0:18
Confirmation
N/A

Hercules Elf Bot - Feb 22, 2008 0:18

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.