diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index f78a9cd3..e21d1427 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -2079,7 +2079,7 @@ namespace Sapphire::Network::Packets::Server uint16_t rotation; int16_t unknown24a; int16_t unknown24b; - uint16_t unknown28a; + uint16_t flag; int16_t unknown28c; uint32_t housingLink; Common::FFXIVARR_POSITION3 position; diff --git a/src/world/Actor/EventObject.cpp b/src/world/Actor/EventObject.cpp index 7287d01f..a5620e94 100644 --- a/src/world/Actor/EventObject.cpp +++ b/src/world/Actor/EventObject.cpp @@ -25,7 +25,8 @@ Sapphire::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, m_state( initialState ), m_objectId( objectId ), m_name( givenName ), - m_housingLink( 0 ) + m_housingLink( 0 ), + m_flag( 0 ) { m_id = actorId; m_pos.x = pos.x; @@ -84,6 +85,12 @@ void Sapphire::Entity::EventObject::setState( uint8_t state ) } } +uint8_t Sapphire::Entity::EventObject::getFlag() const +{ + return m_flag; +} + + void Sapphire::Entity::EventObject::setAnimationFlag( uint32_t flag, uint32_t animationFlag ) { for( const auto& player : m_inRangePlayers ) @@ -131,6 +138,7 @@ void Sapphire::Entity::EventObject::spawn( Sapphire::Entity::PlayerPtr pTarget ) eobjStatePacket->data().actorId = getId(); eobjStatePacket->data().housingLink = getHousingLink(); eobjStatePacket->data().rotation = Util::floatToUInt16Rot( getRot() ); + eobjStatePacket->data().flag = getFlag(); pTarget->queuePacket( eobjStatePacket ); } diff --git a/src/world/Actor/EventObject.h b/src/world/Actor/EventObject.h index 7b38f64d..f2ae6d05 100644 --- a/src/world/Actor/EventObject.h +++ b/src/world/Actor/EventObject.h @@ -25,6 +25,8 @@ namespace Sapphire::Entity float getScale() const; + uint8_t getFlag() const; + void setScale( float scale ); void setOnTalkHandler( OnTalkEventHandler handler ); @@ -54,6 +56,7 @@ namespace Sapphire::Entity uint32_t m_gimmickId; uint32_t m_objectId; uint8_t m_state; + uint8_t m_flag; float m_scale; std::string m_name; TerritoryPtr m_parentInstance; diff --git a/src/world/Actor/PlayerSql.cpp b/src/world/Actor/PlayerSql.cpp index b1f056f1..6c145cbb 100644 --- a/src/world/Actor/PlayerSql.cpp +++ b/src/world/Actor/PlayerSql.cpp @@ -214,7 +214,7 @@ bool Sapphire::Entity::Player::load( uint32_t charId, World::SessionPtr pSession m_mount = res->getUInt8( "Mount" ); - m_modelSubWeapon = 0; + m_modelSubWeapon = getModelSubWeapon(); m_lastTickTime = 0; // first login, run the script event diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index 612ab4f9..2fea49fa 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -227,9 +227,21 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& { player.setLevelForClass( 1, static_cast< Common::ClassJob > ( id ) ); player.setClassJob( static_cast< Common::ClassJob > ( id ) ); + player.sendModel(); + player.sendItemLevel(); + player.calculateStats(); + player.sendStats(); + player.sendStatusEffectUpdate(); + player.sendStatusUpdate(); } else player.setClassJob( static_cast< Common::ClassJob > ( id ) ); + player.sendModel(); + player.sendItemLevel(); + player.calculateStats(); + player.sendStats(); + player.sendStatusEffectUpdate(); + player.sendStatusUpdate(); } else if( subCommand == "cfpenalty" ) { diff --git a/src/world/Manager/TerritoryMgr.h b/src/world/Manager/TerritoryMgr.h index 88935a5f..9401a6a9 100644 --- a/src/world/Manager/TerritoryMgr.h +++ b/src/world/Manager/TerritoryMgr.h @@ -42,6 +42,7 @@ namespace Sapphire::World::Manager AllianceRaid = 8, OpenWorldInstanceBattle = 9, Trial = 10, + RaidPublicArea = 12, HousingArea = 13, HousingPrivateArea = 14, MSQPrivateArea = 15, @@ -49,14 +50,24 @@ namespace Sapphire::World::Manager RaidFights = 17, ChocoboTutorial = 21, Wedding = 22, + DiademV1 = 26, BeginnerTutorial = 27, + PvPTheFeast = 28, + MSQEventArea = 29, FreeCompanyGarrison = 30, PalaceOfTheDead = 31, TreasureMapInstance = 33, EventTrial = 36, - TheFeastArea = 37, + TheFeastArea = 37, //custom match? + DiademV2 = 38, PrivateEventArea = 40, - //Eureka = 41, // wat + Eureka = 41, // wat + TheFeastCrystalTower = 42, + LeapOfFaith = 44, + MaskedCarnival = 45, + OceanFishing = 46, + DiademV3 = 47, + Bozja = 48, }; TerritoryMgr(); diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index 285df66d..3e1bb620 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -250,7 +250,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX { player.setPose( static_cast< uint8_t >( param12 ) ); auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, param11, param12 ); - player.sendToInRangeSet( pSetStatusPacket, true ); + player.sendToInRangeSet( pSetStatusPacket, false ); break; } case ClientTriggerType::Return: // return dead / accept raise diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index c68fab97..af3b5335 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -612,7 +612,7 @@ void Sapphire::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACK const auto param4 = packet.data().param4; const auto target = std::string( packet.data().target ); - Logger::debug( "{0} used GM2 commandId: {1}, params: {2}, {3}, {4}, {5}, target: {6}", + Logger::info( "{0} used GM2 commandId: {1}, params: {2}, {3}, {4}, {5}, target: {6}", player.getName(), commandId, param1, param2, param3, param4, target ); auto targetSession = serverMgr.getSession( target ); @@ -649,8 +649,6 @@ void Sapphire::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACK targetPlayer->setStatus( Common::ActorStatus::Idle ); targetPlayer->sendZoneInPackets( 0x01, 0x01, 0, 113, true ); - - targetPlayer->sendToInRangeSet( makeActorControlSelf( player.getId(), ZoneIn, 0x01, 0x01, 0, 113 ), true ); targetPlayer->sendToInRangeSet( makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ), true );