diff options
author | Carbenium <keresztesschmidt@gmail.com> | 2015-04-16 00:48:45 +0200 |
---|---|---|
committer | Carbenium <keresztesschmidt@gmail.com> | 2015-04-16 01:28:44 +0200 |
commit | 5c3d8c1e8788909181e7a5ded1592dae767d4807 (patch) | |
tree | 517e68241270f00ea98d1b65b0f74e4a1e8d1127 /src | |
parent | 9cf13eff268b6d43d40710b053ad8c908f0a3efc (diff) |
Core/PacketIO: Updated and enabled SMSG_LOG_XP_GAIN
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 8 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Formulas.h | 3 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 15 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
6 files changed, 48 insertions, 18 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bd5d0a7c2f0..fe35fe82108 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2826,23 +2826,17 @@ void Player::RemoveFromGroup(Group* group, ObjectGuid guid, RemoveMethod method group->RemoveMember(guid, method, kicker, reason); } -void Player::SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool recruitAFriend, float /*group_rate*/) +void Player::SendLogXPGain(uint32 givenXP, Unit* victim, uint32 bonusXP, bool recruitAFriend, float groupBonus) { - WorldPacket data(SMSG_LOG_XP_GAIN, 21); // guess size? - data << (victim ? victim->GetGUID() : ObjectGuid::Empty); - data << uint32(GivenXP + BonusXP); // given experience - data << uint8(victim ? 0 : 1); // 00-kill_xp type, 01-non_kill_xp type + WorldPackets::Character::LogXPGain packet; + packet.Victim = victim ? victim->GetGUID() : ObjectGuid::Empty; + packet.Original = givenXP + bonusXP; + packet.Reason = victim ? LOG_XP_REASON_KILL: LOG_XP_REASON_NO_KILL; + packet.Amount = givenXP; + packet.GroupBonus = groupBonus; + packet.ReferAFriend = recruitAFriend; - if (victim) - { - data << uint32(GivenXP); // experience without bonus - - // should use group_rate here but can't figure out how - data << float(1); // 1 - none 0 - 100% group bonus output - } - - data << uint8(recruitAFriend ? 1 : 0); // does the GivenXP include a RaF bonus? - GetSession()->SendPacket(&data); + GetSession()->SendPacket(packet.Write()); } void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c6da897617e..104531d84e2 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1068,6 +1068,12 @@ enum PlayerCommandStates CHEAT_WATERWALK = 0x10 }; +enum PlayerLogXPReason +{ + LOG_XP_REASON_KILL = 0, + LOG_XP_REASON_NO_KILL = 1 +}; + class PlayerTaxi { public: @@ -2110,7 +2116,7 @@ class Player : public Unit, public GridObject<Player> void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override; void DestroyForPlayer(Player* target) const override; - void SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool recruitAFriend = false, float group_rate=1.0f); + void SendLogXPGain(uint32 givenXP, Unit* victim, uint32 bonusXP, bool recruitAFriend = false, float groupBonus = 1.0f); // notifiers void SendAttackSwingCantAttack(); diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index ca1f22b3faa..75615e18bd4 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -195,7 +195,8 @@ namespace Trinity if (isRaid) { // FIXME: Must apply decrease modifiers depending on raid size. - rate = 1.0f; + // set to < 1 to, so client will display raid related strings + rate = 0.99f; } else { diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index ac55f01d657..257c8065fa2 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -443,3 +443,17 @@ WorldPacket const* WorldPackets::Character::BarberShopResultServer::Write() _worldPacket << int32(Result); return &_worldPacket; } + +WorldPacket const* WorldPackets::Character::LogXPGain::Write() +{ + _worldPacket << Victim; + _worldPacket << int32(Original); + _worldPacket << uint8(Reason); + _worldPacket << int32(Amount); + _worldPacket << float(GroupBonus); + _worldPacket.WriteBit(ReferAFriend); + + _worldPacket.FlushBits(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index d6a7f06b796..8541f00a402 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -610,6 +610,21 @@ namespace WorldPackets BarberShopResult Result; }; + + class LogXPGain final : public ServerPacket + { + public: + LogXPGain() : ServerPacket(SMSG_LOG_XP_GAIN, 30) { } + + WorldPacket const* Write() override; + + ObjectGuid Victim; + int32 Original = 0; + uint8 Reason = 0; + int32 Amount = 0; + float GroupBonus = 0; + bool ReferAFriend = false; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index d1f68da912c..dc255d3ac1c 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1304,7 +1304,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_CONTENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ITEM_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |