Core/PacketIO: Automatically set field count in SMSG_INIT_WORLD_STATES instead of manual switch.

This commit is contained in:
kaelima
2012-10-17 00:46:11 +02:00
parent 88ddc9662e
commit 4ec23cdba5

View File

@@ -9053,7 +9053,6 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
{
// data depends on zoneid/mapid...
Battleground* bg = GetBattleground();
uint16 NumberOfFields = 0;
uint32 mapid = GetMapId();
OutdoorPvP* pvp = sOutdoorPvPMgr->GetOutdoorPvPToZoneId(zoneid);
InstanceScript* instance = GetInstanceScript();
@@ -9061,94 +9060,12 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending SMSG_INIT_WORLD_STATES to Map: %u, Zone: %u", mapid, zoneid);
// may be exist better way to do this...
switch (zoneid)
{
case 0:
case 1:
case 4:
case 8:
case 10:
case 11:
case 12:
case 36:
case 38:
case 40:
case 41:
case 51:
case 267:
case 1519:
case 1537:
case 2257:
case 2918:
NumberOfFields = 8;
break;
case 139:
NumberOfFields = 41;
break;
case 1377:
NumberOfFields = 15;
break;
case 2597:
NumberOfFields = 83;
break;
case 3277:
NumberOfFields = 18;
break;
case 3358:
case 3820:
NumberOfFields = 40;
break;
case 3483:
NumberOfFields = 27;
break;
case 3518:
NumberOfFields = 39;
break;
case 3519:
NumberOfFields = 38;
break;
case 3521:
NumberOfFields = 37;
break;
case 3698:
case 3702:
case 3968:
case 4378:
case 3703:
NumberOfFields = 11;
break;
case 4384:
NumberOfFields = 30;
break;
case 4710:
NumberOfFields = 28;
break;
case 4812: // Icecrown Citadel
case 4100: // The Culling of Stratholme
NumberOfFields = 13;
break;
case 4987: // The Ruby Sanctum
NumberOfFields = 3;
break;
case 4273: // Ulduar
NumberOfFields = 10;
break;
case 4197: // Wintergrasp
/// Use the max here, and fill with zeros if missing.
NumberOfFields = 10 + WG_MAX_OBJ + WG_MAX_WORKSHOP;
break;
default:
NumberOfFields = 12;
break;
}
WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(NumberOfFields*8)));
WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(12*8)));
data << uint32(mapid); // mapid
data << uint32(zoneid); // zone id
data << uint32(areaid); // area id, new 2.1.0
size_t countPos = data.wpos();
data << uint16(NumberOfFields); // count of uint64 blocks
data << uint16(0); // count of uint64 blocks
data << uint32(0x8d8) << uint32(0x0); // 1
data << uint32(0x8d7) << uint32(0x0); // 2
data << uint32(0x8d6) << uint32(0x0); // 3
@@ -9711,8 +9628,6 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
bf->FillInitialWorldStates(data);
break;
}
else
data.put<uint16>(countPos, 12);
// No break here, intended.
default:
data << uint32(0x914) << uint32(0x0); // 7
@@ -9721,6 +9636,10 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
data << uint32(0x915) << uint32(0x0); // 10
break;
}
uint16 length = (data.wpos() - countPos) / 8;
data.put<uint16>(countPos, length);
GetSession()->SendPacket(&data);
SendBGWeekendWorldStates();
SendBattlefieldWorldStates();