feat(Core/Entities): Enabled loading basic stats for players, pets an… (#12394)

* feat(Core/Entities): Enabled loading basic stats for players, pets and items from database as 32 bit integers.

Closes #12386
This commit is contained in:
UltraNix
2022-07-23 18:12:07 +02:00
committed by GitHub
parent 474fede553
commit 0b0a142580
4 changed files with 85 additions and 34 deletions

View File

@@ -0,0 +1,45 @@
--
ALTER TABLE `pet_levelstats` CHANGE `hp` `hp` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `mana` `mana` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `str` `str` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `agi` `agi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `sta` `sta` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `inte` `inte` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `spi` `spi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `min_dmg` `min_dmg` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `max_dmg` `max_dmg` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `player_classlevelstats` CHANGE `basehp` `basehp` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basemana` `basemana` INT UNSIGNED DEFAULT 1 NOT NULL;
ALTER TABLE `player_levelstats` CHANGE `str` `str` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `agi` `agi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `sta` `sta` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `inte` `inte` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `spi` `spi` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `creature_classlevelstats` CHANGE `basehp0` `basehp0` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basehp1` `basehp1` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basehp2` `basehp2` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basemana` `basemana` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `basearmor` `basearmor` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `attackpower` `attackpower` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `rangedattackpower` `rangedattackpower` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `item_template` CHANGE `stat_value1` `stat_value1` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value2` `stat_value2` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value3` `stat_value3` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value4` `stat_value4` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value5` `stat_value5` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value6` `stat_value6` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value7` `stat_value7` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value8` `stat_value8` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value9` `stat_value9` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value10` `stat_value10` INT DEFAULT 0 NOT NULL,
CHANGE `armor` `armor` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `holy_res` `holy_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `fire_res` `fire_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `nature_res` `nature_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `frost_res` `frost_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `shadow_res` `shadow_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `arcane_res` `arcane_res` INT UNSIGNED DEFAULT 0 NOT NULL;

View File

@@ -289,8 +289,8 @@ typedef std::list<PlayerCreateInfoItem> PlayerCreateInfoItems;
struct PlayerClassLevelInfo
{
PlayerClassLevelInfo() = default;
uint16 basehealth{0};
uint16 basemana{0};
uint32 basehealth{0};
uint32 basemana{0};
};
struct PlayerClassInfo
@@ -302,9 +302,12 @@ struct PlayerClassInfo
struct PlayerLevelInfo
{
PlayerLevelInfo() { for (unsigned char & stat : stats) stat = 0; }
PlayerLevelInfo()
{
stats.fill(0);
}
uint8 stats[MAX_STATS];
std::array<uint32, MAX_STATS> stats = { };
};
typedef std::list<uint32> PlayerCreateInfoSpells;
@@ -2729,7 +2732,7 @@ public:
ActionButtonList m_actionButtons;
float m_auraBaseMod[BASEMOD_END][MOD_END];
int16 m_baseRatingValue[MAX_COMBAT_RATING];
int32 m_baseRatingValue[MAX_COMBAT_RATING];
uint32 m_baseSpellPower;
uint32 m_baseFeralAP;
uint32 m_baseManaRegen;

View File

@@ -2678,7 +2678,7 @@ void ObjectMgr::LoadItemTemplates()
for (uint8 i = 0; i < itemTemplate.StatsCount; ++i)
{
itemTemplate.ItemStat[i].ItemStatType = uint32(fields[28 + i * 2].Get<uint8>());
itemTemplate.ItemStat[i].ItemStatValue = int32(fields[29 + i * 2].Get<int16>());
itemTemplate.ItemStat[i].ItemStatValue = fields[29 + i * 2].Get<int32>();
}
itemTemplate.ScalingStatDistribution = uint32(fields[48].Get<uint16>());
@@ -2691,13 +2691,13 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.Damage[i].DamageType = uint32(fields[52 + i * 3].Get<uint8>());
}
itemTemplate.Armor = uint32(fields[56].Get<uint16>());
itemTemplate.HolyRes = uint32(fields[57].Get<uint8>());
itemTemplate.FireRes = uint32(fields[58].Get<uint8>());
itemTemplate.NatureRes = uint32(fields[59].Get<uint8>());
itemTemplate.FrostRes = uint32(fields[60].Get<uint8>());
itemTemplate.ShadowRes = uint32(fields[61].Get<uint8>());
itemTemplate.ArcaneRes = uint32(fields[62].Get<uint8>());
itemTemplate.Armor = fields[56].Get<uint32>();
itemTemplate.HolyRes = fields[57].Get<uint32>();
itemTemplate.FireRes = fields[58].Get<uint32>();
itemTemplate.NatureRes = fields[59].Get<uint32>();
itemTemplate.FrostRes = fields[60].Get<uint32>();
itemTemplate.ShadowRes = fields[61].Get<uint32>();
itemTemplate.ArcaneRes = fields[62].Get<uint32>();
itemTemplate.Delay = uint32(fields[63].Get<uint16>());
itemTemplate.AmmoType = uint32(fields[64].Get<uint8>());
itemTemplate.RangedModRange = fields[65].Get<float>();
@@ -3448,14 +3448,14 @@ void ObjectMgr::LoadPetLevelInfo()
// data for level 1 stored in [0] array element, ...
PetLevelInfo* pLevelInfo = &pInfoMapEntry[current_level - 1];
pLevelInfo->health = fields[2].Get<uint16>();
pLevelInfo->mana = fields[3].Get<uint16>();
pLevelInfo->health = fields[2].Get<uint32>();
pLevelInfo->mana = fields[3].Get<uint32>();
pLevelInfo->armor = fields[9].Get<uint32>();
pLevelInfo->min_dmg = fields[10].Get<uint16>();
pLevelInfo->max_dmg = fields[11].Get<uint16>();
for (int i = 0; i < MAX_STATS; i++)
pLevelInfo->min_dmg = fields[10].Get<uint32>();
pLevelInfo->max_dmg = fields[11].Get<uint32>();
for (uint8 i = 0; i < MAX_STATS; i++)
{
pLevelInfo->stats[i] = fields[i + 4].Get<uint16>();
pLevelInfo->stats[i] = fields[i + 4].Get<uint32>();
}
++count;
@@ -3973,8 +3973,8 @@ void ObjectMgr::LoadPlayerInfo()
PlayerClassLevelInfo& levelInfo = info->levelInfo[current_level - 1];
levelInfo.basehealth = fields[2].Get<uint16>();
levelInfo.basemana = fields[3].Get<uint16>();
levelInfo.basehealth = fields[2].Get<uint32>();
levelInfo.basemana = fields[3].Get<uint32>();
++count;
} while (result->NextRow());
@@ -4064,8 +4064,8 @@ void ObjectMgr::LoadPlayerInfo()
info->levelInfo = new PlayerLevelInfo[sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)];
PlayerLevelInfo& levelInfo = info->levelInfo[current_level - 1];
for (int i = 0; i < MAX_STATS; i++)
levelInfo.stats[i] = fields[i + 3].Get<uint8>();
for (uint8 i = 0; i < MAX_STATS; i++)
levelInfo.stats[i] = fields[i + 3].Get<uint32>();
}
++count;
@@ -9359,7 +9359,7 @@ void ObjectMgr::LoadCreatureClassLevelStats()
for (uint8 i = 0; i < MAX_EXPANSIONS; ++i)
{
stats.BaseHealth[i] = fields[2 + i].Get<uint16>();
stats.BaseHealth[i] = fields[2 + i].Get<uint32>();
if (stats.BaseHealth[i] == 0)
{
@@ -9389,11 +9389,11 @@ void ObjectMgr::LoadCreatureClassLevelStats()
}
}
stats.BaseMana = fields[5].Get<uint16>();
stats.BaseArmor = fields[6].Get<uint16>();
stats.BaseMana = fields[5].Get<uint32>();
stats.BaseArmor = fields[6].Get<uint32>();
stats.AttackPower = fields[7].Get<uint16>();
stats.RangedAttackPower = fields[8].Get<uint16>();
stats.AttackPower = fields[7].Get<uint32>();
stats.RangedAttackPower = fields[8].Get<uint32>();
_creatureBaseStatsStore[MAKE_PAIR16(Level, Class)] = stats;

View File

@@ -520,14 +520,17 @@ typedef std::pair<QuestRelations::const_iterator, QuestRelations::const_iterator
struct PetLevelInfo
{
PetLevelInfo() { for (unsigned short & stat : stats) stat = 0; }
PetLevelInfo()
{
stats.fill(0);
}
uint16 stats[MAX_STATS];
uint16 health{0};
uint16 mana{0};
std::array<uint32, MAX_STATS> stats = { };
uint32 health{0};
uint32 mana{0};
uint32 armor{0};
uint16 min_dmg{0};
uint16 max_dmg{0};
uint32 min_dmg{0};
uint32 max_dmg{0};
};
struct MailLevelReward