EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Spell Support (https://www.eqemulator.org/forums/forumdisplay.php?f=664)
-   -   Fixing Harmony - Should be AOE (https://www.eqemulator.org/forums/showthread.php?t=40331)

provocating 01-13-2016 03:47 PM

Fixing Harmony - Should be AOE
 
Messed up the title should be "Fixing Harmony - Should be AOE" - changed

Harmony should actually be an AOE spell. I really thought I had fixed this a few months ago, but I guess it is still broken. Spell 1541 is an AOE lull, so after trying everything else I decided to copy 1541 and change the ID to 250, just as a test. It still is not an AOE spell, with the exact same data! 1541, wake of tranquility is definitely an AOE and it works! I can find nothing in the source that would prevent this from working like it should.

Just to be sure I am dealing with apples to apples I of course exported my new spell file to the client and bounced the server. This is a mystery I cannot figure out.

Is this futile, is this somehow getting interpreted from the client as a single target spell?

provocating 01-13-2016 05:29 PM

I stole a code block from Alkabor :) I got it.

Kingly_Krab 01-13-2016 06:27 PM

Since you fixed this, would you mind showing your resolution? The reason I ask, is because I'm fairly certain someone else in the future may make a similar post and it'd be nice to have the solution readily available.

provocating 01-13-2016 06:50 PM

spdat.cpp I think was the name of the file, under common.

Code:

bool IsBeneficialSpell(uint16 spell_id)
{
    if (!IsValidSpell(spell_id))
        return false;

    // You'd think just checking goodEffect flag would be enough?
    if (spells[spell_id].goodEffect == 1) {
        // If the target type is ST_Self or ST_Pet and is a SE_CancleMagic spell
        // it is not Beneficial
        SpellTargetType tt = spells[spell_id].targettype;
        if (tt != ST_Self && tt != ST_Pet &&
                IsEffectInSpell(spell_id, SE_CancelMagic))
            return false;

        // When our targettype is ST_Target, ST_AETarget, ST_Aniaml, ST_Undead, or ST_Pet
        // We need to check more things!
        if (tt == ST_Target || tt == ST_AETarget || tt == ST_Animal ||
                tt == ST_Undead || tt == ST_Pet) {
            uint16 sai = spells[spell_id].SpellAffectIndex;

            // If the resisttype is magic and SpellAffectIndex is Calm/memblur/dispell sight
            // it's not beneficial.
            if (spells[spell_id].resisttype == RESIST_MAGIC) {
                if (sai == SAI_Calm || sai == SAI_Dispell_Sight ||
                        sai == SAI_Memory_Blur || sai == SAI_Calm_Song)
                    return false;
            } else {
                // If the resisttype is not magic and spell is Bind Sight or Cast Sight or Harmony
                // It's not beneficial
                if ((sai == SAI_Calm && IsEffectInSpell(spell_id, SE_Harmony))
                    || (sai == SAI_Calm_Song && IsEffectInSpell(spell_id, SE_BindSight))
                    || (sai == SAI_Dispell_Sight && spells[spell_id].skill == 18 &&
                        !IsEffectInSpell(spell_id, SE_VoiceGraft)))
                    return false;
            }
        }
    }

    // And finally, if goodEffect is not 0 or if it's a group spell it's beneficial
    return spells[spell_id].goodEffect != 0 || IsGroupSpell(spell_id);
}


Kingly_Krab 01-13-2016 07:42 PM

So as for changes.

This:
Code:

if (sai == SAI_Dispell_Sight && spells[spell_id].skill == 18 && !IsEffectInSpell(spell_id, SE_VoiceGraft))
Becomes this:
Code:

if ((sai == SAI_Calm && IsEffectInSpell(spell_id, SE_Harmony)) || (sai == SAI_Calm_Song && IsEffectInSpell(spell_id, SE_BindSight)) || (sai == SAI_Dispell_Sight && spells[spell_id].skill == 18 && !IsEffectInSpell(spell_id, SE_VoiceGraft)))

provocating 01-13-2016 07:59 PM

Exactly.

/10char

jpyou127 01-13-2016 08:37 PM

If this is the way the spell is supposed to work, will this change be added to the code?

Celestial

provocating 01-13-2016 08:38 PM

Harmony should be AOE
 
Harmony should be AOE


All times are GMT -4. The time now is 07:35 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.