From 0b0a14258026d7c64d432756febab1c90e6d093a Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 23 Jul 2022 18:12:07 +0200 Subject: [PATCH] =?UTF-8?q?feat(Core/Entities):=20Enabled=20loading=20basi?= =?UTF-8?q?c=20stats=20for=20players,=20pets=20an=E2=80=A6=20(#12394)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(Core/Entities): Enabled loading basic stats for players, pets and items from database as 32 bit integers. Closes #12386 --- .../rev_1657957555774947100.sql | 45 ++++++++++++++++++ src/server/game/Entities/Player/Player.h | 13 ++++-- src/server/game/Globals/ObjectMgr.cpp | 46 +++++++++---------- src/server/game/Globals/ObjectMgr.h | 15 +++--- 4 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1657957555774947100.sql diff --git a/data/sql/updates/pending_db_world/rev_1657957555774947100.sql b/data/sql/updates/pending_db_world/rev_1657957555774947100.sql new file mode 100644 index 000000000..66a58a3ec --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1657957555774947100.sql @@ -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; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1ab612d5d..7a5b10271 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -289,8 +289,8 @@ typedef std::list 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 stats = { }; }; typedef std::list 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; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ca63485ba..c82efc403 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -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()); - itemTemplate.ItemStat[i].ItemStatValue = int32(fields[29 + i * 2].Get()); + itemTemplate.ItemStat[i].ItemStatValue = fields[29 + i * 2].Get(); } itemTemplate.ScalingStatDistribution = uint32(fields[48].Get()); @@ -2691,13 +2691,13 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.Damage[i].DamageType = uint32(fields[52 + i * 3].Get()); } - itemTemplate.Armor = uint32(fields[56].Get()); - itemTemplate.HolyRes = uint32(fields[57].Get()); - itemTemplate.FireRes = uint32(fields[58].Get()); - itemTemplate.NatureRes = uint32(fields[59].Get()); - itemTemplate.FrostRes = uint32(fields[60].Get()); - itemTemplate.ShadowRes = uint32(fields[61].Get()); - itemTemplate.ArcaneRes = uint32(fields[62].Get()); + itemTemplate.Armor = fields[56].Get(); + itemTemplate.HolyRes = fields[57].Get(); + itemTemplate.FireRes = fields[58].Get(); + itemTemplate.NatureRes = fields[59].Get(); + itemTemplate.FrostRes = fields[60].Get(); + itemTemplate.ShadowRes = fields[61].Get(); + itemTemplate.ArcaneRes = fields[62].Get(); itemTemplate.Delay = uint32(fields[63].Get()); itemTemplate.AmmoType = uint32(fields[64].Get()); itemTemplate.RangedModRange = fields[65].Get(); @@ -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(); - pLevelInfo->mana = fields[3].Get(); + pLevelInfo->health = fields[2].Get(); + pLevelInfo->mana = fields[3].Get(); pLevelInfo->armor = fields[9].Get(); - pLevelInfo->min_dmg = fields[10].Get(); - pLevelInfo->max_dmg = fields[11].Get(); - for (int i = 0; i < MAX_STATS; i++) + pLevelInfo->min_dmg = fields[10].Get(); + pLevelInfo->max_dmg = fields[11].Get(); + for (uint8 i = 0; i < MAX_STATS; i++) { - pLevelInfo->stats[i] = fields[i + 4].Get(); + pLevelInfo->stats[i] = fields[i + 4].Get(); } ++count; @@ -3973,8 +3973,8 @@ void ObjectMgr::LoadPlayerInfo() PlayerClassLevelInfo& levelInfo = info->levelInfo[current_level - 1]; - levelInfo.basehealth = fields[2].Get(); - levelInfo.basemana = fields[3].Get(); + levelInfo.basehealth = fields[2].Get(); + levelInfo.basemana = fields[3].Get(); ++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(); + for (uint8 i = 0; i < MAX_STATS; i++) + levelInfo.stats[i] = fields[i + 3].Get(); } ++count; @@ -9359,7 +9359,7 @@ void ObjectMgr::LoadCreatureClassLevelStats() for (uint8 i = 0; i < MAX_EXPANSIONS; ++i) { - stats.BaseHealth[i] = fields[2 + i].Get(); + stats.BaseHealth[i] = fields[2 + i].Get(); if (stats.BaseHealth[i] == 0) { @@ -9389,11 +9389,11 @@ void ObjectMgr::LoadCreatureClassLevelStats() } } - stats.BaseMana = fields[5].Get(); - stats.BaseArmor = fields[6].Get(); + stats.BaseMana = fields[5].Get(); + stats.BaseArmor = fields[6].Get(); - stats.AttackPower = fields[7].Get(); - stats.RangedAttackPower = fields[8].Get(); + stats.AttackPower = fields[7].Get(); + stats.RangedAttackPower = fields[8].Get(); _creatureBaseStatsStore[MAKE_PAIR16(Level, Class)] = stats; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index bc2cdd748..88e82db54 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -520,14 +520,17 @@ typedef std::pair 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