Core/Packets: updated & enabled SMSG_LEVELUP_INFO
This commit is contained in:
@@ -2904,21 +2904,27 @@ void Player::GiveLevel(uint8 level)
|
||||
uint32 basehp = 0, basemana = 0;
|
||||
sObjectMgr->GetPlayerClassLevelInfo(getClass(), level, basehp, basemana);
|
||||
|
||||
// send levelup info to client
|
||||
WorldPacket data(SMSG_LEVELUP_INFO, (4+4+MAX_POWERS_PER_CLASS*4+MAX_STATS*4));
|
||||
data << uint32(level);
|
||||
data << uint32(int32(basehp) - int32(GetCreateHealth()));
|
||||
// for (int i = 0; i < MAX_STORED_POWERS; ++i) // Powers loop (0-10)
|
||||
data << uint32(int32(basemana) - int32(GetCreateMana()));
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
// end for
|
||||
for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) // Stats loop (0-4)
|
||||
data << uint32(int32(info.stats[i]) - GetCreateStat(Stats(i)));
|
||||
WorldPackets::Misc::LevelUpInfo packet;
|
||||
packet.Level = level;
|
||||
packet.HealthDelta = int32(basehp) - int32(GetCreateHealth());
|
||||
|
||||
GetSession()->SendPacket(&data);
|
||||
/// @todo find some better solution
|
||||
// for (int i = 0; i < MAX_STORED_POWERS; ++i)
|
||||
packet.PowerDelta[0] = int32(basemana) - int32(GetCreateMana());
|
||||
packet.PowerDelta[1] = 0;
|
||||
packet.PowerDelta[2] = 0;
|
||||
packet.PowerDelta[3] = 0;
|
||||
packet.PowerDelta[4] = 0;
|
||||
packet.PowerDelta[5] = 0;
|
||||
|
||||
for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i)
|
||||
packet.StatDelta[i] = int32(info.stats[i]) - GetCreateStat(Stats(i));
|
||||
|
||||
uint32 const* rowLevels = (getClass() != CLASS_DEATH_KNIGHT) ? DefaultTalentRowLevels : DKTalentRowLevels;
|
||||
|
||||
packet.Cp = std::find(rowLevels, rowLevels + MAX_TALENT_TIERS, level) != (rowLevels + MAX_TALENT_TIERS);
|
||||
|
||||
GetSession()->SendPacket(packet.Write());
|
||||
|
||||
SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level));
|
||||
|
||||
@@ -26637,9 +26643,6 @@ void Player::SendSupercededSpell(uint32 oldSpell, uint32 newSpell)
|
||||
|
||||
uint32 Player::CalculateTalentsTiers() const
|
||||
{
|
||||
static uint32 const DefaultTalentRowLevels[MAX_TALENT_TIERS] = { 15, 30, 45, 60, 75, 90, 100 };
|
||||
static uint32 const DKTalentRowLevels[MAX_TALENT_TIERS] = { 57, 58, 59, 60, 75, 90, 100 };
|
||||
|
||||
uint32 const* rowLevels = (getClass() != CLASS_DEATH_KNIGHT) ? DefaultTalentRowLevels : DKTalentRowLevels;
|
||||
for (uint32 i = MAX_TALENT_TIERS; i; --i)
|
||||
if (getLevel() >= rowLevels[i - 1])
|
||||
|
||||
@@ -1285,6 +1285,9 @@ private:
|
||||
bool _isPvP;
|
||||
};
|
||||
|
||||
static uint32 const DefaultTalentRowLevels[MAX_TALENT_TIERS] = { 15, 30, 45, 60, 75, 90, 100 };
|
||||
static uint32 const DKTalentRowLevels[MAX_TALENT_TIERS] = { 57, 58, 59, 60, 75, 90, 100 };
|
||||
|
||||
struct PlayerTalentInfo
|
||||
{
|
||||
PlayerTalentInfo() :
|
||||
|
||||
@@ -338,3 +338,19 @@ WorldPacket const* WorldPackets::Misc::ExplorationExperience::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Misc::LevelUpInfo::Write()
|
||||
{
|
||||
_worldPacket << int32(Level);
|
||||
_worldPacket << int32(HealthDelta);
|
||||
|
||||
for (int32 power : PowerDelta)
|
||||
_worldPacket << power;
|
||||
|
||||
for (int32 stat : StatDelta)
|
||||
_worldPacket << stat;
|
||||
|
||||
_worldPacket << int32(Cp);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -479,6 +479,20 @@ namespace WorldPackets
|
||||
int32 Experience = 0;
|
||||
int32 AreaID = 0;
|
||||
};
|
||||
|
||||
class LevelUpInfo final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
LevelUpInfo() : ServerPacket(SMSG_LEVELUP_INFO, 56) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int32 Level = 0;
|
||||
int32 HealthDelta = 0;
|
||||
std::array<int32, 6> PowerDelta;
|
||||
std::array<int32, MAX_STATS> StatDelta;
|
||||
int32 Cp = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1361,7 +1361,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_DANCE_MOVES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARN_TALENT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVELUP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVELUP_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_BOOT_PLAYER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_BOOT_PROPOSAL_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_DISABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -1295,7 +1295,7 @@ enum OpcodeServer : uint32
|
||||
SMSG_LEARNED_DANCE_MOVES = 0xBADD,
|
||||
SMSG_LEARNED_SPELLS = 0x08E9,
|
||||
SMSG_LEARN_TALENT_FAILED = 0xBADD,
|
||||
SMSG_LEVELUP_INFO = 0xBADD,
|
||||
SMSG_LEVELUP_INFO = 0x092C,
|
||||
SMSG_LFG_BOOT_PLAYER = 0xBADD,
|
||||
SMSG_LFG_BOOT_PROPOSAL_UPDATE = 0xBADD,
|
||||
SMSG_LFG_DISABLED = 0xBADD,
|
||||
|
||||
Reference in New Issue
Block a user