From 439c4cadf6176dbbff91d3c2ad8c0ac768766559 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Tue, 21 Nov 2017 13:20:43 +0000 Subject: [PATCH 01/46] stub some party related stuff --- src/servers/Server_Common/Common.h | 24 ++++++ src/servers/Server_Common/Forwards.h | 5 ++ .../Server_Common/Network/PacketDef/Ipcs.h | 2 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 25 +++++- .../Server_Zone/Actor/Group/ContentGroup.cpp | 0 .../Server_Zone/Actor/Group/ContentGroup.h | 0 .../Server_Zone/Actor/Group/FreeCompany.cpp | 0 .../Server_Zone/Actor/Group/FreeCompany.h | 0 src/servers/Server_Zone/Actor/Group/Group.cpp | 83 +++++++++++++++++++ src/servers/Server_Zone/Actor/Group/Group.h | 74 +++++++++++++++++ .../Server_Zone/Actor/Group/Linkshell.cpp | 0 .../Server_Zone/Actor/Group/Linkshell.h | 0 .../Actor/Group/Manager/ContentGroupMgr.cpp | 0 .../Actor/Group/Manager/ContentGroupMgr.h | 0 .../Actor/Group/Manager/FreeCompanyMgr.cpp | 0 .../Actor/Group/Manager/FreeCompanyMgr.h | 0 .../Actor/Group/Manager/GroupMgr.cpp | 0 .../Actor/Group/Manager/GroupMgr.h | 0 .../Actor/Group/Manager/LinkshellMgr.cpp | 0 .../Actor/Group/Manager/LinkshellMgr.h | 0 .../Actor/Group/Manager/PartyMgr.cpp | 0 .../Actor/Group/Manager/PartyMgr.h | 0 src/servers/Server_Zone/Actor/Group/Party.cpp | 0 src/servers/Server_Zone/Actor/Group/Party.h | 0 src/servers/Server_Zone/CMakeLists.txt | 4 + .../Server_Zone/Network/GameConnection.cpp | 1 + .../Server_Zone/Network/GameConnection.h | 2 +- .../Network/Handlers/PacketHandlers.cpp | 9 +- 28 files changed, 218 insertions(+), 11 deletions(-) create mode 100644 src/servers/Server_Zone/Actor/Group/ContentGroup.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/ContentGroup.h create mode 100644 src/servers/Server_Zone/Actor/Group/FreeCompany.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/FreeCompany.h create mode 100644 src/servers/Server_Zone/Actor/Group/Group.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Group.h create mode 100644 src/servers/Server_Zone/Actor/Group/Linkshell.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Linkshell.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.h create mode 100644 src/servers/Server_Zone/Actor/Group/Party.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Party.h diff --git a/src/servers/Server_Common/Common.h b/src/servers/Server_Common/Common.h index fae2a31b..faf95222 100644 --- a/src/servers/Server_Common/Common.h +++ b/src/servers/Server_Common/Common.h @@ -802,6 +802,30 @@ namespace Common { MountSkill = 0xD, }; + enum SocialCategory : uint8_t + { + Party = 1, + Friends = 2, + FreeCompanyPetition = 4, + FreeCompany = 5, + }; + + // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous + enum class SocialRequestAction : uint8_t + { + Invite = 1, + Cancel = 2, + Accept = 3, + Decline = 4, + }; + + enum class SocialRequestResponse : uint8_t + { + Decline, + Accept, + Cancel, + }; + struct ServerEntry { uint32_t serverId; diff --git a/src/servers/Server_Common/Forwards.h b/src/servers/Server_Common/Forwards.h index 515bfe0e..0325e222 100644 --- a/src/servers/Server_Common/Forwards.h +++ b/src/servers/Server_Common/Forwards.h @@ -2,6 +2,11 @@ #define _COMMON_FORWARDS_H #include +#include + +using namespace std::chrono_literals; +using time_point = std::chrono::steady_clock::time_point; +using duration = std::chrono::steady_clock::duration; namespace Core { diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index f0f387d3..2a0cadc5 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -161,7 +161,7 @@ namespace Packets { CFDutyInfoHandler = 0x0078, // updated 4.1 ?? - SocialReqSendHandler = 0x00AE, // updated 4.1 + SocialReqSendHandler = 0x00AF, // updated 4.1 SocialListHandler = 0x00B3, // updated 4.1 SetSearchInfoHandler = 0x00B5, // updated 4.1 diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 81cca1df..1808a5ae 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -83,19 +83,36 @@ struct PlayerEntry { uint64_t contentId; uint8_t bytes[12]; uint16_t zoneId; - uint16_t zoneId1; - char bytes1[8]; + uint8_t grandCompany; + uint8_t clientLanguage; + uint8_t knownLanguages; // bitmask, J 0x01, E 0x02, D 0x04, F 0x08 + uint8_t searchComment; // bool + char bytes1[6]; uint64_t onlineStatusMask; uint8_t classJob; uint8_t padding; - uint8_t level; - uint8_t padding1; + uint16_t level; uint16_t padding2; uint8_t one; char name[0x20]; char fcTag[9]; }; +struct FFXIVIpcSocialRequestError : FFXIVIpcBasePacket +{ + +}; + +struct FFXIVIpcSocialRequestResponse : FFXIVIpcBasePacket +{ + uint64_t contentId; + uint32_t unknown; + uint8_t category; // Common::SocialCategory + uint8_t response; // Common::SocialRequestResponse + char name[0x20]; + uint16_t padding; +}; + struct FFXIVIpcSocialList : FFXIVIpcBasePacket { uint32_t padding; diff --git a/src/servers/Server_Zone/Actor/Group/ContentGroup.cpp b/src/servers/Server_Zone/Actor/Group/ContentGroup.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/ContentGroup.h b/src/servers/Server_Zone/Actor/Group/ContentGroup.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/FreeCompany.cpp b/src/servers/Server_Zone/Actor/Group/FreeCompany.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/FreeCompany.h b/src/servers/Server_Zone/Actor/Group/FreeCompany.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp new file mode 100644 index 00000000..3751e3dc --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -0,0 +1,83 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include "Group.h" + +// todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? +// todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up + +Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) +{ + constexpr uint32_t logMessages[] = { + 0, // + 1 + }; + assert( pSender != nullptr || senderId != 0 ); + + using namespace Core::Network::Packets; + + uint64_t recipientContentId = 0; + + if( pSender ) + { + senderId = pSender->getId(); + } + + if( pRecipient ) + { + recipientId = pRecipient->getId(); + recipientContentId = pRecipient->getContentId(); + } + + auto packet = GamePacketNew< Server::FFXIVIpcSocialRequestResponse, ServerZoneIpcType >( recipientId, senderId ); + packet.data().contentId = recipientContentId; + + if( m_members.size() < m_maxCapacity ) + { + // todo: broadcast join message + + m_invites.erase( m_invites.find( recipientId ), m_invites.end() ); + GroupMember member; + member.inviterId = senderId; + member.role = 0; + member.pPlayer = pRecipient; + m_members.emplace( recipientId, member ); + reload(); + } + else + { + } + + return packet; +} + +void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) +{ + assert( pPacket ); + if( pPacket ) + { + for( const auto& member : m_members ) + { + if( member.second.pPlayer ) + { + member.second.pPlayer->queuePacket( pPacket ); + } + } + } +} + +void Core::Entity::Group::Group::reload() +{ + m_reloadGroup = true; +} + +bool Core::Entity::Group::Group::canReload() const +{ + return m_reloadGroup; +} diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h new file mode 100644 index 00000000..ee4c4476 --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -0,0 +1,74 @@ +#ifndef _GROUP_H +#define _GROUP_H + +#include +#include +#include +#include +#include +#include +#include + +namespace Core { +namespace Entity { +namespace Group { + +struct GroupMember +{ + uint64_t inviterId; + PlayerPtr pPlayer; + uint32_t role; +}; + +enum class GroupType : uint8_t +{ + None, + Party, + Friends, + FreeCompany, + Linkshell, + + FreeCompanyPetition, + Blacklist, + ContentGroup +}; + +class Group : public boost::enable_shared_from_this< Group > +{ +private: + GroupType m_type{ GroupType::None }; + uint64_t m_id{ 0 }; + uint64_t m_ownerId{ 0 }; + uint32_t m_maxCapacity{ 250 }; + uint32_t m_maxRoles{ 50 }; + time_point m_createTime{ std::chrono::steady_clock::now() }; + std::map< uint64_t, GroupMember > m_members; + std::map< uint64_t, uint64_t > m_invites; // + bool m_reloadGroup; + + void addMember( uint64_t senderId = 0, uint64_t recipientId = 0 ); + void inviteMember( uint64_t senderId, uint64_t recipientId = 0 ); + void removeMember( uint64_t id = 0 ); +public: + Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; + ~Group(){}; + + virtual void load() = 0; + virtual void update() = 0; + virtual void disband() = 0; + + virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + void reload(); + bool canReload() const; +}; + +} +} +}; +#endif // ! _GROUP_H \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Linkshell.cpp b/src/servers/Server_Zone/Actor/Group/Linkshell.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Linkshell.h b/src/servers/Server_Zone/Actor/Group/Linkshell.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Party.cpp b/src/servers/Server_Zone/Actor/Group/Party.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/Actor/Group/Party.h b/src/servers/Server_Zone/Actor/Group/Party.h new file mode 100644 index 00000000..e69de29b diff --git a/src/servers/Server_Zone/CMakeLists.txt b/src/servers/Server_Zone/CMakeLists.txt index 11d27f8d..d2239c5e 100644 --- a/src/servers/Server_Zone/CMakeLists.txt +++ b/src/servers/Server_Zone/CMakeLists.txt @@ -7,6 +7,8 @@ project(Sapphire_Zone) file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} /*.h Actor/*.h + Actor/Group/*.h + Actor/Group/Manager/*.h Action/*.h DebugCommand/*.h Event/*.h @@ -22,6 +24,8 @@ file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} file(GLOB SERVER_SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c* Actor/*.c* + Actor/Group/*.c* + Actor/Group/Manager/*.c* Action/*.c* DebugCommand/*.c* Event/*.c* diff --git a/src/servers/Server_Zone/Network/GameConnection.cpp b/src/servers/Server_Zone/Network/GameConnection.cpp index 882593c8..4e4c5a90 100644 --- a/src/servers/Server_Zone/Network/GameConnection.cpp +++ b/src/servers/Server_Zone/Network/GameConnection.cpp @@ -51,6 +51,7 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, setZoneHandler( ClientZoneIpcType::PlayTimeHandler, "PlayTimeHandler", &GameConnection::playTimeHandler ); setZoneHandler( ClientZoneIpcType::LogoutHandler, "LogoutHandler", &GameConnection::logoutHandler ); + setZoneHandler( ClientZoneIpcType::SocialReqSendHandler, "SocialReqSendHandler", &GameConnection::socialReqSendHandler ); setZoneHandler( ClientZoneIpcType::SocialListHandler, "SocialListHandler", &GameConnection::socialListHandler ); setZoneHandler( ClientZoneIpcType::SetSearchInfoHandler, "SetSearchInfoHandler", &GameConnection::setSearchInfoHandler ); setZoneHandler( ClientZoneIpcType::ReqSearchInfoHandler, "ReqSearchInfoHandler", &GameConnection::reqSearchInfoHandler ); diff --git a/src/servers/Server_Zone/Network/GameConnection.h b/src/servers/Server_Zone/Network/GameConnection.h index 24ae61e5..cea1dec9 100644 --- a/src/servers/Server_Zone/Network/GameConnection.h +++ b/src/servers/Server_Zone/Network/GameConnection.h @@ -89,6 +89,7 @@ public: DECLARE_HANDLER( initHandler ); DECLARE_HANDLER( finishLoadingHandler ); DECLARE_HANDLER( blackListHandler ); + DECLARE_HANDLER( socialReqSendHandler ); DECLARE_HANDLER( socialListHandler ); DECLARE_HANDLER( linkshellListHandler ); DECLARE_HANDLER( playTimeHandler ); @@ -119,7 +120,6 @@ public: DECLARE_HANDLER( reqEquipDisplayFlagsHandler ); DECLARE_HANDLER( tellHandler ); - }; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 9028feaf..7bc18fe9 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -452,16 +452,15 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket listPacket.data().entries[0].contentId = pPlayer->getContentId(); listPacket.data().entries[0].level = pPlayer->getLevel(); listPacket.data().entries[0].zoneId = pPlayer->getCurrentZone()->getId(); - listPacket.data().entries[0].zoneId1 = 0x0100; + listPacket.data().entries[0].grandCompany = pPlayer->getGc(); + memcpy( &listPacket.data().entries[0].fcTag[0], "Sapphire", sizeof( "Sapphire" ) ); + listPacket.data().entries[0].clientLanguage = 2; + listPacket.data().entries[0].knownLanguages = 0x0F; // TODO: no idea what this does //listPacket.data().entries[0].one = 1; memcpy( listPacket.data().entries[0].name, pPlayer->getName().c_str(), strlen( pPlayer->getName().c_str() ) ); - // TODO: actually store and read language from somewhere - listPacket.data().entries[0].bytes1[0] = 0x01;//flags (lang) - // TODO: these flags need to be figured out - //listPacket.data().entries[0].bytes1[1] = 0x00;//flags listPacket.data().entries[0].onlineStatusMask = pPlayer->getOnlineStatusMask(); queueOutPacket( listPacket ); From 434b483ef516e17cfd10b903f8a487d32962e307 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Tue, 21 Nov 2017 17:01:05 +0000 Subject: [PATCH 02/46] stub some group manager stuff --- src/servers/Server_Zone/Actor/Group/Group.cpp | 34 +++++++++++-- src/servers/Server_Zone/Actor/Group/Group.h | 34 +++++++------ .../Actor/Group/Manager/GroupMgr.cpp | 22 +++++++++ .../Actor/Group/Manager/GroupMgr.h | 48 +++++++++++++++++++ 4 files changed, 118 insertions(+), 20 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 3751e3dc..5a55bc77 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -48,7 +48,6 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla member.role = 0; member.pPlayer = pRecipient; m_members.emplace( recipientId, member ); - reload(); } else { @@ -72,12 +71,37 @@ void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::Ga } } -void Core::Entity::Group::Group::reload() +bool Core::Entity::Group::Group::isParty() const { - m_reloadGroup = true; + return m_type == GroupType::Party; } -bool Core::Entity::Group::Group::canReload() const +bool Core::Entity::Group::Group::isFriendList() const { - return m_reloadGroup; + return m_type == GroupType::FriendList; } + +bool Core::Entity::Group::Group::isFreeCompany() const +{ + return m_type == GroupType::FreeCompany; +} + +bool Core::Entity::Group::Group::isLinkshell() const +{ + return m_type == GroupType::Linkshell; +} + +bool Core::Entity::Group::Group::isFreeCompanyPetition() const +{ + return m_type == GroupType::FreeCompanyPetition; +} + +bool Core::Entity::Group::Group::isBlacklist() const +{ + return m_type == GroupType::Blacklist; +} + +bool Core::Entity::Group::Group::isContentGroup() const +{ + return m_type == GroupType::ContentGroup; +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index ee4c4476..6e4d5e1c 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -13,6 +13,9 @@ namespace Core { namespace Entity { namespace Group { +class Group; +using GroupPtr = boost::shared_ptr< Group >; + struct GroupMember { uint64_t inviterId; @@ -24,7 +27,7 @@ enum class GroupType : uint8_t { None, Party, - Friends, + FriendList, FreeCompany, Linkshell, @@ -44,19 +47,7 @@ private: time_point m_createTime{ std::chrono::steady_clock::now() }; std::map< uint64_t, GroupMember > m_members; std::map< uint64_t, uint64_t > m_invites; // - bool m_reloadGroup; - void addMember( uint64_t senderId = 0, uint64_t recipientId = 0 ); - void inviteMember( uint64_t senderId, uint64_t recipientId = 0 ); - void removeMember( uint64_t id = 0 ); -public: - Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; - ~Group(){}; - - virtual void load() = 0; - virtual void update() = 0; - virtual void disband() = 0; virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); @@ -64,8 +55,21 @@ public: virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); - void reload(); - bool canReload() const; + virtual void load(); + virtual void update(); + virtual void disband(); +public: + Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; + ~Group(){}; + + bool isParty() const; + bool isFriendList() const; + bool isFreeCompany() const; + bool isLinkshell() const; + bool isFreeCompanyPetition() const; + bool isBlacklist() const; + bool isContentGroup() const; }; } diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp index e69de29b..ec4bc16a 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp @@ -0,0 +1,22 @@ +#include "../Group.h" +#include "GroupMgr.h" + +Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const +{ + auto it = m_invites.find( playerId ); + if( it != m_invites.end() ) + { + return findGroupById( it->second ); + } + return nullptr; +} + +Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupById( uint64_t groupId ) const +{ + auto it = m_groups.find( groupId ); + if( it != m_groups.end() ) + { + return it->second; + } + return nullptr; +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h index e69de29b..0c55a446 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h @@ -0,0 +1,48 @@ +#ifndef _GROUPMGR_H +#define _GROUPMGR_H + +#include +#include + +#include +#include +#include + +namespace Core { +namespace Entity { +namespace Group { + +class GroupMgr : public boost::enable_shared_from_this< GroupMgr > +{ +private: + GroupType m_type{ GroupType::None }; + uint64_t m_groupCount{ 0 }; + uint32_t m_maxEntries{ 0xFFFFFFFF }; + std::map< uint64_t, GroupPtr > m_groups; + std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > + virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; + + /* + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + friend virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + friend virtual void load(); + friend virtual void update(); + friend virtual void disband(); + //*/ +public: + GroupMgr( GroupType type, uint32_t maxEntries ) : + m_type( type ), m_maxEntries( maxEntries ){}; + ~GroupMgr(){}; + + GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + GroupPtr findGroupById( uint64_t groupId ) const; +}; + +} +} +}; +#endif /* ! _GROUPMGR_H */ \ No newline at end of file From 1332d580df3ccfa717026c55d5c296f317756e9a Mon Sep 17 00:00:00 2001 From: Maru Date: Tue, 5 Dec 2017 04:13:13 -0200 Subject: [PATCH 03/46] Insane copypaste work!11!one --- .../Server_Common/Network/PacketDef/Ipcs.h | 3 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 29 ++- src/servers/Server_Zone/Actor/Player.cpp | 27 ++ src/servers/Server_Zone/Actor/Player.h | 4 + .../Server_Zone/Network/GameConnection.h | 1 + .../Network/Handlers/PacketHandlers.cpp | 239 ++++++++++++++++-- 6 files changed, 277 insertions(+), 26 deletions(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index 82ec4da7..04ea3d49 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -58,7 +58,8 @@ namespace Packets { SocialRequestError = 0x00AD, Playtime = 0x00B7, // updated 4.1 CFRegistered = 0x00B8, // updated 4.1 - SocialRequestResponse = 0x00BB, // updated 4.1 + SocialRequestResponse = 0x00BC, // updated 4.1 + SocialRequestReceive = 0x00BD, SocialList = 0x00BE, // updated 4.1 UpdateSearchInfo = 0x10BB, InitSearchInfo = 0x00C1, // updated 4.1 diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 77991860..701176ab 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -89,7 +89,7 @@ struct PlayerEntry { uint8_t searchComment; // bool char bytes1[6]; uint64_t onlineStatusMask; - uint8_t classJob; + Common::ClassJob classJob; uint8_t padding; uint16_t level; uint16_t padding2; @@ -98,8 +98,31 @@ struct PlayerEntry { char fcTag[9]; }; +struct FFXIVIpcSocialRequestReceive : FFXIVIpcBasePacket +{ + uint32_t actorId; // actor id of player which initiated request + uint16_t unknown; + uint16_t unknown2; + uint32_t timestamp; // must be greater than current time + uint8_t unknown3; + uint8_t unknown4; // Very likely cross-world related + Common::SocialCategory category; // 1 - party invite, 2 - friends request, 3 - ??, 4 - fc signature request, 5 - fc invite, + uint8_t unknown5; + Common::SocialRequestAction action; // 0 - ??, 1 - received, 2 - canceled, 4 - friend accept/fc sign/fc join, 5 - refuse fc petition/decline invite + uint8_t unknown6; + char name[0x20]; + uint16_t unknown7; + uint16_t unknown8; + uint16_t unknown9; +}; + struct FFXIVIpcSocialRequestError : FFXIVIpcBasePacket { + uint32_t messageId; // if 0 then type's message is used (type must 2/4/5 or it wont print) + Common::SocialCategory category; // 2 - friend request, 4 - fc petition, 5 - fc invitation, anything else and wont print + uint8_t unknown; // possibly padding + char name[0x20]; + uint8_t unknown3[2]; // probably padding }; @@ -107,8 +130,8 @@ struct FFXIVIpcSocialRequestResponse : FFXIVIpcBasePacket { uint64_t contentId; uint32_t unknown; - uint8_t category; // Common::SocialCategory - uint8_t response; // Common::SocialRequestResponse + Common::SocialCategory category; // Common::SocialCategory + Common::SocialRequestResponse response; // Common::SocialRequestResponse char name[0x20]; uint16_t padding; }; diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 2caab4b3..6ad05126 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -900,6 +900,33 @@ Core::Entity::ActorPtr Core::Entity::Player::lookupTargetById( uint64_t targetId return targetActor; } +Core::Network::Packets::Server::PlayerEntry Core::Entity::Player::generatePlayerEntry() +{ + Core::Network::Packets::Server::PlayerEntry entry = {}; + + entry.bytes[2] = getCurrentZone()->getId(); + entry.bytes[3] = 0x80; + entry.bytes[4] = 0x02; + entry.bytes[6] = 0x3B; + entry.bytes[11] = 0x10; + entry.classJob = getClass(); + entry.contentId = getContentId(); + entry.level = getLevel(); + entry.zoneId = getCurrentZone()->getId(); + entry.grandCompany = getGc(); + memcpy( &entry.fcTag[0], "Meme", 9 ); + entry.clientLanguage = 2; + entry.knownLanguages = 0x0F; + // TODO: no idea what this does - me neither + //listPacket.data().entries[0].one = 1; + + memcpy( entry.name, getName().c_str(), strlen( getName().c_str() ) ); + + entry.onlineStatusMask = getOnlineStatusMask(); + + return entry; +} + void Core::Entity::Player::setLastPing( uint32_t ping ) { m_lastPing = ping; diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 4688e5a5..9039c10c 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -4,6 +4,7 @@ #include "src/servers/Server_Zone/Forwards.h" #include +#include #include "Actor.h" #include "src/servers/Server_Zone/Inventory/Inventory.h" @@ -480,6 +481,9 @@ public: void sendUrgent( const std::string& message ); void sendDebug( const std::string& message ); + /*! generates a player entry used for lists (social, etc) */ + Core::Network::Packets::Server::PlayerEntry generatePlayerEntry(); + // Player Battle Handling ////////////////////////////////////////////////////////////////////////////////////////////////////// void onMobAggro( BattleNpcPtr pBNpc ); diff --git a/src/servers/Server_Zone/Network/GameConnection.h b/src/servers/Server_Zone/Network/GameConnection.h index 97332266..9ca1ff9e 100644 --- a/src/servers/Server_Zone/Network/GameConnection.h +++ b/src/servers/Server_Zone/Network/GameConnection.h @@ -89,6 +89,7 @@ public: DECLARE_HANDLER( initHandler ); DECLARE_HANDLER( finishLoadingHandler ); DECLARE_HANDLER( blackListHandler ); + DECLARE_HANDLER( socialReqResponseHandler ); DECLARE_HANDLER( socialReqSendHandler ); DECLARE_HANDLER( socialListHandler ); DECLARE_HANDLER( linkshellListHandler ); diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 96f4a58c..096488d4 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -444,25 +444,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket int32_t entrysizes = sizeof( listPacket.data().entries ); memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); - listPacket.data().entries[0].bytes[2] = pPlayer->getCurrentZone()->getId(); - listPacket.data().entries[0].bytes[3] = 0x80; - listPacket.data().entries[0].bytes[4] = 0x02; - listPacket.data().entries[0].bytes[6] = 0x3B; - listPacket.data().entries[0].bytes[11] = 0x10; - listPacket.data().entries[0].classJob = static_cast< uint8_t >( pPlayer->getClass() ); - listPacket.data().entries[0].contentId = pPlayer->getContentId(); - listPacket.data().entries[0].level = pPlayer->getLevel(); - listPacket.data().entries[0].zoneId = pPlayer->getCurrentZone()->getId(); - listPacket.data().entries[0].grandCompany = pPlayer->getGc(); - memcpy( &listPacket.data().entries[0].fcTag[0], "Sapphire", sizeof( "Sapphire" ) ); - listPacket.data().entries[0].clientLanguage = 2; - listPacket.data().entries[0].knownLanguages = 0x0F; - // TODO: no idea what this does - //listPacket.data().entries[0].one = 1; - - memcpy( listPacket.data().entries[0].name, pPlayer->getName().c_str(), strlen( pPlayer->getName().c_str() ) ); - - listPacket.data().entries[0].onlineStatusMask = pPlayer->getOnlineStatusMask(); + listPacket.data().entries[0] = pPlayer->generatePlayerEntry(); queueOutPacket( listPacket ); @@ -474,6 +456,29 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket listPacket.data().type = 0x0B; listPacket.data().sequence = count; memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); + + // todo: for now.. just grab all actors in range and add them in. just replace logic later by using manager + + uint8_t i = 0; + + for( auto actor : pPlayer->getInRangeActors() ) + { + auto pFriend = actor->getAsPlayer(); + if( pFriend ) + { + listPacket.data().entries[i] = pFriend->generatePlayerEntry(); + i++; + } + + // todo: remove this branch entirely when using manager. physically hurts + if( i >= 200 ) + { + break; + } + + } + + queueOutPacket( listPacket ); } else if( type == 0x0e ) @@ -483,10 +488,200 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket } -void Core::Network::GameConnection::socialReqSendHandler(const Packets::GamePacket& inPacket, - Entity::PlayerPtr pPlayer) +void Core::Network::GameConnection::socialReqResponseHandler( const Packets::GamePacket& inPacket, + Entity::PlayerPtr pPlayer ) { - g_log.debug("send"); + auto targetId = inPacket.getValAt< uint32_t >( 0x20 ); + auto category = inPacket.getValAt< Common::SocialCategory >( 0x28 ); + auto action = inPacket.getValAt< Common::SocialRequestAction >( 0x29 ); + + ZoneChannelPacket< FFXIVIpcSocialRequestError > info( targetId, pPlayer->getId() ); + ZoneChannelPacket< FFXIVIpcSocialRequestResponse > response( targetId, pPlayer->getId() ); + + info.data().category = category; + response.data().category = category; + + //auto pQR = g_database.query( "SELECT Name FROM dbchara WHERE CharacterId = " + to_string( targetId ) ); + auto name = pPlayer->getName(); + /* + if( pQR->getRowCount() > 0 ) + { + name = pQR->fetch()->getString(); + } + else + { + // todo: enumerate these messages + std::array< uint32_t, 5> categoryError = { 0, + 320, // Unable to process party command. + 310, // Unable to process friend list command. + 3035, // Unable to reply. Free company invite invalid. // todo: find actual message + 3035, // Unable to reply. Free company invite invalid. + }; + + response.data().messageId = categoryError[category]; + response.data().category = category; // client only uses messageId if this is 1 for some reason + pPlayer->queuePacket( response ); + return; + }*/ + + g_log.debug( std::to_string( static_cast( action ) ) ); + + auto pSession = g_serverZone.getSession( targetId ); + + // todo: notify both inviter/invitee with 0x00CB packet + + if( pSession ) + { + g_log.debug( std::to_string(static_cast(action)) ); + } + response.data().response = Common::SocialRequestResponse::Accept; + memcpy( &( response.data().name ), name.c_str(), 32 ); + pPlayer->queuePacket( response ); +} + +void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePacket& inPacket, + Entity::PlayerPtr pPlayer ) +{ + // todo: handle all social request packets here + auto category = inPacket.getValAt< Common::SocialCategory >( 0x20 ); + auto name = std::string( inPacket.getStringAt( 0x21 ) ); + + auto pSession = g_serverZone.getSession( name ); + + // only the requester needs the response + ZoneChannelPacket< FFXIVIpcSocialRequestError > response( pPlayer->getId() ); + memcpy( &( response.data().name ), name.c_str(), 32 ); + + // todo: enumerate log messages + response.data().messageId = 319; // That name does not exist. Please confirm the spelling. + response.data().category = category; + + // todo: enumerate and move each of these cases into their classes? + if( pSession ) + { + bool successful = false; + Entity::PlayerPtr pRecipient = pSession->getPlayer(); + + std::array typeVar{ "", "PartyInvite", "FriendInvite", "FreeCompanyPetition", "FreeCompanyInvite" }; + + // todo: proper handling of invites already sent + // todo: move this to world server + // check if an invite has already been sent by me + /* + if( pRecipient->getTempVariable( typeVar[category] + "Id" ) ) + { + if( pRecipient->getTempVariable( typeVar[category] + "Id" ) == pPlayer->getId() ) + { + response.data().messageId = 328; // That player has already been invited. + pPlayer->queuePacket( response ); + } + return; + }*/ + + if( pRecipient->getId() == pPlayer->getId() ) + { + response.data().messageId = 321; // Unable to invite. + } + + switch( category ) + { + // party invite + case Core::Common::SocialCategory::Party: + { + /* + if( pRecipient->getParty() ) + { + response.data().messageId = 326; // That player is already in another party. + } + else if( pRecipient->getTempVariable( "PartyInviteId" ) == pPlayer->getId() ) + { + response.data().messageId = 328; // That player has already been invited. + } + else if( pPlayer->getParty() && pPlayer->getParty()->getPartyMemberCount() >= pPlayer->getParty()->getType() ) + { + response.data().messageId = 329; // Unable to invite. The party is full. + }*/ + if( !pRecipient->isLoadingComplete() ) // || pRecipient->getDuty() ) + { + response.data().messageId = 331; // Unable to invite. That player is currently bound by duty or in a different area. + } + else if( pRecipient->getOnlineStatus() == Common::OnlineStatus::Busy ) + { + response.data().messageId = 334; // Unable to send party invite. Player's online status is set to Busy. + } + else if( pRecipient->getOnlineStatus() == Common::OnlineStatus::ViewingCutscene ) + { + response.data().messageId = 336; // Unable to invite. That player is currently watching a cutscene. + } + else + { + successful = true; + } + // response.data().messageId = 62; // declines the party invite. + } + break; + + case Common::SocialCategory::Friends: + { + // todo: check if already on friends list or invite pending + /* + if( pPlayer->getFriendList()->find(name) ) + { + response.data().messageId = 312; // That player is already a friend or has been sent a request. + } + else if( pRecipient->getFriendList()->getSize() >= 200 ) + { + response.data().messageId = 314; // Unable to send friend request. The other player's friend list is full. + } + else if( pPlayer->getFriendList()->getSize() >= 200 ) + { + response.data().messageId = 313; // Your friend list is full. + } + */ + successful = true; + } + break; + + default: + break; + } + + if( successful ) + { + ZoneChannelPacket< FFXIVIpcSocialRequestReceive > packet( pPlayer->getId(), pRecipient->getId() ); + + std::array typeMessage{ 0, + 1, // You invite to a party. + 10, // You send a friend request to . + 1884, // You invite to your free company. + 3044, // Free company petition signature request sent to + }; + + // TODO: confirm the timers on retail + auto expireTime = time( nullptr ) + 120; + + // todo: fix this for cross zone parties (move to world server) + /* + pRecipient->setTempVariable( typeVar[category] + "Id", pPlayer->getId() ); + pRecipient->setTempVariable( typeVar[category] + "Timer", expireTime );*/ + + packet.data().actorId = pPlayer->getId(); + packet.data().category = category; + packet.data().action = Core::Common::SocialRequestAction::Invite; + packet.data().unknown3 = 80; + packet.data().unknown = 46; + packet.data().unknown2 = 64; + memcpy( &( packet.data().name ), pPlayer->getName().c_str(), 32 ); + + pRecipient->queuePacket( packet ); + pRecipient->sendDebug( "ding ding" ); + response.data().messageId = typeMessage[category]; + } + } + + pPlayer->queuePacket( response ); + // todo: handle party, friend request + g_log.debug("sent to " + name); } void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPacket, From a8be93b5fd548b9da6024d6a2726b64e311acb10 Mon Sep 17 00:00:00 2001 From: Maru Date: Wed, 6 Dec 2017 02:46:22 -0200 Subject: [PATCH 04/46] Enum List Type --- src/servers/Server_Common/Common.h | 10 ++++++++-- .../Server_Zone/Network/Handlers/PacketHandlers.cpp | 10 +++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/servers/Server_Common/Common.h b/src/servers/Server_Common/Common.h index 8a93eb84..bcbb58d4 100644 --- a/src/servers/Server_Common/Common.h +++ b/src/servers/Server_Common/Common.h @@ -802,8 +802,6 @@ namespace Core { Normal = 0x1, MountSkill = 0xD, }; - - /*! ModelType as found in eventsystemdefine.exd */ enum SocialCategory : uint8_t { @@ -813,6 +811,14 @@ namespace Core { FreeCompany = 5, }; + enum SocialListType : uint8_t + { + PartyList = 0x02, + FriendList = 0x0b, + SearchList = 0x0e, + }; + + // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous enum class SocialRequestAction : uint8_t { diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 096488d4..fd5713ec 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -433,7 +433,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket uint8_t type = inPacket.getValAt< uint8_t >( 0x2A ); uint8_t count = inPacket.getValAt< uint8_t >( 0x2B ); - if( type == 0x02 ) + if( type == SocialListType::PartyList ) { // party list ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() );; @@ -449,7 +449,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket queueOutPacket( listPacket ); } - else if( type == 0x0b ) + else if( type == SocialListType::FriendList ) { // friend list ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); @@ -466,8 +466,8 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket auto pFriend = actor->getAsPlayer(); if( pFriend ) { - listPacket.data().entries[i] = pFriend->generatePlayerEntry(); - i++; + /*listPacket.data().entries[i] = pFriend->generatePlayerEntry(); + i++;*/ } // todo: remove this branch entirely when using manager. physically hurts @@ -481,7 +481,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket queueOutPacket( listPacket ); } - else if( type == 0x0e ) + else if( type == SocialListType::SearchList ) { // player search result // TODO: implement player search } From f7f44950cba45f14e7cd2dd997bc9dc28639b22b Mon Sep 17 00:00:00 2001 From: Maru Date: Wed, 6 Dec 2017 18:55:57 -0200 Subject: [PATCH 05/46] Decouple shared ptr (avoid potential dangling ptr), FriendList stuff --- .../Server_Zone/Actor/Group/FriendList.cpp | 10 +++ .../Server_Zone/Actor/Group/FriendList.h | 81 +++++++++++++++++++ src/servers/Server_Zone/Actor/Group/Group.cpp | 15 ++-- src/servers/Server_Zone/Actor/Group/Group.h | 15 ++-- .../Actor/Group/Manager/FriendListMgr.cpp | 2 + .../Actor/Group/Manager/FriendListMgr.h | 39 +++++++++ .../Actor/Group/Manager/GroupMgr.h | 2 +- .../Network/Handlers/PacketHandlers.cpp | 2 +- 8 files changed, 151 insertions(+), 15 deletions(-) create mode 100644 src/servers/Server_Zone/Actor/Group/FriendList.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/FriendList.h create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Group/FriendList.cpp new file mode 100644 index 00000000..058fdab2 --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/FriendList.cpp @@ -0,0 +1,10 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include "FriendList.h" diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.h b/src/servers/Server_Zone/Actor/Group/FriendList.h new file mode 100644 index 00000000..e0f0625c --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/FriendList.h @@ -0,0 +1,81 @@ +#ifndef _FRIENDLIST_H +#define _FRIENDLIST_H + +#include +#include +#include +#include +#include +#include +#include +#include + + + +namespace Core { +namespace Entity { +namespace Group { + +class FriendList; +using FriendListPtr = boost::shared_ptr< FriendList >; + +struct GroupMember +{ + uint64_t contentId; + char name[32]; + uint32_t category; + uint64_t inviterId; +}; + +enum class GroupType : uint8_t +{ + None, + Party, + FriendList, + FreeCompany, + Linkshell, + FreeCompanyPetition, + Blacklist, + ContentGroup +}; + +class FriendList : public Group +{ +private: + GroupType m_type{ GroupType::FriendList }; + uint64_t m_id{ 0 }; + uint64_t m_ownerId{ 0 }; + uint32_t m_maxCapacity{ 200 }; + uint32_t m_maxRoles{ 8 }; + time_point m_createTime{ std::chrono::steady_clock::now() }; + std::map< uint64_t, GroupMember > m_members; + std::map< uint64_t, uint64_t > m_invites; // + + + virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + virtual void load(); + virtual void update(); + virtual void disband(); +public: + FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; + ~FriendList(){}; + + bool isParty() const; + bool isFriendList() const; + bool isFreeCompany() const; + bool isLinkshell() const; + bool isFreeCompanyPetition() const; + bool isBlacklist() const; + bool isContentGroup() const; +}; + +} +} +}; +#endif // ! _FRIENDLIST_H \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 5a55bc77..83f490f4 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -9,6 +10,8 @@ #include #include "Group.h" +extern Core::ServerZone g_serverZone; + // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up @@ -46,7 +49,7 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla GroupMember member; member.inviterId = senderId; member.role = 0; - member.pPlayer = pRecipient; + member.contentId = recipientId; m_members.emplace( recipientId, member ); } else @@ -59,14 +62,12 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) { assert( pPacket ); - if( pPacket ) + for( const auto& member : m_members ) { - for( const auto& member : m_members ) + auto pSession = g_serverZone.getSession( member.second.name ); + if( pSession ) { - if( member.second.pPlayer ) - { - member.second.pPlayer->queuePacket( pPacket ); - } + pSession->getPlayer()->queuePacket( pPacket ); } } } diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index 6e4d5e1c..d44df05b 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -19,7 +19,8 @@ using GroupPtr = boost::shared_ptr< Group >; struct GroupMember { uint64_t inviterId; - PlayerPtr pPlayer; + uint64_t contentId; + std::string name; uint32_t role; }; @@ -49,11 +50,7 @@ private: std::map< uint64_t, uint64_t > m_invites; // - virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + virtual void load(); virtual void update(); @@ -70,6 +67,12 @@ public: bool isFreeCompanyPetition() const; bool isBlacklist() const; bool isContentGroup() const; + + virtual Core::Network::Packets::GamePacketPtr addMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); + virtual Core::Network::Packets::GamePacketPtr inviteMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); + virtual Core::Network::Packets::GamePacketPtr removeMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); + virtual Core::Network::Packets::GamePacketPtr kickMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); + virtual void sendPacketToMembers(Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false); }; } diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp new file mode 100644 index 00000000..1293cfed --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp @@ -0,0 +1,2 @@ +#include "../FriendList.h" +#include "FriendListMgr.h" diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h new file mode 100644 index 00000000..0b490137 --- /dev/null +++ b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h @@ -0,0 +1,39 @@ +#ifndef _FRIENDLISTMGR_H +#define _FRIENDLISTMGR_H + +#include +#include + +#include +#include +#include + +#include + +namespace Core { +namespace Entity { +namespace Group { + +class FriendListMgr : public GroupMgr +{ +private: + GroupType m_type{ GroupType::None }; + uint64_t m_groupCount{ 0 }; + uint32_t m_maxEntries{ 0xFFFFFFFF }; + std::map< uint64_t, GroupPtr > m_groups; // < groupid, groupPtr > + std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > + virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; + +public: + FriendListMgr( GroupType type, uint32_t maxEntries ) : + m_type( type ), m_maxEntries( maxEntries ){}; + ~FriendListMgr(){}; + + GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + GroupPtr findGroupById( uint64_t groupId ) const; +}; + +} +} +}; +#endif /* ! _FRIENDLISTMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h index 0c55a446..a26e19ba 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h @@ -32,7 +32,7 @@ private: friend virtual void load(); friend virtual void update(); friend virtual void disband(); - //*/ + */ public: GroupMgr( GroupType type, uint32_t maxEntries ) : m_type( type ), m_maxEntries( maxEntries ){}; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 096488d4..7431bff7 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -429,7 +429,7 @@ void Core::Network::GameConnection::finishLoadingHandler( const Packets::GamePac void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer ) { - + uint8_t type = inPacket.getValAt< uint8_t >( 0x2A ); uint8_t count = inPacket.getValAt< uint8_t >( 0x2B ); From cd3b2e15674346513108bf14be9208f6073821f1 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 04:15:20 -0200 Subject: [PATCH 06/46] Putting things together for FriendList --- .../Server_Zone/Actor/Group/FriendList.cpp | 41 ++++++++++ .../Server_Zone/Actor/Group/FriendList.h | 75 +++++++++---------- src/servers/Server_Zone/Actor/Group/Group.cpp | 64 +++++++++++++--- src/servers/Server_Zone/Actor/Group/Group.h | 48 +++++++----- .../Actor/Group/Manager/FriendListMgr.h | 16 ++-- .../Actor/Group/Manager/GroupMgr.h | 14 ++-- src/servers/Server_Zone/Actor/Player.cpp | 32 ++------ src/servers/Server_Zone/Actor/Player.h | 13 +++- .../Network/Handlers/PacketHandlers.cpp | 35 ++------- 9 files changed, 197 insertions(+), 141 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Group/FriendList.cpp index 058fdab2..7d87a039 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Group/FriendList.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -8,3 +9,43 @@ #include #include #include "FriendList.h" + +extern Core::ServerZone g_serverZone; + +using namespace Core::Network::Packets; +using namespace Core::Network::Packets::Server; + +std::vector< PlayerEntry > Core::Entity::Group::FriendList::getFriendListEntries( uint16_t entryAmount ) +{ + std::vector< PlayerEntry > entryList = {}; + uint16_t limit = 0; + + for ( const auto& member : m_members ) + { + if ( limit == entryAmount ) + break; + + entryList.push_back( generatePlayerEntry( member.second ) ); + limit++; + } +} + +//todo: make this function generic for all groups, and override if needed? +ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generateFriendsListPacket( PlayerPtr pPlayer ) +{ + ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); + listPacket.data().type = 0x0B; + listPacket.data().sequence = 10; + memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); + + uint16_t i = 0; + + for ( const auto& member : m_members ) + { + if ( i == 10 ) + break; + + listPacket.data().entries[i] = generatePlayerEntry( member.second ); + i++; + } +} diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.h b/src/servers/Server_Zone/Actor/Group/FriendList.h index e0f0625c..ba8aedd4 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.h +++ b/src/servers/Server_Zone/Actor/Group/FriendList.h @@ -2,6 +2,7 @@ #define _FRIENDLIST_H #include +#include #include #include #include @@ -10,7 +11,8 @@ #include #include - +using namespace Core::Network::Packets; +using namespace Core::Network::Packets::Server; namespace Core { namespace Entity { @@ -19,28 +21,38 @@ namespace Group { class FriendList; using FriendListPtr = boost::shared_ptr< FriendList >; -struct GroupMember -{ - uint64_t contentId; - char name[32]; - uint32_t category; - uint64_t inviterId; -}; - -enum class GroupType : uint8_t -{ - None, - Party, - FriendList, - FreeCompany, - Linkshell, - FreeCompanyPetition, - Blacklist, - ContentGroup -}; - class FriendList : public Group { + +public: + FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + Group( id, ownerId, maxCapacity, createTime ), + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; + + ~FriendList() {}; + + virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + virtual void load(); + virtual void update(); + virtual void disband(); + + bool isParty() const; + bool isFriendList() const; + bool isFreeCompany() const; + bool isLinkshell() const; + bool isFreeCompanyPetition() const; + bool isBlacklist() const; + bool isContentGroup() const; + + std::vector< Core::Network::Packets::Server::PlayerEntry > getFriendListEntries( uint16_t entryAmount ); + + Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > generateFriendsListPacket( PlayerPtr pPlayer ); + private: GroupType m_type{ GroupType::FriendList }; uint64_t m_id{ 0 }; @@ -52,27 +64,8 @@ private: std::map< uint64_t, uint64_t > m_invites; // - virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + - virtual void load(); - virtual void update(); - virtual void disband(); -public: - FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; - ~FriendList(){}; - - bool isParty() const; - bool isFriendList() const; - bool isFreeCompany() const; - bool isLinkshell() const; - bool isFreeCompanyPetition() const; - bool isBlacklist() const; - bool isContentGroup() const; }; } diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 83f490f4..79ecb406 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -7,15 +7,18 @@ #include #include #include +#include #include #include "Group.h" extern Core::ServerZone g_serverZone; +using namespace Core::Entity::Group; + // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up -Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) +Core::Network::Packets::GamePacketPtr Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) { constexpr uint32_t logMessages[] = { 0, // @@ -59,7 +62,7 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla return packet; } -void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) +void Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) { assert( pPacket ); for( const auto& member : m_members ) @@ -72,37 +75,80 @@ void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::Ga } } -bool Core::Entity::Group::Group::isParty() const +Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMember groupMember ) +{ + Core::Network::Packets::Server::PlayerEntry entry = {}; + + memcpy( entry.name, groupMember.name.c_str(), strlen( groupMember.name.c_str() ) ); + entry.contentId = groupMember.contentId; + + // We check if player is online. If so, we can pull more data - otherwise just name + // todo: set as offline in one of the unknown values, if session does not exist + + auto pSession = g_serverZone.getSession( groupMember.name ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? + + if( pSession ) + { + auto pPlayer = pSession->getPlayer(); + + entry.bytes[2] = pPlayer->getCurrentZone()->getId(); + entry.bytes[3] = 0x80; + entry.bytes[4] = 0x02; + entry.bytes[6] = 0x3B; + entry.bytes[11] = 0x10; + entry.classJob = pPlayer->getClass(); + + entry.level = pPlayer->getLevel(); + entry.zoneId = pPlayer->getCurrentZone()->getId(); + entry.grandCompany = pPlayer->getGc(); + memcpy( &entry.fcTag[0], "Meme", 9 ); + entry.clientLanguage = 2; + entry.knownLanguages = 0x0F; + entry.onlineStatusMask = pPlayer->getOnlineStatusMask(); + } + + // TODO: no idea what this does - me neither + //listPacket.data().entries[0].one = 1; + + return entry; +} + +uint32_t Group::getCapacity() const +{ + return m_maxCapacity; +} + +bool Group::isParty() const { return m_type == GroupType::Party; } -bool Core::Entity::Group::Group::isFriendList() const +bool Group::isFriendList() const { return m_type == GroupType::FriendList; } -bool Core::Entity::Group::Group::isFreeCompany() const +bool Group::isFreeCompany() const { return m_type == GroupType::FreeCompany; } -bool Core::Entity::Group::Group::isLinkshell() const +bool Group::isLinkshell() const { return m_type == GroupType::Linkshell; } -bool Core::Entity::Group::Group::isFreeCompanyPetition() const +bool Group::isFreeCompanyPetition() const { return m_type == GroupType::FreeCompanyPetition; } -bool Core::Entity::Group::Group::isBlacklist() const +bool Group::isBlacklist() const { return m_type == GroupType::Blacklist; } -bool Core::Entity::Group::Group::isContentGroup() const +bool Group::isContentGroup() const { return m_type == GroupType::ContentGroup; } \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index d44df05b..1b25d2f4 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -2,6 +2,7 @@ #define _GROUP_H #include +#include #include #include #include @@ -19,7 +20,7 @@ using GroupPtr = boost::shared_ptr< Group >; struct GroupMember { uint64_t inviterId; - uint64_t contentId; + uint64_t contentId; // todo: maybe just use id.. std::string name; uint32_t role; }; @@ -31,7 +32,6 @@ enum class GroupType : uint8_t FriendList, FreeCompany, Linkshell, - FreeCompanyPetition, Blacklist, ContentGroup @@ -39,6 +39,31 @@ enum class GroupType : uint8_t class Group : public boost::enable_shared_from_this< Group > { +public: + Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : + m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; + ~Group() {}; + + bool isParty() const; + bool isFriendList() const; + bool isFreeCompany() const; + bool isLinkshell() const; + bool isFreeCompanyPetition() const; + bool isBlacklist() const; + bool isContentGroup() const; + + virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); + + /*! generates a player entry used for lists (social, etc) */ + Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember ); + + /*! get container limit */ + uint32_t getCapacity() const; + private: GroupType m_type{ GroupType::None }; uint64_t m_id{ 0 }; @@ -50,29 +75,12 @@ private: std::map< uint64_t, uint64_t > m_invites; // - + virtual void load(); virtual void update(); virtual void disband(); -public: - Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){}; - ~Group(){}; - bool isParty() const; - bool isFriendList() const; - bool isFreeCompany() const; - bool isLinkshell() const; - bool isFreeCompanyPetition() const; - bool isBlacklist() const; - bool isContentGroup() const; - - virtual Core::Network::Packets::GamePacketPtr addMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); - virtual Core::Network::Packets::GamePacketPtr inviteMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); - virtual Core::Network::Packets::GamePacketPtr removeMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); - virtual Core::Network::Packets::GamePacketPtr kickMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0); - virtual void sendPacketToMembers(Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false); }; } diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h index 0b490137..1ac6376e 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h +++ b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h @@ -16,6 +16,15 @@ namespace Group { class FriendListMgr : public GroupMgr { +public: + FriendListMgr( GroupType type, uint32_t maxEntries ) : + GroupMgr( type, maxEntries ), + m_type( type ), m_maxEntries( maxEntries ) {}; + ~FriendListMgr() {}; + + GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + GroupPtr findGroupById( uint64_t groupId ) const; + private: GroupType m_type{ GroupType::None }; uint64_t m_groupCount{ 0 }; @@ -24,13 +33,6 @@ private: std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; -public: - FriendListMgr( GroupType type, uint32_t maxEntries ) : - m_type( type ), m_maxEntries( maxEntries ){}; - ~FriendListMgr(){}; - - GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - GroupPtr findGroupById( uint64_t groupId ) const; }; } diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h index a26e19ba..521a72df 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h @@ -14,6 +14,14 @@ namespace Group { class GroupMgr : public boost::enable_shared_from_this< GroupMgr > { +public: + GroupMgr( GroupType type, uint32_t maxEntries ) : + m_type( type ), m_maxEntries( maxEntries ) {}; + ~GroupMgr() {}; + + GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + GroupPtr findGroupById( uint64_t groupId ) const; + private: GroupType m_type{ GroupType::None }; uint64_t m_groupCount{ 0 }; @@ -33,13 +41,7 @@ private: friend virtual void update(); friend virtual void disband(); */ -public: - GroupMgr( GroupType type, uint32_t maxEntries ) : - m_type( type ), m_maxEntries( maxEntries ){}; - ~GroupMgr(){}; - GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - GroupPtr findGroupById( uint64_t groupId ) const; }; } diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 6ad05126..f4300417 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -300,6 +300,11 @@ void Core::Entity::Player::sendStats() queuePacket( statPacket ); } +Group::FriendListPtr Core::Entity::Player::getFriendsList() const +{ + return m_friendsList; +} + void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) { auto data = g_exdData.getAetheryteInfo( aetheryteId ); @@ -900,33 +905,6 @@ Core::Entity::ActorPtr Core::Entity::Player::lookupTargetById( uint64_t targetId return targetActor; } -Core::Network::Packets::Server::PlayerEntry Core::Entity::Player::generatePlayerEntry() -{ - Core::Network::Packets::Server::PlayerEntry entry = {}; - - entry.bytes[2] = getCurrentZone()->getId(); - entry.bytes[3] = 0x80; - entry.bytes[4] = 0x02; - entry.bytes[6] = 0x3B; - entry.bytes[11] = 0x10; - entry.classJob = getClass(); - entry.contentId = getContentId(); - entry.level = getLevel(); - entry.zoneId = getCurrentZone()->getId(); - entry.grandCompany = getGc(); - memcpy( &entry.fcTag[0], "Meme", 9 ); - entry.clientLanguage = 2; - entry.knownLanguages = 0x0F; - // TODO: no idea what this does - me neither - //listPacket.data().entries[0].one = 1; - - memcpy( entry.name, getName().c_str(), strlen( getName().c_str() ) ); - - entry.onlineStatusMask = getOnlineStatusMask(); - - return entry; -} - void Core::Entity::Player::setLastPing( uint32_t ping ) { m_lastPing = ping; diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 9039c10c..40015bcf 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -5,6 +5,7 @@ #include #include +#include #include "Actor.h" #include "src/servers/Server_Zone/Inventory/Inventory.h" @@ -351,6 +352,11 @@ public: void calculateStats() override; void sendStats(); + // Social-based + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + Group::FriendListPtr getFriendsList() const; + // Aetheryte / Action / Attribute bitmasks ////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -481,9 +487,6 @@ public: void sendUrgent( const std::string& message ); void sendDebug( const std::string& message ); - /*! generates a player entry used for lists (social, etc) */ - Core::Network::Packets::Server::PlayerEntry generatePlayerEntry(); - // Player Battle Handling ////////////////////////////////////////////////////////////////////////////////////////////////////// void onMobAggro( BattleNpcPtr pBNpc ); @@ -610,6 +613,10 @@ private: uint8_t m_gmRank; uint16_t zoneId; + // Social-based + + Group::FriendListPtr m_friendsList; + uint8_t m_equipDisplayFlags; bool m_bInCombat; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index ccd33a27..e603a996 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -436,7 +436,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket if( type == SocialListType::PartyList ) { // party list - ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() );; + /*ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() );; listPacket.data().type = 2; listPacket.data().sequence = count; @@ -446,37 +446,13 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket listPacket.data().entries[0] = pPlayer->generatePlayerEntry(); - queueOutPacket( listPacket ); + queueOutPacket( listPacket );*/ } else if( type == SocialListType::FriendList ) { // friend list - ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); - listPacket.data().type = 0x0B; - listPacket.data().sequence = count; - memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); - - // todo: for now.. just grab all actors in range and add them in. just replace logic later by using manager - - uint8_t i = 0; - - for( auto actor : pPlayer->getInRangeActors() ) - { - auto pFriend = actor->getAsPlayer(); - if( pFriend ) - { - /*listPacket.data().entries[i] = pFriend->generatePlayerEntry(); - i++;*/ - } - - // todo: remove this branch entirely when using manager. physically hurts - if( i >= 200 ) - { - break; - } - - } + ZoneChannelPacket< FFXIVIpcSocialList > listPacket = pPlayer->getFriendsList()->generateFriendsListPacket( pPlayer ); queueOutPacket( listPacket ); @@ -675,6 +651,9 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac pRecipient->queuePacket( packet ); pRecipient->sendDebug( "ding ding" ); + + pRecipient->getFriendsList()->addMember( pPlayer, pRecipient, pPlayer->getId(), pRecipient->getId() ); + response.data().messageId = typeMessage[category]; } } @@ -803,7 +782,7 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa void Core::Network::GameConnection::performNoteHandler( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer ) { - GamePacketNew< FFXIVIpcPerformNote, ServerZoneIpcType > performPacket( pPlayer->getId() ); + GamePacketNew< FFXIVIpcPerformNote, ServerZoneIpcType > performPacket( pPlayer->getId() ); // todo: change to zonepacket uint8_t inVal = inPacket.getValAt< uint8_t >( 0x20 ); memcpy( &performPacket.data().data[0], &inVal, 32 ); From ef0668623790066420a495b6fa63830435b1056e Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 04:32:13 -0200 Subject: [PATCH 07/46] Make it compile --- src/servers/Server_Zone/Actor/Group/FriendList.cpp | 6 +++++- src/servers/Server_Zone/Actor/Group/FriendList.h | 5 ++++- src/servers/Server_Zone/Actor/Group/Group.cpp | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Group/FriendList.cpp index 7d87a039..d08bc94b 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Group/FriendList.cpp @@ -28,10 +28,12 @@ std::vector< PlayerEntry > Core::Entity::Group::FriendList::getFriendListEntries entryList.push_back( generatePlayerEntry( member.second ) ); limit++; } + + return entryList; } //todo: make this function generic for all groups, and override if needed? -ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generateFriendsListPacket( PlayerPtr pPlayer ) +Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generateFriendsListPacket( PlayerPtr pPlayer ) { ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); listPacket.data().type = 0x0B; @@ -48,4 +50,6 @@ ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generat listPacket.data().entries[i] = generatePlayerEntry( member.second ); i++; } + + return listPacket; } diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.h b/src/servers/Server_Zone/Actor/Group/FriendList.h index ba8aedd4..5b63b377 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.h +++ b/src/servers/Server_Zone/Actor/Group/FriendList.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -49,9 +50,11 @@ public: bool isBlacklist() const; bool isContentGroup() const; + Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > generateFriendsListPacket( PlayerPtr pPlayer ); + std::vector< Core::Network::Packets::Server::PlayerEntry > getFriendListEntries( uint16_t entryAmount ); - Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > generateFriendsListPacket( PlayerPtr pPlayer ); + private: GroupType m_type{ GroupType::FriendList }; diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 79ecb406..26cdd7e3 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -18,7 +18,7 @@ using namespace Core::Entity::Group; // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up -Core::Network::Packets::GamePacketPtr Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) +Core::Network::Packets::GamePacketPtr Group::addMember( Core::Entity::PlayerPtr pSender, Core::Entity::PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) { constexpr uint32_t logMessages[] = { 0, // From 5b58e5a6e28a65d5a82f13a6f701c8ff71375be5 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 13:17:15 -0200 Subject: [PATCH 08/46] Decouple packet handling; --- .../Server_Zone/Actor/Group/FriendList.cpp | 26 +++---------------- src/servers/Server_Zone/Actor/Group/Group.cpp | 5 ++++ src/servers/Server_Zone/Actor/Group/Group.h | 6 ++++- .../Network/Handlers/PacketHandlers.cpp | 19 +++++++++++++- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Group/FriendList.cpp index d08bc94b..5ceb720d 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Group/FriendList.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -11,6 +12,7 @@ #include "FriendList.h" extern Core::ServerZone g_serverZone; +extern Core::Logger g_log; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; @@ -30,26 +32,4 @@ std::vector< PlayerEntry > Core::Entity::Group::FriendList::getFriendListEntries } return entryList; -} - -//todo: make this function generic for all groups, and override if needed? -Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > Core::Entity::Group::FriendList::generateFriendsListPacket( PlayerPtr pPlayer ) -{ - ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); - listPacket.data().type = 0x0B; - listPacket.data().sequence = 10; - memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); - - uint16_t i = 0; - - for ( const auto& member : m_members ) - { - if ( i == 10 ) - break; - - listPacket.data().entries[i] = generatePlayerEntry( member.second ); - i++; - } - - return listPacket; -} +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Group/Group.cpp index 26cdd7e3..3be65ecf 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Group/Group.cpp @@ -113,6 +113,11 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem return entry; } +std::map< uint64_t, GroupMember > Group::getMembers() const +{ + return m_members; +} + uint32_t Group::getCapacity() const { return m_maxCapacity; diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Group/Group.h index 1b25d2f4..527e68f7 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Group/Group.h @@ -59,7 +59,11 @@ public: virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); /*! generates a player entry used for lists (social, etc) */ - Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember ); + static Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember ); + + /*! access GroupMember vector */ + + std::map< uint64_t, GroupMember > getMembers() const; /*! get container limit */ uint32_t getCapacity() const; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index e603a996..7962ec8f 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -452,7 +452,24 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket else if( type == SocialListType::FriendList ) { // friend list - ZoneChannelPacket< FFXIVIpcSocialList > listPacket = pPlayer->getFriendsList()->generateFriendsListPacket( pPlayer ); + ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); + listPacket.data().type = 0x0B; + listPacket.data().sequence = 10; + memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); + + uint16_t i = 0; + + g_log.debug( std::to_string( pPlayer->getFriendsList()->getMembers().size() ) ); + + for ( auto member : pPlayer->getFriendsList()->getMembers() ) + { + if ( i == 10 ) + break; + + g_log.debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); + listPacket.data().entries[i] = Core::Entity::Group::Group::generatePlayerEntry( member.second ); + i++; + } queueOutPacket( listPacket ); From b85bc25f5889b2530dffe6d6c5f695e9fbc6d42f Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 17:28:55 -0200 Subject: [PATCH 09/46] Refactor some more, work on Manager global obj; --- .../Actor/Group/Manager/FriendListMgr.cpp | 2 - .../Actor/Group/Manager/FriendListMgr.h | 41 ------------------- src/servers/Server_Zone/Actor/Player.cpp | 9 +++- src/servers/Server_Zone/Actor/Player.h | 7 ++-- .../Actor/{Group => Social}/ContentGroup.cpp | 0 .../Actor/{Group => Social}/ContentGroup.h | 0 .../Actor/{Group => Social}/FreeCompany.cpp | 0 .../Actor/{Group => Social}/FreeCompany.h | 0 .../Actor/{Group => Social}/FriendList.cpp | 3 +- .../Actor/{Group => Social}/FriendList.h | 8 ++-- .../Actor/{Group => Social}/Group.cpp | 2 +- .../Actor/{Group => Social}/Group.h | 2 +- .../Actor/{Group => Social}/Linkshell.cpp | 0 .../Actor/{Group => Social}/Linkshell.h | 0 .../Manager/ContentGroupMgr.cpp | 0 .../Manager/ContentGroupMgr.h | 0 .../Manager/FreeCompanyMgr.cpp | 0 .../Manager/FreeCompanyMgr.h | 0 .../Actor/Social/Manager/FriendListMgr.cpp | 30 ++++++++++++++ .../Actor/Social/Manager/FriendListMgr.h | 37 +++++++++++++++++ .../{Group => Social}/Manager/GroupMgr.cpp | 11 ++++- .../{Group => Social}/Manager/GroupMgr.h | 10 ++--- .../Manager/LinkshellMgr.cpp | 0 .../{Group => Social}/Manager/LinkshellMgr.h | 0 .../{Group => Social}/Manager/PartyMgr.cpp | 0 .../{Group => Social}/Manager/PartyMgr.h | 0 .../Actor/{Group => Social}/Party.cpp | 0 .../Actor/{Group => Social}/Party.h | 0 .../Network/Handlers/PacketHandlers.cpp | 2 +- 29 files changed, 100 insertions(+), 64 deletions(-) delete mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp delete mode 100644 src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h rename src/servers/Server_Zone/Actor/{Group => Social}/ContentGroup.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/ContentGroup.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/FreeCompany.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/FreeCompany.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/FriendList.cpp (86%) rename src/servers/Server_Zone/Actor/{Group => Social}/FriendList.h (89%) rename src/servers/Server_Zone/Actor/{Group => Social}/Group.cpp (99%) rename src/servers/Server_Zone/Actor/{Group => Social}/Group.h (99%) rename src/servers/Server_Zone/Actor/{Group => Social}/Linkshell.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Linkshell.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/ContentGroupMgr.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/ContentGroupMgr.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/FreeCompanyMgr.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/FreeCompanyMgr.h (100%) create mode 100644 src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp create mode 100644 src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/GroupMgr.cpp (56%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/GroupMgr.h (87%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/LinkshellMgr.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/LinkshellMgr.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/PartyMgr.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Manager/PartyMgr.h (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Party.cpp (100%) rename src/servers/Server_Zone/Actor/{Group => Social}/Party.h (100%) diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp deleted file mode 100644 index 1293cfed..00000000 --- a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "../FriendList.h" -#include "FriendListMgr.h" diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h deleted file mode 100644 index 1ac6376e..00000000 --- a/src/servers/Server_Zone/Actor/Group/Manager/FriendListMgr.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _FRIENDLISTMGR_H -#define _FRIENDLISTMGR_H - -#include -#include - -#include -#include -#include - -#include - -namespace Core { -namespace Entity { -namespace Group { - -class FriendListMgr : public GroupMgr -{ -public: - FriendListMgr( GroupType type, uint32_t maxEntries ) : - GroupMgr( type, maxEntries ), - m_type( type ), m_maxEntries( maxEntries ) {}; - ~FriendListMgr() {}; - - GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - GroupPtr findGroupById( uint64_t groupId ) const; - -private: - GroupType m_type{ GroupType::None }; - uint64_t m_groupCount{ 0 }; - uint32_t m_maxEntries{ 0xFFFFFFFF }; - std::map< uint64_t, GroupPtr > m_groups; // < groupid, groupPtr > - std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > - virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; - -}; - -} -} -}; -#endif /* ! _FRIENDLISTMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index a3c63893..d17d2fc6 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -29,6 +29,9 @@ #include "src/servers/Server_Zone/Network/PacketWrappers/PlayerStateFlagsPacket.h" #include "src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h" +#include "src/servers/Server_Zone/Actor/Social/FriendList.h" +#include "src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h" + #include "src/servers/Server_Zone/Script/ScriptManager.h" #include "src/servers/Server_Zone/Inventory/Item.h" @@ -49,6 +52,8 @@ extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::Scripting::ScriptManager g_scriptMgr; +extern Core::Entity::Social::FriendListMgr g_friendListMgr; + using namespace Core::Common; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; @@ -300,7 +305,7 @@ void Core::Entity::Player::sendStats() queuePacket( statPacket ); } -Group::FriendListPtr Core::Entity::Player::getFriendsList() const +Social::FriendListPtr Core::Entity::Player::getFriendsList() const { return m_friendsList; } @@ -441,6 +446,8 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) gcAffPacket.data().gcRank[2] = m_gcRank[2]; queuePacket( gcAffPacket ); + m_friendsList = g_friendListMgr.getPlayerFriendsList( getId() ); + m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); sendItemLevel(); } diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 35db1533..e51c6b01 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -5,7 +5,8 @@ #include #include -#include +#include +#include #include "Actor.h" #include "src/servers/Server_Zone/Inventory/Inventory.h" @@ -359,7 +360,7 @@ public: // Social-based ////////////////////////////////////////////////////////////////////////////////////////////////////// - Group::FriendListPtr getFriendsList() const; + Social::FriendListPtr getFriendsList() const; // Aetheryte / Action / Attribute bitmasks @@ -623,7 +624,7 @@ private: // Social-based - Group::FriendListPtr m_friendsList; + Social::FriendListPtr m_friendsList; uint8_t m_equipDisplayFlags; diff --git a/src/servers/Server_Zone/Actor/Group/ContentGroup.cpp b/src/servers/Server_Zone/Actor/Social/ContentGroup.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/ContentGroup.cpp rename to src/servers/Server_Zone/Actor/Social/ContentGroup.cpp diff --git a/src/servers/Server_Zone/Actor/Group/ContentGroup.h b/src/servers/Server_Zone/Actor/Social/ContentGroup.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/ContentGroup.h rename to src/servers/Server_Zone/Actor/Social/ContentGroup.h diff --git a/src/servers/Server_Zone/Actor/Group/FreeCompany.cpp b/src/servers/Server_Zone/Actor/Social/FreeCompany.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/FreeCompany.cpp rename to src/servers/Server_Zone/Actor/Social/FreeCompany.cpp diff --git a/src/servers/Server_Zone/Actor/Group/FreeCompany.h b/src/servers/Server_Zone/Actor/Social/FreeCompany.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/FreeCompany.h rename to src/servers/Server_Zone/Actor/Social/FreeCompany.h diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.cpp b/src/servers/Server_Zone/Actor/Social/FriendList.cpp similarity index 86% rename from src/servers/Server_Zone/Actor/Group/FriendList.cpp rename to src/servers/Server_Zone/Actor/Social/FriendList.cpp index 5ceb720d..37f89bf4 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Social/FriendList.cpp @@ -14,10 +14,11 @@ extern Core::ServerZone g_serverZone; extern Core::Logger g_log; +using namespace Core::Entity; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; -std::vector< PlayerEntry > Core::Entity::Group::FriendList::getFriendListEntries( uint16_t entryAmount ) +std::vector< PlayerEntry > Core::Entity::Social::FriendList::getFriendListEntries( uint16_t entryAmount ) { std::vector< PlayerEntry > entryList = {}; uint16_t limit = 0; diff --git a/src/servers/Server_Zone/Actor/Group/FriendList.h b/src/servers/Server_Zone/Actor/Social/FriendList.h similarity index 89% rename from src/servers/Server_Zone/Actor/Group/FriendList.h rename to src/servers/Server_Zone/Actor/Social/FriendList.h index 5b63b377..bc9503d2 100644 --- a/src/servers/Server_Zone/Actor/Group/FriendList.h +++ b/src/servers/Server_Zone/Actor/Social/FriendList.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -17,7 +17,7 @@ using namespace Core::Network::Packets::Server; namespace Core { namespace Entity { -namespace Group { +namespace Social { class FriendList; using FriendListPtr = boost::shared_ptr< FriendList >; @@ -28,7 +28,7 @@ class FriendList : public Group public: FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : Group( id, ownerId, maxCapacity, createTime ), - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; + m_id( id ), m_ownerId( ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; ~FriendList() {}; @@ -50,8 +50,6 @@ public: bool isBlacklist() const; bool isContentGroup() const; - Core::Network::Packets::ZoneChannelPacket< FFXIVIpcSocialList > generateFriendsListPacket( PlayerPtr pPlayer ); - std::vector< Core::Network::Packets::Server::PlayerEntry > getFriendListEntries( uint16_t entryAmount ); diff --git a/src/servers/Server_Zone/Actor/Group/Group.cpp b/src/servers/Server_Zone/Actor/Social/Group.cpp similarity index 99% rename from src/servers/Server_Zone/Actor/Group/Group.cpp rename to src/servers/Server_Zone/Actor/Social/Group.cpp index 3be65ecf..d6761737 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.cpp +++ b/src/servers/Server_Zone/Actor/Social/Group.cpp @@ -13,7 +13,7 @@ extern Core::ServerZone g_serverZone; -using namespace Core::Entity::Group; +using namespace Core::Entity::Social; // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up diff --git a/src/servers/Server_Zone/Actor/Group/Group.h b/src/servers/Server_Zone/Actor/Social/Group.h similarity index 99% rename from src/servers/Server_Zone/Actor/Group/Group.h rename to src/servers/Server_Zone/Actor/Social/Group.h index 527e68f7..e17624ba 100644 --- a/src/servers/Server_Zone/Actor/Group/Group.h +++ b/src/servers/Server_Zone/Actor/Social/Group.h @@ -12,7 +12,7 @@ namespace Core { namespace Entity { -namespace Group { +namespace Social { class Group; using GroupPtr = boost::shared_ptr< Group >; diff --git a/src/servers/Server_Zone/Actor/Group/Linkshell.cpp b/src/servers/Server_Zone/Actor/Social/Linkshell.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Linkshell.cpp rename to src/servers/Server_Zone/Actor/Social/Linkshell.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Linkshell.h b/src/servers/Server_Zone/Actor/Social/Linkshell.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Linkshell.h rename to src/servers/Server_Zone/Actor/Social/Linkshell.h diff --git a/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.cpp rename to src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/ContentGroupMgr.h rename to src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.h diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.cpp rename to src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/FreeCompanyMgr.h rename to src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp new file mode 100644 index 00000000..77c237b3 --- /dev/null +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp @@ -0,0 +1,30 @@ +#include + +#include +#include + +#include "../Group.h" +#include "../FriendList.h" +#include "FriendListMgr.h" + +extern Core::Logger g_log; + +using namespace Core::Entity; + +Social::FriendListMgr::FriendListMgr() +{ + +} + +Social::FriendListPtr Social::FriendListMgr::getPlayerFriendsList( uint32_t playerId ) +{ + std::mt19937_64 engine( std::random_device{}( ) ); + std::uniform_int_distribution distribution; + auto ui64 = distribution( engine ); + + FriendList nFriendList( ui64, playerId, 200, std::chrono::steady_clock::now() ); + + FriendListPtr pFriendList = boost::make_shared< FriendList >( nFriendList ); + pFriendList->getCapacity(); + return pFriendList; +} \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h new file mode 100644 index 00000000..fb8b28fc --- /dev/null +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h @@ -0,0 +1,37 @@ +#ifndef _FRIENDLISTMGR_H +#define _FRIENDLISTMGR_H + +#include +#include + +#include +#include +#include +#include + +#include + +namespace Core { +namespace Entity { +namespace Social { + +class FriendListMgr +{ +public: + FriendListMgr(); + + FriendListPtr getPlayerFriendsList( uint32_t playerId ); + +private: + GroupType m_type{ GroupType::FriendList }; + uint64_t m_groupCount{ 0 }; + uint32_t m_maxEntries{ 0xFFFFFFFF }; + std::map< uint64_t, GroupPtr > m_groups; // < groupid, groupPtr > + std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > + +}; + +} +} +}; +#endif /* ! _FRIENDLISTMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp similarity index 56% rename from src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp rename to src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp index ec4bc16a..70d86f03 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.cpp +++ b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp @@ -1,7 +1,14 @@ #include "../Group.h" #include "GroupMgr.h" -Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const +using namespace Core::Entity; + +Social::GroupMgr::GroupMgr() +{ + +} + +Social::GroupPtr Social::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const { auto it = m_invites.find( playerId ); if( it != m_invites.end() ) @@ -11,7 +18,7 @@ Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupByInviteId return nullptr; } -Core::Entity::Group::GroupPtr Core::Entity::Group::GroupMgr::findGroupById( uint64_t groupId ) const +Social::GroupPtr Core::Entity::Social::GroupMgr::findGroupById( uint64_t groupId ) const { auto it = m_groups.find( groupId ); if( it != m_groups.end() ) diff --git a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h similarity index 87% rename from src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h rename to src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h index 521a72df..4e519b33 100644 --- a/src/servers/Server_Zone/Actor/Group/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h @@ -6,18 +6,16 @@ #include #include -#include +#include namespace Core { namespace Entity { -namespace Group { +namespace Social { class GroupMgr : public boost::enable_shared_from_this< GroupMgr > { public: - GroupMgr( GroupType type, uint32_t maxEntries ) : - m_type( type ), m_maxEntries( maxEntries ) {}; - ~GroupMgr() {}; + GroupMgr(); GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; GroupPtr findGroupById( uint64_t groupId ) const; @@ -28,7 +26,7 @@ private: uint32_t m_maxEntries{ 0xFFFFFFFF }; std::map< uint64_t, GroupPtr > m_groups; std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > - virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; + //virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; /* friend virtual Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); diff --git a/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.cpp rename to src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/LinkshellMgr.h rename to src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.h diff --git a/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.cpp rename to src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Manager/PartyMgr.h rename to src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.h diff --git a/src/servers/Server_Zone/Actor/Group/Party.cpp b/src/servers/Server_Zone/Actor/Social/Party.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Party.cpp rename to src/servers/Server_Zone/Actor/Social/Party.cpp diff --git a/src/servers/Server_Zone/Actor/Group/Party.h b/src/servers/Server_Zone/Actor/Social/Party.h similarity index 100% rename from src/servers/Server_Zone/Actor/Group/Party.h rename to src/servers/Server_Zone/Actor/Social/Party.h diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 7962ec8f..a3c09d7f 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -467,7 +467,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket break; g_log.debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); - listPacket.data().entries[i] = Core::Entity::Group::Group::generatePlayerEntry( member.second ); + listPacket.data().entries[i] = Core::Entity::Social::Group::generatePlayerEntry( member.second ); i++; } From 28f2a91b21d77070fd54e24f830f69fac59e3be4 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 17:50:54 -0200 Subject: [PATCH 10/46] Please compile --- .../Server_Zone/Actor/Social/FriendList.cpp | 1 + src/servers/Server_Zone/Actor/Social/FriendList.h | 14 ++++---------- src/servers/Server_Zone/Actor/Social/Group.h | 7 ++++--- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Social/FriendList.cpp b/src/servers/Server_Zone/Actor/Social/FriendList.cpp index 37f89bf4..6f8e4463 100644 --- a/src/servers/Server_Zone/Actor/Social/FriendList.cpp +++ b/src/servers/Server_Zone/Actor/Social/FriendList.cpp @@ -10,6 +10,7 @@ #include #include #include "FriendList.h" +#include "Group.h" extern Core::ServerZone g_serverZone; extern Core::Logger g_log; diff --git a/src/servers/Server_Zone/Actor/Social/FriendList.h b/src/servers/Server_Zone/Actor/Social/FriendList.h index bc9503d2..bc535758 100644 --- a/src/servers/Server_Zone/Actor/Social/FriendList.h +++ b/src/servers/Server_Zone/Actor/Social/FriendList.h @@ -32,23 +32,17 @@ public: ~FriendList() {}; - virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); - - virtual void load(); + /*virtual void load(); virtual void update(); - virtual void disband(); + virtual void disband();*/ bool isParty() const; bool isFriendList() const; bool isFreeCompany() const; bool isLinkshell() const; bool isFreeCompanyPetition() const; - bool isBlacklist() const; - bool isContentGroup() const; + /*bool isBlacklist() const; + bool isContentGroup() const;*/ std::vector< Core::Network::Packets::Server::PlayerEntry > getFriendListEntries( uint16_t entryAmount ); diff --git a/src/servers/Server_Zone/Actor/Social/Group.h b/src/servers/Server_Zone/Actor/Social/Group.h index e17624ba..a315d19c 100644 --- a/src/servers/Server_Zone/Actor/Social/Group.h +++ b/src/servers/Server_Zone/Actor/Social/Group.h @@ -53,9 +53,10 @@ public: bool isContentGroup() const; virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + /* virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );*/ virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); /*! generates a player entry used for lists (social, etc) */ @@ -81,9 +82,9 @@ private: - virtual void load(); + /*virtual void load(); virtual void update(); - virtual void disband(); + virtual void disband();*/ }; From f5ae374c31edb4431d93b811bac32db639f9554b Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 7 Dec 2017 19:38:17 -0200 Subject: [PATCH 11/46] Partial friend request/list coupling with social manager --- src/servers/Server_Zone/Actor/Player.cpp | 7 ++++--- src/servers/Server_Zone/Actor/Social/Group.cpp | 15 ++++++++------- .../Actor/Social/Manager/FriendListMgr.cpp | 14 ++++++++++++-- .../Actor/Social/Manager/FriendListMgr.h | 4 ++++ src/servers/Server_Zone/CMakeLists.txt | 8 ++++---- .../Network/Handlers/PacketHandlers.cpp | 2 +- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index d17d2fc6..f35425a4 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -52,8 +52,6 @@ extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::Scripting::ScriptManager g_scriptMgr; -extern Core::Entity::Social::FriendListMgr g_friendListMgr; - using namespace Core::Common; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; @@ -446,7 +444,10 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) gcAffPacket.data().gcRank[2] = m_gcRank[2]; queuePacket( gcAffPacket ); - m_friendsList = g_friendListMgr.getPlayerFriendsList( getId() ); + //todo: change this to extern, global obj + Core::Entity::Social::FriendListMgr fListMgr = {}; + + m_friendsList = fListMgr.getPlayerFriendsList( getId() ); m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); sendItemLevel(); diff --git a/src/servers/Server_Zone/Actor/Social/Group.cpp b/src/servers/Server_Zone/Actor/Social/Group.cpp index d6761737..a58c3434 100644 --- a/src/servers/Server_Zone/Actor/Social/Group.cpp +++ b/src/servers/Server_Zone/Actor/Social/Group.cpp @@ -53,6 +53,7 @@ Core::Network::Packets::GamePacketPtr Group::addMember( Core::Entity::PlayerPtr member.inviterId = senderId; member.role = 0; member.contentId = recipientId; + member.name = pSender->getName(); m_members.emplace( recipientId, member ); } else @@ -85,17 +86,17 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem // We check if player is online. If so, we can pull more data - otherwise just name // todo: set as offline in one of the unknown values, if session does not exist - auto pSession = g_serverZone.getSession( groupMember.name ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? - + auto pSession = g_serverZone.getSession( groupMember.contentId ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? + entry.bytes[3] = 0x80; + entry.bytes[4] = 0x02; + entry.bytes[6] = 0x3B; + entry.bytes[11] = 0x10; if( pSession ) { auto pPlayer = pSession->getPlayer(); - + entry.contentId = pPlayer->getContentId(); entry.bytes[2] = pPlayer->getCurrentZone()->getId(); - entry.bytes[3] = 0x80; - entry.bytes[4] = 0x02; - entry.bytes[6] = 0x3B; - entry.bytes[11] = 0x10; + entry.classJob = pPlayer->getClass(); entry.level = pPlayer->getLevel(); diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp index 77c237b3..373d4bf4 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp @@ -11,9 +11,19 @@ extern Core::Logger g_log; using namespace Core::Entity; -Social::FriendListMgr::FriendListMgr() +Core::Entity::Social::FriendListMgr::FriendListMgr() { - + +} + +Core::Entity::Social::FriendListMgr::~FriendListMgr() +{ + +} + +bool Social::FriendListMgr::init() +{ + return true; } Social::FriendListPtr Social::FriendListMgr::getPlayerFriendsList( uint32_t playerId ) diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h index fb8b28fc..560cd7eb 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h @@ -10,6 +10,7 @@ #include #include +#include namespace Core { namespace Entity { @@ -19,6 +20,9 @@ class FriendListMgr { public: FriendListMgr(); + ~FriendListMgr(); + + bool init(); FriendListPtr getPlayerFriendsList( uint32_t playerId ); diff --git a/src/servers/Server_Zone/CMakeLists.txt b/src/servers/Server_Zone/CMakeLists.txt index fd8f405e..6dbf14e9 100644 --- a/src/servers/Server_Zone/CMakeLists.txt +++ b/src/servers/Server_Zone/CMakeLists.txt @@ -7,8 +7,8 @@ project(Sapphire_Zone) file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} /*.h Actor/*.h - Actor/Group/*.h - Actor/Group/Manager/*.h + Actor/Social/*.h + Actor/Social/Manager/*.h Action/*.h DebugCommand/*.h Event/*.h @@ -25,8 +25,8 @@ file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} file(GLOB SERVER_SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c* Actor/*.c* - Actor/Group/*.c* - Actor/Group/Manager/*.c* + Actor/Social/*.c* + Actor/Social/Manager/*.c* Action/*.c* DebugCommand/*.c* Event/*.c* diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index a3c09d7f..e57a1c03 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -454,7 +454,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket ZoneChannelPacket< FFXIVIpcSocialList > listPacket( pPlayer->getId() ); listPacket.data().type = 0x0B; - listPacket.data().sequence = 10; + listPacket.data().sequence = count; memset( listPacket.data().entries, 0, sizeof( listPacket.data().entries ) ); uint16_t i = 0; From 794fef41a3a2f3d3482d670e755a0af4edad4014 Mon Sep 17 00:00:00 2001 From: Maru Date: Fri, 8 Dec 2017 21:04:58 -0200 Subject: [PATCH 12/46] Compile please thanks --- src/servers/Server_Zone/Actor/Player.h | 13 ++++--- .../Server_Zone/Actor/Social/Group.cpp | 6 ++-- .../Network/Handlers/PacketHandlers.cpp | 34 +++++++++---------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 95f38307..d7e6c0c7 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -3,17 +3,16 @@ #include "Forwards.h" -<<<<<<< HEAD -#include -#include -#include -#include -======= + +#include +#include +#include +#include #include ->>>>>>> d84d3be97820f596f748daefbdf8b472df002c61 #include "Actor.h" #include "Inventory/Inventory.h" + #include #include diff --git a/src/servers/Server_Zone/Actor/Social/Group.cpp b/src/servers/Server_Zone/Actor/Social/Group.cpp index a58c3434..0b8654d3 100644 --- a/src/servers/Server_Zone/Actor/Social/Group.cpp +++ b/src/servers/Server_Zone/Actor/Social/Group.cpp @@ -87,9 +87,9 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem // todo: set as offline in one of the unknown values, if session does not exist auto pSession = g_serverZone.getSession( groupMember.contentId ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? - entry.bytes[3] = 0x80; - entry.bytes[4] = 0x02; - entry.bytes[6] = 0x3B; + entry.bytes[3] = 0x10; + entry.bytes[4] = 0x00; + entry.bytes[6] = 0x3F; entry.bytes[11] = 0x10; if( pSession ) { diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 0b4e9d83..4df45760 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -447,11 +447,11 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket listPacket.data().entries[0].bytes[4] = 0x02; listPacket.data().entries[0].bytes[6] = 0x3B; listPacket.data().entries[0].bytes[11] = 0x10; - listPacket.data().entries[0].classJob = static_cast< uint8_t >( player.getClass() ); + listPacket.data().entries[0].classJob = player.getClass(); listPacket.data().entries[0].contentId = player.getContentId(); listPacket.data().entries[0].level = player.getLevel(); listPacket.data().entries[0].zoneId = player.getCurrentZone()->getId(); - listPacket.data().entries[0].zoneId1 = 0x0100; + //listPacket.data().entries[0].zoneId1 = 0x0100; // TODO: no idea what this does //listPacket.data().entries[0].one = 1; @@ -476,9 +476,9 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket uint16_t i = 0; - g_log.debug( std::to_string( pPlayer->getFriendsList()->getMembers().size() ) ); + g_log.debug( std::to_string( player.getFriendsList()->getMembers().size() ) ); - for ( auto member : pPlayer->getFriendsList()->getMembers() ) + for ( auto member : player.getFriendsList()->getMembers() ) { if ( i == 10 ) break; @@ -499,20 +499,20 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket } void Core::Network::GameConnection::socialReqResponseHandler( const Packets::GamePacket& inPacket, - Entity::PlayerPtr pPlayer ) + Entity::Player& player ) { auto targetId = inPacket.getValAt< uint32_t >( 0x20 ); auto category = inPacket.getValAt< Common::SocialCategory >( 0x28 ); auto action = inPacket.getValAt< Common::SocialRequestAction >( 0x29 ); - ZoneChannelPacket< FFXIVIpcSocialRequestError > info( targetId, pPlayer->getId() ); - ZoneChannelPacket< FFXIVIpcSocialRequestResponse > response( targetId, pPlayer->getId() ); + ZoneChannelPacket< FFXIVIpcSocialRequestError > info( targetId, player.getId() ); + ZoneChannelPacket< FFXIVIpcSocialRequestResponse > response( targetId, player.getId() ); info.data().category = category; response.data().category = category; //auto pQR = g_database.query( "SELECT Name FROM dbchara WHERE CharacterId = " + to_string( targetId ) ); - auto name = pPlayer->getName(); + auto name = player.getName(); /* if( pQR->getRowCount() > 0 ) { @@ -546,11 +546,11 @@ void Core::Network::GameConnection::socialReqResponseHandler( const Packets::Gam } response.data().response = Common::SocialRequestResponse::Accept; memcpy( &( response.data().name ), name.c_str(), 32 ); - pPlayer->queuePacket( response ); + player.queuePacket( response ); } void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePacket& inPacket, - Entity::PlayerPtr pPlayer ) + Entity::Player& player ) { // todo: handle all social request packets here auto category = inPacket.getValAt< Common::SocialCategory >( 0x20 ); @@ -559,7 +559,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac auto pSession = g_serverZone.getSession( name ); // only the requester needs the response - ZoneChannelPacket< FFXIVIpcSocialRequestError > response( pPlayer->getId() ); + ZoneChannelPacket< FFXIVIpcSocialRequestError > response( player.getId() ); memcpy( &( response.data().name ), name.c_str(), 32 ); // todo: enumerate log messages @@ -588,7 +588,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac return; }*/ - if( pRecipient->getId() == pPlayer->getId() ) + if( pRecipient->getId() == player.getId() ) { response.data().messageId = 321; // Unable to invite. } @@ -658,7 +658,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac if( successful ) { - ZoneChannelPacket< FFXIVIpcSocialRequestReceive > packet( pPlayer->getId(), pRecipient->getId() ); + ZoneChannelPacket< FFXIVIpcSocialRequestReceive > packet( player.getId(), pRecipient->getId() ); std::array typeMessage{ 0, 1, // You invite to a party. @@ -675,24 +675,24 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac pRecipient->setTempVariable( typeVar[category] + "Id", pPlayer->getId() ); pRecipient->setTempVariable( typeVar[category] + "Timer", expireTime );*/ - packet.data().actorId = pPlayer->getId(); + packet.data().actorId = player.getId(); packet.data().category = category; packet.data().action = Core::Common::SocialRequestAction::Invite; packet.data().unknown3 = 80; packet.data().unknown = 46; packet.data().unknown2 = 64; - memcpy( &( packet.data().name ), pPlayer->getName().c_str(), 32 ); + memcpy( &( packet.data().name ), player.getName().c_str(), 32 ); pRecipient->queuePacket( packet ); pRecipient->sendDebug( "ding ding" ); - pRecipient->getFriendsList()->addMember( pPlayer, pRecipient, pPlayer->getId(), pRecipient->getId() ); + pRecipient->getFriendsList()->addMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); response.data().messageId = typeMessage[category]; } } - pPlayer->queuePacket( response ); + player.queuePacket( response ); // todo: handle party, friend request g_log.debug("sent to " + name); } From 9e152f253fcfed50bc83b487e34f4c141a5b9e4a Mon Sep 17 00:00:00 2001 From: Maru Date: Tue, 19 Dec 2017 03:42:04 -0200 Subject: [PATCH 13/46] Reworking some more on group generation and flow; --- .../Network/PacketDef/Zone/ServerZoneDef.h | 9 ++- src/servers/Server_Zone/Actor/Player.cpp | 6 +- src/servers/Server_Zone/Actor/Player.h | 4 +- .../Server_Zone/Actor/Social/FriendList.h | 17 ++---- .../Server_Zone/Actor/Social/Group.cpp | 61 ++++++++++++++++--- src/servers/Server_Zone/Actor/Social/Group.h | 17 +++--- .../Actor/Social/Manager/FriendListMgr.cpp | 23 +++---- .../Actor/Social/Manager/FriendListMgr.h | 17 +++--- .../Actor/Social/Manager/GroupMgr.cpp | 23 ++++++- .../Actor/Social/Manager/GroupMgr.h | 35 +++++++++-- .../Network/Handlers/PacketHandlers.cpp | 19 +++++- src/servers/Server_Zone/ServerZone.cpp | 3 + 12 files changed, 167 insertions(+), 67 deletions(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 0724bae5..5048a60c 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -81,7 +81,12 @@ struct FFXIVIpcPlayTime : FFXIVIpcBasePacket */ struct PlayerEntry { uint64_t contentId; - uint8_t bytes[12]; + uint32_t timestamp; + uint8_t bytes[4]; + uint8_t status; // bitmask. friend: if it's a request, if added, recipient/sender + uint8_t unknown; // maybe bitmask? a value of 4 sets it to linkshell request + uint8_t entryIcon; // observed in friend group icon, sideffects for displaying text + uint8_t unavailable; // bool uint16_t zoneId; uint8_t grandCompany; uint8_t clientLanguage; @@ -95,7 +100,7 @@ struct PlayerEntry { uint16_t padding2; uint8_t one; char name[0x20]; - char fcTag[9]; + char fcTag[5]; }; struct FFXIVIpcSocialRequestReceive : FFXIVIpcBasePacket diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 2e2762d6..74df7bd1 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -303,9 +303,9 @@ void Core::Entity::Player::sendStats() queuePacket( statPacket ); } -Social::FriendListPtr Core::Entity::Player::getFriendsList() const +uint64_t Core::Entity::Player::getFriendsListId() const { - return m_friendsList; + return m_friendsListId; } void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) @@ -447,7 +447,7 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) //todo: change this to extern, global obj Core::Entity::Social::FriendListMgr fListMgr = {}; - m_friendsList = fListMgr.getPlayerFriendsList( getId() ); + m_friendsListId = fListMgr.fetchPlayerFriendsList( getId() ); m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); sendItemLevel(); diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index d7e6c0c7..1e0a26bb 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -363,7 +363,7 @@ public: // Social-based ////////////////////////////////////////////////////////////////////////////////////////////////////// - Social::FriendListPtr getFriendsList() const; + uint64_t getFriendsListId() const; // Aetheryte / Action / Attribute bitmasks @@ -627,7 +627,7 @@ private: // Social-based - Social::FriendListPtr m_friendsList; + uint64_t m_friendsListId; uint8_t m_equipDisplayFlags; diff --git a/src/servers/Server_Zone/Actor/Social/FriendList.h b/src/servers/Server_Zone/Actor/Social/FriendList.h index bc535758..07e7c099 100644 --- a/src/servers/Server_Zone/Actor/Social/FriendList.h +++ b/src/servers/Server_Zone/Actor/Social/FriendList.h @@ -26,11 +26,9 @@ class FriendList : public Group { public: - FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - Group( id, ownerId, maxCapacity, createTime ), - m_id( id ), m_ownerId( ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; - - ~FriendList() {}; + FriendList( uint64_t id, uint64_t ownerId ) : + Group( id, ownerId ), + m_id( id ), m_ownerId( ownerId ) {}; /*virtual void load(); virtual void update(); @@ -48,16 +46,11 @@ public: -private: - GroupType m_type{ GroupType::FriendList }; +protected: uint64_t m_id{ 0 }; uint64_t m_ownerId{ 0 }; + GroupType m_type{ GroupType::FriendList }; uint32_t m_maxCapacity{ 200 }; - uint32_t m_maxRoles{ 8 }; - time_point m_createTime{ std::chrono::steady_clock::now() }; - std::map< uint64_t, GroupMember > m_members; - std::map< uint64_t, uint64_t > m_invites; // - diff --git a/src/servers/Server_Zone/Actor/Social/Group.cpp b/src/servers/Server_Zone/Actor/Social/Group.cpp index 0b8654d3..8ca4a402 100644 --- a/src/servers/Server_Zone/Actor/Social/Group.cpp +++ b/src/servers/Server_Zone/Actor/Social/Group.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -12,6 +13,7 @@ #include "Group.h" extern Core::ServerZone g_serverZone; +extern Core::Logger g_log; using namespace Core::Entity::Social; @@ -43,6 +45,7 @@ Core::Network::Packets::GamePacketPtr Group::addMember( Core::Entity::PlayerPtr auto packet = GamePacketNew< Server::FFXIVIpcSocialRequestResponse, ServerZoneIpcType >( recipientId, senderId ); packet.data().contentId = recipientContentId; + packet.data().category = Common::SocialCategory::Friends; if( m_members.size() < m_maxCapacity ) { @@ -63,6 +66,40 @@ Core::Network::Packets::GamePacketPtr Group::addMember( Core::Entity::PlayerPtr return packet; } +Core::Network::Packets::GamePacketPtr Group::inviteMember( Core::Entity::PlayerPtr pSender, Core::Entity::PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) +{ + assert( pSender != nullptr || senderId != 0 ); + + auto packet = GamePacketNew< Server::FFXIVIpcSocialRequestResponse, ServerZoneIpcType >( recipientId, senderId ); + packet.data().contentId = recipientId; + packet.data().category = Common::SocialCategory::Friends; + + if ( m_invites.size() < m_maxCapacity ) + { + GroupMember member; + member.inviterId = senderId; + member.role = 0; + member.contentId = recipientId; + member.name = pSender->getName(); + + m_invites.emplace( recipientId, member ); + } + + return packet; +} + +// todo: fix +Core::Network::Packets::GamePacketPtr Group::removeMember( Core::Entity::PlayerPtr pSender, Core::Entity::PlayerPtr pRecipient, uint64_t senderId, uint64_t recipientId ) +{ + assert( pSender != nullptr || senderId != 0 ); + + auto packet = GamePacketNew< Server::FFXIVIpcSocialRequestResponse, ServerZoneIpcType >( recipientId, senderId ); + packet.data().contentId = recipientId; + packet.data().category = Common::SocialCategory::Friends; + + return packet; +} + void Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) { assert( pPacket ); @@ -86,31 +123,41 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem // We check if player is online. If so, we can pull more data - otherwise just name // todo: set as offline in one of the unknown values, if session does not exist - auto pSession = g_serverZone.getSession( groupMember.contentId ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? - entry.bytes[3] = 0x10; - entry.bytes[4] = 0x00; - entry.bytes[6] = 0x3F; - entry.bytes[11] = 0x10; + auto pSession = g_serverZone.getSession( groupMember.name ); // todo: aa i don't like this. maybe just store their ID instead of contentID??? + + entry.timestamp = 1512799339; + entry.status = 2; + entry.unknown = 0; + //entry.entryIcon = 0xf; + entry.unavailable = 0; // unavailable (other world) + entry.one = 0; + if( pSession ) { auto pPlayer = pSession->getPlayer(); entry.contentId = pPlayer->getContentId(); - entry.bytes[2] = pPlayer->getCurrentZone()->getId(); + //entry.bytes[2] = pPlayer->getCurrentZone()->getId(); entry.classJob = pPlayer->getClass(); entry.level = pPlayer->getLevel(); entry.zoneId = pPlayer->getCurrentZone()->getId(); entry.grandCompany = pPlayer->getGc(); - memcpy( &entry.fcTag[0], "Meme", 9 ); + memcpy( &entry.fcTag[0], "Meme", 4 ); entry.clientLanguage = 2; entry.knownLanguages = 0x0F; entry.onlineStatusMask = pPlayer->getOnlineStatusMask(); + + g_log.debug( std::to_string( pPlayer->getContentId() ) ); } // TODO: no idea what this does - me neither //listPacket.data().entries[0].one = 1; + g_log.debug( std::to_string(groupMember.contentId) ); + + g_log.debug( std::to_string( entry.contentId ) ); + return entry; } diff --git a/src/servers/Server_Zone/Actor/Social/Group.h b/src/servers/Server_Zone/Actor/Social/Group.h index a315d19c..d970b520 100644 --- a/src/servers/Server_Zone/Actor/Social/Group.h +++ b/src/servers/Server_Zone/Actor/Social/Group.h @@ -40,9 +40,8 @@ enum class GroupType : uint8_t class Group : public boost::enable_shared_from_this< Group > { public: - Group( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) : - m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ) {}; - ~Group() {}; + Group( uint64_t id, uint64_t ownerId ) : + m_id( id ), m_ownerId( m_ownerId ) {}; bool isParty() const; bool isFriendList() const; @@ -53,10 +52,10 @@ public: bool isContentGroup() const; virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - /* + virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );*/ + //virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); /*! generates a player entry used for lists (social, etc) */ @@ -69,7 +68,7 @@ public: /*! get container limit */ uint32_t getCapacity() const; -private: +protected: GroupType m_type{ GroupType::None }; uint64_t m_id{ 0 }; uint64_t m_ownerId{ 0 }; @@ -77,10 +76,10 @@ private: uint32_t m_maxRoles{ 50 }; time_point m_createTime{ std::chrono::steady_clock::now() }; std::map< uint64_t, GroupMember > m_members; - std::map< uint64_t, uint64_t > m_invites; // - - + std::map< uint64_t, GroupMember > m_invites; // +private: + /*virtual void load(); virtual void update(); diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp index 373d4bf4..7db0ffbf 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp @@ -14,27 +14,22 @@ using namespace Core::Entity; Core::Entity::Social::FriendListMgr::FriendListMgr() { -} - -Core::Entity::Social::FriendListMgr::~FriendListMgr() -{ - -} +} bool Social::FriendListMgr::init() { return true; } -Social::FriendListPtr Social::FriendListMgr::getPlayerFriendsList( uint32_t playerId ) +uint64_t Social::FriendListMgr::fetchPlayerFriendsList( uint32_t playerId ) { - std::mt19937_64 engine( std::random_device{}( ) ); - std::uniform_int_distribution distribution; - auto ui64 = distribution( engine ); + uint64_t newGroupId = generateGroupId(); - FriendList nFriendList( ui64, playerId, 200, std::chrono::steady_clock::now() ); + auto pFriendList = boost::make_shared< FriendList >( newGroupId, playerId ); - FriendListPtr pFriendList = boost::make_shared< FriendList >( nFriendList ); - pFriendList->getCapacity(); - return pFriendList; + m_groups.emplace( newGroupId, pFriendList ); + + g_log.debug( std::to_string( m_groups.size() ) ); + + return newGroupId; } \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h index 560cd7eb..c513cfeb 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h +++ b/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h @@ -16,22 +16,23 @@ namespace Core { namespace Entity { namespace Social { -class FriendListMgr +class FriendListMgr : public GroupMgr { public: FriendListMgr(); - ~FriendListMgr(); bool init(); - FriendListPtr getPlayerFriendsList( uint32_t playerId ); - + uint64_t fetchPlayerFriendsList( uint32_t playerId ); + /* + FriendListPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + FriendListPtr findGroupById( uint64_t groupId ) const; + */ + std::map< uint64_t, FriendListPtr > m_groups; private: + // todo: can we handle this m_groups grouptype better..? + GroupType m_type{ GroupType::FriendList }; - uint64_t m_groupCount{ 0 }; - uint32_t m_maxEntries{ 0xFFFFFFFF }; - std::map< uint64_t, GroupPtr > m_groups; // < groupid, groupPtr > - std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > }; diff --git a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp index 70d86f03..9510ee9a 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp +++ b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp @@ -8,6 +8,11 @@ Social::GroupMgr::GroupMgr() } +Social::GroupMgr::~GroupMgr() +{ + +} + Social::GroupPtr Social::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const { auto it = m_invites.find( playerId ); @@ -18,7 +23,7 @@ Social::GroupPtr Social::GroupMgr::findGroupByInviteIdForPlayer( uint64_t player return nullptr; } -Social::GroupPtr Core::Entity::Social::GroupMgr::findGroupById( uint64_t groupId ) const +Social::GroupPtr Social::GroupMgr::findGroupById( uint64_t groupId ) const { auto it = m_groups.find( groupId ); if( it != m_groups.end() ) @@ -26,4 +31,20 @@ Social::GroupPtr Core::Entity::Social::GroupMgr::findGroupById( uint64_t groupId return it->second; } return nullptr; +} + +uint64_t Social::GroupMgr::generateGroupId() +{ + m_lastGroupId++; + return m_lastGroupId; +} + +bool Social::GroupMgr::hasInvite( uint64_t playerId ) const +{ + auto it = m_invites.find( playerId ); + if ( it != m_invites.end() ) + { + return true; + } + return false; } \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h index 4e519b33..8e7f603b 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h @@ -12,20 +12,38 @@ namespace Core { namespace Entity { namespace Social { -class GroupMgr : public boost::enable_shared_from_this< GroupMgr > +class GroupMgr { public: GroupMgr(); + virtual ~GroupMgr(); - GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - GroupPtr findGroupById( uint64_t groupId ) const; + virtual GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; + virtual GroupPtr findGroupById( uint64_t groupId ) const; + /* + template + GroupPtr findGroup( uint64_t arg ) + { + auto it = m_groups.find( groupId ); + if ( it != m_groups.end() ) + { + return it->second; + } + return nullptr; + }*/ -private: + bool hasInvite( uint64_t playerId ) const; + +protected: GroupType m_type{ GroupType::None }; uint64_t m_groupCount{ 0 }; uint32_t m_maxEntries{ 0xFFFFFFFF }; - std::map< uint64_t, GroupPtr > m_groups; - std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid > + + std::map< uint64_t, uint64_t > m_invites; + + uint64_t m_lastGroupId{ 0 }; + + // < recipient, groupid > //virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0; /* @@ -40,6 +58,11 @@ private: friend virtual void disband(); */ + virtual uint64_t generateGroupId(); + +private: + std::map< uint64_t, GroupPtr > m_groups; + }; } diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index c6735f21..fbe88d4e 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -36,6 +36,7 @@ #include "Event/EventHelper.h" #include "Action/Action.h" #include "Action/ActionTeleport.h" +#include "Actor/Social/Manager/FriendListMgr.h" extern Core::Logger g_log; @@ -43,6 +44,7 @@ extern Core::ServerZone g_serverZone; extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::DebugCommandHandler g_gameCommandMgr; +extern Core::Entity::Social::FriendListMgr g_friendListMgr; using namespace Core::Common; using namespace Core::Network::Packets; @@ -476,10 +478,12 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket uint16_t i = 0; - g_log.debug( std::to_string( player.getFriendsList()->getMembers().size() ) ); + auto playerFriendsList = g_friendListMgr.findGroupById( player.getFriendsListId() ); - for ( auto member : player.getFriendsList()->getMembers() ) + // todo: move this garbage else fucking where + for ( auto member : playerFriendsList->getMembers() ) { + // more elegant way to break over list entries pls if ( i == 10 ) break; @@ -686,7 +690,16 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac pRecipient->queuePacket( packet ); pRecipient->sendDebug( "ding ding" ); - pRecipient->getFriendsList()->addMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); + auto recipientFriendsList = g_friendListMgr.findGroupById( pRecipient->getFriendsListId() ); + + auto senderResultPacket = recipientFriendsList->inviteMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); + + player.queuePacket( senderResultPacket ); + + if ( recipientFriendsList->isFriendList() ) + { + g_log.debug( "he HAA HAAA" ); + } response.data().messageId = typeMessage[category]; } diff --git a/src/servers/Server_Zone/ServerZone.cpp b/src/servers/Server_Zone/ServerZone.cpp index a863b06a..4de459c2 100644 --- a/src/servers/Server_Zone/ServerZone.cpp +++ b/src/servers/Server_Zone/ServerZone.cpp @@ -41,6 +41,7 @@ Core::Data::ExdData g_exdData; Core::ZoneMgr g_zoneMgr; Core::LinkshellMgr g_linkshellMgr; Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb; +Core::Entity::Social::FriendListMgr g_friendListMgr; Core::ServerZone::ServerZone( const std::string& configPath ) : m_configPath( configPath ), @@ -219,6 +220,8 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) return; } + g_friendListMgr.init(); + Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); From c8f2ee73052d85d7d760af184b922a1f4ea74a93 Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 21 Dec 2017 03:45:56 -0200 Subject: [PATCH 14/46] Half work on templating SocialManager, more refactoring --- src/servers/Server_Zone/Actor/Player.h | 4 +-- src/servers/Server_Zone/CMakeLists.txt | 6 ++-- .../DebugCommand/DebugCommandHandler.cpp | 25 ++++++++++++++++ .../Network/Handlers/PacketHandlers.cpp | 4 +-- src/servers/Server_Zone/ServerZone.cpp | 2 +- .../{Actor => }/Social/ContentGroup.cpp | 0 .../{Actor => }/Social/ContentGroup.h | 0 .../{Actor => }/Social/FreeCompany.cpp | 0 .../{Actor => }/Social/FreeCompany.h | 0 .../{Actor => }/Social/FriendList.cpp | 0 .../{Actor => }/Social/FriendList.h | 2 +- .../Server_Zone/{Actor => }/Social/Group.cpp | 0 .../Server_Zone/{Actor => }/Social/Group.h | 0 .../{Actor => }/Social/Linkshell.cpp | 0 .../{Actor => }/Social/Linkshell.h | 0 .../Social/Manager/ContentGroupMgr.cpp | 0 .../Social/Manager/ContentGroupMgr.h | 0 .../Social/Manager/FreeCompanyMgr.cpp | 0 .../Social/Manager/FreeCompanyMgr.h | 0 .../Social/Manager/FriendListMgr.cpp | 0 .../Social/Manager/FriendListMgr.h | 11 ++++--- .../Social/Manager/LinkshellMgr.cpp | 0 .../{Actor => }/Social/Manager/LinkshellMgr.h | 0 .../{Actor => }/Social/Manager/PartyMgr.cpp | 0 .../{Actor => }/Social/Manager/PartyMgr.h | 0 .../Manager/SocialMgr.cpp} | 16 +++++----- .../GroupMgr.h => Social/Manager/SocialMgr.h} | 30 +++++++++---------- .../Server_Zone/{Actor => }/Social/Party.cpp | 0 .../Server_Zone/{Actor => }/Social/Party.h | 0 29 files changed, 63 insertions(+), 37 deletions(-) rename src/servers/Server_Zone/{Actor => }/Social/ContentGroup.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/ContentGroup.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/FreeCompany.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/FreeCompany.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/FriendList.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/FriendList.h (96%) rename src/servers/Server_Zone/{Actor => }/Social/Group.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Group.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/Linkshell.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Linkshell.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/ContentGroupMgr.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/ContentGroupMgr.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/FreeCompanyMgr.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/FreeCompanyMgr.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/FriendListMgr.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/FriendListMgr.h (72%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/LinkshellMgr.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/LinkshellMgr.h (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/PartyMgr.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Manager/PartyMgr.h (100%) rename src/servers/Server_Zone/{Actor/Social/Manager/GroupMgr.cpp => Social/Manager/SocialMgr.cpp} (55%) rename src/servers/Server_Zone/{Actor/Social/Manager/GroupMgr.h => Social/Manager/SocialMgr.h} (77%) rename src/servers/Server_Zone/{Actor => }/Social/Party.cpp (100%) rename src/servers/Server_Zone/{Actor => }/Social/Party.h (100%) diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 1e0a26bb..507f7215 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -6,8 +6,8 @@ #include #include -#include -#include +#include +#include #include #include "Actor.h" diff --git a/src/servers/Server_Zone/CMakeLists.txt b/src/servers/Server_Zone/CMakeLists.txt index 796805b5..47a3c557 100644 --- a/src/servers/Server_Zone/CMakeLists.txt +++ b/src/servers/Server_Zone/CMakeLists.txt @@ -8,8 +8,6 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} /*.h Actor/*.h - Actor/Social/*.h - Actor/Social/Manager/*.h Action/*.h DebugCommand/*.h Event/*.h @@ -19,6 +17,8 @@ file(GLOB SERVER_PUBLIC_INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Network/*.h Network/Handlers/*.h Network/PacketWrappers/*.h + Social/*.h + Social/Manager/*.h Script/*.h StatusEffect/*.h Zone/*.h) @@ -37,6 +37,8 @@ file(GLOB SERVER_SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Network/*.c* Network/Handlers/*.c* Network/PacketWrappers/*.c* + Social/*.c* + Social/Manager/*.c* Script/*.c* StatusEffect/*.c* Zone/*.c*) diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index 55b63d1d..3e7aa05c 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -348,6 +349,30 @@ void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost: pBNpc->setCurrentZone( pZone ); pZone->pushActor( pBNpc ); + } + else if( subCommand == "sspawn" ) + { + int32_t model, name, count, distCoefficient, i; + + sscanf( params.c_str(), "%d %d %d %d", &model, &name, &count, &distCoefficient ); + + for ( i = 0; i < count; i++ ) + { + Common::FFXIVARR_POSITION3 posC = player.getPos(); + std::mt19937 gen( rand() * 1000 ); + std::uniform_int_distribution dis( distCoefficient * -1, distCoefficient ); + + posC.x += dis( gen ); + posC.z += dis( gen ); + + Entity::BattleNpcPtr pBNpc( new Entity::BattleNpc( model, name, posC ) ); + + auto pZone = player.getCurrentZone(); + pBNpc->setCurrentZone( pZone ); + pZone->pushActor( pBNpc ); + + } + } else if( subCommand == "op" ) { diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index fbe88d4e..7b5907e9 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -36,7 +36,7 @@ #include "Event/EventHelper.h" #include "Action/Action.h" #include "Action/ActionTeleport.h" -#include "Actor/Social/Manager/FriendListMgr.h" +#include "Social/Manager/FriendListMgr.h" extern Core::Logger g_log; @@ -44,7 +44,7 @@ extern Core::ServerZone g_serverZone; extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::DebugCommandHandler g_gameCommandMgr; -extern Core::Entity::Social::FriendListMgr g_friendListMgr; +extern Core::Social::SocialMgr g_socialMgr; using namespace Core::Common; using namespace Core::Network::Packets; diff --git a/src/servers/Server_Zone/ServerZone.cpp b/src/servers/Server_Zone/ServerZone.cpp index 4de459c2..4c0b1dc6 100644 --- a/src/servers/Server_Zone/ServerZone.cpp +++ b/src/servers/Server_Zone/ServerZone.cpp @@ -220,7 +220,7 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) return; } - g_friendListMgr.init(); + g_friendListMgr = Core::Social::SocialMgr(); Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); diff --git a/src/servers/Server_Zone/Actor/Social/ContentGroup.cpp b/src/servers/Server_Zone/Social/ContentGroup.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/ContentGroup.cpp rename to src/servers/Server_Zone/Social/ContentGroup.cpp diff --git a/src/servers/Server_Zone/Actor/Social/ContentGroup.h b/src/servers/Server_Zone/Social/ContentGroup.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/ContentGroup.h rename to src/servers/Server_Zone/Social/ContentGroup.h diff --git a/src/servers/Server_Zone/Actor/Social/FreeCompany.cpp b/src/servers/Server_Zone/Social/FreeCompany.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/FreeCompany.cpp rename to src/servers/Server_Zone/Social/FreeCompany.cpp diff --git a/src/servers/Server_Zone/Actor/Social/FreeCompany.h b/src/servers/Server_Zone/Social/FreeCompany.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/FreeCompany.h rename to src/servers/Server_Zone/Social/FreeCompany.h diff --git a/src/servers/Server_Zone/Actor/Social/FriendList.cpp b/src/servers/Server_Zone/Social/FriendList.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/FriendList.cpp rename to src/servers/Server_Zone/Social/FriendList.cpp diff --git a/src/servers/Server_Zone/Actor/Social/FriendList.h b/src/servers/Server_Zone/Social/FriendList.h similarity index 96% rename from src/servers/Server_Zone/Actor/Social/FriendList.h rename to src/servers/Server_Zone/Social/FriendList.h index 07e7c099..9b7f1bd4 100644 --- a/src/servers/Server_Zone/Actor/Social/FriendList.h +++ b/src/servers/Server_Zone/Social/FriendList.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/servers/Server_Zone/Actor/Social/Group.cpp b/src/servers/Server_Zone/Social/Group.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Group.cpp rename to src/servers/Server_Zone/Social/Group.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Group.h b/src/servers/Server_Zone/Social/Group.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Group.h rename to src/servers/Server_Zone/Social/Group.h diff --git a/src/servers/Server_Zone/Actor/Social/Linkshell.cpp b/src/servers/Server_Zone/Social/Linkshell.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Linkshell.cpp rename to src/servers/Server_Zone/Social/Linkshell.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Linkshell.h b/src/servers/Server_Zone/Social/Linkshell.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Linkshell.h rename to src/servers/Server_Zone/Social/Linkshell.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.cpp b/src/servers/Server_Zone/Social/Manager/ContentGroupMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.cpp rename to src/servers/Server_Zone/Social/Manager/ContentGroupMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.h b/src/servers/Server_Zone/Social/Manager/ContentGroupMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/ContentGroupMgr.h rename to src/servers/Server_Zone/Social/Manager/ContentGroupMgr.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.cpp b/src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.cpp rename to src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.h b/src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/FreeCompanyMgr.h rename to src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.cpp rename to src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Social/Manager/FriendListMgr.h similarity index 72% rename from src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h rename to src/servers/Server_Zone/Social/Manager/FriendListMgr.h index c513cfeb..df059097 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h +++ b/src/servers/Server_Zone/Social/Manager/FriendListMgr.h @@ -6,17 +6,16 @@ #include #include -#include -#include +#include +#include -#include +#include #include namespace Core { -namespace Entity { namespace Social { -class FriendListMgr : public GroupMgr +class FriendListMgr { public: FriendListMgr(); @@ -32,7 +31,7 @@ public: private: // todo: can we handle this m_groups grouptype better..? - GroupType m_type{ GroupType::FriendList }; + //GroupType m_type{ GroupType::FriendList }; }; diff --git a/src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.cpp b/src/servers/Server_Zone/Social/Manager/LinkshellMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.cpp rename to src/servers/Server_Zone/Social/Manager/LinkshellMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.h b/src/servers/Server_Zone/Social/Manager/LinkshellMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/LinkshellMgr.h rename to src/servers/Server_Zone/Social/Manager/LinkshellMgr.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.cpp b/src/servers/Server_Zone/Social/Manager/PartyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.cpp rename to src/servers/Server_Zone/Social/Manager/PartyMgr.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.h b/src/servers/Server_Zone/Social/Manager/PartyMgr.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Manager/PartyMgr.h rename to src/servers/Server_Zone/Social/Manager/PartyMgr.h diff --git a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp similarity index 55% rename from src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp rename to src/servers/Server_Zone/Social/Manager/SocialMgr.cpp index 9510ee9a..627d4daa 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.cpp +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp @@ -1,19 +1,19 @@ #include "../Group.h" -#include "GroupMgr.h" +#include "SocialMgr.h" -using namespace Core::Entity; -Social::GroupMgr::GroupMgr() +template< class T > +Core::Social::SocialMgr::GroupMgr() { } -Social::GroupMgr::~GroupMgr() +Core::Social::SocialMgr::~GroupMgr() { } -Social::GroupPtr Social::GroupMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const +T Core::Social::SocialMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const { auto it = m_invites.find( playerId ); if( it != m_invites.end() ) @@ -23,7 +23,7 @@ Social::GroupPtr Social::GroupMgr::findGroupByInviteIdForPlayer( uint64_t player return nullptr; } -Social::GroupPtr Social::GroupMgr::findGroupById( uint64_t groupId ) const +T Core::Social::SocialMgr::findGroupById( uint64_t groupId ) const { auto it = m_groups.find( groupId ); if( it != m_groups.end() ) @@ -33,13 +33,13 @@ Social::GroupPtr Social::GroupMgr::findGroupById( uint64_t groupId ) const return nullptr; } -uint64_t Social::GroupMgr::generateGroupId() +uint64_t Core::Social::SocialMgr::GroupMgr::generateGroupId() { m_lastGroupId++; return m_lastGroupId; } -bool Social::GroupMgr::hasInvite( uint64_t playerId ) const +bool Core::Social::SocialMgr::hasInvite( uint64_t playerId ) const { auto it = m_invites.find( playerId ); if ( it != m_invites.end() ) diff --git a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h b/src/servers/Server_Zone/Social/Manager/SocialMgr.h similarity index 77% rename from src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h rename to src/servers/Server_Zone/Social/Manager/SocialMgr.h index 8e7f603b..079efb44 100644 --- a/src/servers/Server_Zone/Actor/Social/Manager/GroupMgr.h +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.h @@ -6,23 +6,23 @@ #include #include -#include +#include namespace Core { -namespace Entity { namespace Social { -class GroupMgr +template< class T > +class SocialMgr { public: - GroupMgr(); - virtual ~GroupMgr(); + SocialMgr(); + virtual ~SocialMgr(); - virtual GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - virtual GroupPtr findGroupById( uint64_t groupId ) const; + T findGroupByInviteIdForPlayer( uint64_t playerId ) const; + T findGroupById( uint64_t groupId ) const; /* - template - GroupPtr findGroup( uint64_t arg ) + + T findGroup( uint64_t groupId ) { auto it = m_groups.find( groupId ); if ( it != m_groups.end() ) @@ -35,10 +35,11 @@ public: bool hasInvite( uint64_t playerId ) const; protected: - GroupType m_type{ GroupType::None }; - uint64_t m_groupCount{ 0 }; - uint32_t m_maxEntries{ 0xFFFFFFFF }; - +// those would be implemented in T, so you'd have T.m_type and T.m_maxEntries +// GroupType m_type{ GroupType::None }; +// uint32_t m_maxEntries{ 0xFFFFFFFF }; + + uint64_t m_groupCount{ 0 }; std::map< uint64_t, uint64_t > m_invites; uint64_t m_lastGroupId{ 0 }; @@ -61,11 +62,10 @@ protected: virtual uint64_t generateGroupId(); private: - std::map< uint64_t, GroupPtr > m_groups; + std::map< uint64_t, T > m_groups; }; } } -}; #endif /* ! _GROUPMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Social/Party.cpp b/src/servers/Server_Zone/Social/Party.cpp similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Party.cpp rename to src/servers/Server_Zone/Social/Party.cpp diff --git a/src/servers/Server_Zone/Actor/Social/Party.h b/src/servers/Server_Zone/Social/Party.h similarity index 100% rename from src/servers/Server_Zone/Actor/Social/Party.h rename to src/servers/Server_Zone/Social/Party.h From 5c793993d378a93ddb540add8eefa07bc266ffd5 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 25 Dec 2017 02:13:54 -0200 Subject: [PATCH 15/46] More templating stuff --- src/servers/Server_Zone/Actor/Player.cpp | 4 +-- .../Network/Handlers/PacketHandlers.cpp | 2 +- src/servers/Server_Zone/ServerZone.cpp | 4 +-- src/servers/Server_Zone/Social/FriendList.cpp | 3 +-- src/servers/Server_Zone/Social/FriendList.h | 2 -- src/servers/Server_Zone/Social/Group.cpp | 2 +- src/servers/Server_Zone/Social/Group.h | 8 +++--- .../Social/Manager/FriendListMgr.cpp | 7 +++--- .../Social/Manager/FriendListMgr.h | 6 ++--- .../Server_Zone/Social/Manager/SocialMgr.cpp | 25 +++++++++++-------- .../Server_Zone/Social/Manager/SocialMgr.h | 2 +- 11 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 74df7bd1..0b289e31 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -30,8 +30,8 @@ #include "Script/ScriptManager.h" -#include "src/servers/Server_Zone/Actor/Social/FriendList.h" -#include "src/servers/Server_Zone/Actor/Social/Manager/FriendListMgr.h" +#include "src/servers/Server_Zone/Social/FriendList.h" +#include "src/servers/Server_Zone/Actor/Manager/FriendListMgr.h" #include "src/servers/Server_Zone/Script/ScriptManager.h" #include "Inventory/Item.h" diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 7b5907e9..2d7c6bee 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -44,7 +44,7 @@ extern Core::ServerZone g_serverZone; extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::DebugCommandHandler g_gameCommandMgr; -extern Core::Social::SocialMgr g_socialMgr; +extern Core::Social::SocialMgr g_socialMgr; using namespace Core::Common; using namespace Core::Network::Packets; diff --git a/src/servers/Server_Zone/ServerZone.cpp b/src/servers/Server_Zone/ServerZone.cpp index 4c0b1dc6..a6bd54d3 100644 --- a/src/servers/Server_Zone/ServerZone.cpp +++ b/src/servers/Server_Zone/ServerZone.cpp @@ -41,7 +41,7 @@ Core::Data::ExdData g_exdData; Core::ZoneMgr g_zoneMgr; Core::LinkshellMgr g_linkshellMgr; Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb; -Core::Entity::Social::FriendListMgr g_friendListMgr; +Core::Social::SocialMgr< Core::Social:: > g_friendListMgr; Core::ServerZone::ServerZone( const std::string& configPath ) : m_configPath( configPath ), @@ -220,7 +220,7 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) return; } - g_friendListMgr = Core::Social::SocialMgr(); + g_friendListMgr = Core::Social::SocialMgr(); Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); diff --git a/src/servers/Server_Zone/Social/FriendList.cpp b/src/servers/Server_Zone/Social/FriendList.cpp index 6f8e4463..35ae351b 100644 --- a/src/servers/Server_Zone/Social/FriendList.cpp +++ b/src/servers/Server_Zone/Social/FriendList.cpp @@ -15,11 +15,10 @@ extern Core::ServerZone g_serverZone; extern Core::Logger g_log; -using namespace Core::Entity; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; -std::vector< PlayerEntry > Core::Entity::Social::FriendList::getFriendListEntries( uint16_t entryAmount ) +std::vector< PlayerEntry > Core::Social::FriendList::getFriendListEntries( uint16_t entryAmount ) { std::vector< PlayerEntry > entryList = {}; uint16_t limit = 0; diff --git a/src/servers/Server_Zone/Social/FriendList.h b/src/servers/Server_Zone/Social/FriendList.h index 9b7f1bd4..16acdc87 100644 --- a/src/servers/Server_Zone/Social/FriendList.h +++ b/src/servers/Server_Zone/Social/FriendList.h @@ -16,7 +16,6 @@ using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; namespace Core { -namespace Entity { namespace Social { class FriendList; @@ -56,7 +55,6 @@ protected: }; -} } }; #endif // ! _FRIENDLIST_H \ No newline at end of file diff --git a/src/servers/Server_Zone/Social/Group.cpp b/src/servers/Server_Zone/Social/Group.cpp index 8ca4a402..cc7f4df4 100644 --- a/src/servers/Server_Zone/Social/Group.cpp +++ b/src/servers/Server_Zone/Social/Group.cpp @@ -15,7 +15,7 @@ extern Core::ServerZone g_serverZone; extern Core::Logger g_log; -using namespace Core::Entity::Social; +using namespace Core::Social; // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of ? // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up diff --git a/src/servers/Server_Zone/Social/Group.h b/src/servers/Server_Zone/Social/Group.h index d970b520..b610ca9b 100644 --- a/src/servers/Server_Zone/Social/Group.h +++ b/src/servers/Server_Zone/Social/Group.h @@ -11,7 +11,6 @@ #include namespace Core { -namespace Entity { namespace Social { class Group; @@ -51,10 +50,10 @@ public: bool isBlacklist() const; bool isContentGroup() const; - virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr addMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); - virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr inviteMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); + virtual Core::Network::Packets::GamePacketPtr removeMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); //virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 ); virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false ); @@ -87,7 +86,6 @@ private: }; -} } }; #endif // ! _GROUP_H \ No newline at end of file diff --git a/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp index 7db0ffbf..c33a59bc 100644 --- a/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp +++ b/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp @@ -9,19 +9,18 @@ extern Core::Logger g_log; -using namespace Core::Entity; -Core::Entity::Social::FriendListMgr::FriendListMgr() +Core::Social::FriendListMgr::FriendListMgr() { } -bool Social::FriendListMgr::init() +bool Core::Social::FriendListMgr::init() { return true; } -uint64_t Social::FriendListMgr::fetchPlayerFriendsList( uint32_t playerId ) +uint64_t Core::Social::FriendListMgr::fetchPlayerFriendsList( uint32_t playerId ) { uint64_t newGroupId = generateGroupId(); diff --git a/src/servers/Server_Zone/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Social/Manager/FriendListMgr.h index df059097..161e39b4 100644 --- a/src/servers/Server_Zone/Social/Manager/FriendListMgr.h +++ b/src/servers/Server_Zone/Social/Manager/FriendListMgr.h @@ -27,7 +27,7 @@ public: FriendListPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; FriendListPtr findGroupById( uint64_t groupId ) const; */ - std::map< uint64_t, FriendListPtr > m_groups; + //std::map< uint64_t, FriendListPtr > m_groups; private: // todo: can we handle this m_groups grouptype better..? @@ -35,7 +35,7 @@ private: }; -} -} }; +} + #endif /* ! _FRIENDLISTMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp index 627d4daa..c308c4b3 100644 --- a/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp @@ -3,17 +3,18 @@ template< class T > -Core::Social::SocialMgr::GroupMgr() +Core::Social::SocialMgr::SocialMgr() +{ + +} +template< class T > +Core::Social::SocialMgr::~SocialMgr() { } -Core::Social::SocialMgr::~GroupMgr() -{ - -} - -T Core::Social::SocialMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) const +template< class T > +T Core::Social::SocialMgr< T >::findGroupByInviteIdForPlayer( uint64_t playerId ) const { auto it = m_invites.find( playerId ); if( it != m_invites.end() ) @@ -22,8 +23,8 @@ T Core::Social::SocialMgr::findGroupByInviteIdForPlayer( uint64_t playerId ) con } return nullptr; } - -T Core::Social::SocialMgr::findGroupById( uint64_t groupId ) const +template< class T > +T Core::Social::SocialMgr< T >::findGroupById( uint64_t groupId ) const { auto it = m_groups.find( groupId ); if( it != m_groups.end() ) @@ -33,13 +34,15 @@ T Core::Social::SocialMgr::findGroupById( uint64_t groupId ) const return nullptr; } -uint64_t Core::Social::SocialMgr::GroupMgr::generateGroupId() +template< class T > +uint64_t Core::Social::SocialMgr< T >::generateGroupId() const { m_lastGroupId++; return m_lastGroupId; } -bool Core::Social::SocialMgr::hasInvite( uint64_t playerId ) const +template< class T > +bool Core::Social::SocialMgr< T >::hasInvite( uint64_t playerId ) const { auto it = m_invites.find( playerId ); if ( it != m_invites.end() ) diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.h b/src/servers/Server_Zone/Social/Manager/SocialMgr.h index 079efb44..e70c877d 100644 --- a/src/servers/Server_Zone/Social/Manager/SocialMgr.h +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.h @@ -59,7 +59,7 @@ protected: friend virtual void disband(); */ - virtual uint64_t generateGroupId(); + virtual uint64_t generateGroupId() const; private: std::map< uint64_t, T > m_groups; From 01ca2fa54487c0d9d94ae1be31488a96f206f67d Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 25 Dec 2017 05:26:36 -0200 Subject: [PATCH 16/46] Woo --- src/servers/Server_Zone/Actor/Player.cpp | 1 + src/servers/Server_Zone/Actor/Player.h | 1 - .../Network/Handlers/PacketHandlers.cpp | 4 +- src/servers/Server_Zone/ServerZone.cpp | 4 +- .../Social/Manager/FriendListMgr.cpp | 34 --------------- .../Social/Manager/FriendListMgr.h | 41 ------------------- .../Server_Zone/Social/Manager/SocialMgr.cpp | 4 +- .../Server_Zone/Social/Manager/SocialMgr.h | 6 +-- 8 files changed, 11 insertions(+), 84 deletions(-) delete mode 100644 src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp delete mode 100644 src/servers/Server_Zone/Social/Manager/FriendListMgr.h diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 0b289e31..b2862271 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -51,6 +51,7 @@ extern Core::ServerZone g_serverZone; extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::Scripting::ScriptManager g_scriptMgr; +extern Core::Social::SocialMgr< Core::Social::FriendList > g_friendListMgr; using namespace Core::Common; using namespace Core::Network::Packets; diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 507f7215..ff74bca5 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -7,7 +7,6 @@ #include #include #include -#include #include #include "Actor.h" diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 2d7c6bee..688b3c83 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -36,7 +36,7 @@ #include "Event/EventHelper.h" #include "Action/Action.h" #include "Action/ActionTeleport.h" -#include "Social/Manager/FriendListMgr.h" +#include "Social/Manager/SocialMgr.h" extern Core::Logger g_log; @@ -44,7 +44,7 @@ extern Core::ServerZone g_serverZone; extern Core::ZoneMgr g_zoneMgr; extern Core::Data::ExdData g_exdData; extern Core::DebugCommandHandler g_gameCommandMgr; -extern Core::Social::SocialMgr g_socialMgr; +extern Core::Social::SocialMgr< Core::Social::FriendList > g_friendListMgr; using namespace Core::Common; using namespace Core::Network::Packets; diff --git a/src/servers/Server_Zone/ServerZone.cpp b/src/servers/Server_Zone/ServerZone.cpp index a6bd54d3..7ab41011 100644 --- a/src/servers/Server_Zone/ServerZone.cpp +++ b/src/servers/Server_Zone/ServerZone.cpp @@ -28,6 +28,8 @@ #include "Script/ScriptManager.h" #include "Linkshell/LinkshellMgr.h" +#include "Social/Manager/SocialMgr.h" + #include "Forwards.h" #include #include @@ -41,7 +43,7 @@ Core::Data::ExdData g_exdData; Core::ZoneMgr g_zoneMgr; Core::LinkshellMgr g_linkshellMgr; Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb; -Core::Social::SocialMgr< Core::Social:: > g_friendListMgr; +Core::Social::SocialMgr< Core::Social::FriendList > g_friendListMgr; Core::ServerZone::ServerZone( const std::string& configPath ) : m_configPath( configPath ), diff --git a/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp b/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp deleted file mode 100644 index c33a59bc..00000000 --- a/src/servers/Server_Zone/Social/Manager/FriendListMgr.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include - -#include -#include - -#include "../Group.h" -#include "../FriendList.h" -#include "FriendListMgr.h" - -extern Core::Logger g_log; - - -Core::Social::FriendListMgr::FriendListMgr() -{ - -} - -bool Core::Social::FriendListMgr::init() -{ - return true; -} - -uint64_t Core::Social::FriendListMgr::fetchPlayerFriendsList( uint32_t playerId ) -{ - uint64_t newGroupId = generateGroupId(); - - auto pFriendList = boost::make_shared< FriendList >( newGroupId, playerId ); - - m_groups.emplace( newGroupId, pFriendList ); - - g_log.debug( std::to_string( m_groups.size() ) ); - - return newGroupId; -} \ No newline at end of file diff --git a/src/servers/Server_Zone/Social/Manager/FriendListMgr.h b/src/servers/Server_Zone/Social/Manager/FriendListMgr.h deleted file mode 100644 index 161e39b4..00000000 --- a/src/servers/Server_Zone/Social/Manager/FriendListMgr.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _FRIENDLISTMGR_H -#define _FRIENDLISTMGR_H - -#include -#include - -#include -#include -#include -#include - -#include -#include - -namespace Core { -namespace Social { - -class FriendListMgr -{ -public: - FriendListMgr(); - - bool init(); - - uint64_t fetchPlayerFriendsList( uint32_t playerId ); - /* - FriendListPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const; - FriendListPtr findGroupById( uint64_t groupId ) const; - */ - //std::map< uint64_t, FriendListPtr > m_groups; -private: - // todo: can we handle this m_groups grouptype better..? - - //GroupType m_type{ GroupType::FriendList }; - -}; - -}; -} - -#endif /* ! _FRIENDLISTMGR_H */ \ No newline at end of file diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp index c308c4b3..2d228ed5 100644 --- a/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp @@ -3,12 +3,12 @@ template< class T > -Core::Social::SocialMgr::SocialMgr() +Core::Social::SocialMgr< T >::SocialMgr() { } template< class T > -Core::Social::SocialMgr::~SocialMgr() +Core::Social::SocialMgr< T >::~SocialMgr() { } diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.h b/src/servers/Server_Zone/Social/Manager/SocialMgr.h index e70c877d..99895e2d 100644 --- a/src/servers/Server_Zone/Social/Manager/SocialMgr.h +++ b/src/servers/Server_Zone/Social/Manager/SocialMgr.h @@ -1,5 +1,5 @@ -#ifndef _GROUPMGR_H -#define _GROUPMGR_H +#ifndef _SOCIALMGR_H +#define _SOCIALMGR_H #include #include @@ -68,4 +68,4 @@ private: } } -#endif /* ! _GROUPMGR_H */ \ No newline at end of file +#endif /* ! _SOCIALMGR_H */ \ No newline at end of file From e24791b59f0320232e747a69d64e5c1f7dc3eb3e Mon Sep 17 00:00:00 2001 From: Maru Date: Wed, 24 Jan 2018 12:23:58 -0200 Subject: [PATCH 17/46] Fix merge a little more --- .../{Server_Zone => sapphire_zone}/Social/ContentGroup.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/ContentGroup.h | 0 src/servers/{Server_Zone => sapphire_zone}/Social/FreeCompany.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/FreeCompany.h | 0 src/servers/{Server_Zone => sapphire_zone}/Social/FriendList.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/FriendList.h | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Group.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Group.h | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Linkshell.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Linkshell.h | 0 .../Social/Manager/ContentGroupMgr.cpp | 0 .../Social/Manager/ContentGroupMgr.h | 0 .../Social/Manager/FreeCompanyMgr.cpp | 0 .../Social/Manager/FreeCompanyMgr.h | 0 .../Social/Manager/LinkshellMgr.cpp | 0 .../{Server_Zone => sapphire_zone}/Social/Manager/LinkshellMgr.h | 0 .../{Server_Zone => sapphire_zone}/Social/Manager/PartyMgr.cpp | 0 .../{Server_Zone => sapphire_zone}/Social/Manager/PartyMgr.h | 0 .../{Server_Zone => sapphire_zone}/Social/Manager/SocialMgr.cpp | 0 .../{Server_Zone => sapphire_zone}/Social/Manager/SocialMgr.h | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Party.cpp | 0 src/servers/{Server_Zone => sapphire_zone}/Social/Party.h | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename src/servers/{Server_Zone => sapphire_zone}/Social/ContentGroup.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/ContentGroup.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/FreeCompany.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/FreeCompany.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/FriendList.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/FriendList.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Group.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Group.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Linkshell.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Linkshell.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/ContentGroupMgr.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/ContentGroupMgr.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/FreeCompanyMgr.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/FreeCompanyMgr.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/LinkshellMgr.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/LinkshellMgr.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/PartyMgr.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/PartyMgr.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/SocialMgr.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Manager/SocialMgr.h (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Party.cpp (100%) rename src/servers/{Server_Zone => sapphire_zone}/Social/Party.h (100%) diff --git a/src/servers/Server_Zone/Social/ContentGroup.cpp b/src/servers/sapphire_zone/Social/ContentGroup.cpp similarity index 100% rename from src/servers/Server_Zone/Social/ContentGroup.cpp rename to src/servers/sapphire_zone/Social/ContentGroup.cpp diff --git a/src/servers/Server_Zone/Social/ContentGroup.h b/src/servers/sapphire_zone/Social/ContentGroup.h similarity index 100% rename from src/servers/Server_Zone/Social/ContentGroup.h rename to src/servers/sapphire_zone/Social/ContentGroup.h diff --git a/src/servers/Server_Zone/Social/FreeCompany.cpp b/src/servers/sapphire_zone/Social/FreeCompany.cpp similarity index 100% rename from src/servers/Server_Zone/Social/FreeCompany.cpp rename to src/servers/sapphire_zone/Social/FreeCompany.cpp diff --git a/src/servers/Server_Zone/Social/FreeCompany.h b/src/servers/sapphire_zone/Social/FreeCompany.h similarity index 100% rename from src/servers/Server_Zone/Social/FreeCompany.h rename to src/servers/sapphire_zone/Social/FreeCompany.h diff --git a/src/servers/Server_Zone/Social/FriendList.cpp b/src/servers/sapphire_zone/Social/FriendList.cpp similarity index 100% rename from src/servers/Server_Zone/Social/FriendList.cpp rename to src/servers/sapphire_zone/Social/FriendList.cpp diff --git a/src/servers/Server_Zone/Social/FriendList.h b/src/servers/sapphire_zone/Social/FriendList.h similarity index 100% rename from src/servers/Server_Zone/Social/FriendList.h rename to src/servers/sapphire_zone/Social/FriendList.h diff --git a/src/servers/Server_Zone/Social/Group.cpp b/src/servers/sapphire_zone/Social/Group.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Group.cpp rename to src/servers/sapphire_zone/Social/Group.cpp diff --git a/src/servers/Server_Zone/Social/Group.h b/src/servers/sapphire_zone/Social/Group.h similarity index 100% rename from src/servers/Server_Zone/Social/Group.h rename to src/servers/sapphire_zone/Social/Group.h diff --git a/src/servers/Server_Zone/Social/Linkshell.cpp b/src/servers/sapphire_zone/Social/Linkshell.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Linkshell.cpp rename to src/servers/sapphire_zone/Social/Linkshell.cpp diff --git a/src/servers/Server_Zone/Social/Linkshell.h b/src/servers/sapphire_zone/Social/Linkshell.h similarity index 100% rename from src/servers/Server_Zone/Social/Linkshell.h rename to src/servers/sapphire_zone/Social/Linkshell.h diff --git a/src/servers/Server_Zone/Social/Manager/ContentGroupMgr.cpp b/src/servers/sapphire_zone/Social/Manager/ContentGroupMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Manager/ContentGroupMgr.cpp rename to src/servers/sapphire_zone/Social/Manager/ContentGroupMgr.cpp diff --git a/src/servers/Server_Zone/Social/Manager/ContentGroupMgr.h b/src/servers/sapphire_zone/Social/Manager/ContentGroupMgr.h similarity index 100% rename from src/servers/Server_Zone/Social/Manager/ContentGroupMgr.h rename to src/servers/sapphire_zone/Social/Manager/ContentGroupMgr.h diff --git a/src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.cpp b/src/servers/sapphire_zone/Social/Manager/FreeCompanyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.cpp rename to src/servers/sapphire_zone/Social/Manager/FreeCompanyMgr.cpp diff --git a/src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.h b/src/servers/sapphire_zone/Social/Manager/FreeCompanyMgr.h similarity index 100% rename from src/servers/Server_Zone/Social/Manager/FreeCompanyMgr.h rename to src/servers/sapphire_zone/Social/Manager/FreeCompanyMgr.h diff --git a/src/servers/Server_Zone/Social/Manager/LinkshellMgr.cpp b/src/servers/sapphire_zone/Social/Manager/LinkshellMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Manager/LinkshellMgr.cpp rename to src/servers/sapphire_zone/Social/Manager/LinkshellMgr.cpp diff --git a/src/servers/Server_Zone/Social/Manager/LinkshellMgr.h b/src/servers/sapphire_zone/Social/Manager/LinkshellMgr.h similarity index 100% rename from src/servers/Server_Zone/Social/Manager/LinkshellMgr.h rename to src/servers/sapphire_zone/Social/Manager/LinkshellMgr.h diff --git a/src/servers/Server_Zone/Social/Manager/PartyMgr.cpp b/src/servers/sapphire_zone/Social/Manager/PartyMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Manager/PartyMgr.cpp rename to src/servers/sapphire_zone/Social/Manager/PartyMgr.cpp diff --git a/src/servers/Server_Zone/Social/Manager/PartyMgr.h b/src/servers/sapphire_zone/Social/Manager/PartyMgr.h similarity index 100% rename from src/servers/Server_Zone/Social/Manager/PartyMgr.h rename to src/servers/sapphire_zone/Social/Manager/PartyMgr.h diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.cpp b/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Manager/SocialMgr.cpp rename to src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp diff --git a/src/servers/Server_Zone/Social/Manager/SocialMgr.h b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h similarity index 100% rename from src/servers/Server_Zone/Social/Manager/SocialMgr.h rename to src/servers/sapphire_zone/Social/Manager/SocialMgr.h diff --git a/src/servers/Server_Zone/Social/Party.cpp b/src/servers/sapphire_zone/Social/Party.cpp similarity index 100% rename from src/servers/Server_Zone/Social/Party.cpp rename to src/servers/sapphire_zone/Social/Party.cpp diff --git a/src/servers/Server_Zone/Social/Party.h b/src/servers/sapphire_zone/Social/Party.h similarity index 100% rename from src/servers/Server_Zone/Social/Party.h rename to src/servers/sapphire_zone/Social/Party.h From e450917cd01fbf4509ba2b8c4a40678987d52a0d Mon Sep 17 00:00:00 2001 From: Maru Date: Thu, 25 Jan 2018 15:32:33 -0200 Subject: [PATCH 18/46] Haha everything broke haha --- src/servers/sapphire_zone/Actor/Player.cpp | 8 +++----- src/servers/sapphire_zone/Actor/Player.h | 8 ++++---- .../Network/Handlers/PacketHandlers.cpp | 8 ++++---- .../sapphire_zone/Social/FriendList.cpp | 16 ++++++++-------- src/servers/sapphire_zone/Social/FriendList.h | 12 ++++++------ src/servers/sapphire_zone/Social/Group.cpp | 18 +++++++++--------- src/servers/sapphire_zone/Social/Group.h | 8 ++++---- .../sapphire_zone/Social/Manager/SocialMgr.h | 2 +- 8 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index eeed4b3c..177f05be 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -29,10 +29,9 @@ #include "Script/ScriptManager.h" -#include "src/servers/Server_Zone/Social/FriendList.h" -#include "src/servers/Server_Zone/Actor/Manager/FriendListMgr.h" +#include "Social/FriendList.h" -#include "src/servers/Server_Zone/Script/ScriptManager.h" +#include "Script/ScriptManager.h" #include "Inventory/Item.h" #include "Inventory/Inventory.h" @@ -445,9 +444,8 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) queuePacket( gcAffPacket ); //todo: change this to extern, global obj - Core::Entity::Social::FriendListMgr fListMgr = {}; - m_friendsListId = fListMgr.fetchPlayerFriendsList( getId() ); + m_friendsListId = g_friendListMgr.fetchPlayerFriendsList( getId() ); m_itemLevel = getInventory()->calculateEquippedGearItemLevel(); sendItemLevel(); diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 1f4dabc7..da41e917 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -4,10 +4,10 @@ #include "Forwards.h" -#include -#include -#include -#include +#include +#include +#include +#include #include "Actor.h" #include "Inventory/Inventory.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 1b04a044..125104f4 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -481,14 +481,14 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket auto playerFriendsList = g_friendListMgr.findGroupById( player.getFriendsListId() ); // todo: move this garbage else fucking where - for ( auto member : playerFriendsList->getMembers() ) + for ( auto member : playerFriendsList.getMembers() ) { // more elegant way to break over list entries pls if ( i == 10 ) break; g_log.debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); - listPacket.data().entries[i] = Core::Entity::Social::Group::generatePlayerEntry( member.second ); + listPacket.data().entries[i] = Core::Social::Group::generatePlayerEntry( member.second ); i++; } @@ -692,11 +692,11 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac auto recipientFriendsList = g_friendListMgr.findGroupById( pRecipient->getFriendsListId() ); - auto senderResultPacket = recipientFriendsList->inviteMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); + auto senderResultPacket = recipientFriendsList.inviteMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); player.queuePacket( senderResultPacket ); - if ( recipientFriendsList->isFriendList() ) + if ( recipientFriendsList.isFriendList() ) { g_log.debug( "he HAA HAAA" ); } diff --git a/src/servers/sapphire_zone/Social/FriendList.cpp b/src/servers/sapphire_zone/Social/FriendList.cpp index 35ae351b..aa95d721 100644 --- a/src/servers/sapphire_zone/Social/FriendList.cpp +++ b/src/servers/sapphire_zone/Social/FriendList.cpp @@ -1,14 +1,14 @@ #include #include -#include +#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include "FriendList.h" #include "Group.h" diff --git a/src/servers/sapphire_zone/Social/FriendList.h b/src/servers/sapphire_zone/Social/FriendList.h index 16acdc87..3d55f99d 100644 --- a/src/servers/sapphire_zone/Social/FriendList.h +++ b/src/servers/sapphire_zone/Social/FriendList.h @@ -1,12 +1,12 @@ #ifndef _FRIENDLIST_H #define _FRIENDLIST_H -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include diff --git a/src/servers/sapphire_zone/Social/Group.cpp b/src/servers/sapphire_zone/Social/Group.cpp index cc7f4df4..c026dda1 100644 --- a/src/servers/sapphire_zone/Social/Group.cpp +++ b/src/servers/sapphire_zone/Social/Group.cpp @@ -1,15 +1,15 @@ #include #include -#include +#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include "Group.h" extern Core::ServerZone g_serverZone; diff --git a/src/servers/sapphire_zone/Social/Group.h b/src/servers/sapphire_zone/Social/Group.h index b610ca9b..219fe3fc 100644 --- a/src/servers/sapphire_zone/Social/Group.h +++ b/src/servers/sapphire_zone/Social/Group.h @@ -1,10 +1,10 @@ #ifndef _GROUP_H #define _GROUP_H -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include diff --git a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h index 99895e2d..909e814b 100644 --- a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h +++ b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h @@ -5,7 +5,7 @@ #include #include -#include +#include #include namespace Core { From c85009dd6cfe3648b935ac087282c40e7ec40d7c Mon Sep 17 00:00:00 2001 From: Maru Date: Sun, 4 Feb 2018 15:43:27 -0200 Subject: [PATCH 19/46] Yes --- src/libraries | 1 + 1 file changed, 1 insertion(+) create mode 160000 src/libraries diff --git a/src/libraries b/src/libraries new file mode 160000 index 00000000..978d3d2a --- /dev/null +++ b/src/libraries @@ -0,0 +1 @@ +Subproject commit 978d3d2a336b97bb6ea0d95dc7000cbc1618a8cc From 1d7ce0d87465efbf21259f1c097d31ac35bf59a5 Mon Sep 17 00:00:00 2001 From: Maru Date: Sun, 4 Feb 2018 17:02:32 -0200 Subject: [PATCH 20/46] =?UTF-8?q?=F0=9F=A4=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/Common.h | 2 ++ src/common/Network/PacketDef/Ipcs.h | 7 +++++-- src/servers/sapphire_zone/Actor/Player.cpp | 1 + .../sapphire_zone/Network/Handlers/PacketHandlers.cpp | 2 +- src/servers/sapphire_zone/Social/Group.cpp | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index 9f1d8001..29e2aa34 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -676,6 +676,8 @@ namespace Core { SetCharaGearParamUI = 0x260, GearSetEquipMsg = 0x321, + + DisableCurrentFestival = 0x386, ToggleOrchestrionUnlock = 0x396, Dismount = 0x3a0 diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index c505904a..f1893eea 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -1,7 +1,7 @@ #ifndef _CORE_NETWORK_PACKETS_IPCS_H #define _CORE_NETWORK_PACKETS_IPCS_H -#include +#include namespace Core { namespace Network { @@ -72,8 +72,11 @@ namespace Packets { Playtime = 0x00DF, // updated 4.2 CFRegistered = 0x00B8, // updated 4.1 - SocialRequestResponse = 0x00BB, // updated 4.1 + + Chat = 0x00E1, // updated 4.2 + SocialRequestResponse = 0x00E5, // updated 4.1 + SocialRequestReceive = 0x00E6, // updated 4.2 SocialList = 0x00E7, // updated 4.2 UpdateSearchInfo = 0x00EA, // updated 4.2 diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index cfa11ab0..3842db70 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -29,6 +29,7 @@ #include "Script/ScriptManager.h" +#include "Social/Manager/SocialMgr.h> #include "Social/FriendList.h" #include "Script/ScriptManager.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 3582a67f..1131eef1 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -453,7 +453,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket listPacket.data().entries[0].contentId = player.getContentId(); listPacket.data().entries[0].level = player.getLevel(); listPacket.data().entries[0].zoneId = player.getCurrentZone()->getTerritoryId(); - listPacket.data().entries[0].zoneId1 = 0x0100; + // listPacket.data().entries[0].zoneId1 = 0x0100; // TODO: no idea what this does //listPacket.data().entries[0].one = 1; diff --git a/src/servers/sapphire_zone/Social/Group.cpp b/src/servers/sapphire_zone/Social/Group.cpp index c026dda1..835b7061 100644 --- a/src/servers/sapphire_zone/Social/Group.cpp +++ b/src/servers/sapphire_zone/Social/Group.cpp @@ -141,7 +141,7 @@ Core::Network::Packets::Server::PlayerEntry Group::generatePlayerEntry( GroupMem entry.classJob = pPlayer->getClass(); entry.level = pPlayer->getLevel(); - entry.zoneId = pPlayer->getCurrentZone()->getId(); + entry.zoneId = pPlayer->getCurrentZone()->getGuId(); entry.grandCompany = pPlayer->getGc(); memcpy( &entry.fcTag[0], "Meme", 4 ); entry.clientLanguage = 2; From 2f17286c776a667252cdb418e4a560720773ea66 Mon Sep 17 00:00:00 2001 From: Maru Date: Fri, 2 Mar 2018 03:15:06 -0300 Subject: [PATCH 21/46] Merging sucks sometimes you know that --- src/common/Common.h | 98 ++++++---------------- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- src/servers/sapphire_zone/ServerZone.cpp | 3 +- 3 files changed, 28 insertions(+), 75 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index b6f38803..b1f63683 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -156,35 +156,6 @@ namespace Core { uint32_t sourceActorId; }; - enum RegionType : uint8_t - { - normal, - instance, - }; - - enum TerritoryIntendedUseType : uint8_t //ToDo: Add The Rest of The Territory Types and Have Better Names For Them - { - Town = 0, - OpenWorld = 1, - Inn = 2, - Dungeon = 3, - JailArea = 5, - OpeningArea = 6, - BeforeTrialDung = 7, - AllianceRaid = 8, - OpenWorldInstanceBattle = 9, - Trial = 10, - HousingArea = 13, - HousingPrivateArea = 14, - MSQPrivateArea = 15, - Raids = 16, - RaidFights = 17, - ChocoboTutorial = 21, - Wedding = 22, - BeginnerTutorial = 27, - PalaceOfTheDead = 31, - }; - enum CharaLook : uint8_t { Race = 0x00, @@ -319,25 +290,6 @@ namespace Core { }; - enum EventType : uint16_t - { - Quest = 0x0001, - ChocoRent = 0x0002, - Shop = 0x0004, - Aetheryte = 0x0005, - GuildLeveAssign = 0x0006, - DefaultTalk = 0x0009, - CustomTalk = 0x000B, - CraftLeve = 0x000E, - ChocoPort = 0x0012, - Opening = 0x0013, - GCShop = 0x0016, - GuildOrderGuide = 0x0017, - GuildOrderOfficer = 0x0018, - Stories = 0x001A, - FcTalk = 0x001F, - }; - enum struct ActionAspect : uint8_t { None = 0, // Doesn't imply unaspected @@ -430,7 +382,6 @@ namespace Core { enum struct PlayerStateFlag : uint8_t { - SomeFlag, NoCombat, Combat, Casting, @@ -560,16 +511,22 @@ namespace Core { SetOwnerId = 0x59, ItemRepairMsg = 0x5C, + DirectorInit = 0x64, + DirectorClear = 0x65, + LeveStartAnim = 0x66, LeveStartError = 0x67, - PlayerNameGrayout = 0x6A, + DirectorEObjMod = 0x6A, - LeveStartAnim = 0x66, - LeveStartError = 0x67, - PlayerNameGrayout = 0x6A, + DirectorUpdate = 0x6D, - ItemObtainMsg = 0x75, - DutyQuestScreenMsg = 0x7B, + ItemObtainMsg = 0x75, + DutyQuestScreenMsg = 0x7B, + + ItemObtainIcon = 0x84, + FateItemFailMsg = 0x85, + ItemFailMsg = 0x86, + ActionLearnMsg1 = 0x87, FreeEventPos = 0x8A, @@ -675,7 +632,7 @@ namespace Core { SetCharaGearParamUI = 0x260, GearSetEquipMsg = 0x321, - + DisableCurrentFestival = 0x386, ToggleOrchestrionUnlock = 0x396, @@ -802,7 +759,17 @@ namespace Core { Normal = 0x1, MountSkill = 0xD, }; - + + /*! ModelType as found in eventsystemdefine.exd */ + enum ModelType : uint8_t + { + Human = 1, + DemiHuman = 2, + Monster = 3, + SharedGroup = 4, + Parts = 5 + }; + enum SocialCategory : uint8_t { Party = 1, @@ -819,7 +786,7 @@ namespace Core { }; - // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous + // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous enum class SocialRequestAction : uint8_t { Invite = 1, @@ -835,21 +802,6 @@ namespace Core { Cancel, }; - struct ServerEntry - { - uint32_t serverId; - uint32_t flags; - }; - - enum ModelType : uint8_t - { - Human = 1, - DemiHuman = 2, - Monster = 3, - SharedGroup = 4, - Parts = 5 - }; - typedef std::vector< PlayerStateFlag > PlayerStateFlagList; } /* Common */ diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 204d3f71..28fa998e 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -29,7 +29,7 @@ #include "Script/ScriptManager.h" -#include "Social/Manager/SocialMgr.h> +#include #include "Social/FriendList.h" #include "Script/ScriptManager.h" diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index b533fb77..9d22685a 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -214,7 +214,8 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) return; } - g_friendListMgr = Core::Social::SocialMgr(); + g_friendListMgr = Core::Social::SocialMgr< Core::Social::FriendList >(); + g_friendListMgr.findGroupById( 0 ); Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); From 63288704bb962a87ed199e02d7747934168349b6 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 5 Mar 2018 22:07:41 -0300 Subject: [PATCH 22/46] Initializing point; --- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- .../DebugCommand/DebugCommandHandler.cpp | 3 ++- src/servers/sapphire_zone/Framework.cpp | 11 +++++++++++ src/servers/sapphire_zone/Framework.h | 13 +++++++++---- .../Network/Handlers/PacketHandlers.cpp | 18 +++++++++--------- src/servers/sapphire_zone/ServerZone.cpp | 7 +++++-- .../sapphire_zone/Social/Manager/SocialMgr.cpp | 2 ++ .../sapphire_zone/Social/Manager/SocialMgr.h | 3 +++ 8 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index d92056d0..0c0b619a 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -33,7 +33,7 @@ #include #include "Social/FriendList.h" -#include "Script/ScriptManager.h" +#include "Script/ScriptMgr.h" #include "Inventory/Item.h" #include "Inventory/Inventory.h" diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 97fdcd54..a7134ba5 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -376,7 +377,7 @@ void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost: { Common::FFXIVARR_POSITION3 posC = player.getPos(); std::mt19937 gen( rand() * 1000 ); - std::uniform_int_distribution dis( distCoefficient * -1, distCoefficient ); + std::uniform_int_distribution< int > dis( distCoefficient * -1, distCoefficient ); posC.x += dis( gen ); posC.z += dis( gen ); diff --git a/src/servers/sapphire_zone/Framework.cpp b/src/servers/sapphire_zone/Framework.cpp index b50a7806..04bde01a 100644 --- a/src/servers/sapphire_zone/Framework.cpp +++ b/src/servers/sapphire_zone/Framework.cpp @@ -4,6 +4,12 @@ Core::ServerZone g_serverZone( "config/settings_zone.xml" ); +bool Core::Framework::initSocialGroups() +{ + g_friendListMgr = Core::Social::SocialMgr< Core::Social::FriendList >(); + return true; +} + Core::Logger& Core::Framework::getLogger() { return g_log; @@ -42,4 +48,9 @@ Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >& Core::Framework::getChara Core::ServerZone& Core::Framework::getServerZone() { return g_serverZone; +} + +Core::Social::SocialMgr< Core::Social::FriendList > Core::Framework::getFriendsListMgr() +{ + return g_friendListMgr; } \ No newline at end of file diff --git a/src/servers/sapphire_zone/Framework.h b/src/servers/sapphire_zone/Framework.h index 6c39483a..67e8e068 100644 --- a/src/servers/sapphire_zone/Framework.h +++ b/src/servers/sapphire_zone/Framework.h @@ -6,11 +6,11 @@ #include "Forwards.h" - #include "ServerZone.h" #include - +#include +#include #include #include "Script/ScriptMgr.h" @@ -21,8 +21,8 @@ #include "DebugCommand/DebugCommandHandler.h" -#include -#include +#include "Social/Manager/SocialMgr.h" + namespace Core { @@ -38,9 +38,12 @@ private: TerritoryMgr g_territoryMgr; LinkshellMgr g_linkshellMgr; Db::DbWorkerPool< Db::CharaDbConnection > g_charaDb; + Social::SocialMgr< Social::FriendList > g_friendListMgr; public: + bool initSocialGroups(); + Logger& getLogger(); DebugCommandHandler& getDebugCommandHandler(); Scripting::ScriptMgr& getScriptMgr(); @@ -50,6 +53,8 @@ public: Db::DbWorkerPool< Db::CharaDbConnection >& getCharaDb(); ServerZone& getServerZone(); + Social::SocialMgr< Social::FriendList > getFriendsListMgr(); + }; } diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 6813d01c..3d9022d5 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -479,7 +479,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket uint16_t i = 0; - auto playerFriendsList = g_friendListMgr.findGroupById( player.getFriendsListId() ); + auto playerFriendsList = g_framework.getFriendsListMgr().findGroupById( player.getFriendsListId() ); // todo: move this garbage else fucking where for ( auto member : playerFriendsList.getMembers() ) @@ -488,7 +488,7 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket if ( i == 10 ) break; - g_log.debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); + g_framework.getLogger().debug( "aaa" + std::to_string( i ) + ": " + member.second.name ); listPacket.data().entries[i] = Core::Social::Group::generatePlayerEntry( member.second ); i++; } @@ -539,15 +539,15 @@ void Core::Network::GameConnection::socialReqResponseHandler( const Packets::Gam return; }*/ - g_log.debug( std::to_string( static_cast( action ) ) ); + g_framework.getLogger().debug( std::to_string( static_cast( action ) ) ); - auto pSession = g_serverZone.getSession( targetId ); + auto pSession = g_framework.getServerZone().getSession( targetId ); // todo: notify both inviter/invitee with 0x00CB packet if( pSession ) { - g_log.debug( std::to_string(static_cast(action)) ); + g_framework.getLogger().debug( std::to_string(static_cast(action)) ); } response.data().response = Common::SocialRequestResponse::Accept; memcpy( &( response.data().name ), name.c_str(), 32 ); @@ -561,7 +561,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac auto category = inPacket.getValAt< Common::SocialCategory >( 0x20 ); auto name = std::string( inPacket.getStringAt( 0x21 ) ); - auto pSession = g_serverZone.getSession( name ); + auto pSession = g_framework.getServerZone().getSession( name ); // only the requester needs the response ZoneChannelPacket< FFXIVIpcSocialRequestError > response( player.getId() ); @@ -691,7 +691,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac pRecipient->queuePacket( packet ); pRecipient->sendDebug( "ding ding" ); - auto recipientFriendsList = g_friendListMgr.findGroupById( pRecipient->getFriendsListId() ); + auto recipientFriendsList = g_framework.getFriendsListMgr().findGroupById( pRecipient->getFriendsListId() ); auto senderResultPacket = recipientFriendsList.inviteMember( player.getAsPlayer(), pRecipient, player.getId(), pRecipient->getId() ); @@ -699,7 +699,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac if ( recipientFriendsList.isFriendList() ) { - g_log.debug( "he HAA HAAA" ); + g_framework.getLogger().debug( "he HAA HAAA" ); } response.data().messageId = typeMessage[category]; @@ -708,7 +708,7 @@ void Core::Network::GameConnection::socialReqSendHandler( const Packets::GamePac player.queuePacket( response ); // todo: handle party, friend request - g_log.debug("sent to " + name); + g_framework.getLogger().debug("sent to " + name); } void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPacket, diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 78325bb1..b9691a59 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -202,6 +202,10 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) g_log = g_framework.getLogger(); + if ( !g_framework.initSocialGroups() ) + { + g_framework.getLogger().fatal( "Unable to initialize social groups!" ); + } if( !loadSettings( argc, argv ) ) { @@ -216,8 +220,7 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) return; } - g_friendListMgr = Core::Social::SocialMgr< Core::Social::FriendList >(); - g_friendListMgr.findGroupById( 0 ); + g_framework.getFriendsListMgr().findGroupById( 0 ); Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); diff --git a/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp b/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp index 2d228ed5..66766e0d 100644 --- a/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp +++ b/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp @@ -1,6 +1,8 @@ #include "../Group.h" #include "SocialMgr.h" +#include "Forwards.h" + template< class T > Core::Social::SocialMgr< T >::SocialMgr() diff --git a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h index 138355cd..fa80f0c3 100644 --- a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h +++ b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h @@ -8,6 +8,8 @@ #include #include +#include "Forwards.h" + namespace Core { namespace Social { @@ -15,6 +17,7 @@ template< class T > class SocialMgr { public: + SocialMgr(); virtual ~SocialMgr(); From 39e379747d186a22847241d4206710c98432c7cd Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Mar 2018 13:33:10 +1100 Subject: [PATCH 23/46] auto hide entrance circle --- .../sapphire_zone/Zone/InstanceContent.cpp | 15 +++++++++++++-- src/servers/sapphire_zone/Zone/InstanceContent.h | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index bbdc2f56..39f02174 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -36,7 +36,8 @@ Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceC m_instanceContentInfo( pInstanceContent ), m_instanceContentId( instanceContentId ), m_state( Created ), - m_pEntranceEObj( nullptr ) + m_pEntranceEObj( nullptr ), + m_instanceCommenceTime( 0 ) { } @@ -107,10 +108,19 @@ void Core::InstanceContent::onUpdate( uint32_t currTime ) { if( !playerIt.second->isLoadingComplete() || !playerIt.second->isDirectorInitialized() || - !playerIt.second->isOnEnterEventDone() ) + !playerIt.second->isOnEnterEventDone() || + playerIt.second->hasStateFlag( PlayerStateFlag::WatchingCutscene ) ) return; } + if( m_instanceCommenceTime == 0 ) + { + m_instanceCommenceTime = Util::getTimeMs() + INSTANCE_COMMENCE_DELAY; + return; + } + else if( Util::getTimeMs() < m_instanceCommenceTime ) + return; + for( const auto& playerIt : m_playerMap ) { auto pPlayer = playerIt.second; @@ -119,6 +129,7 @@ void Core::InstanceContent::onUpdate( uint32_t currTime ) getDirectorId(), 0x40000001, m_instanceContentInfo->timeLimitmin * 60u ) ); } + m_pEntranceEObj->setState( 7 ); m_state = DutyInProgress; m_instanceExpireTime = Util::getTimeSeconds() + ( m_instanceContentInfo->timeLimitmin * 60u ); break; diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index d487f86f..8f210f9b 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -22,6 +22,9 @@ public: DutyFinished }; + /*! number of milliseconds after all players are ready for the instance to commence (spawn circle removed) */ + const uint32_t INSTANCE_COMMENCE_DELAY = 1250; + InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent, uint32_t guId, const std::string& internalName, @@ -59,6 +62,7 @@ private: InstanceContentState m_state; int64_t m_instanceExpireTime; + int64_t m_instanceCommenceTime; Entity::EventObjectPtr m_pEntranceEObj; From dcd0d6b0cd59d7e71bfdce169b8ad90a4846125e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Mar 2018 13:34:02 +1100 Subject: [PATCH 24/46] remove double eventStart call --- .../sapphire_zone/Network/Handlers/EventHandlers.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index e59540eb..97f124de 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -163,14 +163,8 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) ); - player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId(), 0 ); - if( auto instance = player.getCurrentInstance() ) { - // param2 of eventStart - // 0 = default state? - // 1 = restore state? - // (^ Mordred: Nope, i don't think thats it ) player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId(), instance->getDirectorId() & 0xFFFF ); instance->onEnterTerritory( player, eventId, param1, param2 ); } From 348e9916d9b33a026922d5f10a9d1be2ac3c87a6 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 5 Mar 2018 23:42:09 -0300 Subject: [PATCH 25/46] Fix merge stuff --- src/common/Common.h | 87 +++++++++---------- src/common/Network/PacketDef/Ipcs.h | 1 - src/servers/sapphire_zone/Framework.h | 3 +- .../sapphire_zone/Social/FriendList.cpp | 7 +- src/servers/sapphire_zone/Social/FriendList.h | 24 ++--- 5 files changed, 50 insertions(+), 72 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index 5d6b0488..f99a7c77 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -14,9 +14,9 @@ namespace Core { namespace Common { - // 99 is the last spawn id that seems to spawn any actor - const uint8_t MAX_DISPLAYED_ACTORS = 99; - const uint8_t MAX_DISPLAYED_EOBJS = 40; + // 99 is the last spawn id that seems to spawn any actor + const uint8_t MAX_DISPLAYED_ACTORS = 99; + const uint8_t MAX_DISPLAYED_EOBJS = 40; const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000; @@ -381,44 +381,39 @@ namespace Core { InvincibilityStayAlive, }; - enum struct PlayerStateFlag : uint8_t + enum PlayerStateFlag : uint8_t { - NoCombat, - Combat, - Casting, - StatusAffliction, - StatusAffliction1, - Occupied, - Occupied1, - Occupied2, - Occupied3, + HideUILockChar = 0, // as the name suggests, hides the ui and logs the char... + InCombat = 1, // in Combat, locks gearchange/return/teleport + Casting = 2, + InNpcEvent = 7, // when talking to an npc, locks ui giving "occupied" message - BoundByDuty, - Occupied4, - DuelingArea, - TradeOpen, - Occupied5, - HandlingItems, - Crafting, - PreparingToCraft, - Gathering, - Fishing, + InNpcEvent1 = 10, // Sent together with InNpcEvent, when waiting for input? just a guess... - enum PlayerStateFlag : uint8_t - { - HideUILockChar = 0, // as the name suggests, hides the ui and logs the char... - InCombat = 1, // in Combat, locks gearchange/return/teleport - Casting = 2, - InNpcEvent = 7, // when talking to an npc, locks ui giving "occupied" message - - InNpcEvent1 = 10, // Sent together with InNpcEvent, when waiting for input? just a guess... - - BetweenAreas = 24, - BoundByDuty = 28, - WatchingCutscene = 50, // this is actually just a dummy, this id is different + BetweenAreas = 24, + BoundByDuty = 28, + WatchingCutscene = 50, // this is actually just a dummy, this id is different - }; + }; + + enum struct FateStatus : uint8_t + { + Active = 2, + Inactive = 4, + Preparing = 7, + Completed = 8, + }; + + enum ActorControlType : uint16_t + { + ToggleWeapon = 0x01, + SetStatus = 0x02, + CastStart = 0x03, + ToggleAggro = 0x04, + ClassJobChange = 0x05, + DefeatMsg = 0x06, + GainExpMsg = 0x07, LevelUpEffect = 0x0A, @@ -712,16 +707,6 @@ namespace Core { MountSkill = 0xD, }; - /*! ModelType as found in eventsystemdefine.exd */ - enum ModelType : uint8_t - { - Human = 1, - DemiHuman = 2, - Monster = 3, - SharedGroup = 4, - Parts = 5 - }; - enum SocialCategory : uint8_t { Party = 1, @@ -730,9 +715,15 @@ namespace Core { FreeCompany = 5, }; - typedef std::vector< PlayerStateFlag > PlayerStateFlagList; + enum SocialListType : uint8_t + { + PartyList = 0x02, + FriendList = 0x0b, + SearchList = 0x0e, + }; - // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous + + // todo: rename SocialRequestAction and SocialRequestResponse cause they seem ambiguous enum class SocialRequestAction : uint8_t { Invite = 1, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a33ba72a..0c565c60 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -72,7 +72,6 @@ namespace Packets { Playtime = 0x00DF, // updated 4.2 CFRegistered = 0x00B8, // updated 4.1 - SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 Chat = 0x00E1, // updated 4.2 SocialRequestResponse = 0x00E5, // updated 4.1 diff --git a/src/servers/sapphire_zone/Framework.h b/src/servers/sapphire_zone/Framework.h index 67e8e068..fda0ff2e 100644 --- a/src/servers/sapphire_zone/Framework.h +++ b/src/servers/sapphire_zone/Framework.h @@ -22,7 +22,8 @@ #include "DebugCommand/DebugCommandHandler.h" #include "Social/Manager/SocialMgr.h" - +#include "Social/FriendList.h" +#include "Social/Group.h" namespace Core { diff --git a/src/servers/sapphire_zone/Social/FriendList.cpp b/src/servers/sapphire_zone/Social/FriendList.cpp index aa95d721..f245209a 100644 --- a/src/servers/sapphire_zone/Social/FriendList.cpp +++ b/src/servers/sapphire_zone/Social/FriendList.cpp @@ -1,16 +1,17 @@ #include #include -#include +#include +#include #include #include -#include #include #include #include +#include #include -#include "FriendList.h" #include "Group.h" +#include "FriendList.h" extern Core::ServerZone g_serverZone; extern Core::Logger g_log; diff --git a/src/servers/sapphire_zone/Social/FriendList.h b/src/servers/sapphire_zone/Social/FriendList.h index 3d55f99d..24eb5f47 100644 --- a/src/servers/sapphire_zone/Social/FriendList.h +++ b/src/servers/sapphire_zone/Social/FriendList.h @@ -3,14 +3,14 @@ #include #include -#include #include -#include #include #include #include #include #include +#include "Group.h" + using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; @@ -18,9 +18,6 @@ using namespace Core::Network::Packets::Server; namespace Core { namespace Social { -class FriendList; -using FriendListPtr = boost::shared_ptr< FriendList >; - class FriendList : public Group { @@ -29,22 +26,8 @@ public: Group( id, ownerId ), m_id( id ), m_ownerId( ownerId ) {}; - /*virtual void load(); - virtual void update(); - virtual void disband();*/ - - bool isParty() const; - bool isFriendList() const; - bool isFreeCompany() const; - bool isLinkshell() const; - bool isFreeCompanyPetition() const; - /*bool isBlacklist() const; - bool isContentGroup() const;*/ - std::vector< Core::Network::Packets::Server::PlayerEntry > getFriendListEntries( uint16_t entryAmount ); - - protected: uint64_t m_id{ 0 }; uint64_t m_ownerId{ 0 }; @@ -55,6 +38,9 @@ protected: }; + +using FriendListPtr = boost::shared_ptr< FriendList >; + } }; #endif // ! _FRIENDLIST_H \ No newline at end of file From 806f235de45bc5bb121eb14e158b271eeb8bc0a2 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 5 Mar 2018 23:55:11 -0300 Subject: [PATCH 26/46] Moo woops --- src/servers/sapphire_zone/Framework.cpp | 2 +- src/servers/sapphire_zone/Framework.h | 2 +- src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/servers/sapphire_zone/Framework.cpp b/src/servers/sapphire_zone/Framework.cpp index 04bde01a..aa9cb4b4 100644 --- a/src/servers/sapphire_zone/Framework.cpp +++ b/src/servers/sapphire_zone/Framework.cpp @@ -50,7 +50,7 @@ Core::ServerZone& Core::Framework::getServerZone() return g_serverZone; } -Core::Social::SocialMgr< Core::Social::FriendList > Core::Framework::getFriendsListMgr() +Core::Social::SocialMgr< Core::Social::FriendList >& Core::Framework::getFriendsListMgr() { return g_friendListMgr; } \ No newline at end of file diff --git a/src/servers/sapphire_zone/Framework.h b/src/servers/sapphire_zone/Framework.h index fda0ff2e..4859e874 100644 --- a/src/servers/sapphire_zone/Framework.h +++ b/src/servers/sapphire_zone/Framework.h @@ -54,7 +54,7 @@ public: Db::DbWorkerPool< Db::CharaDbConnection >& getCharaDb(); ServerZone& getServerZone(); - Social::SocialMgr< Social::FriendList > getFriendsListMgr(); + Social::SocialMgr< Social::FriendList >& getFriendsListMgr(); }; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 87bcd02b..98e6e233 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -44,6 +44,9 @@ #include "Forwards.h" #include "Framework.h" +#include "Social/Group.h" +#include "Social/FriendList.h" + extern Core::Framework g_framework; using namespace Core::Common; From df4ee95cf5e14953c1e4bf06a33c1906c4431d0a Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Mar 2018 14:26:21 +1100 Subject: [PATCH 27/46] if player already zoned into instance, don't teleport them back to start on zonein --- .../sapphire_zone/Zone/InstanceContent.cpp | 23 ++++++++++++------- .../sapphire_zone/Zone/InstanceContent.h | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 39f02174..ed4e63c7 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -286,15 +286,22 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object ) void Core::InstanceContent::onBeforePlayerZoneIn( Core::Entity::Player& player ) { - if( m_pEntranceEObj != nullptr ) + // if a player has already spawned once inside this instance, don't move them if they happen to zone in again + auto it = m_spawnedPlayers.find( player.getId() ); + if( it == m_spawnedPlayers.end() ) { - player.setRot( PI ); - player.setPos( m_pEntranceEObj->getPos() ); - } - else - { - player.setRot( PI ); - player.setPos( { 0.f, 0.f, 0.f } ); + if( m_pEntranceEObj != nullptr ) + { + player.setRot( PI ); + player.setPos( m_pEntranceEObj->getPos() ); + } + else + { + player.setRot( PI ); + player.setPos( { 0.f, 0.f, 0.f } ); + } + + m_spawnedPlayers.insert( player.getId() ); } player.resetObjSpawnIndex( ); diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index 8f210f9b..e58e4abd 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -68,6 +68,7 @@ private: std::map< std::string, Entity::EventObjectPtr > m_eventObjectMap; std::unordered_map< uint32_t, Entity::EventObjectPtr > m_eventIdToObjectMap; + std::set< uint32_t > m_spawnedPlayers; }; } From 32e10ec6e83093b1322ef14e93c5ae2e667978cd Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Mar 2018 18:00:57 +1100 Subject: [PATCH 28/46] make mordred happy --- src/servers/sapphire_zone/Zone/InstanceContent.cpp | 5 +++-- src/servers/sapphire_zone/Zone/InstanceContent.h | 5 ++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index ed4e63c7..b56ff102 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -115,7 +115,7 @@ void Core::InstanceContent::onUpdate( uint32_t currTime ) if( m_instanceCommenceTime == 0 ) { - m_instanceCommenceTime = Util::getTimeMs() + INSTANCE_COMMENCE_DELAY; + m_instanceCommenceTime = Util::getTimeMs() + instanceStartDelay; return; } else if( Util::getTimeMs() < m_instanceCommenceTime ) @@ -129,7 +129,8 @@ void Core::InstanceContent::onUpdate( uint32_t currTime ) getDirectorId(), 0x40000001, m_instanceContentInfo->timeLimitmin * 60u ) ); } - m_pEntranceEObj->setState( 7 ); + if( m_pEntranceEObj ) + m_pEntranceEObj->setState( 7 ); m_state = DutyInProgress; m_instanceExpireTime = Util::getTimeSeconds() + ( m_instanceContentInfo->timeLimitmin * 60u ); break; diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index e58e4abd..0dad9d5c 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -22,9 +22,6 @@ public: DutyFinished }; - /*! number of milliseconds after all players are ready for the instance to commence (spawn circle removed) */ - const uint32_t INSTANCE_COMMENCE_DELAY = 1250; - InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent, uint32_t guId, const std::string& internalName, @@ -55,6 +52,8 @@ public: Entity::EventObjectPtr getEObjByName( const std::string& name ); + /*! number of milliseconds after all players are ready for the instance to commence (spawn circle removed) */ + const uint32_t instanceStartDelay = 1250; private: Event::DirectorPtr m_pDirector; boost::shared_ptr< Core::Data::InstanceContent > m_instanceContentInfo; From ad6f25cb30612b14884912e1e7ef4426aab9041c Mon Sep 17 00:00:00 2001 From: Maru Date: Tue, 6 Mar 2018 04:34:53 -0300 Subject: [PATCH 29/46] Fix const error on group gen func --- src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp | 4 ++-- src/servers/sapphire_zone/Social/Manager/SocialMgr.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp b/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp index 66766e0d..445c091e 100644 --- a/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp +++ b/src/servers/sapphire_zone/Social/Manager/SocialMgr.cpp @@ -37,7 +37,7 @@ T Core::Social::SocialMgr< T >::findGroupById( uint64_t groupId ) const } template< class T > -uint64_t Core::Social::SocialMgr< T >::generateGroupId() const +uint64_t Core::Social::SocialMgr< T >::generateGroupId() { m_lastGroupId++; return m_lastGroupId; @@ -52,4 +52,4 @@ bool Core::Social::SocialMgr< T >::hasInvite( uint64_t playerId ) const return true; } return false; -} \ No newline at end of file +} diff --git a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h index fa80f0c3..5e16875b 100644 --- a/src/servers/sapphire_zone/Social/Manager/SocialMgr.h +++ b/src/servers/sapphire_zone/Social/Manager/SocialMgr.h @@ -62,7 +62,7 @@ protected: friend virtual void disband(); */ - virtual uint64_t generateGroupId() const; + virtual uint64_t generateGroupId(); private: std::map< uint64_t, T > m_groups; @@ -71,4 +71,4 @@ private: } }; -#endif /* ! _SOCIALMGR_H */ \ No newline at end of file +#endif /* ! _SOCIALMGR_H */ From 6350f1d91764d95ac088daf12a967608a7fc42e6 Mon Sep 17 00:00:00 2001 From: Mordred Admin Date: Tue, 6 Mar 2018 22:45:46 +0100 Subject: [PATCH 30/46] Updated submodules --- src/libraries | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries b/src/libraries index 732e26b4..abee861d 160000 --- a/src/libraries +++ b/src/libraries @@ -1 +1 @@ -Subproject commit 732e26b4bfb15875d71ae4ec13b8bd6155013840 +Subproject commit abee861d915416c1c414f270320bcb8b21b0f569 From 42a556b4875f59fe96d4fbf67617553670215ff5 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 6 Mar 2018 23:20:07 +0100 Subject: [PATCH 31/46] Build fix... well ish... --- CMakeLists.txt | 34 +++++++++++----------- src/common/Version.cpp.in | 8 ++--- src/servers/sapphire_lobby/ServerLobby.cpp | 2 ++ 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 055e39b3..8fb79881 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,14 +16,14 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) # set(Boost_DEBUG 1) -if(NOT SAPPHIRE_BOOST_VER) - set(SAPPHIRE_BOOST_VER 1.60.0) +if( NOT SAPPHIRE_BOOST_VER ) + set( SAPPHIRE_BOOST_VER 1.63.0 ) endif() -set(SAPPHIRE_BOOST_FOLDER_NAME boost_1_60_0) +set( SAPPHIRE_BOOST_FOLDER_NAME boost_1_63_0 ) ########################################################################## # Common and library path -set(LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/libraries") +set( LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/libraries" ) ########################################################################## # Dependencies and compiler settings @@ -34,22 +34,22 @@ include( "cmake/cotire.cmake" ) ############################## # Git # ############################## -include(GetGitRevisionDescription) -get_git_head_revision(GIT_REFSPEC GIT_SHA1) -git_describe(VERSION --all --dirty=-d) -configure_file("src/common/Version.cpp.in" - "src/common/Version.cpp" @ONLY) +include( GetGitRevisionDescription ) +get_git_head_revision( GIT_REFSPEC GIT_SHA1 ) +git_describe( VERSION --all --dirty=-d ) +configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/src/common/Version.cpp.in" + "${CMAKE_CURRENT_SOURCE_DIR}/src/common/Version.cpp" @ONLY ) ########################################################################## -add_subdirectory("src/libraries/sapphire/datReader") -add_subdirectory("src/libraries/sapphire/mysqlConnector") -add_subdirectory("src/common") +add_subdirectory( "src/libraries/sapphire/datReader" ) +add_subdirectory( "src/libraries/sapphire/mysqlConnector" ) +add_subdirectory( "src/common" ) -add_subdirectory("src/servers") +add_subdirectory( "src/servers" ) -add_subdirectory("src/tools/exd_common_gen") -add_subdirectory("src/tools/exd_struct_gen") -add_subdirectory("src/tools/exd_struct_test") -add_subdirectory("src/tools/quest_parser") +add_subdirectory( "src/tools/exd_common_gen" ) +add_subdirectory( "src/tools/exd_struct_gen" ) +add_subdirectory( "src/tools/exd_struct_test" ) +add_subdirectory( "src/tools/quest_parser" ) #add_subdirectory("src/tools/pcb_reader") #add_subdirectory("src/tools/event_object_parser") diff --git a/src/common/Version.cpp.in b/src/common/Version.cpp.in index 4a7bacda..b2de470a 100644 --- a/src/common/Version.cpp.in +++ b/src/common/Version.cpp.in @@ -1,10 +1,10 @@ #include "Version.h" namespace Core { - namespace Version { +namespace Version { - const std::string GIT_HASH = "@GIT_SHA1@"; - const std::string VERSION = "@VERSION@"; +const std::string GIT_HASH = "@GIT_SHA1@"; +const std::string VERSION = "@VERSION@"; - } /* Version */ +} /* Version */ } /* Core */ diff --git a/src/servers/sapphire_lobby/ServerLobby.cpp b/src/servers/sapphire_lobby/ServerLobby.cpp index a68c2723..82693b12 100644 --- a/src/servers/sapphire_lobby/ServerLobby.cpp +++ b/src/servers/sapphire_lobby/ServerLobby.cpp @@ -16,6 +16,8 @@ #include "GameConnection.h" #include "RestConnector.h" +#include "Forwards.h" +#include #include #include From 88cf5de3b421c7df2b899fbc081a1b6a2a22e79f Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 6 Mar 2018 23:38:21 +0100 Subject: [PATCH 32/46] Update submodules --- src/libraries | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries b/src/libraries index abee861d..e777f92e 160000 --- a/src/libraries +++ b/src/libraries @@ -1 +1 @@ -Subproject commit abee861d915416c1c414f270320bcb8b21b0f569 +Subproject commit e777f92eba1dc2a8732a9d56b5064fc51996660a From e15c46500ca4fac5737ebca83f7b00a46b79bb13 Mon Sep 17 00:00:00 2001 From: Mordred Admin Date: Wed, 7 Mar 2018 08:14:42 +0100 Subject: [PATCH 33/46] Moved scripts out of server_zone scope --- src/servers/CMakeLists.txt | 1 + src/servers/Scripts/CMakeLists.txt | 81 +++ src/servers/Scripts/ScriptLoader.cpp.in | 14 + src/servers/Scripts/ScriptObject.h | 91 +++ src/servers/Scripts/action/ActionSprint3.cpp | 15 + src/servers/Scripts/action/ScriptLoader.cpp | 15 + src/servers/Scripts/common/Aethernet.cpp | 47 ++ src/servers/Scripts/common/Aetheryte.cpp | 71 +++ .../Scripts/common/CmnDefCutSceneReplay.cpp | 38 ++ src/servers/Scripts/common/CmnDefInnBed.cpp | 58 ++ .../Scripts/common/CmnDefLinkShell.cpp | 60 ++ .../Scripts/common/HouFurOrchestrion.cpp | 20 + src/servers/Scripts/common/ScriptLoader.cpp | 25 + .../Scripts/instances/ScriptLoader.cpp | 547 ++++++++++++++++++ .../ThePalaceoftheDeadFloors101110.cpp | 29 + .../ThePalaceoftheDeadFloors110.cpp | 27 + .../ThePalaceoftheDeadFloors111120.cpp | 27 + .../ThePalaceoftheDeadFloors1120.cpp | 27 + .../ThePalaceoftheDeadFloors121130.cpp | 27 + .../ThePalaceoftheDeadFloors131140.cpp | 27 + .../ThePalaceoftheDeadFloors141150.cpp | 27 + .../ThePalaceoftheDeadFloors151160.cpp | 27 + .../ThePalaceoftheDeadFloors161170.cpp | 27 + .../ThePalaceoftheDeadFloors171180.cpp | 27 + .../ThePalaceoftheDeadFloors181190.cpp | 27 + .../ThePalaceoftheDeadFloors191200.cpp | 27 + .../ThePalaceoftheDeadFloors2130.cpp | 27 + .../ThePalaceoftheDeadFloors3140.cpp | 35 ++ .../ThePalaceoftheDeadFloors4150.cpp | 35 ++ .../ThePalaceoftheDeadFloors5160.cpp | 27 + .../ThePalaceoftheDeadFloors6170.cpp | 27 + .../ThePalaceoftheDeadFloors7180.cpp | 27 + .../ThePalaceoftheDeadFloors8190.cpp | 29 + .../ThePalaceoftheDeadFloors91100.cpp | 29 + .../Scripts/instances/dungeons/AlaMhigo.cpp | 25 + .../instances/dungeons/AmdaporKeep.cpp | 148 +++++ .../instances/dungeons/AmdaporKeepHard.cpp | 65 +++ .../instances/dungeons/BaelsarsWall.cpp | 57 ++ .../instances/dungeons/BardamsMettle.cpp | 25 + .../instances/dungeons/BrayfloxsLongstop.cpp | 48 ++ .../dungeons/BrayfloxsLongstopHard.cpp | 54 ++ .../instances/dungeons/CastrumAbania.cpp | 25 + .../instances/dungeons/CastrumMeridianum.cpp | 95 +++ .../instances/dungeons/CopperbellMines.cpp | 79 +++ .../dungeons/CopperbellMinesHard.cpp | 71 +++ .../Scripts/instances/dungeons/CuttersCry.cpp | 65 +++ .../Scripts/instances/dungeons/DomaCastle.cpp | 25 + .../instances/dungeons/DzemaelDarkhold.cpp | 125 ++++ .../Scripts/instances/dungeons/Halatali.cpp | 76 +++ .../instances/dungeons/HalataliHard.cpp | 81 +++ .../instances/dungeons/HaukkeManor.cpp | 69 +++ .../instances/dungeons/HaukkeManorHard.cpp | 95 +++ .../Scripts/instances/dungeons/HellsLid.cpp | 25 + .../instances/dungeons/HullbreakerIsle.cpp | 93 +++ .../dungeons/HullbreakerIsleHard.cpp | 56 ++ .../instances/dungeons/KuganeCastle.cpp | 25 + .../Scripts/instances/dungeons/Neverreap.cpp | 25 + .../instances/dungeons/PharosSirius.cpp | 60 ++ .../instances/dungeons/PharosSiriusHard.cpp | 57 ++ .../dungeons/SaintMociannesArboretum.cpp | 25 + .../Scripts/instances/dungeons/Sastasha.cpp | 77 +++ .../instances/dungeons/SastashaHard.cpp | 65 +++ .../dungeons/ShisuioftheVioletTides.cpp | 25 + .../Scripts/instances/dungeons/Snowcloak.cpp | 71 +++ .../Scripts/instances/dungeons/SohmAl.cpp | 25 + .../Scripts/instances/dungeons/SohmAlHard.cpp | 25 + .../Scripts/instances/dungeons/SohrKhai.cpp | 25 + .../Scripts/instances/dungeons/TheAery.cpp | 25 + .../TheAetherochemicalResearchFacility.cpp | 25 + .../instances/dungeons/TheAntitower.cpp | 25 + .../instances/dungeons/TheAurumVale.cpp | 47 ++ .../dungeons/TheDrownedCityofSkalla.cpp | 25 + .../instances/dungeons/TheDuskVigil.cpp | 25 + .../dungeons/TheFractalContinuum.cpp | 25 + .../dungeons/TheFractalContinuumHard.cpp | 25 + .../dungeons/TheGreatGubalLibrary.cpp | 25 + .../dungeons/TheGreatGubalLibraryHard.cpp | 25 + .../instances/dungeons/TheKeeperoftheLake.cpp | 60 ++ .../dungeons/TheLostCityofAmdapor.cpp | 80 +++ .../dungeons/TheLostCityofAmdaporHard.cpp | 71 +++ .../instances/dungeons/ThePraetorium.cpp | 141 +++++ .../instances/dungeons/TheSirensongSea.cpp | 25 + .../instances/dungeons/TheStoneVigil.cpp | 62 ++ .../instances/dungeons/TheStoneVigilHard.cpp | 55 ++ .../dungeons/TheSunkenTempleofQarn.cpp | 88 +++ .../dungeons/TheSunkenTempleofQarnHard.cpp | 79 +++ .../dungeons/TheTamTaraDeepcroft.cpp | 56 ++ .../dungeons/TheTamTaraDeepcroftHard.cpp | 103 ++++ .../instances/dungeons/TheTempleoftheFist.cpp | 25 + .../dungeons/TheThousandMawsofTotoRak.cpp | 78 +++ .../Scripts/instances/dungeons/TheVault.cpp | 25 + .../instances/dungeons/TheWanderersPalace.cpp | 79 +++ .../dungeons/TheWanderersPalaceHard.cpp | 60 ++ .../Scripts/instances/dungeons/Xelphatol.cpp | 25 + .../instances/events/TheHauntedManor.cpp | 42 ++ .../events/TheValentionesCeremony.cpp | 70 +++ .../guildhests/AllsWellthatEndsintheWell.cpp | 28 + .../instances/guildhests/AnnoytheVoid.cpp | 25 + .../guildhests/BasicTrainingEnemyParties.cpp | 25 + .../BasicTrainingEnemyStrongholds.cpp | 29 + .../FlickingSticksandTakingNames.cpp | 26 + .../guildhests/HeroontheHalfShell.cpp | 25 + .../instances/guildhests/LongLivetheQueen.cpp | 42 ++ .../instances/guildhests/MorethanaFeeler.cpp | 25 + .../guildhests/PullingPoisonPosies.cpp | 25 + .../instances/guildhests/ShadowandClaw.cpp | 42 ++ .../instances/guildhests/SolemnTrinity.cpp | 25 + .../instances/guildhests/StingingBack.cpp | 28 + .../instances/guildhests/UndertheArmor.cpp | 26 + .../Scripts/instances/guildhests/WardUp.cpp | 25 + .../AccrueEnmityfromMultipleTargets.cpp | 35 ++ .../AssistAlliesinDefeatingaTarget.cpp | 35 ++ .../AvoidAreaofEffectAttacks.cpp | 35 ++ .../hallofthenovice/AvoidEngagedTargets.cpp | 35 ++ .../DefeatanOccupiedTarget.cpp | 35 ++ .../EngageEnemyReinforcements.cpp | 35 ++ .../hallofthenovice/EngageMultipleTargets.cpp | 35 ++ .../hallofthenovice/ExecuteaComboinBattle.cpp | 35 ++ .../ExecuteaCombotoIncreaseEnmity.cpp | 35 ++ .../ExecuteaRangedAttacktoIncreaseEnmity.cpp | 35 ++ .../hallofthenovice/FinalExercise.cpp | 28 + .../hallofthenovice/HealMultipleAllies.cpp | 35 ++ .../instances/hallofthenovice/HealanAlly.cpp | 35 ++ .../InteractwiththeBattlefield.cpp | 35 ++ .../Scripts/instances/pvp/Astragalos.cpp | 39 ++ .../Scripts/instances/pvp/SealRockSeize.cpp | 25 + .../pvp/TheBorderlandRuinsSecure.cpp | 50 ++ .../instances/pvp/TheFeast4on4LightParty.cpp | 29 + .../instances/pvp/TheFeast4on4Ranked.cpp | 27 + .../instances/pvp/TheFeast4on4Training.cpp | 27 + .../pvp/TheFeastCustomMatchCrystalTower.cpp | 31 + .../TheFeastCustomMatchFeastingGrounds.cpp | 29 + .../pvp/TheFeastCustomMatchLichenweed.cpp | 27 + .../Scripts/instances/pvp/TheFeastRanked.cpp | 31 + .../instances/pvp/TheFeastTeamRanked.cpp | 31 + .../instances/pvp/TheFeastTraining.cpp | 31 + .../instances/pvp/TheFieldsofGloryShatter.cpp | 25 + .../instances/questbattles/ABloodyReunion.cpp | 25 + .../questbattles/ASpectaclefortheAges.cpp | 42 ++ .../instances/questbattles/BloodDragoon.cpp | 25 + .../instances/questbattles/BloodontheDeck.cpp | 27 + .../CuriousGorgeMeetsHisMatch.cpp | 28 + .../instances/questbattles/DarkwingDragon.cpp | 25 + .../instances/questbattles/InThalsName.cpp | 27 + .../questbattles/InterdimensionalRift.cpp | 25 + .../questbattles/ItsProbablyaTrap.cpp | 25 + .../instances/questbattles/MatsubaMayhem.cpp | 25 + .../Scripts/instances/questbattles/Naadam.cpp | 25 + .../questbattles/OneLifeforOneWorld.cpp | 30 + .../instances/questbattles/OurCompromise.cpp | 25 + .../questbattles/OurUnsungHeroes.cpp | 71 +++ .../questbattles/RaisingtheSword.cpp | 27 + .../questbattles/ReturnoftheBull.cpp | 25 + .../questbattles/TheBattleonBekko.cpp | 25 + .../TheCarteneauFlatsHeliodrome.cpp | 50 ++ .../questbattles/TheFaceofTrueEvil.cpp | 25 + .../questbattles/TheHeartoftheProblem.cpp | 25 + .../TheOrphansandtheBrokenBlade.cpp | 25 + .../instances/questbattles/TheResonant.cpp | 25 + .../questbattles/WhenClansCollide.cpp | 25 + .../questbattles/WithHeartandSteel.cpp | 25 + .../raids/AlexanderTheArmoftheFather.cpp | 25 + .../AlexanderTheArmoftheFatherSavage.cpp | 25 + .../raids/AlexanderTheArmoftheSon.cpp | 25 + .../raids/AlexanderTheArmoftheSonSavage.cpp | 25 + .../raids/AlexanderTheBreathoftheCreator.cpp | 25 + .../AlexanderTheBreathoftheCreatorSavage.cpp | 25 + .../raids/AlexanderTheBurdenoftheFather.cpp | 25 + .../AlexanderTheBurdenoftheFatherSavage.cpp | 25 + .../raids/AlexanderTheBurdenoftheSon.cpp | 25 + .../AlexanderTheBurdenoftheSonSavage.cpp | 25 + .../raids/AlexanderTheCuffoftheFather.cpp | 25 + .../AlexanderTheCuffoftheFatherSavage.cpp | 25 + .../raids/AlexanderTheCuffoftheSon.cpp | 25 + .../raids/AlexanderTheCuffoftheSonSavage.cpp | 25 + .../raids/AlexanderTheEyesoftheCreator.cpp | 25 + .../AlexanderTheEyesoftheCreatorSavage.cpp | 25 + .../raids/AlexanderTheFistoftheFather.cpp | 25 + .../AlexanderTheFistoftheFatherSavage.cpp | 25 + .../raids/AlexanderTheFistoftheSon.cpp | 25 + .../raids/AlexanderTheFistoftheSonSavage.cpp | 25 + .../raids/AlexanderTheHeartoftheCreator.cpp | 25 + .../AlexanderTheHeartoftheCreatorSavage.cpp | 25 + .../raids/AlexanderTheSouloftheCreator.cpp | 25 + .../AlexanderTheSouloftheCreatorSavage.cpp | 25 + .../Scripts/instances/raids/DeltascapeV10.cpp | 25 + .../instances/raids/DeltascapeV10Savage.cpp | 25 + .../Scripts/instances/raids/DeltascapeV20.cpp | 25 + .../instances/raids/DeltascapeV20Savage.cpp | 25 + .../Scripts/instances/raids/DeltascapeV30.cpp | 25 + .../instances/raids/DeltascapeV30Savage.cpp | 25 + .../Scripts/instances/raids/DeltascapeV40.cpp | 25 + .../instances/raids/DeltascapeV40Savage.cpp | 25 + .../Scripts/instances/raids/DunScaith.cpp | 25 + .../Scripts/instances/raids/SigmascapeV10.cpp | 25 + .../instances/raids/SigmascapeV10Savage.cpp | 25 + .../Scripts/instances/raids/SigmascapeV20.cpp | 25 + .../instances/raids/SigmascapeV20Savage.cpp | 25 + .../Scripts/instances/raids/SigmascapeV30.cpp | 25 + .../instances/raids/SigmascapeV30Savage.cpp | 25 + .../Scripts/instances/raids/SigmascapeV40.cpp | 25 + .../instances/raids/SigmascapeV40Savage.cpp | 25 + .../Scripts/instances/raids/SyrcusTower.cpp | 93 +++ .../raids/TheBindingCoilofBahamutTurn1.cpp | 62 ++ .../raids/TheBindingCoilofBahamutTurn2.cpp | 63 ++ .../raids/TheBindingCoilofBahamutTurn3.cpp | 73 +++ .../raids/TheBindingCoilofBahamutTurn4.cpp | 42 ++ .../raids/TheBindingCoilofBahamutTurn5.cpp | 35 ++ .../raids/TheFinalCoilofBahamutTurn1.cpp | 50 ++ .../raids/TheFinalCoilofBahamutTurn2.cpp | 60 ++ .../raids/TheFinalCoilofBahamutTurn3.cpp | 33 ++ .../raids/TheFinalCoilofBahamutTurn4.cpp | 33 ++ .../raids/TheLabyrinthoftheAncients.cpp | 106 ++++ .../raids/TheRoyalCityofRabanastre.cpp | 25 + .../TheSecondCoilofBahamutSavageTurn1.cpp | 41 ++ .../TheSecondCoilofBahamutSavageTurn2.cpp | 41 ++ .../TheSecondCoilofBahamutSavageTurn3.cpp | 104 ++++ .../TheSecondCoilofBahamutSavageTurn4.cpp | 40 ++ .../raids/TheSecondCoilofBahamutTurn1.cpp | 41 ++ .../raids/TheSecondCoilofBahamutTurn2.cpp | 41 ++ .../raids/TheSecondCoilofBahamutTurn3.cpp | 104 ++++ .../raids/TheSecondCoilofBahamutTurn4.cpp | 40 ++ .../TheUnendingCoilofBahamutUltimate.cpp | 34 ++ .../Scripts/instances/raids/TheVoidArk.cpp | 25 + .../instances/raids/TheWeepingCityofMhach.cpp | 25 + .../instances/raids/TheWorldofDarkness.cpp | 142 +++++ .../instances/treasurehunt/TheAquapolis.cpp | 127 ++++ .../treasurehunt/TheHiddenCanalsofUznair.cpp | 25 + .../treasurehunt/TheLostCanalsofUznair.cpp | 25 + .../trials/ARelicReborntheChimera.cpp | 42 ++ .../instances/trials/ARelicReborntheHydra.cpp | 76 +++ .../trials/AkhAfahAmphitheatreExtreme.cpp | 39 ++ .../trials/AkhAfahAmphitheatreHard.cpp | 39 ++ .../instances/trials/BattleintheBigKeep.cpp | 148 +++++ .../instances/trials/BattleontheBigBridge.cpp | 37 ++ .../Scripts/instances/trials/CapeWestwind.cpp | 29 + .../instances/trials/ContainmentBayP1T6.cpp | 25 + .../trials/ContainmentBayP1T6Extreme.cpp | 25 + .../instances/trials/ContainmentBayS1T7.cpp | 25 + .../trials/ContainmentBayS1T7Extreme.cpp | 25 + .../instances/trials/ContainmentBayZ1T9.cpp | 25 + .../trials/ContainmentBayZ1T9Extreme.cpp | 25 + .../Scripts/instances/trials/Emanation.cpp | 25 + .../instances/trials/EmanationExtreme.cpp | 25 + .../instances/trials/SpecialEventI.cpp | 28 + .../instances/trials/SpecialEventII.cpp | 25 + .../instances/trials/SpecialEventIII.cpp | 25 + .../instances/trials/TheBowlofEmbers.cpp | 30 + .../trials/TheBowlofEmbersExtreme.cpp | 30 + .../instances/trials/TheBowlofEmbersHard.cpp | 30 + .../Scripts/instances/trials/TheChrysalis.cpp | 58 ++ .../instances/trials/TheDragonsNeck.cpp | 81 +++ .../instances/trials/TheFinalStepsofFaith.cpp | 31 + .../instances/trials/TheHowlingEye.cpp | 36 ++ .../instances/trials/TheHowlingEyeExtreme.cpp | 36 ++ .../instances/trials/TheHowlingEyeHard.cpp | 36 ++ .../Scripts/instances/trials/TheJadeStoa.cpp | 25 + .../instances/trials/TheJadeStoaExtreme.cpp | 25 + .../trials/TheLimitlessBlueExtreme.cpp | 25 + .../instances/trials/TheLimitlessBlueHard.cpp | 25 + .../trials/TheMinstrelsBalladNidhoggsRage.cpp | 31 + .../TheMinstrelsBalladShinryusDomain.cpp | 25 + .../TheMinstrelsBalladThordansReign.cpp | 25 + .../trials/TheMinstrelsBalladUltimasBane.cpp | 34 ++ .../Scripts/instances/trials/TheNavel.cpp | 28 + .../instances/trials/TheNavelExtreme.cpp | 28 + .../Scripts/instances/trials/TheNavelHard.cpp | 28 + .../instances/trials/ThePoolofTribute.cpp | 25 + .../trials/ThePoolofTributeExtreme.cpp | 25 + .../instances/trials/TheRoyalMenagerie.cpp | 25 + .../trials/TheSingularityReactor.cpp | 25 + .../instances/trials/TheStepsofFaith.cpp | 52 ++ .../trials/TheStrikingTreeExtreme.cpp | 28 + .../instances/trials/TheStrikingTreeHard.cpp | 28 + .../instances/trials/TheWhorleaterExtreme.cpp | 33 ++ .../instances/trials/TheWhorleaterHard.cpp | 33 ++ .../instances/trials/ThokastThokExtreme.cpp | 25 + .../instances/trials/ThokastThokHard.cpp | 25 + .../instances/trials/ThornmarchExtreme.cpp | 28 + .../instances/trials/ThornmarchHard.cpp | 28 + .../Scripts/instances/trials/UrthsFount.cpp | 28 + .../Scripts/opening/OpeningGridania.cpp | 92 +++ src/servers/Scripts/opening/OpeningLimsa.cpp | 100 ++++ src/servers/Scripts/opening/OpeningUldah.cpp | 93 +++ src/servers/Scripts/opening/ScriptLoader.cpp | 19 + src/servers/Scripts/quest/ManFst001.cpp | 107 ++++ src/servers/Scripts/quest/ManFst002.cpp | 225 +++++++ src/servers/Scripts/quest/ManFst003.cpp | 24 + src/servers/Scripts/quest/ManFst004.cpp | 255 ++++++++ src/servers/Scripts/quest/ManSea001.cpp | 162 ++++++ src/servers/Scripts/quest/ManSea002.cpp | 152 +++++ src/servers/Scripts/quest/ManWil001.cpp | 145 +++++ src/servers/Scripts/quest/ManWil002.cpp | 159 +++++ src/servers/Scripts/quest/ScriptLoader.cpp | 37 ++ .../quest/subquest/gridania/SubFst001.cpp | 87 +++ .../quest/subquest/gridania/SubFst002.cpp | 79 +++ .../quest/subquest/gridania/SubFst010.cpp | 59 ++ .../quest/subquest/gridania/SubFst013.cpp | 187 ++++++ src/servers/sapphire_zone/CMakeLists.txt | 3 - 299 files changed, 13331 insertions(+), 3 deletions(-) create mode 100644 src/servers/Scripts/CMakeLists.txt create mode 100644 src/servers/Scripts/ScriptLoader.cpp.in create mode 100644 src/servers/Scripts/ScriptObject.h create mode 100644 src/servers/Scripts/action/ActionSprint3.cpp create mode 100644 src/servers/Scripts/action/ScriptLoader.cpp create mode 100644 src/servers/Scripts/common/Aethernet.cpp create mode 100644 src/servers/Scripts/common/Aetheryte.cpp create mode 100644 src/servers/Scripts/common/CmnDefCutSceneReplay.cpp create mode 100644 src/servers/Scripts/common/CmnDefInnBed.cpp create mode 100644 src/servers/Scripts/common/CmnDefLinkShell.cpp create mode 100644 src/servers/Scripts/common/HouFurOrchestrion.cpp create mode 100644 src/servers/Scripts/common/ScriptLoader.cpp create mode 100644 src/servers/Scripts/instances/ScriptLoader.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors101110.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors110.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors111120.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors1120.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors121130.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors131140.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors141150.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors151160.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors161170.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors171180.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors181190.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors191200.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors2130.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors3140.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors4150.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors5160.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors6170.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors7180.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors8190.cpp create mode 100644 src/servers/Scripts/instances/deepdungeon/ThePalaceoftheDeadFloors91100.cpp create mode 100644 src/servers/Scripts/instances/dungeons/AlaMhigo.cpp create mode 100644 src/servers/Scripts/instances/dungeons/AmdaporKeep.cpp create mode 100644 src/servers/Scripts/instances/dungeons/AmdaporKeepHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/BaelsarsWall.cpp create mode 100644 src/servers/Scripts/instances/dungeons/BardamsMettle.cpp create mode 100644 src/servers/Scripts/instances/dungeons/BrayfloxsLongstop.cpp create mode 100644 src/servers/Scripts/instances/dungeons/BrayfloxsLongstopHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/CastrumAbania.cpp create mode 100644 src/servers/Scripts/instances/dungeons/CastrumMeridianum.cpp create mode 100644 src/servers/Scripts/instances/dungeons/CopperbellMines.cpp create mode 100644 src/servers/Scripts/instances/dungeons/CopperbellMinesHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/CuttersCry.cpp create mode 100644 src/servers/Scripts/instances/dungeons/DomaCastle.cpp create mode 100644 src/servers/Scripts/instances/dungeons/DzemaelDarkhold.cpp create mode 100644 src/servers/Scripts/instances/dungeons/Halatali.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HalataliHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HaukkeManor.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HaukkeManorHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HellsLid.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HullbreakerIsle.cpp create mode 100644 src/servers/Scripts/instances/dungeons/HullbreakerIsleHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/KuganeCastle.cpp create mode 100644 src/servers/Scripts/instances/dungeons/Neverreap.cpp create mode 100644 src/servers/Scripts/instances/dungeons/PharosSirius.cpp create mode 100644 src/servers/Scripts/instances/dungeons/PharosSiriusHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/SaintMociannesArboretum.cpp create mode 100644 src/servers/Scripts/instances/dungeons/Sastasha.cpp create mode 100644 src/servers/Scripts/instances/dungeons/SastashaHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/ShisuioftheVioletTides.cpp create mode 100644 src/servers/Scripts/instances/dungeons/Snowcloak.cpp create mode 100644 src/servers/Scripts/instances/dungeons/SohmAl.cpp create mode 100644 src/servers/Scripts/instances/dungeons/SohmAlHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/SohrKhai.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheAery.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheAetherochemicalResearchFacility.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheAntitower.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheAurumVale.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheDrownedCityofSkalla.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheDuskVigil.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheFractalContinuum.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheFractalContinuumHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheGreatGubalLibrary.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheGreatGubalLibraryHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheKeeperoftheLake.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheLostCityofAmdapor.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheLostCityofAmdaporHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/ThePraetorium.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheSirensongSea.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheStoneVigil.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheStoneVigilHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheSunkenTempleofQarn.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheSunkenTempleofQarnHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheTamTaraDeepcroft.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheTamTaraDeepcroftHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheTempleoftheFist.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheThousandMawsofTotoRak.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheVault.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheWanderersPalace.cpp create mode 100644 src/servers/Scripts/instances/dungeons/TheWanderersPalaceHard.cpp create mode 100644 src/servers/Scripts/instances/dungeons/Xelphatol.cpp create mode 100644 src/servers/Scripts/instances/events/TheHauntedManor.cpp create mode 100644 src/servers/Scripts/instances/events/TheValentionesCeremony.cpp create mode 100644 src/servers/Scripts/instances/guildhests/AllsWellthatEndsintheWell.cpp create mode 100644 src/servers/Scripts/instances/guildhests/AnnoytheVoid.cpp create mode 100644 src/servers/Scripts/instances/guildhests/BasicTrainingEnemyParties.cpp create mode 100644 src/servers/Scripts/instances/guildhests/BasicTrainingEnemyStrongholds.cpp create mode 100644 src/servers/Scripts/instances/guildhests/FlickingSticksandTakingNames.cpp create mode 100644 src/servers/Scripts/instances/guildhests/HeroontheHalfShell.cpp create mode 100644 src/servers/Scripts/instances/guildhests/LongLivetheQueen.cpp create mode 100644 src/servers/Scripts/instances/guildhests/MorethanaFeeler.cpp create mode 100644 src/servers/Scripts/instances/guildhests/PullingPoisonPosies.cpp create mode 100644 src/servers/Scripts/instances/guildhests/ShadowandClaw.cpp create mode 100644 src/servers/Scripts/instances/guildhests/SolemnTrinity.cpp create mode 100644 src/servers/Scripts/instances/guildhests/StingingBack.cpp create mode 100644 src/servers/Scripts/instances/guildhests/UndertheArmor.cpp create mode 100644 src/servers/Scripts/instances/guildhests/WardUp.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/AccrueEnmityfromMultipleTargets.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/AssistAlliesinDefeatingaTarget.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/AvoidAreaofEffectAttacks.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/AvoidEngagedTargets.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/DefeatanOccupiedTarget.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/EngageEnemyReinforcements.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/EngageMultipleTargets.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/ExecuteaComboinBattle.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/ExecuteaCombotoIncreaseEnmity.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/ExecuteaRangedAttacktoIncreaseEnmity.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/FinalExercise.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/HealMultipleAllies.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/HealanAlly.cpp create mode 100644 src/servers/Scripts/instances/hallofthenovice/InteractwiththeBattlefield.cpp create mode 100644 src/servers/Scripts/instances/pvp/Astragalos.cpp create mode 100644 src/servers/Scripts/instances/pvp/SealRockSeize.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheBorderlandRuinsSecure.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeast4on4LightParty.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeast4on4Ranked.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeast4on4Training.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastCustomMatchCrystalTower.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastCustomMatchFeastingGrounds.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastCustomMatchLichenweed.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastRanked.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastTeamRanked.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFeastTraining.cpp create mode 100644 src/servers/Scripts/instances/pvp/TheFieldsofGloryShatter.cpp create mode 100644 src/servers/Scripts/instances/questbattles/ABloodyReunion.cpp create mode 100644 src/servers/Scripts/instances/questbattles/ASpectaclefortheAges.cpp create mode 100644 src/servers/Scripts/instances/questbattles/BloodDragoon.cpp create mode 100644 src/servers/Scripts/instances/questbattles/BloodontheDeck.cpp create mode 100644 src/servers/Scripts/instances/questbattles/CuriousGorgeMeetsHisMatch.cpp create mode 100644 src/servers/Scripts/instances/questbattles/DarkwingDragon.cpp create mode 100644 src/servers/Scripts/instances/questbattles/InThalsName.cpp create mode 100644 src/servers/Scripts/instances/questbattles/InterdimensionalRift.cpp create mode 100644 src/servers/Scripts/instances/questbattles/ItsProbablyaTrap.cpp create mode 100644 src/servers/Scripts/instances/questbattles/MatsubaMayhem.cpp create mode 100644 src/servers/Scripts/instances/questbattles/Naadam.cpp create mode 100644 src/servers/Scripts/instances/questbattles/OneLifeforOneWorld.cpp create mode 100644 src/servers/Scripts/instances/questbattles/OurCompromise.cpp create mode 100644 src/servers/Scripts/instances/questbattles/OurUnsungHeroes.cpp create mode 100644 src/servers/Scripts/instances/questbattles/RaisingtheSword.cpp create mode 100644 src/servers/Scripts/instances/questbattles/ReturnoftheBull.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheBattleonBekko.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheCarteneauFlatsHeliodrome.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheFaceofTrueEvil.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheHeartoftheProblem.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheOrphansandtheBrokenBlade.cpp create mode 100644 src/servers/Scripts/instances/questbattles/TheResonant.cpp create mode 100644 src/servers/Scripts/instances/questbattles/WhenClansCollide.cpp create mode 100644 src/servers/Scripts/instances/questbattles/WithHeartandSteel.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheArmoftheFather.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheArmoftheFatherSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheArmoftheSon.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheArmoftheSonSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBreathoftheCreator.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBreathoftheCreatorSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBurdenoftheFather.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBurdenoftheFatherSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBurdenoftheSon.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheBurdenoftheSonSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheCuffoftheFather.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheCuffoftheFatherSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheCuffoftheSon.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheCuffoftheSonSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheEyesoftheCreator.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheEyesoftheCreatorSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheFistoftheFather.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheFistoftheFatherSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheFistoftheSon.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheFistoftheSonSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheHeartoftheCreator.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheHeartoftheCreatorSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheSouloftheCreator.cpp create mode 100644 src/servers/Scripts/instances/raids/AlexanderTheSouloftheCreatorSavage.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV10.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV10Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV20.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV20Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV30.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV30Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV40.cpp create mode 100644 src/servers/Scripts/instances/raids/DeltascapeV40Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/DunScaith.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV10.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV10Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV20.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV20Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV30.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV30Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV40.cpp create mode 100644 src/servers/Scripts/instances/raids/SigmascapeV40Savage.cpp create mode 100644 src/servers/Scripts/instances/raids/SyrcusTower.cpp create mode 100644 src/servers/Scripts/instances/raids/TheBindingCoilofBahamutTurn1.cpp create mode 100644 src/servers/Scripts/instances/raids/TheBindingCoilofBahamutTurn2.cpp create mode 100644 src/servers/Scripts/instances/raids/TheBindingCoilofBahamutTurn3.cpp create mode 100644 src/servers/Scripts/instances/raids/TheBindingCoilofBahamutTurn4.cpp create mode 100644 src/servers/Scripts/instances/raids/TheBindingCoilofBahamutTurn5.cpp create mode 100644 src/servers/Scripts/instances/raids/TheFinalCoilofBahamutTurn1.cpp create mode 100644 src/servers/Scripts/instances/raids/TheFinalCoilofBahamutTurn2.cpp create mode 100644 src/servers/Scripts/instances/raids/TheFinalCoilofBahamutTurn3.cpp create mode 100644 src/servers/Scripts/instances/raids/TheFinalCoilofBahamutTurn4.cpp create mode 100644 src/servers/Scripts/instances/raids/TheLabyrinthoftheAncients.cpp create mode 100644 src/servers/Scripts/instances/raids/TheRoyalCityofRabanastre.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutSavageTurn1.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutSavageTurn2.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutSavageTurn3.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutSavageTurn4.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutTurn1.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutTurn2.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutTurn3.cpp create mode 100644 src/servers/Scripts/instances/raids/TheSecondCoilofBahamutTurn4.cpp create mode 100644 src/servers/Scripts/instances/raids/TheUnendingCoilofBahamutUltimate.cpp create mode 100644 src/servers/Scripts/instances/raids/TheVoidArk.cpp create mode 100644 src/servers/Scripts/instances/raids/TheWeepingCityofMhach.cpp create mode 100644 src/servers/Scripts/instances/raids/TheWorldofDarkness.cpp create mode 100644 src/servers/Scripts/instances/treasurehunt/TheAquapolis.cpp create mode 100644 src/servers/Scripts/instances/treasurehunt/TheHiddenCanalsofUznair.cpp create mode 100644 src/servers/Scripts/instances/treasurehunt/TheLostCanalsofUznair.cpp create mode 100644 src/servers/Scripts/instances/trials/ARelicReborntheChimera.cpp create mode 100644 src/servers/Scripts/instances/trials/ARelicReborntheHydra.cpp create mode 100644 src/servers/Scripts/instances/trials/AkhAfahAmphitheatreExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/AkhAfahAmphitheatreHard.cpp create mode 100644 src/servers/Scripts/instances/trials/BattleintheBigKeep.cpp create mode 100644 src/servers/Scripts/instances/trials/BattleontheBigBridge.cpp create mode 100644 src/servers/Scripts/instances/trials/CapeWestwind.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayP1T6.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayP1T6Extreme.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayS1T7.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayS1T7Extreme.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayZ1T9.cpp create mode 100644 src/servers/Scripts/instances/trials/ContainmentBayZ1T9Extreme.cpp create mode 100644 src/servers/Scripts/instances/trials/Emanation.cpp create mode 100644 src/servers/Scripts/instances/trials/EmanationExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/SpecialEventI.cpp create mode 100644 src/servers/Scripts/instances/trials/SpecialEventII.cpp create mode 100644 src/servers/Scripts/instances/trials/SpecialEventIII.cpp create mode 100644 src/servers/Scripts/instances/trials/TheBowlofEmbers.cpp create mode 100644 src/servers/Scripts/instances/trials/TheBowlofEmbersExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheBowlofEmbersHard.cpp create mode 100644 src/servers/Scripts/instances/trials/TheChrysalis.cpp create mode 100644 src/servers/Scripts/instances/trials/TheDragonsNeck.cpp create mode 100644 src/servers/Scripts/instances/trials/TheFinalStepsofFaith.cpp create mode 100644 src/servers/Scripts/instances/trials/TheHowlingEye.cpp create mode 100644 src/servers/Scripts/instances/trials/TheHowlingEyeExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheHowlingEyeHard.cpp create mode 100644 src/servers/Scripts/instances/trials/TheJadeStoa.cpp create mode 100644 src/servers/Scripts/instances/trials/TheJadeStoaExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheLimitlessBlueExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheLimitlessBlueHard.cpp create mode 100644 src/servers/Scripts/instances/trials/TheMinstrelsBalladNidhoggsRage.cpp create mode 100644 src/servers/Scripts/instances/trials/TheMinstrelsBalladShinryusDomain.cpp create mode 100644 src/servers/Scripts/instances/trials/TheMinstrelsBalladThordansReign.cpp create mode 100644 src/servers/Scripts/instances/trials/TheMinstrelsBalladUltimasBane.cpp create mode 100644 src/servers/Scripts/instances/trials/TheNavel.cpp create mode 100644 src/servers/Scripts/instances/trials/TheNavelExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheNavelHard.cpp create mode 100644 src/servers/Scripts/instances/trials/ThePoolofTribute.cpp create mode 100644 src/servers/Scripts/instances/trials/ThePoolofTributeExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheRoyalMenagerie.cpp create mode 100644 src/servers/Scripts/instances/trials/TheSingularityReactor.cpp create mode 100644 src/servers/Scripts/instances/trials/TheStepsofFaith.cpp create mode 100644 src/servers/Scripts/instances/trials/TheStrikingTreeExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheStrikingTreeHard.cpp create mode 100644 src/servers/Scripts/instances/trials/TheWhorleaterExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/TheWhorleaterHard.cpp create mode 100644 src/servers/Scripts/instances/trials/ThokastThokExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/ThokastThokHard.cpp create mode 100644 src/servers/Scripts/instances/trials/ThornmarchExtreme.cpp create mode 100644 src/servers/Scripts/instances/trials/ThornmarchHard.cpp create mode 100644 src/servers/Scripts/instances/trials/UrthsFount.cpp create mode 100644 src/servers/Scripts/opening/OpeningGridania.cpp create mode 100644 src/servers/Scripts/opening/OpeningLimsa.cpp create mode 100644 src/servers/Scripts/opening/OpeningUldah.cpp create mode 100644 src/servers/Scripts/opening/ScriptLoader.cpp create mode 100644 src/servers/Scripts/quest/ManFst001.cpp create mode 100644 src/servers/Scripts/quest/ManFst002.cpp create mode 100644 src/servers/Scripts/quest/ManFst003.cpp create mode 100644 src/servers/Scripts/quest/ManFst004.cpp create mode 100644 src/servers/Scripts/quest/ManSea001.cpp create mode 100644 src/servers/Scripts/quest/ManSea002.cpp create mode 100644 src/servers/Scripts/quest/ManWil001.cpp create mode 100644 src/servers/Scripts/quest/ManWil002.cpp create mode 100644 src/servers/Scripts/quest/ScriptLoader.cpp create mode 100644 src/servers/Scripts/quest/subquest/gridania/SubFst001.cpp create mode 100644 src/servers/Scripts/quest/subquest/gridania/SubFst002.cpp create mode 100644 src/servers/Scripts/quest/subquest/gridania/SubFst010.cpp create mode 100644 src/servers/Scripts/quest/subquest/gridania/SubFst013.cpp diff --git a/src/servers/CMakeLists.txt b/src/servers/CMakeLists.txt index 82613bd6..28e43594 100644 --- a/src/servers/CMakeLists.txt +++ b/src/servers/CMakeLists.txt @@ -12,3 +12,4 @@ include_directories("${PROJECT_SOURCE_DIR}") add_subdirectory(${PROJECT_SOURCE_DIR}/sapphire_lobby) add_subdirectory(${PROJECT_SOURCE_DIR}/sapphire_api) add_subdirectory(${PROJECT_SOURCE_DIR}/sapphire_zone) +add_subdirectory(${PROJECT_SOURCE_DIR}/Scripts) diff --git a/src/servers/Scripts/CMakeLists.txt b/src/servers/Scripts/CMakeLists.txt new file mode 100644 index 00000000..2647b366 --- /dev/null +++ b/src/servers/Scripts/CMakeLists.txt @@ -0,0 +1,81 @@ +cmake_minimum_required(VERSION 3.0) +project(Sapphire_Script) + +file(GLOB SCRIPT_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h") + +include_directories("${CMAKE_SOURCE_DIR}/src/servers/") + +message("exec: ${EXECUTABLE_OUTPUT_DIRECTORY}") + +set(SCRIPT_LIB_DIR "${EXECUTABLE_OUTPUT_DIRECTORY}/compiledscripts/" ) +set(EXECUTABLE_OUTPUT_PATH "${SCRIPT_LIB_DIR}") +set(LIBRARY_OUTPUT_PATH "${SCRIPT_LIB_DIR}") +set(RUNTIME_OUTPUT_DIRECTORY "${SCRIPT_LIB_DIR}") + + +file(GLOB children "${CMAKE_CURRENT_SOURCE_DIR}/*" ) +foreach(_scriptDir ${children}) + get_filename_component(_name "${_scriptDir}" NAME_WE) + if(IS_DIRECTORY ${_scriptDir} AND NOT ${_name} MATCHES "CMakeFiles") + message("discovered plugin lib: ${_scriptDir} (${_name})") + + file(GLOB_RECURSE SCRIPT_BUILD_FILES "${_scriptDir}/*.cpp") + file(GLOB_RECURSE SCRIPT_FILES RELATIVE "${_scriptDir}" "${_name}/*.cpp") + + # build file list + foreach(_script ${SCRIPT_FILES}) + get_filename_component( _scriptname "${_script}" NAME_WE) + + if(NOT ${_scriptname} MATCHES "ScriptLoader") + if(ScriptIncludes) + set(ScriptIncludes "${ScriptIncludes}\n#include \"${_script}\"") + else() + set(ScriptIncludes "#include \"${_script}\"") + endif() + + set(ScriptNames "${ScriptNames} static_cast< ScriptObject* >( new ${_scriptname} ),\n") + endif() + endforeach() + + add_library("script_${_name}" MODULE ${SCRIPT_BUILD_FILES} "${SCRIPT_INCLUDE_FILES}" "${_scriptDir}/ScriptLoader.cpp") + target_link_libraries("script_${_name}" sapphire_zone) + + if(MSVC) + target_link_libraries("script_${_name}" ${Boost_LIBRARIES}) + endif() + + if(MSVC) + set_target_properties("script_${_name}" PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS ON + LIBRARY_OUTPUT_DIRECTORY_DEBUG "${SCRIPT_LIB_DIR}" + LIBRARY_OUTPUT_DIRECTORY_RELEASE "${SCRIPT_LIB_DIR}" + LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${SCRIPT_LIB_DIR}" + LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${SCRIPT_LIB_DIR}" + ) + endif() + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/Script") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/Script/Scripts") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/common") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Scripts") + + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ScriptLoader.cpp.in" "${_scriptDir}/ScriptLoader.cpp") + + cotire("script_${_name}") + + if(MSVC) + add_custom_command(TARGET "script_${_name}" POST_BUILD + COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.exp" + COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.lib" + COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.ilk" + ) + endif() + + unset(ScriptIncludes) + unset(ScriptNames) + endif() +endforeach() diff --git a/src/servers/Scripts/ScriptLoader.cpp.in b/src/servers/Scripts/ScriptLoader.cpp.in new file mode 100644 index 00000000..739b32af --- /dev/null +++ b/src/servers/Scripts/ScriptLoader.cpp.in @@ -0,0 +1,14 @@ +#include