Packet fixes

This commit is contained in:
tomrus88 2008-11-03 18:58:32 +03:00
parent 1c1bc92d54
commit 5114c17da2
8 changed files with 65 additions and 59 deletions

View file

@ -375,8 +375,7 @@ void PlayerMenu::SendQuestGiverQuestList( QEmote eEmote, std::string Title, uint
data << title; data << title;
} }
pSession->SendPacket( &data ); pSession->SendPacket( &data );
//uint32 fqid=pQuestMenu->GetItem(0).m_qId; sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC Guid=%u", GUID_LOPART(npcGUID));
//sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC Guid=%u, questid-0=%u",npcGUID,fqid);
} }
void PlayerMenu::SendQuestGiverStatus( uint8 questStatus, uint64 npcGUID ) void PlayerMenu::SendQuestGiverStatus( uint8 questStatus, uint64 npcGUID )
@ -386,7 +385,7 @@ void PlayerMenu::SendQuestGiverStatus( uint8 questStatus, uint64 npcGUID )
data << uint8(questStatus); data << uint8(questStatus);
pSession->SendPacket( &data ); pSession->SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC Guid=%u, status=%u",GUID_LOPART(npcGUID),questStatus); sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_STATUS NPC Guid=%u, status=%u", GUID_LOPART(npcGUID), questStatus);
} }
void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID, bool ActivateAccept ) void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID, bool ActivateAccept )
@ -416,9 +415,11 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
} }
data << uint64(npcGUID); data << uint64(npcGUID);
data << uint64(0); // wotlk data << uint64(0); // wotlk, something todo with quest sharing?
data << uint32(pQuest->GetQuestId()); data << uint32(pQuest->GetQuestId());
data << Title << Details << Objectives; data << Title;
data << Details;
data << Objectives;
data << uint32(ActivateAccept); data << uint32(ActivateAccept);
data << uint32(pQuest->GetSuggestedPlayers()); data << uint32(pQuest->GetSuggestedPlayers());
data << uint8(0); // new wotlk data << uint8(0); // new wotlk
@ -458,6 +459,7 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
else else
data << uint32(0); data << uint32(0);
} }
data << uint32(pQuest->GetRewOrReqMoney()); data << uint32(pQuest->GetRewOrReqMoney());
} }
@ -476,7 +478,7 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
} }
pSession->SendPacket( &data ); pSession->SendPacket( &data );
sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_DETAILS NPCGuid=%u, questid=%u",GUID_LOPART(npcGUID),pQuest->GetQuestId()); sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_DETAILS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId());
} }
void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest )
@ -600,7 +602,7 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest )
data << ObjectiveText[iI]; data << ObjectiveText[iI];
pSession->SendPacket( &data ); pSession->SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u",pQuest->GetQuestId() ); sLog.outDebug( "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u", pQuest->GetQuestId() );
} }
void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID, bool EnbleNext ) void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID, bool EnbleNext )
@ -682,10 +684,10 @@ void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID,
data << uint32(0x08); // unused by client? data << uint32(0x08); // unused by client?
data << uint32(pQuest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast==0) data << uint32(pQuest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast==0)
data << uint32(pQuest->GetRewSpellCast()); // casted spell data << uint32(pQuest->GetRewSpellCast()); // casted spell
data << uint32(0); // Honor points reward, not implemented data << uint32(0); // unknown
data << uint32(pQuest->GetBonusTalents()); // new wotlk data << uint32(pQuest->GetBonusTalents()); // bonus talents
pSession->SendPacket( &data ); pSession->SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPCGuid=%u, questid=%u",GUID_LOPART(npcGUID),pQuest->GetQuestId() ); sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
} }
void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID, bool Completable, bool CloseOnCancel ) void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID, bool Completable, bool CloseOnCancel )
@ -761,8 +763,10 @@ void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID
else else
data << uint32(0x03); data << uint32(0x03);
data << uint32(0x04) << uint32(0x08) << uint32(0x10); data << uint32(0x04);
data << uint32(0x08);
data << uint32(0x10);
pSession->SendPacket( &data ); pSession->SendPacket( &data );
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u",GUID_LOPART(npcGUID),pQuest->GetQuestId() ); sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
} }

View file

@ -466,7 +466,7 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
UnitMoveType move_type; UnitMoveType move_type;
UnitMoveType force_move_type; UnitMoveType force_move_type;
static char const* move_type_name[MAX_MOVE_TYPE] = { "Walk", "Run", "Walkback", "Swim", "Swimback", "Turn", "Fly", "Flyback" }; static char const* move_type_name[MAX_MOVE_TYPE] = { "Walk", "Run", "Walkback", "Swim", "Swimback", "Turn", "Fly", "Flyback", "Pitch" };
uint16 opcode = recv_data.GetOpcode(); uint16 opcode = recv_data.GetOpcode();
switch(opcode) switch(opcode)

View file

@ -386,7 +386,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2
*data << ((Unit*)this)->GetSpeed( MOVE_FLY ); *data << ((Unit*)this)->GetSpeed( MOVE_FLY );
*data << ((Unit*)this)->GetSpeed( MOVE_FLYBACK ); *data << ((Unit*)this)->GetSpeed( MOVE_FLYBACK );
*data << ((Unit*)this)->GetSpeed( MOVE_TURN ); *data << ((Unit*)this)->GetSpeed( MOVE_TURN );
*data << float(7); *data << ((Unit*)this)->GetSpeed( MOVE_PITCH );
// 0x08000000 // 0x08000000
if(flags2 & MOVEMENTFLAG_SPLINE2) if(flags2 & MOVEMENTFLAG_SPLINE2)
@ -539,10 +539,10 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2
} }
// 0x80 // 0x80
if(flags & UPDATEFLAG_WOTLK) // unused for now if(flags & UPDATEFLAG_VEHICLE) // unused for now
{ {
*data << uint32(0); // vehicle id
*data << float(0); *data << float(0);
*data << uint32(0);
} }
} }

View file

@ -747,9 +747,8 @@ void Player::EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 da
data << (uint32)damage; data << (uint32)damage;
data << (uint32)0; data << (uint32)0;
data << (uint32)0; data << (uint32)0;
//m_session->SendPacket(&data);
//Let other players see that you get damage
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
DealDamage(this, damage, NULL, SELF_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); DealDamage(this, damage, NULL, SELF_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
if(type==DAMAGE_FALL && !isAlive()) // DealDamage not apply item durability loss at self damage if(type==DAMAGE_FALL && !isAlive()) // DealDamage not apply item durability loss at self damage

View file

@ -2584,18 +2584,18 @@ void Spell::SendCastResult(uint8 result)
case SPELL_FAILED_EQUIPPED_ITEM_CLASS: case SPELL_FAILED_EQUIPPED_ITEM_CLASS:
data << uint32(m_spellInfo->EquippedItemClass); data << uint32(m_spellInfo->EquippedItemClass);
data << uint32(m_spellInfo->EquippedItemSubClassMask); data << uint32(m_spellInfo->EquippedItemSubClassMask);
data << uint32(m_spellInfo->EquippedItemInventoryTypeMask); //data << uint32(m_spellInfo->EquippedItemInventoryTypeMask);
break; break;
} }
((Player*)m_caster)->GetSession()->SendPacket(&data); ((Player*)m_caster)->GetSession()->SendPacket(&data);
} }
else /*else
{ {
WorldPacket data(SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE, (8+4)); WorldPacket data(SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE, (8+4));
data.append(m_caster->GetPackGUID()); data.append(m_caster->GetPackGUID());
data << uint32(m_spellInfo->Id); data << uint32(m_spellInfo->Id);
((Player*)m_caster)->GetSession()->SendPacket(&data); ((Player*)m_caster)->GetSession()->SendPacket(&data);
} }*/
} }
void Spell::SendSpellStart() void Spell::SendSpellStart()
@ -2603,13 +2603,13 @@ void Spell::SendSpellStart()
if(!IsNeedSendToClient()) if(!IsNeedSendToClient())
return; return;
sLog.outDebug("Sending SMSG_SPELL_START id=%u",m_spellInfo->Id); sLog.outDebug("Sending SMSG_SPELL_START id=%u", m_spellInfo->Id);
uint32 castFlags = CAST_FLAG_UNKNOWN1; uint32 castFlags = CAST_FLAG_UNKNOWN1;
if(IsRangedSpell()) if(IsRangedSpell())
castFlags |= CAST_FLAG_AMMO; castFlags |= CAST_FLAG_AMMO;
Unit * target; Unit *target;
if(!m_targets.getUnitTarget()) if(!m_targets.getUnitTarget())
target = m_caster; target = m_caster;
else else
@ -2800,7 +2800,7 @@ void Spell::SendLogExecute()
data << uint32(count1); // count1 (effect count?) data << uint32(count1); // count1 (effect count?)
for(uint32 i = 0; i < count1; ++i) for(uint32 i = 0; i < count1; ++i)
{ {
data << uint32(m_spellInfo->Effect[0]); // spell effect? data << uint32(m_spellInfo->Effect[0]); // spell effect
uint32 count2 = 1; uint32 count2 = 1;
data << uint32(count2); // count2 (target count?) data << uint32(count2); // count2 (target count?)
for(uint32 j = 0; j < count2; ++j) for(uint32 j = 0; j < count2; ++j)
@ -2846,30 +2846,19 @@ void Spell::SendLogExecute()
data << uint8(0); data << uint8(0);
break; break;
case SPELL_EFFECT_CREATE_ITEM: case SPELL_EFFECT_CREATE_ITEM:
case SPELL_EFFECT_157:
data << uint32(m_spellInfo->EffectItemType[0]); data << uint32(m_spellInfo->EffectItemType[0]);
break; break;
case SPELL_EFFECT_SUMMON: case SPELL_EFFECT_SUMMON:
case SPELL_EFFECT_SUMMON_WILD:
case SPELL_EFFECT_SUMMON_GUARDIAN:
case SPELL_EFFECT_TRANS_DOOR: case SPELL_EFFECT_TRANS_DOOR:
case SPELL_EFFECT_SUMMON_PET: case SPELL_EFFECT_SUMMON_PET:
case SPELL_EFFECT_SUMMON_POSSESSED:
//case SPELL_EFFECT_SUMMON_TOTEM:
case SPELL_EFFECT_SUMMON_OBJECT_WILD: case SPELL_EFFECT_SUMMON_OBJECT_WILD:
case SPELL_EFFECT_CREATE_HOUSE: case SPELL_EFFECT_CREATE_HOUSE:
case SPELL_EFFECT_DUEL: case SPELL_EFFECT_DUEL:
case SPELL_EFFECT_SUMMON_TOTEM_SLOT1:
case SPELL_EFFECT_SUMMON_TOTEM_SLOT2:
case SPELL_EFFECT_SUMMON_TOTEM_SLOT3:
case SPELL_EFFECT_SUMMON_TOTEM_SLOT4:
case SPELL_EFFECT_SUMMON_PHANTASM:
case SPELL_EFFECT_SUMMON_CRITTER:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT1: case SPELL_EFFECT_SUMMON_OBJECT_SLOT1:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT2: case SPELL_EFFECT_SUMMON_OBJECT_SLOT2:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT3: case SPELL_EFFECT_SUMMON_OBJECT_SLOT3:
case SPELL_EFFECT_SUMMON_OBJECT_SLOT4: case SPELL_EFFECT_SUMMON_OBJECT_SLOT4:
case SPELL_EFFECT_SUMMON_DEMON:
case SPELL_EFFECT_150:
if(Unit *unit = m_targets.getUnitTarget()) if(Unit *unit = m_targets.getUnitTarget())
data.append(unit->GetPackGUID()); data.append(unit->GetPackGUID());
else if(m_targets.getItemTargetGUID()) else if(m_targets.getItemTargetGUID())
@ -2888,6 +2877,13 @@ void Spell::SendLogExecute()
else else
data << uint8(0); data << uint8(0);
break; break;
case SPELL_EFFECT_RESURRECT:
case SPELL_EFFECT_RESURRECT_NEW:
if(Unit *unit = m_targets.getUnitTarget())
data.append(unit->GetPackGUID());
else
data << uint8(0);
break;
default: default:
return; return;
} }
@ -2927,7 +2923,7 @@ void Spell::SendChannelUpdate(uint32 time)
WorldPacket data( MSG_CHANNEL_UPDATE, 8+4 ); WorldPacket data( MSG_CHANNEL_UPDATE, 8+4 );
data.append(m_caster->GetPackGUID()); data.append(m_caster->GetPackGUID());
data << time; data << uint32(time);
((Player*)m_caster)->GetSession()->SendPacket( &data ); ((Player*)m_caster)->GetSession()->SendPacket( &data );
} }
@ -2964,8 +2960,8 @@ void Spell::SendChannelStart(uint32 duration)
{ {
WorldPacket data( MSG_CHANNEL_START, (8+4+4) ); WorldPacket data( MSG_CHANNEL_START, (8+4+4) );
data.append(m_caster->GetPackGUID()); data.append(m_caster->GetPackGUID());
data << m_spellInfo->Id; data << uint32(m_spellInfo->Id);
data << duration; data << uint32(duration);
((Player*)m_caster)->GetSession()->SendPacket( &data ); ((Player*)m_caster)->GetSession()->SendPacket( &data );
} }
@ -2979,9 +2975,15 @@ void Spell::SendChannelStart(uint32 duration)
void Spell::SendResurrectRequest(Player* target) void Spell::SendResurrectRequest(Player* target)
{ {
WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+2+4)); WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+2+4));
data << m_caster->GetGUID(); data << uint64(m_caster->GetGUID());
data << uint32(1) << uint16(0) << uint32(1); uint32 count = 1;
data << uint32(count); // amount of bytes to read
for(uint32 i = 0; i < count; ++i)
data << uint8(0);
data << uint8(0);
data << uint8(0);
target->GetSession()->SendPacket(&data); target->GetSession()->SendPacket(&data);
} }
@ -2991,8 +2993,8 @@ void Spell::SendPlaySpellVisual(uint32 SpellID)
return; return;
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 12); WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 12);
data << m_caster->GetGUID(); data << uint64(m_caster->GetGUID());
data << SpellID; data << uint32(SpellID); // spell visual id?
((Player*)m_caster)->GetSession()->SendPacket(&data); ((Player*)m_caster)->GetSession()->SendPacket(&data);
} }
@ -4163,7 +4165,7 @@ uint8 Spell::CheckCasterAuras() const
else if(m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED) && m_spellInfo->PreventionType==SPELL_PREVENTION_TYPE_PACIFY) else if(m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED) && m_spellInfo->PreventionType==SPELL_PREVENTION_TYPE_PACIFY)
prevented_reason = SPELL_FAILED_PACIFIED; prevented_reason = SPELL_FAILED_PACIFIED;
// Attr must make flag drop spell totally immuned from all effects // Attr must make flag drop spell totally immune from all effects
if(prevented_reason) if(prevented_reason)
{ {
if(school_immune || mechanic_immune || dispel_immune) if(school_immune || mechanic_immune || dispel_immune)
@ -4630,7 +4632,7 @@ uint8 Spell::CheckItems()
return SPELL_FAILED_CANT_BE_DISENCHANTED; return SPELL_FAILED_CANT_BE_DISENCHANTED;
uint32 item_quality = itemProto->Quality; uint32 item_quality = itemProto->Quality;
// 2.0.x addon: Check player enchanting level agains the item desenchanting requirements // 2.0.x addon: Check player enchanting level against the item desenchanting requirements
uint32 item_disenchantskilllevel = itemProto->RequiredDisenchantSkill; uint32 item_disenchantskilllevel = itemProto->RequiredDisenchantSkill;
if (item_disenchantskilllevel == uint32(-1)) if (item_disenchantskilllevel == uint32(-1))
return SPELL_FAILED_CANT_BE_DISENCHANTED; return SPELL_FAILED_CANT_BE_DISENCHANTED;

View file

@ -56,6 +56,7 @@ float baseMoveSpeed[MAX_MOVE_TYPE] =
3.141594f, // MOVE_TURN 3.141594f, // MOVE_TURN
7.0f, // MOVE_FLY 7.0f, // MOVE_FLY
4.5f, // MOVE_FLYBACK 4.5f, // MOVE_FLYBACK
3.14f // MOVE_PITCH
}; };
// auraTypes contains attacker auras capable of proc'ing cast auras // auraTypes contains attacker auras capable of proc'ing cast auras
@ -1470,9 +1471,8 @@ uint32 Unit::SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage
void Unit::HandleEmoteCommand(uint32 anim_id) void Unit::HandleEmoteCommand(uint32 anim_id)
{ {
WorldPacket data( SMSG_EMOTE, 12 ); WorldPacket data( SMSG_EMOTE, 12 );
data << anim_id << GetGUID(); data << uint32(anim_id);
WPAssert(data.size() == 12); data << uint64(GetGUID());
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
} }
@ -1665,7 +1665,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe
RemainingDamage -= currentAbsorb; RemainingDamage -= currentAbsorb;
} }
// only split damage if not damaing yourself // only split damage if not damaging yourself
if(pVictim != this) if(pVictim != this)
{ {
AuraList const& vSplitDamageFlat = pVictim->GetAurasByType(SPELL_AURA_SPLIT_DAMAGE_FLAT); AuraList const& vSplitDamageFlat = pVictim->GetAurasByType(SPELL_AURA_SPLIT_DAMAGE_FLAT);
@ -2585,8 +2585,8 @@ float Unit::CalculateLevelPenalty(SpellEntry const* spellProto) const
void Unit::SendAttackStart(Unit* pVictim) void Unit::SendAttackStart(Unit* pVictim)
{ {
WorldPacket data( SMSG_ATTACKSTART, 16 ); WorldPacket data( SMSG_ATTACKSTART, 16 );
data << GetGUID(); data << uint64(GetGUID());
data << pVictim->GetGUID(); data << uint64(pVictim->GetGUID());
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
DEBUG_LOG( "WORLD: Sent SMSG_ATTACKSTART" ); DEBUG_LOG( "WORLD: Sent SMSG_ATTACKSTART" );
@ -3847,7 +3847,7 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur)
if(is_triggered_by_spell) if(is_triggered_by_spell)
break; break;
// prevent remove form main spell by triggred passive spells // prevent remove form main spell by triggered passive spells
switch(i_spellProto->EffectApplyAuraName[j]) // main aura added before triggered spell switch(i_spellProto->EffectApplyAuraName[j]) // main aura added before triggered spell
{ {
case SPELL_AURA_MOD_SHAPESHIFT: case SPELL_AURA_MOD_SHAPESHIFT:
@ -6924,7 +6924,7 @@ bool Unit::Attack(Unit *victim, bool meleeAttack)
if(GetTypeId()==TYPEID_UNIT) if(GetTypeId()==TYPEID_UNIT)
{ {
WorldPacket data(SMSG_AI_REACTION, 12); WorldPacket data(SMSG_AI_REACTION, 12);
data << GetGUID(); data << uint64(GetGUID());
data << uint32(AI_REACTION_AGGRO); // Aggro sound data << uint32(AI_REACTION_AGGRO); // Aggro sound
((WorldObject*)this)->SendMessageToSet(&data, true); ((WorldObject*)this)->SendMessageToSet(&data, true);
@ -7174,6 +7174,7 @@ void Unit::SendHealSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, bool c
data.append(GetPackGUID()); data.append(GetPackGUID());
data << uint32(SpellID); data << uint32(SpellID);
data << uint32(Damage); data << uint32(Damage);
data << uint32(0); // over healing?
data << uint8(critical ? 1 : 0); data << uint8(critical ? 1 : 0);
data << uint8(0); // unused in client? data << uint8(0); // unused in client?
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
@ -7187,7 +7188,6 @@ void Unit::SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, Po
data << uint32(SpellID); data << uint32(SpellID);
data << uint32(powertype); data << uint32(powertype);
data << uint32(Damage); data << uint32(Damage);
//data << uint8(critical ? 1 : 0); // removed in 2.4.0
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
} }
@ -7644,7 +7644,7 @@ int32 Unit::SpellBaseDamageBonusForVictim(SpellSchoolMask schoolMask, Unit *pVic
bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType)
{ {
// not criting spell // not critting spell
if((spellProto->AttributesEx2 & SPELL_ATTR_EX2_CANT_CRIT)) if((spellProto->AttributesEx2 & SPELL_ATTR_EX2_CANT_CRIT))
return false; return false;
@ -8327,7 +8327,7 @@ void Unit::ApplySpellDispelImmunity(const SpellEntry * spellProto, DispelType ty
float Unit::GetWeaponProcChance() const float Unit::GetWeaponProcChance() const
{ {
// normalized proc chance for weapon attack speed // normalized proc chance for weapon attack speed
// (odd formulae...) // (odd formula...)
if(isAttackReady(BASE_ATTACK)) if(isAttackReady(BASE_ATTACK))
return (GetAttackTime(BASE_ATTACK) * 1.8f / 1000.0f); return (GetAttackTime(BASE_ATTACK) * 1.8f / 1000.0f);
else if (haveOffhandWeapon() && isAttackReady(OFF_ATTACK)) else if (haveOffhandWeapon() && isAttackReady(OFF_ATTACK))

View file

@ -383,10 +383,11 @@ enum UnitMoveType
MOVE_SWIMBACK = 4, MOVE_SWIMBACK = 4,
MOVE_TURN = 5, MOVE_TURN = 5,
MOVE_FLY = 6, MOVE_FLY = 6,
MOVE_FLYBACK = 7 MOVE_FLYBACK = 7,
MOVE_PITCH = 8
}; };
#define MAX_MOVE_TYPE 8 #define MAX_MOVE_TYPE 9
extern float baseMoveSpeed[MAX_MOVE_TYPE]; extern float baseMoveSpeed[MAX_MOVE_TYPE];

View file

@ -41,7 +41,7 @@ enum OBJECT_UPDATE_FLAGS
UPDATEFLAG_HIGHGUID = 0x10, UPDATEFLAG_HIGHGUID = 0x10,
UPDATEFLAG_LIVING = 0x20, UPDATEFLAG_LIVING = 0x20,
UPDATEFLAG_HASPOSITION = 0x40, UPDATEFLAG_HASPOSITION = 0x40,
UPDATEFLAG_WOTLK = 0x80 UPDATEFLAG_VEHICLE = 0x80
}; };
class UpdateData class UpdateData