Skip to content

Commit cbdc84c

Browse files
committed
Don't reveal enemy team factions to players.
Closes #2968
1 parent 91f6a78 commit cbdc84c

4 files changed

Lines changed: 9 additions & 21 deletions

File tree

src/game/Database/DBCStructure.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,11 @@ struct FactionTemplateEntry
385385
}
386386
return (hostileMask & entry.ourMask) != 0;
387387
}
388+
bool IsHostileToPlayerTeam(FactionTemplateEntry const& entry) const
389+
{
390+
return ((hostileMask & entry.ourMask) & (FACTION_MASK_ALLIANCE | FACTION_MASK_HORDE)) != 0 ||
391+
((ourMask & entry.hostileMask) & (FACTION_MASK_ALLIANCE | FACTION_MASK_HORDE)) != 0;
392+
}
388393
bool IsHostileToPlayers() const { return (hostileMask & FACTION_MASK_PLAYER) !=0; }
389394
bool IsNeutralToAll() const
390395
{

src/game/Handlers/MiscHandler.cpp

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -422,23 +422,6 @@ void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recv_data)
422422
}
423423
}
424424

425-
void WorldSession::HandleSetTargetOpcode(WorldPacket& recv_data)
426-
{
427-
// When this packet send?
428-
ObjectGuid guid ;
429-
recv_data >> guid;
430-
431-
_player->SetTargetGuid(guid);
432-
433-
// update reputation list if need
434-
Unit* unit = ObjectAccessor::GetUnit(*_player, guid); // can select group members at diff maps
435-
if (!unit)
436-
return;
437-
438-
if (FactionTemplateEntry const* factionTemplateEntry = sObjectMgr.GetFactionTemplateEntry(unit->GetFactionTemplateId()))
439-
_player->GetReputationMgr().SetVisible(factionTemplateEntry);
440-
}
441-
442425
void WorldSession::HandleSetSelectionOpcode(WorldPacket& recv_data)
443426
{
444427
ObjectGuid guid;
@@ -450,8 +433,9 @@ void WorldSession::HandleSetSelectionOpcode(WorldPacket& recv_data)
450433
Unit* unit = ObjectAccessor::GetUnit(*_player, guid); // can select group members at diff maps
451434

452435
if (unit)
453-
if (FactionTemplateEntry const* factionTemplateEntry = sObjectMgr.GetFactionTemplateEntry(unit->GetFactionTemplateId()))
454-
_player->GetReputationMgr().SetVisible(factionTemplateEntry);
436+
if (FactionTemplateEntry const* factionTemplateEntry = unit->GetFactionTemplateEntry())
437+
if (!factionTemplateEntry->IsHostileToPlayerTeam(*_player->GetFactionTemplateEntry()))
438+
_player->GetReputationMgr().SetVisible(factionTemplateEntry);
455439

456440
// Drop combo points only for rogues and druids
457441
// Warriors use combo points internally, do no reset for everyone

src/game/Protocol/Opcodes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ void Opcodes::BuildOpcodeList()
381381
/*0x13B*/ StoreOpcode(CMSG_CANCEL_CHANNELLING, "CMSG_CANCEL_CHANNELLING", STATUS_LOGGEDIN, PACKET_PROCESS_SPELLS, &WorldSession::HandleCancelChanneling);
382382
/*0x13C*/ StoreOpcode(SMSG_AI_REACTION, "SMSG_AI_REACTION", STATUS_NEVER, PACKET_PROCESS_MAX_TYPE, &WorldSession::Handle_ServerSide);
383383
/*0x13D*/ StoreOpcode(CMSG_SET_SELECTION, "CMSG_SET_SELECTION", STATUS_LOGGEDIN, PACKET_PROCESS_SPELLS, &WorldSession::HandleSetSelectionOpcode);
384-
/*0x13E*/ StoreOpcode(CMSG_SET_TARGET_OBSOLETE, "CMSG_SET_TARGET_OBSOLETE", STATUS_LOGGEDIN, PACKET_PROCESS_SPELLS, &WorldSession::HandleSetTargetOpcode);
384+
/*0x13E*/ StoreOpcode(CMSG_SET_TARGET_OBSOLETE, "CMSG_SET_TARGET_OBSOLETE", STATUS_LOGGEDIN, PACKET_PROCESS_SPELLS, &WorldSession::HandleSetSelectionOpcode);
385385
/*0x13F*/ StoreOpcode(CMSG_UNUSED, "CMSG_UNUSED", STATUS_NEVER, PACKET_PROCESS_MAX_TYPE, &WorldSession::Handle_NULL);
386386
/*0x140*/ StoreOpcode(CMSG_UNUSED2, "CMSG_UNUSED2", STATUS_NEVER, PACKET_PROCESS_MAX_TYPE, &WorldSession::Handle_NULL);
387387
/*0x141*/ StoreOpcode(CMSG_ATTACKSWING, "CMSG_ATTACKSWING", STATUS_LOGGEDIN, PACKET_PROCESS_SPELLS, &WorldSession::HandleAttackSwingOpcode);

src/game/WorldSession.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,6 @@ class WorldSession
500500

501501
void HandleTogglePvP(WorldPacket& recvPacket);
502502
void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
503-
void HandleSetTargetOpcode(WorldPacket& recvPacket);
504503
void HandleSetSelectionOpcode(WorldPacket& recvPacket);
505504
void HandleStandStateChangeOpcode(WorldPacket& recvPacket);
506505
void HandleEmoteOpcode(WorldPacket& recvPacket);

0 commit comments

Comments
 (0)