aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-05-20 23:39:11 +0200
committerShauren <shauren.trinity@gmail.com>2016-05-21 00:32:38 +0200
commit31009887e35cf8db6e94bf5b6870b62538364bc4 (patch)
tree05b7aadeacc242174075ae8c8c11e6befdc53476 /src
parentdf6d557a4d778093ec522d2c39c6c01acc41d978 (diff)
6.x rebase
Diffstat (limited to 'src')
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp2
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp11
-rw-r--r--src/server/game/Achievements/AchievementMgr.h2
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp12
-rw-r--r--src/server/game/Achievements/CriteriaHandler.h1
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp10
-rw-r--r--src/server/game/DataStores/DB2Stores.h2
-rw-r--r--src/server/game/DataStores/DB2Structure.h8
-rw-r--r--src/server/game/DataStores/DB2fmt.h2
-rw-r--r--src/server/game/DataStores/GameTables.cpp2
-rw-r--r--src/server/game/DataStores/GameTables.h6
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp2
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h1
-rw-r--r--src/server/game/Spells/Spell.cpp2
-rw-r--r--src/server/game/Spells/SpellInfo.cpp1
16 files changed, 50 insertions, 22 deletions
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index e40be4e167a..31db228b20a 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -753,7 +753,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute ORDER BY ID DESC", CONNECTION_SYNCH);
// SpellProcsPerMinuteMod.db2
- PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Type, Param, Coeff, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod"
+ PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Coeff, Param, Type, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod"
" ORDER BY ID DESC", CONNECTION_SYNCH);
// SpellRadius.db2
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index f4b51eba6f4..9c95eca9db1 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -522,6 +522,11 @@ void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievem
}
}
+bool PlayerAchievementMgr::ModifierTreeSatisfied(uint32 modifierTreeId) const
+{
+ return AdditionalRequirementsSatisfied(sCriteriaMgr->GetModifierTree(modifierTreeId), 0, 0, nullptr, _owner);
+}
+
void PlayerAchievementMgr::SendCriteriaUpdate(Criteria const* criteria, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const
{
WorldPackets::Achievement::CriteriaUpdate criteriaUpdate;
@@ -924,12 +929,6 @@ CriteriaList const& GuildAchievementMgr::GetCriteriaByType(CriteriaTypes type) c
return sCriteriaMgr->GetGuildCriteriaByType(type);
}
-bool PlayerAchievementMgr::ModifierTreeSatisfied(uint32 modifierTreeId) const
-{
- return AdditionalRequirementsSatisfied(sAchievementMgr->GetModifierTree(modifierTreeId), 0, 0, nullptr, _owner);
-}
-
-
std::string PlayerAchievementMgr::GetOwnerInfo() const
{
return Trinity::StringFormat("%s %s", _owner->GetGUID().ToString().c_str(), _owner->GetName().c_str());
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index 33ba9021b5f..ef0ee5e87e6 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -91,6 +91,8 @@ public:
void CompletedAchievement(AchievementEntry const* entry, Player* referencePlayer) override;
+ bool ModifierTreeSatisfied(uint32 modifierTreeId) const;
+
protected:
void SendCriteriaUpdate(Criteria const* entry, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const override;
void SendCriteriaProgressRemoved(uint32 criteriaId) override;
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index e8e418001ad..e9ec1299f96 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -18,7 +18,6 @@
#include "CriteriaHandler.h"
#include "ArenaTeamMgr.h"
#include "Battleground.h"
-#include "DBCStores.h"
#include "DB2Stores.h"
#include "DisableMgr.h"
#include "GameEventMgr.h"
@@ -780,7 +779,7 @@ void CriteriaHandler::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry,
if (_timeCriteriaTrees.find(tree->ID) == _timeCriteriaTrees.end() && !IsCompletedCriteriaTree(tree))
{
// Start the timer
- if (criteria->Entry->StartTimer * IN_MILLISECONDS > timeLost)
+ if (criteria->Entry->StartTimer * uint32(IN_MILLISECONDS) > timeLost)
{
_timeCriteriaTrees[tree->ID] = criteria->Entry->StartTimer * IN_MILLISECONDS - timeLost;
canStart = true;
@@ -2216,3 +2215,12 @@ Criteria const* CriteriaMgr::GetCriteria(uint32 criteriaId) const
return itr->second;
}
+
+ModifierTreeNode const* CriteriaMgr::GetModifierTree(uint32 modifierTreeId) const
+{
+ auto itr = _criteriaModifiers.find(modifierTreeId);
+ if (itr != _criteriaModifiers.end())
+ return itr->second;
+
+ return nullptr;
+}
diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h
index 03a4f30136e..4d269a894bd 100644
--- a/src/server/game/Achievements/CriteriaHandler.h
+++ b/src/server/game/Achievements/CriteriaHandler.h
@@ -370,6 +370,7 @@ public:
void LoadCriteriaData();
CriteriaTree const* GetCriteriaTree(uint32 criteriaTreeId) const;
Criteria const* GetCriteria(uint32 criteriaId) const;
+ ModifierTreeNode const* GetModifierTree(uint32 modifierTreeId) const;
private:
CriteriaDataMap _criteriaDataMap;
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 7899b4ada83..0c2c02f2ca8 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -515,7 +515,15 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
{
ASSERT(chrSpec->ClassID < MAX_CLASSES);
ASSERT(chrSpec->OrderIndex < MAX_SPECIALIZATIONS);
- _chrSpecializationsByIndex[chrSpec->ClassID][chrSpec->OrderIndex] = chrSpec;
+
+ uint32 storageIndex = chrSpec->ClassID;
+ if (chrSpec->Flags & CHR_SPECIALIZATION_FLAG_PET_OVERRIDE_SPEC)
+ {
+ ASSERT(!chrSpec->ClassID);
+ storageIndex = PET_SPEC_OVERRIDE_CLASS_INDEX;
+ }
+
+ _chrSpecializationsByIndex[storageIndex][chrSpec->OrderIndex] = chrSpec;
}
ASSERT(MAX_DIFFICULTY >= sDifficultyStore.GetNumRows(),
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index 59bb91b4a30..6a325579aa2 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -226,7 +226,7 @@ public:
typedef std::unordered_map<uint32 /*areaGroupId*/, std::vector<uint32/*areaId*/>> AreaGroupMemberContainer;
typedef std::unordered_multimap<uint32, CharSectionsEntry const*> CharSectionsContainer;
typedef std::unordered_map<uint32, CharStartOutfitEntry const*> CharStartOutfitContainer;
- typedef ChrSpecializationEntry const* ChrSpecializationByIndexContainer[MAX_CLASSES][MAX_SPECIALIZATIONS];
+ typedef ChrSpecializationEntry const* ChrSpecializationByIndexContainer[MAX_CLASSES + 1][MAX_SPECIALIZATIONS];
typedef std::map<std::tuple<uint32, uint8, uint8, uint8>, EmotesTextSoundEntry const*> EmotesTextSoundContainer;
typedef std::unordered_map<uint32, std::vector<uint32>> FactionTeamContainer;
typedef std::set<GlyphSlotEntry const*, GlyphSlotEntryComparator> GlyphSlotContainer;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index ab29ec77c11..568729ec4cb 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -2246,16 +2246,16 @@ struct SpellProcsPerMinuteEntry
{
uint32 ID;
float BaseProcRate;
- uint32 Flags;
+ uint8 Flags;
};
struct SpellProcsPerMinuteModEntry
{
uint32 ID;
- uint32 Type;
- uint32 Param;
float Coeff;
- uint32 SpellProcsPerMinuteID;
+ uint16 Param;
+ uint8 Type;
+ uint8 SpellProcsPerMinuteID;
};
struct SpellRadiusEntry
diff --git a/src/server/game/DataStores/DB2fmt.h b/src/server/game/DataStores/DB2fmt.h
index 5e2bf12a12a..57963f3aec6 100644
--- a/src/server/game/DataStores/DB2fmt.h
+++ b/src/server/game/DataStores/DB2fmt.h
@@ -175,6 +175,8 @@ char const SpellLevelsFormat[] = "dihhhbb";
char const SpellMiscFormat[] = "diiiiiiiiiiiiiiffhhhhhb";
char const SpellPowerFormat[] = "niiffifhhhhbbb";
char const SpellPowerDifficultyFormat[] = "nbb";
+char const SpellProcsPerMinuteFormat[] = "dfb";
+char const SpellProcsPerMinuteModFormat[] = "dfhbb";
char const SpellRadiusFormat[] = "dffff";
char const SpellRangeFormat[] = "dffffssb";
char const SpellReagentsFormat[] = "diiiiiiiiihhhhhhhh";
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp
index 23319e27734..4cde4bb7b2e 100644
--- a/src/server/game/DataStores/GameTables.cpp
+++ b/src/server/game/DataStores/GameTables.cpp
@@ -22,6 +22,7 @@
#include <boost/filesystem/path.hpp>
#include <fstream>
+GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
GameTable<GtBaseMPEntry> sBaseMPGameTable;
GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;
@@ -94,6 +95,7 @@ void LoadGameTables(std::string const& dataPath)
#define LOAD_GT(store, file) gameTableCount += LoadGameTable(bad_gt_files, store, gtPath / file)
+ LOAD_GT(sArmorMitigationByLvlGameTable, "ArmorMitigationByLvl.txt");
LOAD_GT(sBarberShopCostBaseGameTable, "BarberShopCostBase.txt");
LOAD_GT(sBaseMPGameTable, "BaseMp.txt");
LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt");
diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h
index ad79a7e699a..1d4e9126955 100644
--- a/src/server/game/DataStores/GameTables.h
+++ b/src/server/game/DataStores/GameTables.h
@@ -21,6 +21,11 @@
#include "SharedDefines.h"
#include "Common.h"
+struct GtArmorMitigationByLvlEntry
+{
+ float Mitigation = 0.0f;
+};
+
struct GtBarberShopCostBaseEntry
{
float Cost = 0.0f;
@@ -176,6 +181,7 @@ private:
std::vector<T> _data;
};
+TC_GAME_API extern GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
TC_GAME_API extern GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
TC_GAME_API extern GameTable<GtBaseMPEntry> sBaseMPGameTable;
TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 47b65b6a425..f42be192a3f 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1503,14 +1503,14 @@ uint32 Unit::CalcArmorReducedDamage(Unit* attacker, Unit* victim, const uint32 d
return damage;
uint8 attackerLevel = attacker->getLevel();
- if (attackerLevel > sGtArmorMitigationByLvlStore.GetTableRowCount())
- attackerLevel = sGtArmorMitigationByLvlStore.GetTableRowCount();
+ if (attackerLevel > sArmorMitigationByLvlGameTable.GetTableRowCount())
+ attackerLevel = sArmorMitigationByLvlGameTable.GetTableRowCount();
- GtArmorMitigationByLvlEntry const* ambl = sGtArmorMitigationByLvlStore.EvaluateTable(attackerLevel - 1, 0);
+ GtArmorMitigationByLvlEntry const* ambl = sArmorMitigationByLvlGameTable.GetRow(attackerLevel);
if (!ambl)
return damage;
- float mitigation = std::min(armor / (armor + ambl->KFactor), 0.85f);
+ float mitigation = std::min(armor / (armor + ambl->Mitigation), 0.85f);
return std::max<uint32>(damage * (1.0f - mitigation), 1);
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 54bbfddb5fa..b5c8e6bdc67 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -1287,7 +1287,7 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
if (entry->SummonSpellID == spellToLearn)
{
GetBattlePetMgr()->AddPet(entry->ID, entry->CreatureID, BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID));
- _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_OWN_BATTLE_PET_COUNT);
+ _player->UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET_COUNT);
break;
}
}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index ed516b9faa9..d796b789f8d 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -858,6 +858,7 @@ enum SpellAttr13
#define MAX_GLYPH_SLOT_INDEX 6
#define MIN_SPECIALIZATION_LEVEL 10
#define MAX_SPECIALIZATIONS 4
+#define PET_SPEC_OVERRIDE_CLASS_INDEX MAX_CLASSES
// Custom values
enum SpellClickUserTypes
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index a6734f6c205..4a166351fe5 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4585,8 +4585,6 @@ void Spell::TakeRunePower(bool didHit)
{
player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown() : uint32(RUNE_MISS_COOLDOWN), true);
--runeCost;
- if (convertUsedRunes)
- player->ConvertRune(i, RUNE_DEATH);
}
}
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index ec1c63076aa..448d4eaa2f7 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1028,6 +1028,7 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const&
// SpellScalingEntry
SpellScalingEntry const* _scaling = data.Scaling;
Scaling.Class = _scaling ? _scaling->ScalingClass : 0;
+ Scaling.MinScalingLevel = _scaling ? _scaling->MinScalingLevel : 0;
Scaling.MaxScalingLevel = _scaling ? _scaling->MaxScalingLevel : 0;
Scaling.ScalesFromItemLevel = _scaling ? _scaling->ScalesFromItemLevel : 0;