Core/Packets: updated & enabled SMSG_LEVELUP_INFO

This commit is contained in:
MitchesD
2015-03-06 22:11:38 +01:00
parent 854917a31a
commit bf9024c341
6 changed files with 55 additions and 19 deletions
+20 -17
View File
@@ -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])
+3
View File
@@ -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;
};
}
}
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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,