diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-05-20 23:39:11 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-05-21 00:32:38 +0200 |
commit | 31009887e35cf8db6e94bf5b6870b62538364bc4 (patch) | |
tree | 05b7aadeacc242174075ae8c8c11e6befdc53476 | |
parent | df6d557a4d778093ec522d2c39c6c01acc41d978 (diff) |
6.x rebase
-rw-r--r-- | sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_01.sql | 39 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Achievements/AchievementMgr.h | 2 | ||||
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.h | 1 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 10 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 8 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2fmt.h | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 1 |
17 files changed, 69 insertions, 42 deletions
diff --git a/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_01.sql b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_01.sql index 5011a0bd29d..21c547943c7 100644 --- a/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_01.sql +++ b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_01.sql @@ -110,13 +110,6 @@ ALTER TABLE `battle_pet_species` MODIFY `Source` tinyint(4) NOT NULL DEFAULT '0' AFTER `PetType`; -- --- Table structure for table `battle_pet_species_locale` --- -ALTER TABLE `battle_pet_species_locale` - CHANGE `SourceText` `SourceText_lang` text AFTER `locale`, - CHANGE `Description` `Description_lang` text AFTER `SourceText_lang`; - --- -- Table structure for table `battle_pet_species_state` -- ALTER TABLE `battle_pet_species_state` @@ -485,14 +478,14 @@ ALTER TABLE `gameobjects` MODIFY `RotationZ` float NOT NULL DEFAULT '0' AFTER `RotationY`, MODIFY `RotationW` float NOT NULL DEFAULT '0' AFTER `RotationZ`, MODIFY `Size` float NOT NULL DEFAULT '0' AFTER `RotationW`, - MODIFY `Data0` int(10) NOT NULL DEFAULT '0' AFTER `Size`, - MODIFY `Data1` int(10) NOT NULL DEFAULT '0' AFTER `Data0`, + MODIFY `Data1` int(10) NOT NULL DEFAULT '0' AFTER `Size`, MODIFY `Data2` int(10) NOT NULL DEFAULT '0' AFTER `Data1`, MODIFY `Data3` int(10) NOT NULL DEFAULT '0' AFTER `Data2`, MODIFY `Data4` int(10) NOT NULL DEFAULT '0' AFTER `Data3`, MODIFY `Data5` int(10) NOT NULL DEFAULT '0' AFTER `Data4`, MODIFY `Data6` int(10) NOT NULL DEFAULT '0' AFTER `Data5`, MODIFY `Data7` int(10) NOT NULL DEFAULT '0' AFTER `Data6`, + MODIFY `Data8` int(10) NOT NULL DEFAULT '0' AFTER `Data7`, MODIFY `Name` text AFTER `Data7`, MODIFY `MapID` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `Name`, MODIFY `DisplayID` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `MapID`, @@ -502,15 +495,6 @@ ALTER TABLE `gameobjects` MODIFY `Type` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `PhaseUseFlags`, MODIFY `VerifiedBuild` smallint(6) NOT NULL DEFAULT '0' AFTER `Type`; -ALTER TABLE `gameobjects` CHANGE `Data7` `Data8` int(10) NOT NULL DEFAULT '0' AFTER `Data6`; -ALTER TABLE `gameobjects` CHANGE `Data6` `Data7` int(10) NOT NULL DEFAULT '0' AFTER `Data5`; -ALTER TABLE `gameobjects` CHANGE `Data5` `Data6` int(10) NOT NULL DEFAULT '0' AFTER `Data4`; -ALTER TABLE `gameobjects` CHANGE `Data4` `Data5` int(10) NOT NULL DEFAULT '0' AFTER `Data3`; -ALTER TABLE `gameobjects` CHANGE `Data3` `Data4` int(10) NOT NULL DEFAULT '0' AFTER `Data2`; -ALTER TABLE `gameobjects` CHANGE `Data2` `Data3` int(10) NOT NULL DEFAULT '0' AFTER `Data1`; -ALTER TABLE `gameobjects` CHANGE `Data1` `Data2` int(10) NOT NULL DEFAULT '0' AFTER `Data0`; -ALTER TABLE `gameobjects` CHANGE `Data0` `Data1` int(10) NOT NULL DEFAULT '0' AFTER `Size`; - -- -- Table structure for table `gameobject_display_info` -- @@ -1401,8 +1385,7 @@ ALTER TABLE `override_spell_data` -- -- Table structure for table `phase_x_phase_group` -- -ALTER TABLE `phase_group` - RENAME `phase_x_phase_group`, +ALTER TABLE `phase_x_phase_group` MODIFY `PhaseID` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `ID`, MODIFY `PhaseGroupID` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `PhaseID`, MODIFY `VerifiedBuild` smallint(6) NOT NULL DEFAULT '0' AFTER `PhaseGroupID`; @@ -2137,6 +2120,22 @@ ALTER TABLE `spell_power_difficulty` MODIFY `PowerIndex` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `DifficultyID`; ALTER TABLE `spell_power_difficulty` ADD PRIMARY KEY (`ID`); +-- +-- Table structure for table `spell_procs_per_minute` +-- +ALTER TABLE `spell_procs_per_minute` MODIFY `Flags` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `BaseProcRate`; + +-- +-- Table structure for table `spell_procs_per_minute_mod` +-- +ALTER TABLE `spell_procs_per_minute_mod` + MODIFY `Param` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `Coeff`, + MODIFY `Type` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `Param`, + MODIFY `SpellProcsPerMinuteID` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `Type`; + +-- +-- Table structure for table `spell_range` +-- ALTER TABLE `spell_range` MODIFY `DisplayName` text AFTER `MaxRangeFriend`, MODIFY `DisplayNameShort` text AFTER `DisplayName`, 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; |