View Full Version : Fixing Harmony - Should be AOE
provocating
01-13-2016, 03:47 PM
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.
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: if (sai == SAI_Dispell_Sight && spells[spell_id].skill == 18 && !IsEffectInSpell(spell_id, SE_VoiceGraft))Becomes this: 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
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.