diff options
| author | xinef1 <w.szyszko2@gmail.com> | 2017-04-27 07:02:33 +0200 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-04-27 02:02:33 -0300 |
| commit | a4aa95a5a39d75b9e38fe03aac57ceb7d9bba90f (patch) | |
| tree | 47d9b2edab714e4403f5880ca364b2ddcbba24af /src/server/game/Handlers/PetitionsHandler.cpp | |
| parent | a82a12b5ef5c466496c314b5a1eb6838dc598b15 (diff) | |
Core/Misc: implemented petition manager (#19010)
- Implemented manager for petitions to perform all petition related tasks and synchronize data with database.
- This kills ugly synchronous querys on packet handlers
Diffstat (limited to 'src/server/game/Handlers/PetitionsHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/PetitionsHandler.cpp | 355 |
1 files changed, 89 insertions, 266 deletions
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 4481ed7505d..809237b72fd 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -29,6 +29,7 @@ #include "Guild.h" #include "ArenaTeam.h" #include "CharacterCache.h" +#include "PetitionMgr.h" #define CHARTER_DISPLAY_ID 16161 @@ -88,7 +89,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) uint32 charterid = 0; uint32 cost = 0; - uint32 type = 0; + CharterTypes type = CHARTER_TYPE_NONE; if (creature->IsTabardDesigner()) { // if tabard designer, then trying to buy a guild charter. @@ -201,98 +202,57 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) // a petition is invalid, if both the owner and the type matches // we checked above, if this player is in an arenateam, so this must be // datacorruption - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_BY_OWNER); - stmt->setUInt32(0, _player->GetGUID().GetCounter()); - stmt->setUInt8(1, type); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - std::ostringstream ssInvalidPetitionGUIDs; - - if (result) + CharacterDatabase.EscapeString(name); + if (Petition const* petition = sPetitionMgr->GetPetitionByOwnerWithType(_player->GetGUID(), type)) { - do - { - Field* fields = result->Fetch(); - ssInvalidPetitionGUIDs << '\'' << fields[0].GetUInt32() << "', "; - } while (result->NextRow()); + // clear from petition store + sPetitionMgr->RemovePetition(petition->petitionGuid); + TC_LOG_DEBUG("network", "Invalid petition GUID: %u", petition->petitionGuid.GetCounter()); } - // delete petitions with the same guid as this one - ssInvalidPetitionGUIDs << '\'' << charter->GetGUID().GetCounter() << '\''; - - TC_LOG_DEBUG("network", "Invalid petition GUIDs: %s", ssInvalidPetitionGUIDs.str().c_str()); - CharacterDatabase.EscapeString(name); - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - trans->PAppend("DELETE FROM petition WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str()); - trans->PAppend("DELETE FROM petition_sign WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str()); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION); - stmt->setUInt32(0, _player->GetGUID().GetCounter()); - stmt->setUInt32(1, charter->GetGUID().GetCounter()); - stmt->setString(2, name); - stmt->setUInt8(3, uint8(type)); - trans->Append(stmt); - - CharacterDatabase.CommitTransaction(trans); + // fill petition store + sPetitionMgr->AddPetition(charter->GetGUID(), _player->GetGUID(), name, type, false); } void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SHOW_SIGNATURES"); - uint8 signs = 0; - ObjectGuid petitionguid; - recvData >> petitionguid; // petition guid - - ObjectGuid::LowType petitionGuidLow = petitionguid.GetCounter(); - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt32(0, petitionGuidLow); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); + ObjectGuid petitionGuid; + recvData >> petitionGuid; // petition guid - if (!result) + Petition const* petition = sPetitionMgr->GetPetition(petitionGuid); + if (!petition) { - TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); + TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); return; } - Field* fields = result->Fetch(); - uint32 type = fields[0].GetUInt8(); // if guild petition and has guild => error, return; - if (type == GUILD_CHARTER_TYPE && _player->GetGuildId()) + if (petition->petitionType == GUILD_CHARTER_TYPE && _player->GetGuildId()) return; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - - stmt->setUInt32(0, petitionGuidLow); - - result = CharacterDatabase.Query(stmt); + TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES petition entry: '%u'", petitionGuid.GetCounter()); - // result == NULL also correct in case no sign yet - if (result) - signs = uint8(result->GetRowCount()); - - TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES petition entry: '%u'", petitionGuidLow); + SendPetitionSigns(petition, _player); +} - WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+1+signs*12)); - data << uint64(petitionguid); // petition guid - data << uint64(_player->GetGUID()); // owner guid - data << uint32(petitionGuidLow); // guild guid - data << uint8(signs); // sign's count +void WorldSession::SendPetitionSigns(Petition const* petition, Player* sendTo) +{ + SignaturesVector const& signatures = petition->signatures; + WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8 + 8 + 4 + 1 + signatures.size() * 12)); + data << uint64(petition->petitionGuid); // petition guid + data << uint64(petition->ownerGuid); // owner guid + data << uint32(petition->petitionGuid.GetCounter()); // guild guid + data << uint8(signatures.size()); // sign's count - for (uint8 i = 1; i <= signs; ++i) + for (Signature const& signature : signatures) { - Field* fields2 = result->Fetch(); - ObjectGuid::LowType lowGuid = fields2[0].GetUInt32(); - - data << ObjectGuid(HighGuid::Player, 0, lowGuid); // Player GUID - data << uint32(0); // there 0 ... - - result->NextRow(); + data << signature.second; // Player GUID + data << uint32(0); // there 0 ... } - SendPacket(&data); + + sendTo->GetSession()->SendPacket(&data); } void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData) @@ -310,34 +270,20 @@ void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData) void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionguid) { - ObjectGuid ownerguid; - uint32 type; - std::string name = "NO_NAME_FOR_GUID"; - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION); - - stmt->setUInt32(0, petitionguid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - Field* fields = result->Fetch(); - ownerguid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); - name = fields[1].GetString(); - type = fields[2].GetUInt8(); - } - else + Petition const* petition = sPetitionMgr->GetPetition(petitionguid); + if (!petition) { TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition (%s)", petitionguid.ToString().c_str()); return; } - WorldPacket data(SMSG_PETITION_QUERY_RESPONSE, (4+8+name.size()+1+1+4*12+2+10)); + WorldPacket data(SMSG_PETITION_QUERY_RESPONSE, (4+8+petition->petitionName.size()+1+1+4*12+2+10)); data << uint32(petitionguid.GetCounter()); // guild/team guid (in Trinity always same as GUID_LOPART(petition guid) - data << uint64(ownerguid); // charter owner guid - data << name; // name (guild/arena team) + data << uint64(petition->ownerGuid); // charter owner guid + data << petition->petitionName; // name (guild/arena team) data << uint8(0); // some string + + CharterTypes type = petition->petitionType; if (type == GUILD_CHARTER_TYPE) { uint32 needed = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); @@ -375,7 +321,6 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "Received opcode MSG_PETITION_RENAME"); // ok ObjectGuid petitionGuid; - uint32 type; std::string newName; recvData >> petitionGuid; // guid @@ -385,23 +330,14 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) if (!item) return; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt32(0, petitionGuid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - Field* fields = result->Fetch(); - type = fields[0].GetUInt8(); - } - else + Petition* petition = sPetitionMgr->GetPetition(petitionGuid); + if (!petition) { TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition %s", petitionGuid.ToString().c_str()); return; } + CharterTypes type = petition->petitionType; if (type == GUILD_CHARTER_TYPE) { if (sGuildMgr->GetGuildByName(newName)) @@ -429,12 +365,10 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) } } - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME); - - stmt->setString(0, newName); - stmt->setUInt32(1, petitionGuid.GetCounter()); + CharacterDatabase.EscapeString(newName); - CharacterDatabase.Execute(stmt); + // update petition storage + petition->UpdateName(newName); TC_LOG_DEBUG("network", "Petition %s renamed to '%s'", petitionGuid.ToString().c_str(), newName.c_str()); WorldPacket data(MSG_PETITION_RENAME, (8+newName.size()+1)); @@ -447,32 +381,24 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SIGN"); // ok - Field* fields; ObjectGuid petitionGuid; uint8 unk; recvData >> petitionGuid; // petition guid recvData >> unk; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURES); - - stmt->setUInt32(0, petitionGuid.GetCounter()); - stmt->setUInt32(1, petitionGuid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) + Petition* petition = sPetitionMgr->GetPetition(petitionGuid); + if (!petition) { TC_LOG_ERROR("network", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); return; } - fields = result->Fetch(); - ObjectGuid ownerGuid(HighGuid::Player, fields[0].GetUInt32()); - uint64 signs = fields[1].GetUInt64(); - uint8 type = fields[2].GetUInt8(); + ObjectGuid ownerGuid = petition->ownerGuid; + CharterTypes type = petition->petitionType; + uint8 signs = petition->signatures.size(); - ObjectGuid::LowType playerGuid = _player->GetGUID().GetCounter(); - if (ownerGuid == _player->GetGUID()) + ObjectGuid playerGuid = _player->GetGUID(); + if (ownerGuid == playerGuid) return; // not let enemies sign guild charter @@ -493,7 +419,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) return; } - uint8 slot = ArenaTeam::GetSlotByType(type); + uint8 slot = ArenaTeam::GetSlotByType(static_cast<uint32>(type)); if (slot >= MAX_ARENA_SLOT) return; @@ -523,19 +449,13 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) } } - if (++signs > type) // client signs maximum + if (++signs > static_cast<uint8>(type)) // client signs maximum return; // Client doesn't allow to sign petition two times by one character, but not check sign by another character from same account // not allow sign another player from already sign player account - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_ACCOUNT); - - stmt->setUInt32(0, GetAccountId()); - stmt->setUInt32(1, petitionGuid.GetCounter()); - - result = CharacterDatabase.Query(stmt); - - if (result) + bool isSigned = petition->IsPetitionSignedByAccount(GetAccountId()); + if (isSigned) { WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4)); data << uint64(petitionGuid); @@ -551,30 +471,17 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) return; } - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION_SIGNATURE); + // fill petition store + petition->AddSignature(petitionGuid, GetAccountId(), playerGuid, false); - stmt->setUInt32(0, ownerGuid.GetCounter()); - stmt->setUInt32(1, petitionGuid.GetCounter()); - stmt->setUInt32(2, playerGuid); - stmt->setUInt32(3, GetAccountId()); - - CharacterDatabase.Execute(stmt); - - TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (GUID: %u Account: %u)", petitionGuid.ToString().c_str(), _player->GetName().c_str(), playerGuid, GetAccountId()); + TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (GUID: %u Account: %u)", petitionGuid.ToString().c_str(), _player->GetName().c_str(), playerGuid.GetCounter(), GetAccountId()); WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4)); data << uint64(petitionGuid); data << uint64(_player->GetGUID()); data << uint32(PETITION_SIGN_OK); - - // close at signer side SendPacket(&data); - // update signs count on charter, required testing... - //Item* item = _player->GetItemByGuid(petitionguid)); - //if (item) - // item->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1+1, signs); - // update for owner if online if (Player* owner = ObjectAccessor::FindConnectedPlayer(ownerGuid)) owner->GetSession()->SendPacket(&data); @@ -588,20 +495,12 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) recvData >> petitionguid; // petition guid TC_LOG_DEBUG("network", "Petition %s declined by %u", petitionguid.ToString().c_str(), _player->GetGUID().GetCounter()); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID); - - stmt->setUInt32(0, petitionguid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) + Petition const* petition = sPetitionMgr->GetPetition(petitionguid); + if (!petition) return; - Field* fields = result->Fetch(); - ObjectGuid ownerguid(HighGuid::Player, 0, fields[0].GetUInt32()); - - Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid); - if (owner) // petition owner online + // petition owner online + if (Player* owner = ObjectAccessor::FindConnectedPlayer(petition->ownerGuid)) { WorldPacket data(MSG_PETITION_DECLINE, 8); data << uint64(_player->GetGUID()); @@ -613,31 +512,23 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "Received opcode CMSG_OFFER_PETITION"); // ok - uint8 signs = 0; - ObjectGuid petitionguid, plguid; - uint32 type, junk; - Player* player; + ObjectGuid petitionGuid, offererGuid; + uint32 junk; recvData >> junk; // this is not petition type! - recvData >> petitionguid; // petition guid - recvData >> plguid; // player guid + recvData >> petitionGuid; // petition guid + recvData >> offererGuid; // player guid - player = ObjectAccessor::FindConnectedPlayer(plguid); + Player* player = ObjectAccessor::FindConnectedPlayer(offererGuid); if (!player) return; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt32(0, petitionguid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) + Petition const* petition = sPetitionMgr->GetPetition(petitionGuid); + if (!petition) return; - Field* fields = result->Fetch(); - type = fields[0].GetUInt8(); + CharterTypes type = petition->petitionType; - TC_LOG_DEBUG("network", "OFFER PETITION: type %u, %s, to %s", type, petitionguid.ToString().c_str(), plguid.ToString().c_str()); + TC_LOG_DEBUG("network", "OFFER PETITION: type %u, %s, to %s", static_cast<uint32>(type), petitionGuid.ToString().c_str(), offererGuid.ToString().c_str()); if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != player->GetTeam()) { @@ -657,7 +548,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) return; } - uint8 slot = ArenaTeam::GetSlotByType(type); + uint8 slot = ArenaTeam::GetSlotByType(static_cast<uint32>(type)); if (slot >= MAX_ARENA_SLOT) return; @@ -689,33 +580,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) } } - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - - stmt->setUInt32(0, petitionguid.GetCounter()); - - result = CharacterDatabase.Query(stmt); - - // result == NULL also correct charter without signs - if (result) - signs = uint8(result->GetRowCount()); - - WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+signs+signs*12)); - data << uint64(petitionguid); // petition guid - data << uint64(_player->GetGUID()); // owner guid - data << uint32(petitionguid.GetCounter()); // guild guid - data << uint8(signs); // sign's count - - for (uint8 i = 1; i <= signs; ++i) - { - Field* fields2 = result->Fetch(); - data << uint64(ObjectGuid(HighGuid::Player, fields2[0].GetUInt32())); // Player GUID - data << uint32(0); // there 0 ... - - result->NextRow(); - } - - player->GetSession()->SendPacket(&data); + SendPetitionSigns(petition, player); } void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) @@ -735,30 +600,18 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUID().GetCounter()); - // Get petition data from db - ObjectGuid::LowType ownerguidlo; - uint32 type; - std::string name; - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION); - stmt->setUInt32(0, petitionGuid.GetCounter()); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - Field* fields = result->Fetch(); - ownerguidlo = fields[0].GetUInt32(); - name = fields[1].GetString(); - type = fields[2].GetUInt8(); - } - else + Petition const* petition = sPetitionMgr->GetPetition(petitionGuid); + if (!petition) { TC_LOG_ERROR("entities.player.cheat", "Player %s (guid: %u) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().GetCounter(), petitionGuid.ToString().c_str()); return; } + CharterTypes type = petition->petitionType; + std::string const name = petition->petitionName; // we need a copy, it will be removed on guild/arena remove + // Only the petition owner can turn in the petition - if (_player->GetGUID().GetCounter() != ownerguidlo) + if (_player->GetGUID() != petition->ownerGuid) return; // Petition type (guild/arena) specific checks @@ -783,7 +636,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) else { // Check for valid arena bracket (2v2, 3v3, 5v5) - uint8 slot = ArenaTeam::GetSlotByType(type); + uint8 slot = ArenaTeam::GetSlotByType(static_cast<uint32>(type)); if (slot >= MAX_ARENA_SLOT) return; @@ -802,26 +655,13 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) } } - // Get petition signatures from db - uint8 signatures; - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - stmt->setUInt32(0, petitionGuid.GetCounter()); - result = CharacterDatabase.Query(stmt); - - if (result) - signatures = uint8(result->GetRowCount()); - else - signatures = 0; - - uint32 requiredSignatures; + SignaturesVector const signatures = petition->signatures; // we need a copy, it will be removed on guild/arena remove + uint32 requiredSignatures = static_cast<uint32>(type) - 1; if (type == GUILD_CHARTER_TYPE) requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); - else - requiredSignatures = type-1; // Notify player if signatures are missing - if (signatures < requiredSignatures) + if (signatures.size() < requiredSignatures) { data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4); data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES; @@ -854,12 +694,8 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) SQLTransaction trans = CharacterDatabase.BeginTransaction(); // Add members from signatures - for (uint8 i = 0; i < signatures; ++i) - { - Field* fields = result->Fetch(); - guild->AddMember(trans, ObjectGuid(HighGuid::Player, fields[0].GetUInt32())); - result->NextRow(); - } + for (Signature const& signature : signatures) + guild->AddMember(trans, signature.second); CharacterDatabase.CommitTransaction(trans); } @@ -884,27 +720,14 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "PetitonsHandler: Arena team (guid: %u) added to ObjectMgr", arenaTeam->GetId()); // Add members - for (uint8 i = 0; i < signatures; ++i) + for (Signature const& signature : signatures) { - Field* fields = result->Fetch(); - ObjectGuid memberGUID(HighGuid::Player, fields[0].GetUInt32()); - TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), memberGUID.ToString().c_str()); - arenaTeam->AddMember(memberGUID); - result->NextRow(); + TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), signature.second.ToString().c_str()); + arenaTeam->AddMember(signature.second); } } - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_GUID); - stmt->setUInt32(0, petitionGuid.GetCounter()); - trans->Append(stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_GUID); - stmt->setUInt32(0, petitionGuid.GetCounter()); - trans->Append(stmt); - - CharacterDatabase.CommitTransaction(trans); + sPetitionMgr->RemovePetition(petitionGuid); // created TC_LOG_DEBUG("network", "Player %s (%s) turning in petition %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), petitionGuid.ToString().c_str()); |
