diff options
author | funjoker <funjoker109@gmail.com> | 2025-05-13 23:53:55 +0200 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2025-05-13 23:53:55 +0200 |
commit | e723e7935ec92ab1258def0a4238cb6c1c72ec7c (patch) | |
tree | f1cbc6e649d13590bc612bc65082a9dc705b552d /src | |
parent | 58485e6d7a7b831578e29c6a236e4dde4a3b9807 (diff) |
Core/Stats: Reimplement basehp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.h | 33 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Player/PlayerTaxi.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 29 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/RaceMask.h | 15 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_RaceMask.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 6 | ||||
-rw-r--r-- | src/tools/map_extractor/System.cpp | 2 |
12 files changed, 42 insertions, 80 deletions
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index e47033e3655..429bf0c1644 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -31,7 +31,6 @@ GameTable<GtChanceToSpellCritEntry> sChanceToSpellCritGameTable; GameTable<GtChanceToSpellCritBaseEntry> sChanceToSpellCritBaseGameTable; GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; -GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; GameTable<GtOctHpPerStaminaEntry> sOctHpPerStaminaGameTable; @@ -127,7 +126,6 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sChanceToSpellCritBaseGameTable, "ChanceToSpellCritBase.txt"); LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt"); LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); - LOAD_GT(sOctBaseHpByClassGameTable, "OCTBaseHPByClass.txt"); LOAD_GT(sOctBaseMpByClassGameTable, "OCTBaseMPByClass.txt"); LOAD_GT(sOctClassCombatRatingScalarGameTable, "OCTClassCombatRatingScalar.txt"); LOAD_GT(sOctHpPerStaminaGameTable, "OCTHPPerStamina.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index 02292e50876..43466237d81 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -130,21 +130,6 @@ struct GtNpcManaCostScalerEntry float Scaler = 0.0f; }; -struct GtOctBaseHpByClassEntry -{ - float Warrior = 0.0f; - float Paladin = 0.0f; - float Hunter = 0.0f; - float Rogue = 0.0f; - float Priest = 0.0f; - float DeathKnight = 0.0f; - float Shaman = 0.0f; - float Mage = 0.0f; - float Warlock = 0.0f; - float Monk = 0.0f; - float Druid = 0.0f; -}; - struct GtOctBaseMpByClassEntry { float Warrior = 0.0f; @@ -254,19 +239,24 @@ struct GtShieldBlockRegularEntry struct GtSpellScalingEntry { - float Warrior = 0.0f; - float Paladin = 0.0f; - float Hunter = 0.0f; float Rogue = 0.0f; + float Druid = 0.0f; + float Hunter = 0.0f; + float Mage = 0.0f; + float Paladin = 0.0f; float Priest = 0.0f; - float DeathKnight = 0.0f; float Shaman = 0.0f; - float Mage = 0.0f; float Warlock = 0.0f; + float Warrior = 0.0f; + float DeathKnight = 0.0f; float Monk = 0.0f; - float Druid = 0.0f; + float DemonHunter = 0.0f; float Item = 0.0f; float Consumable = 0.0f; + float Gem1 = 0.0f; + float Gem2 = 0.0f; + float Gem3 = 0.0f; + float Health = 0.0f; }; struct GtTeamContributionPointsEntry @@ -301,7 +291,6 @@ TC_GAME_API extern GameTable<GtChanceToSpellCritEntry> sChanceToSpe TC_GAME_API extern GameTable<GtChanceToSpellCritBaseEntry> sChanceToSpellCritBaseGameTable; TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; -TC_GAME_API extern GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; TC_GAME_API extern GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; TC_GAME_API extern GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; TC_GAME_API extern GameTable<GtOctHpPerStaminaEntry> sOctHpPerStaminaGameTable; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f3853f65e42..d17c9f73a6a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2068,12 +2068,12 @@ void Player::GiveLevel(uint8 level) PlayerLevelInfo info; sObjectMgr->GetPlayerLevelInfo(GetRace(), GetClass(), level, &info); - uint32 basemana = 0, baseHp = 0; - sObjectMgr->GetPlayerClassLevelInfo(GetClass(), level, basemana, baseHp); + uint32 basemana = 0; + sObjectMgr->GetPlayerClassLevelInfo(GetClass(), level, basemana); WorldPackets::Misc::LevelUpInfo packet; packet.Level = level; - packet.HealthDelta = int32(baseHp) - int32(GetCreateHealth()); + packet.HealthDelta = int32(info.base_hp) - int32(GetCreateHealth()); /// @todo find some better solution // for (int i = 0; i < MAX_STORED_POWERS; ++i) @@ -2102,7 +2102,7 @@ void Player::GiveLevel(uint8 level) for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) SetCreateStat(Stats(i), info.stats[i]); - SetCreateHealth(baseHp); + SetCreateHealth(info.base_hp); SetCreateMana(basemana); InitGlyphsForLevel(); @@ -2155,8 +2155,8 @@ void Player::InitStatsForLevel(bool reapplyMods) if (reapplyMods) //reapply stats values only on .reset stats (level) command _RemoveAllStatBonuses(); - uint32 basemana = 0, baseHp = 0; - sObjectMgr->GetPlayerClassLevelInfo(GetClass(), GetLevel(), basemana, baseHp); + uint32 basemana = 0; + sObjectMgr->GetPlayerClassLevelInfo(GetClass(), GetLevel(), basemana); PlayerLevelInfo info; sObjectMgr->GetPlayerLevelInfo(GetRace(), GetClass(), GetLevel(), &info); @@ -2194,7 +2194,7 @@ void Player::InitStatsForLevel(bool reapplyMods) for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) SetStat(Stats(i), info.stats[i]); - SetCreateHealth(baseHp); + SetCreateHealth(info.base_hp); //set create powers SetCreateMana(basemana); diff --git a/src/server/game/Entities/Player/PlayerTaxi.cpp b/src/server/game/Entities/Player/PlayerTaxi.cpp index 70bc584baff..1716b18175c 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.cpp +++ b/src/server/game/Entities/Player/PlayerTaxi.cpp @@ -45,7 +45,6 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level case RACE_NIGHTELF: case RACE_GNOME: case RACE_DRAENEI: - case RACE_WORGEN: SetTaximaskNode(2); // Stormwind, Elwynn SetTaximaskNode(6); // Ironforge, Dun Morogh SetTaximaskNode(26); // Lor'danel, Darkshore @@ -65,7 +64,6 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level case RACE_TAUREN: case RACE_TROLL: case RACE_BLOODELF: - case RACE_GOBLIN: SetTaximaskNode(11); // Undercity, Tirisfal SetTaximaskNode(22); // Thunder Bluff, Mulgore SetTaximaskNode(23); // Orgrimmar, Durotar diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index ec4a41e89c5..bfcb4149d90 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -111,10 +111,10 @@ void Unit::UpdatePowerRegen(Powers powerType) case POWER_MANA: { // Get base of Mana Pool in sBaseMPGameTable - uint32 basemana = 0, basehp = 0; + uint32 basemana = 0; if (IsPlayer()) - sObjectMgr->GetPlayerClassLevelInfo(GetClass(), GetLevel(), basemana, basehp); + sObjectMgr->GetPlayerClassLevelInfo(GetClass(), GetLevel(), basemana); else basemana = GetCreateMana(); // this should also get replaced by the base mana game table in the future. diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index b1db5850e65..25ff87d474b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4013,8 +4013,8 @@ void ObjectMgr::LoadPlayerInfo() } while (raceStatsResult->NextRow()); - // 0 1 2 3 4 5 6 - QueryResult result = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte, spi FROM player_classlevelstats"); + // 0 1 2 3 4 5 6 7 + QueryResult result = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte, spi, basehp FROM player_classlevelstats"); if (!result) { @@ -4056,6 +4056,8 @@ void ObjectMgr::LoadPlayerInfo() PlayerLevelInfo& levelInfo = playerInfo->levelInfo[current_level - 1]; for (uint8 i = 0; i < MAX_STATS; ++i) levelInfo.stats[i] = fields[i + 2].GetUInt16() + raceStatModifiers[race].StatModifier[i]; + + levelInfo.base_hp = fields[7].GetUInt32(); } } @@ -4089,14 +4091,14 @@ void ObjectMgr::LoadPlayerInfo() continue; // skip expansion races if not playing with expansion - if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_CATACLYSM && (race == RACE_GOBLIN || race == RACE_WORGEN)) - continue; - - if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_LEGION && class_ == CLASS_DEMON_HUNTER) - continue; - - if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_DRAGONFLIGHT && class_ == CLASS_EVOKER) - continue; + // if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_CATACLYSM && (race == RACE_GOBLIN || race == RACE_WORGEN)) + // continue; + // + // if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_LEGION && class_ == CLASS_DEMON_HUNTER) + // continue; + // + // if (sWorld->getIntConfig(CONFIG_EXPANSION) < EXPANSION_DRAGONFLIGHT && class_ == CLASS_EVOKER) + // continue; // fatal error if no level 1 data if (!playerInfo->levelInfo || playerInfo->levelInfo[0].stats[0] == 0) @@ -4174,7 +4176,7 @@ void ObjectMgr::LoadPlayerInfo() } } -void ObjectMgr::GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseMana, uint32& baseHp) const +void ObjectMgr::GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseMana) const { if (level < 1 || class_ >= MAX_CLASSES) return; @@ -4186,11 +4188,6 @@ void ObjectMgr::GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& base baseMana = uint32(GetGameTableColumnForClass(mp, class_)); else baseMana = 0; - - if (GtOctBaseHpByClassEntry const* hp = sOctBaseHpByClassGameTable.GetRow(level)) - baseHp = uint32(GetGameTableColumnForClass(hp, class_)); - else - baseHp = 0; } void ObjectMgr::GetPlayerLevelInfo(uint32 race, uint32 class_, uint8 level, PlayerLevelInfo* info) const diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f645ddacf38..f5c31e91260 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -630,6 +630,7 @@ typedef std::vector<PlayerCreateInfoItem> PlayerCreateInfoItems; struct PlayerLevelInfo { uint16 stats[MAX_STATS] = { }; + uint32 base_hp = 1; }; typedef std::vector<uint32> PlayerCreateInfoSpells; @@ -1154,7 +1155,7 @@ class TC_GAME_API ObjectMgr PetLevelInfo const* GetPetLevelInfo(uint32 creature_id, uint8 level) const; - void GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseMana, uint32& baseHp) const; + void GetPlayerClassLevelInfo(uint32 class_, uint8 level, uint32& baseMana) const; PlayerInfo const* GetPlayerInfo(uint32 race, uint32 class_) const; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index b0fcfe262c8..6566698c649 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -2138,9 +2138,6 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa case RACE_NIGHTELF: stmt->setUInt16(1, 113); break; - case RACE_WORGEN: - stmt->setUInt16(1, 791); - break; case RACE_UNDEAD_PLAYER: stmt->setUInt16(1, 673); break; @@ -2153,9 +2150,6 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa case RACE_BLOODELF: stmt->setUInt16(1, 137); break; - case RACE_GOBLIN: - stmt->setUInt16(1, 792); - break; default: TC_LOG_ERROR("entities.player", "Could not find language data for race ({}).", factionChangeInfo->RaceID); SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get()); diff --git a/src/server/game/Miscellaneous/RaceMask.h b/src/server/game/Miscellaneous/RaceMask.h index 6cb511f8cff..d22a2852ab8 100644 --- a/src/server/game/Miscellaneous/RaceMask.h +++ b/src/server/game/Miscellaneous/RaceMask.h @@ -33,7 +33,7 @@ enum Races RACE_TAUREN = 6, // TITLE Tauren RACE_GNOME = 7, // TITLE Gnome RACE_TROLL = 8, // TITLE Troll - RACE_GOBLIN = 9, // TITLE Goblin + //RACE_GOBLIN = 9, // TITLE Goblin RACE_BLOODELF = 10, // TITLE Blood Elf RACE_DRAENEI = 11, // TITLE Draenei //RACE_FEL_ORC = 12, @@ -46,7 +46,7 @@ enum Races //RACE_TAUNKA = 19, //RACE_NORTHREND_SKELETON = 20, //RACE_ICE_TROLL = 21, - RACE_WORGEN = 22, // TITLE Worgen + //RACE_WORGEN = 22, // TITLE Worgen //RACE_GILNEAN = 23, //RACE_PANDAREN_NEUTRAL = 24, // TITLE Pandaren DESCRIPTION Pandaren (Neutral) //RACE_PANDAREN_ALLIANCE = 25, // TITLE Pandaren DESCRIPTION Pandaren (Alliance) @@ -81,7 +81,7 @@ enum Races }; // max+1 for player race -#define MAX_RACES 23 +#define MAX_RACES 12 namespace Trinity { @@ -109,10 +109,8 @@ struct RaceMask case RACE_TAUREN: case RACE_GNOME: case RACE_TROLL: - case RACE_GOBLIN: case RACE_BLOODELF: case RACE_DRAENEI: - case RACE_WORGEN: return raceId - 1; default: break; @@ -145,17 +143,14 @@ constexpr Trinity::RaceMask<uint64> RACEMASK_ALL_PLAYABLE = { std::integral_cons Trinity::RaceMask<uint64>::GetMaskForRace(RACE_GNOME) | Trinity::RaceMask<uint64>::GetMaskForRace(RACE_TROLL) | Trinity::RaceMask<uint64>::GetMaskForRace(RACE_BLOODELF) | - Trinity::RaceMask<uint64>::GetMaskForRace(RACE_DRAENEI) | - Trinity::RaceMask<uint64>::GetMaskForRace(RACE_GOBLIN) | - Trinity::RaceMask<uint64>::GetMaskForRace(RACE_WORGEN)>::value }; + Trinity::RaceMask<uint64>::GetMaskForRace(RACE_DRAENEI)>::value }; constexpr Trinity::RaceMask<uint64> RACEMASK_ALLIANCE = { std::integral_constant<uint64, Trinity::RaceMask<uint64>::GetMaskForRace(RACE_HUMAN) | Trinity::RaceMask<uint64>::GetMaskForRace(RACE_DWARF) | Trinity::RaceMask<uint64>::GetMaskForRace(RACE_NIGHTELF) | Trinity::RaceMask<uint64>::GetMaskForRace(RACE_GNOME) | - Trinity::RaceMask<uint64>::GetMaskForRace(RACE_DRAENEI) | - Trinity::RaceMask<uint64>::GetMaskForRace(RACE_WORGEN)>::value }; + Trinity::RaceMask<uint64>::GetMaskForRace(RACE_DRAENEI)>::value }; constexpr Trinity::RaceMask<uint64> RACEMASK_HORDE = { std::integral_constant<uint64, (RACEMASK_ALL_PLAYABLE & ~RACEMASK_ALLIANCE).RawValue>::value }; diff --git a/src/server/game/Miscellaneous/enuminfo_RaceMask.cpp b/src/server/game/Miscellaneous/enuminfo_RaceMask.cpp index ccb1bf88880..ea55661950e 100644 --- a/src/server/game/Miscellaneous/enuminfo_RaceMask.cpp +++ b/src/server/game/Miscellaneous/enuminfo_RaceMask.cpp @@ -39,10 +39,8 @@ TC_API_EXPORT EnumText EnumUtils<Races>::ToString(Races value) case RACE_TAUREN: return { "RACE_TAUREN", "Tauren", "" }; case RACE_GNOME: return { "RACE_GNOME", "Gnome", "" }; case RACE_TROLL: return { "RACE_TROLL", "Troll", "" }; - case RACE_GOBLIN: return { "RACE_GOBLIN", "Goblin", "" }; case RACE_BLOODELF: return { "RACE_BLOODELF", "Blood Elf", "" }; case RACE_DRAENEI: return { "RACE_DRAENEI", "Draenei", "" }; - case RACE_WORGEN: return { "RACE_WORGEN", "Worgen", "" }; default: throw std::out_of_range("value"); } } @@ -63,10 +61,8 @@ TC_API_EXPORT Races EnumUtils<Races>::FromIndex(size_t index) case 5: return RACE_TAUREN; case 6: return RACE_GNOME; case 7: return RACE_TROLL; - case 8: return RACE_GOBLIN; case 9: return RACE_BLOODELF; case 10: return RACE_DRAENEI; - case 11: return RACE_WORGEN; default: throw std::out_of_range("index"); } } @@ -84,10 +80,8 @@ TC_API_EXPORT size_t EnumUtils<Races>::ToIndex(Races value) case RACE_TAUREN: return 5; case RACE_GNOME: return 6; case RACE_TROLL: return 7; - case RACE_GOBLIN: return 8; case RACE_BLOODELF: return 9; case RACE_DRAENEI: return 10; - case RACE_WORGEN: return 11; default: throw std::out_of_range("value"); } } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ae3615e29a1..7afa893198b 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -420,12 +420,10 @@ class spell_gen_battleground_mercenary_shapeshift : public AuraScript { RACE_NIGHTELF, { RACE_TROLL, RACE_BLOODELF } }, { RACE_UNDEAD_PLAYER, { RACE_HUMAN } }, { RACE_TAUREN, { RACE_DRAENEI, RACE_NIGHTELF } }, - { RACE_GNOME, { RACE_GOBLIN, RACE_BLOODELF } }, + { RACE_GNOME, { RACE_BLOODELF } }, { RACE_TROLL, { RACE_NIGHTELF, RACE_HUMAN, RACE_DRAENEI } }, - { RACE_GOBLIN, { RACE_GNOME, RACE_DWARF } }, { RACE_BLOODELF, { RACE_HUMAN, RACE_NIGHTELF } }, { RACE_DRAENEI, { RACE_TAUREN, RACE_ORC } }, - { RACE_WORGEN, { RACE_TROLL } } }; inline static std::unordered_map<Races, std::array<uint32, 2>> const RaceDisplayIds = @@ -438,10 +436,8 @@ class spell_gen_battleground_mercenary_shapeshift : public AuraScript { RACE_TAUREN, { 55261, 55260 } }, { RACE_GNOME, { 55245, 55244 } }, { RACE_TROLL, { 55263, 55262 } }, - { RACE_GOBLIN, { 55267, 57244 } }, { RACE_BLOODELF, { 55265, 55264 } }, { RACE_DRAENEI, { 55247, 55246 } }, - { RACE_WORGEN, { 55255, 55254 } } }; inline static std::vector<uint32> RacialSkills; diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index 04f916dc43b..aaf69832af7 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -1351,7 +1351,7 @@ void ExtractGameTables() // { 1391653, "NpcTotalHpExp1.txt" }, // { 1391654, "NpcTotalHpExp2.txt" }, // { 1391655, "NpcTotalHpExp3.txt" }, - { 5464960, "OCTBaseHPByClass.txt" }, + // { 5464960, "OCTBaseHPByClass.txt" }, { 4049853, "OCTBaseMPByClass.txt" }, { 4526467, "OCTClassCombatRatingScalar.txt" }, { 5464961, "OCTHPPerStamina.txt" }, |