Go Back   EQEmulator Home > EQEmulator Forums > Support > Spell Support

Spell Support Broken Spells? Want them Fixed? Request it here.

Reply
 
Thread Tools Display Modes
  #1  
Old 01-13-2016, 03:47 PM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default 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?

Last edited by Uleat; 01-13-2016 at 04:06 PM.. Reason: title fixed
Reply With Quote
  #2  
Old 01-13-2016, 05:29 PM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default

I stole a code block from Alkabor I got it.
Reply With Quote
  #3  
Old 01-13-2016, 06:27 PM
Kingly_Krab
Administrator
 
Join Date: May 2013
Location: United States
Posts: 1,589
Default

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.
Reply With Quote
  #4  
Old 01-13-2016, 06:50 PM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default

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);
}
Reply With Quote
  #5  
Old 01-13-2016, 07:42 PM
Kingly_Krab
Administrator
 
Join Date: May 2013
Location: United States
Posts: 1,589
Default

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)))
Reply With Quote
  #6  
Old 01-13-2016, 07:59 PM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default

Exactly.

/10char
Reply With Quote
  #7  
Old 01-13-2016, 08:37 PM
jpyou127's Avatar
jpyou127
Discordant
 
Join Date: Nov 2005
Posts: 270
Default

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

Celestial
Reply With Quote
  #8  
Old 01-13-2016, 08:38 PM
provocating's Avatar
provocating
Demi-God
 
Join Date: Nov 2007
Posts: 2,175
Default Harmony should be AOE

Harmony should be AOE
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 03:59 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3