diff options
author | kaelima <kaelima@live.se> | 2012-03-16 08:59:18 +0100 |
---|---|---|
committer | kaelima <kaelima@live.se> | 2012-03-16 08:59:18 +0100 |
commit | ef53bde176e213017c2346d9fcac0ab121b28974 (patch) | |
tree | f4440534dfa79a7ec4e50edefd67594ea8db7f80 /src | |
parent | dce0a7d18423ecb36ebc0d8c3426dbec26fa9fff (diff) |
Core/Spell: Add some missing cast results which require additional data when sent. And rename two researched castflags (thanks TOMRUS)
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 33 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.h | 4 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index b15b9ff3297..0b05db07d38 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3751,12 +3751,12 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas case SPELL_FAILED_TOO_MANY_OF_ITEM: { uint32 item = 0; - for (int8 x = 0; x < 3; x++) - if (spellInfo->Effects[x].ItemType) - item = spellInfo->Effects[x].ItemType; - ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(item); - if (pProto && pProto->ItemLimitCategory) - data << uint32(pProto->ItemLimitCategory); + for (int8 eff = 0; eff < MAX_SPELL_EFFECTS; eff++) + if (spellInfo->Effects[eff].ItemType) + item = spellInfo->Effects[eff].ItemType; + ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item); + if (proto && proto->ItemLimitCategory) + data << uint32(proto->ItemLimitCategory); break; } case SPELL_FAILED_CUSTOM_ERROR: @@ -3783,6 +3783,23 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas data << uint32(missingItem); // first missing item break; } + case SPELL_FAILED_PREVENTED_BY_MECHANIC: + data << uint32(spellInfo->Mechanic); + break; + case SPELL_FAILED_NEED_EXOTIC_AMMO: + data << uint32(spellInfo->EquippedItemSubClassMask); + break; + case SPELL_FAILED_NEED_MORE_ITEMS: + data << uint32(0); // Item entry + data << uint32(0); // Count + break; + case SPELL_FAILED_MIN_SKILL: + data << uint32(0); // SkillLine.dbc Id + data << uint32(0); // Amount + break; + case SPELL_FAILED_FISHING_TOO_LOW: + data << uint32(0); // Skill level + break; default: break; } @@ -3856,6 +3873,7 @@ void Spell::SendSpellGo() if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO) castFlags |= CAST_FLAG_AMMO; // arrows/bullets visual + if ((m_caster->GetTypeId() == TYPEID_PLAYER || (m_caster->GetTypeId() == TYPEID_UNIT && m_caster->ToCreature()->isPet())) && m_spellInfo->PowerType != POWER_HEALTH) @@ -3868,7 +3886,6 @@ void Spell::SendSpellGo() { castFlags |= CAST_FLAG_UNKNOWN_19; // same as in SMSG_SPELL_START castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list - castFlags |= CAST_FLAG_UNKNOWN_9; // ?? } if (m_spellInfo->HasEffect(SPELL_EFFECT_ACTIVATE_RUNE)) @@ -3931,7 +3948,7 @@ void Spell::SendSpellGo() if (castFlags & CAST_FLAG_AMMO) WriteAmmoToPacket(&data); - if (castFlags & CAST_FLAG_UNKNOWN_20) + if (castFlags & CAST_FLAG_VISUAL_CHAIN) { data << uint32(0); data << uint32(0); diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index f897092e519..716c6bec54d 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -57,14 +57,14 @@ enum SpellCastFlags CAST_FLAG_UNKNOWN_17 = 0x00010000, CAST_FLAG_ADJUST_MISSILE = 0x00020000, CAST_FLAG_UNKNOWN_19 = 0x00040000, - CAST_FLAG_UNKNOWN_20 = 0x00080000, + CAST_FLAG_VISUAL_CHAIN = 0x00080000, CAST_FLAG_UNKNOWN_21 = 0x00100000, CAST_FLAG_RUNE_LIST = 0x00200000, CAST_FLAG_UNKNOWN_23 = 0x00400000, CAST_FLAG_UNKNOWN_24 = 0x00800000, CAST_FLAG_UNKNOWN_25 = 0x01000000, CAST_FLAG_UNKNOWN_26 = 0x02000000, - CAST_FLAG_UNKNOWN_27 = 0x04000000, + CAST_FLAG_IMMUNITY = 0x04000000, CAST_FLAG_UNKNOWN_28 = 0x08000000, CAST_FLAG_UNKNOWN_29 = 0x10000000, CAST_FLAG_UNKNOWN_30 = 0x20000000, |