mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
Packet fixes
This commit is contained in:
parent
1c1bc92d54
commit
5114c17da2
8 changed files with 65 additions and 59 deletions
|
|
@ -375,8 +375,7 @@ void PlayerMenu::SendQuestGiverQuestList( QEmote eEmote, std::string Title, uint
|
|||
data << title;
|
||||
}
|
||||
pSession->SendPacket( &data );
|
||||
//uint32 fqid=pQuestMenu->GetItem(0).m_qId;
|
||||
//sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC Guid=%u, questid-0=%u",npcGUID,fqid);
|
||||
sLog.outDebug("WORLD: Sent SMSG_QUESTGIVER_QUEST_LIST NPC Guid=%u", GUID_LOPART(npcGUID));
|
||||
}
|
||||
|
||||
void PlayerMenu::SendQuestGiverStatus( uint8 questStatus, uint64 npcGUID )
|
||||
|
|
@ -416,9 +415,11 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
|
|||
}
|
||||
|
||||
data << uint64(npcGUID);
|
||||
data << uint64(0); // wotlk
|
||||
data << uint64(0); // wotlk, something todo with quest sharing?
|
||||
data << uint32(pQuest->GetQuestId());
|
||||
data << Title << Details << Objectives;
|
||||
data << Title;
|
||||
data << Details;
|
||||
data << Objectives;
|
||||
data << uint32(ActivateAccept);
|
||||
data << uint32(pQuest->GetSuggestedPlayers());
|
||||
data << uint8(0); // new wotlk
|
||||
|
|
@ -458,6 +459,7 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
|
|||
else
|
||||
data << uint32(0);
|
||||
}
|
||||
|
||||
data << uint32(pQuest->GetRewOrReqMoney());
|
||||
}
|
||||
|
||||
|
|
@ -682,8 +684,8 @@ void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID,
|
|||
data << uint32(0x08); // unused by client?
|
||||
data << uint32(pQuest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast==0)
|
||||
data << uint32(pQuest->GetRewSpellCast()); // casted spell
|
||||
data << uint32(0); // Honor points reward, not implemented
|
||||
data << uint32(pQuest->GetBonusTalents()); // new wotlk
|
||||
data << uint32(0); // unknown
|
||||
data << uint32(pQuest->GetBonusTalents()); // bonus talents
|
||||
pSession->SendPacket( &data );
|
||||
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
|
||||
}
|
||||
|
|
@ -761,7 +763,9 @@ void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID
|
|||
else
|
||||
data << uint32(0x03);
|
||||
|
||||
data << uint32(0x04) << uint32(0x08) << uint32(0x10);
|
||||
data << uint32(0x04);
|
||||
data << uint32(0x08);
|
||||
data << uint32(0x10);
|
||||
|
||||
pSession->SendPacket( &data );
|
||||
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
|
|||
UnitMoveType 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();
|
||||
switch(opcode)
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2
|
|||
*data << ((Unit*)this)->GetSpeed( MOVE_FLY );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_FLYBACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_TURN );
|
||||
*data << float(7);
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_PITCH );
|
||||
|
||||
// 0x08000000
|
||||
if(flags2 & MOVEMENTFLAG_SPLINE2)
|
||||
|
|
@ -539,10 +539,10 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2
|
|||
}
|
||||
|
||||
// 0x80
|
||||
if(flags & UPDATEFLAG_WOTLK) // unused for now
|
||||
if(flags & UPDATEFLAG_VEHICLE) // unused for now
|
||||
{
|
||||
*data << uint32(0); // vehicle id
|
||||
*data << float(0);
|
||||
*data << uint32(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -747,9 +747,8 @@ void Player::EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 da
|
|||
data << (uint32)damage;
|
||||
data << (uint32)0;
|
||||
data << (uint32)0;
|
||||
//m_session->SendPacket(&data);
|
||||
//Let other players see that you get damage
|
||||
SendMessageToSet(&data, true);
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -2584,18 +2584,18 @@ void Spell::SendCastResult(uint8 result)
|
|||
case SPELL_FAILED_EQUIPPED_ITEM_CLASS:
|
||||
data << uint32(m_spellInfo->EquippedItemClass);
|
||||
data << uint32(m_spellInfo->EquippedItemSubClassMask);
|
||||
data << uint32(m_spellInfo->EquippedItemInventoryTypeMask);
|
||||
//data << uint32(m_spellInfo->EquippedItemInventoryTypeMask);
|
||||
break;
|
||||
}
|
||||
((Player*)m_caster)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
else
|
||||
/*else
|
||||
{
|
||||
WorldPacket data(SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE, (8+4));
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << uint32(m_spellInfo->Id);
|
||||
((Player*)m_caster)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void Spell::SendSpellStart()
|
||||
|
|
@ -2800,7 +2800,7 @@ void Spell::SendLogExecute()
|
|||
data << uint32(count1); // count1 (effect count?)
|
||||
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;
|
||||
data << uint32(count2); // count2 (target count?)
|
||||
for(uint32 j = 0; j < count2; ++j)
|
||||
|
|
@ -2846,30 +2846,19 @@ void Spell::SendLogExecute()
|
|||
data << uint8(0);
|
||||
break;
|
||||
case SPELL_EFFECT_CREATE_ITEM:
|
||||
case SPELL_EFFECT_157:
|
||||
data << uint32(m_spellInfo->EffectItemType[0]);
|
||||
break;
|
||||
case SPELL_EFFECT_SUMMON:
|
||||
case SPELL_EFFECT_SUMMON_WILD:
|
||||
case SPELL_EFFECT_SUMMON_GUARDIAN:
|
||||
case SPELL_EFFECT_TRANS_DOOR:
|
||||
case SPELL_EFFECT_SUMMON_PET:
|
||||
case SPELL_EFFECT_SUMMON_POSSESSED:
|
||||
//case SPELL_EFFECT_SUMMON_TOTEM:
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_WILD:
|
||||
case SPELL_EFFECT_CREATE_HOUSE:
|
||||
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_SLOT2:
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT3:
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT4:
|
||||
case SPELL_EFFECT_SUMMON_DEMON:
|
||||
case SPELL_EFFECT_150:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
else if(m_targets.getItemTargetGUID())
|
||||
|
|
@ -2888,6 +2877,13 @@ void Spell::SendLogExecute()
|
|||
else
|
||||
data << uint8(0);
|
||||
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:
|
||||
return;
|
||||
}
|
||||
|
|
@ -2927,7 +2923,7 @@ void Spell::SendChannelUpdate(uint32 time)
|
|||
|
||||
WorldPacket data( MSG_CHANNEL_UPDATE, 8+4 );
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << time;
|
||||
data << uint32(time);
|
||||
|
||||
((Player*)m_caster)->GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
|
@ -2964,8 +2960,8 @@ void Spell::SendChannelStart(uint32 duration)
|
|||
{
|
||||
WorldPacket data( MSG_CHANNEL_START, (8+4+4) );
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_spellInfo->Id;
|
||||
data << duration;
|
||||
data << uint32(m_spellInfo->Id);
|
||||
data << uint32(duration);
|
||||
|
||||
((Player*)m_caster)->GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
|
@ -2979,9 +2975,15 @@ void Spell::SendChannelStart(uint32 duration)
|
|||
void Spell::SendResurrectRequest(Player* target)
|
||||
{
|
||||
WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+2+4));
|
||||
data << m_caster->GetGUID();
|
||||
data << uint32(1) << uint16(0) << uint32(1);
|
||||
data << uint64(m_caster->GetGUID());
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
@ -2991,8 +2993,8 @@ void Spell::SendPlaySpellVisual(uint32 SpellID)
|
|||
return;
|
||||
|
||||
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 12);
|
||||
data << m_caster->GetGUID();
|
||||
data << SpellID;
|
||||
data << uint64(m_caster->GetGUID());
|
||||
data << uint32(SpellID); // spell visual id?
|
||||
((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)
|
||||
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(school_immune || mechanic_immune || dispel_immune)
|
||||
|
|
@ -4630,7 +4632,7 @@ uint8 Spell::CheckItems()
|
|||
return SPELL_FAILED_CANT_BE_DISENCHANTED;
|
||||
|
||||
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;
|
||||
if (item_disenchantskilllevel == uint32(-1))
|
||||
return SPELL_FAILED_CANT_BE_DISENCHANTED;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ float baseMoveSpeed[MAX_MOVE_TYPE] =
|
|||
3.141594f, // MOVE_TURN
|
||||
7.0f, // MOVE_FLY
|
||||
4.5f, // MOVE_FLYBACK
|
||||
3.14f // MOVE_PITCH
|
||||
};
|
||||
|
||||
// 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)
|
||||
{
|
||||
WorldPacket data( SMSG_EMOTE, 12 );
|
||||
data << anim_id << GetGUID();
|
||||
WPAssert(data.size() == 12);
|
||||
|
||||
data << uint32(anim_id);
|
||||
data << uint64(GetGUID());
|
||||
SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
|
|
@ -1665,7 +1665,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe
|
|||
RemainingDamage -= currentAbsorb;
|
||||
}
|
||||
|
||||
// only split damage if not damaing yourself
|
||||
// only split damage if not damaging yourself
|
||||
if(pVictim != this)
|
||||
{
|
||||
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)
|
||||
{
|
||||
WorldPacket data( SMSG_ATTACKSTART, 16 );
|
||||
data << GetGUID();
|
||||
data << pVictim->GetGUID();
|
||||
data << uint64(GetGUID());
|
||||
data << uint64(pVictim->GetGUID());
|
||||
|
||||
SendMessageToSet(&data, true);
|
||||
DEBUG_LOG( "WORLD: Sent SMSG_ATTACKSTART" );
|
||||
|
|
@ -3847,7 +3847,7 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur)
|
|||
if(is_triggered_by_spell)
|
||||
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
|
||||
{
|
||||
case SPELL_AURA_MOD_SHAPESHIFT:
|
||||
|
|
@ -6924,7 +6924,7 @@ bool Unit::Attack(Unit *victim, bool meleeAttack)
|
|||
if(GetTypeId()==TYPEID_UNIT)
|
||||
{
|
||||
WorldPacket data(SMSG_AI_REACTION, 12);
|
||||
data << GetGUID();
|
||||
data << uint64(GetGUID());
|
||||
data << uint32(AI_REACTION_AGGRO); // Aggro sound
|
||||
((WorldObject*)this)->SendMessageToSet(&data, true);
|
||||
|
||||
|
|
@ -7174,6 +7174,7 @@ void Unit::SendHealSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, bool c
|
|||
data.append(GetPackGUID());
|
||||
data << uint32(SpellID);
|
||||
data << uint32(Damage);
|
||||
data << uint32(0); // over healing?
|
||||
data << uint8(critical ? 1 : 0);
|
||||
data << uint8(0); // unused in client?
|
||||
SendMessageToSet(&data, true);
|
||||
|
|
@ -7187,7 +7188,6 @@ void Unit::SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, Po
|
|||
data << uint32(SpellID);
|
||||
data << uint32(powertype);
|
||||
data << uint32(Damage);
|
||||
//data << uint8(critical ? 1 : 0); // removed in 2.4.0
|
||||
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)
|
||||
{
|
||||
// not criting spell
|
||||
// not critting spell
|
||||
if((spellProto->AttributesEx2 & SPELL_ATTR_EX2_CANT_CRIT))
|
||||
return false;
|
||||
|
||||
|
|
@ -8327,7 +8327,7 @@ void Unit::ApplySpellDispelImmunity(const SpellEntry * spellProto, DispelType ty
|
|||
float Unit::GetWeaponProcChance() const
|
||||
{
|
||||
// normalized proc chance for weapon attack speed
|
||||
// (odd formulae...)
|
||||
// (odd formula...)
|
||||
if(isAttackReady(BASE_ATTACK))
|
||||
return (GetAttackTime(BASE_ATTACK) * 1.8f / 1000.0f);
|
||||
else if (haveOffhandWeapon() && isAttackReady(OFF_ATTACK))
|
||||
|
|
|
|||
|
|
@ -383,10 +383,11 @@ enum UnitMoveType
|
|||
MOVE_SWIMBACK = 4,
|
||||
MOVE_TURN = 5,
|
||||
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];
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ enum OBJECT_UPDATE_FLAGS
|
|||
UPDATEFLAG_HIGHGUID = 0x10,
|
||||
UPDATEFLAG_LIVING = 0x20,
|
||||
UPDATEFLAG_HASPOSITION = 0x40,
|
||||
UPDATEFLAG_WOTLK = 0x80
|
||||
UPDATEFLAG_VEHICLE = 0x80
|
||||
};
|
||||
|
||||
class UpdateData
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue