diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-05-08 00:03:15 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-05-08 00:03:15 +0200 |
| commit | 5b725db033c656bda5e718ea05a79005946e089e (patch) | |
| tree | c15ad544c542cdd7dd7cb395c8ec6d3d35e4d2e9 /src/server/game/Entities/Player | |
| parent | 0972552e84068cf453231b372bcb232cf2d2f42b (diff) | |
Core/Garrisons: Basics for garrisons
Diffstat (limited to 'src/server/game/Entities/Player')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 36 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 11 |
2 files changed, 45 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3be32baa7c5..09e30b1b51b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -46,6 +46,7 @@ #include "Formulas.h" #include "GameEventMgr.h" #include "GameObjectAI.h" +#include "Garrison.h" #include "GossipDef.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" @@ -4582,6 +4583,18 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt64(0, guid); trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON); + stmt->setUInt64(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BLUEPRINTS); + stmt->setUInt64(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BLUEPRINTS); + stmt->setUInt64(0, guid); + trans->Append(stmt); + CharacterDatabase.CommitTransaction(trans); sWorld->DeleteCharacterInfo(playerguid); @@ -17322,6 +17335,12 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) _LoadCUFProfiles(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES)); + std::unique_ptr<Garrison> garrison(new Garrison(this)); + if (garrison->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON), + holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_BLUEPRINTS), + holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_BUILDINGS))) + _garrison = std::move(garrison); + return true; } @@ -19079,6 +19098,8 @@ void Player::SaveToDB(bool create /*=false*/) _SaveInstanceTimeRestrictions(trans); _SaveCurrency(trans); _SaveCUFProfiles(trans); + if (_garrison) + _garrison->SaveToDB(trans); // check if stats should only be saved on logout // save stats can be out of transaction @@ -22587,6 +22608,9 @@ void Player::SendInitialPacketsAfterAddToMap() } else if (GetMap()->IsNonRaidDungeon()) SendDungeonDifficulty(); + + if (_garrison) + _garrison->SendRemoteInfo(); } void Player::SendUpdateToOutOfRangeGroupMembers() @@ -23029,7 +23053,7 @@ void Player::SetMonthlyQuestStatus(uint32 quest_id) m_MonthlyQuestChanged = true; } -void Player::ResetDailyQuestStatus() +void Player::DailyReset() { for (uint32 questId : GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS)) if (uint32 questBit = GetQuestUniqueBitFlag(questId)) @@ -23042,6 +23066,9 @@ void Player::ResetDailyQuestStatus() // DB data deleted in caller m_DailyQuestChanged = false; m_lastDailyQuestTime = 0; + + if (_garrison) + _garrison->ResetFollowerActivationLimit(); } void Player::ResetWeeklyQuestStatus() @@ -26123,6 +26150,13 @@ void Player::OnCombatExit() m_holyPowerRegenTimerCount = 20000; // first charge of holy power decays 20 seconds after leaving combat } +void Player::CreateGarrison(uint32 garrSiteId) +{ + std::unique_ptr<Garrison> garrison(new Garrison(this)); + if (garrison->Create(garrSiteId)) + _garrison = std::move(garrison); +} + void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply) { WorldPackets::Movement::MoveSetFlag packet(apply ? SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY : SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a17b828f0d5..7de2b09a5cb 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -47,6 +47,7 @@ class ReputationMgr; class Channel; class Creature; class DynamicObject; +class Garrison; class Group; class Guild; class OutdoorPvP; @@ -984,6 +985,9 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE, PLAYER_LOGIN_QUERY_LOAD_CURRENCY, PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES, + PLAYER_LOGIN_QUERY_LOAD_GARRISON, + PLAYER_LOGIN_QUERY_LOAD_GARRISON_BLUEPRINTS, + PLAYER_LOGIN_QUERY_LOAD_GARRISON_BUILDINGS, MAX_PLAYER_LOGIN_QUERY }; @@ -1677,7 +1681,7 @@ class Player : public Unit, public GridObject<Player> void SetWeeklyQuestStatus(uint32 quest_id); void SetMonthlyQuestStatus(uint32 quest_id); void SetSeasonalQuestStatus(uint32 quest_id); - void ResetDailyQuestStatus(); + void DailyReset(); void ResetWeeklyQuestStatus(); void ResetMonthlyQuestStatus(); void ResetSeasonalQuestStatus(uint16 event_id); @@ -2625,6 +2629,9 @@ class Player : public Unit, public GridObject<Player> void OnCombatExit(); + void CreateGarrison(uint32 garrSiteId); + Garrison* GetGarrison() { return _garrison.get(); } + protected: // Gamemaster whisper whitelist GuidList WhisperList; @@ -2974,6 +2981,8 @@ class Player : public Unit, public GridObject<Player> uint32 _activeCheats; uint32 _maxPersonalArenaRate; + + std::unique_ptr<Garrison> _garrison; }; void AddItemsSetItem(Player* player, Item* item); |
