diff options
| -rw-r--r-- | sql/updates/world/3.4.x/2023_11_16_01_world.sql | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 3 | 
7 files changed, 29 insertions, 16 deletions
| diff --git a/sql/updates/world/3.4.x/2023_11_16_01_world.sql b/sql/updates/world/3.4.x/2023_11_16_01_world.sql new file mode 100644 index 00000000000..b48518e8504 --- /dev/null +++ b/sql/updates/world/3.4.x/2023_11_16_01_world.sql @@ -0,0 +1,5 @@ +ALTER TABLE `player_classlevelstats`    +	ADD COLUMN `spi` SMALLINT NOT NULL COMMENT 'spirit' AFTER `inte`; + +ALTER TABLE `player_racestats`    +	ADD COLUMN `spi` SMALLINT NOT NULL COMMENT 'spirit' AFTER `inte`; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index dfcc972ad22..69ccd616544 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7801,10 +7801,10 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply)                  HandleStatFlatModifier(UNIT_MOD_STAT_INTELLECT, BASE_VALUE, float(val), apply);                  UpdateStatBuffMod(STAT_INTELLECT);                  break; -            // case ITEM_MOD_SPIRIT:                           //modify spirit -            //     HandleStatModifier(UNIT_MOD_STAT_SPIRIT, BASE_VALUE, float(val), apply); -            //     ApplyStatBuffMod(STAT_SPIRIT, CalculatePct(val, GetModifierValue(UNIT_MOD_STAT_SPIRIT, BASE_PCT_EXCLUDE_CREATE)), apply); -            //     break; +            case ITEM_MOD_SPIRIT:                           //modify spirit +                HandleStatFlatModifier(UNIT_MOD_STAT_SPIRIT, BASE_VALUE, float(val), apply); +                UpdateStatBuffMod(STAT_SPIRIT); +                break;              case ITEM_MOD_STAMINA:                          //modify stamina              {                  //if (GtStaminaMultByILvl const* staminaMult = sStaminaMultByILvlGameTable.GetRow(itemLevel)) @@ -13083,11 +13083,11 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool                              HandleStatFlatModifier(UNIT_MOD_STAT_INTELLECT, TOTAL_VALUE, float(enchant_amount), apply);                              UpdateStatBuffMod(STAT_INTELLECT);                              break; -                        // case ITEM_MOD_SPIRIT: -                        //     TC_LOG_DEBUG("entities.player.items", "+ {} SPIRIT", enchant_amount); -                        //     HandleStatModifier(UNIT_MOD_STAT_SPIRIT, TOTAL_VALUE, float(enchant_amount), apply); -                        //     ApplyStatBuffMod(STAT_SPIRIT, (float)enchant_amount, apply); -                        //     break; +                        case ITEM_MOD_SPIRIT: +                            TC_LOG_DEBUG("entities.player.items", "+ {} SPIRIT", enchant_amount); +                            HandleStatFlatModifier(UNIT_MOD_STAT_SPIRIT, TOTAL_VALUE, float(enchant_amount), apply); +                            UpdateStatBuffMod(STAT_SPIRIT); +                            break;                          case ITEM_MOD_STAMINA:                              TC_LOG_DEBUG("entities.player.items", "+ {} STAMINA", enchant_amount);                              HandleStatFlatModifier(UNIT_MOD_STAT_STAMINA, TOTAL_VALUE, float(enchant_amount), apply); @@ -20271,7 +20271,7 @@ void Player::outDebugValues() const      sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "HP is: \t\t\t{}\t\tMP is: \t\t\t{}", GetMaxHealth(), GetMaxPower(POWER_MANA));      sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "AGILITY is: \t\t{}\t\tSTRENGTH is: \t\t{}", GetStat(STAT_AGILITY), GetStat(STAT_STRENGTH)); -    sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "INTELLECT is: \t\t{}", GetStat(STAT_INTELLECT)); +    sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "INTELLECT is: \t\t{}\t\SPIRIT is: \t\t{}", GetStat(STAT_INTELLECT), GetStat(STAT_SPIRIT));      sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "STAMINA is: \t\t{}", GetStat(STAT_STAMINA));      sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "Armor is: \t\t{}\t\tBlock is: \t\t{}", GetArmor(), *m_activePlayerData->BlockPercentage);      sLog->OutMessage("entities.unit", LOG_LEVEL_DEBUG, "HolyRes is: \t\t{}\t\tFireRes is: \t\t{}", GetResistance(SPELL_SCHOOL_MASK_HOLY), GetResistance(SPELL_SCHOOL_MASK_FIRE)); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index de951250a3c..653bb91da30 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -129,6 +129,8 @@ bool Player::UpdateStats(Stats stat)          case STAT_INTELLECT:              UpdateSpellCritChance();              break; +        case STAT_SPIRIT: +            break;          default:              break;      } @@ -1084,6 +1086,7 @@ bool Guardian::UpdateStats(Stats stat)          case STAT_AGILITY:          UpdateArmor();                       break;          case STAT_STAMINA:          UpdateMaxHealth();                   break;          case STAT_INTELLECT:        UpdateMaxPower(POWER_MANA);          break; +        case STAT_SPIRIT:          default:              break;      } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 628655ac0b3..9739799a52f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6846,7 +6846,7 @@ float Unit::SpellCritChanceDone(Spell* spell, AuraEffect const* aurEff, SpellSch                  crit_chance = 0.0f;              // For other schools              else if (Player const* thisPlayer = ToPlayer()) -                crit_chance = thisPlayer->m_activePlayerData->SpellCritPercentage[GetFirstSchoolInMask(schoolMask)]; +                crit_chance = thisPlayer->m_activePlayerData->SpellCritPercentage[AsUnderlyingType(GetFirstSchoolInMask(schoolMask))];              else                  crit_chance = (float)m_baseSpellCritChance;              break; @@ -8888,7 +8888,8 @@ void Unit::UpdateUnitMod(UnitMods unitMod)          case UNIT_MOD_STAT_STRENGTH:          case UNIT_MOD_STAT_AGILITY:          case UNIT_MOD_STAT_STAMINA: -        case UNIT_MOD_STAT_INTELLECT:      UpdateStats(GetStatByAuraGroup(unitMod));  break; +        case UNIT_MOD_STAT_INTELLECT: +        case UNIT_MOD_STAT_SPIRIT:         UpdateStats(GetStatByAuraGroup(unitMod));  break;          case UNIT_MOD_ARMOR:               UpdateArmor();           break;          case UNIT_MOD_HEALTH:              UpdateMaxHealth();       break; @@ -9080,6 +9081,7 @@ Stats Unit::GetStatByAuraGroup(UnitMods unitMod) const          case UNIT_MOD_STAT_AGILITY:     stat = STAT_AGILITY;       break;          case UNIT_MOD_STAT_STAMINA:     stat = STAT_STAMINA;       break;          case UNIT_MOD_STAT_INTELLECT:   stat = STAT_INTELLECT;     break; +        case UNIT_MOD_STAT_SPIRIT:      stat = STAT_SPIRIT;        break;          default:              break;      } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 21ba5ebe539..dc2fe68620b 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -171,6 +171,7 @@ enum UnitMods      UNIT_MOD_STAT_AGILITY,      UNIT_MOD_STAT_STAMINA,      UNIT_MOD_STAT_INTELLECT, +    UNIT_MOD_STAT_SPIRIT,      UNIT_MOD_HEALTH,      UNIT_MOD_MANA,                                          // UNIT_MOD_MANA..UNIT_MOD_PAIN must be listed in existing order, it is accessed by index values of Powers enum.      UNIT_MOD_RAGE, diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a84cc92e4aa..6820e1a60f3 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4159,7 +4159,8 @@ void ObjectMgr::LoadPlayerInfo()          uint32 oldMSTime = getMSTime(); -        QueryResult raceStatsResult = WorldDatabase.Query("SELECT race, str, agi, sta, inte FROM player_racestats"); +        //                                                        0     1    2    3    4     5 +        QueryResult raceStatsResult = WorldDatabase.Query("SELECT race, str, agi, sta, inte, spi FROM player_racestats");          if (!raceStatsResult)          { @@ -4183,8 +4184,8 @@ void ObjectMgr::LoadPlayerInfo()          } while (raceStatsResult->NextRow()); -        //                                                  0      1     2    3    4    5 -        QueryResult result  = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte FROM player_classlevelstats"); +        //                                                0      1      2    3    4    5     6 +        QueryResult result  = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte, spi FROM player_classlevelstats");          if (!result)          { diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index ce4f2ef2abe..f48545e910f 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -276,9 +276,10 @@ enum Stats : uint16      STAT_AGILITY                       = 1,      STAT_STAMINA                       = 2,      STAT_INTELLECT                     = 3, +    STAT_SPIRIT                        = 4  }; -#define MAX_STATS                        4 +#define MAX_STATS                        5  // EnumUtils: DESCRIBE THIS  enum Powers : int8 | 
