PDA

View Full Version : Calm/Harmony/Rest The Dead


inkubus
08-10-2007, 05:32 PM
Any ideas why this either seems to aggro the mob or say 'Your spell did not take hold'? This is on a level 1 skeleton by a level 70 necro.

Sakrateri
08-10-2007, 06:20 PM
If it wont take hold then it will aggro the mob,why it wont take hold I dont know , why a level 70 necro would need to harmony a level 1 skelli , I have no idea ..lol.........probably a broke spell.

Zengez
08-12-2007, 04:39 PM
LAst I knew harmony class spells all had this problem, they just don't work...

I thought windcatcher (Think it was him, if not sorry whomever I just blatantly scrubbed!) Came up with a temporary haxxors patch, but I believe that was also killed due to a restructuring on another update...

So the long and short of it is, I don't think any of the harmony class spells are working because the harmony effect itself is broke.... Or I could be wrong ;)

inkubus
08-13-2007, 07:32 PM
Looking at the beneficial casting code (forgive me if i'm wrong) it looks like nobody would be able to land this 'buff' on an npc unless they're a GM.

From testing i am experiencing the following:

GM:
Harmony - Lands, no aggro. When cast a second time, you can see the buff wear off.
Calm - Aggros 100% of the time.

Normal Player:
Harmony - Does not land. Reports 'Your spell did not take hold'. No aggro.
Calm - Aggros 100% of the time.

I can't seem to find the code for calm. So I'll put that on the back burner for now. But looking at the beneficial code in spells.cpp (line 2228) I can see that there doesn't seem to be a check for harmony beneficial buff spells on NPCs. Now i'm not at home right now so I can't check this but I am guessing we need to add a check in here to fix this.


if(!(IsClient() && CastToClient()->GetGM())) // GMs can cast on anything
{
// Beneficial spells check
if(IsBeneficialSpell(spell_id))
{
if
(
IsClient() && //let NPCs do beneficial spells on anybody if they want, should be the job of the AI, not the spell code to prevent this from going wrong
spelltar != this &&
(
!IsBeneficialAllowed(spelltar) ||
(
IsGroupOnlySpell(spell_id) &&
!(
(entity_list.GetGroupByMob(this) &&
entity_list.GetGroupByMob(this)->IsGroupMember(spelltar)) ||
(spelltar == GetPet()) //should be able to cast grp spells on self and pet despite grped status.
)
)
)
)
{
mlog(SPELLS__CASTING_ERR, "Beneficial spell %d can't take hold %s -> %s, IBA? %d", spell_id, GetName(), spelltar->GetName(), IsBeneficialAllowed(spelltar));
Message_StringID(MT_Shout, SPELL_NO_HOLD);
safe_delete(action_packet);
return false;
}
}
else if ( !IsAttackAllowed(spelltar) ) // Detrimental spells - PVP check
{
mlog(SPELLS__CASTING_ERR, "Detrimental spell %d can't take hold %s -> %s", spell_id, GetName(), spelltar->GetName());
spelltar->Message_StringID(MT_Shout, YOU_ARE_PROTECTED, GetCleanName());
safe_delete(action_packet);
return false;
}
}


Anyone got any ideas on this?

Then I am assuming once this is done we make changes to ApplySpellBonuses in bonuses.cpp to add an additional check for SE_Calm?

vales
08-14-2007, 12:00 PM
There was a fix for this a long while back. I guess it made it's way back in somehow. IIRC, all of the first spell ranks didn't work. For example, Lull I believe, for Enchanters. However, the next rank spell which was Soothe, worked with no issue.

If you take a look at the changelog on the revision it was fixed, it would probably help a bit more. Sorry, I don't remember the exact revision.

inkubus
08-14-2007, 09:32 PM
Working on a temporary fix in this thread. Please see here for further information:

http://www.eqemulator.net/forums/showthread.php?p=137001#post137001

Thanks

Bolly