diff --git a/README.md b/README.md
index 0b3dc99a..27928167 100644
--- a/README.md
+++ b/README.md
@@ -17,25 +17,7 @@ Sapphire requires the following software:
| Boost 1.63.0 | [Win32 precompiled binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.63.0/boost_1_63_0-msvc-14.0-32.exe/download) | Boost libraries from your distribution's package manager |
| MySQL Server 5.7 | [Official Site](https://dev.mysql.com/downloads/mysql/) | MySQL server from your distribution's package manager |
-**Windows**
-Set the environment variables ``BOOST_ROOT_DIR`` and ``BOOST_LIB_DIR`` to ``[boost main folder]`` and ``[boost main folder]/lib32-msvc-14.0`` respectively **or** copy your boost installation into the project's ``src/lib`` folder.
-
-Visual Studio 2017 users: open `Visual Studio Installer` and ensure `Individual Components > SDKs, libraries, and frameworks > Windows Universal C Runtime` is installed. You may also need to install `Individual Components > Compilers, build tools, and runtimes > VC++ 2015.3 v140 toolset for desktop (x86, 64)`.
-
-To enable [Edit and Continue](https://msdn.microsoft.com/en-us/library/esaeyddf.aspx) ensure you define `-DCMAKE_BUILD_TYPE="Debug"` when generating with CMake.
-
-If you installed CMake outside of Visual Studio and have it in your `PATH` environment variable, navigate to Sapphire folder and `cmake -DCMAKE_BUILD_TYPE="Debug" && cmake --build .`.
-
-Otherwise:
-* In *Visual Studio 2017*: Open the project via ``File`` > ``Open`` > ``Folder`` and wait, till CMake automatically finishes cache generation. Right click any CMakeLists.txt and select build to build a application.
-To configure debug startup parameters, select ``Debug and Launch settings``, the application you want to set up parameters for, and add a ``args`` json array containing your launch parameters in ``configurations``.
-If Visual Studio fails to generate a CMake Cache or does not show options to build, make sure that the newest version of it is installed and all environment variables are set correctly. Keep in mind that generating a cache can take a while on some machines.
-
-The solution `Sapphire.sln` is also generated in the main Sapphire folder.
-
-**Linux**
-`cmake . -DSAPPHIRE_BOOST_VER="your.boost.ver" && make -j JOBS` where `JOBS` is number of cores on your system.
-`-j JOBS` can be omitted if your system lacks resources (spoiler: your system probably lacks resources if running on 1GB RAM or lower, or if the build fails due to being out of memory)
+Please check the [wiki](https://github.com/SapphireMordred/Sapphire/wiki) for detailed installation/build instructions for your OS.
## Links
diff --git a/bin/config/global.ini.default b/bin/config/global.ini.default
new file mode 100644
index 00000000..90adfc7c
--- /dev/null
+++ b/bin/config/global.ini.default
@@ -0,0 +1,22 @@
+[Database]
+Host = 127.0.0.1
+Port = 3306
+Database = sapphire
+Username = sapphire
+Password =
+SyncThreads = 2
+AsyncThreads = 2
+
+[GlobalParameters]
+ServerSecret = default
+DataPath = C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack
+
+[GlobalNetwork]
+ZoneHost = 127.0.0.1
+ZonePort = 54992
+
+LobbyHost = 127.0.0.1
+LobbyPort = 54994
+
+RestHost = 127.0.0.1
+RestPort = 80
\ No newline at end of file
diff --git a/bin/config/lobby.ini.default b/bin/config/lobby.ini.default
new file mode 100644
index 00000000..8d81d75d
--- /dev/null
+++ b/bin/config/lobby.ini.default
@@ -0,0 +1,4 @@
+[Lobby]
+WorldID = 67
+AllowNoSessionConnect = false
+WorldName = Sapphire
\ No newline at end of file
diff --git a/bin/config/rest.ini.default b/bin/config/rest.ini.default
new file mode 100644
index 00000000..564a6cee
--- /dev/null
+++ b/bin/config/rest.ini.default
@@ -0,0 +1,2 @@
+[CharacterCreation]
+DefaultGMRank = 255
\ No newline at end of file
diff --git a/bin/config/settings_lobby.xml b/bin/config/settings_lobby.xml
deleted file mode 100644
index df2052ce..00000000
--- a/bin/config/settings_lobby.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- 54994
- 54998
-
- 127.0.0.1
-
- 127.0.0.1
-
- 54992
-
- 127.0.0.1:80
-
- default
-
-
- 127.0.0.1
- 3306
- root
-
- sapphire
-
-
-
-
- false
-
- 67
-
-
- Sapphire
-
-
\ No newline at end of file
diff --git a/bin/config/settings_rest.xml b/bin/config/settings_rest.xml
deleted file mode 100644
index c0b84b7f..00000000
--- a/bin/config/settings_rest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- 54994
- 54998
-
- 127.0.0.1
-
- C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack
-
-
- 127.0.0.1
-
- 127.0.0.1
-
- default
-
- 80
-
- 127.0.0.1
- 3306
- root
-
- sapphire
-
-
-
-
-
- 255
-
-
diff --git a/bin/config/settings_zone.xml b/bin/config/settings_zone.xml
deleted file mode 100644
index 5282957a..00000000
--- a/bin/config/settings_zone.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- 54992
-
- 127.0.0.1
-
- C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack
-
-
-
- ./compiledscripts/
- ./cache/
-
-
- true
- ../scripts/native/
- ../cmake-build-debug/
- cmake --build %1% --target %2%
-
-
-
-
- ./compiledscripts/
-
-
- 127.0.0.1
- 3306
- root
-
- sapphire
- 2
- 2
-
-
-
-
-
-
- <<<Welcome to Sapphire>>>
- This is a very good server
- You can change these messages by editing MotDArray in config/settings_zone.xml
-
-
-
diff --git a/bin/config/zone.ini.default b/bin/config/zone.ini.default
new file mode 100644
index 00000000..3dba125d
--- /dev/null
+++ b/bin/config/zone.ini.default
@@ -0,0 +1,14 @@
+[Scripts]
+; where compiled script modules are located
+Path = ./compiledscripts/
+; relative to Path, where we copy and load modules from
+CachePath = ./cache/
+; whether we should detect changes to script modules and reload them
+HotSwap = true
+
+[Network]
+DisconnectTimeout = 20
+
+[General]
+; Sent on login - each line must be shorter than 307 characters, split lines with ';'
+MotD = Welcome to Sapphire!;This is a very good server;You can change these messages by editing General.MotD in config/zone.ini
\ No newline at end of file
diff --git a/src/common/Common.h b/src/common/Common.h
index a1214d01..18f2cce8 100644
--- a/src/common/Common.h
+++ b/src/common/Common.h
@@ -553,6 +553,7 @@ namespace Common {
AetherReductionDlg = 0x17D,
Unk6 = 0x19C,
+ EObjAnimation = 0x19D,
SetTitle = 0x1F4,
@@ -562,6 +563,7 @@ namespace Common {
SetFavorite = 0x1FC,
LearnTeleport = 0x1FD,
+ OpenRecommendationGuide = 0x200,
ArmoryErrorMsg = 0x201,
AchievementPopup = 0x203,
diff --git a/src/common/Config/ConfigMgr.cpp b/src/common/Config/ConfigMgr.cpp
new file mode 100644
index 00000000..b19253ea
--- /dev/null
+++ b/src/common/Config/ConfigMgr.cpp
@@ -0,0 +1,66 @@
+#include "ConfigMgr.h"
+
+#include
+#include
+
+/**
+ * Loads an ini file and parses it
+ * @param configName the name of ini file relative to m_configFolderRoot to load alongside global.ini
+ * @return true if loading was successful
+ */
+bool Core::ConfigMgr::loadConfig( const std::string& configName )
+{
+ std::stringstream configStream;
+
+ // get global config
+ auto configDir = boost::filesystem::path( m_configFolderRoot );
+
+ if( !boost::filesystem::exists( configDir ) )
+ {
+ return false;
+ }
+
+ auto globalConfig = boost::filesystem::path( configDir / m_globalConfigFile );
+ if( !boost::filesystem::exists( globalConfig ) )
+ {
+ if( !copyDefaultConfig( globalConfig.filename().string() ) )
+ return false;
+ }
+
+ std::ifstream globalConfigFile( globalConfig.c_str() );
+ configStream << globalConfigFile.rdbuf();
+
+ // add some newlines just in case there's no newline at the end of the global file
+ configStream << "\n\n";
+
+ // get local config
+ auto localConfig = boost::filesystem::path( configDir / configName );
+ if( !boost::filesystem::exists( localConfig ) )
+ {
+ if( !copyDefaultConfig( localConfig.filename().string() ) )
+ return false;
+ }
+ std::ifstream configFile( localConfig.c_str() );
+ configStream << configFile.rdbuf();
+
+ // parse the tree and we're fuckin done
+ boost::property_tree::read_ini( configStream, m_propTree );
+
+ return true;
+}
+
+bool Core::ConfigMgr::copyDefaultConfig( const std::string& configName )
+{
+ boost::filesystem::path configPath( m_configFolderRoot );
+ configPath /= configName;
+
+ if( !boost::filesystem::exists( configPath.string() + m_configDefaultSuffix ) )
+ {
+ // no default file :(
+ return false;
+ }
+
+ boost::filesystem::copy_file( configPath.string() + m_configDefaultSuffix, configPath );
+
+ return true;
+}
\ No newline at end of file
diff --git a/src/common/Config/ConfigMgr.h b/src/common/Config/ConfigMgr.h
new file mode 100644
index 00000000..5a9fab9c
--- /dev/null
+++ b/src/common/Config/ConfigMgr.h
@@ -0,0 +1,45 @@
+#ifndef SAPPHIRE_CONFIGMGR_H
+#define SAPPHIRE_CONFIGMGR_H
+
+#include
+
+namespace Core
+{
+ class ConfigMgr
+ {
+ public:
+ ConfigMgr() = default;
+ ~ConfigMgr() = default;
+
+ bool loadConfig( const std::string& configName );
+
+ template< class T >
+ T getValue( const std::string& name, T defaultValue = T() )
+ {
+ try
+ {
+ return m_propTree.get< T >( name );
+ }
+ catch( ... )
+ {
+ return defaultValue;
+ }
+ }
+
+ template< class T >
+ void setValue( const std::string& name, T defaultValue = T() )
+ {
+ m_propTree.put( name, defaultValue );
+ }
+
+ private:
+ bool copyDefaultConfig( const std::string& configName );
+
+ boost::property_tree::ptree m_propTree;
+ const std::string m_globalConfigFile = "global.ini";
+ const std::string m_configFolderRoot = "./config/";
+ const std::string m_configDefaultSuffix = ".default";
+ };
+}
+
+#endif //SAPPHIRE_CONFIGMGR_H
diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp
index eda4a919..1f2c8315 100644
--- a/src/common/Exd/ExdDataGenerated.cpp
+++ b/src/common/Exd/ExdDataGenerated.cpp
@@ -1,6 +1,6 @@
#include "ExdDataGenerated.h"
#include
-#include
+
#include
@@ -47,7 +47,9 @@ Core::Data::Action::Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa
name = exdData->getField< std::string >( row, 0 );
icon = exdData->getField< uint16_t >( row, 2 );
actionCategory = exdData->getField< uint8_t >( row, 3 );
- actionTimelineUse = exdData->getField< int16_t >( row, 7 );
+ animationStart = exdData->getField< uint8_t >( row, 5 );
+ vFX = exdData->getField< uint8_t >( row, 6 );
+ animationEnd = exdData->getField< int16_t >( row, 7 );
actionTimelineHit = exdData->getField< uint16_t >( row, 8 );
classJob = exdData->getField< int8_t >( row, 10 );
classJobLevel = exdData->getField< uint8_t >( row, 12 );
@@ -80,6 +82,19 @@ Core::Data::Action::Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa
isPvP = exdData->getField< bool >( row, 50 );
}
+Core::Data::ActionCastTimeline::ActionCastTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ActionCastTimelineDat.get_row( row_id );
+ name = exdData->getField< uint16_t >( row, 0 );
+ vFX = exdData->getField< uint16_t >( row, 1 );
+}
+
+Core::Data::ActionCastVFX::ActionCastVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ActionCastVFXDat.get_row( row_id );
+ vFX = exdData->getField< uint16_t >( row, 0 );
+}
+
Core::Data::ActionCategory::ActionCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ActionCategoryDat.get_row( row_id );
@@ -102,6 +117,12 @@ Core::Data::ActionIndirection::ActionIndirection( uint32_t row_id, Core::Data::E
name = exdData->getField< int32_t >( row, 0 );
}
+Core::Data::ActionParam::ActionParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ActionParamDat.get_row( row_id );
+ name = exdData->getField< int16_t >( row, 0 );
+}
+
Core::Data::ActionProcStatus::ActionProcStatus( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ActionProcStatusDat.get_row( row_id );
@@ -114,6 +135,13 @@ Core::Data::ActionTimeline::ActionTimeline( uint32_t row_id, Core::Data::ExdData
key = exdData->getField< std::string >( row, 6 );
}
+Core::Data::ActionTimelineReplace::ActionTimelineReplace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ActionTimelineReplaceDat.get_row( row_id );
+ old = exdData->getField< uint16_t >( row, 0 );
+ new1 = exdData->getField< uint16_t >( row, 1 );
+}
+
Core::Data::ActionTransient::ActionTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ActionTransientDat.get_row( row_id );
@@ -157,6 +185,27 @@ Core::Data::AetherCurrent::AetherCurrent( uint32_t row_id, Core::Data::ExdDataGe
quest = exdData->getField< uint32_t >( row, 0 );
}
+Core::Data::AetherCurrentCompFlgSet::AetherCurrentCompFlgSet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_AetherCurrentCompFlgSetDat.get_row( row_id );
+ territory = exdData->getField< int32_t >( row, 0 );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 2 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 3 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 4 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 5 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 6 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 7 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 8 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 9 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 10 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 11 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 12 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 13 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 14 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 15 ) );
+ aetherCurrent.push_back( exdData->getField< int32_t >( row, 16 ) );
+}
+
Core::Data::AetherialWheel::AetherialWheel( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_AetherialWheelDat.get_row( row_id );
@@ -172,7 +221,10 @@ Core::Data::Aetheryte::Aetheryte( uint32_t row_id, Core::Data::ExdDataGenerated*
placeName = exdData->getField< uint16_t >( row, 8 );
aethernetName = exdData->getField< uint16_t >( row, 9 );
territory = exdData->getField< uint16_t >( row, 10 );
- levelId = exdData->getField< uint32_t >( row, 11 );
+ level.push_back( exdData->getField< uint32_t >( row, 11 ) );
+ level.push_back( exdData->getField< uint32_t >( row, 12 ) );
+ level.push_back( exdData->getField< uint32_t >( row, 13 ) );
+ level.push_back( exdData->getField< uint32_t >( row, 14 ) );
isAetheryte = exdData->getField< bool >( row, 15 );
aethernetGroup = exdData->getField< uint8_t >( row, 16 );
map = exdData->getField< uint16_t >( row, 19 );
@@ -342,6 +394,25 @@ Core::Data::BaseParam::BaseParam( uint32_t row_id, Core::Data::ExdDataGenerated*
auto row = exdData->m_BaseParamDat.get_row( row_id );
name = exdData->getField< std::string >( row, 1 );
description = exdData->getField< std::string >( row, 2 );
+ oneHWpn = exdData->getField< uint8_t >( row, 4 );
+ oH = exdData->getField< uint8_t >( row, 5 );
+ head = exdData->getField< uint8_t >( row, 6 );
+ chest = exdData->getField< uint8_t >( row, 7 );
+ hands = exdData->getField< uint8_t >( row, 8 );
+ waist = exdData->getField< uint8_t >( row, 9 );
+ legs = exdData->getField< uint8_t >( row, 10 );
+ feet = exdData->getField< uint8_t >( row, 11 );
+ earring = exdData->getField< uint8_t >( row, 12 );
+ necklace = exdData->getField< uint8_t >( row, 13 );
+ bracelet = exdData->getField< uint8_t >( row, 14 );
+ ring = exdData->getField< uint8_t >( row, 15 );
+ twoHWpn = exdData->getField< uint8_t >( row, 16 );
+ chestHead = exdData->getField< uint8_t >( row, 18 );
+ chestHeadLegsFeet = exdData->getField< uint8_t >( row, 19 );
+ legsFeet = exdData->getField< uint8_t >( row, 21 );
+ headChestHandsLegsFeet = exdData->getField< uint8_t >( row, 22 );
+ chestLegsGloves = exdData->getField< uint8_t >( row, 23 );
+ chestLegsFeet = exdData->getField< uint8_t >( row, 24 );
}
Core::Data::BattleLeve::BattleLeve( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -493,6 +564,17 @@ Core::Data::BNpcName::BNpcName( uint32_t row_id, Core::Data::ExdDataGenerated* e
plural = exdData->getField< std::string >( row, 2 );
}
+Core::Data::Buddy::Buddy( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_BuddyDat.get_row( row_id );
+ questRequirement2 = exdData->getField< int32_t >( row, 1 );
+ questRequirement1 = exdData->getField< int32_t >( row, 2 );
+ soundEffect4 = exdData->getField< std::string >( row, 4 );
+ soundEffect3 = exdData->getField< std::string >( row, 5 );
+ soundEffect2 = exdData->getField< std::string >( row, 6 );
+ soundEffect1 = exdData->getField< std::string >( row, 7 );
+}
+
Core::Data::BuddyAction::BuddyAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_BuddyActionDat.get_row( row_id );
@@ -533,6 +615,10 @@ Core::Data::BuddySkill::BuddySkill( uint32_t row_id, Core::Data::ExdDataGenerate
{
auto row = exdData->m_BuddySkillDat.get_row( row_id );
buddyLevel = exdData->getField< uint8_t >( row, 0 );
+ isActive = exdData->getField< bool >( row, 1 );
+ defender = exdData->getField< uint16_t >( row, 2 );
+ attacker = exdData->getField< uint16_t >( row, 3 );
+ healer = exdData->getField< uint16_t >( row, 4 );
}
Core::Data::Cabinet::Cabinet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -625,6 +711,7 @@ Core::Data::CharaMakeCustomize::CharaMakeCustomize( uint32_t row_id, Core::Data:
auto row = exdData->m_CharaMakeCustomizeDat.get_row( row_id );
icon = exdData->getField< uint32_t >( row, 1 );
data = exdData->getField< uint16_t >( row, 2 );
+ isPurchasable = exdData->getField< bool >( row, 3 );
}
Core::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -633,48 +720,48 @@ Core::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Core::Data::ExdDataGe
race = exdData->getField< int32_t >( row, 0 );
tribe = exdData->getField< int32_t >( row, 1 );
gender = exdData->getField< int8_t >( row, 2 );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2283 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2284 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2285 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2286 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2287 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2288 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2289 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2290 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2291 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2292 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2293 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2294 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2295 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2296 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2297 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2298 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2299 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2300 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2301 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2302 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2303 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2304 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2305 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2306 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2307 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2308 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2309 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2310 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2311 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2312 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2313 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2314 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2315 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2316 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2317 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2318 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2319 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2320 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2321 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2322 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2323 ) );
- facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2324 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3291 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3292 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3293 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3294 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3295 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3296 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3297 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3298 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3299 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3300 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3301 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3302 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3303 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3304 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3305 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3306 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3307 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3308 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3309 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3310 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3311 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3312 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3313 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3314 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3315 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3316 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3317 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3318 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3319 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3320 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3321 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3322 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3323 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3324 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3325 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3326 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3327 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3328 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3329 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3330 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3331 ) );
+ facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3332 ) );
}
Core::Data::ChocoboRace::ChocoboRace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -731,6 +818,12 @@ Core::Data::ChocoboRaceTerritory::ChocoboRaceTerritory( uint32_t row_id, Core::D
icon = exdData->getField< int32_t >( row, 1 );
}
+Core::Data::ChocoboTaxi::ChocoboTaxi( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ChocoboTaxiDat.get_row( row_id );
+ location = exdData->getField< uint32_t >( row, 0 );
+}
+
Core::Data::ChocoboTaxiStand::ChocoboTaxiStand( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ChocoboTaxiStandDat.get_row( row_id );
@@ -759,6 +852,9 @@ Core::Data::ClassJob::ClassJob( uint32_t row_id, Core::Data::ExdDataGenerated* e
limitBreak2 = exdData->getField< uint16_t >( row, 34 );
limitBreak3 = exdData->getField< uint16_t >( row, 35 );
itemSoulCrystal = exdData->getField< uint32_t >( row, 37 );
+ unlockQuest = exdData->getField< uint32_t >( row, 38 );
+ relicQuest = exdData->getField< uint32_t >( row, 39 );
+ prerequisite = exdData->getField< uint32_t >( row, 40 );
startingLevel = exdData->getField< uint8_t >( row, 41 );
}
@@ -800,6 +896,8 @@ Core::Data::ClassJobCategory::ClassJobCategory( uint32_t row_id, Core::Data::Exd
mCH = exdData->getField< bool >( row, 32 );
dRK = exdData->getField< bool >( row, 33 );
aST = exdData->getField< bool >( row, 34 );
+ sAM = exdData->getField< bool >( row, 35 );
+ rDM = exdData->getField< bool >( row, 36 );
}
Core::Data::Companion::Companion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -963,14 +1061,15 @@ Core::Data::ContentExAction::ContentExAction( uint32_t row_id, Core::Data::ExdDa
Core::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ContentFinderConditionDat.get_row( row_id );
- contentIndicator = exdData->getField< uint8_t >( row, 1 );
- instanceContent = exdData->getField< uint16_t >( row, 2 );
- contentMemberType = exdData->getField< uint8_t >( row, 7 );
- classJobLevelRequired = exdData->getField< uint8_t >( row, 13 );
- classJobLevelSync = exdData->getField< uint8_t >( row, 14 );
- itemLevelRequired = exdData->getField< uint16_t >( row, 15 );
- itemLevelSync = exdData->getField< uint16_t >( row, 16 );
- icon = exdData->getField< uint32_t >( row, 36 );
+ instanceContent = exdData->getField< uint16_t >( row, 3 );
+ contentMemberType = exdData->getField< uint8_t >( row, 9 );
+ classJobLevelRequired = exdData->getField< uint8_t >( row, 15 );
+ classJobLevelSync = exdData->getField< uint8_t >( row, 16 );
+ itemLevelRequired = exdData->getField< uint16_t >( row, 17 );
+ itemLevelSync = exdData->getField< uint16_t >( row, 18 );
+ contentIndicator = exdData->getField< uint8_t >( row, 24 );
+ contentType = exdData->getField< uint8_t >( row, 33 );
+ icon = exdData->getField< uint32_t >( row, 37 );
}
Core::Data::ContentFinderConditionTransient::ContentFinderConditionTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -988,6 +1087,19 @@ Core::Data::ContentMemberType::ContentMemberType( uint32_t row_id, Core::Data::E
rangedPerParty = exdData->getField< uint8_t >( row, 12 );
}
+Core::Data::ContentNpcTalk::ContentNpcTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ContentNpcTalkDat.get_row( row_id );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 1 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 2 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 3 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 4 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 5 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 6 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 7 ) );
+ contentTalk.push_back( exdData->getField< uint32_t >( row, 8 ) );
+}
+
Core::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ContentRouletteDat.get_row( row_id );
@@ -995,14 +1107,41 @@ Core::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Core::Data::ExdDa
description = exdData->getField< std::string >( row, 2 );
dutyType = exdData->getField< std::string >( row, 3 );
isInDutyFinder = exdData->getField< bool >( row, 6 );
- itemLevelRequired = exdData->getField< uint16_t >( row, 10 );
- icon = exdData->getField< uint32_t >( row, 12 );
- rewardTomeA = exdData->getField< uint16_t >( row, 14 );
- rewardTomeB = exdData->getField< uint16_t >( row, 15 );
- rewardTomeC = exdData->getField< uint16_t >( row, 16 );
- sortKey = exdData->getField< uint8_t >( row, 19 );
- contentMemberType = exdData->getField< uint8_t >( row, 21 );
- requireAllDuties = exdData->getField< bool >( row, 31 );
+ itemLevelRequired = exdData->getField< uint16_t >( row, 11 );
+ icon = exdData->getField< uint32_t >( row, 13 );
+ rewardTomeA = exdData->getField< uint16_t >( row, 15 );
+ rewardTomeB = exdData->getField< uint16_t >( row, 16 );
+ rewardTomeC = exdData->getField< uint16_t >( row, 17 );
+ sortKey = exdData->getField< uint8_t >( row, 20 );
+ contentMemberType = exdData->getField< uint8_t >( row, 22 );
+ requireAllDuties = exdData->getField< bool >( row, 32 );
+}
+
+Core::Data::ContentsNote::ContentsNote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ContentsNoteDat.get_row( row_id );
+ contentType = exdData->getField< uint8_t >( row, 0 );
+ requiredAmount = exdData->getField< int32_t >( row, 2 );
+}
+
+Core::Data::ContentsNoteCategory::ContentsNoteCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ContentsNoteCategoryDat.get_row( row_id );
+ type = exdData->getField< uint8_t >( row, 1 );
+}
+
+Core::Data::ContentTalk::ContentTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ContentTalkDat.get_row( row_id );
+ contentTalkParam = exdData->getField< uint8_t >( row, 0 );
+ text = exdData->getField< std::string >( row, 1 );
+}
+
+Core::Data::ContentTalkParam::ContentTalkParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ContentTalkParamDat.get_row( row_id );
+ param = exdData->getField< bool >( row, 0 );
+ testAction = exdData->getField< uint32_t >( row, 2 );
}
Core::Data::ContentType::ContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -1018,6 +1157,8 @@ Core::Data::CraftAction::CraftAction( uint32_t row_id, Core::Data::ExdDataGenera
auto row = exdData->m_CraftActionDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 );
description = exdData->getField< std::string >( row, 1 );
+ animationStart = exdData->getField< uint16_t >( row, 2 );
+ animationEnd = exdData->getField< uint16_t >( row, 3 );
icon = exdData->getField< uint16_t >( row, 4 );
classJob = exdData->getField< int8_t >( row, 5 );
classJobCategory = exdData->getField< uint8_t >( row, 6 );
@@ -1402,6 +1543,12 @@ Core::Data::EObj::EObj( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
data = exdData->getField< uint32_t >( row, 9 );
}
+Core::Data::EObjName::EObjName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_EObjNameDat.get_row( row_id );
+ singular = exdData->getField< std::string >( row, 0 );
+}
+
Core::Data::EquipRaceCategory::EquipRaceCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_EquipRaceCategoryDat.get_row( row_id );
@@ -1434,6 +1581,24 @@ Core::Data::EquipSlotCategory::EquipSlotCategory( uint32_t row_id, Core::Data::E
soulCrystal = exdData->getField< int8_t >( row, 13 );
}
+Core::Data::EurekaAethernet::EurekaAethernet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_EurekaAethernetDat.get_row( row_id );
+ location = exdData->getField< uint16_t >( row, 0 );
+}
+
+Core::Data::EurekaGrowData::EurekaGrowData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_EurekaGrowDataDat.get_row( row_id );
+ baseResistance = exdData->getField< uint16_t >( row, 0 );
+}
+
+Core::Data::EurekaSphereElementAdjust::EurekaSphereElementAdjust( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id );
+ powerModifier = exdData->getField< uint16_t >( row, 0 );
+}
+
Core::Data::EventAction::EventAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_EventActionDat.get_row( row_id );
@@ -1501,17 +1666,21 @@ Core::Data::ExVersion::ExVersion( uint32_t row_id, Core::Data::ExdDataGenerated*
Core::Data::Fate::Fate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_FateDat.get_row( row_id );
+ eurekaFate = exdData->getField< uint8_t >( row, 0 );
+ location = exdData->getField< uint32_t >( row, 2 );
classJobLevel = exdData->getField< uint8_t >( row, 3 );
classJobLevelMax = exdData->getField< uint8_t >( row, 4 );
eventItem = exdData->getField< uint32_t >( row, 5 );
iconObjective = exdData->getField< uint32_t >( row, 10 );
iconMap = exdData->getField< uint32_t >( row, 11 );
+ music = exdData->getField< int32_t >( row, 13 );
name = exdData->getField< std::string >( row, 27 );
description = exdData->getField< std::string >( row, 28 );
objective = exdData->getField< std::string >( row, 29 );
statusText.push_back( exdData->getField< std::string >( row, 30 ) );
statusText.push_back( exdData->getField< std::string >( row, 31 ) );
statusText.push_back( exdData->getField< std::string >( row, 32 ) );
+ arrayIndex = exdData->getField< uint32_t >( row, 33 );
}
Core::Data::FCActivity::FCActivity( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -1581,6 +1750,13 @@ Core::Data::FCRights::FCRights( uint32_t row_id, Core::Data::ExdDataGenerated* e
fCRank = exdData->getField< uint8_t >( row, 3 );
}
+Core::Data::FieldMarker::FieldMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_FieldMarkerDat.get_row( row_id );
+ vFX = exdData->getField< int32_t >( row, 0 );
+ icon = exdData->getField< uint16_t >( row, 1 );
+}
+
Core::Data::FishingSpot::FishingSpot( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_FishingSpotDat.get_row( row_id );
@@ -1967,6 +2143,7 @@ Core::Data::GeneralAction::GeneralAction( uint32_t row_id, Core::Data::ExdDataGe
auto row = exdData->m_GeneralActionDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 );
description = exdData->getField< std::string >( row, 1 );
+ action = exdData->getField< uint16_t >( row, 3 );
icon = exdData->getField< int32_t >( row, 7 );
}
@@ -2053,9 +2230,9 @@ Core::Data::HousingFurniture::HousingFurniture( uint32_t row_id, Core::Data::Exd
usageType = exdData->getField< uint8_t >( row, 2 );
usageParameter = exdData->getField< uint32_t >( row, 3 );
housingLayoutLimit = exdData->getField< uint8_t >( row, 4 );
- event = exdData->getField< uint32_t >( row, 5 );
- item = exdData->getField< uint32_t >( row, 6 );
- destroyOnRemoval = exdData->getField< bool >( row, 7 );
+ event = exdData->getField< uint32_t >( row, 6 );
+ item = exdData->getField< uint32_t >( row, 7 );
+ destroyOnRemoval = exdData->getField< bool >( row, 8 );
}
Core::Data::HousingYardObject::HousingYardObject( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -2108,13 +2285,6 @@ Core::Data::InstanceContentTextData::InstanceContentTextData( uint32_t row_id, C
text = exdData->getField< std::string >( row, 0 );
}
-Core::Data::InstanceContentType::InstanceContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
-{
- auto row = exdData->m_InstanceContentTypeDat.get_row( row_id );
- sortKey = exdData->getField< uint8_t >( row, 2 );
- contentType = exdData->getField< uint8_t >( row, 4 );
-}
-
Core::Data::Item::Item( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ItemDat.get_row( row_id );
@@ -2409,11 +2579,18 @@ Core::Data::MapMarker::MapMarker( uint32_t row_id, Core::Data::ExdDataGenerated*
icon = exdData->getField< uint16_t >( row, 2 );
placeNameSubtext = exdData->getField< uint16_t >( row, 3 );
subtextOrientation = exdData->getField< uint8_t >( row, 4 );
+ mapMarkerRegion = exdData->getField< uint8_t >( row, 5 );
type = exdData->getField< uint8_t >( row, 6 );
dataType = exdData->getField< uint8_t >( row, 7 );
dataKey = exdData->getField< uint16_t >( row, 8 );
}
+Core::Data::MapMarkerRegion::MapMarkerRegion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_MapMarkerRegionDat.get_row( row_id );
+ x = exdData->getField< int16_t >( row, 0 );
+}
+
Core::Data::MapSymbol::MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_MapSymbolDat.get_row( row_id );
@@ -2421,6 +2598,13 @@ Core::Data::MapSymbol::MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated*
placeName = exdData->getField< int32_t >( row, 1 );
}
+Core::Data::Marker::Marker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_MarkerDat.get_row( row_id );
+ icon = exdData->getField< int32_t >( row, 0 );
+ name = exdData->getField< std::string >( row, 1 );
+}
+
Core::Data::MasterpieceSupplyDuty::MasterpieceSupplyDuty( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_MasterpieceSupplyDutyDat.get_row( row_id );
@@ -2532,7 +2716,7 @@ Core::Data::Mount::Mount( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
flyingCondition = exdData->getField< uint8_t >( row, 10 );
isFlying = exdData->getField< uint8_t >( row, 14 );
rideBGM = exdData->getField< uint16_t >( row, 17 );
- order = exdData->getField< int8_t >( row, 29 );
+ order = exdData->getField< int16_t >( row, 29 );
icon = exdData->getField< uint16_t >( row, 30 );
}
@@ -2547,6 +2731,28 @@ Core::Data::MountAction::MountAction( uint32_t row_id, Core::Data::ExdDataGenera
action.push_back( exdData->getField< uint16_t >( row, 5 ) );
}
+Core::Data::MoveTimeline::MoveTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_MoveTimelineDat.get_row( row_id );
+ idle = exdData->getField< uint16_t >( row, 0 );
+ moveForward = exdData->getField< uint16_t >( row, 1 );
+ moveBack = exdData->getField< uint16_t >( row, 2 );
+ moveLeft = exdData->getField< uint16_t >( row, 3 );
+ moveRight = exdData->getField< uint16_t >( row, 4 );
+ moveUp = exdData->getField< uint16_t >( row, 5 );
+ moveDown = exdData->getField< uint16_t >( row, 6 );
+ moveTurnLeft = exdData->getField< uint16_t >( row, 7 );
+ moveTurnRight = exdData->getField< uint16_t >( row, 8 );
+ extra = exdData->getField< uint16_t >( row, 9 );
+}
+
+Core::Data::MoveVfx::MoveVfx( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_MoveVfxDat.get_row( row_id );
+ zero = exdData->getField< uint16_t >( row, 0 );
+ one = exdData->getField< uint16_t >( row, 1 );
+}
+
Core::Data::NpcEquip::NpcEquip( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_NpcEquipDat.get_row( row_id );
@@ -2636,6 +2842,27 @@ Core::Data::ParamGrow::ParamGrow( uint32_t row_id, Core::Data::ExdDataGenerated*
huntingLogExpReward = exdData->getField< int32_t >( row, 9 );
}
+Core::Data::Perform::Perform( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_PerformDat.get_row( row_id );
+ name = exdData->getField< std::string >( row, 0 );
+ modelKey = exdData->getField< uint64_t >( row, 2 );
+ animationStart = exdData->getField< uint16_t >( row, 3 );
+ animationEnd = exdData->getField< uint16_t >( row, 4 );
+ animationIdle = exdData->getField< uint16_t >( row, 5 );
+ animationPlay01 = exdData->getField< uint16_t >( row, 6 );
+ animationPlay02 = exdData->getField< uint16_t >( row, 7 );
+ stopAnimation = exdData->getField< int32_t >( row, 8 );
+ instrument = exdData->getField< std::string >( row, 9 );
+ transient = exdData->getField< uint8_t >( row, 11 );
+}
+
+Core::Data::PerformTransient::PerformTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_PerformTransientDat.get_row( row_id );
+ text = exdData->getField< std::string >( row, 0 );
+}
+
Core::Data::Pet::Pet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_PetDat.get_row( row_id );
@@ -2666,6 +2893,22 @@ Core::Data::PlaceName::PlaceName( uint32_t row_id, Core::Data::ExdDataGenerated*
nameNoArticle = exdData->getField< std::string >( row, 2 );
}
+Core::Data::PublicContent::PublicContent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_PublicContentDat.get_row( row_id );
+ timeLimit = exdData->getField< uint16_t >( row, 1 );
+ mapIcon = exdData->getField< uint32_t >( row, 2 );
+ name = exdData->getField< std::string >( row, 3 );
+ territoryType = exdData->getField< uint16_t >( row, 7 );
+}
+
+Core::Data::PvPActionSort::PvPActionSort( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_PvPActionSortDat.get_row( row_id );
+ name = exdData->getField< uint8_t >( row, 0 );
+ action = exdData->getField< uint16_t >( row, 1 );
+}
+
Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_QuestDat.get_row( row_id );
@@ -2701,7 +2944,6 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
eNpcResidentEnd = exdData->getField< uint32_t >( row, 42 );
isRepeatable = exdData->getField< bool >( row, 43 );
repeatIntervalType = exdData->getField< uint8_t >( row, 44 );
- scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) );
@@ -2751,7 +2993,7 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) );
- scriptArg.push_back( exdData->getField< uint32_t >( row, 99 ) );
+ scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 100 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 101 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 102 ) );
@@ -2801,7 +3043,7 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
scriptArg.push_back( exdData->getField< uint32_t >( row, 146 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 147 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 148 ) );
- level.push_back( exdData->getField< uint32_t >( row, 1221 ) );
+ scriptArg.push_back( exdData->getField< uint32_t >( row, 149 ) );
level.push_back( exdData->getField< uint32_t >( row, 1222 ) );
level.push_back( exdData->getField< uint32_t >( row, 1223 ) );
level.push_back( exdData->getField< uint32_t >( row, 1224 ) );
@@ -2972,70 +3214,99 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
level.push_back( exdData->getField< uint32_t >( row, 1389 ) );
level.push_back( exdData->getField< uint32_t >( row, 1390 ) );
level.push_back( exdData->getField< uint32_t >( row, 1391 ) );
- classJobRequired = exdData->getField< uint8_t >( row, 1437 );
- expFactor = exdData->getField< uint16_t >( row, 1439 );
- gilReward = exdData->getField< uint32_t >( row, 1440 );
- gCSeals = exdData->getField< uint16_t >( row, 1442 );
- itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1443 ) );
+ level.push_back( exdData->getField< uint32_t >( row, 1392 ) );
+ classJobRequired = exdData->getField< uint8_t >( row, 1438 );
+ expFactor = exdData->getField< uint16_t >( row, 1440 );
+ gilReward = exdData->getField< uint32_t >( row, 1441 );
+ gCSeals = exdData->getField< uint16_t >( row, 1443 );
itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1444 ) );
itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1445 ) );
- itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) );
+ itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) );
itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) );
itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1448 ) );
- itemRewardType = exdData->getField< uint8_t >( row, 1449 );
- itemReward0.push_back( exdData->getField< uint32_t >( row, 1450 ) );
+ itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1449 ) );
+ itemRewardType = exdData->getField< uint8_t >( row, 1450 );
itemReward0.push_back( exdData->getField< uint32_t >( row, 1451 ) );
itemReward0.push_back( exdData->getField< uint32_t >( row, 1452 ) );
itemReward0.push_back( exdData->getField< uint32_t >( row, 1453 ) );
itemReward0.push_back( exdData->getField< uint32_t >( row, 1454 ) );
itemReward0.push_back( exdData->getField< uint32_t >( row, 1455 ) );
- itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1457 ) );
+ itemReward0.push_back( exdData->getField< uint32_t >( row, 1456 ) );
itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1458 ) );
itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1459 ) );
itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1460 ) );
itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1461 ) );
itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1462 ) );
- stainReward0.push_back( exdData->getField< uint8_t >( row, 1464 ) );
+ itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1463 ) );
stainReward0.push_back( exdData->getField< uint8_t >( row, 1465 ) );
stainReward0.push_back( exdData->getField< uint8_t >( row, 1466 ) );
stainReward0.push_back( exdData->getField< uint8_t >( row, 1467 ) );
stainReward0.push_back( exdData->getField< uint8_t >( row, 1468 ) );
stainReward0.push_back( exdData->getField< uint8_t >( row, 1469 ) );
- itemReward1.push_back( exdData->getField< uint32_t >( row, 1471 ) );
+ stainReward0.push_back( exdData->getField< uint8_t >( row, 1470 ) );
itemReward1.push_back( exdData->getField< uint32_t >( row, 1472 ) );
itemReward1.push_back( exdData->getField< uint32_t >( row, 1473 ) );
itemReward1.push_back( exdData->getField< uint32_t >( row, 1474 ) );
itemReward1.push_back( exdData->getField< uint32_t >( row, 1475 ) );
- itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1476 ) );
+ itemReward1.push_back( exdData->getField< uint32_t >( row, 1476 ) );
itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1477 ) );
itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1478 ) );
itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1479 ) );
itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1480 ) );
- isHQReward1.push_back( exdData->getField< bool >( row, 1481 ) );
+ itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1481 ) );
isHQReward1.push_back( exdData->getField< bool >( row, 1482 ) );
isHQReward1.push_back( exdData->getField< bool >( row, 1483 ) );
isHQReward1.push_back( exdData->getField< bool >( row, 1484 ) );
isHQReward1.push_back( exdData->getField< bool >( row, 1485 ) );
- stainReward1.push_back( exdData->getField< uint8_t >( row, 1486 ) );
+ isHQReward1.push_back( exdData->getField< bool >( row, 1486 ) );
stainReward1.push_back( exdData->getField< uint8_t >( row, 1487 ) );
stainReward1.push_back( exdData->getField< uint8_t >( row, 1488 ) );
stainReward1.push_back( exdData->getField< uint8_t >( row, 1489 ) );
stainReward1.push_back( exdData->getField< uint8_t >( row, 1490 ) );
- emoteReward = exdData->getField< uint8_t >( row, 1491 );
- actionReward = exdData->getField< uint16_t >( row, 1492 );
- generalActionReward.push_back( exdData->getField< uint8_t >( row, 1493 ) );
+ stainReward1.push_back( exdData->getField< uint8_t >( row, 1491 ) );
+ emoteReward = exdData->getField< uint8_t >( row, 1492 );
+ actionReward = exdData->getField< uint16_t >( row, 1493 );
generalActionReward.push_back( exdData->getField< uint8_t >( row, 1494 ) );
- otherReward = exdData->getField< uint8_t >( row, 1496 );
- instanceContentUnlock = exdData->getField< uint32_t >( row, 1499 );
- tomestoneReward = exdData->getField< uint8_t >( row, 1501 );
- tomestoneCountReward = exdData->getField< uint8_t >( row, 1502 );
- reputationReward = exdData->getField< uint8_t >( row, 1503 );
- placeName = exdData->getField< uint16_t >( row, 1504 );
- journalGenre = exdData->getField< uint8_t >( row, 1505 );
- icon = exdData->getField< uint32_t >( row, 1507 );
- iconSpecial = exdData->getField< uint32_t >( row, 1508 );
- eventIconType = exdData->getField< uint8_t >( row, 1511 );
- sortKey = exdData->getField< uint16_t >( row, 1513 );
+ generalActionReward.push_back( exdData->getField< uint8_t >( row, 1495 ) );
+ otherReward = exdData->getField< uint8_t >( row, 1497 );
+ instanceContentUnlock = exdData->getField< uint32_t >( row, 1500 );
+ tomestoneReward = exdData->getField< uint8_t >( row, 1502 );
+ tomestoneCountReward = exdData->getField< uint8_t >( row, 1503 );
+ reputationReward = exdData->getField< uint8_t >( row, 1504 );
+ placeName = exdData->getField< uint16_t >( row, 1505 );
+ journalGenre = exdData->getField< uint8_t >( row, 1506 );
+ icon = exdData->getField< uint32_t >( row, 1508 );
+ iconSpecial = exdData->getField< uint32_t >( row, 1509 );
+ eventIconType = exdData->getField< uint8_t >( row, 1512 );
+ sortKey = exdData->getField< uint16_t >( row, 1514 );
+}
+
+Core::Data::QuestClassJobReward::QuestClassJobReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_QuestClassJobRewardDat.get_row( row_id );
+ classJobCategory = exdData->getField< uint8_t >( row, 0 );
+ rewardItem.push_back( exdData->getField< uint32_t >( row, 1 ) );
+ rewardItem.push_back( exdData->getField< uint32_t >( row, 2 ) );
+ rewardItem.push_back( exdData->getField< uint32_t >( row, 3 ) );
+ rewardItem.push_back( exdData->getField< uint32_t >( row, 4 ) );
+ rewardAmount.push_back( exdData->getField< uint8_t >( row, 5 ) );
+ rewardAmount.push_back( exdData->getField< uint8_t >( row, 6 ) );
+ rewardAmount.push_back( exdData->getField< uint8_t >( row, 7 ) );
+ rewardAmount.push_back( exdData->getField< uint8_t >( row, 8 ) );
+ requiredItem.push_back( exdData->getField< uint32_t >( row, 9 ) );
+ requiredItem.push_back( exdData->getField< uint32_t >( row, 10 ) );
+ requiredItem.push_back( exdData->getField< uint32_t >( row, 11 ) );
+ requiredItem.push_back( exdData->getField< uint32_t >( row, 12 ) );
+ requiredAmount.push_back( exdData->getField< uint8_t >( row, 13 ) );
+ requiredAmount.push_back( exdData->getField< uint8_t >( row, 14 ) );
+ requiredAmount.push_back( exdData->getField< uint8_t >( row, 15 ) );
+ requiredAmount.push_back( exdData->getField< uint8_t >( row, 16 ) );
+}
+
+Core::Data::QuestRepeatFlag::QuestRepeatFlag( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_QuestRepeatFlagDat.get_row( row_id );
+ quest = exdData->getField< uint32_t >( row, 0 );
}
Core::Data::QuestRewardOther::QuestRewardOther( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -3048,7 +3319,8 @@ Core::Data::QuickChat::QuickChat( uint32_t row_id, Core::Data::ExdDataGenerated*
{
auto row = exdData->m_QuickChatDat.get_row( row_id );
nameAction = exdData->getField< std::string >( row, 0 );
- icon1 = exdData->getField< int32_t >( row, 1 );
+ icon = exdData->getField< int32_t >( row, 1 );
+ addon = exdData->getField< int32_t >( row, 2 );
quickChatTransient = exdData->getField< int8_t >( row, 3 );
}
@@ -3126,6 +3398,7 @@ Core::Data::Recipe::Recipe( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa
secretRecipeBook = exdData->getField< uint16_t >( row, 36 );
canQuickSynth = exdData->getField< bool >( row, 37 );
canHq = exdData->getField< bool >( row, 38 );
+ expRewarded = exdData->getField< bool >( row, 39 );
statusRequired = exdData->getField< int32_t >( row, 40 );
itemRequired = exdData->getField< int32_t >( row, 41 );
isSpecializationRequired = exdData->getField< bool >( row, 42 );
@@ -3142,9 +3415,9 @@ Core::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Core::Data::Exd
auto row = exdData->m_RecipeLevelTableDat.get_row( row_id );
classJobLevel = exdData->getField< uint8_t >( row, 0 );
stars = exdData->getField< uint8_t >( row, 1 );
- difficulty = exdData->getField< uint16_t >( row, 2 );
- quality = exdData->getField< int16_t >( row, 3 );
- durability = exdData->getField< uint16_t >( row, 4 );
+ difficulty = exdData->getField< uint16_t >( row, 3 );
+ quality = exdData->getField< int16_t >( row, 4 );
+ durability = exdData->getField< uint16_t >( row, 5 );
}
Core::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -3312,6 +3585,12 @@ Core::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Core::Data:
recipe.push_back( exdData->getField< int32_t >( row, 160 ) );
}
+Core::Data::RecommendContents::RecommendContents( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_RecommendContentsDat.get_row( row_id );
+ level = exdData->getField< int32_t >( row, 0 );
+}
+
Core::Data::Relic::Relic( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_RelicDat.get_row( row_id );
@@ -3379,6 +3658,13 @@ Core::Data::RetainerTask::RetainerTask( uint32_t row_id, Core::Data::ExdDataGene
task = exdData->getField< uint16_t >( row, 13 );
}
+Core::Data::RetainerTaskLvRange::RetainerTaskLvRange( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_RetainerTaskLvRangeDat.get_row( row_id );
+ min = exdData->getField< uint8_t >( row, 0 );
+ max = exdData->getField< uint8_t >( row, 1 );
+}
+
Core::Data::RetainerTaskNormal::RetainerTaskNormal( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_RetainerTaskNormalDat.get_row( row_id );
@@ -3386,6 +3672,8 @@ Core::Data::RetainerTaskNormal::RetainerTaskNormal( uint32_t row_id, Core::Data:
quantity0 = exdData->getField< uint8_t >( row, 1 );
quantity1 = exdData->getField< uint8_t >( row, 2 );
quantity2 = exdData->getField< uint8_t >( row, 3 );
+ gatheringLog = exdData->getField< int16_t >( row, 4 );
+ fishingLog = exdData->getField< int16_t >( row, 5 );
}
Core::Data::RetainerTaskParameter::RetainerTaskParameter( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -3456,6 +3744,41 @@ Core::Data::SatisfactionSupplyReward::SatisfactionSupplyReward( uint32_t row_id,
gilHigh = exdData->getField< uint16_t >( row, 15 );
}
+Core::Data::ScenarioTree::ScenarioTree( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ScenarioTreeDat.get_row( row_id );
+ type = exdData->getField< uint8_t >( row, 0 );
+ image = exdData->getField< uint16_t >( row, 1 );
+}
+
+Core::Data::ScenarioTreeTips::ScenarioTreeTips( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ScenarioTreeTipsDat.get_row( row_id );
+ tips1 = exdData->getField< uint32_t >( row, 1 );
+ tips2 = exdData->getField< uint32_t >( row, 3 );
+}
+
+Core::Data::ScenarioTreeTipsClassQuest::ScenarioTreeTipsClassQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id );
+ quest = exdData->getField< uint32_t >( row, 0 );
+ requiredLevel = exdData->getField< uint16_t >( row, 1 );
+ requiredExpansion = exdData->getField< uint8_t >( row, 2 );
+ requiredQuest = exdData->getField< uint32_t >( row, 3 );
+}
+
+Core::Data::ScenarioTreeTipsQuest::ScenarioTreeTipsQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ScenarioTreeTipsQuestDat.get_row( row_id );
+ level = exdData->getField< uint32_t >( row, 0 );
+}
+
+Core::Data::ScenarioType::ScenarioType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ScenarioTypeDat.get_row( row_id );
+ type = exdData->getField< std::string >( row, 0 );
+}
+
Core::Data::ScreenImage::ScreenImage( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ScreenImageDat.get_row( row_id );
@@ -3469,6 +3792,40 @@ Core::Data::SecretRecipeBook::SecretRecipeBook( uint32_t row_id, Core::Data::Exd
name = exdData->getField< std::string >( row, 1 );
}
+Core::Data::SkyIsland2Mission::SkyIsland2Mission( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_SkyIsland2MissionDat.get_row( row_id );
+ item1 = exdData->getField< uint32_t >( row, 0 );
+ item2 = exdData->getField< uint32_t >( row, 1 );
+ objective1 = exdData->getField< uint16_t >( row, 4 );
+ requiredAmount1 = exdData->getField< uint8_t >( row, 6 );
+ objective2 = exdData->getField< uint16_t >( row, 9 );
+ requiredAmount2 = exdData->getField< uint8_t >( row, 11 );
+ objective3 = exdData->getField< uint16_t >( row, 14 );
+ image = exdData->getField< uint32_t >( row, 20 );
+}
+
+Core::Data::SkyIsland2MissionDetail::SkyIsland2MissionDetail( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_SkyIsland2MissionDetailDat.get_row( row_id );
+ type = exdData->getField< uint8_t >( row, 0 );
+ range = exdData->getField< uint8_t >( row, 2 );
+ eObj = exdData->getField< uint32_t >( row, 4 );
+ objective = exdData->getField< std::string >( row, 7 );
+}
+
+Core::Data::SkyIsland2MissionType::SkyIsland2MissionType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_SkyIsland2MissionTypeDat.get_row( row_id );
+ type = exdData->getField< bool >( row, 0 );
+}
+
+Core::Data::SkyIsland2RangeType::SkyIsland2RangeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_SkyIsland2RangeTypeDat.get_row( row_id );
+ type = exdData->getField< uint8_t >( row, 0 );
+}
+
Core::Data::SpearfishingItem::SpearfishingItem( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_SpearfishingItemDat.get_row( row_id );
@@ -3572,6 +3929,13 @@ Core::Data::Stain::Stain( uint32_t row_id, Core::Data::ExdDataGenerated* exdData
name = exdData->getField< std::string >( row, 2 );
}
+Core::Data::StainTransient::StainTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_StainTransientDat.get_row( row_id );
+ item1 = exdData->getField< uint32_t >( row, 0 );
+ item2 = exdData->getField< uint32_t >( row, 1 );
+}
+
Core::Data::Status::Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_StatusDat.get_row( row_id );
@@ -3579,17 +3943,32 @@ Core::Data::Status::Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa
description = exdData->getField< std::string >( row, 1 );
icon = exdData->getField< uint16_t >( row, 2 );
maxStacks = exdData->getField< uint8_t >( row, 3 );
+ category = exdData->getField< uint8_t >( row, 4 );
+ hitEffect = exdData->getField< uint8_t >( row, 5 );
+ vFX = exdData->getField< uint8_t >( row, 6 );
lockMovement = exdData->getField< bool >( row, 7 );
lockActions = exdData->getField< bool >( row, 9 );
lockControl = exdData->getField< bool >( row, 10 );
transfiguration = exdData->getField< bool >( row, 11 );
canDispel = exdData->getField< bool >( row, 13 );
+ inflictedByActor = exdData->getField< bool >( row, 14 );
isPermanent = exdData->getField< bool >( row, 15 );
- inflictedByActor = exdData->getField< bool >( row, 17 );
isFcBuff = exdData->getField< bool >( row, 21 );
invisibility = exdData->getField< bool >( row, 22 );
}
+Core::Data::StatusHitEffect::StatusHitEffect( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_StatusHitEffectDat.get_row( row_id );
+ location = exdData->getField< uint16_t >( row, 0 );
+}
+
+Core::Data::StatusLoopVFX::StatusLoopVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_StatusLoopVFXDat.get_row( row_id );
+ location = exdData->getField< uint16_t >( row, 0 );
+}
+
Core::Data::Story::Story( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_StoryDat.get_row( row_id );
@@ -3624,6 +4003,7 @@ Core::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Core::Data::ExdDataGe
Core::Data::SubmarineRank::SubmarineRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_SubmarineRankDat.get_row( row_id );
+ rank = exdData->getField< uint16_t >( row, 0 );
expToNext = exdData->getField< uint32_t >( row, 1 );
}
@@ -3674,7 +4054,8 @@ Core::Data::TerritoryType::TerritoryType( uint32_t row_id, Core::Data::ExdDataGe
map = exdData->getField< uint16_t >( row, 6 );
territoryIntendedUse = exdData->getField< uint8_t >( row, 9 );
weatherRate = exdData->getField< uint8_t >( row, 12 );
- aetheryte = exdData->getField< int32_t >( row, 23 );
+ arrayEventHandler = exdData->getField< uint32_t >( row, 22 );
+ aetheryte = exdData->getField< int32_t >( row, 24 );
}
Core::Data::TextCommand::TextCommand( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
@@ -3746,6 +4127,31 @@ Core::Data::TraitTransient::TraitTransient( uint32_t row_id, Core::Data::ExdData
description = exdData->getField< std::string >( row, 0 );
}
+Core::Data::Transformation::Transformation( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_TransformationDat.get_row( row_id );
+ model = exdData->getField< int16_t >( row, 1 );
+ bNpcCustomize = exdData->getField< int32_t >( row, 2 );
+ bNpcEquip = exdData->getField< int32_t >( row, 3 );
+ action.push_back( exdData->getField< uint16_t >( row, 4 ) );
+ action.push_back( exdData->getField< uint16_t >( row, 5 ) );
+ action.push_back( exdData->getField< uint16_t >( row, 6 ) );
+ action.push_back( exdData->getField< uint16_t >( row, 7 ) );
+ action.push_back( exdData->getField< uint16_t >( row, 8 ) );
+ action.push_back( exdData->getField< uint16_t >( row, 9 ) );
+ speed = exdData->getField< float >( row, 12 );
+ scale = exdData->getField< float >( row, 13 );
+ isPvP = exdData->getField< bool >( row, 14 );
+ isEvent = exdData->getField< bool >( row, 15 );
+ playerCamera = exdData->getField< bool >( row, 16 );
+}
+
+Core::Data::Treasure::Treasure( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_TreasureDat.get_row( row_id );
+ item = exdData->getField< uint32_t >( row, 8 );
+}
+
Core::Data::TreasureHuntRank::TreasureHuntRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_TreasureHuntRankDat.get_row( row_id );
@@ -3878,6 +4284,18 @@ Core::Data::TutorialTank::TutorialTank( uint32_t row_id, Core::Data::ExdDataGene
objective = exdData->getField< uint8_t >( row, 0 );
}
+Core::Data::VaseFlower::VaseFlower( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_VaseFlowerDat.get_row( row_id );
+ item = exdData->getField< uint32_t >( row, 3 );
+}
+
+Core::Data::VFX::VFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_VFXDat.get_row( row_id );
+ location = exdData->getField< std::string >( row, 0 );
+}
+
Core::Data::Warp::Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_WarpDat.get_row( row_id );
@@ -3890,6 +4308,15 @@ Core::Data::Warp::Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
warpLogic = exdData->getField< uint16_t >( row, 6 );
}
+Core::Data::WarpCondition::WarpCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_WarpConditionDat.get_row( row_id );
+ requiredQuest1 = exdData->getField< uint32_t >( row, 2 );
+ requiredQuest2 = exdData->getField< uint32_t >( row, 3 );
+ dRequiredQuest3 = exdData->getField< uint32_t >( row, 4 );
+ requiredQuest4 = exdData->getField< uint32_t >( row, 5 );
+}
+
Core::Data::Weather::Weather( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_WeatherDat.get_row( row_id );
@@ -3909,6 +4336,13 @@ Core::Data::WeatherRate::WeatherRate( uint32_t row_id, Core::Data::ExdDataGenera
auto row = exdData->m_WeatherRateDat.get_row( row_id );
}
+Core::Data::WeddingBGM::WeddingBGM( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_WeddingBGMDat.get_row( row_id );
+ song = exdData->getField< uint16_t >( row, 0 );
+ songName = exdData->getField< std::string >( row, 1 );
+}
+
Core::Data::WeeklyBingoOrderData::WeeklyBingoOrderData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_WeeklyBingoOrderDataDat.get_row( row_id );
@@ -3931,12 +4365,38 @@ Core::Data::WeeklyBingoText::WeeklyBingoText( uint32_t row_id, Core::Data::ExdDa
description = exdData->getField< std::string >( row, 0 );
}
+Core::Data::World::World( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_WorldDat.get_row( row_id );
+ dataCenter = exdData->getField< uint8_t >( row, 1 );
+}
+
Core::Data::WorldDCGroupType::WorldDCGroupType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_WorldDCGroupTypeDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 );
}
+Core::Data::YKW::YKW( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_YKWDat.get_row( row_id );
+ item = exdData->getField< uint32_t >( row, 1 );
+ location.push_back( exdData->getField< uint16_t >( row, 2 ) );
+ location.push_back( exdData->getField< uint16_t >( row, 3 ) );
+ location.push_back( exdData->getField< uint16_t >( row, 4 ) );
+}
+
+Core::Data::ZoneSharedGroup::ZoneSharedGroup( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
+{
+ auto row = exdData->m_ZoneSharedGroupDat.get_row( row_id );
+ quest1 = exdData->getField< uint32_t >( row, 2 );
+ quest2 = exdData->getField< uint32_t >( row, 6 );
+ quest3 = exdData->getField< uint32_t >( row, 10 );
+ quest4 = exdData->getField< uint32_t >( row, 14 );
+ quest5 = exdData->getField< uint32_t >( row, 18 );
+ quest6 = exdData->getField< uint32_t >( row, 22 );
+}
+
Core::Data::ExdDataGenerated::ExdDataGenerated()
{
@@ -3975,16 +4435,21 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_AchievementCategoryDat = setupDatAccess( "AchievementCategory", xiv::exd::Language::en );
m_AchievementKindDat = setupDatAccess( "AchievementKind", xiv::exd::Language::en );
m_ActionDat = setupDatAccess( "Action", xiv::exd::Language::en );
+ m_ActionCastTimelineDat = setupDatAccess( "ActionCastTimeline", xiv::exd::Language::none );
+ m_ActionCastVFXDat = setupDatAccess( "ActionCastVFX", xiv::exd::Language::none );
m_ActionCategoryDat = setupDatAccess( "ActionCategory", xiv::exd::Language::en );
m_ActionComboRouteDat = setupDatAccess( "ActionComboRoute", xiv::exd::Language::en );
m_ActionIndirectionDat = setupDatAccess( "ActionIndirection", xiv::exd::Language::none );
+ m_ActionParamDat = setupDatAccess( "ActionParam", xiv::exd::Language::none );
m_ActionProcStatusDat = setupDatAccess( "ActionProcStatus", xiv::exd::Language::none );
m_ActionTimelineDat = setupDatAccess( "ActionTimeline", xiv::exd::Language::none );
+ m_ActionTimelineReplaceDat = setupDatAccess( "ActionTimelineReplace", xiv::exd::Language::none );
m_ActionTransientDat = setupDatAccess( "ActionTransient", xiv::exd::Language::en );
m_AddonDat = setupDatAccess( "Addon", xiv::exd::Language::en );
m_AdventureDat = setupDatAccess( "Adventure", xiv::exd::Language::en );
m_AdventureExPhaseDat = setupDatAccess( "AdventureExPhase", xiv::exd::Language::none );
m_AetherCurrentDat = setupDatAccess( "AetherCurrent", xiv::exd::Language::none );
+ m_AetherCurrentCompFlgSetDat = setupDatAccess( "AetherCurrentCompFlgSet", xiv::exd::Language::none );
m_AetherialWheelDat = setupDatAccess( "AetherialWheel", xiv::exd::Language::none );
m_AetheryteDat = setupDatAccess( "Aetheryte", xiv::exd::Language::en );
m_AirshipExplorationLevelDat = setupDatAccess( "AirshipExplorationLevel", xiv::exd::Language::none );
@@ -4017,6 +4482,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_BNpcBaseDat = setupDatAccess( "BNpcBase", xiv::exd::Language::none );
m_BNpcCustomizeDat = setupDatAccess( "BNpcCustomize", xiv::exd::Language::none );
m_BNpcNameDat = setupDatAccess( "BNpcName", xiv::exd::Language::en );
+ m_BuddyDat = setupDatAccess( "Buddy", xiv::exd::Language::none );
m_BuddyActionDat = setupDatAccess( "BuddyAction", xiv::exd::Language::en );
m_BuddyEquipDat = setupDatAccess( "BuddyEquip", xiv::exd::Language::en );
m_BuddyItemDat = setupDatAccess( "BuddyItem", xiv::exd::Language::none );
@@ -4034,6 +4500,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_ChocoboRaceRankDat = setupDatAccess( "ChocoboRaceRank", xiv::exd::Language::none );
m_ChocoboRaceStatusDat = setupDatAccess( "ChocoboRaceStatus", xiv::exd::Language::none );
m_ChocoboRaceTerritoryDat = setupDatAccess( "ChocoboRaceTerritory", xiv::exd::Language::none );
+ m_ChocoboTaxiDat = setupDatAccess( "ChocoboTaxi", xiv::exd::Language::none );
m_ChocoboTaxiStandDat = setupDatAccess( "ChocoboTaxiStand", xiv::exd::Language::en );
m_ClassJobDat = setupDatAccess( "ClassJob", xiv::exd::Language::en );
m_ClassJobCategoryDat = setupDatAccess( "ClassJobCategory", xiv::exd::Language::en );
@@ -4055,7 +4522,12 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_ContentFinderConditionDat = setupDatAccess( "ContentFinderCondition", xiv::exd::Language::en );
m_ContentFinderConditionTransientDat = setupDatAccess( "ContentFinderConditionTransient", xiv::exd::Language::en );
m_ContentMemberTypeDat = setupDatAccess( "ContentMemberType", xiv::exd::Language::none );
+ m_ContentNpcTalkDat = setupDatAccess( "ContentNpcTalk", xiv::exd::Language::none );
m_ContentRouletteDat = setupDatAccess( "ContentRoulette", xiv::exd::Language::en );
+ m_ContentsNoteDat = setupDatAccess( "ContentsNote", xiv::exd::Language::en );
+ m_ContentsNoteCategoryDat = setupDatAccess( "ContentsNoteCategory", xiv::exd::Language::none );
+ m_ContentTalkDat = setupDatAccess( "ContentTalk", xiv::exd::Language::en );
+ m_ContentTalkParamDat = setupDatAccess( "ContentTalkParam", xiv::exd::Language::none );
m_ContentTypeDat = setupDatAccess( "ContentType", xiv::exd::Language::en );
m_CraftActionDat = setupDatAccess( "CraftAction", xiv::exd::Language::en );
m_CraftLeveDat = setupDatAccess( "CraftLeve", xiv::exd::Language::none );
@@ -4084,8 +4556,12 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_ENpcBaseDat = setupDatAccess( "ENpcBase", xiv::exd::Language::none );
m_ENpcResidentDat = setupDatAccess( "ENpcResident", xiv::exd::Language::en );
m_EObjDat = setupDatAccess( "EObj", xiv::exd::Language::none );
+ m_EObjNameDat = setupDatAccess( "EObjName", xiv::exd::Language::en );
m_EquipRaceCategoryDat = setupDatAccess( "EquipRaceCategory", xiv::exd::Language::none );
m_EquipSlotCategoryDat = setupDatAccess( "EquipSlotCategory", xiv::exd::Language::none );
+ m_EurekaAethernetDat = setupDatAccess( "EurekaAethernet", xiv::exd::Language::none );
+ m_EurekaGrowDataDat = setupDatAccess( "EurekaGrowData", xiv::exd::Language::none );
+ m_EurekaSphereElementAdjustDat = setupDatAccess( "EurekaSphereElementAdjust", xiv::exd::Language::none );
m_EventActionDat = setupDatAccess( "EventAction", xiv::exd::Language::en );
m_EventIconPriorityDat = setupDatAccess( "EventIconPriority", xiv::exd::Language::none );
m_EventIconTypeDat = setupDatAccess( "EventIconType", xiv::exd::Language::none );
@@ -4103,6 +4579,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_FCProfileDat = setupDatAccess( "FCProfile", xiv::exd::Language::en );
m_FCReputationDat = setupDatAccess( "FCReputation", xiv::exd::Language::en );
m_FCRightsDat = setupDatAccess( "FCRights", xiv::exd::Language::en );
+ m_FieldMarkerDat = setupDatAccess( "FieldMarker", xiv::exd::Language::en );
m_FishingSpotDat = setupDatAccess( "FishingSpot", xiv::exd::Language::en );
m_FishParameterDat = setupDatAccess( "FishParameter", xiv::exd::Language::en );
m_GardeningSeedDat = setupDatAccess( "GardeningSeed", xiv::exd::Language::none );
@@ -4152,7 +4629,6 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_InstanceContentDat = setupDatAccess( "InstanceContent", xiv::exd::Language::en );
m_InstanceContentBuffDat = setupDatAccess( "InstanceContentBuff", xiv::exd::Language::none );
m_InstanceContentTextDataDat = setupDatAccess( "InstanceContentTextData", xiv::exd::Language::en );
- m_InstanceContentTypeDat = setupDatAccess( "InstanceContentType", xiv::exd::Language::none );
m_ItemDat = setupDatAccess( "Item", xiv::exd::Language::en );
m_ItemActionDat = setupDatAccess( "ItemAction", xiv::exd::Language::none );
m_ItemFoodDat = setupDatAccess( "ItemFood", xiv::exd::Language::none );
@@ -4180,7 +4656,9 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_MainCommandCategoryDat = setupDatAccess( "MainCommandCategory", xiv::exd::Language::en );
m_MapDat = setupDatAccess( "Map", xiv::exd::Language::none );
m_MapMarkerDat = setupDatAccess( "MapMarker", xiv::exd::Language::none );
+ m_MapMarkerRegionDat = setupDatAccess( "MapMarkerRegion", xiv::exd::Language::none );
m_MapSymbolDat = setupDatAccess( "MapSymbol", xiv::exd::Language::none );
+ m_MarkerDat = setupDatAccess( "Marker", xiv::exd::Language::en );
m_MasterpieceSupplyDutyDat = setupDatAccess( "MasterpieceSupplyDuty", xiv::exd::Language::none );
m_MasterpieceSupplyMultiplierDat = setupDatAccess( "MasterpieceSupplyMultiplier", xiv::exd::Language::none );
m_MateriaDat = setupDatAccess( "Materia", xiv::exd::Language::none );
@@ -4193,6 +4671,8 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_MonsterNoteTargetDat = setupDatAccess( "MonsterNoteTarget", xiv::exd::Language::none );
m_MountDat = setupDatAccess( "Mount", xiv::exd::Language::en );
m_MountActionDat = setupDatAccess( "MountAction", xiv::exd::Language::none );
+ m_MoveTimelineDat = setupDatAccess( "MoveTimeline", xiv::exd::Language::none );
+ m_MoveVfxDat = setupDatAccess( "MoveVfx", xiv::exd::Language::none );
m_NpcEquipDat = setupDatAccess( "NpcEquip", xiv::exd::Language::none );
m_OmenDat = setupDatAccess( "Omen", xiv::exd::Language::none );
m_OnlineStatusDat = setupDatAccess( "OnlineStatus", xiv::exd::Language::en );
@@ -4202,11 +4682,17 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_OrchestrionPathDat = setupDatAccess( "OrchestrionPath", xiv::exd::Language::none );
m_OrchestrionUiparamDat = setupDatAccess( "OrchestrionUiparam", xiv::exd::Language::none );
m_ParamGrowDat = setupDatAccess( "ParamGrow", xiv::exd::Language::none );
+ m_PerformDat = setupDatAccess( "Perform", xiv::exd::Language::en );
+ m_PerformTransientDat = setupDatAccess( "PerformTransient", xiv::exd::Language::en );
m_PetDat = setupDatAccess( "Pet", xiv::exd::Language::en );
m_PetActionDat = setupDatAccess( "PetAction", xiv::exd::Language::en );
m_PictureDat = setupDatAccess( "Picture", xiv::exd::Language::none );
m_PlaceNameDat = setupDatAccess( "PlaceName", xiv::exd::Language::en );
+ m_PublicContentDat = setupDatAccess( "PublicContent", xiv::exd::Language::en );
+ m_PvPActionSortDat = setupDatAccess( "PvPActionSort", xiv::exd::Language::none );
m_QuestDat = setupDatAccess( "Quest", xiv::exd::Language::en );
+ m_QuestClassJobRewardDat = setupDatAccess( "QuestClassJobReward", xiv::exd::Language::none );
+ m_QuestRepeatFlagDat = setupDatAccess( "QuestRepeatFlag", xiv::exd::Language::none );
m_QuestRewardOtherDat = setupDatAccess( "QuestRewardOther", xiv::exd::Language::en );
m_QuickChatDat = setupDatAccess( "QuickChat", xiv::exd::Language::en );
m_QuickChatTransientDat = setupDatAccess( "QuickChatTransient", xiv::exd::Language::en );
@@ -4220,12 +4706,14 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_RecipeElementDat = setupDatAccess( "RecipeElement", xiv::exd::Language::en );
m_RecipeLevelTableDat = setupDatAccess( "RecipeLevelTable", xiv::exd::Language::none );
m_RecipeNotebookListDat = setupDatAccess( "RecipeNotebookList", xiv::exd::Language::none );
+ m_RecommendContentsDat = setupDatAccess( "RecommendContents", xiv::exd::Language::none );
m_RelicDat = setupDatAccess( "Relic", xiv::exd::Language::none );
m_Relic3Dat = setupDatAccess( "Relic3", xiv::exd::Language::none );
m_RelicItemDat = setupDatAccess( "RelicItem", xiv::exd::Language::none );
m_RelicNoteDat = setupDatAccess( "RelicNote", xiv::exd::Language::none );
m_RelicNoteCategoryDat = setupDatAccess( "RelicNoteCategory", xiv::exd::Language::en );
m_RetainerTaskDat = setupDatAccess( "RetainerTask", xiv::exd::Language::none );
+ m_RetainerTaskLvRangeDat = setupDatAccess( "RetainerTaskLvRange", xiv::exd::Language::none );
m_RetainerTaskNormalDat = setupDatAccess( "RetainerTaskNormal", xiv::exd::Language::none );
m_RetainerTaskParameterDat = setupDatAccess( "RetainerTaskParameter", xiv::exd::Language::none );
m_RetainerTaskRandomDat = setupDatAccess( "RetainerTaskRandom", xiv::exd::Language::en );
@@ -4233,14 +4721,26 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_SatisfactionNpcDat = setupDatAccess( "SatisfactionNpc", xiv::exd::Language::none );
m_SatisfactionSupplyDat = setupDatAccess( "SatisfactionSupply", xiv::exd::Language::none );
m_SatisfactionSupplyRewardDat = setupDatAccess( "SatisfactionSupplyReward", xiv::exd::Language::none );
+ m_ScenarioTreeDat = setupDatAccess( "ScenarioTree", xiv::exd::Language::none );
+ m_ScenarioTreeTipsDat = setupDatAccess( "ScenarioTreeTips", xiv::exd::Language::none );
+ m_ScenarioTreeTipsClassQuestDat = setupDatAccess( "ScenarioTreeTipsClassQuest", xiv::exd::Language::none );
+ m_ScenarioTreeTipsQuestDat = setupDatAccess( "ScenarioTreeTipsQuest", xiv::exd::Language::none );
+ m_ScenarioTypeDat = setupDatAccess( "ScenarioType", xiv::exd::Language::en );
m_ScreenImageDat = setupDatAccess( "ScreenImage", xiv::exd::Language::none );
m_SecretRecipeBookDat = setupDatAccess( "SecretRecipeBook", xiv::exd::Language::en );
+ m_SkyIsland2MissionDat = setupDatAccess( "SkyIsland2Mission", xiv::exd::Language::en );
+ m_SkyIsland2MissionDetailDat = setupDatAccess( "SkyIsland2MissionDetail", xiv::exd::Language::en );
+ m_SkyIsland2MissionTypeDat = setupDatAccess( "SkyIsland2MissionType", xiv::exd::Language::none );
+ m_SkyIsland2RangeTypeDat = setupDatAccess( "SkyIsland2RangeType", xiv::exd::Language::none );
m_SpearfishingItemDat = setupDatAccess( "SpearfishingItem", xiv::exd::Language::en );
m_SpearfishingNotebookDat = setupDatAccess( "SpearfishingNotebook", xiv::exd::Language::none );
m_SpecialShopDat = setupDatAccess( "SpecialShop", xiv::exd::Language::en );
m_SpecialShopItemCategoryDat = setupDatAccess( "SpecialShopItemCategory", xiv::exd::Language::en );
m_StainDat = setupDatAccess( "Stain", xiv::exd::Language::en );
+ m_StainTransientDat = setupDatAccess( "StainTransient", xiv::exd::Language::none );
m_StatusDat = setupDatAccess( "Status", xiv::exd::Language::en );
+ m_StatusHitEffectDat = setupDatAccess( "StatusHitEffect", xiv::exd::Language::none );
+ m_StatusLoopVFXDat = setupDatAccess( "StatusLoopVFX", xiv::exd::Language::none );
m_StoryDat = setupDatAccess( "Story", xiv::exd::Language::none );
m_SubmarineExplorationDat = setupDatAccess( "SubmarineExploration", xiv::exd::Language::en );
m_SubmarinePartDat = setupDatAccess( "SubmarinePart", xiv::exd::Language::none );
@@ -4256,6 +4756,8 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_TraitDat = setupDatAccess( "Trait", xiv::exd::Language::en );
m_TraitRecastDat = setupDatAccess( "TraitRecast", xiv::exd::Language::none );
m_TraitTransientDat = setupDatAccess( "TraitTransient", xiv::exd::Language::en );
+ m_TransformationDat = setupDatAccess( "Transformation", xiv::exd::Language::none );
+ m_TreasureDat = setupDatAccess( "Treasure", xiv::exd::Language::en );
m_TreasureHuntRankDat = setupDatAccess( "TreasureHuntRank", xiv::exd::Language::none );
m_TribeDat = setupDatAccess( "Tribe", xiv::exd::Language::en );
m_TripleTriadDat = setupDatAccess( "TripleTriad", xiv::exd::Language::none );
@@ -4269,14 +4771,21 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path )
m_TutorialDPSDat = setupDatAccess( "TutorialDPS", xiv::exd::Language::none );
m_TutorialHealerDat = setupDatAccess( "TutorialHealer", xiv::exd::Language::none );
m_TutorialTankDat = setupDatAccess( "TutorialTank", xiv::exd::Language::none );
+ m_VaseFlowerDat = setupDatAccess( "VaseFlower", xiv::exd::Language::none );
+ m_VFXDat = setupDatAccess( "VFX", xiv::exd::Language::none );
m_WarpDat = setupDatAccess( "Warp", xiv::exd::Language::en );
+ m_WarpConditionDat = setupDatAccess( "WarpCondition", xiv::exd::Language::none );
m_WeatherDat = setupDatAccess( "Weather", xiv::exd::Language::en );
m_WeatherGroupDat = setupDatAccess( "WeatherGroup", xiv::exd::Language::none );
m_WeatherRateDat = setupDatAccess( "WeatherRate", xiv::exd::Language::none );
+ m_WeddingBGMDat = setupDatAccess( "WeddingBGM", xiv::exd::Language::en );
m_WeeklyBingoOrderDataDat = setupDatAccess( "WeeklyBingoOrderData", xiv::exd::Language::none );
m_WeeklyBingoRewardDataDat = setupDatAccess( "WeeklyBingoRewardData", xiv::exd::Language::none );
m_WeeklyBingoTextDat = setupDatAccess( "WeeklyBingoText", xiv::exd::Language::en );
+ m_WorldDat = setupDatAccess( "World", xiv::exd::Language::none );
m_WorldDCGroupTypeDat = setupDatAccess( "WorldDCGroupType", xiv::exd::Language::none );
+ m_YKWDat = setupDatAccess( "YKW", xiv::exd::Language::en );
+ m_ZoneSharedGroupDat = setupDatAccess( "ZoneSharedGroup", xiv::exd::Language::none );
}
catch( std::runtime_error )
diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h
index d17edf4a..c2a5ccb2 100644
--- a/src/common/Exd/ExdDataGenerated.h
+++ b/src/common/Exd/ExdDataGenerated.h
@@ -22,16 +22,21 @@ struct Achievement;
struct AchievementCategory;
struct AchievementKind;
struct Action;
+struct ActionCastTimeline;
+struct ActionCastVFX;
struct ActionCategory;
struct ActionComboRoute;
struct ActionIndirection;
+struct ActionParam;
struct ActionProcStatus;
struct ActionTimeline;
+struct ActionTimelineReplace;
struct ActionTransient;
struct Addon;
struct Adventure;
struct AdventureExPhase;
struct AetherCurrent;
+struct AetherCurrentCompFlgSet;
struct AetherialWheel;
struct Aetheryte;
struct AirshipExplorationLevel;
@@ -64,6 +69,7 @@ struct BNpcAnnounceIcon;
struct BNpcBase;
struct BNpcCustomize;
struct BNpcName;
+struct Buddy;
struct BuddyAction;
struct BuddyEquip;
struct BuddyItem;
@@ -81,6 +87,7 @@ struct ChocoboRaceItem;
struct ChocoboRaceRank;
struct ChocoboRaceStatus;
struct ChocoboRaceTerritory;
+struct ChocoboTaxi;
struct ChocoboTaxiStand;
struct ClassJob;
struct ClassJobCategory;
@@ -102,7 +109,12 @@ struct ContentExAction;
struct ContentFinderCondition;
struct ContentFinderConditionTransient;
struct ContentMemberType;
+struct ContentNpcTalk;
struct ContentRoulette;
+struct ContentsNote;
+struct ContentsNoteCategory;
+struct ContentTalk;
+struct ContentTalkParam;
struct ContentType;
struct CraftAction;
struct CraftLeve;
@@ -131,8 +143,12 @@ struct EmoteCategory;
struct ENpcBase;
struct ENpcResident;
struct EObj;
+struct EObjName;
struct EquipRaceCategory;
struct EquipSlotCategory;
+struct EurekaAethernet;
+struct EurekaGrowData;
+struct EurekaSphereElementAdjust;
struct EventAction;
struct EventIconPriority;
struct EventIconType;
@@ -150,6 +166,7 @@ struct FCHierarchy;
struct FCProfile;
struct FCReputation;
struct FCRights;
+struct FieldMarker;
struct FishingSpot;
struct FishParameter;
struct GardeningSeed;
@@ -199,7 +216,6 @@ struct HousingYardObject;
struct InstanceContent;
struct InstanceContentBuff;
struct InstanceContentTextData;
-struct InstanceContentType;
struct Item;
struct ItemAction;
struct ItemFood;
@@ -227,7 +243,9 @@ struct MainCommand;
struct MainCommandCategory;
struct Map;
struct MapMarker;
+struct MapMarkerRegion;
struct MapSymbol;
+struct Marker;
struct MasterpieceSupplyDuty;
struct MasterpieceSupplyMultiplier;
struct Materia;
@@ -240,6 +258,8 @@ struct MonsterNote;
struct MonsterNoteTarget;
struct Mount;
struct MountAction;
+struct MoveTimeline;
+struct MoveVfx;
struct NpcEquip;
struct Omen;
struct OnlineStatus;
@@ -249,11 +269,17 @@ struct OrchestrionCategory;
struct OrchestrionPath;
struct OrchestrionUiparam;
struct ParamGrow;
+struct Perform;
+struct PerformTransient;
struct Pet;
struct PetAction;
struct Picture;
struct PlaceName;
+struct PublicContent;
+struct PvPActionSort;
struct Quest;
+struct QuestClassJobReward;
+struct QuestRepeatFlag;
struct QuestRewardOther;
struct QuickChat;
struct QuickChatTransient;
@@ -267,12 +293,14 @@ struct Recipe;
struct RecipeElement;
struct RecipeLevelTable;
struct RecipeNotebookList;
+struct RecommendContents;
struct Relic;
struct Relic3;
struct RelicItem;
struct RelicNote;
struct RelicNoteCategory;
struct RetainerTask;
+struct RetainerTaskLvRange;
struct RetainerTaskNormal;
struct RetainerTaskParameter;
struct RetainerTaskRandom;
@@ -280,14 +308,26 @@ struct Salvage;
struct SatisfactionNpc;
struct SatisfactionSupply;
struct SatisfactionSupplyReward;
+struct ScenarioTree;
+struct ScenarioTreeTips;
+struct ScenarioTreeTipsClassQuest;
+struct ScenarioTreeTipsQuest;
+struct ScenarioType;
struct ScreenImage;
struct SecretRecipeBook;
+struct SkyIsland2Mission;
+struct SkyIsland2MissionDetail;
+struct SkyIsland2MissionType;
+struct SkyIsland2RangeType;
struct SpearfishingItem;
struct SpearfishingNotebook;
struct SpecialShop;
struct SpecialShopItemCategory;
struct Stain;
+struct StainTransient;
struct Status;
+struct StatusHitEffect;
+struct StatusLoopVFX;
struct Story;
struct SubmarineExploration;
struct SubmarinePart;
@@ -303,6 +343,8 @@ struct Town;
struct Trait;
struct TraitRecast;
struct TraitTransient;
+struct Transformation;
+struct Treasure;
struct TreasureHuntRank;
struct Tribe;
struct TripleTriad;
@@ -316,14 +358,21 @@ struct Tutorial;
struct TutorialDPS;
struct TutorialHealer;
struct TutorialTank;
+struct VaseFlower;
+struct VFX;
struct Warp;
+struct WarpCondition;
struct Weather;
struct WeatherGroup;
struct WeatherRate;
+struct WeddingBGM;
struct WeeklyBingoOrderData;
struct WeeklyBingoRewardData;
struct WeeklyBingoText;
+struct World;
struct WorldDCGroupType;
+struct YKW;
+struct ZoneSharedGroup;
struct Achievement
@@ -362,7 +411,9 @@ struct Action
std::string name;
uint16_t icon;
uint8_t actionCategory;
- int16_t actionTimelineUse;
+ uint8_t animationStart;
+ uint8_t vFX;
+ int16_t animationEnd;
uint16_t actionTimelineHit;
int8_t classJob;
uint8_t classJobLevel;
@@ -397,6 +448,21 @@ struct Action
Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ActionCastTimeline
+{
+ uint16_t name;
+ uint16_t vFX;
+
+ ActionCastTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ActionCastVFX
+{
+ uint16_t vFX;
+
+ ActionCastVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ActionCategory
{
std::string name;
@@ -419,6 +485,13 @@ struct ActionIndirection
ActionIndirection( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ActionParam
+{
+ int16_t name;
+
+ ActionParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ActionProcStatus
{
uint16_t status;
@@ -433,6 +506,14 @@ struct ActionTimeline
ActionTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ActionTimelineReplace
+{
+ uint16_t old;
+ uint16_t new1;
+
+ ActionTimelineReplace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ActionTransient
{
std::string description;
@@ -481,6 +562,14 @@ struct AetherCurrent
AetherCurrent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct AetherCurrentCompFlgSet
+{
+ int32_t territory;
+ std::vector< int32_t > aetherCurrent;
+
+ AetherCurrentCompFlgSet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct AetherialWheel
{
int32_t itemUnprimed;
@@ -496,7 +585,7 @@ struct Aetheryte
uint16_t placeName;
uint16_t aethernetName;
uint16_t territory;
- uint32_t levelId;
+ std::vector< uint32_t > level;
bool isAetheryte;
uint8_t aethernetGroup;
uint16_t map;
@@ -669,6 +758,25 @@ struct BaseParam
{
std::string name;
std::string description;
+ uint8_t oneHWpn;
+ uint8_t oH;
+ uint8_t head;
+ uint8_t chest;
+ uint8_t hands;
+ uint8_t waist;
+ uint8_t legs;
+ uint8_t feet;
+ uint8_t earring;
+ uint8_t necklace;
+ uint8_t bracelet;
+ uint8_t ring;
+ uint8_t twoHWpn;
+ uint8_t chestHead;
+ uint8_t chestHeadLegsFeet;
+ uint8_t legsFeet;
+ uint8_t headChestHandsLegsFeet;
+ uint8_t chestLegsGloves;
+ uint8_t chestLegsFeet;
BaseParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -790,6 +898,18 @@ struct BNpcName
BNpcName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct Buddy
+{
+ int32_t questRequirement2;
+ int32_t questRequirement1;
+ std::string soundEffect4;
+ std::string soundEffect3;
+ std::string soundEffect2;
+ std::string soundEffect1;
+
+ Buddy( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct BuddyAction
{
std::string name;
@@ -833,6 +953,10 @@ struct BuddyRank
struct BuddySkill
{
uint8_t buddyLevel;
+ bool isActive;
+ uint16_t defender;
+ uint16_t attacker;
+ uint16_t healer;
BuddySkill( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -867,6 +991,7 @@ struct CharaMakeCustomize
{
uint32_t icon;
uint16_t data;
+ bool isPurchasable;
CharaMakeCustomize( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -942,6 +1067,13 @@ struct ChocoboRaceTerritory
ChocoboRaceTerritory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ChocoboTaxi
+{
+ uint32_t location;
+
+ ChocoboTaxi( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ChocoboTaxiStand
{
std::string placeName;
@@ -970,6 +1102,9 @@ struct ClassJob
uint16_t limitBreak2;
uint16_t limitBreak3;
uint32_t itemSoulCrystal;
+ uint32_t unlockQuest;
+ uint32_t relicQuest;
+ uint32_t prerequisite;
uint8_t startingLevel;
ClassJob( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -1012,6 +1147,8 @@ struct ClassJobCategory
bool mCH;
bool dRK;
bool aST;
+ bool sAM;
+ bool rDM;
ClassJobCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -1159,13 +1296,14 @@ struct ContentExAction
struct ContentFinderCondition
{
- uint8_t contentIndicator;
uint16_t instanceContent;
uint8_t contentMemberType;
uint8_t classJobLevelRequired;
uint8_t classJobLevelSync;
uint16_t itemLevelRequired;
uint16_t itemLevelSync;
+ uint8_t contentIndicator;
+ uint8_t contentType;
uint32_t icon;
ContentFinderCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -1188,6 +1326,13 @@ struct ContentMemberType
ContentMemberType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ContentNpcTalk
+{
+ std::vector< uint32_t > contentTalk;
+
+ ContentNpcTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ContentRoulette
{
std::string name;
@@ -1206,6 +1351,37 @@ struct ContentRoulette
ContentRoulette( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ContentsNote
+{
+ uint8_t contentType;
+ int32_t requiredAmount;
+
+ ContentsNote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ContentsNoteCategory
+{
+ uint8_t type;
+
+ ContentsNoteCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ContentTalk
+{
+ uint8_t contentTalkParam;
+ std::string text;
+
+ ContentTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ContentTalkParam
+{
+ bool param;
+ uint32_t testAction;
+
+ ContentTalkParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ContentType
{
std::string name;
@@ -1219,6 +1395,8 @@ struct CraftAction
{
std::string name;
std::string description;
+ uint16_t animationStart;
+ uint16_t animationEnd;
uint16_t icon;
int8_t classJob;
uint8_t classJobCategory;
@@ -1514,6 +1692,13 @@ struct EObj
EObj( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct EObjName
+{
+ std::string singular;
+
+ EObjName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct EquipRaceCategory
{
bool hyur;
@@ -1548,6 +1733,27 @@ struct EquipSlotCategory
EquipSlotCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct EurekaAethernet
+{
+ uint16_t location;
+
+ EurekaAethernet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct EurekaGrowData
+{
+ uint16_t baseResistance;
+
+ EurekaGrowData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct EurekaSphereElementAdjust
+{
+ uint16_t powerModifier;
+
+ EurekaSphereElementAdjust( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct EventAction
{
std::string name;
@@ -1605,15 +1811,19 @@ struct ExVersion
struct Fate
{
+ uint8_t eurekaFate;
+ uint32_t location;
uint8_t classJobLevel;
uint8_t classJobLevelMax;
uint32_t eventItem;
uint32_t iconObjective;
uint32_t iconMap;
+ int32_t music;
std::string name;
std::string description;
std::string objective;
std::vector< std::string > statusText;
+ uint32_t arrayIndex;
Fate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -1695,6 +1905,14 @@ struct FCRights
FCRights( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct FieldMarker
+{
+ int32_t vFX;
+ uint16_t icon;
+
+ FieldMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct FishingSpot
{
uint8_t gatheringLevel;
@@ -1997,6 +2215,7 @@ struct GeneralAction
{
std::string name;
std::string description;
+ uint16_t action;
int32_t icon;
GeneralAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -2152,14 +2371,6 @@ struct InstanceContentTextData
InstanceContentTextData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
-struct InstanceContentType
-{
- uint8_t sortKey;
- uint8_t contentType;
-
- InstanceContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
-};
-
struct Item
{
std::string singular;
@@ -2463,6 +2674,7 @@ struct MapMarker
uint16_t icon;
uint16_t placeNameSubtext;
uint8_t subtextOrientation;
+ uint8_t mapMarkerRegion;
uint8_t type;
uint8_t dataType;
uint16_t dataKey;
@@ -2470,6 +2682,13 @@ struct MapMarker
MapMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct MapMarkerRegion
+{
+ int16_t x;
+
+ MapMarkerRegion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct MapSymbol
{
int32_t icon;
@@ -2478,6 +2697,14 @@ struct MapSymbol
MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct Marker
+{
+ int32_t icon;
+ std::string name;
+
+ Marker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct MasterpieceSupplyDuty
{
uint8_t classJob;
@@ -2572,7 +2799,7 @@ struct Mount
uint8_t flyingCondition;
uint8_t isFlying;
uint16_t rideBGM;
- int8_t order;
+ int16_t order;
uint16_t icon;
Mount( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -2585,6 +2812,30 @@ struct MountAction
MountAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct MoveTimeline
+{
+ uint16_t idle;
+ uint16_t moveForward;
+ uint16_t moveBack;
+ uint16_t moveLeft;
+ uint16_t moveRight;
+ uint16_t moveUp;
+ uint16_t moveDown;
+ uint16_t moveTurnLeft;
+ uint16_t moveTurnRight;
+ uint16_t extra;
+
+ MoveTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct MoveVfx
+{
+ uint16_t zero;
+ uint16_t one;
+
+ MoveVfx( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct NpcEquip
{
uint64_t modelMainHand;
@@ -2683,6 +2934,29 @@ struct ParamGrow
ParamGrow( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct Perform
+{
+ std::string name;
+ uint64_t modelKey;
+ uint16_t animationStart;
+ uint16_t animationEnd;
+ uint16_t animationIdle;
+ uint16_t animationPlay01;
+ uint16_t animationPlay02;
+ int32_t stopAnimation;
+ std::string instrument;
+ uint8_t transient;
+
+ Perform( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct PerformTransient
+{
+ std::string text;
+
+ PerformTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Pet
{
std::string name;
@@ -2717,6 +2991,24 @@ struct PlaceName
PlaceName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct PublicContent
+{
+ uint16_t timeLimit;
+ uint32_t mapIcon;
+ std::string name;
+ uint16_t territoryType;
+
+ PublicContent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct PvPActionSort
+{
+ uint8_t name;
+ uint16_t action;
+
+ PvPActionSort( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Quest
{
std::string name;
@@ -2783,6 +3075,24 @@ struct Quest
Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct QuestClassJobReward
+{
+ uint8_t classJobCategory;
+ std::vector< uint32_t > rewardItem;
+ std::vector< uint8_t > rewardAmount;
+ std::vector< uint32_t > requiredItem;
+ std::vector< uint8_t > requiredAmount;
+
+ QuestClassJobReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct QuestRepeatFlag
+{
+ uint32_t quest;
+
+ QuestRepeatFlag( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct QuestRewardOther
{
std::string name;
@@ -2793,7 +3103,8 @@ struct QuestRewardOther
struct QuickChat
{
std::string nameAction;
- int32_t icon1;
+ int32_t icon;
+ int32_t addon;
int8_t quickChatTransient;
QuickChat( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -2878,6 +3189,7 @@ struct Recipe
uint16_t secretRecipeBook;
bool canQuickSynth;
bool canHq;
+ bool expRewarded;
int32_t statusRequired;
int32_t itemRequired;
bool isSpecializationRequired;
@@ -2910,6 +3222,13 @@ struct RecipeNotebookList
RecipeNotebookList( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct RecommendContents
+{
+ int32_t level;
+
+ RecommendContents( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Relic
{
uint32_t itemAtma;
@@ -2979,12 +3298,22 @@ struct RetainerTask
RetainerTask( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct RetainerTaskLvRange
+{
+ uint8_t min;
+ uint8_t max;
+
+ RetainerTaskLvRange( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct RetainerTaskNormal
{
int32_t item;
uint8_t quantity0;
uint8_t quantity1;
uint8_t quantity2;
+ int16_t gatheringLog;
+ int16_t fishingLog;
RetainerTaskNormal( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
@@ -3050,6 +3379,46 @@ struct SatisfactionSupplyReward
SatisfactionSupplyReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct ScenarioTree
+{
+ uint8_t type;
+ uint16_t image;
+
+ ScenarioTree( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ScenarioTreeTips
+{
+ uint32_t tips1;
+ uint32_t tips2;
+
+ ScenarioTreeTips( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ScenarioTreeTipsClassQuest
+{
+ uint32_t quest;
+ uint16_t requiredLevel;
+ uint8_t requiredExpansion;
+ uint32_t requiredQuest;
+
+ ScenarioTreeTipsClassQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ScenarioTreeTipsQuest
+{
+ uint32_t level;
+
+ ScenarioTreeTipsQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ScenarioType
+{
+ std::string type;
+
+ ScenarioType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct ScreenImage
{
uint32_t image;
@@ -3065,6 +3434,44 @@ struct SecretRecipeBook
SecretRecipeBook( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct SkyIsland2Mission
+{
+ uint32_t item1;
+ uint32_t item2;
+ uint16_t objective1;
+ uint8_t requiredAmount1;
+ uint16_t objective2;
+ uint8_t requiredAmount2;
+ uint16_t objective3;
+ uint32_t image;
+
+ SkyIsland2Mission( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct SkyIsland2MissionDetail
+{
+ uint8_t type;
+ uint8_t range;
+ uint32_t eObj;
+ std::string objective;
+
+ SkyIsland2MissionDetail( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct SkyIsland2MissionType
+{
+ bool type;
+
+ SkyIsland2MissionType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct SkyIsland2RangeType
+{
+ uint8_t type;
+
+ SkyIsland2RangeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct SpearfishingItem
{
std::string description;
@@ -3114,25 +3521,50 @@ struct Stain
Stain( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct StainTransient
+{
+ uint32_t item1;
+ uint32_t item2;
+
+ StainTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Status
{
std::string name;
std::string description;
uint16_t icon;
uint8_t maxStacks;
+ uint8_t category;
+ uint8_t hitEffect;
+ uint8_t vFX;
bool lockMovement;
bool lockActions;
bool lockControl;
bool transfiguration;
bool canDispel;
- bool isPermanent;
bool inflictedByActor;
+ bool isPermanent;
bool isFcBuff;
bool invisibility;
Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct StatusHitEffect
+{
+ uint16_t location;
+
+ StatusHitEffect( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct StatusLoopVFX
+{
+ uint16_t location;
+
+ StatusLoopVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Story
{
@@ -3169,6 +3601,7 @@ struct SubmarinePart
struct SubmarineRank
{
+ uint16_t rank;
uint32_t expToNext;
SubmarineRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -3192,6 +3625,7 @@ struct TerritoryType
uint16_t map;
uint8_t territoryIntendedUse;
uint8_t weatherRate;
+ uint32_t arrayEventHandler;
int32_t aetheryte;
TerritoryType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
@@ -3275,6 +3709,28 @@ struct TraitTransient
TraitTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct Transformation
+{
+ int16_t model;
+ int32_t bNpcCustomize;
+ int32_t bNpcEquip;
+ std::vector< uint16_t > action;
+ float speed;
+ float scale;
+ bool isPvP;
+ bool isEvent;
+ bool playerCamera;
+
+ Transformation( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct Treasure
+{
+ uint32_t item;
+
+ Treasure( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct TreasureHuntRank
{
uint32_t icon;
@@ -3406,6 +3862,20 @@ struct TutorialTank
TutorialTank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct VaseFlower
+{
+ uint32_t item;
+
+ VaseFlower( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct VFX
+{
+ std::string location;
+
+ VFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Warp
{
uint32_t level;
@@ -3419,6 +3889,16 @@ struct Warp
Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct WarpCondition
+{
+ uint32_t requiredQuest1;
+ uint32_t requiredQuest2;
+ uint32_t dRequiredQuest3;
+ uint32_t requiredQuest4;
+
+ WarpCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct Weather
{
int32_t icon;
@@ -3441,6 +3921,14 @@ struct WeatherRate
WeatherRate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct WeddingBGM
+{
+ uint16_t song;
+ std::string songName;
+
+ WeddingBGM( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct WeeklyBingoOrderData
{
uint32_t data;
@@ -3466,6 +3954,13 @@ struct WeeklyBingoText
WeeklyBingoText( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct World
+{
+ uint8_t dataCenter;
+
+ World( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
struct WorldDCGroupType
{
std::string name;
@@ -3473,6 +3968,26 @@ struct WorldDCGroupType
WorldDCGroupType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
};
+struct YKW
+{
+ uint32_t item;
+ std::vector< uint16_t > location;
+
+ YKW( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
+struct ZoneSharedGroup
+{
+ uint32_t quest1;
+ uint32_t quest2;
+ uint32_t quest3;
+ uint32_t quest4;
+ uint32_t quest5;
+ uint32_t quest6;
+
+ ZoneSharedGroup( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );
+};
+
class ExdDataGenerated
@@ -3500,16 +4015,21 @@ struct WorldDCGroupType
xiv::exd::Exd m_AchievementCategoryDat;
xiv::exd::Exd m_AchievementKindDat;
xiv::exd::Exd m_ActionDat;
+ xiv::exd::Exd m_ActionCastTimelineDat;
+ xiv::exd::Exd m_ActionCastVFXDat;
xiv::exd::Exd m_ActionCategoryDat;
xiv::exd::Exd m_ActionComboRouteDat;
xiv::exd::Exd m_ActionIndirectionDat;
+ xiv::exd::Exd m_ActionParamDat;
xiv::exd::Exd m_ActionProcStatusDat;
xiv::exd::Exd m_ActionTimelineDat;
+ xiv::exd::Exd m_ActionTimelineReplaceDat;
xiv::exd::Exd m_ActionTransientDat;
xiv::exd::Exd m_AddonDat;
xiv::exd::Exd m_AdventureDat;
xiv::exd::Exd m_AdventureExPhaseDat;
xiv::exd::Exd m_AetherCurrentDat;
+ xiv::exd::Exd m_AetherCurrentCompFlgSetDat;
xiv::exd::Exd m_AetherialWheelDat;
xiv::exd::Exd m_AetheryteDat;
xiv::exd::Exd m_AirshipExplorationLevelDat;
@@ -3542,6 +4062,7 @@ struct WorldDCGroupType
xiv::exd::Exd m_BNpcBaseDat;
xiv::exd::Exd m_BNpcCustomizeDat;
xiv::exd::Exd m_BNpcNameDat;
+ xiv::exd::Exd m_BuddyDat;
xiv::exd::Exd m_BuddyActionDat;
xiv::exd::Exd m_BuddyEquipDat;
xiv::exd::Exd m_BuddyItemDat;
@@ -3559,6 +4080,7 @@ struct WorldDCGroupType
xiv::exd::Exd m_ChocoboRaceRankDat;
xiv::exd::Exd m_ChocoboRaceStatusDat;
xiv::exd::Exd m_ChocoboRaceTerritoryDat;
+ xiv::exd::Exd m_ChocoboTaxiDat;
xiv::exd::Exd m_ChocoboTaxiStandDat;
xiv::exd::Exd m_ClassJobDat;
xiv::exd::Exd m_ClassJobCategoryDat;
@@ -3580,7 +4102,12 @@ struct WorldDCGroupType
xiv::exd::Exd m_ContentFinderConditionDat;
xiv::exd::Exd m_ContentFinderConditionTransientDat;
xiv::exd::Exd m_ContentMemberTypeDat;
+ xiv::exd::Exd m_ContentNpcTalkDat;
xiv::exd::Exd m_ContentRouletteDat;
+ xiv::exd::Exd m_ContentsNoteDat;
+ xiv::exd::Exd m_ContentsNoteCategoryDat;
+ xiv::exd::Exd m_ContentTalkDat;
+ xiv::exd::Exd m_ContentTalkParamDat;
xiv::exd::Exd m_ContentTypeDat;
xiv::exd::Exd m_CraftActionDat;
xiv::exd::Exd m_CraftLeveDat;
@@ -3609,8 +4136,12 @@ struct WorldDCGroupType
xiv::exd::Exd m_ENpcBaseDat;
xiv::exd::Exd m_ENpcResidentDat;
xiv::exd::Exd m_EObjDat;
+ xiv::exd::Exd m_EObjNameDat;
xiv::exd::Exd m_EquipRaceCategoryDat;
xiv::exd::Exd m_EquipSlotCategoryDat;
+ xiv::exd::Exd m_EurekaAethernetDat;
+ xiv::exd::Exd m_EurekaGrowDataDat;
+ xiv::exd::Exd m_EurekaSphereElementAdjustDat;
xiv::exd::Exd m_EventActionDat;
xiv::exd::Exd m_EventIconPriorityDat;
xiv::exd::Exd m_EventIconTypeDat;
@@ -3628,6 +4159,7 @@ struct WorldDCGroupType
xiv::exd::Exd m_FCProfileDat;
xiv::exd::Exd m_FCReputationDat;
xiv::exd::Exd m_FCRightsDat;
+ xiv::exd::Exd m_FieldMarkerDat;
xiv::exd::Exd m_FishingSpotDat;
xiv::exd::Exd m_FishParameterDat;
xiv::exd::Exd m_GardeningSeedDat;
@@ -3677,7 +4209,6 @@ struct WorldDCGroupType
xiv::exd::Exd m_InstanceContentDat;
xiv::exd::Exd m_InstanceContentBuffDat;
xiv::exd::Exd m_InstanceContentTextDataDat;
- xiv::exd::Exd m_InstanceContentTypeDat;
xiv::exd::Exd m_ItemDat;
xiv::exd::Exd m_ItemActionDat;
xiv::exd::Exd m_ItemFoodDat;
@@ -3705,7 +4236,9 @@ struct WorldDCGroupType
xiv::exd::Exd m_MainCommandCategoryDat;
xiv::exd::Exd m_MapDat;
xiv::exd::Exd m_MapMarkerDat;
+ xiv::exd::Exd m_MapMarkerRegionDat;
xiv::exd::Exd m_MapSymbolDat;
+ xiv::exd::Exd m_MarkerDat;
xiv::exd::Exd m_MasterpieceSupplyDutyDat;
xiv::exd::Exd m_MasterpieceSupplyMultiplierDat;
xiv::exd::Exd m_MateriaDat;
@@ -3718,6 +4251,8 @@ struct WorldDCGroupType
xiv::exd::Exd m_MonsterNoteTargetDat;
xiv::exd::Exd m_MountDat;
xiv::exd::Exd m_MountActionDat;
+ xiv::exd::Exd m_MoveTimelineDat;
+ xiv::exd::Exd m_MoveVfxDat;
xiv::exd::Exd m_NpcEquipDat;
xiv::exd::Exd m_OmenDat;
xiv::exd::Exd m_OnlineStatusDat;
@@ -3727,11 +4262,17 @@ struct WorldDCGroupType
xiv::exd::Exd m_OrchestrionPathDat;
xiv::exd::Exd m_OrchestrionUiparamDat;
xiv::exd::Exd m_ParamGrowDat;
+ xiv::exd::Exd m_PerformDat;
+ xiv::exd::Exd m_PerformTransientDat;
xiv::exd::Exd m_PetDat;
xiv::exd::Exd m_PetActionDat;
xiv::exd::Exd m_PictureDat;
xiv::exd::Exd m_PlaceNameDat;
+ xiv::exd::Exd m_PublicContentDat;
+ xiv::exd::Exd m_PvPActionSortDat;
xiv::exd::Exd m_QuestDat;
+ xiv::exd::Exd m_QuestClassJobRewardDat;
+ xiv::exd::Exd m_QuestRepeatFlagDat;
xiv::exd::Exd m_QuestRewardOtherDat;
xiv::exd::Exd m_QuickChatDat;
xiv::exd::Exd m_QuickChatTransientDat;
@@ -3745,12 +4286,14 @@ struct WorldDCGroupType
xiv::exd::Exd m_RecipeElementDat;
xiv::exd::Exd m_RecipeLevelTableDat;
xiv::exd::Exd m_RecipeNotebookListDat;
+ xiv::exd::Exd m_RecommendContentsDat;
xiv::exd::Exd m_RelicDat;
xiv::exd::Exd m_Relic3Dat;
xiv::exd::Exd m_RelicItemDat;
xiv::exd::Exd m_RelicNoteDat;
xiv::exd::Exd m_RelicNoteCategoryDat;
xiv::exd::Exd m_RetainerTaskDat;
+ xiv::exd::Exd m_RetainerTaskLvRangeDat;
xiv::exd::Exd m_RetainerTaskNormalDat;
xiv::exd::Exd m_RetainerTaskParameterDat;
xiv::exd::Exd m_RetainerTaskRandomDat;
@@ -3758,14 +4301,26 @@ struct WorldDCGroupType
xiv::exd::Exd m_SatisfactionNpcDat;
xiv::exd::Exd m_SatisfactionSupplyDat;
xiv::exd::Exd m_SatisfactionSupplyRewardDat;
+ xiv::exd::Exd m_ScenarioTreeDat;
+ xiv::exd::Exd m_ScenarioTreeTipsDat;
+ xiv::exd::Exd m_ScenarioTreeTipsClassQuestDat;
+ xiv::exd::Exd m_ScenarioTreeTipsQuestDat;
+ xiv::exd::Exd m_ScenarioTypeDat;
xiv::exd::Exd m_ScreenImageDat;
xiv::exd::Exd m_SecretRecipeBookDat;
+ xiv::exd::Exd m_SkyIsland2MissionDat;
+ xiv::exd::Exd m_SkyIsland2MissionDetailDat;
+ xiv::exd::Exd m_SkyIsland2MissionTypeDat;
+ xiv::exd::Exd m_SkyIsland2RangeTypeDat;
xiv::exd::Exd m_SpearfishingItemDat;
xiv::exd::Exd m_SpearfishingNotebookDat;
xiv::exd::Exd m_SpecialShopDat;
xiv::exd::Exd m_SpecialShopItemCategoryDat;
xiv::exd::Exd m_StainDat;
+ xiv::exd::Exd m_StainTransientDat;
xiv::exd::Exd m_StatusDat;
+ xiv::exd::Exd m_StatusHitEffectDat;
+ xiv::exd::Exd m_StatusLoopVFXDat;
xiv::exd::Exd m_StoryDat;
xiv::exd::Exd m_SubmarineExplorationDat;
xiv::exd::Exd m_SubmarinePartDat;
@@ -3781,6 +4336,8 @@ struct WorldDCGroupType
xiv::exd::Exd m_TraitDat;
xiv::exd::Exd m_TraitRecastDat;
xiv::exd::Exd m_TraitTransientDat;
+ xiv::exd::Exd m_TransformationDat;
+ xiv::exd::Exd m_TreasureDat;
xiv::exd::Exd m_TreasureHuntRankDat;
xiv::exd::Exd m_TribeDat;
xiv::exd::Exd m_TripleTriadDat;
@@ -3794,30 +4351,42 @@ struct WorldDCGroupType
xiv::exd::Exd m_TutorialDPSDat;
xiv::exd::Exd m_TutorialHealerDat;
xiv::exd::Exd m_TutorialTankDat;
+ xiv::exd::Exd m_VaseFlowerDat;
+ xiv::exd::Exd m_VFXDat;
xiv::exd::Exd m_WarpDat;
+ xiv::exd::Exd m_WarpConditionDat;
xiv::exd::Exd m_WeatherDat;
xiv::exd::Exd m_WeatherGroupDat;
xiv::exd::Exd m_WeatherRateDat;
+ xiv::exd::Exd m_WeddingBGMDat;
xiv::exd::Exd m_WeeklyBingoOrderDataDat;
xiv::exd::Exd m_WeeklyBingoRewardDataDat;
xiv::exd::Exd m_WeeklyBingoTextDat;
+ xiv::exd::Exd m_WorldDat;
xiv::exd::Exd m_WorldDCGroupTypeDat;
+ xiv::exd::Exd m_YKWDat;
+ xiv::exd::Exd m_ZoneSharedGroupDat;
using AchievementPtr = boost::shared_ptr< Achievement >;
using AchievementCategoryPtr = boost::shared_ptr< AchievementCategory >;
using AchievementKindPtr = boost::shared_ptr< AchievementKind >;
using ActionPtr = boost::shared_ptr< Action >;
+ using ActionCastTimelinePtr = boost::shared_ptr< ActionCastTimeline >;
+ using ActionCastVFXPtr = boost::shared_ptr< ActionCastVFX >;
using ActionCategoryPtr = boost::shared_ptr< ActionCategory >;
using ActionComboRoutePtr = boost::shared_ptr< ActionComboRoute >;
using ActionIndirectionPtr = boost::shared_ptr< ActionIndirection >;
+ using ActionParamPtr = boost::shared_ptr< ActionParam >;
using ActionProcStatusPtr = boost::shared_ptr< ActionProcStatus >;
using ActionTimelinePtr = boost::shared_ptr< ActionTimeline >;
+ using ActionTimelineReplacePtr = boost::shared_ptr< ActionTimelineReplace >;
using ActionTransientPtr = boost::shared_ptr< ActionTransient >;
using AddonPtr = boost::shared_ptr< Addon >;
using AdventurePtr = boost::shared_ptr< Adventure >;
using AdventureExPhasePtr = boost::shared_ptr< AdventureExPhase >;
using AetherCurrentPtr = boost::shared_ptr< AetherCurrent >;
+ using AetherCurrentCompFlgSetPtr = boost::shared_ptr< AetherCurrentCompFlgSet >;
using AetherialWheelPtr = boost::shared_ptr< AetherialWheel >;
using AetherytePtr = boost::shared_ptr< Aetheryte >;
using AirshipExplorationLevelPtr = boost::shared_ptr< AirshipExplorationLevel >;
@@ -3850,6 +4419,7 @@ struct WorldDCGroupType
using BNpcBasePtr = boost::shared_ptr< BNpcBase >;
using BNpcCustomizePtr = boost::shared_ptr< BNpcCustomize >;
using BNpcNamePtr = boost::shared_ptr< BNpcName >;
+ using BuddyPtr = boost::shared_ptr< Buddy >;
using BuddyActionPtr = boost::shared_ptr< BuddyAction >;
using BuddyEquipPtr = boost::shared_ptr< BuddyEquip >;
using BuddyItemPtr = boost::shared_ptr< BuddyItem >;
@@ -3867,6 +4437,7 @@ struct WorldDCGroupType
using ChocoboRaceRankPtr = boost::shared_ptr< ChocoboRaceRank >;
using ChocoboRaceStatusPtr = boost::shared_ptr< ChocoboRaceStatus >;
using ChocoboRaceTerritoryPtr = boost::shared_ptr< ChocoboRaceTerritory >;
+ using ChocoboTaxiPtr = boost::shared_ptr< ChocoboTaxi >;
using ChocoboTaxiStandPtr = boost::shared_ptr< ChocoboTaxiStand >;
using ClassJobPtr = boost::shared_ptr< ClassJob >;
using ClassJobCategoryPtr = boost::shared_ptr< ClassJobCategory >;
@@ -3888,7 +4459,12 @@ struct WorldDCGroupType
using ContentFinderConditionPtr = boost::shared_ptr< ContentFinderCondition >;
using ContentFinderConditionTransientPtr = boost::shared_ptr< ContentFinderConditionTransient >;
using ContentMemberTypePtr = boost::shared_ptr< ContentMemberType >;
+ using ContentNpcTalkPtr = boost::shared_ptr< ContentNpcTalk >;
using ContentRoulettePtr = boost::shared_ptr< ContentRoulette >;
+ using ContentsNotePtr = boost::shared_ptr< ContentsNote >;
+ using ContentsNoteCategoryPtr = boost::shared_ptr< ContentsNoteCategory >;
+ using ContentTalkPtr = boost::shared_ptr< ContentTalk >;
+ using ContentTalkParamPtr = boost::shared_ptr< ContentTalkParam >;
using ContentTypePtr = boost::shared_ptr< ContentType >;
using CraftActionPtr = boost::shared_ptr< CraftAction >;
using CraftLevePtr = boost::shared_ptr< CraftLeve >;
@@ -3917,8 +4493,12 @@ struct WorldDCGroupType
using ENpcBasePtr = boost::shared_ptr< ENpcBase >;
using ENpcResidentPtr = boost::shared_ptr< ENpcResident >;
using EObjPtr = boost::shared_ptr< EObj >;
+ using EObjNamePtr = boost::shared_ptr< EObjName >;
using EquipRaceCategoryPtr = boost::shared_ptr< EquipRaceCategory >;
using EquipSlotCategoryPtr = boost::shared_ptr< EquipSlotCategory >;
+ using EurekaAethernetPtr = boost::shared_ptr< EurekaAethernet >;
+ using EurekaGrowDataPtr = boost::shared_ptr< EurekaGrowData >;
+ using EurekaSphereElementAdjustPtr = boost::shared_ptr< EurekaSphereElementAdjust >;
using EventActionPtr = boost::shared_ptr< EventAction >;
using EventIconPriorityPtr = boost::shared_ptr< EventIconPriority >;
using EventIconTypePtr = boost::shared_ptr< EventIconType >;
@@ -3936,6 +4516,7 @@ struct WorldDCGroupType
using FCProfilePtr = boost::shared_ptr< FCProfile >;
using FCReputationPtr = boost::shared_ptr< FCReputation >;
using FCRightsPtr = boost::shared_ptr< FCRights >;
+ using FieldMarkerPtr = boost::shared_ptr< FieldMarker >;
using FishingSpotPtr = boost::shared_ptr< FishingSpot >;
using FishParameterPtr = boost::shared_ptr< FishParameter >;
using GardeningSeedPtr = boost::shared_ptr< GardeningSeed >;
@@ -3985,7 +4566,6 @@ struct WorldDCGroupType
using InstanceContentPtr = boost::shared_ptr< InstanceContent >;
using InstanceContentBuffPtr = boost::shared_ptr< InstanceContentBuff >;
using InstanceContentTextDataPtr = boost::shared_ptr< InstanceContentTextData >;
- using InstanceContentTypePtr = boost::shared_ptr< InstanceContentType >;
using ItemPtr = boost::shared_ptr< Item >;
using ItemActionPtr = boost::shared_ptr< ItemAction >;
using ItemFoodPtr = boost::shared_ptr< ItemFood >;
@@ -4013,7 +4593,9 @@ struct WorldDCGroupType
using MainCommandCategoryPtr = boost::shared_ptr< MainCommandCategory >;
using MapPtr = boost::shared_ptr< Map >;
using MapMarkerPtr = boost::shared_ptr< MapMarker >;
+ using MapMarkerRegionPtr = boost::shared_ptr< MapMarkerRegion >;
using MapSymbolPtr = boost::shared_ptr< MapSymbol >;
+ using MarkerPtr = boost::shared_ptr< Marker >;
using MasterpieceSupplyDutyPtr = boost::shared_ptr< MasterpieceSupplyDuty >;
using MasterpieceSupplyMultiplierPtr = boost::shared_ptr< MasterpieceSupplyMultiplier >;
using MateriaPtr = boost::shared_ptr< Materia >;
@@ -4026,6 +4608,8 @@ struct WorldDCGroupType
using MonsterNoteTargetPtr = boost::shared_ptr< MonsterNoteTarget >;
using MountPtr = boost::shared_ptr< Mount >;
using MountActionPtr = boost::shared_ptr< MountAction >;
+ using MoveTimelinePtr = boost::shared_ptr< MoveTimeline >;
+ using MoveVfxPtr = boost::shared_ptr< MoveVfx >;
using NpcEquipPtr = boost::shared_ptr< NpcEquip >;
using OmenPtr = boost::shared_ptr< Omen >;
using OnlineStatusPtr = boost::shared_ptr< OnlineStatus >;
@@ -4035,11 +4619,17 @@ struct WorldDCGroupType
using OrchestrionPathPtr = boost::shared_ptr< OrchestrionPath >;
using OrchestrionUiparamPtr = boost::shared_ptr< OrchestrionUiparam >;
using ParamGrowPtr = boost::shared_ptr< ParamGrow >;
+ using PerformPtr = boost::shared_ptr< Perform >;
+ using PerformTransientPtr = boost::shared_ptr< PerformTransient >;
using PetPtr = boost::shared_ptr< Pet >;
using PetActionPtr = boost::shared_ptr< PetAction >;
using PicturePtr = boost::shared_ptr< Picture >;
using PlaceNamePtr = boost::shared_ptr< PlaceName >;
+ using PublicContentPtr = boost::shared_ptr< PublicContent >;
+ using PvPActionSortPtr = boost::shared_ptr< PvPActionSort >;
using QuestPtr = boost::shared_ptr< Quest >;
+ using QuestClassJobRewardPtr = boost::shared_ptr< QuestClassJobReward >;
+ using QuestRepeatFlagPtr = boost::shared_ptr< QuestRepeatFlag >;
using QuestRewardOtherPtr = boost::shared_ptr< QuestRewardOther >;
using QuickChatPtr = boost::shared_ptr< QuickChat >;
using QuickChatTransientPtr = boost::shared_ptr< QuickChatTransient >;
@@ -4053,12 +4643,14 @@ struct WorldDCGroupType
using RecipeElementPtr = boost::shared_ptr< RecipeElement >;
using RecipeLevelTablePtr = boost::shared_ptr< RecipeLevelTable >;
using RecipeNotebookListPtr = boost::shared_ptr< RecipeNotebookList >;
+ using RecommendContentsPtr = boost::shared_ptr< RecommendContents >;
using RelicPtr = boost::shared_ptr< Relic >;
using Relic3Ptr = boost::shared_ptr< Relic3 >;
using RelicItemPtr = boost::shared_ptr< RelicItem >;
using RelicNotePtr = boost::shared_ptr< RelicNote >;
using RelicNoteCategoryPtr = boost::shared_ptr< RelicNoteCategory >;
using RetainerTaskPtr = boost::shared_ptr< RetainerTask >;
+ using RetainerTaskLvRangePtr = boost::shared_ptr< RetainerTaskLvRange >;
using RetainerTaskNormalPtr = boost::shared_ptr< RetainerTaskNormal >;
using RetainerTaskParameterPtr = boost::shared_ptr< RetainerTaskParameter >;
using RetainerTaskRandomPtr = boost::shared_ptr< RetainerTaskRandom >;
@@ -4066,14 +4658,26 @@ struct WorldDCGroupType
using SatisfactionNpcPtr = boost::shared_ptr< SatisfactionNpc >;
using SatisfactionSupplyPtr = boost::shared_ptr< SatisfactionSupply >;
using SatisfactionSupplyRewardPtr = boost::shared_ptr< SatisfactionSupplyReward >;
+ using ScenarioTreePtr = boost::shared_ptr< ScenarioTree >;
+ using ScenarioTreeTipsPtr = boost::shared_ptr< ScenarioTreeTips >;
+ using ScenarioTreeTipsClassQuestPtr = boost::shared_ptr< ScenarioTreeTipsClassQuest >;
+ using ScenarioTreeTipsQuestPtr = boost::shared_ptr< ScenarioTreeTipsQuest >;
+ using ScenarioTypePtr = boost::shared_ptr< ScenarioType >;
using ScreenImagePtr = boost::shared_ptr< ScreenImage >;
using SecretRecipeBookPtr = boost::shared_ptr< SecretRecipeBook >;
+ using SkyIsland2MissionPtr = boost::shared_ptr< SkyIsland2Mission >;
+ using SkyIsland2MissionDetailPtr = boost::shared_ptr< SkyIsland2MissionDetail >;
+ using SkyIsland2MissionTypePtr = boost::shared_ptr< SkyIsland2MissionType >;
+ using SkyIsland2RangeTypePtr = boost::shared_ptr< SkyIsland2RangeType >;
using SpearfishingItemPtr = boost::shared_ptr< SpearfishingItem >;
using SpearfishingNotebookPtr = boost::shared_ptr< SpearfishingNotebook >;
using SpecialShopPtr = boost::shared_ptr< SpecialShop >;
using SpecialShopItemCategoryPtr = boost::shared_ptr< SpecialShopItemCategory >;
using StainPtr = boost::shared_ptr< Stain >;
+ using StainTransientPtr = boost::shared_ptr< StainTransient >;
using StatusPtr = boost::shared_ptr< Status >;
+ using StatusHitEffectPtr = boost::shared_ptr< StatusHitEffect >;
+ using StatusLoopVFXPtr = boost::shared_ptr< StatusLoopVFX >;
using StoryPtr = boost::shared_ptr< Story >;
using SubmarineExplorationPtr = boost::shared_ptr< SubmarineExploration >;
using SubmarinePartPtr = boost::shared_ptr< SubmarinePart >;
@@ -4089,6 +4693,8 @@ struct WorldDCGroupType
using TraitPtr = boost::shared_ptr< Trait >;
using TraitRecastPtr = boost::shared_ptr< TraitRecast >;
using TraitTransientPtr = boost::shared_ptr< TraitTransient >;
+ using TransformationPtr = boost::shared_ptr< Transformation >;
+ using TreasurePtr = boost::shared_ptr< Treasure >;
using TreasureHuntRankPtr = boost::shared_ptr< TreasureHuntRank >;
using TribePtr = boost::shared_ptr< Tribe >;
using TripleTriadPtr = boost::shared_ptr< TripleTriad >;
@@ -4102,14 +4708,21 @@ struct WorldDCGroupType
using TutorialDPSPtr = boost::shared_ptr< TutorialDPS >;
using TutorialHealerPtr = boost::shared_ptr< TutorialHealer >;
using TutorialTankPtr = boost::shared_ptr< TutorialTank >;
+ using VaseFlowerPtr = boost::shared_ptr< VaseFlower >;
+ using VFXPtr = boost::shared_ptr< VFX >;
using WarpPtr = boost::shared_ptr< Warp >;
+ using WarpConditionPtr = boost::shared_ptr< WarpCondition >;
using WeatherPtr = boost::shared_ptr< Weather >;
using WeatherGroupPtr = boost::shared_ptr< WeatherGroup >;
using WeatherRatePtr = boost::shared_ptr< WeatherRate >;
+ using WeddingBGMPtr = boost::shared_ptr< WeddingBGM >;
using WeeklyBingoOrderDataPtr = boost::shared_ptr< WeeklyBingoOrderData >;
using WeeklyBingoRewardDataPtr = boost::shared_ptr< WeeklyBingoRewardData >;
using WeeklyBingoTextPtr = boost::shared_ptr< WeeklyBingoText >;
+ using WorldPtr = boost::shared_ptr< World >;
using WorldDCGroupTypePtr = boost::shared_ptr< WorldDCGroupType >;
+ using YKWPtr = boost::shared_ptr< YKW >;
+ using ZoneSharedGroupPtr = boost::shared_ptr< ZoneSharedGroup >;
template< class T >
boost::shared_ptr< T > get( uint32_t id )
@@ -4131,16 +4744,21 @@ struct WorldDCGroupType
std::set< uint32_t > m_AchievementCategoryIdList;
std::set< uint32_t > m_AchievementKindIdList;
std::set< uint32_t > m_ActionIdList;
+ std::set< uint32_t > m_ActionCastTimelineIdList;
+ std::set< uint32_t > m_ActionCastVFXIdList;
std::set< uint32_t > m_ActionCategoryIdList;
std::set< uint32_t > m_ActionComboRouteIdList;
std::set< uint32_t > m_ActionIndirectionIdList;
+ std::set< uint32_t > m_ActionParamIdList;
std::set< uint32_t > m_ActionProcStatusIdList;
std::set< uint32_t > m_ActionTimelineIdList;
+ std::set< uint32_t > m_ActionTimelineReplaceIdList;
std::set< uint32_t > m_ActionTransientIdList;
std::set< uint32_t > m_AddonIdList;
std::set< uint32_t > m_AdventureIdList;
std::set< uint32_t > m_AdventureExPhaseIdList;
std::set< uint32_t > m_AetherCurrentIdList;
+ std::set< uint32_t > m_AetherCurrentCompFlgSetIdList;
std::set< uint32_t > m_AetherialWheelIdList;
std::set< uint32_t > m_AetheryteIdList;
std::set< uint32_t > m_AirshipExplorationLevelIdList;
@@ -4173,6 +4791,7 @@ struct WorldDCGroupType
std::set< uint32_t > m_BNpcBaseIdList;
std::set< uint32_t > m_BNpcCustomizeIdList;
std::set< uint32_t > m_BNpcNameIdList;
+ std::set< uint32_t > m_BuddyIdList;
std::set< uint32_t > m_BuddyActionIdList;
std::set< uint32_t > m_BuddyEquipIdList;
std::set< uint32_t > m_BuddyItemIdList;
@@ -4190,6 +4809,7 @@ struct WorldDCGroupType
std::set< uint32_t > m_ChocoboRaceRankIdList;
std::set< uint32_t > m_ChocoboRaceStatusIdList;
std::set< uint32_t > m_ChocoboRaceTerritoryIdList;
+ std::set< uint32_t > m_ChocoboTaxiIdList;
std::set< uint32_t > m_ChocoboTaxiStandIdList;
std::set< uint32_t > m_ClassJobIdList;
std::set< uint32_t > m_ClassJobCategoryIdList;
@@ -4211,7 +4831,12 @@ struct WorldDCGroupType
std::set< uint32_t > m_ContentFinderConditionIdList;
std::set< uint32_t > m_ContentFinderConditionTransientIdList;
std::set< uint32_t > m_ContentMemberTypeIdList;
+ std::set< uint32_t > m_ContentNpcTalkIdList;
std::set< uint32_t > m_ContentRouletteIdList;
+ std::set< uint32_t > m_ContentsNoteIdList;
+ std::set< uint32_t > m_ContentsNoteCategoryIdList;
+ std::set< uint32_t > m_ContentTalkIdList;
+ std::set< uint32_t > m_ContentTalkParamIdList;
std::set< uint32_t > m_ContentTypeIdList;
std::set< uint32_t > m_CraftActionIdList;
std::set< uint32_t > m_CraftLeveIdList;
@@ -4240,8 +4865,12 @@ struct WorldDCGroupType
std::set< uint32_t > m_ENpcBaseIdList;
std::set< uint32_t > m_ENpcResidentIdList;
std::set< uint32_t > m_EObjIdList;
+ std::set< uint32_t > m_EObjNameIdList;
std::set< uint32_t > m_EquipRaceCategoryIdList;
std::set< uint32_t > m_EquipSlotCategoryIdList;
+ std::set< uint32_t > m_EurekaAethernetIdList;
+ std::set< uint32_t > m_EurekaGrowDataIdList;
+ std::set< uint32_t > m_EurekaSphereElementAdjustIdList;
std::set< uint32_t > m_EventActionIdList;
std::set< uint32_t > m_EventIconPriorityIdList;
std::set< uint32_t > m_EventIconTypeIdList;
@@ -4259,6 +4888,7 @@ struct WorldDCGroupType
std::set< uint32_t > m_FCProfileIdList;
std::set< uint32_t > m_FCReputationIdList;
std::set< uint32_t > m_FCRightsIdList;
+ std::set< uint32_t > m_FieldMarkerIdList;
std::set< uint32_t > m_FishingSpotIdList;
std::set< uint32_t > m_FishParameterIdList;
std::set< uint32_t > m_GardeningSeedIdList;
@@ -4308,7 +4938,6 @@ struct WorldDCGroupType
std::set< uint32_t > m_InstanceContentIdList;
std::set< uint32_t > m_InstanceContentBuffIdList;
std::set< uint32_t > m_InstanceContentTextDataIdList;
- std::set< uint32_t > m_InstanceContentTypeIdList;
std::set< uint32_t > m_ItemIdList;
std::set< uint32_t > m_ItemActionIdList;
std::set< uint32_t > m_ItemFoodIdList;
@@ -4336,7 +4965,9 @@ struct WorldDCGroupType
std::set< uint32_t > m_MainCommandCategoryIdList;
std::set< uint32_t > m_MapIdList;
std::set< uint32_t > m_MapMarkerIdList;
+ std::set< uint32_t > m_MapMarkerRegionIdList;
std::set< uint32_t > m_MapSymbolIdList;
+ std::set< uint32_t > m_MarkerIdList;
std::set< uint32_t > m_MasterpieceSupplyDutyIdList;
std::set< uint32_t > m_MasterpieceSupplyMultiplierIdList;
std::set< uint32_t > m_MateriaIdList;
@@ -4349,6 +4980,8 @@ struct WorldDCGroupType
std::set< uint32_t > m_MonsterNoteTargetIdList;
std::set< uint32_t > m_MountIdList;
std::set< uint32_t > m_MountActionIdList;
+ std::set< uint32_t > m_MoveTimelineIdList;
+ std::set< uint32_t > m_MoveVfxIdList;
std::set< uint32_t > m_NpcEquipIdList;
std::set< uint32_t > m_OmenIdList;
std::set< uint32_t > m_OnlineStatusIdList;
@@ -4358,11 +4991,17 @@ struct WorldDCGroupType
std::set< uint32_t > m_OrchestrionPathIdList;
std::set< uint32_t > m_OrchestrionUiparamIdList;
std::set< uint32_t > m_ParamGrowIdList;
+ std::set< uint32_t > m_PerformIdList;
+ std::set< uint32_t > m_PerformTransientIdList;
std::set< uint32_t > m_PetIdList;
std::set< uint32_t > m_PetActionIdList;
std::set< uint32_t > m_PictureIdList;
std::set< uint32_t > m_PlaceNameIdList;
+ std::set< uint32_t > m_PublicContentIdList;
+ std::set< uint32_t > m_PvPActionSortIdList;
std::set< uint32_t > m_QuestIdList;
+ std::set< uint32_t > m_QuestClassJobRewardIdList;
+ std::set< uint32_t > m_QuestRepeatFlagIdList;
std::set< uint32_t > m_QuestRewardOtherIdList;
std::set< uint32_t > m_QuickChatIdList;
std::set< uint32_t > m_QuickChatTransientIdList;
@@ -4376,12 +5015,14 @@ struct WorldDCGroupType
std::set< uint32_t > m_RecipeElementIdList;
std::set< uint32_t > m_RecipeLevelTableIdList;
std::set< uint32_t > m_RecipeNotebookListIdList;
+ std::set< uint32_t > m_RecommendContentsIdList;
std::set< uint32_t > m_RelicIdList;
std::set< uint32_t > m_Relic3IdList;
std::set< uint32_t > m_RelicItemIdList;
std::set< uint32_t > m_RelicNoteIdList;
std::set< uint32_t > m_RelicNoteCategoryIdList;
std::set< uint32_t > m_RetainerTaskIdList;
+ std::set< uint32_t > m_RetainerTaskLvRangeIdList;
std::set< uint32_t > m_RetainerTaskNormalIdList;
std::set< uint32_t > m_RetainerTaskParameterIdList;
std::set< uint32_t > m_RetainerTaskRandomIdList;
@@ -4389,14 +5030,26 @@ struct WorldDCGroupType
std::set< uint32_t > m_SatisfactionNpcIdList;
std::set< uint32_t > m_SatisfactionSupplyIdList;
std::set< uint32_t > m_SatisfactionSupplyRewardIdList;
+ std::set< uint32_t > m_ScenarioTreeIdList;
+ std::set< uint32_t > m_ScenarioTreeTipsIdList;
+ std::set< uint32_t > m_ScenarioTreeTipsClassQuestIdList;
+ std::set< uint32_t > m_ScenarioTreeTipsQuestIdList;
+ std::set< uint32_t > m_ScenarioTypeIdList;
std::set< uint32_t > m_ScreenImageIdList;
std::set< uint32_t > m_SecretRecipeBookIdList;
+ std::set< uint32_t > m_SkyIsland2MissionIdList;
+ std::set< uint32_t > m_SkyIsland2MissionDetailIdList;
+ std::set< uint32_t > m_SkyIsland2MissionTypeIdList;
+ std::set< uint32_t > m_SkyIsland2RangeTypeIdList;
std::set< uint32_t > m_SpearfishingItemIdList;
std::set< uint32_t > m_SpearfishingNotebookIdList;
std::set< uint32_t > m_SpecialShopIdList;
std::set< uint32_t > m_SpecialShopItemCategoryIdList;
std::set< uint32_t > m_StainIdList;
+ std::set< uint32_t > m_StainTransientIdList;
std::set< uint32_t > m_StatusIdList;
+ std::set< uint32_t > m_StatusHitEffectIdList;
+ std::set< uint32_t > m_StatusLoopVFXIdList;
std::set< uint32_t > m_StoryIdList;
std::set< uint32_t > m_SubmarineExplorationIdList;
std::set< uint32_t > m_SubmarinePartIdList;
@@ -4412,6 +5065,8 @@ struct WorldDCGroupType
std::set< uint32_t > m_TraitIdList;
std::set< uint32_t > m_TraitRecastIdList;
std::set< uint32_t > m_TraitTransientIdList;
+ std::set< uint32_t > m_TransformationIdList;
+ std::set< uint32_t > m_TreasureIdList;
std::set< uint32_t > m_TreasureHuntRankIdList;
std::set< uint32_t > m_TribeIdList;
std::set< uint32_t > m_TripleTriadIdList;
@@ -4425,14 +5080,21 @@ struct WorldDCGroupType
std::set< uint32_t > m_TutorialDPSIdList;
std::set< uint32_t > m_TutorialHealerIdList;
std::set< uint32_t > m_TutorialTankIdList;
+ std::set< uint32_t > m_VaseFlowerIdList;
+ std::set< uint32_t > m_VFXIdList;
std::set< uint32_t > m_WarpIdList;
+ std::set< uint32_t > m_WarpConditionIdList;
std::set< uint32_t > m_WeatherIdList;
std::set< uint32_t > m_WeatherGroupIdList;
std::set< uint32_t > m_WeatherRateIdList;
+ std::set< uint32_t > m_WeddingBGMIdList;
std::set< uint32_t > m_WeeklyBingoOrderDataIdList;
std::set< uint32_t > m_WeeklyBingoRewardDataIdList;
std::set< uint32_t > m_WeeklyBingoTextIdList;
+ std::set< uint32_t > m_WorldIdList;
std::set< uint32_t > m_WorldDCGroupTypeIdList;
+ std::set< uint32_t > m_YKWIdList;
+ std::set< uint32_t > m_ZoneSharedGroupIdList;
const std::set< uint32_t >& getAchievementIdList()
@@ -4459,6 +5121,18 @@ const std::set< uint32_t >& getActionIdList()
loadIdList( m_ActionDat, m_ActionIdList );
return m_ActionIdList;
}
+const std::set< uint32_t >& getActionCastTimelineIdList()
+{
+ if( m_ActionCastTimelineIdList.size() == 0 )
+ loadIdList( m_ActionCastTimelineDat, m_ActionCastTimelineIdList );
+ return m_ActionCastTimelineIdList;
+}
+const std::set< uint32_t >& getActionCastVFXIdList()
+{
+ if( m_ActionCastVFXIdList.size() == 0 )
+ loadIdList( m_ActionCastVFXDat, m_ActionCastVFXIdList );
+ return m_ActionCastVFXIdList;
+}
const std::set< uint32_t >& getActionCategoryIdList()
{
if( m_ActionCategoryIdList.size() == 0 )
@@ -4477,6 +5151,12 @@ const std::set< uint32_t >& getActionIndirectionIdList()
loadIdList( m_ActionIndirectionDat, m_ActionIndirectionIdList );
return m_ActionIndirectionIdList;
}
+const std::set< uint32_t >& getActionParamIdList()
+{
+ if( m_ActionParamIdList.size() == 0 )
+ loadIdList( m_ActionParamDat, m_ActionParamIdList );
+ return m_ActionParamIdList;
+}
const std::set< uint32_t >& getActionProcStatusIdList()
{
if( m_ActionProcStatusIdList.size() == 0 )
@@ -4489,6 +5169,12 @@ const std::set< uint32_t >& getActionTimelineIdList()
loadIdList( m_ActionTimelineDat, m_ActionTimelineIdList );
return m_ActionTimelineIdList;
}
+const std::set< uint32_t >& getActionTimelineReplaceIdList()
+{
+ if( m_ActionTimelineReplaceIdList.size() == 0 )
+ loadIdList( m_ActionTimelineReplaceDat, m_ActionTimelineReplaceIdList );
+ return m_ActionTimelineReplaceIdList;
+}
const std::set< uint32_t >& getActionTransientIdList()
{
if( m_ActionTransientIdList.size() == 0 )
@@ -4519,6 +5205,12 @@ const std::set< uint32_t >& getAetherCurrentIdList()
loadIdList( m_AetherCurrentDat, m_AetherCurrentIdList );
return m_AetherCurrentIdList;
}
+const std::set< uint32_t >& getAetherCurrentCompFlgSetIdList()
+{
+ if( m_AetherCurrentCompFlgSetIdList.size() == 0 )
+ loadIdList( m_AetherCurrentCompFlgSetDat, m_AetherCurrentCompFlgSetIdList );
+ return m_AetherCurrentCompFlgSetIdList;
+}
const std::set< uint32_t >& getAetherialWheelIdList()
{
if( m_AetherialWheelIdList.size() == 0 )
@@ -4711,6 +5403,12 @@ const std::set< uint32_t >& getBNpcNameIdList()
loadIdList( m_BNpcNameDat, m_BNpcNameIdList );
return m_BNpcNameIdList;
}
+const std::set< uint32_t >& getBuddyIdList()
+{
+ if( m_BuddyIdList.size() == 0 )
+ loadIdList( m_BuddyDat, m_BuddyIdList );
+ return m_BuddyIdList;
+}
const std::set< uint32_t >& getBuddyActionIdList()
{
if( m_BuddyActionIdList.size() == 0 )
@@ -4813,6 +5511,12 @@ const std::set< uint32_t >& getChocoboRaceTerritoryIdList()
loadIdList( m_ChocoboRaceTerritoryDat, m_ChocoboRaceTerritoryIdList );
return m_ChocoboRaceTerritoryIdList;
}
+const std::set< uint32_t >& getChocoboTaxiIdList()
+{
+ if( m_ChocoboTaxiIdList.size() == 0 )
+ loadIdList( m_ChocoboTaxiDat, m_ChocoboTaxiIdList );
+ return m_ChocoboTaxiIdList;
+}
const std::set< uint32_t >& getChocoboTaxiStandIdList()
{
if( m_ChocoboTaxiStandIdList.size() == 0 )
@@ -4939,12 +5643,42 @@ const std::set< uint32_t >& getContentMemberTypeIdList()
loadIdList( m_ContentMemberTypeDat, m_ContentMemberTypeIdList );
return m_ContentMemberTypeIdList;
}
+const std::set< uint32_t >& getContentNpcTalkIdList()
+{
+ if( m_ContentNpcTalkIdList.size() == 0 )
+ loadIdList( m_ContentNpcTalkDat, m_ContentNpcTalkIdList );
+ return m_ContentNpcTalkIdList;
+}
const std::set< uint32_t >& getContentRouletteIdList()
{
if( m_ContentRouletteIdList.size() == 0 )
loadIdList( m_ContentRouletteDat, m_ContentRouletteIdList );
return m_ContentRouletteIdList;
}
+const std::set< uint32_t >& getContentsNoteIdList()
+{
+ if( m_ContentsNoteIdList.size() == 0 )
+ loadIdList( m_ContentsNoteDat, m_ContentsNoteIdList );
+ return m_ContentsNoteIdList;
+}
+const std::set< uint32_t >& getContentsNoteCategoryIdList()
+{
+ if( m_ContentsNoteCategoryIdList.size() == 0 )
+ loadIdList( m_ContentsNoteCategoryDat, m_ContentsNoteCategoryIdList );
+ return m_ContentsNoteCategoryIdList;
+}
+const std::set< uint32_t >& getContentTalkIdList()
+{
+ if( m_ContentTalkIdList.size() == 0 )
+ loadIdList( m_ContentTalkDat, m_ContentTalkIdList );
+ return m_ContentTalkIdList;
+}
+const std::set< uint32_t >& getContentTalkParamIdList()
+{
+ if( m_ContentTalkParamIdList.size() == 0 )
+ loadIdList( m_ContentTalkParamDat, m_ContentTalkParamIdList );
+ return m_ContentTalkParamIdList;
+}
const std::set< uint32_t >& getContentTypeIdList()
{
if( m_ContentTypeIdList.size() == 0 )
@@ -5113,6 +5847,12 @@ const std::set< uint32_t >& getEObjIdList()
loadIdList( m_EObjDat, m_EObjIdList );
return m_EObjIdList;
}
+const std::set< uint32_t >& getEObjNameIdList()
+{
+ if( m_EObjNameIdList.size() == 0 )
+ loadIdList( m_EObjNameDat, m_EObjNameIdList );
+ return m_EObjNameIdList;
+}
const std::set< uint32_t >& getEquipRaceCategoryIdList()
{
if( m_EquipRaceCategoryIdList.size() == 0 )
@@ -5125,6 +5865,24 @@ const std::set< uint32_t >& getEquipSlotCategoryIdList()
loadIdList( m_EquipSlotCategoryDat, m_EquipSlotCategoryIdList );
return m_EquipSlotCategoryIdList;
}
+const std::set< uint32_t >& getEurekaAethernetIdList()
+{
+ if( m_EurekaAethernetIdList.size() == 0 )
+ loadIdList( m_EurekaAethernetDat, m_EurekaAethernetIdList );
+ return m_EurekaAethernetIdList;
+}
+const std::set< uint32_t >& getEurekaGrowDataIdList()
+{
+ if( m_EurekaGrowDataIdList.size() == 0 )
+ loadIdList( m_EurekaGrowDataDat, m_EurekaGrowDataIdList );
+ return m_EurekaGrowDataIdList;
+}
+const std::set< uint32_t >& getEurekaSphereElementAdjustIdList()
+{
+ if( m_EurekaSphereElementAdjustIdList.size() == 0 )
+ loadIdList( m_EurekaSphereElementAdjustDat, m_EurekaSphereElementAdjustIdList );
+ return m_EurekaSphereElementAdjustIdList;
+}
const std::set< uint32_t >& getEventActionIdList()
{
if( m_EventActionIdList.size() == 0 )
@@ -5227,6 +5985,12 @@ const std::set< uint32_t >& getFCRightsIdList()
loadIdList( m_FCRightsDat, m_FCRightsIdList );
return m_FCRightsIdList;
}
+const std::set< uint32_t >& getFieldMarkerIdList()
+{
+ if( m_FieldMarkerIdList.size() == 0 )
+ loadIdList( m_FieldMarkerDat, m_FieldMarkerIdList );
+ return m_FieldMarkerIdList;
+}
const std::set< uint32_t >& getFishingSpotIdList()
{
if( m_FishingSpotIdList.size() == 0 )
@@ -5521,12 +6285,6 @@ const std::set< uint32_t >& getInstanceContentTextDataIdList()
loadIdList( m_InstanceContentTextDataDat, m_InstanceContentTextDataIdList );
return m_InstanceContentTextDataIdList;
}
-const std::set< uint32_t >& getInstanceContentTypeIdList()
-{
- if( m_InstanceContentTypeIdList.size() == 0 )
- loadIdList( m_InstanceContentTypeDat, m_InstanceContentTypeIdList );
- return m_InstanceContentTypeIdList;
-}
const std::set< uint32_t >& getItemIdList()
{
if( m_ItemIdList.size() == 0 )
@@ -5689,12 +6447,24 @@ const std::set< uint32_t >& getMapMarkerIdList()
loadIdList( m_MapMarkerDat, m_MapMarkerIdList );
return m_MapMarkerIdList;
}
+const std::set< uint32_t >& getMapMarkerRegionIdList()
+{
+ if( m_MapMarkerRegionIdList.size() == 0 )
+ loadIdList( m_MapMarkerRegionDat, m_MapMarkerRegionIdList );
+ return m_MapMarkerRegionIdList;
+}
const std::set< uint32_t >& getMapSymbolIdList()
{
if( m_MapSymbolIdList.size() == 0 )
loadIdList( m_MapSymbolDat, m_MapSymbolIdList );
return m_MapSymbolIdList;
}
+const std::set< uint32_t >& getMarkerIdList()
+{
+ if( m_MarkerIdList.size() == 0 )
+ loadIdList( m_MarkerDat, m_MarkerIdList );
+ return m_MarkerIdList;
+}
const std::set< uint32_t >& getMasterpieceSupplyDutyIdList()
{
if( m_MasterpieceSupplyDutyIdList.size() == 0 )
@@ -5767,6 +6537,18 @@ const std::set< uint32_t >& getMountActionIdList()
loadIdList( m_MountActionDat, m_MountActionIdList );
return m_MountActionIdList;
}
+const std::set< uint32_t >& getMoveTimelineIdList()
+{
+ if( m_MoveTimelineIdList.size() == 0 )
+ loadIdList( m_MoveTimelineDat, m_MoveTimelineIdList );
+ return m_MoveTimelineIdList;
+}
+const std::set< uint32_t >& getMoveVfxIdList()
+{
+ if( m_MoveVfxIdList.size() == 0 )
+ loadIdList( m_MoveVfxDat, m_MoveVfxIdList );
+ return m_MoveVfxIdList;
+}
const std::set< uint32_t >& getNpcEquipIdList()
{
if( m_NpcEquipIdList.size() == 0 )
@@ -5821,6 +6603,18 @@ const std::set< uint32_t >& getParamGrowIdList()
loadIdList( m_ParamGrowDat, m_ParamGrowIdList );
return m_ParamGrowIdList;
}
+const std::set< uint32_t >& getPerformIdList()
+{
+ if( m_PerformIdList.size() == 0 )
+ loadIdList( m_PerformDat, m_PerformIdList );
+ return m_PerformIdList;
+}
+const std::set< uint32_t >& getPerformTransientIdList()
+{
+ if( m_PerformTransientIdList.size() == 0 )
+ loadIdList( m_PerformTransientDat, m_PerformTransientIdList );
+ return m_PerformTransientIdList;
+}
const std::set< uint32_t >& getPetIdList()
{
if( m_PetIdList.size() == 0 )
@@ -5845,12 +6639,36 @@ const std::set< uint32_t >& getPlaceNameIdList()
loadIdList( m_PlaceNameDat, m_PlaceNameIdList );
return m_PlaceNameIdList;
}
+const std::set< uint32_t >& getPublicContentIdList()
+{
+ if( m_PublicContentIdList.size() == 0 )
+ loadIdList( m_PublicContentDat, m_PublicContentIdList );
+ return m_PublicContentIdList;
+}
+const std::set< uint32_t >& getPvPActionSortIdList()
+{
+ if( m_PvPActionSortIdList.size() == 0 )
+ loadIdList( m_PvPActionSortDat, m_PvPActionSortIdList );
+ return m_PvPActionSortIdList;
+}
const std::set< uint32_t >& getQuestIdList()
{
if( m_QuestIdList.size() == 0 )
loadIdList( m_QuestDat, m_QuestIdList );
return m_QuestIdList;
}
+const std::set< uint32_t >& getQuestClassJobRewardIdList()
+{
+ if( m_QuestClassJobRewardIdList.size() == 0 )
+ loadIdList( m_QuestClassJobRewardDat, m_QuestClassJobRewardIdList );
+ return m_QuestClassJobRewardIdList;
+}
+const std::set< uint32_t >& getQuestRepeatFlagIdList()
+{
+ if( m_QuestRepeatFlagIdList.size() == 0 )
+ loadIdList( m_QuestRepeatFlagDat, m_QuestRepeatFlagIdList );
+ return m_QuestRepeatFlagIdList;
+}
const std::set< uint32_t >& getQuestRewardOtherIdList()
{
if( m_QuestRewardOtherIdList.size() == 0 )
@@ -5929,6 +6747,12 @@ const std::set< uint32_t >& getRecipeNotebookListIdList()
loadIdList( m_RecipeNotebookListDat, m_RecipeNotebookListIdList );
return m_RecipeNotebookListIdList;
}
+const std::set< uint32_t >& getRecommendContentsIdList()
+{
+ if( m_RecommendContentsIdList.size() == 0 )
+ loadIdList( m_RecommendContentsDat, m_RecommendContentsIdList );
+ return m_RecommendContentsIdList;
+}
const std::set< uint32_t >& getRelicIdList()
{
if( m_RelicIdList.size() == 0 )
@@ -5965,6 +6789,12 @@ const std::set< uint32_t >& getRetainerTaskIdList()
loadIdList( m_RetainerTaskDat, m_RetainerTaskIdList );
return m_RetainerTaskIdList;
}
+const std::set< uint32_t >& getRetainerTaskLvRangeIdList()
+{
+ if( m_RetainerTaskLvRangeIdList.size() == 0 )
+ loadIdList( m_RetainerTaskLvRangeDat, m_RetainerTaskLvRangeIdList );
+ return m_RetainerTaskLvRangeIdList;
+}
const std::set< uint32_t >& getRetainerTaskNormalIdList()
{
if( m_RetainerTaskNormalIdList.size() == 0 )
@@ -6007,6 +6837,36 @@ const std::set< uint32_t >& getSatisfactionSupplyRewardIdList()
loadIdList( m_SatisfactionSupplyRewardDat, m_SatisfactionSupplyRewardIdList );
return m_SatisfactionSupplyRewardIdList;
}
+const std::set< uint32_t >& getScenarioTreeIdList()
+{
+ if( m_ScenarioTreeIdList.size() == 0 )
+ loadIdList( m_ScenarioTreeDat, m_ScenarioTreeIdList );
+ return m_ScenarioTreeIdList;
+}
+const std::set< uint32_t >& getScenarioTreeTipsIdList()
+{
+ if( m_ScenarioTreeTipsIdList.size() == 0 )
+ loadIdList( m_ScenarioTreeTipsDat, m_ScenarioTreeTipsIdList );
+ return m_ScenarioTreeTipsIdList;
+}
+const std::set< uint32_t >& getScenarioTreeTipsClassQuestIdList()
+{
+ if( m_ScenarioTreeTipsClassQuestIdList.size() == 0 )
+ loadIdList( m_ScenarioTreeTipsClassQuestDat, m_ScenarioTreeTipsClassQuestIdList );
+ return m_ScenarioTreeTipsClassQuestIdList;
+}
+const std::set< uint32_t >& getScenarioTreeTipsQuestIdList()
+{
+ if( m_ScenarioTreeTipsQuestIdList.size() == 0 )
+ loadIdList( m_ScenarioTreeTipsQuestDat, m_ScenarioTreeTipsQuestIdList );
+ return m_ScenarioTreeTipsQuestIdList;
+}
+const std::set< uint32_t >& getScenarioTypeIdList()
+{
+ if( m_ScenarioTypeIdList.size() == 0 )
+ loadIdList( m_ScenarioTypeDat, m_ScenarioTypeIdList );
+ return m_ScenarioTypeIdList;
+}
const std::set< uint32_t >& getScreenImageIdList()
{
if( m_ScreenImageIdList.size() == 0 )
@@ -6019,6 +6879,30 @@ const std::set< uint32_t >& getSecretRecipeBookIdList()
loadIdList( m_SecretRecipeBookDat, m_SecretRecipeBookIdList );
return m_SecretRecipeBookIdList;
}
+const std::set< uint32_t >& getSkyIsland2MissionIdList()
+{
+ if( m_SkyIsland2MissionIdList.size() == 0 )
+ loadIdList( m_SkyIsland2MissionDat, m_SkyIsland2MissionIdList );
+ return m_SkyIsland2MissionIdList;
+}
+const std::set< uint32_t >& getSkyIsland2MissionDetailIdList()
+{
+ if( m_SkyIsland2MissionDetailIdList.size() == 0 )
+ loadIdList( m_SkyIsland2MissionDetailDat, m_SkyIsland2MissionDetailIdList );
+ return m_SkyIsland2MissionDetailIdList;
+}
+const std::set< uint32_t >& getSkyIsland2MissionTypeIdList()
+{
+ if( m_SkyIsland2MissionTypeIdList.size() == 0 )
+ loadIdList( m_SkyIsland2MissionTypeDat, m_SkyIsland2MissionTypeIdList );
+ return m_SkyIsland2MissionTypeIdList;
+}
+const std::set< uint32_t >& getSkyIsland2RangeTypeIdList()
+{
+ if( m_SkyIsland2RangeTypeIdList.size() == 0 )
+ loadIdList( m_SkyIsland2RangeTypeDat, m_SkyIsland2RangeTypeIdList );
+ return m_SkyIsland2RangeTypeIdList;
+}
const std::set< uint32_t >& getSpearfishingItemIdList()
{
if( m_SpearfishingItemIdList.size() == 0 )
@@ -6049,12 +6933,30 @@ const std::set< uint32_t >& getStainIdList()
loadIdList( m_StainDat, m_StainIdList );
return m_StainIdList;
}
+const std::set< uint32_t >& getStainTransientIdList()
+{
+ if( m_StainTransientIdList.size() == 0 )
+ loadIdList( m_StainTransientDat, m_StainTransientIdList );
+ return m_StainTransientIdList;
+}
const std::set< uint32_t >& getStatusIdList()
{
if( m_StatusIdList.size() == 0 )
loadIdList( m_StatusDat, m_StatusIdList );
return m_StatusIdList;
}
+const std::set< uint32_t >& getStatusHitEffectIdList()
+{
+ if( m_StatusHitEffectIdList.size() == 0 )
+ loadIdList( m_StatusHitEffectDat, m_StatusHitEffectIdList );
+ return m_StatusHitEffectIdList;
+}
+const std::set< uint32_t >& getStatusLoopVFXIdList()
+{
+ if( m_StatusLoopVFXIdList.size() == 0 )
+ loadIdList( m_StatusLoopVFXDat, m_StatusLoopVFXIdList );
+ return m_StatusLoopVFXIdList;
+}
const std::set< uint32_t >& getStoryIdList()
{
if( m_StoryIdList.size() == 0 )
@@ -6145,6 +7047,18 @@ const std::set< uint32_t >& getTraitTransientIdList()
loadIdList( m_TraitTransientDat, m_TraitTransientIdList );
return m_TraitTransientIdList;
}
+const std::set< uint32_t >& getTransformationIdList()
+{
+ if( m_TransformationIdList.size() == 0 )
+ loadIdList( m_TransformationDat, m_TransformationIdList );
+ return m_TransformationIdList;
+}
+const std::set< uint32_t >& getTreasureIdList()
+{
+ if( m_TreasureIdList.size() == 0 )
+ loadIdList( m_TreasureDat, m_TreasureIdList );
+ return m_TreasureIdList;
+}
const std::set< uint32_t >& getTreasureHuntRankIdList()
{
if( m_TreasureHuntRankIdList.size() == 0 )
@@ -6223,12 +7137,30 @@ const std::set< uint32_t >& getTutorialTankIdList()
loadIdList( m_TutorialTankDat, m_TutorialTankIdList );
return m_TutorialTankIdList;
}
+const std::set< uint32_t >& getVaseFlowerIdList()
+{
+ if( m_VaseFlowerIdList.size() == 0 )
+ loadIdList( m_VaseFlowerDat, m_VaseFlowerIdList );
+ return m_VaseFlowerIdList;
+}
+const std::set< uint32_t >& getVFXIdList()
+{
+ if( m_VFXIdList.size() == 0 )
+ loadIdList( m_VFXDat, m_VFXIdList );
+ return m_VFXIdList;
+}
const std::set< uint32_t >& getWarpIdList()
{
if( m_WarpIdList.size() == 0 )
loadIdList( m_WarpDat, m_WarpIdList );
return m_WarpIdList;
}
+const std::set< uint32_t >& getWarpConditionIdList()
+{
+ if( m_WarpConditionIdList.size() == 0 )
+ loadIdList( m_WarpConditionDat, m_WarpConditionIdList );
+ return m_WarpConditionIdList;
+}
const std::set< uint32_t >& getWeatherIdList()
{
if( m_WeatherIdList.size() == 0 )
@@ -6247,6 +7179,12 @@ const std::set< uint32_t >& getWeatherRateIdList()
loadIdList( m_WeatherRateDat, m_WeatherRateIdList );
return m_WeatherRateIdList;
}
+const std::set< uint32_t >& getWeddingBGMIdList()
+{
+ if( m_WeddingBGMIdList.size() == 0 )
+ loadIdList( m_WeddingBGMDat, m_WeddingBGMIdList );
+ return m_WeddingBGMIdList;
+}
const std::set< uint32_t >& getWeeklyBingoOrderDataIdList()
{
if( m_WeeklyBingoOrderDataIdList.size() == 0 )
@@ -6265,12 +7203,30 @@ const std::set< uint32_t >& getWeeklyBingoTextIdList()
loadIdList( m_WeeklyBingoTextDat, m_WeeklyBingoTextIdList );
return m_WeeklyBingoTextIdList;
}
+const std::set< uint32_t >& getWorldIdList()
+{
+ if( m_WorldIdList.size() == 0 )
+ loadIdList( m_WorldDat, m_WorldIdList );
+ return m_WorldIdList;
+}
const std::set< uint32_t >& getWorldDCGroupTypeIdList()
{
if( m_WorldDCGroupTypeIdList.size() == 0 )
loadIdList( m_WorldDCGroupTypeDat, m_WorldDCGroupTypeIdList );
return m_WorldDCGroupTypeIdList;
}
+const std::set< uint32_t >& getYKWIdList()
+{
+ if( m_YKWIdList.size() == 0 )
+ loadIdList( m_YKWDat, m_YKWIdList );
+ return m_YKWIdList;
+}
+const std::set< uint32_t >& getZoneSharedGroupIdList()
+{
+ if( m_ZoneSharedGroupIdList.size() == 0 )
+ loadIdList( m_ZoneSharedGroupDat, m_ZoneSharedGroupIdList );
+ return m_ZoneSharedGroupIdList;
+}
};
diff --git a/src/common/Forwards.h b/src/common/Forwards.h
index 515bfe0e..9cb2a042 100644
--- a/src/common/Forwards.h
+++ b/src/common/Forwards.h
@@ -6,9 +6,9 @@
namespace Core
{
- class XMLConfig;
+ class ConfigMgr;
- typedef boost::shared_ptr XMLConfigPtr;
+ typedef boost::shared_ptr< ConfigMgr > ConfigMgrPtr;
namespace Network
@@ -17,15 +17,15 @@ namespace Core
class Acceptor;
class Connection;
- typedef boost::shared_ptr HivePtr;
- typedef boost::shared_ptr AcceptorPtr;
- typedef boost::shared_ptr ConnectionPtr;
+ typedef boost::shared_ptr< Hive > HivePtr;
+ typedef boost::shared_ptr< Acceptor > AcceptorPtr;
+ typedef boost::shared_ptr< Connection > ConnectionPtr;
namespace Packets
{
class GamePacket;
- typedef boost::shared_ptr GamePacketPtr;
+ typedef boost::shared_ptr< GamePacket > GamePacketPtr;
}
}
diff --git a/src/common/Network/CommonNetwork.h b/src/common/Network/CommonNetwork.h
index b52c7d5b..c5d4dc90 100644
--- a/src/common/Network/CommonNetwork.h
+++ b/src/common/Network/CommonNetwork.h
@@ -1,6 +1,3 @@
-/**
-* Structural definitions common to all FFXIV:ARR packets.
-*/
#ifndef _CORE_NETWORK_PACKETS_COMMON_H
#define _CORE_NETWORK_PACKETS_COMMON_H
@@ -25,7 +22,7 @@ namespace Packets {
*
* std::stringstream buf;
* buf << pkt_hdr;
-* for (int i = 0; i < n; i++)
+* for( int i = 0; i < n; i++ )
* {
* buf << pkt_seg_hdr[i];
* buf << {pkt_seg_data[i]};
@@ -46,6 +43,8 @@ namespace Packets {
*
* 0 4 8 12 14 16
* +-------------------------------+---------------+-------+-------+
+* | unknown_0 | unknown_8 |
+* +-------------------------------+---------------+-------+-------+
* | timestamp | size | cType | count |
* +---+---+-------+---------------+---------------+-------+-------+
* | ? |CMP| ? | ? |
@@ -54,13 +53,10 @@ namespace Packets {
*/
struct FFXIVARR_PACKET_HEADER
{
-
+ /** Unknown data, no actual use has been determined */
uint64_t unknown_0;
uint64_t unknown_8;
- /**
- * Represents the number of milliseconds since epoch that the packet was
- * sent.
- */
+ /** Represents the number of milliseconds since epoch that the packet was sent. */
uint64_t timestamp;
/** The size of the packet header and its payload */
uint32_t size;
@@ -74,14 +70,14 @@ struct FFXIVARR_PACKET_HEADER
uint32_t unknown_24;
};
-inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_HEADER& hdr)
+inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_HEADER& hdr )
{
- return os.write(reinterpret_cast(&hdr), sizeof hdr);
+ return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
}
-inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr)
+inline istream& operator >> ( istream& is, FFXIVARR_PACKET_HEADER& hdr )
{
- return is.read(reinterpret_cast(&hdr), sizeof hdr);
+ return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
}
/**
@@ -92,7 +88,7 @@ inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr)
*
* 0 4 8 12 16
* +---------------+---------------+---------------+-------+-------+
-* | size | source_actor | target_actor | type | ? |
+* | size | source_actor | target_actor | type | pad |
* +---------------+---------------+---------------+-------+-------+
* | |
* : type-specific data of length, size, follows :
@@ -109,22 +105,20 @@ struct FFXIVARR_PACKET_SEGMENT_HEADER
uint32_t target_actor;
/** The segment type. (1, 2, 3, 7, 8, 9, 10) */
uint16_t type;
- uint16_t _reserved_E;
+ uint16_t padding;
};
-inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr)
+inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr )
{
- return os.write(reinterpret_cast(&hdr), sizeof hdr);
+ return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
}
-inline istream& operator>>(istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr)
+inline istream& operator >> ( istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr )
{
- return is.read(reinterpret_cast(&hdr), sizeof hdr);
+ return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
}
-// TODO: Include structures for the individual packet segment types
-
-template struct FFXIVIpcBasePacket
+template < int T > struct FFXIVIpcBasePacket
{
/** Creates a constant representing the IPC type */
enum { _ServerIpcType = T };
@@ -133,7 +127,7 @@ template struct FFXIVIpcBasePacket
struct FFXIVARR_PACKET_RAW
{
FFXIVARR_PACKET_SEGMENT_HEADER segHdr;
- std::vector data;
+ std::vector< uint8_t > data;
};
/**
@@ -142,7 +136,7 @@ struct FFXIVARR_PACKET_RAW
*
* 0 4 6 8 12 16
* +-------+-------+------+----------+---------------+---------------+
-* | 14 00 | type | ?? | serverId | timestamp | ??? |
+* | 14 00 | type | pad | serverId | timestamp | pad1 |
* +-------+-------+------+----------+---------------+---------------+
* | |
* : data :
@@ -153,24 +147,22 @@ struct FFXIVARR_IPC_HEADER
{
uint16_t reserved;
uint16_t type;
- uint16_t unknown_2;
+ uint16_t padding;
uint16_t serverId;
uint32_t timestamp;
- uint32_t unknown_C;
+ uint32_t padding1;
};
-inline ostream& operator<<(ostream& os, const FFXIVARR_IPC_HEADER& hdr)
+inline ostream& operator << ( ostream& os, const FFXIVARR_IPC_HEADER& hdr )
{
- return os.write(reinterpret_cast(&hdr), sizeof hdr);
+ return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
}
-inline istream& operator>>(istream& is, FFXIVARR_IPC_HEADER& hdr)
+inline istream& operator >> ( istream& is, FFXIVARR_IPC_HEADER& hdr )
{
- return is.read(reinterpret_cast(&hdr), sizeof hdr);
+ return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
}
-
-
} /* Packets */
} /* Network */
} /* Core */
diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp
index 15e9d0f9..9f56cfcf 100644
--- a/src/common/Network/GamePacket.cpp
+++ b/src/common/Network/GamePacket.cpp
@@ -7,23 +7,24 @@
#include
#include "Util/Util.h"
-Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, uint32_t id1, uint32_t id2, uint16_t type )
+Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size,
+ uint32_t id1, uint32_t id2, uint16_t type )
{
- m_dataBuf = std::vector( size );
+ m_dataBuf = std::vector< uint8_t >( size );
memset( &m_segHdr, 0, sizeof( m_segHdr ) );
setHeader( size, type, id1, id2, subType, 0x00 );
-
}
-void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1, uint32_t id2, uint16_t subType, uint32_t unknown )
+void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1,
+ uint32_t id2, uint16_t subType, uint32_t unknown )
{
m_segHdr.size = size;
m_segHdr.type = type;
m_segHdr.source_actor = id1;
m_segHdr.target_actor = id2;
- m_segHdr._reserved_E = 0x00;
+ //m_segHdr._reserved_E = 0x00;
m_subType = subType;
m_timeStamp = static_cast< uint32_t >( time( nullptr ) );
@@ -40,7 +41,7 @@ void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type
Core::Network::Packets::GamePacket::GamePacket( char * pData, uint16_t size, bool bWriteStamp )
{
- m_dataBuf = std::vector( size );
+ m_dataBuf = std::vector< uint8_t >( size );
memcpy( &m_dataBuf[0], pData, size );
m_unknown2 = 0;
@@ -65,9 +66,12 @@ Core::Network::Packets::GamePacket::GamePacket( const Packets::FFXIVARR_PACKET_R
{
m_segHdr = packetData.segHdr;
- m_dataBuf = std::vector( m_segHdr.size );
+ m_dataBuf = std::vector< uint8_t >( m_segHdr.size );
+
+ memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ),
+ &packetData.data[0],
+ m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
- memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ), &packetData.data[0], m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
memcpy( &m_dataBuf[0], &m_segHdr, sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
m_subType = *reinterpret_cast< uint16_t* >( &m_dataBuf[0] + 0x12 );
@@ -88,8 +92,8 @@ Core::Network::Packets::GamePacket::~GamePacket()
void Core::Network::Packets::GamePacket::savePacket()
{
char filename[20];
- sprintf( filename, "dump_0x%x.dat", m_subType );
- FILE * fp = nullptr;
+ sprintf( filename, "dump_0x%x_%li.dat", m_subType, Util::getTimeMs() );
+ FILE* fp = nullptr;
fp = fopen( filename, "wb" );
fwrite( &m_dataBuf[0], 1, m_segHdr.size, fp );
fclose( fp );
@@ -98,5 +102,5 @@ void Core::Network::Packets::GamePacket::savePacket()
std::string Core::Network::Packets::GamePacket::toString() const
{
- return Core::Util::binaryToHexDump( const_cast( &m_dataBuf[0] ), getSize() );
+ return Core::Util::binaryToHexDump( const_cast< uint8_t* >( &m_dataBuf[0] ), getSize() );
}
diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h
index b59a0cdf..595b8222 100644
--- a/src/common/Network/GamePacketNew.h
+++ b/src/common/Network/GamePacketNew.h
@@ -16,11 +16,11 @@ namespace Packets {
// Must forward define these in order to enable the compiler to produce the
// correct template functions.
-template
+template < typename T, typename T1 >
class GamePacketNew;
-template
-std::ostream& operator<< ( std::ostream& os, const GamePacketNew& packet );
+template < typename T, typename T1 >
+std::ostream& operator << ( std::ostream& os, const GamePacketNew< T, T1 >& packet );
template< class T >
using ZoneChannelPacket = GamePacketNew< T, ServerZoneIpcType >;
@@ -31,16 +31,16 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >;
/**
* The base implementation of a game packet. Needed for parsing packets.
*/
-template
-class GamePacketNewBase
+template < typename T1 >
+class FFXIVIpcPacketBase
{
public:
- virtual ~GamePacketNewBase() = default;
+ virtual ~FFXIVIpcPacketBase() = default;
/**
* @brief Gets the IPC type of this packet. (Useful for determining the
* type of a parsed packet.)
*/
- virtual T1 ipcType( void ) = 0;
+ virtual T1 ipcType() = 0;
};
/**
@@ -49,8 +49,8 @@ public:
* type that represents just the IPC data portion (the bytes after the initial
* 32 byte header information.)
*/
-template
-class GamePacketNew : public GamePacketNewBase
+template < typename T, typename T1 >
+class GamePacketNew : public FFXIVIpcPacketBase< T1 >
{
public:
/**
@@ -58,7 +58,7 @@ public:
* @param sourceActorId The source actor id.
* @param targetActorId The target actor id.
*/
- GamePacketNew( uint32_t sourceActorId, uint32_t targetActorId )
+ GamePacketNew< T, T1 >( uint32_t sourceActorId, uint32_t targetActorId )
{
initialize();
m_segHdr.source_actor = sourceActorId;
@@ -69,7 +69,7 @@ public:
* @brief Constructs a new game packet with the specified actors.
* @param sourceActorId The source and target actor id.
*/
- GamePacketNew( uint32_t bothActorId )
+ GamePacketNew< T, T1 >( uint32_t bothActorId )
{
initialize();
m_segHdr.source_actor = bothActorId;
@@ -96,7 +96,7 @@ protected:
};
public:
- virtual T1 ipcType( void )
+ virtual T1 ipcType()
{
return static_cast< T1 >( m_data._ServerIpcType );
};
@@ -109,7 +109,7 @@ public:
* @param actorId The source actor id.
* @return This IPC packet object (can be used for chaining).
*/
- GamePacketNew sourceActor( uint32_t actorId )
+ GamePacketNew< T, T1 > sourceActor( uint32_t actorId )
{
m_segHdr.source_actor = actorId;
return this;
@@ -129,7 +129,7 @@ public:
* @param actorId The target actor id.
* @return This IPC packet object (can be used for chaining).
*/
- GamePacketNew targetActor( uint32_t actorId )
+ GamePacketNew< T, T1 > targetActor( uint32_t actorId )
{
m_segHdr.target_actor = actorId;
return this;
@@ -144,7 +144,7 @@ public:
return m_segHdr.target_actor;
};
- friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew& packet );
+ friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew< T, T1 >& packet );
friend class GamePacketFactory;
@@ -205,7 +205,7 @@ private:
};
};
-template
+template < typename T, typename T1 >
std::ostream& operator<<( std::ostream& os, const GamePacketNew& packet )
{
#if 0
diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp
index d80da93b..52cfe1a3 100644
--- a/src/common/Network/GamePacketParser.cpp
+++ b/src/common/Network/GamePacketParser.cpp
@@ -5,159 +5,122 @@
using namespace Core::Network::Packets;
-namespace Core
+PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t > &buffer,
+ const uint32_t offset,
+ FFXIVARR_PACKET_HEADER &header )
{
- namespace Network
- {
- namespace Packets
- {
- PacketParseResult getHeader(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_HEADER &header)
- {
- const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER );
+ const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER );
- // Check if we have enough bytes in the buffer.
- auto remainingBytes = buffer.size() - offset;
- if ( remainingBytes < headerSize )
- {
- return Incomplete;
- }
+ // Check if we have enough bytes in the buffer.
+ auto remainingBytes = buffer.size() - offset;
+ if( remainingBytes < headerSize )
+ return Incomplete;
- // Copy packet header.
- memcpy( &header, buffer.data() + offset, headerSize );
+ // Copy packet header.
+ memcpy( &header, buffer.data() + offset, headerSize );
- if ( !checkHeader(header) )
- {
- return Malformed;
- }
+ if( !checkHeader(header) )
+ return Malformed;
- return Success;
- }
-
- PacketParseResult getSegmentHeader(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_SEGMENT_HEADER &header)
- {
- const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER );
-
- // Check if we have enough bytes in the buffer.
- auto remainingBytes = buffer.size() - offset;
- if (remainingBytes < headerSize)
- {
- return Incomplete;
- }
-
- // Copy segment header
- memcpy(&header, buffer.data() + offset, headerSize);
-
- return Success;
- }
-
- PacketParseResult getPackets(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- const FFXIVARR_PACKET_HEADER &packetHeader,
- std::vector< FFXIVARR_PACKET_RAW > &packets)
- {
- // sanity check: check there's enough bytes in the buffer
- const auto bytesExpected = packetHeader.size - sizeof(struct FFXIVARR_PACKET_HEADER);
- if ( buffer.size() - offset < bytesExpected )
- {
- return Incomplete;
- }
-
- // Loop each message
- uint32_t count = 0;
- uint32_t bytesProcessed = 0;
- while ( count < packetHeader.count )
- {
- FFXIVARR_PACKET_RAW rawPacket;
-
- // Copy ipc packet message
- const auto packetResult = getPacket(buffer, offset + bytesProcessed, rawPacket);
- if ( packetResult != Success )
- {
- return packetResult;
- }
-
- // NOTE: isn't rawPacket is allocated on stack?
- // why is okay to do this?
- packets.push_back( rawPacket );
-
- // Add message size and count
- bytesProcessed += rawPacket.segHdr.size;
- count += 1;
- }
-
- // sanity check: check if we processed all bytes.
- // this check can fail if size of messages don't add up to size reported from packet header.
- if ( bytesExpected != bytesProcessed )
- {
- return Malformed;
- }
-
- return Success;
- }
-
- PacketParseResult getPacket(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_RAW &packet
- )
- {
- // Copy segment header
- const auto headerResult = getSegmentHeader(buffer, offset, packet.segHdr);
- if ( headerResult != Success )
- {
- return headerResult;
- }
-
- // Check header sanity and it's size
- if ( !checkSegmentHeader( packet.segHdr ) )
- {
- return Malformed;
- }
-
- const auto dataOffset = offset + sizeof(struct FFXIVARR_PACKET_SEGMENT_HEADER);
- const auto dataSize = packet.segHdr.size;
-
- // Allocate data buffer and copy
- packet.data.resize( dataSize );
- memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize );
-
- return Success;
- }
-
- bool checkHeader(const FFXIVARR_PACKET_HEADER &header)
- {
- // Max size of the packet is capped at 1MB for now.
- if ( header.size > 1 * 1024 * 1024 )
- {
- return false;
- }
-
- // Max number of message is capped at 255 for now.
- if ( header.count > 255 )
- {
- return false;
- }
-
- return true;
- }
-
- bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header)
- {
- // Max size of individual message is capped at 256KB for now.
- if ( header.size > 256 * 1024 )
- {
- return false;
- }
-
- return true;
- }
- }
- }
+ return Success;
+}
+
+PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t > &buffer,
+ const uint32_t offset,
+ FFXIVARR_PACKET_SEGMENT_HEADER &header )
+{
+ const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER );
+
+ // Check if we have enough bytes in the buffer.
+ auto remainingBytes = buffer.size() - offset;
+ if( remainingBytes < headerSize )
+ return Incomplete;
+
+ // Copy segment header
+ memcpy( &header, buffer.data() + offset, headerSize );
+
+ return Success;
+}
+
+PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t > &buffer,
+ const uint32_t offset,
+ const FFXIVARR_PACKET_HEADER &packetHeader,
+ std::vector< FFXIVARR_PACKET_RAW > &packets )
+{
+ // sanity check: check there's enough bytes in the buffer
+ const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER );
+ if( buffer.size() - offset < bytesExpected )
+ return Incomplete;
+
+ // Loop each message
+ uint32_t count = 0;
+ uint32_t bytesProcessed = 0;
+ while( count < packetHeader.count )
+ {
+ FFXIVARR_PACKET_RAW rawPacket;
+
+ // Copy ipc packet message
+ const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket );
+ if( packetResult != Success )
+ return packetResult;
+
+ // NOTE: isn't rawPacket is allocated on stack?
+ // why is okay to do this?
+ packets.push_back( rawPacket );
+
+ // Add message size and count
+ bytesProcessed += rawPacket.segHdr.size;
+ count += 1;
+ }
+
+ // sanity check: check if we processed all bytes.
+ // this check can fail if size of messages don't add up to size reported from packet header.
+ if( bytesExpected != bytesProcessed )
+ return Malformed;
+
+ return Success;
+}
+
+PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset,
+ FFXIVARR_PACKET_RAW &packet )
+{
+ // Copy segment header
+ const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr );
+ if( headerResult != Success )
+ return headerResult;
+
+ // Check header sanity and it's size
+ if( !checkSegmentHeader( packet.segHdr ) )
+ return Malformed;
+
+ const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER );
+ const auto dataSize = packet.segHdr.size;
+
+ // Allocate data buffer and copy
+ packet.data.resize( dataSize );
+ memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize );
+
+ return Success;
+}
+
+bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER &header )
+{
+ // Max size of the packet is capped at 1MB for now.
+ if( header.size > 1 * 1024 * 1024 )
+ return false;
+
+ // Max number of message is capped at 255 for now.
+ if( header.count > 255 )
+ return false;
+
+ return true;
+}
+
+bool Core::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header )
+{
+ // Max size of individual message is capped at 256KB for now.
+ if( header.size > 256 * 1024 )
+ return false;
+
+ return true;
}
diff --git a/src/common/Network/GamePacketParser.h b/src/common/Network/GamePacketParser.h
index 1ffda893..6f870bd2 100644
--- a/src/common/Network/GamePacketParser.h
+++ b/src/common/Network/GamePacketParser.h
@@ -2,62 +2,49 @@
#define _GAMEPACKETPARSER_H
#include "CommonNetwork.h"
-namespace Core
-{
- namespace Network
+namespace Core {
+namespace Network {
+namespace Packets {
+
+ enum PacketParseResult
{
- namespace Packets
- {
- enum PacketParseResult
- {
- /// Dissected game packet successfully
- Success,
+ /// Dissected game packet successfully
+ Success,
- /// Buffer is too short to dissect a message.
- Incomplete,
-
- /// Invalid data detected.
- Malformed
- };
+ /// Buffer is too short to dissect a message.
+ Incomplete,
- /// Read packet header from buffer with given offset.
- /// Buffer with given offset must be pointing to start of the new FFXIV packet.
- PacketParseResult getHeader(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_HEADER &header
- );
+ /// Invalid data detected.
+ Malformed
+ };
- /// Read packet header from buffer with given offset.
- /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
- /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed.
- PacketParseResult getSegmentHeader(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_SEGMENT_HEADER &header
- );
+ /// Read packet header from buffer with given offset.
+ /// Buffer with given offset must be pointing to start of the new FFXIV packet.
+ PacketParseResult getHeader( const std::vector< uint8_t > &buffer, const uint32_t offset,
+ FFXIVARR_PACKET_HEADER &header );
- /// Read packets from the buffer with given offset.
- /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data.
- PacketParseResult getPackets(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- const FFXIVARR_PACKET_HEADER &header,
- std::vector< Packets::FFXIVARR_PACKET_RAW > &packets);
-
- /// Read single packet from the buffer with given offset.
- /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
- PacketParseResult getPacket(
- const std::vector< uint8_t > &buffer,
- const uint32_t offset,
- FFXIVARR_PACKET_RAW &packet
- );
+ /// Read packet header from buffer with given offset.
+ /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
+ /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed.
+ PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, const uint32_t offset,
+ FFXIVARR_PACKET_SEGMENT_HEADER &header );
- bool checkHeader(const FFXIVARR_PACKET_HEADER &header);
- bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header);
+ /// Read packets from the buffer with given offset.
+ /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data.
+ PacketParseResult getPackets( const std::vector< uint8_t > &buffer, const uint32_t offset,
+ const FFXIVARR_PACKET_HEADER &header,
+ std::vector< Packets::FFXIVARR_PACKET_RAW > &packets );
- }
- }
+ /// Read single packet from the buffer with given offset.
+ /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
+ PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset,
+ FFXIVARR_PACKET_RAW &packet );
+
+ bool checkHeader(const FFXIVARR_PACKET_HEADER &header);
+ bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header);
+
+}
+}
}
diff --git a/src/common/Network/PacketContainer.cpp b/src/common/Network/PacketContainer.cpp
index a0b6037f..d0074938 100644
--- a/src/common/Network/PacketContainer.cpp
+++ b/src/common/Network/PacketContainer.cpp
@@ -7,14 +7,14 @@
#include
-Core::Network::Packets::PacketContainer::PacketContainer( void )
+Core::Network::Packets::PacketContainer::PacketContainer()
{
memset( &m_ipcHdr, 0, sizeof( FFXIVARR_PACKET_HEADER ) );
m_ipcHdr.size = sizeof( FFXIVARR_PACKET_HEADER );
m_ipcHdr.count = 0;
}
-Core::Network::Packets::PacketContainer::~PacketContainer( void )
+Core::Network::Packets::PacketContainer::~PacketContainer()
{
m_entryList.clear();
}
diff --git a/src/common/Network/PacketContainer.h b/src/common/Network/PacketContainer.h
index a00e0b88..494fe64b 100644
--- a/src/common/Network/PacketContainer.h
+++ b/src/common/Network/PacketContainer.h
@@ -16,14 +16,14 @@ class GamePacket;
class PacketContainer
{
public:
- PacketContainer( void );
- ~PacketContainer( void );
+ PacketContainer();
+ ~PacketContainer();
void addPacket( GamePacket pEntry );
FFXIVARR_PACKET_HEADER m_ipcHdr;
- std::vector m_entryList;
+ std::vector< GamePacket > m_entryList;
std::string toString();
diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h
index e8174617..56f8e6a0 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 {
@@ -45,11 +45,10 @@ namespace Packets {
enum ServerZoneIpcType : uint16_t
{
- // static opcode ( the ones that rarely if ever change )
+ // static opcode ( the ones that rarely, if ever, change )
Ping = 0x0065,
Init = 0x0066,
- ActorSpawn = 0x0190, // DEPRECATED
ActorFreeSpawn = 0x0191,
InitZone = 0x019A,
@@ -62,7 +61,7 @@ namespace Packets {
///////////////////////////////////////////////////
ChatBanned = 0x006B,
- Logout = 0x0077,
+ Logout = 0x0077, // updated 4.3
CFNotify = 0x0078,
CFMemberStatus = 0x0079,
CFDutyInfo = 0x007A,
@@ -74,118 +73,126 @@ namespace Packets {
CFRegistered = 0x00B8, // updated 4.1
SocialRequestResponse = 0x00BB, // updated 4.1
CancelAllianceForming = 0x00C6, // updated 4.2
- Chat = 0x00E1, // updated 4.2
- SocialList = 0x00E7, // updated 4.2
- UpdateSearchInfo = 0x00EA, // updated 4.2
- InitSearchInfo = 0x00EB, // updated 4.2
+ Chat = 0x00F7, // updated 4.3
+ SocialList = 0x00FD, // updated 4.3
- ServerNotice = 0x00F0, // updated 4.2
- SetOnlineStatus = 0x00F1, // updated 4.2
+ UpdateSearchInfo = 0x0100, // updated 4.3
+ InitSearchInfo = 0x0101, // updated 4.3
- CountdownInitiate = 0x00FB, // updated 4.2
- CountdownCancel = 0x00FC, // updated 4.2
+ ServerNotice = 0x0106, // updated 4.3
+ SetOnlineStatus = 0x0107, // updated 4.3
- BlackList = 0x00FF, // updated 4.2
+ CountdownInitiate = 0x0111, // updated 4.3
+ CountdownCancel = 0x0112, // updated 4.3
+
+ BlackList = 0x0115, // updated 4.3
LogMessage = 0x00D0,
- LinkshellList = 0x0106, // updated 4.2
- SetCharacterFCInfo = 0x0114, // updated 4.2
- StatusEffectList = 0x0125, // updated 4.2
- Effect = 0x0128, // updated 4.2
- PersistantEffect = 0x013B, // updated 4.2
+ LinkshellList = 0x011C, // updated 4.3
+ SetCharaFCTag = 0x013B, // updated 4.3
+ SetFreeCompanyInfo = 0x013D, // updated 4.3
+
+ StatusEffectList = 0x014E, // updated 4.3
+ Effect = 0x0151, // updated 4.3
+ PersistantEffect = 0x0158, // updated 4.3
GCAffiliation = 0xCCFC, // OUTDATED
- PlayerSpawn = 0x015C, // updated 4.2
- NpcSpawn = 0x015D, // updated 4.2
- ActorMove = 0x015E, // updated 4.2
- ActorSetPos = 0x0160, // updated 4.2
+ PlayerSpawn = 0x0172, // updated 4.3
+ NpcSpawn = 0x0173, // updated 4.3
+ ActorMove = 0x0174, // updated 4.3
+ ActorSetPos = 0x0176, // updated 4.3
- ActorCast = 0x0162, // updated 4.2
+ ActorCast = 0x0178, // updated 4.3
- HateList = 0x0165, // updated 4.2
+ PartyList = 0x017A, // updated 4.3
+ HateList = 0x017B, // updated 4.3
- ObjectSpawn = 0x0167, // updated 4.2
- ObjectDespawn = 0x0168, // updated 4.2
- UpdateClassInfo = 0x0169, // updated 4.2
+ ObjectSpawn = 0x017D, // updated 4.3
+ ObjectDespawn = 0x017E, // updated 4.3
- InitUI = 0x016B, // updated 4.2
- PlayerStats = 0x016C, // updated 4.2
- ActorOwner = 0x016D, // updated 4.2 ?
- PlayerStateFlags = 0x016E, // updated 4.2
- PlayerClassInfo = 0x016F, // updated 4.2
- ModelEquip = 0x0170, // updated 4.2
-
- ItemInfo = 0x017A, // updated 4.2
- ContainerInfo = 0x017B, // updated 4.2
- InventoryTransactionFinish = 0x017C, // updated 4.2
- InventoryTransaction = 0x017D, // updated 4.2
- CurrencyCrystalInfo = 0x017E, // updated 4.2
+ SetLevelSync = 0x017F, // updated 4.3
InventoryActionAck = 0x0180, // updated 4.2 ?
- UpdateInventorySlot = 0x0181, // updated 4.2
- EventPlay = 0x018E, // updated 4.2
- DirectorPlayScene = 0x0192, // updated 4.2
+ InitUI = 0x0181, // updated 4.3
+ PlayerStats = 0x0182, // updated 4.3
+ ActorOwner = 0x0183, // updated 4.3 ?
+ PlayerStateFlags = 0x0184, // updated 4.3
+ PlayerClassInfo = 0x0185, // updated 4.3
+ ModelEquip = 0x0186, // updated 4.3
- EventStart = 0x0198, // updated 4.2
- EventFinish = 0x0199, // updated 4.2
+ UpdateClassInfo = 0x018A, // updated 4.3
+
+ ItemInfo = 0x0190, // updated 4.3
+ ContainerInfo = 0x0192, // updated 4.3
+ InventoryTransactionFinish = 0x0193, // updated 4.3
+ InventoryTransaction = 0x0194, // updated 4.3
+ CurrencyCrystalInfo = 0x0197, // updated 4.3
+
+ UpdateInventorySlot = 0x0198, // updated 4.3
+
+ EventPlay = 0x01A6, // updated 4.3
+ DirectorPlayScene = 0x01AA, // updated 4.3
+
+ EventStart = 0x01AF, // updated 4.3
+ EventFinish = 0x01B0, // updated 4.3
EventLinkshell = 0x1169,
- QuestMessage = 0x01B8, // updated 4.2
- QuestTracker = 0x01BD, // updated 4.2
+ QuestActiveList = 0x01C3, // updated 4.3
+ QuestUpdate = 0x01C4, // updated 4.3
+ QuestCompleteList = 0x01C5, // updated 4.3
- QuestFinish = 0x01B0, // updated 4.2
- MSQTrackerComplete = 0x01B1, // updated 4.2
- MSQTrackerProgress = 0x01B2, // updated 4.2
+ QuestFinish = 0x01C6, // updated 4.3
+ MSQTrackerComplete = 0x01C7, // updated 4.3
+ MSQTrackerProgress = 0x01C8, // updated 4.3
- QuestActiveList = 0x01AD, // updated 4.2
+ QuestMessage = 0x01CE, // updated 4.3
- QuestUpdate = 0x01AE, // updated 4.2
- QuestCompleteList = 0x01AF, // updated 4.2
+ QuestTracker = 0x01D3, // updated 4.3
- Mount = 0x01CD, // updated 4.2
+ Mount = 0x01E3, // updated 4.3
- DirectorVars = 0x01CF, // updated 4.2
-
- WeatherChange = 0x01EA, // updated 4.2
- PlayerTitleList = 0x01EB, // updated 4.2
- Discovery = 0x01EC, // updated 4.2
-
- EorzeaTimeOffset = 0x01EE, // updated 4.2
-
- EquipDisplayFlags = 0x01FA, // updated 4.2
+ DirectorVars = 0x01E5, // updated 4.3
CFAvailableContents = 0x01FD, // updated 4.2
- PrepareZoning = 0x027C, // updated 4.2
- ActorGauge = 0x027D, // updated 4.2
+ WeatherChange = 0x0200, // updated 4.3
+ PlayerTitleList = 0x0201, // updated 4.3
+ Discovery = 0x0202, // updated 4.3
+
+ EorzeaTimeOffset = 0x0204, // updated 4.3
+
+ EquipDisplayFlags = 0x0210, // updated 4.3
+
+ DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui
+ PerformNote = 0x0286, // updated 4.3
+
+ PrepareZoning = 0x0291, // updated 4.3
+ ActorGauge = 0x0292, // updated 4.3
+
- DuelChallenge = 0x0277, // 4.2; this is the responsible for opening an ui
- PerformNote = 0x0286, // updated 4.2
// Unknown IPC types that still need to be sent
// TODO: figure all these out properly
- IPCTYPE_UNK_320 = 0x0235, // updated 4.2
- IPCTYPE_UNK_322 = 0x0237, // updated 4.2
+ IPCTYPE_UNK_320 = 0x024C, // updated 4.3
+ IPCTYPE_UNK_322 = 0x024E, // updated 4.3
};
- // TODO: Include structures for the individual packet segment types
-
/**
* Client IPC Zone Type Codes.
*/
enum ClientZoneIpcType : uint16_t
{
- PingHandler = 0x0065, // unchanged 4.2
- InitHandler = 0x0066, // unchanged 4.2
+ PingHandler = 0x0065, // unchanged 4.3
+ InitHandler = 0x0066, // unchanged 4.3
- FinishLoadingHandler = 0x0069, // unchanged 4.2
+ FinishLoadingHandler = 0x0069, // unchanged 4.3
CFCommenceHandler = 0x006F,
@@ -193,23 +200,24 @@ namespace Packets {
CFRegisterDuty = 0x0071,
CFRegisterRoulette = 0x0072,
- PlayTimeHandler = 0x0073, // unchanged 4.2
- LogoutHandler = 0x0074, // unchanged 4.2
+ PlayTimeHandler = 0x0073, // unchanged 4.3
+ LogoutHandler = 0x0074, // unchanged 4.3
CFDutyInfoHandler = 0x0078, // updated 4.2
SocialReqSendHandler = 0x00AE, // updated 4.1
+ CreateCrossWorldLS = 0x00AF, // updated 4.3
- ChatHandler = 0x00C7, // updated 4.2
+ ChatHandler = 0x00D3, // updated 4.3
- SocialListHandler = 0x00CF, // updated 4.2
- ReqSearchInfoHandler = 0x00D4, // updated 4.2
- SetSearchInfoHandler = 0x00D2, // updated 4.2
+ SocialListHandler = 0x00DB, // updated 4.3
+ ReqSearchInfoHandler = 0x00E0, // updated 4.3
+ SetSearchInfoHandler = 0x00DE, // updated 4.3
- BlackListHandler = 0x00E0, // updated 4.2
+ BlackListHandler = 0x00EC, // updated 4.3
PlayerSearchHandler = 0x00E2, // updated 4.2
- LinkshellListHandler = 0x00E8, // updated 4.2
+ LinkshellListHandler = 0x00F4, // updated 4.3
FcInfoReqHandler = 0x011A, // updated 4.2
@@ -218,34 +226,34 @@ namespace Packets {
ReqCountdownInitiate = 0x012C, // updated 4.2
ReqCountdownCancel = 0x012D, // updated 4.2
- ZoneLineHandler = 0x0130, // updated 4.2
- ActionHandler = 0x0131, // updated 4.2
- DiscoveryHandler = 0x0132, // updated 4.2
+ ZoneLineHandler = 0x013C, // updated 4.3
+ ActionHandler = 0x013D, // updated 4.3
+ DiscoveryHandler = 0x013E, // updated 4.3
- SkillHandler = 0x0134, // updated 4.2
- GMCommand1 = 0x0135, // updated 4.2
- GMCommand2 = 0x0136, // updated 4.2
- UpdatePositionHandler = 0x0138, // updated 4.2
- UpdatePositionInstance = 0x0177, // updated 4.2
+ SkillHandler = 0x0140, // updated 4.3
+ GMCommand1 = 0x0141, // updated 4.3
+ GMCommand2 = 0x0142, // updated 4.3
- InventoryModifyHandler = 0x013F, // updated 4.2
+ UpdatePositionHandler = 0x0144, // updated 4.3
+ UpdatePositionInstance = 0x0183, // updated 4.3
- TalkEventHandler = 0x0148, // updated 4.2
- EmoteEventHandler = 0x0149, // updated 4.2
- WithinRangeEventHandler = 0x014A, // updated 4.2
- OutOfRangeEventHandler = 0x014B, // updated 4.2
- EnterTeriEventHandler = 0x014C, // updated 4.2
+ InventoryModifyHandler = 0x014B, // updated 4.3
- ReturnEventHandler = 0x0151, // updated 4.2
- TradeReturnEventHandler = 0x0152, // updated 4.2
+ TalkEventHandler = 0x0154, // updated 4.3
+ EmoteEventHandler = 0x0155, // updated 4.3
+ WithinRangeEventHandler = 0x0156, // updated 4.3
+ OutOfRangeEventHandler = 0x0157, // updated 4.3
+ EnterTeriEventHandler = 0x0158, // updated 4.3
+ ReturnEventHandler = 0x015D, // updated 4.3
+ TradeReturnEventHandler = 0x015E, // updated 4.3
- LinkshellEventHandler = 0x0144, // updated 4.1 ??
- LinkshellEventHandler1 = 0x0145, // updated 4.1 ??
+ LinkshellEventHandler = 0x0150, // updated 4.1 ??
+ LinkshellEventHandler1 = 0x0151, // updated 4.1 ??
- PerformNoteHandler = 0x0160,
+ PerformNoteHandler = 0x029B, // updated 4.3
- ReqEquipDisplayFlagsChange = 0x016C, // updated 4.2
+ ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3
};
diff --git a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h
index 0e915ce9..a414fb3b 100644
--- a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h
+++ b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h
@@ -87,8 +87,10 @@ struct FFXIVIpcCharList : FFXIVIpcBasePacket
uint32_t index;
uint32_t padding2;
uint16_t serverId;
+ uint16_t serverId1;
char nameChara[32];
char nameServer[32];
+ char nameServer1[32];
char charDetailJson[1030];
} charaDetails[2];
diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h
index 0a5fcd26..d8a628a8 100644
--- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h
+++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h
@@ -609,146 +609,156 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket
*/
struct FFXIVIpcInitUI : FFXIVIpcBasePacket
{
+ // plain C types for a bit until the packet is actually fixed.
+ // makes conversion between different editors easier.
uint64_t contentId;
- uint32_t unknown8;
- uint32_t unknownC;
- uint32_t charId;
- uint32_t restedExp;
- uint16_t currentLevel;
- uint8_t maxLevel;
- uint8_t expansion;
- uint8_t unknown1A;
- uint8_t race;
- uint8_t tribe;
- uint8_t gender;
- uint8_t currentJob;
- uint8_t currentClass;
- uint8_t deity;
- uint8_t namedayMonth;
- uint8_t namedayDay;
- uint8_t cityState;
- uint8_t homepoint;
- uint8_t unknown26; // 2 if "warrior of light"
- uint8_t petHotBar;
- uint8_t companionRank;
- uint8_t companionStars;
- uint8_t companionSp;
- uint8_t companionUnk2B;
- uint8_t companionColor;
- uint8_t companionFavoFeed;
- uint8_t companionUnk2E;
- float companionTimePassed;
- uint32_t companionCurrentExp;
- uint32_t unknown38;
- uint32_t unknown3C;
- uint32_t fishCaught;
- uint32_t useBaitCatalogId;
- uint32_t pvpWolfFoldMatches;
- uint16_t pvpWolfFoldWeeklyMatches;
- uint16_t pvpWolfFoldWeeklyVictories;
- uint16_t pvpStats[6];
- uint16_t playerCommendations;
- uint16_t pvpStats1;
- uint8_t frontlineCampaigns[4];
- uint16_t frontlineCampaignsWeekly;
- uint8_t currentRelic;
- uint8_t currentBook;
- uint8_t masterCrafterMask;
- uint8_t unknown69;
- uint8_t unknown6A;
- uint8_t unknown6B;
- uint8_t unknown6C[4];
- uint8_t unknown70[61];
- uint8_t preNamePadding;
+ unsigned int unknown8;
+ unsigned int unknownC;
+ unsigned int charId;
+ unsigned int restedExp;
+ unsigned int companionCurrentExp;
+ unsigned int unknown3C;
+ unsigned int fishCaught;
+ unsigned int useBaitCatalogId;
+ unsigned int pvpWolfFoldMatches;
+ unsigned short pvpWolfFoldWeeklyMatches;
+ unsigned short pvpWolfFoldWeeklyVictories;
+ unsigned short pvpStats[6];
+ unsigned short playerCommendations;
+ unsigned short pvpStats1;
+ unsigned char frontlineCampaigns[4];
+ unsigned short frontlineCampaignsWeekly;
+ unsigned char currentRelic;
+ unsigned char currentBook;
+ unsigned char masterCrafterMask;
+ unsigned char unknown69;
+ unsigned char unknown6A;
+ unsigned char unknown6B;
+ unsigned char unknown6C[4];
+ unsigned char unknown70[34];
+ unsigned short unknown18;
+ unsigned char maxLevel;
+ unsigned char expansion;
+ unsigned char unknown;
+ unsigned char race;
+ unsigned char tribe;
+ unsigned char gender;
+ unsigned char currentJob;
+ unsigned char currentClass;
+ unsigned char deity;
+ unsigned char namedayMonth;
+ unsigned char namedayDay;
+ unsigned char cityState;
+ unsigned char homepoint;
+ unsigned char unknown26;
+ unsigned char petHotBar;
+ unsigned char companionRank;
+ unsigned char companionStars;
+ unsigned char companionSp;
+ unsigned char companionUnk2B;
+ unsigned char companionColor;
+ unsigned char companionFavoFeed;
+ unsigned char companionUnk2E;
+ unsigned char companionTimePassed[4];
+ unsigned short unknown38[11];
+
+ unsigned int exp[25];
+ unsigned char unknown564[16];
+ unsigned int pvpFrontlineOverall1st;
+ unsigned int pvpFrontlineOverall2nd;
+ unsigned int pvpFrontlineOverall3rd;
+ unsigned char relicBookCompletion1[4];
+ unsigned short levels[25];
+ unsigned short levelsPadding;
+ unsigned char unknown__[16];
+ unsigned short fishingRecordsFish[26];
+ unsigned short fishingRecordsFishWeight[26];
+ unsigned char unknownMask554[44];
+
+ unsigned char companion_name[21];
+ unsigned char companionDefRank;
+ unsigned char companionAttRank;
+ unsigned char companionHealRank;
+ unsigned char mountGuideMask[16];
char name[32];
- uint8_t unknownOword[16];
- uint8_t unknownDE[2];
- uint16_t levels[25];
- uint16_t levelsPadding;
- uint32_t exp[25];
- uint8_t unlockBitmask[64];
- uint8_t aetheryte[16];
- uint8_t discovery[421];
- uint8_t howto[33];
- uint8_t minions[37];
- uint8_t chocoboTaxiMask[8];
- uint8_t contentClearMask[108];
- uint8_t contentClearPadding;
- uint16_t unknown428[8];
- uint8_t companionBardingMask[8];
- uint8_t companionEquippedHead;
- uint8_t companionEquippedBody;
- uint8_t companionEquippedFeet;
- uint8_t companionUnk4[4];
- uint8_t companion_fields[11];
- uint8_t companion_name[21];
- uint8_t companionDefRank;
- uint8_t companionAttRank;
- uint8_t companionHealRank;
- uint8_t mountGuideMask[15];
- uint8_t fishingGuideMask[89];
- uint8_t fishingSpotVisited[25];
- uint16_t fishingRecordsFish[26];
- uint16_t fishingRecordsFishWeight[26];
- uint8_t unknownMask554[15];
- uint8_t unknownMask4Padding;
- uint8_t unknown564[19];
- uint8_t rankAmalJaa;
- uint8_t rankSylph;
- uint8_t rankKobold;
- uint8_t rankSahagin;
- uint8_t rankIxal;
- uint8_t rankVanu;
- uint8_t rankVath;
- uint8_t rankMoogle;
- uint8_t rankKojin;
- uint8_t rankAnata;
- uint16_t expAmalJaa;
- uint16_t expSylph;
- uint16_t expKobold;
- uint16_t expSahagin;
- uint16_t expIxal;
- uint16_t expVanu;
- uint16_t expVath;
- uint16_t expMoogle;
- uint16_t expKojin;
- uint16_t expAnata;
- uint8_t unknown596[10];
- uint16_t unknown5A0[5];
- uint8_t unknownMask59E[5];
- uint8_t unknown5A3[18];
- uint8_t unknownMask5C1[28];
- uint8_t unknown_03411;
- uint32_t unknownDword5E0;
- uint8_t relicBookCompletion[12];
- uint8_t sightseeingMask[26];
- uint16_t unknown_XXX;
- uint32_t pvpFrontlineOverall1st;
- uint32_t pvpFrontlineOverall2nd;
- uint32_t pvpFrontlineOverall3rd;
- uint16_t pvpFrontlineWeekly1st;
- uint16_t pvpFrontlineWeekly2nd;
- uint16_t pvpFrontlineWeekly3rd;
- uint8_t unknown61E;
- uint8_t centurioSealHunts[32];
- uint8_t alliedSealHunts[22];
- uint8_t tripleTriadCards[28];
- uint8_t unknown671[11];
- uint8_t unknownMask67C[22];
- uint8_t unknown692[3];
- uint8_t orchestrionMask[40];
- uint8_t hallOfNoviceCompleteMask[3];
- uint8_t unknownMask6C0[11];
- uint8_t animaRelicMask[16]; // [2] = anima glass key item, [1] = ulan's note key item
- uint8_t unknown6DB[14];
- uint8_t unlockedRaids[28];
- uint8_t unlockedDungeons[18];
- uint8_t unlockedGuildhests[10];
- uint8_t unlockedTrials[7];
- uint8_t unlockedPvp[5];
- uint8_t unknownMask72D[28];
- uint8_t unknownMask749[18];
- uint8_t unknown749[23];
+ unsigned char unknownOword[16];
+ unsigned char unlockBitmask[64];
+ unsigned char aetheryte[17];
+ unsigned char discovery[421];
+ unsigned char howto[33];
+ unsigned char minions[38];
+ unsigned char chocoboTaxiMask[8];
+ unsigned char contentClearMask[111];
+ unsigned char contentClearPadding;
+ unsigned short unknown428[8];
+ unsigned char companionBardingMask[8];
+ unsigned char companionEquippedHead;
+ unsigned char companionEquippedBody;
+ unsigned char companionEquippedFeet;
+ unsigned char companionUnk4[4];
+ unsigned char companion_fields[11];
+
+ unsigned char fishingGuideMask[89];
+ unsigned char fishingSpotVisited[25];
+
+
+ unsigned char unknownMask4Padding;
+
+ unsigned char rankAmalJaa;
+ unsigned char rankSylph;
+ unsigned char rankKobold;
+ unsigned char rankSahagin;
+ unsigned char rankIxal;
+ unsigned char rankVanu;
+ unsigned char rankVath;
+ unsigned char rankMoogle;
+ unsigned char rankKojin;
+ unsigned char rankAnata;
+ unsigned short expAmalJaa;
+ unsigned short expSylph;
+ unsigned short expKobold;
+ unsigned short expSahagin;
+ unsigned short expIxal;
+ unsigned short expVanu;
+ unsigned short expVath;
+ unsigned short expMoogle;
+ unsigned short expKojin;
+ unsigned short expAnata;
+ unsigned char unknown596[10];
+ unsigned short unknown5A0[5];
+ unsigned char unknownMask59E[5];
+ unsigned char unknown5A3[18];
+ unsigned char unknownMask5C1[28];
+ unsigned char unknown_03411;
+ unsigned int unknownDword5E0;
+ unsigned short pvpFrontlineWeekly1st;
+ unsigned short pvpFrontlineWeekly2nd;
+ unsigned short pvpFrontlineWeekly3rd;
+ unsigned char relicBookCompletion2[8];
+ unsigned char sightseeingMask[26];
+ unsigned short unknown_XXX;
+
+ unsigned char unknown61E;
+ unsigned char unknown61F[32];
+ unsigned char unknown63F[22];
+ unsigned char tripleTriadCards[28];
+ unsigned char unknown671[11];
+ unsigned char unknownMask67C[22];
+ unsigned char unknown692[3];
+ unsigned char orchestrionMask[40];
+ unsigned char hallOfNoviceCompleteMask[3];
+ unsigned char unknownMask6C0[11];
+ unsigned char unknownMask6CB[16];
+ unsigned char unknown6DB[14];
+ unsigned char unlockedRaids[28];
+ unsigned char unlockedDungeons[18];
+ unsigned char unlockedGuildhests[10];
+ unsigned char unlockedTrials[7];
+ unsigned char unlockedPvp[5];
+ unsigned char unknownMask72D[28];
+ // unsigned char unknownMask749[18];
+ //unsigned char unknown749[13];
+
};
/**
diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp
new file mode 100644
index 00000000..96204fbf
--- /dev/null
+++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp
@@ -0,0 +1,36 @@
+#include
+#include
+
+class TheWeaponsRefrainUltimate : public InstanceContentScript
+{
+public:
+ TheWeaponsRefrainUltimate() : InstanceContentScript( 30067 )
+ { }
+
+ void onInit( InstanceContentPtr instance ) override
+ {
+ instance->registerEObj( "unknown_0", 2009480, 0, 4, { 94.011192f, 0.000000f, 107.700996f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "sgvf_w1fz_b1432", 2007457, 7372735, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_1", 2007457, 7373056, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_2", 2009481, 0, 4, { 101.695602f, 0.000000f, 101.959396f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_3", 2007457, 7237754, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_4", 2007457, 7237753, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_5", 2007457, 7237756, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_6", 2007457, 7237755, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "Entrance", 2007457, 7343478, 5, { 100.000000f, 0.000000f, 116.000000f }, 1.000000f, 0.000000f );
+ // States -> vf_lock_on vf_lock_of
+ instance->registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
+ instance->registerEObj( "unknown_7", 2007457, 7538258, 4, { 100.160004f, 0.000000f, 101.443398f }, 1.000000f, 0.000000f );
+ }
+
+ void onUpdate( InstanceContentPtr instance, uint32_t currTime ) override
+ {
+
+ }
+
+ void onEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override
+ {
+
+ }
+
+};
\ No newline at end of file
diff --git a/src/servers/sapphire_api/PlayerMinimal.cpp b/src/servers/sapphire_api/PlayerMinimal.cpp
index d3a1c6b9..62be6eb7 100644
--- a/src/servers/sapphire_api/PlayerMinimal.cpp
+++ b/src/servers/sapphire_api/PlayerMinimal.cpp
@@ -110,12 +110,20 @@ namespace Core {
std::string PlayerMinimal::getInfoJson()
{
std::string charDetails = "{\"content\":[\"" + std::string( getName() ) + "\"," +
- "[" + getClassString() + "]," +
- "\"0\",\"0\",\"0\",\"" + std::to_string( getBirthMonth() ) + "\",\"" + std::to_string( getBirthDay() ) + "\",\"" + std::to_string( getGuardianDeity() ) + "\",\"" + std::to_string( m_class ) + "\",\"0\",\"" + std::to_string( getZoneId() ) + "\"," +
+ //"[" + getClassString() + "]," +
+ "[\"0\",\"0\",\"0\",\"0\",\"0\",\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"],"
+ "\"0\",\"0\",\"0\",\"" +
+ std::to_string( getBirthMonth() ) +
+ "\",\"" + std::to_string( getBirthDay() ) +
+ "\",\"" + std::to_string( getGuardianDeity() ) +
+ "\",\"" + std::to_string( m_class ) +
+ "\",\"0\",\"" + std::to_string( getZoneId() ) +
+ "\",\"0\"," +
+
"[" + getLookString() + "]," +
"\"0\",\"0\"," +
"[" + getModelString() + "]," +
- "\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]," +
+ "\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"\",\"0\",\"0\"]," +
"\"classname\":\"ClientSelectData\",\"classid\":116}";
return charDetails;
}
diff --git a/src/servers/sapphire_api/main.cpp b/src/servers/sapphire_api/main.cpp
index d42d53cf..d4fac57b 100644
--- a/src/servers/sapphire_api/main.cpp
+++ b/src/servers/sapphire_api/main.cpp
@@ -7,7 +7,7 @@
#include
#include
-#include
+#include
#include
#include
@@ -52,13 +52,13 @@ void default_resource_send( const HttpServer &server, const shared_ptr< HttpServ
const shared_ptr< ifstream > &ifs );
-auto m_pConfig = boost::make_shared< Core::XMLConfig >();
+auto m_pConfig = boost::make_shared< Core::ConfigMgr >();
HttpServer server;
-std::string configPath( "config/settings_rest.xml" );
+std::string configPath( "rest.ini" );
void reloadConfig()
{
- m_pConfig = boost::make_shared< Core::XMLConfig >();
+ m_pConfig = boost::make_shared< Core::ConfigMgr >();
if( !m_pConfig->loadConfig( configPath ) )
throw "Error loading config ";
@@ -96,43 +96,43 @@ bool loadSettings( int32_t argc, char* argv[] )
if( arg == "ip" )
{
// todo: ip addr in config
- m_pConfig->setValue< std::string >( "Settings.General.ListenIP", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.RestHost", val );
}
else if( arg == "p" || arg == "port" )
{
- m_pConfig->setValue< std::string >( "Settings.General.ListenPort", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.RestPort", val );
}
else if( arg == "exdpath" || arg == "datapath" )
{
- m_pConfig->setValue< std::string >( "Settings.General.DataPath", val );
+ m_pConfig->setValue< std::string >( "GlobalParameters.DataPath", val );
}
else if( arg == "h" || arg == "dbhost" )
{
- m_pConfig->setValue< std::string >( "Settings.General.Mysql.Host", val );
+ m_pConfig->setValue< std::string >( "Database.Host", val );
}
else if( arg == "dbport" )
{
- m_pConfig->setValue< std::string >( "Settings.General.Mysql.Port", val );
+ m_pConfig->setValue< std::string >( "Database.Port", val );
}
else if( arg == "u" || arg == "user" || arg == "dbuser" )
{
- m_pConfig->setValue< std::string >( "Settings.General.Mysql.Username", val );
+ m_pConfig->setValue< std::string >( "Database.Username", val );
}
else if( arg == "pass" || arg == "dbpass" )
{
- m_pConfig->setValue< std::string >( "Settings.General.Mysql.Pass", val );
+ m_pConfig->setValue< std::string >( "Database.Password", val );
}
else if( arg == "d" || arg == "db" || arg == "database" )
{
- m_pConfig->setValue< std::string >( "Settings.General.Mysql.Database", val );
+ m_pConfig->setValue< std::string >( "Database.Database", val );
}
else if ( arg == "lobbyip" || arg == "lobbyhost" )
{
- m_pConfig->setValue< std::string >( "Settings.General.LobbyHost", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyHost", val );
}
else if ( arg == "lobbyport" )
{
- m_pConfig->setValue< std::string >( "Settings.General.LobbyPort", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyPort", val );
}
}
catch( ... )
@@ -143,7 +143,7 @@ bool loadSettings( int32_t argc, char* argv[] )
}
g_log.info( "Setting up generated EXD data" );
- if( !g_exdDataGen.init( m_pConfig->getValue< std::string >( "Settings.General.DataPath", "" ) ) )
+ if( !g_exdDataGen.init( m_pConfig->getValue< std::string >( "GlobalParameters.DataPath", "" ) ) )
{
g_log.fatal( "Error setting up generated EXD data " );
return false;
@@ -152,19 +152,19 @@ bool loadSettings( int32_t argc, char* argv[] )
Core::Db::DbLoader loader;
Core::Db::ConnectionInfo info;
- info.password = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Pass", "" );
- info.host = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Host", "127.0.0.1" );
- info.database = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Database", "sapphire" );
- info.port = m_pConfig->getValue< uint16_t >( "Settings.General.Mysql.Port", 3306 );
- info.user = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Username", "root" );
- info.syncThreads = m_pConfig->getValue< uint8_t >( "Settings.General.Mysql.SyncThreads", 2 );
- info.asyncThreads = m_pConfig->getValue< uint8_t >( "Settings.General.Mysql.AsyncThreads", 2 );
+ info.password = m_pConfig->getValue< std::string >( "Database.Password", "" );
+ info.host = m_pConfig->getValue< std::string >( "Database.Host", "127.0.0.1" );
+ info.database = m_pConfig->getValue< std::string >( "Database.Database", "sapphire" );
+ info.port = m_pConfig->getValue< uint16_t >( "Database.Port", 3306 );
+ info.user = m_pConfig->getValue< std::string >( "Database.Username", "root" );
+ info.syncThreads = m_pConfig->getValue< uint8_t >( "Database.SyncThreads", 2 );
+ info.asyncThreads = m_pConfig->getValue< uint8_t >( "Database.AsyncThreads", 2 );
loader.addDb( g_charaDb, info );
if( !loader.initDbs() )
return false;
- server.config.port = static_cast< uint16_t >( std::stoul( m_pConfig->getValue< std::string >( "Settings.General.HttpPort", "80" ) ) );
+ server.config.port = static_cast< uint16_t >( std::stoul( m_pConfig->getValue< std::string >( "GlobalNetwork.RestPort", "80" ) ) );
g_log.info( "Database: Connected to " + info.host + ":" + std::to_string( info.port ) );
@@ -269,8 +269,8 @@ void createAccount( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.LobbyHost" ) +
- "\", \"frontierHost\":\"" + m_pConfig->getValue< std::string >( "Settings.General.FrontierHost" ) + "\"}";
+ "\", \"lobbyHost\":\"" + m_pConfig->getValue< std::string >( "GlobalNetwork.LobbyHost" ) +
+ "\", \"frontierHost\":\"" + m_pConfig->getValue< std::string >( "GlobalNetwork.RestHost" ) + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
}
else
@@ -301,8 +301,8 @@ void login( shared_ptr response, shared_ptrgetValue< std::string >("Settings.General.LobbyHost") +
- "\", \"frontierHost\":\"" + m_pConfig->getValue< std::string >( "Settings.General.FrontierHost" ) + "\"}";
+ "\", \"lobbyHost\":\"" + m_pConfig->getValue< std::string >( "GlobalNetwork.LobbyHost" ) +
+ "\", \"frontierHost\":\"" + m_pConfig->getValue< std::string >( "GlobalNetwork.RestHost" ) + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
}
else
@@ -333,7 +333,7 @@ void deleteCharacter( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -374,14 +374,14 @@ void createCharacter( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
}
else
{
- int32_t charId = g_sapphireAPI.createCharacter( result, name, finalJson, m_pConfig->getValue< uint8_t >( "Settings.Parameters.DefaultGMRank", 255 ) );
+ int32_t charId = g_sapphireAPI.createCharacter( result, name, finalJson, m_pConfig->getValue< uint8_t >( "CharacterCreation.DefaultGMRank", 255 ) );
std::string json_string = "{\"result\":\"" + std::to_string( charId ) + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
@@ -414,7 +414,7 @@ void insertSession( shared_ptr response, shared_ptr( "accountId" );
std::string secret = pt.get( "secret" );
// reloadConfig();
- if( m_pConfig->getValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -448,7 +448,7 @@ void checkNameTaken( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -486,7 +486,7 @@ void checkSession( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -523,7 +523,7 @@ void getNextCharId( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -555,7 +555,7 @@ void getNextContentId( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -591,7 +591,7 @@ void getCharacterList( shared_ptr response, shared_ptrgetValue< std::string >( "Settings.General.ServerSecret" ) != secret )
+ if( m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" ) != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@@ -756,8 +756,8 @@ int main( int argc, char* argv[] )
if( !loadSettings( argc, argv ) )
throw std::exception();
- server.config.port = stoi( m_pConfig->getValue< std::string >( "Settings.General.HttpPort", "80" ) );
- g_log.info( "Starting API server at port " + m_pConfig->getValue< std::string >( "Settings.General.HttpPort", "80" ) + "..." );
+ server.config.port = stoi( m_pConfig->getValue< std::string >( "GlobalNetwork.RestPort", "80" ) );
+ g_log.info( "Starting API server at port " + m_pConfig->getValue< std::string >( "GlobalNetwork.RestPort", "80" ) + "..." );
server.resource["^/ZoneName/([0-9]+)$"]["GET"] = &getZoneName;
server.resource["^/sapphire-api/lobby/createAccount"]["POST"] = &createAccount;
diff --git a/src/servers/sapphire_lobby/GameConnection.cpp b/src/servers/sapphire_lobby/GameConnection.cpp
index c0ce4895..2d99df2c 100644
--- a/src/servers/sapphire_lobby/GameConnection.cpp
+++ b/src/servers/sapphire_lobby/GameConnection.cpp
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
@@ -129,10 +130,10 @@ void Core::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, ui
serverListPacket.data().seq = 1;
serverListPacket.data().offset = 0;
serverListPacket.data().numServers = 1;
- serverListPacket.data().server[0].id = g_serverLobby.getConfig()->getValue( "Settings.Parameters.WorldID", 1 );
+ serverListPacket.data().server[0].id = g_serverLobby.getConfig()->getValue( "Lobby.WorldID", 1 );
serverListPacket.data().server[0].index = 0;
serverListPacket.data().final = 1;
- strcpy( serverListPacket.data().server[0].name, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() );
+ strcpy( serverListPacket.data().server[0].name, g_serverLobby.getConfig()->getValue< std::string >( "Lobby.WorldName", "Sapphire" ).c_str() );
pRP.addPacket( serverListPacket );
@@ -166,11 +167,11 @@ void Core::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, ui
auto& charEntry = charList[charIndex];
details.uniqueId = get< 1 >( charEntry );
details.contentId = get< 2 >( charEntry );
- details.serverId = g_serverLobby.getConfig()->getValue( "Settings.Parameters.WorldID", 1 );
+ details.serverId = g_serverLobby.getConfig()->getValue( "Lobby.WorldID", 1 );
details.index = charIndex;
strcpy( details.charDetailJson, get< 3 >( charEntry ).c_str() );
strcpy( details.nameChara, get< 0 >( charEntry ).c_str() );
- strcpy( details.nameServer, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() );
+ strcpy( details.nameServer, g_serverLobby.getConfig()->getValue< std::string >( "Lobby.WorldName", "Sapphire" ).c_str() );
charListPacket.data().charaDetails[j] = details;
@@ -238,8 +239,8 @@ void Core::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, uin
enterWorldPacket.data().contentId = lookupId;
enterWorldPacket.data().seq = sequence;
- strcpy( enterWorldPacket.data().host, g_serverLobby.getConfig()->getValue< std::string >( "Settings.General.ZoneIp" ).c_str() );
- enterWorldPacket.data().port = g_serverLobby.getConfig()->getValue< uint16_t >( "Settings.General.ZonePort" );
+ strcpy( enterWorldPacket.data().host, g_serverLobby.getConfig()->getValue< std::string >( "GlobalNetwork.ZoneHost" ).c_str() );
+ enterWorldPacket.data().port = g_serverLobby.getConfig()->getValue< uint16_t >( "GlobalNetwork.ZonePort" );
enterWorldPacket.data().charId = logInCharId;
memcpy( enterWorldPacket.data().sid, m_pSession->getSessionId(), 66 );
@@ -251,7 +252,7 @@ bool Core::Network::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_RAW&
{
LobbySessionPtr pSession = g_serverLobby.getSession( ( char* )&packet.data[0] + 0x20 );
- if( g_serverLobby.getConfig()->getValue< bool >( "Settings.Parameters.AllowNoSessionConnect" ) && pSession == nullptr )
+ if( g_serverLobby.getConfig()->getValue< bool >( "Lobby.AllowNoSessionConnect" ) && pSession == nullptr )
{
auto session = make_LobbySession();
session->setAccountID( 0 );
@@ -319,7 +320,7 @@ bool Core::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& pac
charCreatePacket.data().content_id = newContentId;
strcpy( charCreatePacket.data().name, name.c_str() );
- strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() );
+ strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Lobby.WorldName", "Sapphire" ).c_str() );
charCreatePacket.data().type = 1;
charCreatePacket.data().seq = sequence;
charCreatePacket.data().unknown = 1;
@@ -343,7 +344,7 @@ bool Core::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& pac
charCreatePacket.data().content_id = newContentId;
strcpy( charCreatePacket.data().name, name.c_str() );
- strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() );
+ strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Lobby.WorldName", "Sapphire" ).c_str() );
charCreatePacket.data().type = 2;
charCreatePacket.data().seq = sequence;
charCreatePacket.data().unknown = 1;
@@ -374,7 +375,7 @@ bool Core::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& pac
//charCreatePacket.data().content_id = deletePlayer.getContentId();
charCreatePacket.data().content_id = 0;
strcpy( charCreatePacket.data().name, name.c_str() );
- strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() );
+ strcpy( charCreatePacket.data().world, g_serverLobby.getConfig()->getValue< std::string >( "Lobby.WorldName", "Sapphire" ).c_str() );
charCreatePacket.data().type = 4;
charCreatePacket.data().seq = sequence;
charCreatePacket.data().unknown = 1;
@@ -475,8 +476,8 @@ void Core::Network::GameConnection::generateEncryptionKey( uint32_t key, const s
m_baseKey[2] = 0x34;
m_baseKey[3] = 0x12;
memcpy( m_baseKey + 0x04, &key, 4 );
- m_baseKey[8] = 0xA0;
- m_baseKey[9] = 0x0F;
+ m_baseKey[8] = 0xCC;
+ m_baseKey[9] = 0x10;
memcpy( ( char* )m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() );
Core::Util::md5( m_baseKey, m_encKey, 0x2C );
}
diff --git a/src/servers/sapphire_lobby/ServerLobby.cpp b/src/servers/sapphire_lobby/ServerLobby.cpp
index 82693b12..ff59fd84 100644
--- a/src/servers/sapphire_lobby/ServerLobby.cpp
+++ b/src/servers/sapphire_lobby/ServerLobby.cpp
@@ -8,7 +8,7 @@
#include
#include
-#include
+#include
//#include "LobbySession.h"
@@ -37,7 +37,7 @@ namespace Core {
m_configPath( configPath ),
m_numConnections( 0 )
{
- m_pConfig = boost::shared_ptr( new XMLConfig );
+ m_pConfig = boost::shared_ptr< ConfigMgr >( new ConfigMgr );
}
ServerLobby::~ServerLobby( void )
@@ -49,7 +49,7 @@ namespace Core {
return g_restConnector.getSession( sessionId );
}
- XMLConfigPtr ServerLobby::getConfig() const
+ ConfigMgrPtr ServerLobby::getConfig() const
{
return m_pConfig;
}
@@ -109,23 +109,19 @@ namespace Core {
if( arg == "ip" )
{
// todo: ip addr in config
- m_pConfig->setValue< std::string >( "Settings.General.ListenIp", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyHost", val );
}
else if( arg == "p" || arg == "port" )
{
- m_pConfig->setValue< std::string >( "Settings.General.ListenPort", val );
- }
- else if( arg == "ap" || arg == "auth" || arg == "authport" )
- {
- m_pConfig->setValue< std::string>( "Settings.General.AuthPort", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyPort", val );
}
else if( arg == "worldip" || arg == "worldip" )
{
- m_pConfig->setValue < std::string >( "Settings.General.WorldIp", val );
+ m_pConfig->setValue < std::string >( "GlobalNetwork.ZoneHost", val );
}
else if( arg == "worldport" )
{
- m_pConfig->setValue< std::string >( "Settings.General.WorldPort", val );
+ m_pConfig->setValue< std::string >( "GlobalNetwork.ZonePort", val );
}
}
catch( ... )
@@ -135,11 +131,11 @@ namespace Core {
}
}
- m_port = m_pConfig->getValue< uint16_t >( "Settings.General.ListenPort", 54994 );
- m_ip = m_pConfig->getValue< std::string >( "Settings.General.ListenIp", "0.0.0.0" );
+ m_port = m_pConfig->getValue< uint16_t >( "GlobalNetwork.LobbyPort", 54994 );
+ m_ip = m_pConfig->getValue< std::string >( "GlobalNetwork.LobbyHost", "0.0.0.0" );
- g_restConnector.restHost = m_pConfig->getValue< std::string >( "Settings.General.RestHost" );
- g_restConnector.serverSecret = m_pConfig->getValue< std::string >( "Settings.General.ServerSecret" );
+ g_restConnector.restHost = m_pConfig->getValue< std::string >( "GlobalNetwork.RestHost" ) + ":" + m_pConfig->getValue< std::string >( "GlobalNetwork.RestPort" );
+ g_restConnector.serverSecret = m_pConfig->getValue< std::string >( "GlobalParameters.ServerSecret" );
return true;
}
diff --git a/src/servers/sapphire_lobby/ServerLobby.h b/src/servers/sapphire_lobby/ServerLobby.h
index 8f28cdc0..b4efd1db 100644
--- a/src/servers/sapphire_lobby/ServerLobby.h
+++ b/src/servers/sapphire_lobby/ServerLobby.h
@@ -6,7 +6,6 @@
#include