From 979059401673b0b83ce6b83a641b89fe4d1352ea Mon Sep 17 00:00:00 2001 From: goaaats Date: Thu, 8 Feb 2018 15:05:29 +0100 Subject: [PATCH 1/3] Implement correct handling for private areas --- src/servers/sapphire_zone/Actor/Actor.cpp | 5 +++++ src/servers/sapphire_zone/Actor/Player.cpp | 3 +++ .../sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h | 2 -- src/servers/sapphire_zone/Zone/TerritoryMgr.cpp | 3 ++- src/servers/sapphire_zone/Zone/Zone.cpp | 4 ++++ 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Actor.cpp b/src/servers/sapphire_zone/Actor/Actor.cpp index 657f7947..227657cf 100644 --- a/src/servers/sapphire_zone/Actor/Actor.cpp +++ b/src/servers/sapphire_zone/Actor/Actor.cpp @@ -22,9 +22,11 @@ #include "Math/CalcBattle.h" #include "Actor.h" #include "Player.h" +#include "Zone/TerritoryMgr.h" extern Core::ServerZone g_serverZone; extern Core::Data::ExdDataGenerated g_exdDataGen; +extern Core::TerritoryMgr g_territoryMgr; using namespace Core::Common; using namespace Core::Network::Packets; @@ -510,6 +512,9 @@ void Core::Entity::Actor::sendToInRangeSet( Network::Packets::GamePacketPtr pPac pSession->getZoneConnection()->queueOutPacket( pPacket ); } + if( g_territoryMgr.isPrivateTerritory( getCurrentZone()->getTerritoryId() ) ) + return; + if( m_inRangePlayers.empty() ) return; diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 058623f0..ca71b217 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -825,6 +825,9 @@ void Core::Entity::Player::setLookAt( uint8_t index, uint8_t value ) // spawn this player for pTarget void Core::Entity::Player::spawn( Entity::PlayerPtr pTarget ) { + if( g_territoryMgr.isPrivateTerritory( getCurrentZone()->getTerritoryId() ) && pTarget->getId() != getId() ) + return; + g_log.debug( "[" + std::to_string( pTarget->getId() ) + "] Spawning " + getName() + " for " + pTarget->getName() ); diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h index 61ad14fd..9c367aa9 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -32,8 +32,6 @@ namespace Server { void initialize( Entity::Player& player, Entity::Player& target ) { // todo: figure out unkown offsets - // TODO: temporary gm rank - //m_data.gmRank = 0xff; m_data.classJob = static_cast< uint8_t >( player.getClass() ); //m_data.status = static_cast< uint8_t >( pPlayer->getStatus() ); diff --git a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp index 5c27c224..9c85b02f 100644 --- a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp +++ b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp @@ -116,7 +116,8 @@ bool Core::TerritoryMgr::createDefaultTerritories() "\t" + std::to_string( guid ) + "\t" + std::to_string( territoryInfo->territoryIntendedUse ) + "\t" + territoryInfo->name + - "\t" + pPlaceName->name ); + "\t" + pPlaceName->name + + "\t" + ( isPrivateTerritory( territoryId ) ? "PRIVATE" : "PUBLIC" ) ); ZonePtr pZone( new Zone( territoryId, guid, territoryInfo->name, pPlaceName->name ) ); pZone->init(); diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index bb79c84c..45868d8e 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -35,6 +35,7 @@ extern Core::Logger g_log; extern Core::ServerZone g_serverZone; extern Core::Data::ExdDataGenerated g_exdDataGen; extern Core::Scripting::ScriptManager g_scriptMgr; +extern Core::TerritoryMgr g_territoryMgr; namespace Core { @@ -369,6 +370,9 @@ void Zone::removeActor( Entity::ActorPtr pActor ) void Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, Network::Packets::GamePacketPtr pPacketEntry ) { + if( g_territoryMgr.isPrivateTerritory( getTerritoryId() ) ) + return; + for( auto it = m_playerMap.begin(); it != m_playerMap.end(); ++it ) { float distance = Math::Util::distance( sourcePlayer.getPos().x, From cb787b44f57bbf6c702039000f758dc22bd8b435 Mon Sep 17 00:00:00 2001 From: goaaats Date: Thu, 8 Feb 2018 15:25:59 +0100 Subject: [PATCH 2/3] Handle via inRangeSet --- src/servers/sapphire_zone/Actor/Actor.cpp | 3 --- src/servers/sapphire_zone/Actor/Player.cpp | 3 --- src/servers/sapphire_zone/Zone/Zone.cpp | 3 +++ 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Actor.cpp b/src/servers/sapphire_zone/Actor/Actor.cpp index 227657cf..a87e9c9b 100644 --- a/src/servers/sapphire_zone/Actor/Actor.cpp +++ b/src/servers/sapphire_zone/Actor/Actor.cpp @@ -512,9 +512,6 @@ void Core::Entity::Actor::sendToInRangeSet( Network::Packets::GamePacketPtr pPac pSession->getZoneConnection()->queueOutPacket( pPacket ); } - if( g_territoryMgr.isPrivateTerritory( getCurrentZone()->getTerritoryId() ) ) - return; - if( m_inRangePlayers.empty() ) return; diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index ca71b217..058623f0 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -825,9 +825,6 @@ void Core::Entity::Player::setLookAt( uint8_t index, uint8_t value ) // spawn this player for pTarget void Core::Entity::Player::spawn( Entity::PlayerPtr pTarget ) { - if( g_territoryMgr.isPrivateTerritory( getCurrentZone()->getTerritoryId() ) && pTarget->getId() != getId() ) - return; - g_log.debug( "[" + std::to_string( pTarget->getId() ) + "] Spawning " + getName() + " for " + pTarget->getName() ); diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 45868d8e..ce9afa56 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -725,6 +725,9 @@ void Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell ) if( pCell == nullptr ) return; + if( g_territoryMgr.isPrivateTerritory( getTerritoryId() ) ) + return; + Entity::ActorPtr pCurAct; auto iter = pCell->m_actors.begin(); From abf1194a7ae2b6568c936b9690cfb9256f834ee5 Mon Sep 17 00:00:00 2001 From: Mordred <30826167+SapphireMordred@users.noreply.github.com> Date: Thu, 8 Feb 2018 15:29:46 +0100 Subject: [PATCH 3/3] comment added --- src/servers/sapphire_zone/Zone/Zone.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index ce9afa56..7e67c7ca 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -725,6 +725,7 @@ void Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell ) if( pCell == nullptr ) return; + // TODO: make sure gms can overwrite this. Potentially temporary solution if( g_territoryMgr.isPrivateTerritory( getTerritoryId() ) ) return;