diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/DataStores/DBCStores.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStores.h | 1 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStructure.h | 7 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCfmt.h | 1 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 16 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 2 |
6 files changed, 21 insertions, 8 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index f4056dd0a37..3fd61553811 100755 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -99,6 +99,7 @@ DBCStorage <GtChanceToMeleeCritBaseEntry> sGtChanceToMeleeCritBaseStore(GtChance DBCStorage <GtChanceToMeleeCritEntry> sGtChanceToMeleeCritStore(GtChanceToMeleeCritfmt); DBCStorage <GtChanceToSpellCritBaseEntry> sGtChanceToSpellCritBaseStore(GtChanceToSpellCritBasefmt); DBCStorage <GtChanceToSpellCritEntry> sGtChanceToSpellCritStore(GtChanceToSpellCritfmt); +DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingScalarStore(GtOCTClassCombatRatingScalarfmt); DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore(GtOCTRegenHPfmt); //DBCStorage <GtOCTRegenMPEntry> sGtOCTRegenMPStore(GtOCTRegenMPfmt); -- not used currently DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore(GtRegenHPPerSptfmt); @@ -331,6 +332,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToMeleeCritStore, dbcPath, "gtChanceToMeleeCrit.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToSpellCritBaseStore, dbcPath, "gtChanceToSpellCritBase.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sGtChanceToSpellCritStore, dbcPath, "gtChanceToSpellCrit.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTClassCombatRatingScalarStore, dbcPath, "gtOCTClassCombatRatingScalar.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sGtOCTRegenHPStore, dbcPath, "gtOCTRegenHP.dbc"); //LoadDBC(dbcCount, availableDbcLocales, bad_dbc_files, sGtOCTRegenMPStore, dbcPath, "gtOCTRegenMP.dbc"); -- not used currently LoadDBC(availableDbcLocales, bad_dbc_files, sGtRegenHPPerSptStore, dbcPath, "gtRegenHPPerSpt.dbc"); diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 97598e87f8e..396bd8ca98c 100755 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -103,6 +103,7 @@ extern DBCStorage <GtChanceToMeleeCritBaseEntry> sGtChanceToMeleeCritBaseStore; extern DBCStorage <GtChanceToMeleeCritEntry> sGtChanceToMeleeCritStore; extern DBCStorage <GtChanceToSpellCritBaseEntry> sGtChanceToSpellCritBaseStore; extern DBCStorage <GtChanceToSpellCritEntry> sGtChanceToSpellCritStore; +extern DBCStorage <GtOCTClassCombatRatingScalarEntry> sGtOCTClassCombatRatingScalarStore; extern DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore; //extern DBCStorage <GtOCTRegenMPEntry> sGtOCTRegenMPStore; -- not used currently extern DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 114e14ab6c0..b5c22a11b24 100755 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -961,6 +961,8 @@ struct GlyphSlotEntry // All Gt* DBC store data for 100 levels, some by 100 per class/race #define GT_MAX_LEVEL 100 +// gtOCTClassCombatRatingScalar.dbc stores data for 32 ratings, look at MAX_COMBAT_RATING for real used amount +#define GT_MAX_RATING 32 struct GtBarberShopCostBaseEntry { @@ -992,6 +994,11 @@ struct GtChanceToSpellCritEntry float ratio; }; +struct GtOCTClassCombatRatingScalarEntry +{ + float ratio; +}; + struct GtOCTRegenHPEntry { float ratio; diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index caceb389d6c..8f7ce9d8df3 100755 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -61,6 +61,7 @@ const char GtChanceToMeleeCritBasefmt[]="f"; const char GtChanceToMeleeCritfmt[]="f"; const char GtChanceToSpellCritBasefmt[]="f"; const char GtChanceToSpellCritfmt[]="f"; +const char GtOCTClassCombatRatingScalarfmt[]="df"; const char GtOCTRegenHPfmt[]="f"; //const char GtOCTRegenMPfmt[]="f"; const char GtRegenHPPerSptfmt[]="f"; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5d431fdb480..e6d38dee3ec 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5783,7 +5783,7 @@ float Player::GetSpellCritFromIntellect() return crit*100.0f; } -float Player::GetRatingCoefficient(CombatRating cr) const +float Player::GetRatingMultiplier(CombatRating cr) const { uint8 level = getLevel(); @@ -5791,15 +5791,17 @@ float Player::GetRatingCoefficient(CombatRating cr) const level = GT_MAX_LEVEL; GtCombatRatingsEntry const *Rating = sGtCombatRatingsStore.LookupEntry(cr*GT_MAX_LEVEL+level-1); - if (Rating == NULL) + // gtOCTClassCombatRatingScalarStore.dbc starts with 1, CombatRating with zero, so cr+1 + GtOCTClassCombatRatingScalarEntry const *classRating = sGtOCTClassCombatRatingScalarStore.LookupEntry((getClass()-1)*GT_MAX_RATING+cr+1); + if (!Rating || !classRating) return 1.0f; // By default use minimum coefficient (not must be called) - return Rating->ratio; + return classRating->ratio / Rating->ratio; } float Player::GetRatingBonusValue(CombatRating cr) const { - return float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) / GetRatingCoefficient(cr); + return float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) * GetRatingMultiplier(cr); } float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const @@ -5867,20 +5869,20 @@ void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply) { case CR_HASTE_MELEE: { - float RatingChange = value / GetRatingCoefficient(cr); + float RatingChange = value * GetRatingMultiplier(cr); ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply); ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply); break; } case CR_HASTE_RANGED: { - float RatingChange = value / GetRatingCoefficient(cr); + float RatingChange = value * GetRatingMultiplier(cr); ApplyAttackTimePercentMod(RANGED_ATTACK, RatingChange, apply); break; } case CR_HASTE_SPELL: { - float RatingChange = value / GetRatingCoefficient(cr); + float RatingChange = value * GetRatingMultiplier(cr); ApplyCastTimePercentMod(RatingChange, apply); break; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 13e6b195142..4c0c6401049 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1844,7 +1844,7 @@ class Player : public Unit, public GridObject<Player> float GetSpellCritFromIntellect(); float OCTRegenHPPerSpirit(); float OCTRegenMPPerSpirit(); - float GetRatingCoefficient(CombatRating cr) const; + float GetRatingMultiplier(CombatRating cr) const; float GetRatingBonusValue(CombatRating cr) const; uint32 GetBaseSpellPowerBonus() { return m_baseSpellPower; } int32 GetSpellPenetrationItemMod() const { return m_spellPenetrationItemMod; } |