Core/Garrisons: Implemented a method to delete garrisons
This commit is contained in:
@@ -4575,21 +4575,7 @@ 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_BUILDINGS);
|
||||
stmt->setUInt64(0, guid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_FOLLOWERS);
|
||||
stmt->setUInt64(0, guid);
|
||||
trans->Append(stmt);
|
||||
Garrison::DeleteFromDB(guid, trans);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
@@ -26205,6 +26191,15 @@ void Player::CreateGarrison(uint32 garrSiteId)
|
||||
_garrison = std::move(garrison);
|
||||
}
|
||||
|
||||
void Player::DeleteGarrison()
|
||||
{
|
||||
if (_garrison)
|
||||
{
|
||||
_garrison->Delete();
|
||||
_garrison.reset();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -2629,6 +2629,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
void OnCombatExit();
|
||||
|
||||
void CreateGarrison(uint32 garrSiteId);
|
||||
void DeleteGarrison();
|
||||
Garrison* GetGarrison() { return _garrison.get(); }
|
||||
|
||||
protected:
|
||||
|
||||
@@ -135,23 +135,9 @@ bool Garrison::LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blue
|
||||
|
||||
void Garrison::SaveToDB(SQLTransaction trans)
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON);
|
||||
stmt->setUInt64(0, _owner->GetGUID().GetCounter());
|
||||
trans->Append(stmt);
|
||||
DeleteFromDB(_owner->GetGUID().GetCounter(), trans);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BLUEPRINTS);
|
||||
stmt->setUInt64(0, _owner->GetGUID().GetCounter());
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BUILDINGS);
|
||||
stmt->setUInt64(0, _owner->GetGUID().GetCounter());
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_FOLLOWERS);
|
||||
stmt->setUInt64(0, _owner->GetGUID().GetCounter());
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_GARRISON);
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_GARRISON);
|
||||
stmt->setUInt64(0, _owner->GetGUID().GetCounter());
|
||||
stmt->setUInt32(1, _siteLevel->ID);
|
||||
stmt->setUInt32(2, _followerActivationsRemainingToday);
|
||||
@@ -210,6 +196,25 @@ void Garrison::SaveToDB(SQLTransaction trans)
|
||||
}
|
||||
}
|
||||
|
||||
void Garrison::DeleteFromDB(ObjectGuid::LowType ownerGuid, SQLTransaction trans)
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON);
|
||||
stmt->setUInt64(0, ownerGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BLUEPRINTS);
|
||||
stmt->setUInt64(0, ownerGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_BUILDINGS);
|
||||
stmt->setUInt64(0, ownerGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_GARRISON_FOLLOWERS);
|
||||
stmt->setUInt64(0, ownerGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
bool Garrison::Create(uint32 garrSiteId)
|
||||
{
|
||||
_siteLevel = sGarrisonMgr.GetGarrSiteLevelEntry(garrSiteId, 1);
|
||||
@@ -226,6 +231,18 @@ bool Garrison::Create(uint32 garrSiteId)
|
||||
return true;
|
||||
}
|
||||
|
||||
void Garrison::Delete()
|
||||
{
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
DeleteFromDB(_owner->GetGUID().GetCounter(), trans);
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
WorldPackets::Garrison::GarrisonDeleteResult garrisonDelete;
|
||||
garrisonDelete.Result = GARRISON_SUCCESS;
|
||||
garrisonDelete.GarrSiteID = _siteLevel->SiteID;
|
||||
_owner->SendDirectMessage(garrisonDelete.Write());
|
||||
}
|
||||
|
||||
void Garrison::InitializePlots()
|
||||
{
|
||||
if (std::vector<GarrSiteLevelPlotInstEntry const*> const* plots = sGarrisonMgr.GetGarrPlotInstForSiteLevel(_siteLevel->ID))
|
||||
|
||||
@@ -110,8 +110,10 @@ public:
|
||||
bool LoadFromDB(PreparedQueryResult garrison, PreparedQueryResult blueprints, PreparedQueryResult buildings,
|
||||
PreparedQueryResult followers, PreparedQueryResult abilities);
|
||||
void SaveToDB(SQLTransaction trans);
|
||||
static void DeleteFromDB(ObjectGuid::LowType ownerGuid, SQLTransaction trans);
|
||||
|
||||
bool Create(uint32 garrSiteId);
|
||||
void Delete();
|
||||
void Upgrade();
|
||||
|
||||
void Enter() const;
|
||||
|
||||
@@ -25,6 +25,14 @@ WorldPacket const* WorldPackets::Garrison::GarrisonCreateResult::Write()
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Garrison::GarrisonDeleteResult::Write()
|
||||
{
|
||||
_worldPacket << uint32(Result);
|
||||
_worldPacket << uint32(GarrSiteID);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonPlotInfo& plotInfo)
|
||||
{
|
||||
data << uint32(plotInfo.GarrPlotInstanceID);
|
||||
|
||||
@@ -39,6 +39,17 @@ namespace WorldPackets
|
||||
uint32 Result = 0;
|
||||
};
|
||||
|
||||
class GarrisonDeleteResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GarrisonDeleteResult() : ServerPacket(SMSG_GARRISON_DELETE_RESULT, 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 Result = 0;
|
||||
uint32 GarrSiteID = 0;
|
||||
};
|
||||
|
||||
class GetGarrisonInfo final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -1120,7 +1120,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CLEAR_ALL_FOLLOWERS_EXHAUSTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CREATE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_DELETE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_DELETE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ABILITIES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
Reference in New Issue
Block a user