From b89ac352273cae9af31a832f245df9997655311c Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Wed, 18 Apr 2018 21:00:20 +1000 Subject: [PATCH 01/11] Added a whole lot of GM Stuff Added Icons, Added Invis, Added Chat Types for what we have now --- src/servers/sapphire_api/PlayerMinimal.h | 11 ++++ src/servers/sapphire_zone/Actor/Player.cpp | 62 +++++++++++++++++-- src/servers/sapphire_zone/Actor/Player.h | 4 ++ .../Network/Handlers/GMCommandHandlers.cpp | 26 ++++++++ .../Network/Handlers/PacketHandlers.cpp | 9 +++ .../PacketWrappers/PlayerSpawnPacket.h | 2 +- 6 files changed, 108 insertions(+), 6 deletions(-) diff --git a/src/servers/sapphire_api/PlayerMinimal.h b/src/servers/sapphire_api/PlayerMinimal.h index 38019e10..7a3b31e1 100644 --- a/src/servers/sapphire_api/PlayerMinimal.h +++ b/src/servers/sapphire_api/PlayerMinimal.h @@ -150,6 +150,16 @@ namespace Core { m_gmRank = rank; } + bool getGminvis() const + { + return m_gmInvis; + } + + bool setGminvis( bool invis ) + { + m_gmInvis = invis; + } + void createInvDbContainer( uint16_t slot ) const; uint32_t m_modelEquip[10]; @@ -177,6 +187,7 @@ namespace Core { uint8_t m_look[26]; uint8_t m_gmRank; + bool m_gmInvis; char m_name[34]; diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 6ccc061f..e05308f4 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -132,6 +132,16 @@ void Core::Entity::Player::setGmRank( uint8_t rank ) m_gmRank = rank; } +bool Core::Entity::Player::getGmInvis() const +{ + return m_gmInvis; +} + +void Core::Entity::Player::setGmInvis( bool invis ) +{ + m_gmInvis = invis; +} + uint8_t Core::Entity::Player::getMode() const { return m_mode; @@ -167,6 +177,16 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() uint64_t ptMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::LookingforParty ); uint64_t rpMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Roleplaying ); + uint64_t prodMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Producer ); + uint64_t gmMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster ); + uint64_t gm1Mask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster1 ); + uint64_t gm2Mask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster2 ); + + uint64_t menMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Mentor ); + uint64_t retMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Returner ); + uint64_t trialMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::TrialAdventurer ); + + OnlineStatus status = OnlineStatus::Online; //if( hasStateFlag( Common::PlayerStateFlag::NewAdventurer ) ) @@ -191,6 +211,27 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() if( m_onlineStatus & rpMask ) status = OnlineStatus::Roleplaying; + if( m_onlineStatus & prodMask ) + status = OnlineStatus::Producer; + + if( m_onlineStatus & gmMask ) + status = OnlineStatus::GameMaster; + + if( m_onlineStatus & gm1Mask ) + status = OnlineStatus::GameMaster1; + + if( m_onlineStatus & gm2Mask ) + status = OnlineStatus::GameMaster2; + + if( m_onlineStatus & menMask ) + status = OnlineStatus::Mentor; + + if( m_onlineStatus & retMask ) + status = OnlineStatus::Returner; + + if( m_onlineStatus & trialMask ) + status = OnlineStatus::TrialAdventurer; + if( hasStateFlag( PlayerStateFlag::WatchingCutscene ) ) status = OnlineStatus::ViewingCutscene; @@ -1606,11 +1647,17 @@ void Core::Entity::Player::finishZoning() switch( getZoningType() ) { case ZoneingType::None: - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01 ), true ); + if (getGmInvis() == false) + sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01 ), true ); + else + queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01 ) ); break; case ZoneingType::Teleport: - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0, 0, 110 ), true ); + if( getGmInvis() == false ) + sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0, 0, 110 ), true ); + else + queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0, 0, 110 ) ); break; case ZoneingType::Return: @@ -1621,13 +1668,18 @@ void Core::Entity::Player::finishZoning() resetHp(); resetMp(); setStatus( Entity::Chara::ActorStatus::Idle ); - - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x01, 0, 111 ), true ); + if( getGmInvis() == false ) + sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x01, 0, 111 ), true ); + else + queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x01, 0, 111 ) ); sendToInRangeSet( ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ), true ); } else - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x00, 0, 111 ), true ); + if( getGmInvis() == false ) + sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x00, 0, 111 ), true ); + else + queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x00, 0, 111 ) ); } break; diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 8a6da096..9863d428 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -546,6 +546,9 @@ public: uint8_t getGmRank() const; void setGmRank( uint8_t rank ); + bool getGmInvis() const; + void setGmInvis( bool invis ); + uint8_t getMode() const; void setMode( uint8_t mode ); @@ -671,6 +674,7 @@ private: uint8_t m_stateFlags[12]; uint8_t m_gmRank; uint16_t zoneId; + bool m_gmInvis = false; uint8_t m_equipDisplayFlags; diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index f1470ff9..8c170ccc 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -224,6 +224,32 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac player.sendNotice( "Speed for " + targetPlayer->getName() + " was set to " + std::to_string( param1 ) ); break; } + case GmCommand::Invis: + { + if( targetPlayer->getGmInvis() == false ) { + targetPlayer->setGmInvis( true ); + auto inRange = targetPlayer->getInRangeActors(); + for( auto actor : inRange ) + { + targetPlayer->despawn( actor->getAsPlayer() ); + targetPlayer->spawn( actor->getAsPlayer() ); + } + player.sendNotice( "Invisibility flag for " + targetPlayer->getName() + " was toggled to on" ); + break; + } + else + { + targetPlayer->setGmInvis( false ); + auto inRange = targetPlayer->getInRangeActors(); + for( auto actor : inRange ) + { + targetPlayer->despawn( actor->getAsPlayer() ); + targetPlayer->spawn( actor->getAsPlayer() ); + } + player.sendNotice( "Invisibility flag for " + targetPlayer->getName() + " was toggled to off" ); + break; + } + } case GmCommand::Kill: { targetActor->getAsChara()->takeDamage( 9999999 ); diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 4ad33d62..76fb6a99 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -515,16 +515,25 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa { case ChatType::Say: { + if (player.getGmRank() > 0) + chatPacket.data().chatType = ChatType::GMSay; + player.getCurrentZone()->queueOutPacketForRange( player, 50, chatPacket ); break; } case ChatType::Yell: { + if( player.getGmRank() > 0 ) + chatPacket.data().chatType = ChatType::GMYell; + player.getCurrentZone()->queueOutPacketForRange( player, 6000, chatPacket ); break; } case ChatType::Shout: { + if( player.getGmRank() > 0 ) + chatPacket.data().chatType = ChatType::GMShout; + player.getCurrentZone()->queueOutPacketForRange( player, 6000, chatPacket ); break; } diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h index e3cdcb73..e35524b4 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -91,7 +91,7 @@ namespace Server { // 0x20 == spawn hidden to be displayed by the spawneffect control m_data.displayFlags = player.getStance(); - if( player.getZoningType() != Common::ZoneingType::None ) + if( player.getZoningType() != Common::ZoneingType::None || player.getGmInvis() == true ) { m_data.displayFlags |= Entity::Chara::DisplayFlags::Invisible; } From 96f0cafddc222997ac949f66719a5a05218923ca Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 17:57:43 +1000 Subject: [PATCH 02/11] Fixed Dat Style --- src/servers/sapphire_api/PlayerMinimal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/servers/sapphire_api/PlayerMinimal.h b/src/servers/sapphire_api/PlayerMinimal.h index 7a3b31e1..246a27bc 100644 --- a/src/servers/sapphire_api/PlayerMinimal.h +++ b/src/servers/sapphire_api/PlayerMinimal.h @@ -150,12 +150,12 @@ namespace Core { m_gmRank = rank; } - bool getGminvis() const + bool getGmInvis() const { return m_gmInvis; } - bool setGminvis( bool invis ) + bool setGmInvis( bool invis ) { m_gmInvis = invis; } From ab7d745e653f5baacc0acbfaef2fc8b26076422a Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:22:20 +1000 Subject: [PATCH 03/11] Added status priority and made the invis check better --- src/servers/sapphire_zone/Actor/Player.cpp | 128 ++++++------------ .../DebugCommand/DebugCommandHandler.cpp | 9 ++ 2 files changed, 54 insertions(+), 83 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index e05308f4..f77c5eb5 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -169,74 +169,32 @@ bool Core::Entity::Player::isMarkedForRemoval() const Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() { - uint64_t newMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::NewAdventurer ); - uint64_t afkMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::AwayfromKeyboard ); - uint64_t busyMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Busy ); - uint64_t dcMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Disconnected ); - uint64_t meldMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::LookingtoMeldMateria ); - uint64_t ptMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::LookingforParty ); - uint64_t rpMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Roleplaying ); + auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + if( !pExdData ) + return OnlineStatus::Online; - uint64_t prodMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Producer ); - uint64_t gmMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster ); - uint64_t gm1Mask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster1 ); - uint64_t gm2Mask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::GameMaster2 ); + uint32_t statusDisplayOrder = 0xFF14; + uint32_t applicableStatus = 0; - uint64_t menMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Mentor ); - uint64_t retMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::Returner ); - uint64_t trialMask = uint64_t( 1 ) << static_cast< uint32_t >( OnlineStatus::TrialAdventurer ); + for( uint32_t i = 0; i < 64; i++ ) + { + bool bit = ( m_onlineStatus >> i ) & 1; + if( !bit ) + continue; - OnlineStatus status = OnlineStatus::Online; + auto pOnlineStatus = pExdData->get< Data::OnlineStatus >( i ); + if( !pOnlineStatus ) + continue; - //if( hasStateFlag( Common::PlayerStateFlag::NewAdventurer ) ) - if( m_onlineStatus & newMask ) - status = OnlineStatus::NewAdventurer; - - if( m_onlineStatus & afkMask ) - status = OnlineStatus::AwayfromKeyboard; - - if( m_onlineStatus & busyMask ) - status = OnlineStatus::Busy; - - if( m_onlineStatus & dcMask ) - status = OnlineStatus::Disconnected; - - if( m_onlineStatus & meldMask ) - status = OnlineStatus::LookingtoMeldMateria; - - if( m_onlineStatus & ptMask ) - status = OnlineStatus::LookingforParty; - - if( m_onlineStatus & rpMask ) - status = OnlineStatus::Roleplaying; - - if( m_onlineStatus & prodMask ) - status = OnlineStatus::Producer; - - if( m_onlineStatus & gmMask ) - status = OnlineStatus::GameMaster; - - if( m_onlineStatus & gm1Mask ) - status = OnlineStatus::GameMaster1; - - if( m_onlineStatus & gm2Mask ) - status = OnlineStatus::GameMaster2; - - if( m_onlineStatus & menMask ) - status = OnlineStatus::Mentor; - - if( m_onlineStatus & retMask ) - status = OnlineStatus::Returner; - - if( m_onlineStatus & trialMask ) - status = OnlineStatus::TrialAdventurer; - - if( hasStateFlag( PlayerStateFlag::WatchingCutscene ) ) - status = OnlineStatus::ViewingCutscene; - - // TODO: add all the logic for returning the proper online status, there probably is a better way for this alltogether - return status; + if( pOnlineStatus->priority < statusDisplayOrder ) + { + // todo: also check that the status can actually be set here, otherwise we need to ignore it (and ban the player obv) + statusDisplayOrder = pOnlineStatus->priority; + applicableStatus = i; + return static_cast< OnlineStatus >( applicableStatus ); + } + } } void Core::Entity::Player::setOnlineStatusMask( uint64_t status ) @@ -1642,22 +1600,34 @@ void Core::Entity::Player::sendTitleList() queuePacket( titleListPacket ); } +void Core::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, bool pSetStatus = false ) +{ + auto zoneInPacket = ActorControlPacket143( getId(), ZoneIn, param1, param2, param3, param4 ); + auto SetStatusPacket = ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ); + + if( !Entity::Chara::Invisible ) + sendToInRangeSet( zoneInPacket, true ); + if( pSetStatus ) + sendToInRangeSet( SetStatusPacket ); + else + queuePacket( zoneInPacket ); + if (pSetStatus) + queuePacket( SetStatusPacket ); + + setZoningType( Common::ZoneingType::None ); + unsetStateFlag( PlayerStateFlag::BetweenAreas ); +} + void Core::Entity::Player::finishZoning() { switch( getZoningType() ) { case ZoneingType::None: - if (getGmInvis() == false) - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01 ), true ); - else - queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01 ) ); + sendZoneInPackets( 0x01 ); break; case ZoneingType::Teleport: - if( getGmInvis() == false ) - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0, 0, 110 ), true ); - else - queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0, 0, 110 ) ); + sendZoneInPackets( 0x01, 0, 0, 110 ); break; case ZoneingType::Return: @@ -1668,27 +1638,19 @@ void Core::Entity::Player::finishZoning() resetHp(); resetMp(); setStatus( Entity::Chara::ActorStatus::Idle ); - if( getGmInvis() == false ) - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x01, 0, 111 ), true ); - else - queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x01, 0, 111 ) ); + + sendZoneInPackets( 0x01, 0x01, 0, 111, true ); sendToInRangeSet( ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ), true ); } else - if( getGmInvis() == false ) - sendToInRangeSet( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x00, 0, 111 ), true ); - else - queuePacket( ActorControlPacket143( getId(), ZoneIn, 0x01, 0x00, 0, 111 ) ); + sendZoneInPackets( 0x01, 0x00, 0, 111 ); } - break; + break; case ZoneingType::FadeIn: break; } - - setZoningType( Common::ZoneingType::None ); - unsetStateFlag( PlayerStateFlag::BetweenAreas ); } void Core::Entity::Player::emote( uint32_t emoteId, uint64_t targetId ) diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 71d8d8fe..2789b756 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -321,6 +321,15 @@ void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost: { pTerriMgr->disableCurrentFestival(); } + else if( subCommand == "logout" ) + { + Network::Packets::ZoneChannelPacket< Network::Packets::Server::FFXIVIpcLogout > logoutPacket( player.getId() ); + logoutPacket.data().flags1 = 0x0; + logoutPacket.data().flags2 = 0xE179C650; + player.queuePacket( logoutPacket ); + + player.setMarkedForRemoval(); + } else { player.sendUrgent( subCommand + " is not a valid SET command." ); From 7e17c6cf230cf7acfad6a3a60942dec1003e9449 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:27:57 +1000 Subject: [PATCH 04/11] Fixed Shitty commit mistake --- src/servers/sapphire_zone/Actor/Player.h | 2 ++ .../sapphire_zone/DebugCommand/DebugCommandHandler.cpp | 9 --------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 9863d428..7bb5b8d0 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -509,6 +509,8 @@ public: void emote( uint32_t emoteId, uint64_t targetId ); + void sendZoneInPackets( uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, bool pSetStatus ); + void finishZoning(); void sendZonePackets(); diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 2789b756..71d8d8fe 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -321,15 +321,6 @@ void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost: { pTerriMgr->disableCurrentFestival(); } - else if( subCommand == "logout" ) - { - Network::Packets::ZoneChannelPacket< Network::Packets::Server::FFXIVIpcLogout > logoutPacket( player.getId() ); - logoutPacket.data().flags1 = 0x0; - logoutPacket.data().flags2 = 0xE179C650; - player.queuePacket( logoutPacket ); - - player.setMarkedForRemoval(); - } else { player.sendUrgent( subCommand + " is not a valid SET command." ); From 3db961c726a26e0e4d6fe385ba5ef742e427e427 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:30:23 +1000 Subject: [PATCH 05/11] Use that Gminvis yo --- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index f77c5eb5..b09f3fea 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -1605,7 +1605,7 @@ void Core::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = auto zoneInPacket = ActorControlPacket143( getId(), ZoneIn, param1, param2, param3, param4 ); auto SetStatusPacket = ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ); - if( !Entity::Chara::Invisible ) + if( getGmInvis() ) sendToInRangeSet( zoneInPacket, true ); if( pSetStatus ) sendToInRangeSet( SetStatusPacket ); From b401c951a7814bc36a85bed02275abf8f3bae520 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:34:45 +1000 Subject: [PATCH 06/11] I love me some style and wording fixes --- src/servers/sapphire_zone/Actor/Player.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index b09f3fea..0abbb673 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -1600,18 +1600,18 @@ void Core::Entity::Player::sendTitleList() queuePacket( titleListPacket ); } -void Core::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, bool pSetStatus = false ) +void Core::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, bool shouldSetStatus = false ) { auto zoneInPacket = ActorControlPacket143( getId(), ZoneIn, param1, param2, param3, param4 ); auto SetStatusPacket = ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ); if( getGmInvis() ) sendToInRangeSet( zoneInPacket, true ); - if( pSetStatus ) + if( shouldSetStatus ) sendToInRangeSet( SetStatusPacket ); else queuePacket( zoneInPacket ); - if (pSetStatus) + if ( shouldSetStatus ) queuePacket( SetStatusPacket ); setZoningType( Common::ZoneingType::None ); @@ -1638,10 +1638,7 @@ void Core::Entity::Player::finishZoning() resetHp(); resetMp(); setStatus( Entity::Chara::ActorStatus::Idle ); - sendZoneInPackets( 0x01, 0x01, 0, 111, true ); - sendToInRangeSet( ActorControlPacket142( getId(), SetStatus, - static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ), true ); } else sendZoneInPackets( 0x01, 0x00, 0, 111 ); From 3310ee0fe6e229d55b070d0112b31fe54f1cc5cc Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:47:03 +1000 Subject: [PATCH 07/11] Gm invis is less of a hack --- .../Network/Handlers/GMCommandHandlers.cpp | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 8c170ccc..7f1d99d0 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -226,29 +226,16 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac } case GmCommand::Invis: { - if( targetPlayer->getGmInvis() == false ) { - targetPlayer->setGmInvis( true ); - auto inRange = targetPlayer->getInRangeActors(); - for( auto actor : inRange ) - { - targetPlayer->despawn( actor->getAsPlayer() ); - targetPlayer->spawn( actor->getAsPlayer() ); - } - player.sendNotice( "Invisibility flag for " + targetPlayer->getName() + " was toggled to on" ); - break; - } - else + player.setGmInvis( !player.getGmInvis() ); + player.sendNotice( "Invisibility flag for " + player.getName() + + " was toggled to " + std::to_string( !player.getGmInvis() ) ); + + for( auto actor : player.getInRangeActors() ) { - targetPlayer->setGmInvis( false ); - auto inRange = targetPlayer->getInRangeActors(); - for( auto actor : inRange ) - { - targetPlayer->despawn( actor->getAsPlayer() ); - targetPlayer->spawn( actor->getAsPlayer() ); - } - player.sendNotice( "Invisibility flag for " + targetPlayer->getName() + " was toggled to off" ); - break; + player.despawn( actor->getAsPlayer() ); + player.spawn( actor->getAsPlayer() ); } + break; } case GmCommand::Kill: { From b760f08f298a15ceffe73ecabb305bed494f73d9 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 22:50:17 +1000 Subject: [PATCH 08/11] Digital Monsters? --- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 0abbb673..eb37723e 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -176,7 +176,7 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() uint32_t statusDisplayOrder = 0xFF14; uint32_t applicableStatus = 0; - for( uint32_t i = 0; i < 64; i++ ) + for( uint32_t i = 0; i < std::numeric_limits< uint64_t >::digits; i++ ) { bool bit = ( m_onlineStatus >> i ) & 1; From 6f86347aa0f8e39e905ead3004859b22141c3121 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 23:02:24 +1000 Subject: [PATCH 09/11] Must be a fire type --- src/servers/sapphire_zone/Actor/Player.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index eb37723e..89c4ef32 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -175,8 +175,7 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() uint32_t statusDisplayOrder = 0xFF14; uint32_t applicableStatus = 0; - - for( uint32_t i = 0; i < std::numeric_limits< uint64_t >::digits; i++ ) + for( uint32_t i = 0; i < std::numeric_limits< decltype( m_onlineStatus ) >::digits; i++ ) { bool bit = ( m_onlineStatus >> i ) & 1; From 879ce3609eaaaeb213ae7a6163464c7a12c6b4cc Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Thu, 19 Apr 2018 23:04:31 +1000 Subject: [PATCH 10/11] Spacing should go back here --- src/servers/sapphire_zone/Actor/Player.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 89c4ef32..99ee12e7 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -175,6 +175,7 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus() uint32_t statusDisplayOrder = 0xFF14; uint32_t applicableStatus = 0; + for( uint32_t i = 0; i < std::numeric_limits< decltype( m_onlineStatus ) >::digits; i++ ) { bool bit = ( m_onlineStatus >> i ) & 1; From fb8208af1e9d282b406cb0cdc9747fce818cd4fb Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Fri, 20 Apr 2018 02:22:09 +1000 Subject: [PATCH 11/11] How did I not notice that.... --- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 99ee12e7..1e72fcb3 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -1605,7 +1605,7 @@ void Core::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = auto zoneInPacket = ActorControlPacket143( getId(), ZoneIn, param1, param2, param3, param4 ); auto SetStatusPacket = ActorControlPacket142( getId(), SetStatus, static_cast< uint8_t >( Entity::Chara::ActorStatus::Idle ) ); - if( getGmInvis() ) + if( !getGmInvis() ) sendToInRangeSet( zoneInPacket, true ); if( shouldSetStatus ) sendToInRangeSet( SetStatusPacket );