Core: Fix build and proper deinitialization in HandleTransmogrifyItems (by using vectors instead of new/delete)

This commit is contained in:
Nay
2012-08-10 02:57:16 +01:00
parent 260782f316
commit 5e1e9bb4dd
6 changed files with 54 additions and 64 deletions

View File

@@ -17147,20 +17147,20 @@ void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float
data << float(vsin);
data << uint32(0);
data.WriteByteSeq(bytes[6]);
data.WriteByteSeq(bytes[7]);
data.WriteByteSeq(guid[6]);
data.WriteByteSeq(guid[7]);
data << float(speedXY);
data.WriteByteSeq(bytes[4]);
data.WriteByteSeq(bytes[5]);
data.WriteByteSeq(bytes[3]);
data.WriteByteSeq(guid[4]);
data.WriteByteSeq(guid[5]);
data.WriteByteSeq(guid[3]);
data << float(speedZ);
data << float(vcos);
data.WriteByteSeq(bytes[2]);
data.WriteByteSeq(bytes[0]);
data.WriteByteSeq(guid[2]);
data.WriteByteSeq(guid[0]);
player->GetSession()->SendPacket(&data);
}

View File

@@ -269,7 +269,7 @@ class Group
void UpdatePlayerOutOfRange(Player* player);
// ignore: GUID of player that will be ignored
void BroadcastPacket(WorldPacket* packet, bool ignorePlayersInBGRaid, int group = -1, uint64 ignore = 0);
void BroadcastAddonMessagePacket(WorldPacket* packet, const std::string& prefix, bool ignorePlayersInBGRaid, int group, uint64 ignore);
void BroadcastAddonMessagePacket(WorldPacket* packet, const std::string& prefix, bool ignorePlayersInBGRaid, int group = -1, uint64 ignore = 0);
void BroadcastReadyCheck(WorldPacket* packet);
void OfflineReadyCheck();

View File

@@ -509,46 +509,6 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
}
}
void WorldSession::HandleUnregisterAddonPrefixesOpcode(WorldPacket& /*recvPacket*/) // empty packet
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_UNREGISTER_ALL_ADDON_PREFIXES");
_registeredAddonPrefixes.clear();
}
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ADDON_REGISTERED_PREFIXES");
// This is always sent after CMSG_UNREGISTER_ALL_ADDON_PREFIXES
uint32 count = recvPacket.ReadBits(25);
if (count > REGISTERED_ADDON_PREFIX_SOFTCAP)
{
// if we have hit the softcap (64) nothing should be filtered
_filterAddonMessages = false;
recvPacket.rfinish();
return;
}
std::vector<uint8> lengths(count);
for (uint32 i = 0; i < count; ++i)
lengths.push_back(recvPacket.ReadBits(5));
std::vector<std::string> prefixes(count);
for (uint32 i = 0; i < count; ++i)
_registeredAddonPrefixes.push_back(recvPacket.ReadString(lengths[i]));
if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen
{
_filterAddonMessages = false;
return;
}
_filterAddonMessages = true;
}
void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
{
Player* sender = GetPlayer();
@@ -674,7 +634,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
WorldPacket data;
ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL, prefix.c_str());
group->BroadcastAddonMessagePacket(&data, true, prefix, -1, group->GetMemberGroup(sender->GetGUID()));
group->BroadcastAddonMessagePacket(&data, prefix, true, -1, group->GetMemberGroup(sender->GetGUID()));
break;
}
default:

View File

@@ -1454,9 +1454,9 @@ void WorldSession::HandleTransmogrifyItems(WorldPacket& recvData)
return;
}
ObjectGuid* itemGuids = new ObjectGuid[count];
uint32* newEntries = new uint32[count];
uint32* slots = new uint32[count];
std::vector<ObjectGuid> itemGuids(count, ObjectGuid(0));
std::vector<uint32> newEntries(count, 0);
std::vector<uint32> slots(count, 0);
for (uint8 i = 0; i < count; ++i)
{
@@ -1606,11 +1606,6 @@ void WorldSession::HandleTransmogrifyItems(WorldPacket& recvData)
// ... unless client was modified
if (cost) // 0 cost if reverting look
player->ModifyMoney(-cost);
delete[] itemGuids;
delete[] newEntries;
delete[] slots;
}
void WorldSession::SendReforgeResult(bool success)

View File

@@ -46,7 +46,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode );
DEFINE_OPCODE_HANDLER(CMSG_ACTIVATETAXI, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiOpcode );
DEFINE_OPCODE_HANDLER(CMSG_ACTIVATETAXIEXPRESS, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiExpressOpcode );
DEFINE_OPCODE_HANDLER(CMSG_ADDON_REGISTERED_PREFIXES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
DEFINE_OPCODE_HANDLER(CMSG_ADDON_REGISTERED_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
DEFINE_OPCODE_HANDLER(CMSG_ADD_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddFriendOpcode );
DEFINE_OPCODE_HANDLER(CMSG_ADD_IGNORE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddIgnoreOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_ADD_VOICE_IGNORE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -514,7 +514,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_TOTEM_DESTROYED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed );
DEFINE_OPCODE_HANDLER(CMSG_TRAINER_BUY_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerBuySpellOpcode );
DEFINE_OPCODE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTrainerListOpcode );
DEFINE_OPCODE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTransmogrifyItems );
DEFINE_OPCODE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems );
DEFINE_OPCODE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetitionOpcode );
DEFINE_OPCODE_HANDLER(CMSG_TUTORIAL_CLEAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialClear );
DEFINE_OPCODE_HANDLER(CMSG_TUTORIAL_FLAG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag );
@@ -522,7 +522,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(CMSG_UNACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnacceptTradeOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_UNLEARN_SKILL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnlearnSkillOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_UNLEARN_SPECIALIZATION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::HandleUnregisterAddonPrefixesOpcode);
DEFINE_OPCODE_HANDLER(CMSG_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAddonPrefixesOpcode);
DEFINE_OPCODE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData );
//DEFINE_OPCODE_HANDLER(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory );
//DEFINE_OPCODE_HANDLER(CMSG_UPDATE_PROJECTILE_POSITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateProjectilePosition );

View File

@@ -45,9 +45,6 @@
#include "Transport.h"
#include "WardenWin.h"
#include "WardenMac.h"
#include <algorithm>
#include <vector>
#include <string>
bool MapSessionFilter::Process(WorldPacket* packet)
{
@@ -973,10 +970,48 @@ bool WorldSession::IsAddonRegistered(const std::string& prefix) const
if (_registeredAddonPrefixes.empty())
return false;
std::vector<std::string>::iterator itr = std::find(_registeredAddonPrefixes.begin(), _registeredAddonPrefixes.end(), prefix);
std::vector<std::string>::const_iterator itr = std::find(_registeredAddonPrefixes.begin(), _registeredAddonPrefixes.end(), prefix);
return itr != _registeredAddonPrefixes.end();
}
void WorldSession::HandleUnregisterAddonPrefixesOpcode(WorldPacket& /*recvPacket*/) // empty packet
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_UNREGISTER_ALL_ADDON_PREFIXES");
_registeredAddonPrefixes.clear();
}
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ADDON_REGISTERED_PREFIXES");
// This is always sent after CMSG_UNREGISTER_ALL_ADDON_PREFIXES
uint32 count = recvPacket.ReadBits(25);
if (count > REGISTERED_ADDON_PREFIX_SOFTCAP)
{
// if we have hit the softcap (64) nothing should be filtered
_filterAddonMessages = false;
recvPacket.rfinish();
return;
}
std::vector<uint8> lengths(count);
for (uint32 i = 0; i < count; ++i)
lengths[i] = recvPacket.ReadBits(5);
for (uint32 i = 0; i < count; ++i)
_registeredAddonPrefixes.push_back(recvPacket.ReadString(lengths[i]));
if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen
{
_filterAddonMessages = false;
return;
}
_filterAddonMessages = true;
}
void WorldSession::SetPlayer(Player* player)
{