Fix housing old db2 and implement missing opcodes thanks agatho

This commit is contained in:
luis
2026-02-16 20:34:56 -03:00
parent 4e9c29d59e
commit df1e69e8ea
8 changed files with 389 additions and 204 deletions
+259 -157
View File
@@ -352,10 +352,21 @@ void WorldSession::HandleNeighborhoodUpdateName(WorldPackets::Neighborhood::Neig
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_UPDATE_NAMENeighborhoodGuid: {}, NewName: {}",
neighborhoodUpdateName.NeighborhoodGuid.ToString(), neighborhoodUpdateName.NewName);
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodUpdateNameResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodUpdateName.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_UPDATE_NAME NeighborhoodGuid: {}, NewName: {}",
neighborhoodGuid.ToString(), neighborhoodUpdateName.NewName);
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodUpdateNameResponse response;
@@ -363,7 +374,7 @@ void WorldSession::HandleNeighborhoodUpdateName(WorldPackets::Neighborhood::Neig
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodUpdateName: Neighborhood {} not found",
neighborhoodUpdateName.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -375,7 +386,7 @@ void WorldSession::HandleNeighborhoodUpdateName(WorldPackets::Neighborhood::Neig
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodUpdateName: Player {} lacks permission for neighborhood {}",
player->GetGUID().ToString(), neighborhoodUpdateName.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -398,11 +409,11 @@ void WorldSession::HandleNeighborhoodUpdateName(WorldPackets::Neighborhood::Neig
if (Player* memberPlayer = ObjectAccessor::FindPlayer(member.PlayerGuid))
{
WorldPackets::Housing::InvalidateNeighborhoodName invalidate;
invalidate.NeighborhoodGuid = neighborhoodUpdateName.NeighborhoodGuid;
invalidate.NeighborhoodGuid = neighborhoodGuid;
memberPlayer->SendDirectMessage(invalidate.Write());
WorldPackets::Neighborhood::NeighborhoodUpdateNameNotification nameNotification;
nameNotification.NeighborhoodGuid = neighborhoodUpdateName.NeighborhoodGuid;
nameNotification.NeighborhoodGuid = neighborhoodGuid;
nameNotification.NewName = neighborhoodUpdateName.NewName;
memberPlayer->SendDirectMessage(nameNotification.Write());
}
@@ -410,20 +421,20 @@ void WorldSession::HandleNeighborhoodUpdateName(WorldPackets::Neighborhood::Neig
WorldPackets::Neighborhood::NeighborhoodUpdateNameResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_SUCCESS);
response.NeighborhoodGuid = neighborhoodUpdateName.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
SendPacket(response.Write());
// Send guild rename notification if player is in a guild
if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))
{
WorldPackets::Housing::HousingSvcsGuildRenameNeighborhoodNotification guildNotification;
guildNotification.NeighborhoodGuid = neighborhoodUpdateName.NeighborhoodGuid;
guildNotification.NeighborhoodGuid = neighborhoodGuid;
guildNotification.NewName = neighborhoodUpdateName.NewName;
guild->BroadcastPacket(guildNotification.Write());
}
TC_LOG_DEBUG("housing", "Neighborhood {} renamed to '{}' by player {}",
neighborhoodUpdateName.NeighborhoodGuid.ToString(), neighborhoodUpdateName.NewName,
neighborhoodGuid.ToString(), neighborhoodUpdateName.NewName,
player->GetGUID().ToString());
}
@@ -478,10 +489,21 @@ void WorldSession::HandleNeighborhoodAddSecondaryOwner(WorldPackets::Neighborhoo
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_ADD_SECONDARY_OWNERNeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodAddSecondaryOwner.NeighborhoodGuid.ToString(), neighborhoodAddSecondaryOwner.PlayerGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodAddSecondaryOwnerResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodAddSecondaryOwner.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_ADD_SECONDARY_OWNER NeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodGuid.ToString(), neighborhoodAddSecondaryOwner.PlayerGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodAddSecondaryOwnerResponse response;
@@ -489,7 +511,7 @@ void WorldSession::HandleNeighborhoodAddSecondaryOwner(WorldPackets::Neighborhoo
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodAddSecondaryOwner: Neighborhood {} not found",
neighborhoodAddSecondaryOwner.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -501,7 +523,7 @@ void WorldSession::HandleNeighborhoodAddSecondaryOwner(WorldPackets::Neighborhoo
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodAddSecondaryOwner: Player {} is not owner of neighborhood {}",
player->GetGUID().ToString(), neighborhoodAddSecondaryOwner.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -509,7 +531,7 @@ void WorldSession::HandleNeighborhoodAddSecondaryOwner(WorldPackets::Neighborhoo
WorldPackets::Neighborhood::NeighborhoodAddSecondaryOwnerResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodAddSecondaryOwner.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
response.PlayerGuid = neighborhoodAddSecondaryOwner.PlayerGuid;
SendPacket(response.Write());
@@ -546,7 +568,7 @@ void WorldSession::HandleNeighborhoodAddSecondaryOwner(WorldPackets::Neighborhoo
TC_LOG_DEBUG("housing", "AddManager result: {} for player {} in neighborhood {}",
uint32(result), neighborhoodAddSecondaryOwner.PlayerGuid.ToString(),
neighborhoodAddSecondaryOwner.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighborhood::NeighborhoodRemoveSecondaryOwner const& neighborhoodRemoveSecondaryOwner)
@@ -555,10 +577,21 @@ void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighbor
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_REMOVE_SECONDARY_OWNERNeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodRemoveSecondaryOwner.NeighborhoodGuid.ToString(), neighborhoodRemoveSecondaryOwner.PlayerGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodRemoveSecondaryOwnerResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodRemoveSecondaryOwner.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_REMOVE_SECONDARY_OWNER NeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodGuid.ToString(), neighborhoodRemoveSecondaryOwner.PlayerGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodRemoveSecondaryOwnerResponse response;
@@ -566,7 +599,7 @@ void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighbor
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodRemoveSecondaryOwner: Neighborhood {} not found",
neighborhoodRemoveSecondaryOwner.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -578,7 +611,7 @@ void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighbor
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodRemoveSecondaryOwner: Player {} is not owner of neighborhood {}",
player->GetGUID().ToString(), neighborhoodRemoveSecondaryOwner.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -586,7 +619,7 @@ void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighbor
WorldPackets::Neighborhood::NeighborhoodRemoveSecondaryOwnerResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodRemoveSecondaryOwner.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
response.PlayerGuid = neighborhoodRemoveSecondaryOwner.PlayerGuid;
SendPacket(response.Write());
@@ -623,7 +656,7 @@ void WorldSession::HandleNeighborhoodRemoveSecondaryOwner(WorldPackets::Neighbor
TC_LOG_DEBUG("housing", "RemoveManager result: {} for player {} in neighborhood {}",
uint32(result), neighborhoodRemoveSecondaryOwner.PlayerGuid.ToString(),
neighborhoodRemoveSecondaryOwner.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::NeighborhoodInviteResident const& neighborhoodInviteResident)
@@ -632,10 +665,21 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_INVITE_RESIDENT NeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodInviteResident.NeighborhoodGuid.ToString(), neighborhoodInviteResident.PlayerGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodInviteResidentResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodInviteResident.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_INVITE_RESIDENT NeighborhoodGuid: {}, PlayerGuid: {}",
neighborhoodGuid.ToString(), neighborhoodInviteResident.PlayerGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodInviteResidentResponse response;
@@ -643,7 +687,7 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodInviteResident: Neighborhood {} not found",
neighborhoodInviteResident.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -655,7 +699,7 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodInviteResident: Player {} lacks permission for neighborhood {}",
player->GetGUID().ToString(), neighborhoodInviteResident.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -663,7 +707,7 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
WorldPackets::Neighborhood::NeighborhoodInviteResidentResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodInviteResident.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
response.InviteeGuid = neighborhoodInviteResident.PlayerGuid;
SendPacket(response.Write());
@@ -673,7 +717,7 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
if (Player* invitee = ObjectAccessor::FindPlayer(neighborhoodInviteResident.PlayerGuid))
{
WorldPackets::Neighborhood::NeighborhoodInviteNotification notification;
notification.NeighborhoodGuid = neighborhoodInviteResident.NeighborhoodGuid;
notification.NeighborhoodGuid = neighborhoodGuid;
notification.InviterGuid = player->GetGUID();
notification.NeighborhoodName = neighborhood->GetName();
invitee->SendDirectMessage(notification.Write());
@@ -682,7 +726,7 @@ void WorldSession::HandleNeighborhoodInviteResident(WorldPackets::Neighborhood::
TC_LOG_DEBUG("housing", "InviteResident result: {} for player {} in neighborhood {}",
uint32(result), neighborhoodInviteResident.PlayerGuid.ToString(),
neighborhoodInviteResident.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodCancelInvitation(WorldPackets::Neighborhood::NeighborhoodCancelInvitation const& neighborhoodCancelInvitation)
@@ -691,10 +735,21 @@ void WorldSession::HandleNeighborhoodCancelInvitation(WorldPackets::Neighborhood
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_CANCEL_INVITATION NeighborhoodGuid: {}, InviteeGuid: {}",
neighborhoodCancelInvitation.NeighborhoodGuid.ToString(), neighborhoodCancelInvitation.InviteeGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodCancelInvitationResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodCancelInvitation.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_CANCEL_INVITATION NeighborhoodGuid: {}, InviteeGuid: {}",
neighborhoodGuid.ToString(), neighborhoodCancelInvitation.InviteeGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodCancelInvitationResponse response;
@@ -702,7 +757,7 @@ void WorldSession::HandleNeighborhoodCancelInvitation(WorldPackets::Neighborhood
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodCancelInvitation: Neighborhood {} not found",
neighborhoodCancelInvitation.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -714,7 +769,7 @@ void WorldSession::HandleNeighborhoodCancelInvitation(WorldPackets::Neighborhood
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodCancelInvitation: Player {} lacks permission for neighborhood {}",
player->GetGUID().ToString(), neighborhoodCancelInvitation.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -722,13 +777,13 @@ void WorldSession::HandleNeighborhoodCancelInvitation(WorldPackets::Neighborhood
WorldPackets::Neighborhood::NeighborhoodCancelInvitationResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodCancelInvitation.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
response.InviteeGuid = neighborhoodCancelInvitation.InviteeGuid;
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "CancelInvitation result: {} for invitee {} in neighborhood {}",
uint32(result), neighborhoodCancelInvitation.InviteeGuid.ToString(),
neighborhoodCancelInvitation.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodPlayerDeclineInvite(WorldPackets::Neighborhood::NeighborhoodPlayerDeclineInvite const& neighborhoodPlayerDeclineInvite)
@@ -764,64 +819,71 @@ void WorldSession::HandleNeighborhoodPlayerDeclineInvite(WorldPackets::Neighborh
neighborhoodPlayerDeclineInvite.NeighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodPlayerGetInvite(WorldPackets::Neighborhood::NeighborhoodPlayerGetInvite const& neighborhoodPlayerGetInvite)
void WorldSession::HandleNeighborhoodPlayerGetInvite(WorldPackets::Neighborhood::NeighborhoodPlayerGetInvite const& /*neighborhoodPlayerGetInvite*/)
{
Player* player = GetPlayer();
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_PLAYER_GET_INVITE NeighborhoodGuid: {}",
neighborhoodPlayerGetInvite.NeighborhoodGuid.ToString());
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_PLAYER_GET_INVITE for player {}",
player->GetGUID().ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodPlayerGetInvite.NeighborhoodGuid);
if (!neighborhood)
// Client sends empty packet ? search all neighborhoods for a pending invite to this player
Neighborhood* foundNeighborhood = sNeighborhoodMgr.FindNeighborhoodWithPendingInvite(player->GetGUID());
Neighborhood::PendingInvite const* foundInvite = nullptr;
if (foundNeighborhood)
{
WorldPackets::Neighborhood::NeighborhoodPlayerGetInviteResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_NEIGHBORHOOD_NOT_FOUND);
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodPlayerGetInvite: Neighborhood {} not found",
neighborhoodPlayerGetInvite.NeighborhoodGuid.ToString());
return;
}
// Check if this player has a pending invite to this neighborhood
bool hasInvite = neighborhood->HasPendingInvite(player->GetGUID());
WorldPackets::Neighborhood::NeighborhoodPlayerGetInviteResponse response;
response.Result = static_cast<uint32>(hasInvite ? HOUSING_RESULT_SUCCESS : HOUSING_RESULT_NOT_ALLOWED);
response.NeighborhoodGuid = neighborhoodPlayerGetInvite.NeighborhoodGuid;
if (hasInvite)
{
// Populate invite details from the pending invite
for (auto const& invite : neighborhood->GetPendingInvites())
for (auto const& invite : foundNeighborhood->GetPendingInvites())
{
if (invite.InviteeGuid == player->GetGUID())
{
response.InviterGuid = invite.InviterGuid;
response.InviteTime = invite.InviteTime;
foundInvite = &invite;
break;
}
}
response.NeighborhoodName = neighborhood->GetName();
}
WorldPackets::Neighborhood::NeighborhoodPlayerGetInviteResponse response;
if (foundNeighborhood && foundInvite)
{
response.Result = static_cast<uint32>(HOUSING_RESULT_SUCCESS);
response.NeighborhoodGuid = foundNeighborhood->GetGuid();
response.InviterGuid = foundInvite->InviterGuid;
response.InviteTime = foundInvite->InviteTime;
response.NeighborhoodName = foundNeighborhood->GetName();
}
else
{
response.Result = static_cast<uint32>(HOUSING_RESULT_NOT_ALLOWED);
}
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "Player {} {} a pending invite to neighborhood {}",
player->GetGUID().ToString(), hasInvite ? "has" : "does not have",
neighborhoodPlayerGetInvite.NeighborhoodGuid.ToString());
TC_LOG_DEBUG("housing", "Player {} {} a pending invite",
player->GetGUID().ToString(), foundNeighborhood ? "has" : "does not have");
}
void WorldSession::HandleNeighborhoodGetInvites(WorldPackets::Neighborhood::NeighborhoodGetInvites const& neighborhoodGetInvites)
void WorldSession::HandleNeighborhoodGetInvites(WorldPackets::Neighborhood::NeighborhoodGetInvites const& /*neighborhoodGetInvites*/)
{
Player* player = GetPlayer();
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_GET_INVITES NeighborhoodGuid: {}",
neighborhoodGetInvites.NeighborhoodGuid.ToString());
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_GET_INVITES for player {}",
player->GetGUID().ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGetInvites.NeighborhoodGuid);
// Client sends empty packet ? derive neighborhood from player's housing context
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodGetInvitesResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodGetInvitesResponse response;
@@ -829,7 +891,7 @@ void WorldSession::HandleNeighborhoodGetInvites(WorldPackets::Neighborhood::Neig
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodGetInvites: Neighborhood {} not found",
neighborhoodGetInvites.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -841,7 +903,7 @@ void WorldSession::HandleNeighborhoodGetInvites(WorldPackets::Neighborhood::Neig
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodGetInvites: Player {} lacks permission for neighborhood {}",
player->GetGUID().ToString(), neighborhoodGetInvites.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -861,7 +923,7 @@ void WorldSession::HandleNeighborhoodGetInvites(WorldPackets::Neighborhood::Neig
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "Neighborhood {} has {} pending invites sent",
neighborhoodGetInvites.NeighborhoodGuid.ToString(), uint32(invites.size()));
neighborhoodGuid.ToString(), uint32(invites.size()));
}
void WorldSession::HandleNeighborhoodBuyHouse(WorldPackets::Neighborhood::NeighborhoodBuyHouse const& neighborhoodBuyHouse)
@@ -981,44 +1043,43 @@ void WorldSession::HandleNeighborhoodMoveHouse(WorldPackets::Neighborhood::Neigh
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_MOVE_HOUSE SourcePlotGuid: {}, NewPlotIndex: {}",
neighborhoodMoveHouse.SourcePlotGuid.ToString(), neighborhoodMoveHouse.NewPlotIndex);
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_MOVE_HOUSE NeighborhoodGuid: {}, PlotGuid: {}",
neighborhoodMoveHouse.NeighborhoodGuid.ToString(), neighborhoodMoveHouse.PlotGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodMoveHouseResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodMoveHouse: Player {} has no house",
player->GetGUID().ToString());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(housing->GetNeighborhoodGuid());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodMoveHouse.NeighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodMoveHouseResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_NEIGHBORHOOD_NOT_FOUND);
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodMoveHouse: Neighborhood not found for player {}",
player->GetGUID().ToString());
TC_LOG_DEBUG("housing", "HandleNeighborhoodMoveHouse: Neighborhood {} not found",
neighborhoodMoveHouse.NeighborhoodGuid.ToString());
return;
}
HousingResult result = neighborhood->MoveHouse(neighborhoodMoveHouse.SourcePlotGuid, neighborhoodMoveHouse.NewPlotIndex);
// Resolve the target plot index from the PlotGuid
uint8 targetPlotIndex = INVALID_PLOT_INDEX;
for (auto const& plot : neighborhood->GetPlots())
{
if (plot.PlotGuid == neighborhoodMoveHouse.PlotGuid)
{
targetPlotIndex = plot.PlotIndex;
break;
}
}
HousingResult result = neighborhood->MoveHouse(player->GetGUID(), targetPlotIndex);
WorldPackets::Neighborhood::NeighborhoodMoveHouseResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = housing->GetNeighborhoodGuid();
response.NewPlotIndex = neighborhoodMoveHouse.NewPlotIndex;
response.NeighborhoodGuid = neighborhoodMoveHouse.NeighborhoodGuid;
response.NewPlotIndex = targetPlotIndex;
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "MoveHouse result: {} for plot {} to index {}",
uint32(result), neighborhoodMoveHouse.SourcePlotGuid.ToString(),
neighborhoodMoveHouse.NewPlotIndex);
TC_LOG_DEBUG("housing", "MoveHouse result: {} to plot {} in neighborhood {}",
uint32(result), neighborhoodMoveHouse.PlotGuid.ToString(),
neighborhoodMoveHouse.NeighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodOpenCornerstoneUI(WorldPackets::Neighborhood::NeighborhoodOpenCornerstoneUI const& neighborhoodOpenCornerstoneUI)
@@ -1027,79 +1088,58 @@ void WorldSession::HandleNeighborhoodOpenCornerstoneUI(WorldPackets::Neighborhoo
if (!player)
return;
TC_LOG_DEBUG("housing", "CMSG_NEIGHBORHOOD_OPEN_CORNERSTONE_UI CornerstoneGuid: {}",
neighborhoodOpenCornerstoneUI.CornerstoneGuid.ToString());
TC_LOG_DEBUG("housing", "CMSG_NEIGHBORHOOD_OPEN_CORNERSTONE_UI PlotIndex: {}, NeighborhoodGuid: {}",
neighborhoodOpenCornerstoneUI.PlotIndex, neighborhoodOpenCornerstoneUI.NeighborhoodGuid.ToString());
// Get the HousingMap and its neighborhood
HousingMap* housingMap = dynamic_cast<HousingMap*>(player->GetMap());
if (!housingMap || !housingMap->GetNeighborhood())
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodOpenCornerstoneUI.NeighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodOpenCornerstoneUIResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_NEIGHBORHOOD_NOT_FOUND);
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOpenCornerstoneUI: Player {} not on a housing map",
player->GetGUID().ToString());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOpenCornerstoneUI: Neighborhood {} not found",
neighborhoodOpenCornerstoneUI.NeighborhoodGuid.ToString());
return;
}
Neighborhood* neighborhood = housingMap->GetNeighborhood();
// Find the cornerstone GO to determine its position
GameObject* cornerstone = player->GetMap()->GetGameObject(neighborhoodOpenCornerstoneUI.CornerstoneGuid);
if (!cornerstone)
{
WorldPackets::Neighborhood::NeighborhoodOpenCornerstoneUIResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_RPC_ERROR);
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOpenCornerstoneUI: Cornerstone GO {} not found",
neighborhoodOpenCornerstoneUI.CornerstoneGuid.ToString());
return;
}
// Match the cornerstone's position to a plot index by finding the nearest plot
// Look up cost from plot data using the provided PlotIndex
uint32 neighborhoodMapId = neighborhood->GetNeighborhoodMapID();
std::vector<NeighborhoodPlotData const*> plots = sHousingMgr.GetPlotsForMap(neighborhoodMapId);
uint8 matchedPlotIndex = INVALID_PLOT_INDEX;
uint64 matchedCost = 0;
float closestDist = 5.0f; // Max matching distance ? cornerstone should be very close to its plot position
uint64 plotCost = 0;
bool plotFound = false;
for (NeighborhoodPlotData const* plot : plots)
{
float dx = cornerstone->GetPositionX() - plot->CornerstonePosition[0];
float dy = cornerstone->GetPositionY() - plot->CornerstonePosition[1];
float dist = std::sqrt(dx * dx + dy * dy);
if (dist < closestDist)
if (plot->PlotIndex == neighborhoodOpenCornerstoneUI.PlotIndex)
{
closestDist = dist;
matchedPlotIndex = static_cast<uint8>(plot->PlotIndex);
matchedCost = plot->Cost;
plotCost = plot->Cost;
plotFound = true;
break;
}
}
if (matchedPlotIndex == INVALID_PLOT_INDEX)
if (!plotFound)
{
WorldPackets::Neighborhood::NeighborhoodOpenCornerstoneUIResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_RPC_ERROR);
SendPacket(response.Write());
TC_LOG_ERROR("housing", "HandleNeighborhoodOpenCornerstoneUI: No plot matched cornerstone at ({}, {}, {})",
cornerstone->GetPositionX(), cornerstone->GetPositionY(), cornerstone->GetPositionZ());
TC_LOG_ERROR("housing", "HandleNeighborhoodOpenCornerstoneUI: PlotIndex {} not found in neighborhood map {}",
neighborhoodOpenCornerstoneUI.PlotIndex, neighborhoodMapId);
return;
}
WorldPackets::Neighborhood::NeighborhoodOpenCornerstoneUIResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_SUCCESS);
response.NeighborhoodGuid = neighborhood->GetGuid();
response.PlotIndex = matchedPlotIndex;
response.Cost = matchedCost;
response.NeighborhoodGuid = neighborhoodOpenCornerstoneUI.NeighborhoodGuid;
response.PlotIndex = static_cast<uint8>(neighborhoodOpenCornerstoneUI.PlotIndex);
response.Cost = plotCost;
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOpenCornerstoneUI: Player {} opened cornerstone UI for plot {} (cost: {}) in neighborhood '{}'",
player->GetGUID().ToString(), matchedPlotIndex, matchedCost, neighborhood->GetName());
player->GetGUID().ToString(), neighborhoodOpenCornerstoneUI.PlotIndex, plotCost, neighborhood->GetName());
}
void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::NeighborhoodOfferOwnership const& neighborhoodOfferOwnership)
@@ -1108,10 +1148,21 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_OFFER_OWNERSHIP NeighborhoodGuid: {}, NewOwnerGuid: {}",
neighborhoodOfferOwnership.NeighborhoodGuid.ToString(), neighborhoodOfferOwnership.NewOwnerGuid.ToString());
Housing* housing = player->GetHousing();
if (!housing)
{
WorldPackets::Neighborhood::NeighborhoodOfferOwnershipResponse response;
response.Result = static_cast<uint32>(HOUSING_RESULT_HOUSE_NOT_FOUND);
SendPacket(response.Write());
return;
}
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodOfferOwnership.NeighborhoodGuid);
ObjectGuid neighborhoodGuid = housing->GetNeighborhoodGuid();
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_OFFER_OWNERSHIP NeighborhoodGuid: {}, NewOwnerGuid: {}",
neighborhoodGuid.ToString(), neighborhoodOfferOwnership.NewOwnerGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodGuid);
if (!neighborhood)
{
WorldPackets::Neighborhood::NeighborhoodOfferOwnershipResponse response;
@@ -1119,7 +1170,7 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOfferOwnership: Neighborhood {} not found",
neighborhoodOfferOwnership.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
return;
}
@@ -1131,7 +1182,7 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
SendPacket(response.Write());
TC_LOG_DEBUG("housing", "HandleNeighborhoodOfferOwnership: Player {} is not owner of neighborhood {}",
player->GetGUID().ToString(), neighborhoodOfferOwnership.NeighborhoodGuid.ToString());
player->GetGUID().ToString(), neighborhoodGuid.ToString());
return;
}
@@ -1139,7 +1190,7 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
WorldPackets::Neighborhood::NeighborhoodOfferOwnershipResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodOfferOwnership.NeighborhoodGuid;
response.NeighborhoodGuid = neighborhoodGuid;
response.NewOwnerGuid = neighborhoodOfferOwnership.NewOwnerGuid;
SendPacket(response.Write());
@@ -1149,7 +1200,7 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
if (Player* newOwner = ObjectAccessor::FindPlayer(neighborhoodOfferOwnership.NewOwnerGuid))
{
WorldPackets::Housing::HousingSvcsNeighborhoodOwnershipTransferredResponse transferNotification;
transferNotification.NeighborhoodGuid = neighborhoodOfferOwnership.NeighborhoodGuid;
transferNotification.NeighborhoodGuid = neighborhoodGuid;
transferNotification.NewOwnerGuid = neighborhoodOfferOwnership.NewOwnerGuid;
newOwner->SendDirectMessage(transferNotification.Write());
}
@@ -1170,7 +1221,7 @@ void WorldSession::HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::
TC_LOG_DEBUG("housing", "TransferOwnership result: {} to player {} for neighborhood {}",
uint32(result), neighborhoodOfferOwnership.NewOwnerGuid.ToString(),
neighborhoodOfferOwnership.NeighborhoodGuid.ToString());
neighborhoodGuid.ToString());
}
void WorldSession::HandleNeighborhoodGetRoster(WorldPackets::Neighborhood::NeighborhoodGetRoster const& neighborhoodGetRoster)
@@ -1232,8 +1283,8 @@ void WorldSession::HandleNeighborhoodEvictPlot(WorldPackets::Neighborhood::Neigh
if (!player)
return;
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_EVICT_PLOTNeighborhoodGuid: {}, PlotGuid: {}",
neighborhoodEvictPlot.NeighborhoodGuid.ToString(), neighborhoodEvictPlot.PlotGuid.ToString());
TC_LOG_INFO("housing", "CMSG_NEIGHBORHOOD_EVICT_PLOT PlotIndex: {}, NeighborhoodGuid: {}",
neighborhoodEvictPlot.PlotIndex, neighborhoodEvictPlot.NeighborhoodGuid.ToString());
Neighborhood* neighborhood = sNeighborhoodMgr.GetNeighborhood(neighborhoodEvictPlot.NeighborhoodGuid);
if (!neighborhood)
@@ -1259,23 +1310,25 @@ void WorldSession::HandleNeighborhoodEvictPlot(WorldPackets::Neighborhood::Neigh
return;
}
// Capture the evicted player's GUID before eviction clears the plot
// Find the plot by index and capture evicted player's GUID
ObjectGuid evictedPlayerGuid;
ObjectGuid plotGuid;
for (auto const& plot : neighborhood->GetPlots())
{
if (plot.OwnerGuid == neighborhoodEvictPlot.PlotGuid)
if (plot.PlotIndex == neighborhoodEvictPlot.PlotIndex)
{
evictedPlayerGuid = plot.OwnerGuid;
plotGuid = plot.PlotGuid;
break;
}
}
HousingResult result = neighborhood->EvictPlayer(neighborhoodEvictPlot.PlotGuid);
HousingResult result = neighborhood->EvictPlayer(evictedPlayerGuid);
WorldPackets::Neighborhood::NeighborhoodEvictPlotResponse response;
response.Result = static_cast<uint32>(result);
response.NeighborhoodGuid = neighborhoodEvictPlot.NeighborhoodGuid;
response.PlotGuid = neighborhoodEvictPlot.PlotGuid;
response.PlotGuid = plotGuid;
SendPacket(response.Write());
// Send eviction notice to the evicted player and broadcast roster update
@@ -1287,7 +1340,7 @@ void WorldSession::HandleNeighborhoodEvictPlot(WorldPackets::Neighborhood::Neigh
{
WorldPackets::Neighborhood::NeighborhoodEvictPlotNotice notice;
notice.NeighborhoodGuid = neighborhoodEvictPlot.NeighborhoodGuid;
notice.PlotGuid = neighborhoodEvictPlot.PlotGuid;
notice.PlotGuid = plotGuid;
evictedPlayer->SendDirectMessage(notice.Write());
}
}
@@ -1306,7 +1359,56 @@ void WorldSession::HandleNeighborhoodEvictPlot(WorldPackets::Neighborhood::Neigh
}
}
TC_LOG_DEBUG("housing", "EvictPlayer result: {} for plot {} in neighborhood {}",
uint32(result), neighborhoodEvictPlot.PlotGuid.ToString(),
TC_LOG_DEBUG("housing", "EvictPlayer result: {} for plot index {} in neighborhood {}",
uint32(result), neighborhoodEvictPlot.PlotIndex,
neighborhoodEvictPlot.NeighborhoodGuid.ToString());
}
// ============================================================
// Neighborhood Initiative System
// ============================================================
void WorldSession::HandleNeighborhoodInitiativeServiceStatusCheck(WorldPackets::Neighborhood::NeighborhoodInitiativeServiceStatusCheck const& /*packet*/)
{
Player* player = GetPlayer();
if (!player)
return;
TC_LOG_DEBUG("housing", "CMSG_NEIGHBORHOOD_INITIATIVE_SERVICE_STATUS_CHECK for player {}",
player->GetGUID().ToString());
// Respond with initiative service status (service is available)
WorldPackets::Housing::InitiativeServiceStatus response;
response.ServiceEnabled = true;
SendPacket(response.Write());
}
void WorldSession::HandleGetAvailableInitiativeRequest(WorldPackets::Neighborhood::GetAvailableInitiativeRequest const& getAvailableInitiativeRequest)
{
Player* player = GetPlayer();
if (!player)
return;
TC_LOG_DEBUG("housing", "CMSG_GET_AVAILABLE_INITIATIVE_REQUEST NeighborhoodGuid: {}",
getAvailableInitiativeRequest.NeighborhoodGuid.ToString());
// Respond with empty initiative list for now
WorldPackets::Housing::GetPlayerInitiativeInfoResult response;
response.Result = static_cast<uint32>(HOUSING_RESULT_SUCCESS);
SendPacket(response.Write());
}
void WorldSession::HandleGetInitiativeActivityLogRequest(WorldPackets::Neighborhood::GetInitiativeActivityLogRequest const& getInitiativeActivityLogRequest)
{
Player* player = GetPlayer();
if (!player)
return;
TC_LOG_DEBUG("housing", "CMSG_GET_INITIATIVE_ACTIVITY_LOG_REQUEST NeighborhoodGuid: {}",
getInitiativeActivityLogRequest.NeighborhoodGuid.ToString());
// Respond with empty activity log
WorldPackets::Housing::GetInitiativeActivityLogResult response;
response.Result = static_cast<uint32>(HOUSING_RESULT_SUCCESS);
SendPacket(response.Write());
}
+2 -1
View File
@@ -39,6 +39,7 @@ public:
struct PlotInfo
{
uint8 PlotIndex = 0;
ObjectGuid PlotGuid;
ObjectGuid OwnerGuid;
ObjectGuid HouseGuid;
ObjectGuid OwnerBnetGuid;
@@ -82,7 +83,7 @@ public:
// Plot management
HousingResult PurchasePlot(ObjectGuid playerGuid, uint8 plotIndex);
void UpdatePlotHouseInfo(uint8 plotIndex, ObjectGuid houseGuid, ObjectGuid ownerBnetGuid);
HousingResult MoveHouse(ObjectGuid sourcePlotGuid, uint8 newPlotIndex);
HousingResult MoveHouse(ObjectGuid sourcePlotOwner, uint8 newPlotIndex);
PlotInfo const* GetPlotInfo(uint8 plotIndex) const;
std::vector<PlotInfo> const& GetPlots() const { return _plots; }
@@ -274,6 +274,16 @@ std::string NeighborhoodMgr::GetNeighborhoodName(ObjectGuid neighborhoodGuid) co
return "";
}
Neighborhood* NeighborhoodMgr::FindNeighborhoodWithPendingInvite(ObjectGuid playerGuid)
{
for (auto const& [guid, neighborhood] : _neighborhoods)
{
if (neighborhood->HasPendingInvite(playerGuid))
return neighborhood.get();
}
return nullptr;
}
Neighborhood* NeighborhoodMgr::FindOrCreateTutorialNeighborhood(ObjectGuid playerGuid, uint32 teamId)
{
// Check if player already belongs to a neighborhood
@@ -52,6 +52,7 @@ public:
std::vector<Neighborhood*> GetPublicNeighborhoods() const;
std::vector<Neighborhood*> GetNeighborhoodsForPlayer(ObjectGuid playerGuid) const;
std::string GetNeighborhoodName(ObjectGuid neighborhoodGuid) const;
Neighborhood* FindNeighborhoodWithPendingInvite(ObjectGuid playerGuid);
// Tutorial support
Neighborhood* FindOrCreateTutorialNeighborhood(ObjectGuid playerGuid, uint32 teamId);
@@ -243,9 +243,9 @@ namespace WorldPackets::Housing
void HousingSvcsGuildCreateNeighborhood::Read()
{
_worldPacket >> NeighborhoodTypeID;
_worldPacket >> Flags;
_worldPacket >> SizedString::BitsSize<7>(NeighborhoodName);
_worldPacket >> Flags;
_worldPacket >> SizedString::Data(NeighborhoodName);
}
@@ -936,6 +936,29 @@ namespace WorldPackets::Housing
return &_worldPacket;
}
// ============================================================
// Initiative System SMSG Responses (0x4203xx)
// ============================================================
WorldPacket const* InitiativeServiceStatus::Write()
{
_worldPacket.WriteBit(ServiceEnabled);
_worldPacket.FlushBits();
return &_worldPacket;
}
WorldPacket const* GetPlayerInitiativeInfoResult::Write()
{
_worldPacket << uint32(Result);
return &_worldPacket;
}
WorldPacket const* GetInitiativeActivityLogResult::Write()
{
_worldPacket << uint32(Result);
return &_worldPacket;
}
} // namespace WorldPackets::Housing
// ============================================================
@@ -978,7 +1001,6 @@ namespace WorldPackets::Neighborhood
void NeighborhoodUpdateName::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> SizedString::BitsSize<7>(NewName);
_worldPacket >> SizedString::Data(NewName);
@@ -992,25 +1014,21 @@ namespace WorldPackets::Neighborhood
void NeighborhoodAddSecondaryOwner::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlayerGuid;
}
void NeighborhoodRemoveSecondaryOwner::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlayerGuid;
}
void NeighborhoodInviteResident::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlayerGuid;
}
void NeighborhoodCancelInvitation::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> InviteeGuid;
}
@@ -1019,36 +1037,27 @@ namespace WorldPackets::Neighborhood
_worldPacket >> NeighborhoodGuid;
}
void NeighborhoodPlayerGetInvite::Read()
{
_worldPacket >> NeighborhoodGuid;
}
void NeighborhoodGetInvites::Read()
{
_worldPacket >> NeighborhoodGuid;
}
void NeighborhoodBuyHouse::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlotIndex;
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlotGuid;
}
void NeighborhoodMoveHouse::Read()
{
_worldPacket >> SourcePlotGuid;
_worldPacket >> NewPlotIndex;
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlotGuid;
}
void NeighborhoodOpenCornerstoneUI::Read()
{
_worldPacket >> CornerstoneGuid;
_worldPacket >> PlotIndex;
_worldPacket >> NeighborhoodGuid;
}
void NeighborhoodOfferOwnership::Read()
{
_worldPacket >> NeighborhoodGuid;
_worldPacket >> NewOwnerGuid;
}
@@ -1059,8 +1068,8 @@ namespace WorldPackets::Neighborhood
void NeighborhoodEvictPlot::Read()
{
_worldPacket >> PlotIndex;
_worldPacket >> NeighborhoodGuid;
_worldPacket >> PlotGuid;
}
// ============================================================
@@ -1314,4 +1323,16 @@ namespace WorldPackets::Neighborhood
return &_worldPacket;
}
// --- Initiative System ---
void GetAvailableInitiativeRequest::Read()
{
_worldPacket >> NeighborhoodGuid;
}
void GetInitiativeActivityLogRequest::Read()
{
_worldPacket >> NeighborhoodGuid;
}
} // namespace WorldPackets::Neighborhood
+62 -18
View File
@@ -400,7 +400,7 @@ namespace WorldPackets::Housing
uint32 NeighborhoodTypeID = 0;
std::string NeighborhoodName;
uint32 Flags = 0;
uint8 Flags = 0;
};
class HousingSvcsNeighborhoodReservePlot final : public ClientPacket
@@ -1342,6 +1342,34 @@ namespace WorldPackets::Housing
WorldPacket const* Write() override;
ObjectGuid NeighborhoodGuid;
};
// ============================================================
// Initiative System SMSG Responses (0x4203xx)
// ============================================================
class InitiativeServiceStatus final : public ServerPacket
{
public:
InitiativeServiceStatus() : ServerPacket(SMSG_INITIATIVE_SERVICE_STATUS) {}
WorldPacket const* Write() override;
bool ServiceEnabled = false;
};
class GetPlayerInitiativeInfoResult final : public ServerPacket
{
public:
GetPlayerInitiativeInfoResult() : ServerPacket(SMSG_GET_PLAYER_INITIATIVE_INFO_RESULT) {}
WorldPacket const* Write() override;
uint32 Result = 0;
};
class GetInitiativeActivityLogResult final : public ServerPacket
{
public:
GetInitiativeActivityLogResult() : ServerPacket(SMSG_GET_INITIATIVE_ACTIVITY_LOG_RESULT) {}
WorldPacket const* Write() override;
uint32 Result = 0;
};
}
namespace WorldPackets::Neighborhood
@@ -1421,7 +1449,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
std::string NewName;
};
@@ -1443,7 +1470,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid PlayerGuid;
};
@@ -1454,7 +1480,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid PlayerGuid;
};
@@ -1465,7 +1490,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid PlayerGuid;
};
@@ -1476,7 +1500,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid InviteeGuid;
};
@@ -1495,9 +1518,7 @@ namespace WorldPackets::Neighborhood
public:
explicit NeighborhoodPlayerGetInvite(WorldPacket&& packet) : ClientPacket(CMSG_NEIGHBORHOOD_PLAYER_GET_INVITE, std::move(packet)) {}
void Read() override;
ObjectGuid NeighborhoodGuid;
void Read() override {}
};
class NeighborhoodGetInvites final : public ClientPacket
@@ -1505,9 +1526,7 @@ namespace WorldPackets::Neighborhood
public:
explicit NeighborhoodGetInvites(WorldPacket&& packet) : ClientPacket(CMSG_NEIGHBORHOOD_GET_INVITES, std::move(packet)) {}
void Read() override;
ObjectGuid NeighborhoodGuid;
void Read() override {}
};
class NeighborhoodBuyHouse final : public ClientPacket
@@ -1518,7 +1537,8 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
uint8 PlotIndex = 0;
ObjectGuid PlotGuid;
uint32 PlotIndex = 0;
};
class NeighborhoodMoveHouse final : public ClientPacket
@@ -1528,8 +1548,8 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid SourcePlotGuid;
uint8 NewPlotIndex = 0;
ObjectGuid NeighborhoodGuid;
ObjectGuid PlotGuid;
};
class NeighborhoodOpenCornerstoneUI final : public ClientPacket
@@ -1539,7 +1559,8 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid CornerstoneGuid;
ObjectGuid NeighborhoodGuid;
uint32 PlotIndex = 0;
};
class NeighborhoodOfferOwnership final : public ClientPacket
@@ -1549,7 +1570,6 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid NewOwnerGuid;
};
@@ -1571,7 +1591,7 @@ namespace WorldPackets::Neighborhood
void Read() override;
ObjectGuid NeighborhoodGuid;
ObjectGuid PlotGuid;
uint32 PlotIndex = 0;
};
// ============================================================
@@ -1871,6 +1891,30 @@ namespace WorldPackets::Neighborhood
ObjectGuid NeighborhoodGuid;
ObjectGuid PlotGuid;
};
// --- Initiative System ---
class NeighborhoodInitiativeServiceStatusCheck final : public ClientPacket
{
public:
NeighborhoodInitiativeServiceStatusCheck(WorldPacket&& packet) : ClientPacket(CMSG_NEIGHBORHOOD_INITIATIVE_SERVICE_STATUS_CHECK, std::move(packet)) {}
void Read() override {}
};
class GetAvailableInitiativeRequest final : public ClientPacket
{
public:
GetAvailableInitiativeRequest(WorldPacket&& packet) : ClientPacket(CMSG_GET_AVAILABLE_INITIATIVE_REQUEST, std::move(packet)) {}
void Read() override;
ObjectGuid NeighborhoodGuid;
};
class GetInitiativeActivityLogRequest final : public ClientPacket
{
public:
GetInitiativeActivityLogRequest(WorldPacket&& packet) : ClientPacket(CMSG_GET_INITIATIVE_ACTIVITY_LOG_REQUEST, std::move(packet)) {}
void Read() override;
ObjectGuid NeighborhoodGuid;
};
}
#endif // TRINITYCORE_HOUSING_PACKETS_H
+6 -6
View File
@@ -489,12 +489,12 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GET_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_ACCOUNT_NOTIFICATIONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_ALL_LICENSED_DECOR_QUANTITIES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_AVAILABLE_INITIATIVE_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_AVAILABLE_INITIATIVE_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetAvailableInitiativeRequest);
DEFINE_HANDLER(CMSG_GET_CHARACTER_CURRENCY_TRANSFER_LOG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_CLIENT_CHECKOUT_LICENSES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_DECOR_REFUND_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_GARRISON_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetGarrisonInfo);
DEFINE_HANDLER(CMSG_GET_INITIATIVE_ACTIVITY_LOG_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_INITIATIVE_ACTIVITY_LOG_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetInitiativeActivityLogRequest);
DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGetItemPurchaseData);
DEFINE_HANDLER(CMSG_GET_LANDING_PAGE_SHIPMENTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_LAST_CATALOG_FETCH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -800,7 +800,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_EVICT_PLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodEvictPlot);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_GET_INVITES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodGetInvites);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_GET_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodGetRoster);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_INITIATIVE_SERVICE_STATUS_CHECK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_INITIATIVE_SERVICE_STATUS_CHECK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodInitiativeServiceStatusCheck);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_INVITE_RESIDENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodInviteResident);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_MOVE_HOUSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodMoveHouse);
DEFINE_HANDLER(CMSG_NEIGHBORHOOD_OFFER_OWNERSHIP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNeighborhoodOfferOwnership);
@@ -1625,10 +1625,10 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_ALL_LICENSED_DECOR_QUANTITIES_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_DECOR_REFUND_LIST_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_GARRISON_INFO_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_INITIATIVE_ACTIVITY_LOG_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_INITIATIVE_ACTIVITY_LOG_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_INITIATIVE_REWARDS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_PLAYER_INITIATIVE_INFO_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_PLAYER_INITIATIVE_INFO_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_REALM_HIDDEN_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_REMAINING_GAME_TIME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GET_SELECTED_TROPHY_ID_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1785,7 +1785,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIAL_SETUP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIATIVE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIATIVE_REWARD_AVAILABLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIATIVE_SERVICE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIATIVE_SERVICE_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INITIATIVE_TASK_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSPECT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+6
View File
@@ -513,6 +513,9 @@ namespace WorldPackets
class NeighborhoodOfferOwnership;
class NeighborhoodGetRoster;
class NeighborhoodEvictPlot;
class NeighborhoodInitiativeServiceStatusCheck;
class GetAvailableInitiativeRequest;
class GetInitiativeActivityLogRequest;
}
namespace Inspect
@@ -1651,6 +1654,9 @@ class TC_GAME_API WorldSession
void HandleNeighborhoodOfferOwnership(WorldPackets::Neighborhood::NeighborhoodOfferOwnership const& neighborhoodOfferOwnership);
void HandleNeighborhoodGetRoster(WorldPackets::Neighborhood::NeighborhoodGetRoster const& neighborhoodGetRoster);
void HandleNeighborhoodEvictPlot(WorldPackets::Neighborhood::NeighborhoodEvictPlot const& neighborhoodEvictPlot);
void HandleNeighborhoodInitiativeServiceStatusCheck(WorldPackets::Neighborhood::NeighborhoodInitiativeServiceStatusCheck const& packet);
void HandleGetAvailableInitiativeRequest(WorldPackets::Neighborhood::GetAvailableInitiativeRequest const& getAvailableInitiativeRequest);
void HandleGetInitiativeActivityLogRequest(WorldPackets::Neighborhood::GetInitiativeActivityLogRequest const& getInitiativeActivityLogRequest);
void HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode);
void HandleTaxiNodeStatusQueryOpcode(WorldPackets::Taxi::TaxiNodeStatusQuery& taxiNodeStatusQuery);