diff --git a/src/common/Common.h b/src/common/Common.h index f553dc79..837bb249 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -67,11 +67,20 @@ namespace Sapphire::Common French = 8 }; - enum TellFlags : uint8_t + enum ChatFromType : uint8_t { GmTellMsg = 0x4, }; + enum ChatChannelType : uint16_t + { + CWLinkshellChat = 0x0, + PartyChat = 0x1, + LinkshellChat = 0x2, + FreeCompanyChat = 0x3, + NoviceNetworkChat = 0x4 + }; + enum BNpcType : uint8_t { Friendly = 0, @@ -801,6 +810,22 @@ namespace Sapphire::Common InvincibilityIgnoreDamage, }; + enum InviteReplyType : int32_t + { + DENY = 0x0, + ACCEPT = 0x1, + CANCEL = 0x2, + }; + + enum InviteUpdateType : uint8_t + { + NEW_INVITE = 0x01, + INVITE_CANCEL = 0x02, + JOINED_PARTY = 0x03, + ACCEPT_INVITE = 0x04, + REJECT_INVITE = 0x05, + }; + enum PlayerStateFlag : uint8_t { HideUILockChar = 0, // as the name suggests, hides the ui and logs the char... @@ -1170,6 +1195,16 @@ namespace Sapphire::Common RequireCorrectPositional = 2, }; + enum class StatusRefreshPolicy : uint8_t + { + Stack = 0, + ReplaceOrApply = 1, + Extend = 2, + ExtendOrApply = 3, + Reject = 4, + Custom = 15, // script handled + }; + enum class AstCardType : uint8_t { None = 0, diff --git a/src/common/Network/PacketDef/Chat/ServerChatDef.h b/src/common/Network/PacketDef/Chat/ServerChatDef.h index a91004b7..e74006cb 100644 --- a/src/common/Network/PacketDef/Chat/ServerChatDef.h +++ b/src/common/Network/PacketDef/Chat/ServerChatDef.h @@ -20,6 +20,19 @@ struct FFXIVIpcTell : FFXIVIpcBasePacket< Tell > char msg[1029]; }; +struct FFXIVIpcChannelChat : FFXIVIpcBasePacket< ChannelChat > +{ + uint64_t channelId; + uint64_t contentId; + uint32_t charaId; + uint8_t type; + uint8_t unknown1; + uint8_t unknown2; + char name[32]; + char message[1024]; + uint8_t padding; +}; + /** * Structural representation of the packet sent by the server as response * to a failed tell because of unavailable target player diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 46f3a77e..306634e8 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -73,15 +73,14 @@ namespace Sapphire::Network::Packets SocialRequestError = 0xF0AD, CFRegistered = 0x029F, // updated 5.58 hotfix - SocialRequestResponse = 0x0082, // updated 5.58 hotfix - SocialMessage = 0x03CB, // updated 5.58 hotfix - SocialMessage2 = 0x01D7, // updated 5.58 hotfix + SocialInviteResponse = 0x0082, // updated 5.58 hotfix + SocialInviteUpdate = 0x03CB, // updated 5.58 hotfix + SocialInviteResult = 0x01D7, // updated 5.58 hotfix CancelAllianceForming = 0xF0C6, // updated 4.2 LogMessage = 0x0118, // updated 5.58 hotfix Chat = 0x00FE, // updated 5.58 hotfix - PartyChat = 0x0065, WorldVisitList = 0xF0FE, // added 4.5 @@ -149,7 +148,7 @@ namespace Sapphire::Network::Packets SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18 PartyList = 0x0349, // updated 5.58 hotfix - PartyMessage = 0x00A4, // updated 5.58 hotfix + PartyUpdate = 0x00A4, // updated 5.58 hotfix HateRank = 0x0150, // updated 5.58 hotfix HateList = 0x0243, // updated 5.58 hotfix ObjectSpawn = 0x0125, // updated 5.58 hotfix @@ -333,16 +332,15 @@ namespace Sapphire::Network::Packets CancelLogout = 0x01AC, // updated 5.58 hotfix CFDutyInfoHandler = 0xF078, // updated 4.2 - SocialReqSendHandler = 0x00D7, // updated 5.58 hotfix - SocialResponseHandler = 0x023B, // updated 5.58 hotfix + SocialInviteHandler = 0x00D7, // updated 5.58 hotfix + SocialReplyHandler = 0x023B, // updated 5.58 hotfix CreateCrossWorldLS = 0x035D, // updated 5.58 hotfix ChatHandler = 0x03B0, // updated 5.58 hotfix - PartyChatHandler = 0x0065, - PartySetLeaderHandler = 0x036C, // updated 5.58 hotfix - LeavePartyHandler = 0x019D, // updated 5.58 hotfix - KickPartyMemberHandler = 0x0262, // updated 5.58 hotfix - DisbandPartyHandler = 0x0276, // updated 5.58 hotfix + PartyChangeLeaderHandler = 0x036C, // updated 5.58 hotfix + PartyLeaveHandler = 0x019D, // updated 5.58 hotfix + PartyKickHandler = 0x0262, // updated 5.58 hotfix + PartyDisbandHandler = 0x0276, // updated 5.58 hotfix SocialListHandler = 0x01CA, // updated 5.58 hotfix SetSearchInfoHandler = 0x01D4, // updated 5.58 hotfix @@ -433,6 +431,7 @@ namespace Sapphire::Network::Packets enum ServerChatIpcType : uint16_t { Tell = 0x0064, // updated for sb + ChannelChat = 0x0065, PublicContentTell = 0x00FB, // added 4.5, this is used when receiving a /tell in PublicContent instances such as Eureka or Bozja TellErrNotFound = 0x0066, @@ -445,6 +444,7 @@ namespace Sapphire::Network::Packets enum ClientChatIpcType : uint16_t { TellReq = 0x0064, + ChannelChatReq = 0x0065, PublicContentTellReq = 0x0326, // updated 5.35 hotfix, this is used when sending a /tell in PublicContent instances such as Eureka or Bozja }; diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index f15ca0bf..baa0944c 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -207,10 +207,10 @@ struct FFXIVIpcChatHandler : /* 001A */ char message[1012]; }; -struct FFXIVIpcPartyChatHandler : - FFXIVIpcBasePacket< ChatHandler > +struct FFXIVIpcChannelChatHandler : + FFXIVIpcBasePacket< ChannelChatReq > { - uint64_t unknown; + uint64_t channelId; char message[1024]; }; @@ -362,8 +362,8 @@ struct FFXIVIpcWorldInteractionHandler : Common::FFXIVARR_POSITION3 position; }; -struct FFXIVIpcSocialReqSendHandler : - FFXIVIpcBasePacket< SocialReqSendHandler > +struct FFXIVIpcSocialInviteHandler : + FFXIVIpcBasePacket< SocialInviteHandler > { uint64_t unknown; uint8_t p1; @@ -373,8 +373,8 @@ struct FFXIVIpcSocialReqSendHandler : uint8_t padding[5]; }; -struct FFXIVIpcSocialResponseHandler : - FFXIVIpcBasePacket< SocialResponseHandler > +struct FFXIVIpcSocialReplyHandler : + FFXIVIpcBasePacket< SocialReplyHandler > { uint64_t contentId; uint8_t p1; @@ -384,8 +384,8 @@ struct FFXIVIpcSocialResponseHandler : uint32_t unknown; }; -struct FFXIVIpcPartySetLeaderHandler : - FFXIVIpcBasePacket< PartySetLeaderHandler > +struct FFXIVIpcPartyChangeLeaderHandler : + FFXIVIpcBasePacket< PartyChangeLeaderHandler > { uint64_t contentId; uint8_t p1; @@ -394,14 +394,14 @@ struct FFXIVIpcPartySetLeaderHandler : uint8_t padding[6]; }; -struct FFXIVIpcLeavePartyHandler : - FFXIVIpcBasePacket< LeavePartyHandler > +struct FFXIVIpcPartyLeaveHandler : + FFXIVIpcBasePacket< PartyLeaveHandler > { uint64_t empty; }; -struct FFXIVIpcKickPartyMemberHander : - FFXIVIpcBasePacket< KickPartyMemberHandler > +struct FFXIVIpcPartyKickHandler : + FFXIVIpcBasePacket< PartyKickHandler > { uint64_t contentId; uint8_t p1; @@ -410,8 +410,8 @@ struct FFXIVIpcKickPartyMemberHander : uint8_t padding[6]; }; -struct FFXIVIpcDisbandPartyHandler : - FFXIVIpcBasePacket< DisbandPartyHandler > +struct FFXIVIpcPartyDisbandHandler : + FFXIVIpcBasePacket< PartyDisbandHandler > { uint64_t empty; }; diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 7e33d643..c3ddf9bd 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -46,19 +46,6 @@ namespace Sapphire::Network::Packets::Server char msg[1012]; }; - struct FFXIVIpcPartyChat : FFXIVIpcBasePacket< PartyChat > - { - uint64_t unknown; - uint64_t contentId; - uint32_t charaId; - uint8_t u1; - uint8_t u2; - uint8_t u3; - char name[32]; - char message[1024]; - uint8_t padding; - }; - struct FFXIVIpcChatBanned : FFXIVIpcBasePacket< ChatBanned > { uint8_t padding[4]; // I was not sure reinterpreting ZST is valid behavior in C++. @@ -2178,7 +2165,7 @@ namespace Sapphire::Network::Packets::Server uint32_t param7; }; - struct FFXIVIpcSocialMessage : FFXIVIpcBasePacket< SocialMessage > + struct FFXIVIpcSocialInviteUpdate : FFXIVIpcBasePacket< SocialInviteUpdate > { uint64_t contentId; uint32_t expireTime; @@ -2187,12 +2174,12 @@ namespace Sapphire::Network::Packets::Server uint8_t socialType; uint8_t padding; uint8_t type; - uint8_t unknown4; + uint8_t gender; char name[32]; uint8_t padding2[6]; }; - struct FFXIVIpcSocialMessage2 : FFXIVIpcBasePacket< SocialMessage2 > + struct FFXIVIpcSocialInviteResult : FFXIVIpcBasePacket< SocialInviteResult > { uint64_t contentId; uint32_t unknown3; @@ -2203,40 +2190,42 @@ namespace Sapphire::Network::Packets::Server char name[32]; }; - struct FFXIVIpcSocialRequestResponse : FFXIVIpcBasePacket< SocialRequestResponse > + struct FFXIVIpcSocialInviteResponse : FFXIVIpcBasePacket< SocialInviteResponse > { uint64_t contentId; uint32_t unknown3; - uint8_t u1AlwaysOne; + uint8_t socialType; uint8_t response; - uint8_t u2AlwaysOne; + uint8_t gender; char name[32]; uint8_t padding; }; + struct PartyMember + { + char name[32]; + uint64_t contentId; + uint32_t charaId; + uint32_t u1; // 3.x ParentEntityId? + uint32_t u2; // 3.x PetEntityId? + uint32_t hp; + uint32_t maxHp; + uint16_t mp; + uint16_t maxMp; + uint16_t u3; + uint16_t zoneId; + uint8_t gposeSelectable; // 3.x Valid? + uint8_t classId; + uint8_t u5; // 3.x ObjType? + uint8_t level; + uint8_t isLevelSync; + uint8_t unknown[7]; + Common::StatusEffect effect[30]; + }; + struct FFXIVIpcPartyList : FFXIVIpcBasePacket< PartyList > { - struct - { - char name[32]; - uint64_t contentId; - uint32_t charaId; - uint32_t u1; - uint32_t u2; - uint32_t hp; - uint32_t maxHp; - uint16_t mp; - uint16_t maxMp; - uint16_t u3; - uint16_t zoneId; - uint8_t gposeSelectable; - uint8_t classId; - uint8_t u5; - uint8_t level; - uint8_t isLevelSync; - uint8_t unknown[7]; - Common::StatusEffect effect[30]; - } member[8]; + PartyMember member[8]; uint64_t partyId; uint64_t channelId; uint8_t leaderIndex; @@ -2245,16 +2234,16 @@ namespace Sapphire::Network::Packets::Server uint32_t padding2; }; - struct FFXIVIpcPartyMessage : FFXIVIpcBasePacket< PartyMessage > + struct FFXIVIpcPartyUpdate : FFXIVIpcBasePacket< PartyUpdate > { - uint64_t leaderContentId; - uint64_t memberContentId; - uint8_t u1; - uint8_t u2; - uint16_t type; - uint8_t partySize; // ? - char leaderName[32]; - char memberName[32]; + uint64_t executeContentId; + uint64_t targetContentId; + uint8_t executeGender; + uint8_t targetGender; + uint16_t updateStatus; + uint8_t partySize; + char executeName[32]; + char targetName[32]; uint8_t padding[3]; }; diff --git a/src/scripts/action/whm/ActionDivineBenison7432.cpp b/src/scripts/action/whm/ActionDivineBenison7432.cpp new file mode 100644 index 00000000..1392ed6f --- /dev/null +++ b/src/scripts/action/whm/ActionDivineBenison7432.cpp @@ -0,0 +1,46 @@ +#include