aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-05-08 00:03:15 +0200
committerShauren <shauren.trinity@gmail.com>2015-05-08 00:03:15 +0200
commit5b725db033c656bda5e718ea05a79005946e089e (patch)
treec15ad544c542cdd7dd7cb395c8ec6d3d35e4d2e9 /src/server/game/Entities/Player
parent0972552e84068cf453231b372bcb232cf2d2f42b (diff)
Core/Garrisons: Basics for garrisons
Diffstat (limited to 'src/server/game/Entities/Player')
-rw-r--r--src/server/game/Entities/Player/Player.cpp36
-rw-r--r--src/server/game/Entities/Player/Player.h11
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);