[7468] Convert pet cast check code to use SpellCastResult and finaly fix SPELL_CAST_OK value (255 custom value now)

This commit is contained in:
VladimirMangos 2009-03-16 15:39:10 +03:00
parent 0e987bf59e
commit 5d6cb5fe80
7 changed files with 20 additions and 20 deletions

View file

@ -189,7 +189,7 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data )
Spell *spell = new Spell(pet, spellInfo, false); Spell *spell = new Spell(pet, spellInfo, false);
int16 result = spell->PetCanCast(unit_target); SpellCastResult result = spell->CheckPetCast(unit_target);
//auto turn to target unless possessed //auto turn to target unless possessed
if(result == SPELL_FAILED_UNIT_NOT_INFRONT && !pet->HasAuraType(SPELL_AURA_MOD_POSSESS)) if(result == SPELL_FAILED_UNIT_NOT_INFRONT && !pet->HasAuraType(SPELL_AURA_MOD_POSSESS))
@ -200,10 +200,10 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data )
if(Unit* powner = pet->GetCharmerOrOwner()) if(Unit* powner = pet->GetCharmerOrOwner())
if(powner->GetTypeId() == TYPEID_PLAYER) if(powner->GetTypeId() == TYPEID_PLAYER)
pet->SendUpdateToPlayer((Player*)powner); pet->SendUpdateToPlayer((Player*)powner);
result = -1; result = SPELL_CAST_OK;
} }
if(result == -1) if(result == SPELL_CAST_OK)
{ {
((Creature*)pet)->AddCreatureSpellCooldown(spellid); ((Creature*)pet)->AddCreatureSpellCooldown(spellid);
if (((Creature*)pet)->isPet()) if (((Creature*)pet)->isPet())
@ -610,8 +610,8 @@ void WorldSession::HandlePetCastSpellOpcode( WorldPacket& recvPacket )
spell->m_cast_count = cast_count; // probably pending spell cast spell->m_cast_count = cast_count; // probably pending spell cast
spell->m_targets = targets; spell->m_targets = targets;
int16 result = spell->PetCanCast(NULL); SpellCastResult result = spell->CheckPetCast(NULL);
if(result == -1) if(result == SPELL_CAST_OK)
{ {
pet->AddCreatureSpellCooldown(spellid); pet->AddCreatureSpellCooldown(spellid);
if(pet->isPet()) if(pet->isPet())

View file

@ -683,8 +683,7 @@ enum SpellEffects
enum SpellCastResult enum SpellCastResult
{ {
SPELL_CAST_OK = 0, //FIXME: used as success result currently SPELL_FAILED_AFFECTING_COMBAT = 0,
SPELL_FAILED_AFFECTING_COMBAT = 0, //FIXME: used as success result currently
SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 1, SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 1,
SPELL_FAILED_ALREADY_AT_FULL_MANA = 2, SPELL_FAILED_ALREADY_AT_FULL_MANA = 2,
SPELL_FAILED_ALREADY_AT_FULL_POWER = 3, SPELL_FAILED_ALREADY_AT_FULL_POWER = 3,
@ -865,7 +864,9 @@ enum SpellCastResult
SPELL_FAILED_ITEM_AT_MAX_CHARGES = 178, SPELL_FAILED_ITEM_AT_MAX_CHARGES = 178,
SPELL_FAILED_NOT_IN_BARBERSHOP = 179, SPELL_FAILED_NOT_IN_BARBERSHOP = 179,
SPELL_FAILED_FISHING_TOO_LOW = 180, SPELL_FAILED_FISHING_TOO_LOW = 180,
SPELL_FAILED_UNKNOWN = 181 SPELL_FAILED_UNKNOWN = 181,
SPELL_CAST_OK = 255 //custom value, don't must be send to client
}; };
// Spell aura states // Spell aura states

View file

@ -4394,7 +4394,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_CAST_OK; return SPELL_CAST_OK;
} }
int16 Spell::PetCanCast(Unit* target) SpellCastResult Spell::CheckPetCast(Unit* target)
{ {
if(!m_caster->isAlive()) if(!m_caster->isAlive())
return SPELL_FAILED_CASTER_DEAD; return SPELL_FAILED_CASTER_DEAD;
@ -4458,11 +4458,7 @@ int16 Spell::PetCanCast(Unit* target)
return SPELL_FAILED_NOT_READY; return SPELL_FAILED_NOT_READY;
} }
SpellCastResult result = CheckCast(true); return CheckCast(true);
if(result != SPELL_CAST_OK)
return result;
else
return -1; //this allows to check spell fail 0, in combat
} }
SpellCastResult Spell::CheckCasterAuras() const SpellCastResult Spell::CheckCasterAuras() const
@ -4589,9 +4585,9 @@ bool Spell::CanAutoCast(Unit* target)
} }
} }
int16 result = PetCanCast(target); SpellCastResult result = CheckPetCast(target);
if(result == -1 || result == SPELL_FAILED_UNIT_NOT_INFRONT) if(result == SPELL_CAST_OK || result == SPELL_FAILED_UNIT_NOT_INFRONT)
{ {
FillTargetMap(); FillTargetMap();
//check if among target units, our WANTED target is as well (->only self cast spells return false) //check if among target units, our WANTED target is as well (->only self cast spells return false)

View file

@ -339,7 +339,7 @@ class Spell
void TriggerSpell(); void TriggerSpell();
SpellCastResult CheckCast(bool strict); SpellCastResult CheckCast(bool strict);
int16 PetCanCast(Unit* target); SpellCastResult CheckPetCast(Unit* target);
// handlers // handlers
void handle_immediate(); void handle_immediate();

View file

@ -10615,8 +10615,11 @@ Player* Unit::GetSpellModOwner()
} }
///----------Pet responses methods----------------- ///----------Pet responses methods-----------------
void Unit::SendPetCastFail(uint32 spellid, uint8 msg) void Unit::SendPetCastFail(uint32 spellid, SpellCastResult msg)
{ {
if(msg == SPELL_CAST_OK)
return;
Unit *owner = GetCharmerOrOwner(); Unit *owner = GetCharmerOrOwner();
if(!owner || owner->GetTypeId() != TYPEID_PLAYER) if(!owner || owner->GetTypeId() != TYPEID_PLAYER)
return; return;

View file

@ -1403,7 +1403,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void ClearComboPointHolders(); void ClearComboPointHolders();
///----------Pet responses methods----------------- ///----------Pet responses methods-----------------
void SendPetCastFail(uint32 spellid, uint8 msg); void SendPetCastFail(uint32 spellid, SpellCastResult msg);
void SendPetActionFeedback (uint8 msg); void SendPetActionFeedback (uint8 msg);
void SendPetTalk (uint32 pettalk); void SendPetTalk (uint32 pettalk);
void SendPetSpellCooldown (uint32 spellid, time_t cooltime); void SendPetSpellCooldown (uint32 spellid, time_t cooltime);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7467" #define REVISION_NR "7468"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__