diff --git a/src/common/Util/SpawnIndexAllocator.h b/src/common/Util/SpawnIndexAllocator.h index 4ddfcc79..500339eb 100644 --- a/src/common/Util/SpawnIndexAllocator.h +++ b/src/common/Util/SpawnIndexAllocator.h @@ -37,7 +37,7 @@ namespace Sapphire::Util { auto it = m_actorIdToAllocatedMap.find( actorId ); if( it == m_actorIdToAllocatedMap.end() ) - return 0; + return getAllocFailId(); auto index = it->second; m_availableIds.push( index ); diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index f7e2c317..a4cc4d05 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1127,11 +1127,14 @@ void Sapphire::Entity::Player::freePlayerSpawnId( uint32_t actorId ) { auto spawnId = m_actorSpawnIndexAllocator.freeUsedSpawnIndex( actorId ); + // actor was never spawned for this player + if( spawnId == m_actorSpawnIndexAllocator.getAllocFailId() ) + return; + auto freeActorSpawnPacket = makeZonePacket< FFXIVIpcActorFreeSpawn >( getId() ); freeActorSpawnPacket->data().actorId = actorId; freeActorSpawnPacket->data().spawnId = spawnId; queuePacket( freeActorSpawnPacket ); - } uint8_t* Sapphire::Entity::Player::getAetheryteArray() @@ -1844,6 +1847,10 @@ void Sapphire::Entity::Player::freeObjSpawnIndexForActorId( uint32_t actorId ) { auto spawnId = m_objSpawnIndexAllocator.freeUsedSpawnIndex( actorId ); + // obj was never spawned for this player + if( spawnId == m_objSpawnIndexAllocator.getAllocFailId() ) + return; + auto freeObjectSpawnPacket = makeZonePacket< FFXIVIpcObjectDespawn >( getId() ); freeObjectSpawnPacket->data().spawnIndex = spawnId; queuePacket( freeObjectSpawnPacket ); diff --git a/src/world/Territory/CellHandler.h b/src/world/Territory/CellHandler.h index bfcdac52..3faca439 100644 --- a/src/world/Territory/CellHandler.h +++ b/src/world/Territory/CellHandler.h @@ -3,7 +3,7 @@ #include #define TilesCount 32 -#define TileSize 250.0f +#define TileSize 500.0f #define _minY (-TilesCount*TileSize/2) #define _minX (-TilesCount*TileSize/2) diff --git a/src/world/Territory/Zone.cpp b/src/world/Territory/Zone.cpp index e1bfb528..f7d56d10 100644 --- a/src/world/Territory/Zone.cpp +++ b/src/world/Territory/Zone.cpp @@ -645,7 +645,7 @@ void Sapphire::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell ) auto iter = pCell->m_actors.begin(); - float fRange = 70.0f; + float fRange = 150.0f; int32_t count = 0; while( iter != pCell->m_actors.end() ) { @@ -655,8 +655,7 @@ void Sapphire::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell ) if( !pCurAct || pCurAct == pActor ) continue; - float distance = Util::distance( pCurAct->getPos().x, pCurAct->getPos().y, pCurAct->getPos().z, - pActor->getPos().x, pActor->getPos().y, pActor->getPos().z ); + float distance = Util::distance( pCurAct->getPos(), pActor->getPos() ); bool isInRange = ( fRange == 0.0f || distance <= fRange ); bool isInRangeSet = pActor->isInRangeSet( pCurAct );