1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 14:57:44 +00:00

Merge pull request #709 from collett8192/update_5.45hotfix

Update to 5.45 hotfix.
This commit is contained in:
Adam 2021-02-23 09:52:48 +11:00 committed by GitHub
commit b1ab980d01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 1606 additions and 867 deletions

View file

@ -51,11 +51,11 @@ namespace Sapphire::Common
enum InventoryOperation : uint16_t
{
Discard = 0x013C,
Move = 0x013D,
Swap = 0x013E,
Split = 0x013F,
Merge = 0x0141,
Discard = 0x0117,
Move = 0x0118,
Swap = 0x0119,
Split = 0x011A,
Merge = 0x011C,
};
enum ClientLanguage : uint8_t
@ -161,44 +161,27 @@ namespace Sapphire::Common
enum class EquipSlotCategory : uint8_t
{
// main slots
CharaMainHand = 0,
CharaOffHand = 1,
CharaHead = 2,
CharaBody = 3,
CharaHands = 4,
CharaWaist = 5,
CharaLegs = 6,
CharaFeet = 7,
CharaEars = 8,
CharaNeck = 9,
CharaWrist = 10,
CharaRing = 11,
CharaSoulCrystal = 12,
/* following slots not seem to exist any more.
when multi-slot gear is moved into equipment slot, normal slot listed above is used.
client will move any incompatible gears into armory but no InventoryModifiyHandler is sent.
server need to move those silently in order to sync with client.
*/
/*! Cannot equip gear to offhand slot */
//MainTwoHandedWeapon = 13,
/*! Can be equipped in either main or offhand slot */
//MainOrOffHand = 14, // unused
/*! Cannot equip gear to head */
//BodyDisallowHead = 15,
/*! Cannot equip gear to hands, legs and feet slots */
//BodyDisallowHandsLegsFeet = 16,
/*! Cannot equip gear to feet slot */
//LegsDisallowFeet = 18,
/*! Cannot equp gear to head, hands, legs, feet slots */
//BodyDisallowAll = 19,
/*! Cannot equip gear to hands slot */
//BodyDisallowHands = 20,
/*! Cannot equip gear to legs & feet slots */
//BodyDisallowLegsFeet = 21,
MainHand = 1,
OffHand = 2,
Head = 3,
Body = 4,
Hands = 5,
Waist = 6,
Legs = 7,
Feet = 8,
Ears = 9,
Neck = 10,
Wrist = 11,
Ring = 12,
MainTwoHandedWeapon = 13,
//MainOrOffHand = 14, // unused
BodyDisallowHead = 15,
BodyDisallowHandsLegsFeet = 16,
SoulCrystal = 17,
LegsDisallowFeet = 18,
BodyDisallowAll = 19,
BodyDisallowHands = 20,
BodyDisallowLegsFeet = 21,
};
enum InventoryType : uint16_t

File diff suppressed because it is too large Load diff

View file

@ -167,6 +167,8 @@ struct ContentRoulette;
struct ContentRouletteOpenRule;
struct ContentRouletteRoleBonus;
struct ContentsNote;
struct ContentsTutorial;
struct ContentsTutorialPage;
struct ContentTalk;
struct ContentTalkParam;
struct ContentType;
@ -179,7 +181,6 @@ struct CreditBackImage;
struct CreditCast;
struct CreditList;
struct CreditListText;
struct Currency;
struct CustomTalk;
struct CustomTalkDynamicIcon;
struct CustomTalkNestHandlers;
@ -368,6 +369,7 @@ struct HugeCraftworksRank;
struct HWDAnnounce;
struct HWDCrafterSupply;
struct HWDCrafterSupplyReward;
struct HWDCrafterSupplyTerm;
struct HWDDevLayerControl;
struct HWDDevLevelUI;
struct HWDDevLively;
@ -466,6 +468,7 @@ struct MountSpeed;
struct MountTransient;
struct MoveTimeline;
struct MoveVfx;
struct MovieStaffList;
struct MovieSubtitle;
struct MovieSubtitle500;
struct MovieSubtitleVoyage;
@ -546,6 +549,7 @@ struct RelicItem;
struct RelicNote;
struct RelicNoteCategory;
struct Resident;
struct ResistanceWeaponAdjust;
struct RetainerTask;
struct RetainerTaskLvRange;
struct RetainerTaskNormal;
@ -626,6 +630,8 @@ struct Weather;
struct WeatherGroup;
struct WeatherRate;
struct WeatherReportReplace;
struct WebGuidance;
struct WebURL;
struct WeddingBGM;
struct WeeklyBingoOrderData;
struct WeeklyBingoRewardData;
@ -983,6 +989,7 @@ struct AirshipExplorationParamType
struct AirshipExplorationPart
{
uint8_t slot;
uint8_t rank;
uint8_t components;
int16_t surveillance;
@ -990,6 +997,7 @@ struct AirshipExplorationPart
int16_t speed;
int16_t range;
int16_t favor;
uint16_t _class;
uint8_t repairMaterials;
AirshipExplorationPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -1112,9 +1120,22 @@ struct AozActionTransient
uint32_t icon;
std::string stats;
std::string description;
uint8_t locationKey;
uint16_t location;
uint32_t startQuest;
uint32_t nextQuest;
uint32_t requiredForQuest;
uint32_t previousQuest;
bool targetsEnemy;
bool targetsSelfOrAlly;
bool causeSlow;
bool causePetrify;
bool causeParalysis;
bool causeInterrupt;
bool causeBlind;
bool causeStun;
bool causeSleep;
bool causeBind;
bool causeHeavy;
bool causeDeath;
AozActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1122,6 +1143,7 @@ struct AozActionTransient
struct AOZArrangement
{
uint16_t aOZContentBriefingBNpc;
uint16_t position;
AOZArrangement( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1129,6 +1151,7 @@ struct AOZArrangement
struct AOZBoss
{
uint16_t boss;
uint16_t position;
AOZBoss( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1160,6 +1183,7 @@ struct AOZContentBriefingBNpc
uint32_t bNpcName;
uint32_t targetSmall;
uint32_t targetLarge;
bool hideStats;
uint8_t endurance;
uint8_t fire;
uint8_t ice;
@ -1171,16 +1195,16 @@ struct AOZContentBriefingBNpc
uint8_t piercing;
uint8_t blunt;
uint8_t magic;
bool slowResistance;
bool petrificationResistance;
bool paralysisResistance;
bool silenceResistance;
bool blindResistance;
bool stunResistance;
bool sleepResistance;
bool bindResistance;
bool heavyResistance;
bool instaDeathResistance;
bool slowVuln;
bool petrificationVuln;
bool paralysisVuln;
bool interruptionVuln;
bool blindVuln;
bool stunVuln;
bool sleepVuln;
bool bindVuln;
bool heavyVuln;
bool flatOrDeathVuln;
AOZContentBriefingBNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1646,6 +1670,7 @@ struct BuddyEquip
uint16_t iconHead;
uint16_t iconBody;
uint16_t iconLegs;
uint8_t order;
BuddyEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1924,6 +1949,7 @@ struct ClassJob
int8_t expArrayIndex;
int8_t battleClassIndex;
uint8_t jobIndex;
int8_t dohDolJobIndex;
uint16_t modifierHitPoints;
uint16_t modifierManaPoints;
uint16_t modifierStrength;
@ -2294,6 +2320,8 @@ struct ContentFinderCondition
bool addedIn53;
bool allowUndersized;
bool allowReplacement;
bool allowExplorerMode;
bool unknown54;
bool highEndDuty;
bool dutyRecorderAllowed;
std::string name;
@ -2304,13 +2332,13 @@ struct ContentFinderCondition
uint32_t image;
uint32_t icon;
bool levelingRoulette;
bool level5060Roulette;
bool level506070Roulette;
bool mSQRoulette;
bool guildHestRoulette;
bool expertRoulette;
bool trialRoulette;
bool dailyFrontlineChallenge;
bool level70Roulette;
bool level80Roulette;
bool mentorRoulette;
bool allianceRoulette;
bool normalRaidRoulette;
@ -2349,6 +2377,7 @@ struct ContentMemberType
uint8_t healersPerParty;
uint8_t meleesPerParty;
uint8_t rangedPerParty;
uint8_t unknown54;
ContentMemberType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2371,22 +2400,23 @@ struct ContentRandomSelect
struct ContentRoulette
{
std::string name;
std::string category;
std::string description;
std::string dutyType;
bool isInDutyFinder;
bool openRule;
bool requiredLevel;
uint8_t itemLevelRequired;
uint16_t icon;
uint32_t contentRouletteRoleBonus;
uint8_t rewardTomeA;
uint8_t openRule;
uint8_t requiredLevel;
uint16_t itemLevelRequired;
uint32_t icon;
uint8_t contentRouletteRoleBonus;
uint16_t rewardTomeA;
uint16_t rewardTomeB;
uint16_t rewardTomeC;
uint16_t sortKey;
uint8_t sortKey;
uint8_t contentMemberType;
bool requireAllDuties;
bool contentRouletteOpenRule;
uint8_t instanceContent;
uint8_t contentRouletteOpenRule;
uint16_t instanceContent;
ContentRoulette( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2426,6 +2456,23 @@ struct ContentsNote
ContentsNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct ContentsTutorial
{
std::string name;
std::string description;
std::vector< int32_t > page;
ContentsTutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct ContentsTutorialPage
{
int32_t image;
std::string description;
ContentsTutorialPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct ContentTalk
{
uint8_t contentTalkParam;
@ -2521,6 +2568,7 @@ struct Credit
struct CreditBackImage
{
bool unknown54;
uint32_t backImage;
CreditBackImage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData );
@ -2550,14 +2598,6 @@ struct CreditListText
CreditListText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct Currency
{
uint32_t item;
uint32_t limit;
Currency( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct CustomTalk
{
uint32_t iconActor;
@ -2566,6 +2606,7 @@ struct CustomTalk
std::vector< std::string > scriptInstruction;
std::vector< uint32_t > scriptArg;
bool text;
bool unknown54;
CustomTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2996,6 +3037,7 @@ struct Emote
uint8_t emoteMode;
bool hasCancelEmote;
bool drawsWeapon;
uint16_t order;
int32_t textCommand;
uint16_t icon;
uint16_t logMessageTargeted;
@ -3676,7 +3718,7 @@ struct GatheringItem
{
int32_t item;
uint16_t gatheringItemLevel;
uint32_t isHidden;
bool isHidden;
GatheringItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -3767,7 +3809,8 @@ struct GatheringPointBonus
uint32_t conditionValue;
uint8_t bonusType;
uint16_t bonusValue;
bool addedIn53;
bool unknown53;
uint32_t unknown54;
GatheringPointBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -4169,6 +4212,7 @@ struct GroupPoseFrame
{
int32_t image;
std::string gridText;
int32_t unknown54;
std::string text;
GroupPoseFrame( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -4178,6 +4222,8 @@ struct GroupPoseStamp
{
int32_t stampIcon;
int32_t category;
int32_t unknown540;
bool unknown541;
std::string name;
GroupPoseStamp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -4493,6 +4539,9 @@ struct HWDCrafterSupply
std::vector< uint16_t > baseCollectableReward;
std::vector< uint16_t > midCollectableReward;
std::vector< uint16_t > highCollectableReward;
std::vector< uint16_t > baseCollectableRewardPostPhase;
std::vector< uint16_t > midCollectableRewardPostPhase;
std::vector< uint16_t > highCollectableRewardPostPhase;
std::vector< uint8_t > termName;
HWDCrafterSupply( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -4507,6 +4556,13 @@ struct HWDCrafterSupplyReward
HWDCrafterSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct HWDCrafterSupplyTerm
{
std::string name;
HWDCrafterSupplyTerm( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct HWDDevLayerControl
{
@ -4621,14 +4677,13 @@ struct IKDFishParam
{
uint32_t fish;
uint8_t iKDContentBonus;
uint8_t unknown54;
IKDFishParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct IKDRoute
{
std::vector< uint32_t > spot;
uint8_t timeDefine;
uint32_t image;
uint32_t territoryType;
std::string name;
@ -4713,6 +4768,8 @@ struct InstanceContent
uint32_t instanceContentBuff;
int32_t reqInstance;
int16_t partyCondition;
uint16_t unknown540;
uint16_t unknown541;
InstanceContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -4729,6 +4786,8 @@ struct InstanceContentCSBonus
{
uint16_t instance;
uint32_t item;
uint8_t unknown540;
uint8_t unknown541;
InstanceContentCSBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -4771,7 +4830,7 @@ struct Item
bool isUnique;
bool isUntradable;
bool isIndisposable;
bool isEquippable;
bool lot;
uint32_t priceMid;
uint32_t priceLow;
bool canBeHq;
@ -4786,6 +4845,7 @@ struct Item
bool isCollectable;
bool alwaysCollectable;
uint16_t aetherialReduce;
uint16_t unknown54;
uint8_t levelEquip;
uint8_t equipRestriction;
uint8_t classJobCategory;
@ -5179,6 +5239,8 @@ struct LotteryExchangeShop
{
std::vector< int32_t > itemAccepted;
std::vector< uint32_t > amountAccepted;
std::vector< uint8_t > unknown540;
std::vector< uint8_t > unknown541;
std::string lua;
std::vector< uint32_t > logMessage;
@ -5311,7 +5373,7 @@ struct Materia
{
std::vector< int32_t > item;
uint8_t baseParam;
std::vector< uint8_t > value;
std::vector< int16_t > value;
Materia( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -5342,6 +5404,7 @@ struct MateriaTomestoneRate
struct MiniGameRA
{
int32_t icon;
int32_t image;
int32_t bGM;
MiniGameRA( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -5623,6 +5686,15 @@ struct MoveVfx
MoveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct MovieStaffList
{
uint32_t image;
float startTime;
float endTime;
MovieStaffList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct MovieSubtitle
{
float startTime;
@ -5669,6 +5741,9 @@ struct MYCTemporaryItemUICategory
struct MYCWarResultNotebook
{
uint8_t number;
uint8_t unknown540;
uint8_t unknown541;
int32_t quest;
int32_t icon;
int32_t image;
uint8_t rarity;
@ -5752,7 +5827,8 @@ struct NpcYell
float balloonTime;
bool isBalloonSlow;
bool battleTalkTime;
float text;
uint8_t unknown54;
std::string text;
NpcYell( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -5812,7 +5888,8 @@ struct Orchestrion
struct OrchestrionCategory
{
std::string name;
uint8_t hideCategory;
uint8_t hideOrder;
uint32_t icon;
uint8_t order;
OrchestrionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -5878,6 +5955,9 @@ struct PartyContent
bool name;
uint32_t textDataStart;
uint32_t textDataEnd;
std::vector< uint32_t > lGBEventObject0;
std::vector< uint32_t > lGBEventRange;
std::vector< uint32_t > lGBEventObject1;
uint16_t contentFinderCondition;
uint32_t image;
@ -6064,6 +6144,9 @@ struct PublicContent
uint32_t textDataEnd;
uint16_t contentFinderCondition;
uint16_t additionalData;
int32_t unknown540;
uint16_t unknown541;
uint16_t unknown542;
PublicContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -6232,6 +6315,7 @@ struct Quest
bool hideOfferIcon;
uint8_t eventIconType;
uint16_t sortKey;
bool unknown54;
Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -6278,7 +6362,7 @@ struct QuestClassJobSupply
struct QuestDerivedClass
{
uint32_t quest;
uint8_t classJob;
QuestDerivedClass( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -6373,6 +6457,7 @@ struct Race
int32_t rSEFHands;
int32_t rSEFLegs;
int32_t rSEFFeet;
uint8_t unknown54;
uint8_t exPac;
Race( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -6474,6 +6559,7 @@ struct RecipeLevelTable
uint16_t difficulty;
uint32_t quality;
uint16_t durability;
uint16_t conditionsFlag;
RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -6585,6 +6671,16 @@ struct Resident
Resident( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData );
};
struct ResistanceWeaponAdjust
{
uint16_t maxTotalStats;
uint16_t maxEachStat;
std::vector< uint8_t > baseParam;
uint32_t image;
ResistanceWeaponAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct RetainerTask
{
bool isRandom;
@ -6717,6 +6813,9 @@ struct ScenarioTree
{
uint8_t type;
uint16_t image;
uint32_t unknown540;
std::string unknown541;
int32_t unknown542;
ScenarioTree( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -6861,7 +6960,7 @@ struct SpecialShop
std::vector< int32_t > unknown;
std::vector< int32_t > achievementUnlock;
std::vector< uint16_t > patchNumber;
bool useCurrencyType;
uint8_t useCurrencyType;
uint32_t questUnlock;
int32_t completeText;
int32_t notCompleteText;
@ -6901,7 +7000,7 @@ struct Status
uint8_t maxStacks;
uint8_t category;
uint8_t hitEffect;
uint8_t vFX;
uint16_t vFX;
bool lockMovement;
bool lockActions;
bool lockControl;
@ -6994,6 +7093,7 @@ struct SubmarinePart
int16_t speed;
int16_t range;
int16_t favor;
uint16_t _class;
uint8_t repairMaterials;
SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -7056,6 +7156,7 @@ struct TerritoryType
uint8_t exVersion;
uint8_t addedIn53;
uint8_t mountSpeed;
bool unknown54;
TerritoryType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -7171,6 +7272,7 @@ struct Transformation
uint16_t endVFX;
uint32_t action6;
uint16_t action7;
bool unknown54;
Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -7273,6 +7375,13 @@ struct TripleTriadCardResident
uint8_t tripleTriadCardType;
uint16_t saleValue;
uint8_t sortKey;
uint16_t order;
uint8_t uIPriority;
bool unknown54;
uint8_t acquisitionType;
uint32_t acquisition;
uint32_t location;
uint32_t quest;
TripleTriadCardResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -7294,6 +7403,8 @@ struct TripleTriadCompetition
struct TripleTriadRule
{
std::string name;
std::string description;
bool unknown54;
TripleTriadRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -7435,6 +7546,24 @@ struct WeatherReportReplace
WeatherReportReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct WebGuidance
{
int32_t image;
uint8_t url;
std::string name;
std::string unknown54;
std::string description;
WebGuidance( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct WebURL
{
std::string uRL;
WebURL( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct WeddingBGM
{
uint16_t song;
@ -7733,6 +7862,8 @@ struct ZoneSharedGroup
xiv::exd::Exd m_ContentRouletteOpenRuleDat;
xiv::exd::Exd m_ContentRouletteRoleBonusDat;
xiv::exd::Exd m_ContentsNoteDat;
xiv::exd::Exd m_ContentsTutorialDat;
xiv::exd::Exd m_ContentsTutorialPageDat;
xiv::exd::Exd m_ContentTalkDat;
xiv::exd::Exd m_ContentTalkParamDat;
xiv::exd::Exd m_ContentTypeDat;
@ -7745,7 +7876,6 @@ struct ZoneSharedGroup
xiv::exd::Exd m_CreditCastDat;
xiv::exd::Exd m_CreditListDat;
xiv::exd::Exd m_CreditListTextDat;
xiv::exd::Exd m_CurrencyDat;
xiv::exd::Exd m_CustomTalkDat;
xiv::exd::Exd m_CustomTalkDynamicIconDat;
xiv::exd::Exd m_CustomTalkNestHandlersDat;
@ -7934,6 +8064,7 @@ struct ZoneSharedGroup
xiv::exd::Exd m_HWDAnnounceDat;
xiv::exd::Exd m_HWDCrafterSupplyDat;
xiv::exd::Exd m_HWDCrafterSupplyRewardDat;
xiv::exd::Exd m_HWDCrafterSupplyTermDat;
xiv::exd::Exd m_HWDDevLayerControlDat;
xiv::exd::Exd m_HWDDevLevelUIDat;
xiv::exd::Exd m_HWDDevLivelyDat;
@ -8032,6 +8163,7 @@ struct ZoneSharedGroup
xiv::exd::Exd m_MountTransientDat;
xiv::exd::Exd m_MoveTimelineDat;
xiv::exd::Exd m_MoveVfxDat;
xiv::exd::Exd m_MovieStaffListDat;
xiv::exd::Exd m_MovieSubtitleDat;
xiv::exd::Exd m_MovieSubtitle500Dat;
xiv::exd::Exd m_MovieSubtitleVoyageDat;
@ -8112,6 +8244,7 @@ struct ZoneSharedGroup
xiv::exd::Exd m_RelicNoteDat;
xiv::exd::Exd m_RelicNoteCategoryDat;
xiv::exd::Exd m_ResidentDat;
xiv::exd::Exd m_ResistanceWeaponAdjustDat;
xiv::exd::Exd m_RetainerTaskDat;
xiv::exd::Exd m_RetainerTaskLvRangeDat;
xiv::exd::Exd m_RetainerTaskNormalDat;
@ -8192,6 +8325,8 @@ struct ZoneSharedGroup
xiv::exd::Exd m_WeatherGroupDat;
xiv::exd::Exd m_WeatherRateDat;
xiv::exd::Exd m_WeatherReportReplaceDat;
xiv::exd::Exd m_WebGuidanceDat;
xiv::exd::Exd m_WebURLDat;
xiv::exd::Exd m_WeddingBGMDat;
xiv::exd::Exd m_WeeklyBingoOrderDataDat;
xiv::exd::Exd m_WeeklyBingoRewardDataDat;
@ -8350,6 +8485,8 @@ struct ZoneSharedGroup
using ContentRouletteOpenRulePtr = std::shared_ptr< ContentRouletteOpenRule >;
using ContentRouletteRoleBonusPtr = std::shared_ptr< ContentRouletteRoleBonus >;
using ContentsNotePtr = std::shared_ptr< ContentsNote >;
using ContentsTutorialPtr = std::shared_ptr< ContentsTutorial >;
using ContentsTutorialPagePtr = std::shared_ptr< ContentsTutorialPage >;
using ContentTalkPtr = std::shared_ptr< ContentTalk >;
using ContentTalkParamPtr = std::shared_ptr< ContentTalkParam >;
using ContentTypePtr = std::shared_ptr< ContentType >;
@ -8362,7 +8499,6 @@ struct ZoneSharedGroup
using CreditCastPtr = std::shared_ptr< CreditCast >;
using CreditListPtr = std::shared_ptr< CreditList >;
using CreditListTextPtr = std::shared_ptr< CreditListText >;
using CurrencyPtr = std::shared_ptr< Currency >;
using CustomTalkPtr = std::shared_ptr< CustomTalk >;
using CustomTalkDynamicIconPtr = std::shared_ptr< CustomTalkDynamicIcon >;
using CustomTalkNestHandlersPtr = std::shared_ptr< CustomTalkNestHandlers >;
@ -8551,6 +8687,7 @@ struct ZoneSharedGroup
using HWDAnnouncePtr = std::shared_ptr< HWDAnnounce >;
using HWDCrafterSupplyPtr = std::shared_ptr< HWDCrafterSupply >;
using HWDCrafterSupplyRewardPtr = std::shared_ptr< HWDCrafterSupplyReward >;
using HWDCrafterSupplyTermPtr = std::shared_ptr< HWDCrafterSupplyTerm >;
using HWDDevLayerControlPtr = std::shared_ptr< HWDDevLayerControl >;
using HWDDevLevelUIPtr = std::shared_ptr< HWDDevLevelUI >;
using HWDDevLivelyPtr = std::shared_ptr< HWDDevLively >;
@ -8649,6 +8786,7 @@ struct ZoneSharedGroup
using MountTransientPtr = std::shared_ptr< MountTransient >;
using MoveTimelinePtr = std::shared_ptr< MoveTimeline >;
using MoveVfxPtr = std::shared_ptr< MoveVfx >;
using MovieStaffListPtr = std::shared_ptr< MovieStaffList >;
using MovieSubtitlePtr = std::shared_ptr< MovieSubtitle >;
using MovieSubtitle500Ptr = std::shared_ptr< MovieSubtitle500 >;
using MovieSubtitleVoyagePtr = std::shared_ptr< MovieSubtitleVoyage >;
@ -8729,6 +8867,7 @@ struct ZoneSharedGroup
using RelicNotePtr = std::shared_ptr< RelicNote >;
using RelicNoteCategoryPtr = std::shared_ptr< RelicNoteCategory >;
using ResidentPtr = std::shared_ptr< Resident >;
using ResistanceWeaponAdjustPtr = std::shared_ptr< ResistanceWeaponAdjust >;
using RetainerTaskPtr = std::shared_ptr< RetainerTask >;
using RetainerTaskLvRangePtr = std::shared_ptr< RetainerTaskLvRange >;
using RetainerTaskNormalPtr = std::shared_ptr< RetainerTaskNormal >;
@ -8809,6 +8948,8 @@ struct ZoneSharedGroup
using WeatherGroupPtr = std::shared_ptr< WeatherGroup >;
using WeatherRatePtr = std::shared_ptr< WeatherRate >;
using WeatherReportReplacePtr = std::shared_ptr< WeatherReportReplace >;
using WebGuidancePtr = std::shared_ptr< WebGuidance >;
using WebURLPtr = std::shared_ptr< WebURL >;
using WeddingBGMPtr = std::shared_ptr< WeddingBGM >;
using WeeklyBingoOrderDataPtr = std::shared_ptr< WeeklyBingoOrderData >;
using WeeklyBingoRewardDataPtr = std::shared_ptr< WeeklyBingoRewardData >;
@ -8967,6 +9108,8 @@ struct ZoneSharedGroup
std::set< uint32_t > m_ContentRouletteOpenRuleIdList;
std::set< uint32_t > m_ContentRouletteRoleBonusIdList;
std::set< uint32_t > m_ContentsNoteIdList;
std::set< uint32_t > m_ContentsTutorialIdList;
std::set< uint32_t > m_ContentsTutorialPageIdList;
std::set< uint32_t > m_ContentTalkIdList;
std::set< uint32_t > m_ContentTalkParamIdList;
std::set< uint32_t > m_ContentTypeIdList;
@ -8979,7 +9122,6 @@ struct ZoneSharedGroup
std::set< uint32_t > m_CreditCastIdList;
std::set< uint32_t > m_CreditListIdList;
std::set< uint32_t > m_CreditListTextIdList;
std::set< uint32_t > m_CurrencyIdList;
std::set< uint32_t > m_CustomTalkIdList;
std::set< uint32_t > m_CustomTalkDynamicIconIdList;
std::set< uint32_t > m_CustomTalkNestHandlersIdList;
@ -9168,6 +9310,7 @@ struct ZoneSharedGroup
std::set< uint32_t > m_HWDAnnounceIdList;
std::set< uint32_t > m_HWDCrafterSupplyIdList;
std::set< uint32_t > m_HWDCrafterSupplyRewardIdList;
std::set< uint32_t > m_HWDCrafterSupplyTermIdList;
std::set< uint32_t > m_HWDDevLayerControlIdList;
std::set< uint32_t > m_HWDDevLevelUIIdList;
std::set< uint32_t > m_HWDDevLivelyIdList;
@ -9266,6 +9409,7 @@ struct ZoneSharedGroup
std::set< uint32_t > m_MountTransientIdList;
std::set< uint32_t > m_MoveTimelineIdList;
std::set< uint32_t > m_MoveVfxIdList;
std::set< uint32_t > m_MovieStaffListIdList;
std::set< uint32_t > m_MovieSubtitleIdList;
std::set< uint32_t > m_MovieSubtitle500IdList;
std::set< uint32_t > m_MovieSubtitleVoyageIdList;
@ -9346,6 +9490,7 @@ struct ZoneSharedGroup
std::set< uint32_t > m_RelicNoteIdList;
std::set< uint32_t > m_RelicNoteCategoryIdList;
std::set< uint32_t > m_ResidentIdList;
std::set< uint32_t > m_ResistanceWeaponAdjustIdList;
std::set< uint32_t > m_RetainerTaskIdList;
std::set< uint32_t > m_RetainerTaskLvRangeIdList;
std::set< uint32_t > m_RetainerTaskNormalIdList;
@ -9426,6 +9571,8 @@ struct ZoneSharedGroup
std::set< uint32_t > m_WeatherGroupIdList;
std::set< uint32_t > m_WeatherRateIdList;
std::set< uint32_t > m_WeatherReportReplaceIdList;
std::set< uint32_t > m_WebGuidanceIdList;
std::set< uint32_t > m_WebURLIdList;
std::set< uint32_t > m_WeddingBGMIdList;
std::set< uint32_t > m_WeeklyBingoOrderDataIdList;
std::set< uint32_t > m_WeeklyBingoRewardDataIdList;
@ -10309,6 +10456,18 @@ const std::set< uint32_t >& getContentsNoteIdList()
loadIdList( m_ContentsNoteDat, m_ContentsNoteIdList );
return m_ContentsNoteIdList;
}
const std::set< uint32_t >& getContentsTutorialIdList()
{
if( m_ContentsTutorialIdList.size() == 0 )
loadIdList( m_ContentsTutorialDat, m_ContentsTutorialIdList );
return m_ContentsTutorialIdList;
}
const std::set< uint32_t >& getContentsTutorialPageIdList()
{
if( m_ContentsTutorialPageIdList.size() == 0 )
loadIdList( m_ContentsTutorialPageDat, m_ContentsTutorialPageIdList );
return m_ContentsTutorialPageIdList;
}
const std::set< uint32_t >& getContentTalkIdList()
{
if( m_ContentTalkIdList.size() == 0 )
@ -10381,12 +10540,6 @@ const std::set< uint32_t >& getCreditListTextIdList()
loadIdList( m_CreditListTextDat, m_CreditListTextIdList );
return m_CreditListTextIdList;
}
const std::set< uint32_t >& getCurrencyIdList()
{
if( m_CurrencyIdList.size() == 0 )
loadIdList( m_CurrencyDat, m_CurrencyIdList );
return m_CurrencyIdList;
}
const std::set< uint32_t >& getCustomTalkIdList()
{
if( m_CustomTalkIdList.size() == 0 )
@ -11515,6 +11668,12 @@ const std::set< uint32_t >& getHWDCrafterSupplyRewardIdList()
loadIdList( m_HWDCrafterSupplyRewardDat, m_HWDCrafterSupplyRewardIdList );
return m_HWDCrafterSupplyRewardIdList;
}
const std::set< uint32_t >& getHWDCrafterSupplyTermIdList()
{
if( m_HWDCrafterSupplyTermIdList.size() == 0 )
loadIdList( m_HWDCrafterSupplyTermDat, m_HWDCrafterSupplyTermIdList );
return m_HWDCrafterSupplyTermIdList;
}
const std::set< uint32_t >& getHWDDevLayerControlIdList()
{
if( m_HWDDevLayerControlIdList.size() == 0 )
@ -12103,6 +12262,12 @@ const std::set< uint32_t >& getMoveVfxIdList()
loadIdList( m_MoveVfxDat, m_MoveVfxIdList );
return m_MoveVfxIdList;
}
const std::set< uint32_t >& getMovieStaffListIdList()
{
if( m_MovieStaffListIdList.size() == 0 )
loadIdList( m_MovieStaffListDat, m_MovieStaffListIdList );
return m_MovieStaffListIdList;
}
const std::set< uint32_t >& getMovieSubtitleIdList()
{
if( m_MovieSubtitleIdList.size() == 0 )
@ -12583,6 +12748,12 @@ const std::set< uint32_t >& getResidentIdList()
loadIdList( m_ResidentDat, m_ResidentIdList );
return m_ResidentIdList;
}
const std::set< uint32_t >& getResistanceWeaponAdjustIdList()
{
if( m_ResistanceWeaponAdjustIdList.size() == 0 )
loadIdList( m_ResistanceWeaponAdjustDat, m_ResistanceWeaponAdjustIdList );
return m_ResistanceWeaponAdjustIdList;
}
const std::set< uint32_t >& getRetainerTaskIdList()
{
if( m_RetainerTaskIdList.size() == 0 )
@ -13063,6 +13234,18 @@ const std::set< uint32_t >& getWeatherReportReplaceIdList()
loadIdList( m_WeatherReportReplaceDat, m_WeatherReportReplaceIdList );
return m_WeatherReportReplaceIdList;
}
const std::set< uint32_t >& getWebGuidanceIdList()
{
if( m_WebGuidanceIdList.size() == 0 )
loadIdList( m_WebGuidanceDat, m_WebGuidanceIdList );
return m_WebGuidanceIdList;
}
const std::set< uint32_t >& getWebURLIdList()
{
if( m_WebURLIdList.size() == 0 )
loadIdList( m_WebURLDat, m_WebURLIdList );
return m_WebURLIdList;
}
const std::set< uint32_t >& getWeddingBGMIdList()
{
if( m_WeddingBGMIdList.size() == 0 )

View file

@ -43,67 +43,67 @@ namespace Sapphire::Network::Packets
*/
enum ServerZoneIpcType : uint16_t
{
Ping = 0x0219, // updated 5.35 hotfix
Init = 0x0185, // updated 5.35 hotfix
Ping = 0x0183, // updated 5.45 hotfix
Init = 0x01EA, // updated 5.45 hotfix
ActorFreeSpawn = 0x0239, // updated 5.35 hotfix
InitZone = 0x03CD, // updated 5.35 hotfix
ActorFreeSpawn = 0x0185, // updated 5.45 hotfix
InitZone = 0x0233, // updated 5.45 hotfix
EffectResult = 0x01C2, // updated 5.35 hotfix
ActorControl = 0x02A4, // updated 5.35 hotfix
ActorControlSelf = 0x02C8, // updated 5.35 hotfix
ActorControlTarget = 0x0209, // updated 5.35 hotfix
EffectResult = 0x01D7, // updated 5.45 hotfix
ActorControl = 0x00C2, // updated 5.45 hotfix
ActorControlSelf = 0x03D5, // updated 5.45 hotfix
ActorControlTarget = 0x0171, // updated 5.45 hotfix
/*!
* @brief Used when resting
*/
UpdateHpMpTp = 0x0319, // updated 5.35 hotfix
UpdateHpMpTp = 0x019B, // updated 5.45 hotfix
///////////////////////////////////////////////////
ChatBanned = 0xF06B,
Playtime = 0x03A4, // updated 5.35 hotfix
Logout = 0x02AD, // updated 5.35 hotfix
CFNotify = 0x02C4, // updated 5.35 hotfix
Playtime = 0x0302, // updated 5.45 hotfix
Logout = 0x012A, // updated 5.45 hotfix
CFNotify = 0x026E, // updated 5.45 hotfix
CFMemberStatus = 0x0079,
CFDutyInfo = 0x0193, // updated 5.35 hotfix
CFDutyInfo = 0x0145, // updated 5.45 hotfix
CFPlayerInNeed = 0xF07F,
CFPreferredRole = 0x0196, // updated 5.35 hotfix
CFCancel = 0x00EC, // updated 5.35 hotfix
CFPreferredRole = 0x012E, // updated 5.45 hotfix
CFCancel = 0x0312, // updated 5.45 hotfix
SocialRequestError = 0xF0AD,
CFRegistered = 0x010C, // updated 5.35 hotfix
SocialRequestResponse = 0x01C7, // updated 5.35 hotfix
SocialMessage = 0x0308, // updated 5.35 hotfix
SocialMessage2 = 0x037C, // updated 5.35 hotfix
CFRegistered = 0x01FB, // updated 5.45 hotfix
SocialRequestResponse = 0x03A5, // updated 5.45 hotfix
SocialMessage = 0x030C, // updated 5.45 hotfix
SocialMessage2 = 0x00BB, // updated 5.45 hotfix
CancelAllianceForming = 0x00C6, // updated 4.2
LogMessage = 0x00D0,
Chat = 0x0349, // updated 5.35 hotfix
Chat = 0x01BA, // updated 5.45 hotfix
PartyChat = 0x0065,
WorldVisitList = 0xF0FE, // added 4.5
SocialList = 0x0216, // updated 5.35 hotfix
SocialList = 0x0315, // updated 5.45 hotfix
ExamineSearchInfo = 0x03C3, // updated 5.35 hotfix
UpdateSearchInfo = 0x0121, // updated 5.35 hotfix
InitSearchInfo = 0x036F, // updated 5.35 hotfix
ExamineSearchInfo = 0x035F, // updated 5.45 hotfix
UpdateSearchInfo = 0x0310, // updated 5.45 hotfix
InitSearchInfo = 0x01ED, // updated 5.45 hotfix
ExamineSearchComment = 0x0102, // updated 4.1
ServerNoticeShort = 0x017A, // updated 5.35 hotfix
ServerNotice = 0x02F8, // updated 5.35 hotfix
SetOnlineStatus = 0x03D7, // updated 5.35 hotfix
ServerNoticeShort = 0x03B4, // updated 5.45 hotfix
ServerNotice = 0x0354, // updated 5.45 hotfix
SetOnlineStatus = 0x0166, // updated 5.45 hotfix
CountdownInitiate = 0x0237, // updated 5.25
CountdownCancel = 0x00D9, // updated 5.18
PlayerAddedToBlacklist = 0x033F, // updated 5.1
PlayerRemovedFromBlacklist = 0x0385, // updated 5.1
BlackList = 0x02DB, // updated 5.35 hotfix
BlackList = 0x02BD, // updated 5.45 hotfix
LinkshellList = 0x01F0, // updated 5.35 hotfix
LinkshellList = 0x021A, // updated 5.45 hotfix
MailDeleteRequest = 0xF12B, // updated 5.0
@ -114,87 +114,87 @@ namespace Sapphire::Network::Packets
MarketTaxRates = 0x01F8, // updated 5.35 hotfix
MarketBoardSearchResult = 0x032C, // updated 5.35 hotfix
MarketBoardItemListingCount = 0x038F, // updated 5.35 hotfix
MarketBoardItemListingHistory = 0x0186, // updated 5.35 hotfix
MarketBoardItemListing = 0x025F, // updated 5.35 hotfix
MarketBoardSearchResult = 0x01D6, // updated 5.45 hotfix
MarketBoardItemListingCount = 0x00C0, // updated 5.45 hotfix
MarketBoardItemListingHistory = 0x01C3, // updated 5.45 hotfix
MarketBoardItemListing = 0x016B, // updated 5.45 hotfix
CharaFreeCompanyTag = 0x013B, // updated 4.5
FreeCompanyBoardMsg = 0x013C, // updated 4.5
FreeCompanyInfo = 0xF13D, // updated 4.5
FreeCompanyInfo = 0x03D0, // updated 5.45 hotfix
ExamineFreeCompanyInfo = 0xF13E, // updated 4.5
FreeCompanyUpdateShortMessage = 0xF157, // added 5.0
StatusEffectList = 0x0382, // updated 5.35 hotfix
StatusEffectList = 0x0243, // updated 5.45 hotfix
EurekaStatusEffectList = 0x0167, // updated 5.18
BossStatusEffectList = 0x0312, // added 5.1
Effect = 0x0192, // updated 5.35 hotfix
AoeEffect8 = 0x012C, // updated 5.35 hotfix
AoeEffect16 = 0x01B9, // updated 5.35 hotfix
AoeEffect24 = 0x02B4, // updated 5.35 hotfix
AoeEffect32 = 0x00A4, // updated 5.35 hotfix
PersistantEffect = 0x0317, // updated 5.35 hotfix
Effect = 0x027F, // updated 5.45 hotfix
AoeEffect8 = 0x009B, // updated 5.45 hotfix
AoeEffect16 = 0x028C, // updated 5.45 hotfix
AoeEffect24 = 0x02AD, // updated 5.45 hotfix
AoeEffect32 = 0x00A7, // updated 5.45 hotfix
PersistantEffect = 0x0244, // updated 5.45 hotfix
GCAffiliation = 0x0105, // updated 5.35 hotfix
GCAffiliation = 0x0155, // updated 5.45 hotfix
PlayerSpawn = 0x0179, // updated 5.35 hotfix
NpcSpawn = 0x03A8, // updated 5.35 hotfix
PlayerSpawn = 0x01AB, // updated 5.45 hotfix
NpcSpawn = 0x02C9, // updated 5.45 hotfix
NpcSpawn2 = 0x01CB, // ( Bigger statuseffectlist? ) updated 5.3
ActorMove = 0x01BF, // updated 5.35 hotfix
ActorMove = 0x006B, // updated 5.45 hotfix
ActorSetPos = 0x03DF, // updated 5.35 hotfix
ActorSetPos = 0x00C6, // updated 5.45 hotfix
ActorCast = 0x0302, // updated 5.35 hotfix
ActorCast = 0x034C, // updated 5.45 hotfix
SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18
PartyList = 0x02B2, // updated 5.35 hotfix
PartyMessage = 0x00AE, // updated 5.35 hotfix
HateRank = 0x02CC, // updated 5.35 hotfix
HateList = 0x0198, // updated 5.35 hotfix
ObjectSpawn = 0x02B8, // updated 5.35 hotfix
ObjectDespawn = 0x00C0, // updated 5.35 hotfix
UpdateClassInfo = 0x0235, // updated 5.35 hotfix
SilentSetClassJob = 0x018E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything
PlayerSetup = 0x0290, // updated 5.35 hotfix
PlayerStats = 0x023B, // updated 5.35 hotfix
ActorOwner = 0x00E8, // updated 5.35 hotfix
PlayerStateFlags = 0x00F8, // updated 5.35 hotfix
PlayerClassInfo = 0x02C3, // updated 5.35 hotfix
CharaVisualEffect = 0x02E2, // updated 5.35 hotfix
PartyList = 0x00F5, // updated 5.45 hotfix
PartyMessage = 0x01BC, // updated 5.45 hotfix
HateRank = 0x0217, // updated 5.45 hotfix
HateList = 0x00E5, // updated 5.45 hotfix
ObjectSpawn = 0x0336, // updated 5.45 hotfix
ObjectDespawn = 0x02D0, // updated 5.45 hotfix
UpdateClassInfo = 0x0179, // updated 5.45 hotfix
SilentSetClassJob = 0xF18E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything
PlayerSetup = 0x01E9, // updated 5.45 hotfix
PlayerStats = 0x01CC, // updated 5.45 hotfix
ActorOwner = 0x0153, // updated 5.45 hotfix
PlayerStateFlags = 0x02DC, // updated 5.45 hotfix
PlayerClassInfo = 0x02F0, // updated 5.45 hotfix
CharaVisualEffect = 0x026A, // updated 5.45 hotfix
ModelEquip = 0x0277, // updated 5.35 hotfix
Examine = 0x00BC, // updated 5.35 hotfix
CharaNameReq = 0x008E, // updated 5.35 hotfix
ModelEquip = 0x024A, // updated 5.45 hotfix
Examine = 0x0261, // updated 5.45 hotfix
CharaNameReq = 0x0380, // updated 5.45 hotfix
// nb: see #565 on github
UpdateRetainerItemSalePrice = 0xF19F, // updated 5.0
RetainerSaleHistory = 0x020E, // updated 5.21 hotfix
RetainerInformation = 0x01F9, // updated 5.35 hotfix
RetainerInformation = 0x026B, // updated 5.45 hotfix
SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore
ItemInfo = 0x0214, // updated 5.35 hotfix
ContainerInfo = 0x00C5, // updated 5.35 hotfix
InventoryTransactionFinish = 0x02F0, // updated 5.35 hotfix
InventoryTransaction = 0x01FD, // updated 5.35 hotfix
CurrencyCrystalInfo = 0x0379, // updated 5.35 hotfix
ItemInfo = 0x0175, // updated 5.45 hotfix
ContainerInfo = 0x0193, // updated 5.45 hotfix
InventoryTransactionFinish = 0x00BD, // updated 5.45 hotfix
InventoryTransaction = 0x02EE, // updated 5.45 hotfix
CurrencyCrystalInfo = 0x0363, // updated 5.45 hotfix
InventoryActionAck = 0x03E4, // updated 5.35 hotfix
UpdateInventorySlot = 0x036A, // updated 5.35 hotfix
InventoryActionAck = 0x02FA, // updated 5.45 hotfix
UpdateInventorySlot = 0x017D, // updated 5.45 hotfix
HuntingLogEntry = 0x0146, // updated 5.35 hotfix
HuntingLogEntry = 0x0232, // updated 5.45 hotfix
EventPlay = 0x00F3, // updated 5.35 hotfix
EventPlay4 = 0x00AC, // updated 5.35 hotfix
EventPlay8 = 0x023F, // updated 5.35 hotfix
EventPlay16 = 0x025B, // updated 5.35 hotfix
EventPlay32 = 0x029A, // updated 5.35 hotfix
EventPlay64 = 0x02C1, // updated 5.35 hotfix
EventPlay128 = 0x038A, // updated 5.35 hotfix
EventPlay255 = 0x034B, // updated 5.35 hotfix
EventPlay = 0x0276, // updated 5.45 hotfix
EventPlay4 = 0x028D, // updated 5.45 hotfix
EventPlay8 = 0x0318, // updated 5.45 hotfix
EventPlay16 = 0x020D, // updated 5.45 hotfix
EventPlay32 = 0x03B5, // updated 5.45 hotfix
EventPlay64 = 0x039E, // updated 5.45 hotfix
EventPlay128 = 0x02F4, // updated 5.45 hotfix
EventPlay255 = 0x009D, // updated 5.45 hotfix
EventYield = 0x037D, // updated 5.35 hotfix
EventYield = 0x0268, // updated 5.45 hotfix
//EventYield4 = 0x0000,
//EventYield8 = 0x0000,
//EventYield16 = 0x0000,
@ -203,29 +203,29 @@ namespace Sapphire::Network::Packets
//EventYield128 = 0x0000,
//EventYield255 = 0x0000,
EventStart = 0x009A, // updated 5.35 hotfix
EventFinish = 0x007E, // updated 5.35 hotfix
EventStart = 0x02DE, // updated 5.45 hotfix
EventFinish = 0x01A3, // updated 5.45 hotfix
EventLinkshell = 0x1169,
QuestActiveList = 0x0117, // updated 5.35 hotfix
QuestUpdate = 0x0073, // updated 5.35 hotfix
QuestCompleteList = 0x0240, // updated 5.35 hotfix
QuestActiveList = 0x015A, // updated 5.45 hotfix
QuestUpdate = 0x037B, // updated 5.45 hotfix
QuestCompleteList = 0x0287, // updated 5.45 hotfix
QuestFinish = 0x00E9, // updated 5.35 hotfix
QuestFinish = 0x0066, // updated 5.45 hotfix
MSQTrackerComplete = 0xF1D6, // updated 5.0
MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474
QuestMessage = 0x0381, // updated 5.35 hotfix
QuestMessage = 0x017B, // updated 5.45 hotfix
QuestTracker = 0x018B, // updated 5.35 hotfix
QuestTracker = 0x01E8, // updated 5.45 hotfix
Mount = 0x01B5, // updated 5.35 hotfix
Mount = 0x0122, // updated 5.45 hotfix
DirectorVars = 0x011D, // updated 5.35 hotfix
DirectorVars = 0x0252, // updated 5.45 hotfix
SomeDirectorUnk1 = 0x0084, // updated 5.18
SomeDirectorUnk2 = 0xF0C1, // updated 5.18
SomeDirectorUnk4 = 0x0202, // updated 5.35 hotfix
SomeDirectorUnk4 = 0x0071, // updated 5.45 hotfix
SomeDirectorUnk8 = 0x028A, // updated 5.18
SomeDirectorUnk16 = 0x028C, // updated 5.18
DirectorPopUp = 0xF162, // updated 5.18 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown
@ -234,55 +234,58 @@ namespace Sapphire::Network::Packets
CFAvailableContents = 0xF1FD, // updated 4.2
WeatherChange = 0x027B, // updated 5.35 hotfix
PlayerTitleList = 0x0251, // updated 5.35 hotfix
Discovery = 0x031B, // updated 5.35 hotfix
WeatherChange = 0x0167, // updated 5.45 hotfix
PlayerTitleList = 0x00F3, // updated 5.45 hotfix
Discovery = 0x0247, // updated 5.45 hotfix
EorzeaTimeOffset = 0x01D4, // updated 5.35 hotfix
EorzeaTimeOffset = 0x00C5, // updated 5.45 hotfix
EquipDisplayFlags = 0x00BE, // updated 5.35 hotfix
EquipDisplayFlags = 0x0316, // updated 5.45 hotfix
MiniCactpotInit = 0x0286, // added 5.31
ShopMessage = 0x0197, // updated 5.35 hotfix
LootMessage = 0x01B7, // updated 5.35 hotfix
ShopMessage = 0x02FC, // updated 5.45 hotfix
LootMessage = 0x03B8, // updated 5.45 hotfix
ResultDialog = 0x0296, // updated 5.45 hotfix
DesynthResult = 0x0323, // updated 5.45 hotfix
/// Housing //////////////////////////////////////
LandSetInitialize = 0x0095, // updated 5.35 hotfix
LandUpdate = 0x00BF, // updated 5.35 hotfix
YardObjectSpawn = 0x01CA, // updated 5.35 hotfix
HousingIndoorInitialize = 0x01FF, // updated 5.35 hotfix
LandPriceUpdate = 0x0380, // updated 5.35 hotfix
LandInfoSign = 0x023D, // updated 5.35 hotfix
LandRename = 0x0140, // updated 5.35 hotfix
HousingEstateGreeting = 0x00C7, // updated 5.35 hotfix
HousingUpdateLandFlagsSlot = 0x027E, // updated 5.35 hotfix
HousingLandFlags = 0x022F, // updated 5.35 hotfix
HousingShowEstateGuestAccess = 0x03B5, // updated 5.35 hotfix
LandSetInitialize = 0x03E2, // updated 5.45 hotfix
LandUpdate = 0x027E, // updated 5.45 hotfix
YardObjectSpawn = 0x010E, // updated 5.45 hotfix
HousingIndoorInitialize = 0x01A9, // updated 5.45 hotfix
LandPriceUpdate = 0x0379, // updated 5.45 hotfix
LandInfoSign = 0x0398, // updated 5.45 hotfix
LandRename = 0x00F6, // updated 5.45 hotfix
HousingEstateGreeting = 0x037D, // updated 5.45 hotfix
HousingUpdateLandFlagsSlot = 0x03AF, // updated 5.45 hotfix
HousingLandFlags = 0x033B, // updated 5.45 hotfix
HousingShowEstateGuestAccess = 0x01B3, // updated 5.45 hotfix
HousingObjectInitialize = 0x01AA, // updated 5.35 hotfix
HousingInternalObjectSpawn = 0x0234, // updated 5.35 hotfix
HousingObjectInitialize = 0x00B5, // updated 5.45 hotfix
HousingInternalObjectSpawn = 0x00BC, // updated 5.45 hotfix
HousingWardInfo = 0x02FD, // updated 5.35 hotfix
HousingObjectMove = 0x022C, // updated 5.35 hotfix
HousingWardInfo = 0x015E, // updated 5.45 hotfix
HousingObjectMove = 0x03E6, // updated 5.45 hotfix
SharedEstateSettingsResponse = 0x006A, // updated 5.35 hotfix
SharedEstateSettingsResponse = 0x03A4, // updated 5.45 hotfix
LandUpdateHouseName = 0x00B1, // updated 5.35 hotfix
LandUpdateHouseName = 0x0215, // updated 5.45 hotfix
LandSetMap = 0x0149, // updated 5.35 hotfix
LandSetMap = 0x0103, // updated 5.45 hotfix
//////////////////////////////////////////////////
DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui
PerformNote = 0x0286, // updated 4.3
PrepareZoning = 0x026C, // updated 5.35 hotfix
ActorGauge = 0x0112, // updated 5.35 hotfix
PrepareZoning = 0x01EE, // updated 5.45 hotfix
ActorGauge = 0x018E, // updated 5.45 hotfix
DutyGauge = 0x00D2, // updated 5.45 hotfix
// daily quest info -> without them sent, login will take longer...
DailyQuests = 0x0139, // updated 5.35 hotfix
DailyQuestRepeatFlags = 0x024C, // updated 5.35 hotfix
DailyQuests = 0x02C4, // updated 5.45 hotfix
DailyQuestRepeatFlags = 0x024D, // updated 5.45 hotfix
/// Doman Mahjong //////////////////////////////////////
MahjongOpenGui = 0x02A4, // only available in mahjong instance
@ -295,6 +298,16 @@ namespace Sapphire::Network::Packets
// 2C3 and 2C4 are currently unknown
MahjongEndRoundDraw = 0x02C5, // self explanatory
MahjongEndGame = 0x02C6, // finished oorasu(all-last) round; shows a result screen.
/// Airship & Submarine //////////////////////////////////////
AirshipExplorationResult = 0x0131, // updated 5.45 hotfix
AirshipStatus = 0x0253, // updated 5.45 hotfix
AirshipStatusList = 0x0391, // updated 5.45 hotfix
AirshipTimers = 0x0206, // updated 5.45 hotfix
SubmarineExplorationResult = 0x00EB, // updated 5.45 hotfix
SubmarineProgressionStatus = 0x0333, // updated 5.45 hotfix
SubmarineStatusList = 0x01F2, // updated 5.45 hotfix
SubmarineTimers = 0x013B, // updated 5.45 hotfix
};
/**
@ -302,43 +315,43 @@ namespace Sapphire::Network::Packets
*/
enum ClientZoneIpcType : uint16_t
{
PingHandler = 0x0219, // updated 5.35 hotfix
InitHandler = 0x0185, // updated 5.35 hotfix
PingHandler = 0x0183, // updated 5.45 hotfix
InitHandler = 0x01EA, // updated 5.45 hotfix
FinishLoadingHandler = 0x01BE, // updated 5.35 hotfix
FinishLoadingHandler = 0x023F, // updated 5.45 hotfix
CFCommenceHandler = 0x0118, // updated 5.35 hotfix
CFCancelHandler = 0x0332, // updated 5.35 hotfix
CFRegisterDuty = 0x0289, // updated 5.35 hotfix
CFRegisterRoulette = 0x0088, // updated 5.35 hotfix
PlayTimeHandler = 0x02A8, // updated 5.35 hotfix
LogoutHandler = 0x00EC, // updated 5.35 hotfix
CancelLogout = 0x03DB, // updated 5.35 hotfix
CFRegisterDuty = 0x033C, // updated 5.45 hotfix
CFRegisterRoulette = 0x0121, // updated 5.45 hotfix
PlayTimeHandler = 0x0096, // updated 5.45 hotfix
LogoutHandler = 0x0312, // updated 5.45 hotfix
CancelLogout = 0x0307, // updated 5.45 hotfix
CFDutyInfoHandler = 0x0078, // updated 4.2
SocialReqSendHandler = 0x0387, // updated 5.35 hotfix
SocialResponseHandler = 0x028D, // updated 5.35 hotfix
SocialReqSendHandler = 0x0288, // updated 5.45 hotfix
SocialResponseHandler = 0x029B, // updated 5.45 hotfix
CreateCrossWorldLS = 0x00AF, // updated 4.3
ChatHandler = 0x0131, // updated 5.35 hotfix
ChatHandler = 0x00A4, // updated 5.45 hotfix
PartyChatHandler = 0x0065,
PartySetLeaderHandler = 0x0208, // updated 5.35 hotfix
LeavePartyHandler = 0x0337, // updated 5.35 hotfix
KickPartyMemberHandler = 0x014C, // updated 5.35 hotfix
DisbandPartyHandler = 0x0205, // updated 5.35 hotfix
PartySetLeaderHandler = 0x02EF, // updated 5.45 hotfix
LeavePartyHandler = 0x017E, // updated 5.45 hotfix
KickPartyMemberHandler = 0x0070, // updated 5.45 hotfix
DisbandPartyHandler = 0x037A, // updated 5.45 hotfix
SocialListHandler = 0x0340, // updated 5.35 hotfix
SetSearchInfoHandler = 0x0314, // updated 5.35 hotfix
ReqSearchInfoHandler = 0x01E9, // updated 5.35 hotfix
SocialListHandler = 0x02B0, // updated 5.45 hotfix
SetSearchInfoHandler = 0x0111, // updated 5.45 hotfix
ReqSearchInfoHandler = 0x03AC, // updated 5.45 hotfix
ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0
ReqRemovePlayerFromBlacklist = 0x00F1, // updated 5.0
BlackListHandler = 0x0079, // updated 5.35 hotfix
BlackListHandler = 0x02CD, // updated 5.45 hotfix
PlayerSearchHandler = 0x00F4, // updated 5.0
LinkshellListHandler = 0x024B, // updated 5.35 hotfix
LinkshellListHandler = 0x0258, // updated 5.45 hotfix
MarketBoardRequestItemListingInfo = 0x0102, // updated 4.5
MarketBoardRequestItemListings = 0x0103, // updated 4.5
@ -357,55 +370,55 @@ namespace Sapphire::Network::Packets
ReqCountdownInitiate = 0x025F, // updated 5.35 hotfix
ReqCountdownCancel = 0x0244, // updated 5.25
ZoneLineHandler = 0x0279, // updated 5.35 hotfix
ClientTrigger = 0x03D3, // updated 5.35 hotfix
ZoneLineHandler = 0x00BA, // updated 5.45 hotfix
ClientTrigger = 0x0146, // updated 5.45 hotfix
DiscoveryHandler = 0x00E3, // updated 5.35 hotfix
PlaceFieldMarkerPreset = 0x023F, // updated 5.25
PlaceFieldMarker = 0x01BA, // updated 5.25
SkillHandler = 0x01CD, // updated 5.35 hotfix
GMCommand1 = 0x02AC, // updated 5.35 hotfix
GMCommand2 = 0x029F, // updated 5.35 hotfix
AoESkillHandler = 0x030C, // updated 5.35 hotfix
PlaceFieldMarkerPreset = 0x01D3, // updated 5.45 hotfix
PlaceFieldMarker = 0x0392, // updated 5.45 hotfix
SkillHandler = 0x0388, // updated 5.45 hotfix
GMCommand1 = 0x01E0, // updated 5.45 hotfix
GMCommand2 = 0x0114, // updated 5.45 hotfix
AoESkillHandler = 0x03A0, // updated 5.45 hotfix
UpdatePositionHandler = 0x0236, // updated 5.35 hotfix
UpdatePositionHandler = 0x031A, // updated 5.45 hotfix
InventoryModifyHandler = 0x0135, // updated 5.35 hotfix
InventoryModifyHandler = 0x0110, // updated 5.45 hotfix
InventoryEquipRecommendedItems = 0x0116, // updated 5.35 hotfix
InventoryEquipRecommendedItems = 0x0186, // updated 5.45 hotfix
ReqPlaceHousingItem = 0x02AE, // updated 5.35 hotfix
BuildPresetHandler = 0x01C2, // updated 5.35 hotfix
ReqPlaceHousingItem = 0x0360, // updated 5.45 hotfix
BuildPresetHandler = 0x01D7, // updated 5.45 hotfix
TalkEventHandler = 0x02A4, // updated 5.35 hotfix
EmoteEventHandler = 0x02C8, // updated 5.35 hotfix
WithinRangeEventHandler = 0x0209, // updated 5.35 hotfix
OutOfRangeEventHandler = 0x0319, // updated 5.35 hotfix
EnterTeriEventHandler = 0x0192, // updated 5.35 hotfix
ShopEventHandler = 0x01F6, // updated 5.35 hotfix
EventYieldHandler = 0x0128, // updated 5.35 hotfix
ReturnEventHandler = 0x02B4, // updated 5.35 hotfix
TradeReturnEventHandler = 0x00A4, // updated 5.35 hotfix
TalkEventHandler = 0x00C2, // updated 5.45 hotfix
EmoteEventHandler = 0x03D5, // updated 5.45 hotfix
WithinRangeEventHandler = 0x0171, // updated 5.45 hotfix
OutOfRangeEventHandler = 0x019B, // updated 5.45 hotfix
EnterTeriEventHandler = 0x027F, // updated 5.45 hotfix
ShopEventHandler = 0x03D4, // updated 5.45 hotfix
EventYieldHandler = 0x0230, // updated 5.45 hotfix
ReturnEventHandler = 0x02AD, // updated 5.45 hotfix
TradeReturnEventHandler = 0x00A7, // updated 5.45 hotfix
TradeMultipleReturnEventHander = 0x035C, // updated 5.35 hotfix
LinkshellEventHandler = 0x016B, // updated 4.5
LinkshellEventHandler1 = 0x016C, // updated 4.5
ReqEquipDisplayFlagsChange = 0x02F6, // updated 5.35 hotfix
ReqEquipDisplayFlagsChange = 0x03B0, // updated 5.45 hotfix
LandRenameHandler = 0x0155, // updated 5.35 hotfix
HousingUpdateHouseGreeting = 0x02EA, // updated 5.35 hotfix
HousingUpdateObjectPosition = 0x00D5, // updated 5.35 hotfix
HousingEditExterior = 0x0098, // updated 5.35 hotfix
LandRenameHandler = 0x0187, // updated 5.45 hotfix
HousingUpdateHouseGreeting = 0x0367, // updated 5.45 hotfix
HousingUpdateObjectPosition = 0x0265, // updated 5.45 hotfix
HousingEditExterior = 0x0297, // updated 5.45 hotfix
SetSharedEstateSettings = 0x017B, // updated 5.0
SetSharedEstateSettings = 0x0146, // updated 5.45 hotfix
UpdatePositionInstance = 0x0345, // updated 5.35 hotfix
UpdatePositionInstance = 0x034E, // updated 5.45 hotfix
PerformNoteHandler = 0x029B, // updated 4.3
WorldInteractionHandler = 0x00A9, // updated 5.35 hotfix
Dive = 0x02CC, // updated 5.35 hotfix
WorldInteractionHandler = 0x02E4, // updated 5.45 hotfix
Dive = 0x00F1, // updated 5.45 hotfix
};
////////////////////////////////////////////////////////////////////////////////

View file

@ -1046,8 +1046,7 @@ namespace Sapphire::Network::Packets::Server
unsigned char companionDefRank;
unsigned char companionAttRank;
unsigned char companionHealRank;
unsigned char mountGuideMask[23];
unsigned char maybeReservedMountSlots;
unsigned char mountGuideMask[27];
//==
char name[32];
unsigned char unknownOword[16];
@ -1056,10 +1055,11 @@ namespace Sapphire::Network::Packets::Server
unsigned char aetheryte[21];
unsigned char discovery[445];
unsigned char howto[34];
unsigned char minions[51];
unsigned char minions[53];
unsigned char chocoboTaxiMask[10];
unsigned char watchedCutscenes[131];
unsigned char watchedCutscenes[135];
unsigned char companionBardingMask[10];
unsigned char unknown5_45a; // companionBardingMask[11]?
unsigned char companionEquippedHead;
unsigned char companionEquippedBody;
unsigned char companionEquippedLegs;
@ -1074,7 +1074,7 @@ namespace Sapphire::Network::Packets::Server
unsigned char unknownPvp5AB[11];
unsigned char unknown5B9[5];
*/
unsigned char unknown5_3c[234];
unsigned char unknown5_45b[236];
//==
unsigned char pose;
/*
@ -1092,28 +1092,32 @@ namespace Sapphire::Network::Packets::Server
unsigned char aetherCurrentMask[22];
unsigned char u10[3];
*/
unsigned char unknown5_3d[292];
unsigned char unknown5_45c[294];
//==
unsigned char orchestrionMask[40];
unsigned char orchestrionMask[40]; // this field may already be extended, if it is, the beginning bytes are at the end of unknown5_45c
unsigned char hallOfNoviceCompletion[3];
unsigned char animaCompletion[11];
unsigned char unknown5_3e[33];
unsigned char unlockedRaids[28];
unsigned char unlockedDungeons[18];
unsigned char unlockedGuildhests[10];
unsigned char unlockedTrials[9]; // 5.35 trial:pvp either 9:5 or 8:6 not confirmed
unsigned char unlockedPvp[5];
/*
at least 8 bytes at most 10 bytes in unlockedTrials not confirmed, adjust unlockedPvp so they share a total of 15 bytes and sync with clearedTrials/clearedPvp.
*/
unsigned char unlockedTrials[9];
unsigned char unlockedPvp[6];
//==
unsigned char clearedRaids[28];
unsigned char clearedDungeons[18];
unsigned char clearedGuildhests[10];
unsigned char clearedTrials[9];
unsigned char clearedPvp[5];
unsigned char clearedPvp[6];
/*
unsigned short fishingRecordsFishWeight[26];
unsigned int exploratoryMissionNextTimestamp;
unsigned char pvpLevel;
*/
unsigned char padding2[8];
unsigned char unknown5_45d[8];
//==
};

View file

@ -452,8 +452,8 @@ void Lobby::GameConnection::generateEncryptionKey( uint32_t key, const std::stri
m_baseKey[ 2 ] = 0x34;
m_baseKey[ 3 ] = 0x12;
memcpy( m_baseKey + 0x04, &key, 4 );
m_baseKey[ 8 ] = 0x88;
m_baseKey[ 9 ] = 0x13;
m_baseKey[ 8 ] = 0x18;
m_baseKey[ 9 ] = 0x15;
memcpy( ( char* ) m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() );
Common::Util::md5( m_baseKey, m_encKey, 0x2C );
}

View file

@ -1068,7 +1068,7 @@ namespace Sapphire::Entity
uint8_t m_titleList[48];
uint8_t m_howTo[34];
uint8_t m_minions[40];
uint8_t m_mountGuide[22];
uint8_t m_mountGuide[27];
uint8_t m_homePoint;
uint8_t m_startTown;
uint16_t m_townWarpFstFlags;

View file

@ -580,9 +580,9 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( ItemPtr itemToAdd, bool sil
bool foundFreeSlot = false;
std::vector< uint16_t > bags = { Bag0, Bag1, Bag2, Bag3 };
sendDebug( "adding item: {}, equipSlotCategory: {}, stackSize: {}", itemToAdd->getId(), itemInfo->equipSlotCategory, itemInfo->stackSize );
// add the related armoury bag to the applicable bags and try and fill a free slot there before falling back to regular inventory
if( itemInfo->isEquippable && getEquipDisplayFlags() & StoreNewItemsInArmouryChest )
if( itemInfo->equipSlotCategory > 0 && getEquipDisplayFlags() & StoreNewItemsInArmouryChest )
{
auto bag = World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId( static_cast< Common::EquipSlotCategory >( itemInfo->equipSlotCategory ) );
@ -601,7 +601,7 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( ItemPtr itemToAdd, bool sil
auto item = storage->getItem( slot );
// add any items that are stackable
if( canMerge && item && !itemInfo->isEquippable && item->getId() == itemToAdd->getId() )
if( canMerge && item && item->getMaxStackSize() > 1 && item->getId() == itemToAdd->getId() )
{
uint32_t count = item->getStackSize();
uint32_t maxStack = item->getMaxStackSize();

View file

@ -32,51 +32,51 @@ uint16_t Sapphire::World::Manager::ItemMgr::getCharaEquipSlotCategoryToArmoryId(
switch( slot )
{
case Common::EquipSlotCategory::CharaHead:
case Common::EquipSlotCategory::Head:
return Common::ArmoryHead;
case Common::EquipSlotCategory::CharaBody:
//case Common::EquipSlotCategory::BodyDisallowHead:
//case Common::EquipSlotCategory::BodyDisallowHandsLegsFeet:
//case Common::EquipSlotCategory::BodyDisallowAll:
//case Common::EquipSlotCategory::BodyDisallowHands:
//case Common::EquipSlotCategory::BodyDisallowLegsFeet:
case Common::EquipSlotCategory::Body:
case Common::EquipSlotCategory::BodyDisallowHead:
case Common::EquipSlotCategory::BodyDisallowHandsLegsFeet:
case Common::EquipSlotCategory::BodyDisallowAll:
case Common::EquipSlotCategory::BodyDisallowHands:
case Common::EquipSlotCategory::BodyDisallowLegsFeet:
return Common::ArmoryBody;
case Common::EquipSlotCategory::CharaEars:
case Common::EquipSlotCategory::Ears:
return Common::ArmoryEar;
case Common::EquipSlotCategory::CharaFeet:
case Common::EquipSlotCategory::Feet:
return Common::ArmoryFeet;
case Common::EquipSlotCategory::CharaHands:
case Common::EquipSlotCategory::Hands:
return Common::ArmoryHand;
case Common::EquipSlotCategory::CharaLegs:
//case Common::EquipSlotCategory::LegsDisallowFeet:
case Common::EquipSlotCategory::Legs:
case Common::EquipSlotCategory::LegsDisallowFeet:
return Common::ArmoryLegs;
case Common::EquipSlotCategory::CharaMainHand:
//case Common::EquipSlotCategory::MainTwoHandedWeapon:
case Common::EquipSlotCategory::MainHand:
case Common::EquipSlotCategory::MainTwoHandedWeapon:
//case Common::EquipSlotCategory::MainOrOffHand:
return Common::ArmoryMain;
case Common::EquipSlotCategory::CharaOffHand:
case Common::EquipSlotCategory::OffHand:
return Common::ArmoryOff;
case Common::EquipSlotCategory::CharaRing:
case Common::EquipSlotCategory::Ring:
return Common::ArmoryRing;
case Common::EquipSlotCategory::CharaWaist:
case Common::EquipSlotCategory::Waist:
return Common::ArmoryWaist;
case Common::EquipSlotCategory::CharaWrist:
case Common::EquipSlotCategory::Wrist:
return Common::ArmoryWrist;
case Common::EquipSlotCategory::CharaNeck:
case Common::EquipSlotCategory::Neck:
return Common::ArmoryNeck;
case Common::EquipSlotCategory::CharaSoulCrystal:
case Common::EquipSlotCategory::SoulCrystal:
return Common::ArmorySoulCrystal;
default: