26#include <unordered_map>
30 std::unordered_map<ObjectGuid, Petition> _petitionStore;
42 _petitionStore.clear();
47 TC_LOG_INFO(
"server.loading",
">> Loaded 0 petitions.");
54 Field* fields = result->Fetch();
55 AddPetition(ObjectGuid::Create<HighGuid::Item>(fields[0].GetUInt32()), ObjectGuid::Create<HighGuid::Player>(fields[1].GetUInt32()), fields[2].GetString(),
static_cast<CharterTypes>(fields[3].GetUInt8()),
true);
57 }
while (result->NextRow());
69 TC_LOG_INFO(
"server.loading",
">> Loaded 0 Petition signs!");
76 Field* fields = result->Fetch();
78 Petition* petition =
GetPetition(ObjectGuid::Create<HighGuid::Item>(fields[0].GetUInt32()));
82 petition->
AddSignature(fields[1].GetUInt32(), ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt32()),
true);
84 }
while (result->NextRow());
91 Petition& p = _petitionStore[petitionGuid];
111 _petitionStore.erase(petitionGuid);
129 auto itr = _petitionStore.find(petitionGuid);
130 if (itr != _petitionStore.end())
138 for (
auto& petitionPair : _petitionStore)
139 if (petitionPair.second.OwnerGuid == ownerGuid && petitionPair.second.PetitionType == type)
140 return &petitionPair.second;
147 for (
auto itr = _petitionStore.begin(); itr != _petitionStore.end();)
149 if (itr->second.OwnerGuid == ownerGuid)
152 itr = _petitionStore.erase(itr);
153 else if (type == itr->second.PetitionType)
155 itr = _petitionStore.erase(itr);
194 for (
auto& petitionPair : _petitionStore)
196 if (petitionPair.second.PetitionType ==
CHARTER_TYPE_ANY || petitionPair.second.PetitionType == type)
197 petitionPair.second.RemoveSignatureBySigner(signerGuid);
218 if (signature.first == accountId)
226 Signatures.emplace_back(accountId, playerGuid);
255 if (itr->second == playerGuid)
261 owner->GetSession()->SendPetitionQueryOpcode(
PetitionGuid);
@ CHAR_INS_PETITION_SIGNATURE
@ CHAR_DEL_PETITION_BY_GUID
@ CHAR_DEL_PETITION_SIGNATURE
@ CHAR_DEL_PETITION_SIGNATURE_BY_OWNER
@ CHAR_DEL_ALL_PETITION_SIGNATURES
@ CHAR_DEL_PETITION_SIGNATURE_BY_OWNER_AND_TYPE
@ CHAR_DEL_PETITION_SIGNATURE_BY_GUID
@ CHAR_DEL_PETITION_BY_OWNER
@ CHAR_DEL_PETITION_BY_OWNER_AND_TYPE
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define TC_LOG_INFO(filterType__,...)
std::pair< uint32, ObjectGuid > Signature
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Class used to access individual fields of database query result.
LowType GetCounter() const
void AddPetition(ObjectGuid petitionGuid, ObjectGuid ownerGuid, std::string const &name, CharterTypes type, bool isLoading)
Petition * GetPetition(ObjectGuid petitionGuid)
static PetitionMgr * instance()
void RemoveSignaturesBySignerAndType(ObjectGuid signerGuid, CharterTypes type)
Petition * GetPetitionByOwnerWithType(ObjectGuid ownerGuid, CharterTypes type)
void RemovePetition(ObjectGuid petitionGuid)
void RemovePetitionsByOwnerAndType(ObjectGuid ownerGuid, CharterTypes type)
void setUInt32(uint8 index, uint32 value)
void setUInt8(uint8 index, uint8 value)
void setString(uint8 index, std::string const &value)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
void UpdateName(std::string const &newName)
void RemoveSignatureBySigner(ObjectGuid playerGuid)
SignaturesVector Signatures
CharterTypes PetitionType
bool IsPetitionSignedByAccount(uint32 accountId) const
void AddSignature(uint32 accountId, ObjectGuid playerGuid, bool isLoading)