From f6a5ad812afce99d078c25ca5acde9d5d0398c3c Mon Sep 17 00:00:00 2001 From: mordred Date: Fri, 23 Nov 2018 15:02:42 +0100 Subject: [PATCH] Added variant identification to exds and fixed exd_struct_gen with adam --- deps/datReader/Exd.cpp | 87 + deps/datReader/Exd.h | 2 + deps/datReader/Exh.h | 3 + src/tools/exd_struct_gen/ex.json | 3966 ++++++++++++++++++++++++++++- src/tools/exd_struct_gen/main.cpp | 125 +- 5 files changed, 4031 insertions(+), 152 deletions(-) diff --git a/deps/datReader/Exd.cpp b/deps/datReader/Exd.cpp index b4513130..f86ac318 100644 --- a/deps/datReader/Exd.cpp +++ b/deps/datReader/Exd.cpp @@ -81,6 +81,90 @@ namespace xiv { } + const std::vector Exd::get_row( uint32_t id, uint32_t subRow ) + { + + auto cacheEntryIt = _idCache.find( id ); + if( cacheEntryIt == _idCache.end() ) + throw std::runtime_error( "Id not found: " + std::to_string( id ) ); + + // Iterates over all the files + const uint32_t member_count = _exh->get_members().size(); + auto& file_ptr = cacheEntryIt->second.file; + + std::vector< char > dataCpy = file_ptr->get_data_sections().front(); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); + + // Get the vector fields for the given record and preallocate it + auto fields = _data[id]; + fields.reserve( member_count ); + iss.seekg( cacheEntryIt->second.offset + 6 ); + + uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); + + for( auto& member_entry : _exh->get_exh_members() ) + { + // Seek to the position of the member to extract. + // 6 is because we have uint32_t/uint16_t at the start of each record + iss.seekg( cacheEntryIt->second.offset + 6 + member_entry.offset ); + + // Switch depending on the type to extract + switch( member_entry.type ) + { + case DataType::string: + // Extract the offset to the actual string + // Seek to it then extract the actual string + { + auto string_offset = extract( iss, "string_offset", false ); + iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); + fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); + } + break; + + case DataType::boolean: + fields.emplace_back( extract( iss, "bool" ) ); + break; + + case DataType::int8: + fields.emplace_back( extract( iss, "int8_t" ) ); + break; + + case DataType::int16: + fields.emplace_back( extract( iss, "int16_t", false ) ); + break; + case DataType::int32: + fields.emplace_back( extract( iss, "int32_t", false ) ); + break; + + case DataType::uint32: + fields.emplace_back( extract( iss, "uint32_t", false ) ); + break; + + case DataType::float32: + fields.emplace_back( extract( iss, "float", false ) ); + break; + + case DataType::uint64: + fields.emplace_back( extract( iss, "uint64_t", false ) ); + break; + + default: + auto type = static_cast< uint16_t >( member_entry.type ); + if( type < 0x19 || type > 0x20 ) + throw std::runtime_error("Unknown DataType: " + std::to_string( type )); + uint64_t val = extract< uint64_t >( iss, "bool" ); + int32_t shift = type - 0x19; + int32_t i = 1 << shift; + val &= i; + fields.emplace_back( ( val & i ) == i ); + break; + } + } + return fields; + + } + + const std::vector Exd::get_row( uint32_t id ) { @@ -98,6 +182,9 @@ namespace xiv // Get the vector fields for the given record and preallocate it auto fields = _data[id]; fields.reserve( member_count ); + iss.seekg( cacheEntryIt->second.offset + 6 ); + + uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); for( auto& member_entry : _exh->get_exh_members() ) { diff --git a/deps/datReader/Exd.h b/deps/datReader/Exd.h index 0bafa5e4..c504176b 100644 --- a/deps/datReader/Exd.h +++ b/deps/datReader/Exd.h @@ -47,6 +47,8 @@ public: // Get a row by its id const std::vector get_row(uint32_t id); + // Get a row by its id and sub-row + const std::vector get_row(uint32_t id, uint32_t subRow); // Get all rows const std::map>& get_rows(); diff --git a/deps/datReader/Exh.h b/deps/datReader/Exh.h index 2a7cf630..80b11150 100644 --- a/deps/datReader/Exh.h +++ b/deps/datReader/Exh.h @@ -31,6 +31,9 @@ namespace xiv uint16_t field_count; uint16_t exd_count; uint16_t language_count; + uint16_t unknown1; + uint8_t u2; + uint8_t variant; }; struct ExhMember diff --git a/src/tools/exd_struct_gen/ex.json b/src/tools/exd_struct_gen/ex.json index 6f27ec8c..70e27d0d 100644 --- a/src/tools/exd_struct_gen/ex.json +++ b/src/tools/exd_struct_gen/ex.json @@ -1,5 +1,5 @@ { - "version": "2018.05.16.0000.0000", + "version": "2018.10.30.0000.0000", "sheets": [ { "sheet": "Achievement", @@ -53,15 +53,173 @@ }, { "index": 9, + "name": "Key", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "Achievement", + "when": { + "key": "Type", + "value": 2 + } + }, + { + "sheet": "ClassJob", + "when": { + "key": "Type", + "value": 3 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 6 + } + }, + { + "sheet": "ClassJob", + "when": { + "key": "Type", + "value": 7 + } + }, + { + "sheet": "Map", + "when": { + "key": "Type", + "value": 8 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 9 + } + }, + { + "sheet": "GrandCompany", + "when": { + "key": "Type", + "value": 11 + } + }, + { + "sheet": "InstanceContent", + "when": { + "key": "Type", + "value": 14 + } + }, + { + "sheet": "BeastTribe", + "when": { + "key": "Type", + "value": 15 + } + }, + { + "sheet": "GrandCompany", + "when": { + "key": "Type", + "value": 18 + } + }, + { + "sheet": "AetherCurrentCompFlgSet", + "when": { + "key": "Type", + "value": 20 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 24 + } + }, + { + "sheet": "ClassJob", + "when": { + "key": "Type", + "value": 24 + } + } + ] + } + }, + { + "index": 10, "type": "repeat", - "count": 9, + "count": 8, "definition": { - "name": "Data" + "name": "Data", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "Achievement", + "when": { + "key": "Type", + "value": 2 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 6 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 9 + } + }, + { + "sheet": "BeastReputationRank", + "when": { + "key": "Type", + "value": 15 + } + }, + { + "sheet": "AetherCurrentCompFlgSet", + "when": { + "key": "Type", + "value": 20 + } + }, + { + "sheet": "Quest", + "when": { + "key": "Type", + "value": 24 + } + }, + { + "sheet": "ClassJob", + "when": { + "key": "Type", + "value": 24 + } + } + ] + } } }, { "index": 18, "name": "Order" + }, + { + "index": 20, + "name": "InitialHide" } ] }, @@ -79,6 +237,10 @@ "type": "link", "target": "AchievementKind" } + }, + { + "index": 3, + "name": "HideCategory" } ] }, @@ -263,7 +425,7 @@ }, { "index": 44, - "name": "ActionData", + "name": "UnlockLink", "converter": { "type": "generic" } @@ -403,6 +565,10 @@ } ] }, + { + "sheet": "ActionTimelineMove", + "definitions": [] + }, { "sheet": "ActionTimelineReplace", "definitions": [ @@ -432,6 +598,91 @@ } ] }, + { + "sheet": "ActivityFeedButtons", + "definitions": [ + { + "index": 1, + "name": "BannerURL" + }, + { + "index": 2, + "name": "Description" + }, + { + "index": 3, + "name": "Language" + }, + { + "index": 4, + "name": "PictureURL" + } + ] + }, + { + "sheet": "ActivityFeedCaptions", + "definitions": [ + { + "name": "JA" + }, + { + "index": 1, + "name": "EN" + }, + { + "index": 2, + "name": "DE" + }, + { + "index": 3, + "name": "FR" + } + ] + }, + { + "sheet": "ActivityFeedGroupCaptions", + "definitions": [ + { + "name": "JA" + }, + { + "index": 1, + "name": "EN" + }, + { + "index": 2, + "name": "DE" + }, + { + "index": 3, + "name": "FR" + } + ] + }, + { + "sheet": "ActivityFeedImages", + "definitions": [ + { + "name": "ExpansionImage" + }, + { + "index": 1, + "name": "ActivityFeedJA" + }, + { + "index": 2, + "name": "ActivityFeedEN" + }, + { + "index": 3, + "name": "ActivityFeedDE" + }, + { + "index": 4, + "name": "ActivityFeedFR" + } + ] + }, { "sheet": "Addon", "defaultColumn": "Text", @@ -441,6 +692,22 @@ } ] }, + { + "sheet": "AddonHud", + "definitions": [ + { + "name": "Long" + }, + { + "index": 1, + "name": "Short" + }, + { + "index": 2, + "name": "Function" + } + ] + }, { "sheet": "Adventure", "defaultColumn": "Name", @@ -545,6 +812,7 @@ }, { "sheet": "AetherCurrent", + "defaultColumn": "Quest", "definitions": [ { "name": "Quest", @@ -611,6 +879,33 @@ "sheet": "Aetheryte", "defaultColumn": "PlaceName", "definitions": [ + { + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" + }, + { + "index": 2, + "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "PlaceName", @@ -655,6 +950,14 @@ "index": 16, "name": "AethernetGroup" }, + { + "index": 18, + "name": "RequiredQuest", + "converter": { + "type": "link", + "target": "Quest" + } + }, { "index": 19, "name": "Map", @@ -673,6 +976,15 @@ } ] }, + { + "sheet": "AetheryteSystemDefine", + "defaultColumn": "name", + "definitions": [ + { + "name": "Text" + } + ] + }, { "sheet": "AirshipExplorationLevel", "definitions": [ @@ -1014,6 +1326,31 @@ } ] }, + { + "sheet": "ArrayEventHandler", + "definitions": [ + { + "type": "repeat", + "count": 16, + "definition": { + "name": "Data", + "converter": { + "type": "multiref", + "targets": [ + "InstanceContentGuide", + "Story", + "Opening", + "CustomTalk", + "DefaultTalk", + "GilShop", + "Warp", + "Quest" + ] + } + } + } + ] + }, { "sheet": "AttackType", "defaultColumn": "Name", @@ -1023,6 +1360,18 @@ } ] }, + { + "sheet": "BacklightColor", + "defaultColumn": "Color", + "definitions": [ + { + "name": "Color", + "converter": { + "type": "color" + } + } + ] + }, { "sheet": "Balloon", "defaultColumn": "Dialogue", @@ -1037,6 +1386,9 @@ "sheet": "BaseParam", "defaultColumn": "Name", "definitions": [ + { + "name": "Order" + }, { "index": 1, "name": "Name" @@ -1307,6 +1659,84 @@ } ] }, + { + "sheet": "BGMFade", + "definitions": [ + { + "index": 2, + "name": "BGMFadeType", + "converter": { + "type": "link", + "target": "BGMFadeType" + } + } + ] + }, + { + "sheet": "BGMSituation", + "definitions": [ + { + "name": "BGM{Day}", + "converter": { + "type": "link", + "target": "BGM" + } + }, + { + "index": 1, + "name": "BGM{Night}", + "converter": { + "type": "link", + "target": "BGM" + } + }, + { + "index": 2, + "name": "BGM{Battle}", + "converter": { + "type": "link", + "target": "BGM" + } + }, + { + "index": 3, + "name": "BGM{Field}", + "converter": { + "type": "link", + "target": "BGM" + } + } + ] + }, + { + "sheet": "BGMSwitch", + "definitions": [ + { + "name": "BGMSystemDefine", + "converter": { + "type": "link", + "target": "BGMSystemDefine" + } + }, + { + "index": 1, + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, + { + "sheet": "BGMSystemDefine", + "defaultColumn": "Define", + "definitions": [ + { + "name": "Define" + } + ] + }, { "sheet": "BNpcAnnounceIcon", "defaultColumn": "Icon", @@ -1322,6 +1752,21 @@ { "sheet": "BNpcBase", "definitions": [ + { + "name": "Behavior", + "converter": { + "type": "link", + "target": "Behavior" + } + }, + { + "index": 1, + "name": "ActionTimelineMove", + "converter": { + "type": "link", + "target": "ActionTimelineMove" + } + }, { "index": 4, "name": "Scale" @@ -1357,6 +1802,14 @@ "type": "link", "target": "ArrayEventHandler" } + }, + { + "index": 12, + "name": "BNpcParts", + "converter": { + "type": "link", + "target": "BNpcParts" + } } ] }, @@ -1483,9 +1936,173 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + } + ] + }, + { + "sheet": "BNpcParts", + "definitions": [ + { + "name": "BNpcBase[1]", + "converter": { + "type": "link", + "target": "BNpcBase" + } + }, + { + "index": 1, + "name": "PartSlot[1]" + }, + { + "index": 6, + "name": "X[1]" + }, + { + "index": 7, + "name": "Y[1]" + }, + { + "index": 8, + "name": "Z[1]" + }, + { + "index": 10, + "name": "Scale[1]" + }, + { + "index": 11, + "name": "BNpcBase[2]", + "converter": { + "type": "link", + "target": "BNpcBase" + } + }, + { + "index": 12, + "name": "PartSlot[2]" + }, + { + "index": 17, + "name": "X[2]" + }, + { + "index": 18, + "name": "Y[2]" + }, + { + "index": 19, + "name": "Z[2]" + }, + { + "index": 21, + "name": "Scale[2]" + }, + { + "index": 22, + "name": "BNpcBase[3]", + "converter": { + "type": "link", + "target": "BNpcBase" + } + }, + { + "index": 23, + "name": "PartSlot[3]" + }, + { + "index": 28, + "name": "X[3]" + }, + { + "index": 29, + "name": "Y[3]" + }, + { + "index": 30, + "name": "Z[3]" + }, + { + "index": 31, + "name": "Scale[3]" + }, + { + "index": 33, + "name": "BNpcBase[4]", + "converter": { + "type": "link", + "target": "BNpcBase" + } + }, + { + "index": 34, + "name": "PartSlot[4]" + }, + { + "index": 39, + "name": "X[4]" + }, + { + "index": 40, + "name": "Y[4]" + }, + { + "index": 41, + "name": "Z[4]" + }, + { + "index": 43, + "name": "Scale[4]" + }, + { + "index": 44, + "name": "BNpcBase[5]", + "converter": { + "type": "link", + "target": "BNpcBase" + } + }, + { + "index": 45, + "name": "PartSlot[5]" + }, + { + "index": 50, + "name": "X[5]" + }, + { + "index": 51, + "name": "Y[5]" + }, + { + "index": 52, + "name": "Z[5]" + }, + { + "index": 54, + "name": "Scale[5]" } ] }, @@ -1560,10 +2177,30 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name" @@ -1615,7 +2252,7 @@ "sheet": "BuddyItem", "definitions": [ { - "name": "Name", + "name": "Item", "converter": { "type": "link", "target": "Item" @@ -1946,6 +2583,42 @@ } ] }, + { + "sheet": "ChocoboRaceTutorial", + "definitions": [ + { + "type": "repeat", + "count": 8, + "definition": { + "name": "NpcYell", + "converter": { + "type": "link", + "target": "NpcYell" + } + } + } + ] + }, + { + "sheet": "ChocoboRaceWeather", + "definitions": [ + { + "name": "WeatherType[1]", + "converter": { + "type": "link", + "target": "Weather" + } + }, + { + "index": 1, + "name": "WeatherType[2]", + "converter": { + "type": "link", + "target": "Weather" + } + } + ] + }, { "sheet": "ChocoboTaxi", "definitions": [ @@ -2266,10 +2939,38 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, + { + "index": 8, + "name": "Model", + "converter": { + "type": "link", + "target": "ModelChara" + } + }, { "index": 14, "name": "Behavior", @@ -2628,6 +3329,17 @@ "sheet": "CompleteJournal", "defaultColumn": "Name", "definitions": [ + { + "index": 1, + "name": "RequiredLevel" + }, + { + "index": 3, + "name": "Icon", + "converter": { + "type": "icon" + } + }, { "index": 5, "name": "Name" @@ -2666,6 +3378,18 @@ } ] }, + { + "sheet": "ContentCloseCycle", + "definitions": [ + { + "name": "Unixtime" + }, + { + "index": 1, + "name": "Time{Seconds}" + } + ] + }, { "sheet": "ContentExAction", "definitions": [ @@ -2684,13 +3408,55 @@ }, { "sheet": "ContentFinderCondition", + "defaultColumn": "Name", "definitions": [ { - "index": 3, - "name": "InstanceContent", + "index": 1, + "name": "TerritoryType", "converter": { "type": "link", - "target": "InstanceContent" + "target": "TerritoryType" + } + }, + { + "index": 2, + "name": "ContentLinkType" + }, + { + "index": 3, + "name": "Content", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "InstanceContent", + "when": { + "key": "ContentLinkType", + "value": 1 + } + }, + { + "sheet": "PartyContent", + "when": { + "key": "ContentLinkType", + "value": 2 + } + }, + { + "sheet": "PublicContent", + "when": { + "key": "ContentLinkType", + "value": 3 + } + }, + { + "sheet": "GoldSaucerContent", + "when": { + "key": "ContentLinkType", + "value": 4 + } + } + ] } }, { @@ -2718,8 +3484,20 @@ "name": "ItemLevel{Sync}" }, { - "index": 24, - "name": "ContentIndicator" + "index": 20, + "name": "AllowReplacement" + }, + { + "index": 26, + "name": "HighEndDuty" + }, + { + "index": 30, + "name": "DutyRecorderAllowed" + }, + { + "index": 32, + "name": "Name" }, { "index": 33, @@ -2729,9 +3507,17 @@ "target": "ContentType" } }, + { + "index": 34, + "name": "Transient", + "converter": { + "type": "link", + "target": "ContentFinderConditionTransient" + } + }, { "index": 37, - "name": "Icon", + "name": "Image", "converter": { "type": "icon" } @@ -2740,12 +3526,49 @@ }, { "sheet": "ContentFinderConditionTransient", + "defaultColumn": "Description", "definitions": [ { "name": "Description" } ] }, + { + "sheet": "ContentGauge", + "definitions": [ + { + "name": "Name" + }, + { + "index": 1, + "name": "Color", + "converter": { + "type": "link", + "target": "ContentGaugeColor" + } + }, + { + "index": 3, + "name": "TextString" + } + ] + }, + { + "sheet": "ContentGaugeColor", + "definitions": [ + { + "name": "AndroidColor{1}" + }, + { + "index": 1, + "name": "AndroidColor{2}" + }, + { + "index": 2, + "name": "AndroidColor{3}" + } + ] + }, { "sheet": "ContentMemberType", "defaultColumn": "InstanceContent", @@ -2804,6 +3627,18 @@ "index": 6, "name": "IsInDutyFinder" }, + { + "index": 7, + "name": "OpenRule", + "converter": { + "type": "link", + "target": "ContentRouletteOpenRule" + } + }, + { + "index": 9, + "name": "RequiredLevel" + }, { "index": 11, "name": "ItemLevel{Required}" @@ -2815,6 +3650,14 @@ "type": "icon" } }, + { + "index": 14, + "name": "ContentRouletteRoleBonus", + "converter": { + "type": "link", + "target": "ContentRouletteRoleBonus" + } + }, { "index": 15, "name": "Reward{TomeA}" @@ -2842,6 +3685,44 @@ { "index": 32, "name": "RequireAllDuties" + }, + { + "index": 34, + "name": "ContentRouletteOpenRule" + }, + { + "index": 35, + "name": "InstanceContent", + "converter": { + "type": "link", + "target": "InstanceContent" + } + } + ] + }, + { + "sheet": "ContentRouletteOpenRule", + "definitions": [ + { + "index": 1, + "name": "Type" + } + ] + }, + { + "sheet": "ContentRouletteRoleBonus", + "definitions": [ + { + "index": 6, + "name": "ItemRewardType", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 7, + "name": "RewardAmount" } ] }, @@ -2857,21 +3738,43 @@ }, { "index": 2, - "name": "RequiredAmount" - } - ] - }, - { - "sheet": "ContentsNoteCategory", - "defaultColumn": "Type", - "definitions": [ + "name": "MenuOrder" + }, { - "index": 1, - "name": "Type", + "index": 3, + "name": "RequiredAmount" + }, + { + "index": 5, + "name": "ExpMultiplier" + }, + { + "index": 7, + "name": "GilRward" + }, + { + "index": 8, + "name": "LevelUnlock" + }, + { + "index": 9, + "name": "HowTo", "converter": { "type": "link", - "target": "ContentType" + "target": "HowTo" } + }, + { + "index": 11, + "name": "Name" + }, + { + "index": 12, + "name": "Description" + }, + { + "index": 13, + "name": "ExpCap" } ] }, @@ -3079,6 +3982,14 @@ "target": "Leve" } }, + { + "index": 1, + "name": "CraftLeveTalk", + "converter": { + "type": "link", + "target": "CraftLeveTalk" + } + }, { "index": 2, "name": "Repeats" @@ -3115,6 +4026,100 @@ } ] }, + { + "sheet": "Credit", + "definitions": [ + { + "index": 1, + "name": "Roles(1)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 2, + "name": "JapaneseCast(1)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 3, + "name": "EnglishCast(1)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 4, + "name": "FrenchCast(1)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 5, + "name": "GermanCast(1)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 6, + "name": "Roles(2)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 7, + "name": "JapaneseCast(2)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 8, + "name": "EnglishCast(2)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 9, + "name": "FrenchCast(2)", + "converter": { + "type": "link", + "target": "CreditCast" + } + }, + { + "index": 10, + "name": "GermanCast(2)", + "converter": { + "type": "link", + "target": "CreditCast" + } + } + ] + }, + { + "sheet": "CreditCast", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name" + } + ] + }, { "sheet": "Currency", "defaultColumn": "Item", @@ -3221,6 +4226,16 @@ } ] }, + { + "sheet": "DeepDungeon", + "defaultColumn": "Name", + "definitions": [ + { + "index": 22, + "name": "Name" + } + ] + }, { "sheet": "DeepDungeonBan", "defaultColumn": "Name", @@ -3292,10 +4307,30 @@ "index": 1, "name": "Singular" }, + { + "index": 2, + "name": "Adjective" + }, { "index": 3, "name": "Plural" }, + { + "index": 4, + "name": "PossessivePronoun" + }, + { + "index": 5, + "name": "StartsWithVowel" + }, + { + "index": 7, + "name": "Pronoun" + }, + { + "index": 8, + "name": "Article" + }, { "index": 9, "name": "Name" @@ -3340,10 +4375,30 @@ "index": 1, "name": "Singular" }, + { + "index": 2, + "name": "Adjective" + }, { "index": 3, "name": "Plural" }, + { + "index": 4, + "name": "PossessivePronoun" + }, + { + "index": 5, + "name": "StartsWithVowel" + }, + { + "index": 7, + "name": "Pronoun" + }, + { + "index": 8, + "name": "Article" + }, { "index": 9, "name": "Name" @@ -3362,6 +4417,98 @@ } ] }, + { + "sheet": "DeepDungeonLayer", + "definitions": [ + { + "name": "DeepDungeon", + "converter": { + "type": "link", + "target": "DeepDungeon" + } + } + ] + }, + { + "sheet": "DeepDungeonMagicStone", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 1, + "name": "Singular" + }, + { + "index": 2, + "name": "Adjective" + }, + { + "index": 3, + "name": "Plural" + }, + { + "index": 4, + "name": "PossessivePronoun" + }, + { + "index": 5, + "name": "StartsWithVowel" + }, + { + "index": 7, + "name": "Pronoun" + }, + { + "index": 8, + "name": "Article" + }, + { + "index": 9, + "name": "Name" + }, + { + "index": 10, + "name": "Tooltip" + } + ] + }, + { + "sheet": "DeepDungeonMap5X", + "definitions": [ + { + "type": "repeat", + "count": 5, + "definition": { + "name": "DeepDungeonRoom", + "converter": { + "type": "link", + "target": "DeepDungeonRoom" + } + } + } + ] + }, + { + "sheet": "DeepDungeonRoom", + "definitions": [ + { + "type": "repeat", + "count": 5, + "definition": { + "name": "Level", + "converter": { + "type": "link", + "target": "Level" + } + } + } + ] + }, { "sheet": "DeepDungeonStatus", "definitions": [ @@ -3416,6 +4563,19 @@ } ] }, + { + "sheet": "DefaultTalkLipSyncType", + "defaultColumn": "ActionTimeline", + "definitions": [ + { + "name": "ActionTimeline", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "DeliveryQuest", "defaultColumn": "Quest", @@ -3579,6 +4739,14 @@ "target": "EmoteMode" } }, + { + "index": 15, + "name": "HasCancelEmote" + }, + { + "index": 16, + "name": "DrawsWeapon" + }, { "index": 18, "name": "TextCommand", @@ -3932,10 +5100,30 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Title" @@ -3957,6 +5145,14 @@ { "index": 9, "name": "Data" + }, + { + "index": 11, + "name": "SgbPath", + "converter": { + "type": "link", + "target": "ExportedSG" + } } ] }, @@ -3966,6 +5162,30 @@ "definitions": [ { "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" + }, + { + "index": 2, + "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" } ] }, @@ -4065,6 +5285,43 @@ } ] }, + { + "sheet": "EurekaAetherItem", + "defaultColumn": "Singular", + "definitions": [ + { + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" + }, + { + "index": 2, + "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, + { + "index": 8, + "name": "Name" + } + ] + }, { "sheet": "EurekaAethernet", "defaultColumn": "Location", @@ -4087,6 +5344,67 @@ } ] }, + { + "sheet": "EurekaLogosMixerProbability", + "definitions": [ + { + "name": "Probability<%>" + } + ] + }, + { + "sheet": "EurekaMagiaAction", + "definitions": [ + { + "name": "Action", + "converter": { + "type": "link", + "target": "Action" + } + }, + { + "index": 1, + "name": "MaxUses" + } + ] + }, + { + "sheet": "EurekaMagiciteItem", + "definitions": [ + { + "name": "EurekaMagiciteItemType", + "converter": { + "type": "link", + "target": "EurekaMagiciteItemType" + } + }, + { + "index": 1, + "name": "ClassJobCategory", + "converter": { + "type": "link", + "target": "ClassJobCategory" + } + }, + { + "index": 2, + "name": "Item", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, + { + "sheet": "EurekaMagiciteItemType", + "defaultColumn": "Type", + "definitions": [ + { + "name": "Type" + } + ] + }, { "sheet": "EurekaSphereElementAdjust", "defaultColumn": "PowerModifier", @@ -4113,6 +5431,18 @@ { "index": 2, "name": "CastTime" + }, + { + "index": 3, + "type": "repeat", + "count": 3, + "definition": { + "name": "Animation", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } } ] }, @@ -4169,18 +5499,34 @@ }, { "sheet": "EventItem", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, { - "index": 5, - "name": "Rarity" + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" }, { "index": 9, @@ -4193,6 +5539,14 @@ "type": "icon" } }, + { + "index": 11, + "name": "Action", + "converter": { + "type": "link", + "target": "Action" + } + }, { "index": 12, "name": "StackSize" @@ -4211,6 +5565,19 @@ } ] }, + { + "sheet": "EventItemCastTimeline", + "defaultColumn": "ActionTimeline", + "definitions": [ + { + "name": "ActionTimeline", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "EventItemHelp", "defaultColumn": "Description", @@ -4220,6 +5587,28 @@ } ] }, + { + "sheet": "EventItemTimeline", + "defaultColumn": "ActionTimeline", + "definitions": [ + { + "name": "ActionTimeline", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, + { + "sheet": "ExportedSG", + "defaultColumn": "SgbPath", + "definitions": [ + { + "name": "SgbPath" + } + ] + }, { "sheet": "ExVersion", "defaultColumn": "Name", @@ -4278,6 +5667,10 @@ "target": "BGM" } }, + { + "index": 19, + "name": "HasWorldMapIcon" + }, { "index": 27, "name": "Name" @@ -4491,6 +5884,15 @@ } ] }, + { + "sheet": "Festival", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name" + } + ] + }, { "sheet": "FieldMarker", "defaultColumn": "Icon", @@ -4511,6 +5913,31 @@ } ] }, + { + "sheet": "FishingRecordType", + "defaultColumn": "Addon", + "definitions": [ + { + "name": "Addon", + "converter": { + "type": "link", + "target": "Addon" + } + } + ] + }, + { + "sheet": "FishingRecordTypeTransient", + "defaultColumn": "Icon", + "definitions": [ + { + "name": "Image", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "FishingSpot", "defaultColumn": "PlaceName", @@ -4592,7 +6019,19 @@ "name": "GatheringItemLevel" }, { - "index": 4, + "index": 3, + "name": "IsHidden" + }, + { + "index": 5, + "name": "FishingRecordType", + "converter": { + "type": "link", + "target": "FishingRecordType" + } + }, + { + "index": 6, "name": "TerritoryType", "converter": { "type": "link", @@ -4600,11 +6039,19 @@ } }, { - "index": 5, - "name": "IsFish" + "index": 7, + "name": "IsInLog" }, { - "index": 6, + "index": 8, + "name": "TimeRestricted" + }, + { + "index": 9, + "name": "WeatherRestricted" + }, + { + "index": 10, "name": "GatheringSubCategory", "converter": { "type": "link", @@ -4613,6 +6060,95 @@ } ] }, + { + "sheet": "Frontline03", + "definitions": [ + { + "index": 9, + "type": "repeat", + "count": 3, + "definition": { + "name": "EmptyIcon", + "converter": { + "type": "icon" + } + } + }, + { + "index": 12, + "type": "repeat", + "count": 3, + "definition": { + "name": "MaelstromIcon", + "converter": { + "type": "icon" + } + } + }, + { + "index": 15, + "type": "repeat", + "count": 3, + "definition": { + "name": "TwinAdderIcon", + "converter": { + "type": "icon" + } + } + }, + { + "index": 18, + "type": "repeat", + "count": 3, + "definition": { + "name": "ImmortalFlamesIcon", + "converter": { + "type": "icon" + } + } + } + ] + }, + { + "sheet": "Frontline04", + "definitions": [ + { + "name": "Level[1]", + "converter": { + "type": "link", + "target": "Level" + } + }, + { + "index": 1, + "name": "Level[2]", + "converter": { + "type": "link", + "target": "Level" + } + }, + { + "index": 2, + "name": "Level[3]", + "converter": { + "type": "link", + "target": "Level" + } + }, + { + "index": 6, + "type": "repeat", + "count": 27, + "definition": { + "name": "Unknown{Level}", + "converter": { + "type": "link", + "target": "Level" + } + } + } + ] + }, { "sheet": "GardeningSeed", "defaultColumn": "Item", @@ -4703,6 +6239,59 @@ } ] }, + { + "sheet": "GatheringLeve", + "definitions": [ + { + "index": 4, + "name": "RequiredItem[1]", + "converter": { + "type": "link", + "target": "EventItem" + } + }, + { + "index": 5, + "name": "LeveLevel" + }, + { + "index": 6, + "name": "RequiredItem[2]", + "converter": { + "type": "link", + "target": "EventItem" + } + } + ] + }, + { + "sheet": "GatheringLeveRoute", + "definitions": [ + { + "type": "repeat", + "count": 12, + "definition": { + "type": "group", + "members": [ + { + "name": "GatheringPoint", + "converter": { + "type": "link", + "target": "GatheringPoint" + } + }, + { + "name": "Level", + "converter": { + "type": "link", + "target": "Level" + } + } + ] + } + } + ] + }, { "sheet": "GatheringNotebookList", "definitions": [ @@ -4848,9 +6437,29 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" } ] }, @@ -4895,6 +6504,46 @@ } ] }, + { + "sheet": "GcArmyCaptureTactics", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name", + "converter": { + "type": "link", + "target": "Status" + } + }, + { + "index": 1, + "name": "HP" + }, + { + "index": 2, + "name": "DamageDealt" + }, + { + "index": 3, + "name": "DamageReceived" + }, + { + "index": 4, + "name": "Tactic", + "converter": { + "type": "link", + "target": "Addon" + } + }, + { + "index": 5, + "name": "Icon", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "GcArmyExpedition", "defaultColumn": "Name", @@ -5141,15 +6790,35 @@ }, { "sheet": "GCRankGridaniaFemaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5158,15 +6827,35 @@ }, { "sheet": "GCRankGridaniaMaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5175,15 +6864,35 @@ }, { "sheet": "GCRankLimsaFemaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5192,15 +6901,35 @@ }, { "sheet": "GCRankLimsaMaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5209,15 +6938,35 @@ }, { "sheet": "GCRankUldahFemaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5226,15 +6975,35 @@ }, { "sheet": "GCRankUldahMaleText", - "defaultColumn": "Name", + "defaultColumn": "Singular", "definitions": [ { - "name": "Name" + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Name{Rank}" @@ -5383,6 +7152,10 @@ "target": "Action" } }, + { + "index": 4, + "name": "UnlockLink" + }, { "index": 7, "name": "Icon", @@ -5392,6 +7165,58 @@ } ] }, + { + "sheet": "GFATE", + "definitions": [ + { + "index": 22, + "type": "repeat", + "count": 16, + "definition": { + "name": "Icon", + "converter": { + "type": "icon" + } + } + } + ] + }, + { + "sheet": "GFateClimbing2", + "definitions": [ + { + "name": "ContentEntry", + "converter": { + "type": "link", + "target": "ContentEntry" + } + } + ] + }, + { + "sheet": "GFateClimbing2Content", + "definitions": [ + { + "name": "PublicContentTextData", + "converter": { + "type": "link", + "target": "PublicContentTextData" + } + } + ] + }, + { + "sheet": "GFateClimbing2TotemType", + "definitions": [ + { + "name": "PublicContentTextData", + "converter": { + "type": "link", + "target": "PublicContentTextData" + } + } + ] + }, { "sheet": "GilShop", "defaultColumn": "Name", @@ -5399,6 +7224,41 @@ "definitions": [ { "name": "Name" + }, + { + "index": 1, + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 2, + "type": "repeat", + "count": 4, + "definition": { + "name": "Quest{Required}", + "converter": { + "type": "link", + "target": "Quest" + } + } + }, + { + "index": 6, + "name": "AcceptTalk", + "converter": { + "type": "link", + "target": "DefaultTalk" + } + }, + { + "index": 7, + "name": "FailTalk", + "converter": { + "type": "link", + "target": "DefaultTalk" + } } ] }, @@ -5438,6 +7298,46 @@ } ] }, + { + "sheet": "GoldSaucerArcadeMachine", + "definitions": [ + { + "index": 6, + "name": "Fail Image", + "converter": { + "type": "icon" + } + }, + { + "index": 35, + "name": "Poor", + "converter": { + "type": "icon" + } + }, + { + "index": 36, + "name": "Good", + "converter": { + "type": "icon" + } + }, + { + "index": 37, + "name": "Great", + "converter": { + "type": "icon" + } + }, + { + "index": 38, + "name": "Excellent", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "GoldSaucerTextData", "defaultColumn": "Text", @@ -5545,6 +7445,14 @@ "sheet": "GuildleveAssignment", "isGenericReferenceTarget": true, "definitions": [ + { + "index": 1, + "name": "AssignmentTalk", + "converter": { + "type": "link", + "target": "GuildleveAssignmentTalk" + } + }, { "index": 2, "type": "repeat", @@ -5559,6 +7467,23 @@ } ] }, + { + "sheet": "GuildleveAssignmentCategory", + "defaultColumn": "", + "definitions": [ + { + "type": "repeat", + "count": 8, + "definition": { + "name": "Category", + "converter": { + "type": "link", + "target": "LeveAssignmentType" + } + } + } + ] + }, { "sheet": "GuildOrderGuide", "isGenericReferenceTarget": true, @@ -5569,6 +7494,30 @@ "isGenericReferenceTarget": true, "definitions": [] }, + { + "sheet": "HairMakeType", + "definitions": [ + { + "name": "Race", + "converter": { + "type": "link", + "target": "Race" + } + }, + { + "index": 1, + "name": "Tribe", + "converter": { + "type": "link", + "target": "Tribe" + } + }, + { + "index": 2, + "name": "Gender" + } + ] + }, { "sheet": "HouseRetainerPose", "defaultColumn": "ActionTimeline", @@ -5582,6 +7531,112 @@ } ] }, + { + "sheet": "HousingAethernet", + "definitions": [ + { + "name": "Level", + "converter": { + "type": "link", + "target": "Level" + } + }, + { + "index": 1, + "name": "TerritoryType", + "converter": { + "type": "link", + "target": "TerritoryType" + } + }, + { + "index": 2, + "name": "PlaceName", + "converter": { + "type": "link", + "target": "PlaceName" + } + }, + { + "index": 3, + "name": "Order" + } + ] + }, + { + "sheet": "HousingAppeal", + "defaultColumn": "Tag", + "definitions": [ + { + "name": "Tag" + }, + { + "index": 1, + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 2, + "name": "Order" + } + ] + }, + { + "sheet": "HousingEmploymentNpcList", + "definitions": [ + { + "name": "Race", + "converter": { + "type": "link", + "target": "HousingEmploymentNpcRace" + } + }, + { + "index": 1, + "type": "repeat", + "count": 2, + "definition": { + "name": "ENpcBase", + "converter": { + "type": "link", + "target": "ENpcBase" + } + } + } + ] + }, + { + "sheet": "HousingEmploymentNpcRace", + "defaultColumn": "Race", + "definitions": [ + { + "name": "Race" + } + ] + }, + { + "sheet": "HousingExterior", + "definitions": [ + { + "index": 2, + "name": "PlaceName", + "converter": { + "type": "link", + "target": "PlaceName" + } + }, + { + "index": 3, + "name": "HousingSize" + }, + { + "index": 4, + "name": "Model" + } + ] + }, { "sheet": "HousingFurniture", "defaultColumn": "Item", @@ -5613,9 +7668,17 @@ "target": "HousingLayoutLimit" } }, + { + "index": 5, + "name": "AquariumTier" + }, { "index": 6, - "name": "Event" + "name": "CustomTalk", + "converter": { + "type": "link", + "target": "CustomTalk" + } }, { "index": 7, @@ -5628,6 +7691,247 @@ { "index": 8, "name": "DestroyOnRemoval" + }, + { + "index": 9, + "name": "Tooltip", + "converter": { + "type": "link", + "target": "HousingPlacement" + } + } + ] + }, + { + "sheet": "HousingMapMarkerInfo", + "definitions": [ + { + "index": 4, + "name": "Map", + "converter": { + "type": "link", + "target": "Map" + } + } + ] + }, + { + "sheet": "HousingMerchantPose", + "defaultColumn": "Pose", + "definitions": [ + { + "name": "ActionTimeline", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 1, + "name": "Pose" + } + ] + }, + { + "sheet": "HousingLandSet", + "defaultColumn": "", + "definitions": [ + { + "type": "repeat", + "count": 60, + "definition": { + "name": "PlotSize" + } + }, + { + "index": 300, + "type": "repeat", + "count": 60, + "definition": { + "name": "InitialPrice" + } + } + ] + }, + { + "sheet": "HousingPlacement", + "defaultColumn": "Text", + "definitions": [ + { + "name": "Text" + } + ] + }, + { + "sheet": "HousingPreset", + "definitions": [ + { + "name": "Singular" + }, + { + "index": 1, + "name": "Adjective" + }, + { + "index": 2, + "name": "Plural" + }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, + { + "index": 8, + "name": "PlaceName", + "converter": { + "type": "link", + "target": "PlaceName" + } + }, + { + "index": 9, + "name": "HousingSize" + }, + { + "index": 10, + "name": "ExteriorRoof", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 11, + "name": "ExteriorWall", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 12, + "name": "ExteriorWindow", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 13, + "name": "ExteriorDoor", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 14, + "name": "InteriorWall", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 15, + "name": "InteriorFlooring", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 16, + "name": "InteriorLighting", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 17, + "name": "OtherFloorWall", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 18, + "name": "OtherFloorFlooring", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 19, + "name": "OtherFloorLighting", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 20, + "name": "BasementWall", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 21, + "name": "BasementFlooring", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 22, + "name": "BasementLighting", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 23, + "name": "MansionLighting", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, + { + "sheet": "HousingUnitedExterior", + "definitions": [ + { + "index": 1, + "type": "repeat", + "count": 8, + "definition": { + "name": "Item", + "converter": { + "type": "link", + "target": "HousingExterior" + } + } } ] }, @@ -5664,7 +7968,11 @@ }, { "index": 5, - "name": "Event" + "name": "CustomTalk", + "converter": { + "type": "link", + "target": "CustomTalk" + } }, { "index": 6, @@ -5680,6 +7988,53 @@ } ] }, + { + "sheet": "HowTo", + "definitions": [ + { + "index": 2, + "type": "repeat", + "count": 10, + "definition": { + "name": "Images", + "converter": { + "type": "link", + "target": "HowToPage" + } + } + }, + { + "index": 12, + "name": "Category", + "converter": { + "type": "link", + "target": "HowToCategory" + } + } + ] + }, + { + "sheet": "HowToCategory", + "defaultColumn": "Category", + "definitions": [ + { + "name": "Category" + } + ] + }, + { + "sheet": "HowToPage", + "defaultColumn": "Image", + "definitions": [ + { + "index": 2, + "name": "Image", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "InstanceContent", "defaultColumn": "Name", @@ -5712,23 +8067,43 @@ } }, { - "index": 9, - "name": "TerritoryType", + "index": 6, + "name": "WinBGM", "converter": { "type": "link", - "target": "TerritoryType" + "target": "BGM" + } + }, + { + "index": 7, + "name": "Cutscene", + "converter": { + "type": "link", + "target": "Cutscene" + } + }, + { + "index": 9, + "name": "Order" + }, + { + "index": 12, + "name": "InstanceContentTextData{Boss}{Start}", + "converter": { + "type": "link", + "target": "InstanceContentTextData" } }, { "index": 13, - "name": "InstanceContentTextData{Boss}{Start}" + "name": "InstanceContentTextData{Boss}{End}", + "converter": { + "type": "link", + "target": "InstanceContentTextData" + } }, { "index": 14, - "name": "InstanceContentTextData{Boss}{End}" - }, - { - "index": 15, "name": "BNpcBase{Boss}", "converter": { "type": "link", @@ -5736,7 +8111,7 @@ } }, { - "index": 16, + "index": 15, "name": "InstanceContentTextData{Objective}{Start}", "converter": { "type": "link", @@ -5744,7 +8119,7 @@ } }, { - "index": 17, + "index": 16, "name": "InstanceContentTextData{Objective}{End}", "converter": { "type": "link", @@ -5752,31 +8127,48 @@ } }, { - "index": 18, + "index": 17, "name": "SortKey" }, { - "index": 21, + "index": 20, "name": "NewPlayerBonusA" }, { - "index": 22, + "index": 21, "name": "NewPlayerBonusB" }, { - "index": 24, + "index": 22, + "name": "FinalBossExp" + }, + { + "index": 23, "name": "FinalBossCurrencyA" }, { - "index": 25, + "index": 24, "name": "FinalBossCurrencyB" }, { - "index": 26, + "index": 25, "name": "FinalBossCurrencyC" }, { - "index": 32, + "index": 26, + "type": "repeat", + "count": 5, + "definition": { + "type": "group", + "members": [ + { + "name": "BossExp" + } + ] + } + }, + { + "index": 31, "type": "repeat", "count": 5, "definition": { @@ -5789,7 +8181,7 @@ } }, { - "index": 37, + "index": 36, "type": "repeat", "count": 5, "definition": { @@ -5802,7 +8194,7 @@ } }, { - "index": 42, + "index": 41, "type": "repeat", "count": 5, "definition": { @@ -5815,7 +8207,11 @@ } }, { - "index": 52, + "index": 46, + "name": "InstanceClearExp" + }, + { + "index": 51, "name": "InstanceContentBuff", "converter": { "type": "link", @@ -5823,7 +8219,15 @@ } }, { - "index": 56, + "index": 52, + "name": "ReqInstance", + "converter": { + "type": "link", + "target": "InstanceContent" + } + }, + { + "index": 55, "name": "PartyCondition" } ] @@ -5856,14 +8260,30 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, { "index": 4, "name": "StartsWithVowel" }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, { "index": 8, "name": "Description" @@ -5897,10 +8317,67 @@ }, { "index": 14, - "name": "Stain", + "name": "AdditionalData", "converter": { - "type": "link", - "target": "Stain" + "type": "complexlink", + "links": [ + { + "sheet": "Stain", + "when": { + "key": "FilterGroup", + "value": 15 + } + }, + { + "sheet": "TreasureHuntRank", + "when": { + "key": "FilterGroup", + "value": 18 + } + }, + { + "sheet": "GardeningSeed", + "when": { + "key": "FilterGroup", + "value": 20 + } + }, + { + "sheet": "AetherialWheel", + "when": { + "key": "FilterGroup", + "value": 25 + } + }, + { + "sheet": "CompanyAction", + "when": { + "key": "FilterGroup", + "value": 26 + } + }, + { + "sheet": "TripleTriadCard", + "when": { + "key": "FilterGroup", + "value": 27 + } + }, + { + "sheet": "AirshipExplorationPart", + "when": { + "key": "FilterGroup", + "value": 28 + } + }, + { + "sheet": "SubmarinePart", + "when": { + "key": "FilterGroup", + "value": 37 + } + } + ] } }, { @@ -5943,6 +8420,10 @@ "index": 22, "name": "IsIndisposable" }, + { + "index": 23, + "name": "IsEquippable" + }, { "index": 24, "name": "Price{Mid}" @@ -6162,6 +8643,10 @@ { "index": 86, "name": "IsPvP" + }, + { + "index": 87, + "name": "IsGlamourous" } ] }, @@ -6227,6 +8712,302 @@ } ] }, + { + "sheet": "ItemLevel", + "definitions": [ + { + "name": "Strength" + }, + { + "index": 1, + "name": "Dexterity" + }, + { + "index": 2, + "name": "Vitality" + }, + { + "index": 3, + "name": "Intelligence" + }, + { + "index": 4, + "name": "Mind" + }, + { + "index": 5, + "name": "Piety" + }, + { + "index": 6, + "name": "HP" + }, + { + "index": 7, + "name": "MP" + }, + { + "index": 8, + "name": "TP" + }, + { + "index": 9, + "name": "GP" + }, + { + "index": 10, + "name": "CP" + }, + { + "index": 11, + "name": "PhysicalDamage" + }, + { + "index": 12, + "name": "MagicalDamage" + }, + { + "index": 13, + "name": "Delay" + }, + { + "index": 14, + "name": "AdditionalEffect" + }, + { + "index": 15, + "name": "AttackSpeed" + }, + { + "index": 16, + "name": "BlockRate" + }, + { + "index": 17, + "name": "BlockStrength" + }, + { + "index": 18, + "name": "Tenacity" + }, + { + "index": 19, + "name": "AttackPower" + }, + { + "index": 20, + "name": "Defense" + }, + { + "index": 21, + "name": "DirectHitRate" + }, + { + "index": 22, + "name": "Evasion" + }, + { + "index": 23, + "name": "MagicDefense" + }, + { + "index": 24, + "name": "CriticalHitPower" + }, + { + "index": 25, + "name": "CriticalHitResilience" + }, + { + "index": 26, + "name": "CriticalHit" + }, + { + "index": 27, + "name": "CriticalHitEvasion" + }, + { + "index": 28, + "name": "SlashingResistance" + }, + { + "index": 29, + "name": "PiercingResistance" + }, + { + "index": 30, + "name": "BluntResistance" + }, + { + "index": 31, + "name": "ProjectileResistance" + }, + { + "index": 32, + "name": "AttackMagicPotency" + }, + { + "index": 33, + "name": "HealingMagicPotency" + }, + { + "index": 34, + "name": "EnhancementMagicPotency" + }, + { + "index": 35, + "name": "EnfeeblingMagicPotency" + }, + { + "index": 36, + "name": "FireResistance" + }, + { + "index": 37, + "name": "IceResistance" + }, + { + "index": 38, + "name": "WindResistance" + }, + { + "index": 39, + "name": "EarthResistance" + }, + { + "index": 40, + "name": "LightningResistance" + }, + { + "index": 41, + "name": "WaterResistance" + }, + { + "index": 42, + "name": "MagicResistance" + }, + { + "index": 43, + "name": "Determination" + }, + { + "index": 44, + "name": "SkillSpeed" + }, + { + "index": 45, + "name": "SpellSpeed" + }, + { + "index": 46, + "name": "Haste" + }, + { + "index": 47, + "name": "Morale" + }, + { + "index": 48, + "name": "Enmity" + }, + { + "index": 49, + "name": "EnmityReduction" + }, + { + "index": 50, + "name": "CarefulDesynthesis" + }, + { + "index": 51, + "name": "EXPBonus" + }, + { + "index": 52, + "name": "Regen" + }, + { + "index": 53, + "name": "Refresh" + }, + { + "index": 54, + "name": "MovementSpeed" + }, + { + "index": 55, + "name": "Spikes" + }, + { + "index": 56, + "name": "SlowResistance" + }, + { + "index": 57, + "name": "PetrificationResistance" + }, + { + "index": 58, + "name": "ParalysisResistance" + }, + { + "index": 59, + "name": "SilenceResistance" + }, + { + "index": 60, + "name": "BlindResistance" + }, + { + "index": 61, + "name": "PoisonResistance" + }, + { + "index": 62, + "name": "StunResistance" + }, + { + "index": 63, + "name": "SleepResistance" + }, + { + "index": 64, + "name": "BindResistance" + }, + { + "index": 65, + "name": "HeavyResistance" + }, + { + "index": 66, + "name": "DoomResistance" + }, + { + "index": 67, + "name": "ReducedDurabilityLoss" + }, + { + "index": 68, + "name": "IncreasedSpiritbondGain" + }, + { + "index": 69, + "name": "Craftsmanship" + }, + { + "index": 70, + "name": "Control" + }, + { + "index": 71, + "name": "Gathering" + }, + { + "index": 72, + "name": "Perception" + } + ] + }, { "sheet": "ItemSearchCategory", "defaultColumn": "Name", @@ -6435,7 +9216,16 @@ }, { "index": 17, - "name": "DataId" + "name": "DataId", + "converter": { + "type": "multiref", + "targets": [ + "CraftLeve", + "CompanyLeve", + "GatheringLeve", + "BattleLeve" + ] + } }, { "index": 21, @@ -6559,7 +9349,47 @@ }, { "index": 6, - "name": "ObjectKey" + "name": "Object", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "ENpcBase", + "when": { + "key": "Type", + "value": 8 + } + }, + { + "sheet": "BNpcBase", + "when": { + "key": "Type", + "value": 9 + } + }, + { + "sheet": "Aetheryte", + "when": { + "key": "Type", + "value": 12 + } + }, + { + "sheet": "GatheringPoint", + "when": { + "key": "Type", + "value": 14 + } + }, + { + "sheet": "EObj", + "when": { + "key": "Type", + "value": 45 + } + } + ] + } }, { "index": 7, @@ -6571,7 +9401,16 @@ }, { "index": 8, - "name": "EventId" + "name": "EventId", + "converter": { + "type": "multiref", + "targets": [ + "TripleTriad", + "Adventure", + "Opening", + "Quest" + ] + } }, { "index": 9, @@ -6654,7 +9493,6 @@ "defaultColumn": "Name", "definitions": [ { - "index": 1, "name": "LogKind", "converter": { "type": "link", @@ -6723,6 +9561,31 @@ } ] }, + { + "sheet": "LotteryExchangeShop", + "definitions": [ + { + "index": 1, + "type": "repeat", + "count": 16, + "definition": { + "name": "ItemAccepted", + "converter": { + "type": "link", + "target": "Item" + } + } + }, + { + "index": 17, + "type": "repeat", + "count": 16, + "definition": { + "name": "AmountAccepted" + } + } + ] + }, { "sheet": "MacroIcon", "defaultColumn": "Icon", @@ -6791,6 +9654,34 @@ } ] }, + { + "sheet": "ManeuversArmor", + "definitions": [ + { + "index": 1, + "type": "repeat", + "count": 2, + "definition": { + "name": "BNpcBase", + "converter": { + "type": "link", + "target": "BNpcName" + } + } + }, + { + "index": 5, + "type": "repeat", + "count": 5, + "definition": { + "name": "Icon", + "converter": { + "type": "icon" + } + } + } + ] + }, { "sheet": "Map", "defaultColumn": "PlaceName", @@ -6908,7 +9799,40 @@ }, { "index": 8, - "name": "Data{Key}" + "name": "Data{Key}", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "Map", + "when": { + "key": "Data{Type}", + "value": 1 + } + }, + { + "sheet": "Map", + "when": { + "key": "Data{Type}", + "value": 2 + } + }, + { + "sheet": "Aetheryte", + "when": { + "key": "Data{Type}", + "value": 3 + } + }, + { + "sheet": "PlaceName", + "when": { + "key": "Data{Type}", + "value": 4 + } + } + ] + } } ] }, @@ -7083,6 +10007,26 @@ } ] }, + { + "sheet": "MiniGameRA", + "definitions": [ + { + "index": 1, + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 2, + "name": "BGM", + "converter": { + "type": "link", + "target": "BGM" + } + } + ] + }, { "sheet": "MinionRace", "defaultColumn": "Name", @@ -7114,6 +10058,27 @@ } ] }, + { + "sheet": "MobHuntOrderType", + "definitions": [ + { + "index": 1, + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 2, + "name": "EventItem", + "converter": { + "type": "link", + "target": "EventItem" + } + } + ] + }, { "sheet": "MobHuntTarget", "definitions": [ @@ -7177,6 +10142,27 @@ } ] }, + { + "sheet": "ModelState", + "defaultColumn": "Start", + "definitions": [ + { + "name": "Start", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 1, + "name": "End", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "MonsterNote", "defaultColumn": "Name", @@ -7261,18 +10247,58 @@ { "name": "Singular" }, + { + "index": 1, + "name": "Adjective" + }, { "index": 2, "name": "Plural" }, + { + "index": 3, + "name": "PossessivePronoun" + }, + { + "index": 4, + "name": "StartsWithVowel" + }, + { + "index": 6, + "name": "Pronoun" + }, + { + "index": 7, + "name": "Article" + }, + { + "index": 8, + "name": "ModelChara", + "converter": { + "type": "link", + "target": "ModelChara" + } + }, { "index": 10, - "name": "FlyingCondition" + "name": "FlyingCondition", + "converter": { + "type": "link", + "target": "MountFlyingCondition" + } }, { "index": 14, "name": "IsFlying" }, + { + "index": 16, + "name": "MountCustomize", + "converter": { + "type": "link", + "target": "MountCustomize" + } + }, { "index": 17, "name": "RideBGM", @@ -7291,6 +10317,30 @@ "converter": { "type": "icon" } + }, + { + "index": 36, + "name": "ExtraSeats" + }, + { + "index": 37, + "name": "MountAction", + "converter": { + "type": "link", + "target": "MountAction" + } + }, + { + "index": 38, + "name": "IsAirborne" + }, + { + "index": 40, + "name": "UseEP" + }, + { + "index": 42, + "name": "IsImmobile" } ] }, @@ -7310,6 +10360,149 @@ } ] }, + { + "sheet": "MountCustomize", + "definitions": [ + { + "index": 1, + "name": "HyurMaleScale" + }, + { + "index": 2, + "name": "HyurFemaleScale" + }, + { + "index": 3, + "name": "ElezenMaleScale" + }, + { + "index": 4, + "name": "ElezenFemaleScale" + }, + { + "index": 5, + "name": "LalaMaleScale" + }, + { + "index": 6, + "name": "LalaFemaleScale" + }, + { + "index": 7, + "name": "MiqoMaleScale" + }, + { + "index": 8, + "name": "MiqoFemaleScale" + }, + { + "index": 9, + "name": "RoeMaleScale" + }, + { + "index": 10, + "name": "RoeFemaleScale" + }, + { + "index": 11, + "name": "AuRaMaleScale" + }, + { + "index": 12, + "name": "AuRaFemaleScale" + }, + { + "index": 13, + "name": "HyurMaleCameraHeight" + }, + { + "index": 14, + "name": "HyurFemaleCameraHeight" + }, + { + "index": 15, + "name": "ElezenMaleCameraHeight" + }, + { + "index": 16, + "name": "ElezenFemaleCameraHeight" + }, + { + "index": 17, + "name": "LalaMaleCameraHeight" + }, + { + "index": 18, + "name": "LalaFemaleCameraHeight" + }, + { + "index": 19, + "name": "MiqoMaleCameraHeight" + }, + { + "index": 20, + "name": "MiqoFemaleCameraHeight" + }, + { + "index": 21, + "name": "RoeMaleCameraHeight" + }, + { + "index": 22, + "name": "RoeFemaleCameraHeight" + }, + { + "index": 23, + "name": "AuRaMaleCameraHeight" + }, + { + "index": 24, + "name": "AuRaFemaleCameraHeight" + } + ] + }, + { + "sheet": "MountFlyingCondition", + "defaultColumn": "Quest", + "definitions": [ + { + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, + { + "sheet": "MountSpeed", + "defaultColumn": "Quest", + "definitions": [ + { + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, + { + "sheet": "MountTransient", + "definitions": [ + { + "name": "Description" + }, + { + "index": 1, + "name": "Description{Enhanced}" + }, + { + "index": 2, + "name": "Tooltip" + } + ] + }, { "sheet": "MoveTimeline", "defaultColumn": "Idle", @@ -7397,10 +10590,10 @@ }, { "sheet": "MoveVfx", - "defaultColumn": "0", + "defaultColumn": "VFXNormal", "definitions": [ { - "name": "0", + "name": "VFXNormal", "converter": { "type": "link", "target": "VFX" @@ -7408,7 +10601,7 @@ }, { "index": 1, - "name": "1", + "name": "VFXWalking", "converter": { "type": "link", "target": "VFX" @@ -7568,6 +10761,16 @@ } ] }, + { + "sheet": "NpcYell", + "defaultColumn": "Text", + "definitions": [ + { + "index": 9, + "name": "Text" + } + ] + }, { "sheet": "Omen", "defaultColumn": "FileName", @@ -7604,6 +10807,14 @@ "definitions": [ { "name": "Name" + }, + { + "index": 1, + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } } ] }, @@ -7688,6 +10899,76 @@ } ] }, + { + "sheet": "PartyContent", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Key" + }, + { + "index": 1, + "name": "TimeLimit" + }, + { + "index": 2, + "name": "Name" + }, + { + "index": 3, + "name": "TextData{Start}", + "converter": { + "type": "link", + "target": "PartyContentTextData" + } + }, + { + "index": 4, + "name": "TextData{End}", + "converter": { + "type": "link", + "target": "PartyContentTextData" + } + }, + { + "index": 33, + "name": "ContentFinderCondition", + "converter": { + "type": "link", + "target": "ContentFinderCondition" + } + }, + { + "index": 34, + "name": "Image", + "converter": { + "type": "icon" + } + } + ] + }, + { + "sheet": "PartyContentCutscene", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Cutscene", + "converter": { + "type": "link", + "target": "Cutscene" + } + } + ] + }, + { + "sheet": "PartyContentTextData", + "defaultColumn": "Data", + "definitions": [ + { + "name": "Data" + } + ] + }, { "sheet": "Perform", "defaultColumn": "Name", @@ -7790,6 +11071,13 @@ "index": 1, "name": "Description" }, + { + "index": 2, + "name": "Icon", + "converter": { + "type": "icon" + } + }, { "index": 3, "name": "Action", @@ -7845,10 +11133,49 @@ } ] }, + { + "sheet": "PlantPotFlowerSeed", + "definitions": [ + { + "type": "repeat", + "count": 9, + "definition": { + "name": "SeedIcon", + "converter": { + "type": "icon" + } + } + } + ] + }, + { + "sheet": "PreHandler", + "defaultColumn": "", + "definitions": [ + { + "name": "GilShop", + "converter": { + "type": "link", + "target": "GilShop" + } + }, + { + "index": 2, + "name": "ActionTimeline", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "PublicContent", "defaultColumn": "Name", "definitions": [ + { + "name": "Type" + }, { "index": 1, "name": "TimeLimit" @@ -7865,11 +11192,92 @@ "name": "Name" }, { - "index": 7, - "name": "TerritoryType", + "index": 4, + "name": "TextData{Start}", "converter": { "type": "link", - "target": "TerritoryType" + "target": "PublicContentTextData" + } + }, + { + "index": 5, + "name": "TextData{End}", + "converter": { + "type": "link", + "target": "PublicContentTextData" + } + }, + { + "index": 7, + "name": "ContentFinderCondition", + "converter": { + "type": "link", + "target": "ContentFinderCondition" + } + }, + { + "index": 8, + "name": "AdditionalData", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "Eureka", + "when": { + "key": "Type", + "value": 3 + } + }, + { + "sheet": "GFateClimbing2Content", + "when": { + "key": "Type", + "value": 5 + } + } + ] + } + } + ] + }, + { + "sheet": "PublicContentCutscene", + "definitions": [ + { + "name": "Cutscene", + "converter": { + "type": "link", + "target": "Cutscene" + } + }, + { + "index": 1, + "name": "Cutscene2", + "converter": { + "type": "link", + "target": "Cutscene" + } + } + ] + }, + { + "sheet": "PublicContentTextData", + "defaultColumn": "TextData", + "definitions": [ + { + "name": "TextData" + } + ] + }, + { + "sheet": "PvPAction", + "defaultColumn": "Action", + "definitions": [ + { + "name": "Action", + "converter": { + "type": "link", + "target": "Action" } } ] @@ -7891,6 +11299,61 @@ } ] }, + { + "sheet": "PvPRank", + "definitions": [ + { + "name": "ExpRequired" + } + ] + }, + { + "sheet": "PvPSelectTrait", + "definitions": [ + { + "name": "Effect" + }, + { + "index": 1, + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 2, + "name": "Value" + } + ] + }, + { + "sheet": "PvPTrait", + "definitions": [ + { + "name": "Trait{1}", + "converter": { + "type": "link", + "target": "Trait" + } + }, + { + "index": 1, + "name": "Trait{2}", + "converter": { + "type": "link", + "target": "Trait" + } + }, + { + "index": 2, + "name": "Trait{3}", + "converter": { + "type": "link", + "target": "Trait" + } + } + ] + }, { "sheet": "Quest", "defaultColumn": "Name", @@ -7927,6 +11390,10 @@ "index": 5, "name": "QuestLevelOffset" }, + { + "index": 6, + "name": "Level{Max}" + }, { "index": 7, "name": "ClassJobCategory[1]", @@ -8023,6 +11490,14 @@ } } }, + { + "index": 27, + "name": "Festival", + "converter": { + "type": "link", + "target": "Festival" + } + }, { "index": 30, "name": "Bell{Start}" @@ -8083,6 +11558,14 @@ "index": 44, "name": "RepeatIntervalType" }, + { + "index": 45, + "name": "QuestRepeatFlag", + "converter": { + "type": "link", + "target": "QuestRepeatFlag" + } + }, { "index": 50, "type": "repeat", @@ -8162,8 +11645,19 @@ "definition": { "name": "Item{Reward}[0]", "converter": { - "type": "link", - "target": "Item" + "type": "complexlink", + "links": [ + { + "sheet": "QuestClassJobReward", + "when": { + "key": "ItemRewardType", + "value": 6 + } + }, + { + "sheet": "Item" + } + ] } } }, @@ -8339,7 +11833,6 @@ }, { "sheet": "QuestClassJobReward", - "defaultColumn": "Name", "definitions": [ { "name": "ClassJobCategory", @@ -8390,6 +11883,35 @@ } ] }, + { + "sheet": "QuestClassJobSupply", + "defaultColumn": "Name", + "definitions": [ + { + "name": "ClassJobCategory", + "converter": { + "type": "link", + "target": "ClassJobCategory" + } + }, + { + "index": 2, + "name": "ENpcResident", + "converter": { + "type": "link", + "target": "ENpcResident" + } + }, + { + "index": 3, + "name": "Item", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, { "sheet": "QuestRepeatFlag", "defaultColumn": "Quest", @@ -8407,6 +11929,12 @@ "sheet": "QuestRewardOther", "defaultColumn": "Name", "definitions": [ + { + "name": "Icon", + "converter": { + "type": "icon" + } + }, { "index": 1, "name": "Name" @@ -8730,6 +12258,10 @@ { "index": 42, "name": "IsSpecializationRequired" + }, + { + "index": 44, + "name": "PatchNumber" } ] }, @@ -8752,6 +12284,10 @@ "index": 1, "name": "Stars" }, + { + "index": 2, + "name": "SuggestedCraftsmanship" + }, { "index": 3, "name": "Difficulty" @@ -9048,6 +12584,31 @@ } ] }, + { + "sheet": "Resident", + "definitions": [ + { + "index": 1, + "name": "Model" + }, + { + "index": 2, + "name": "NpcYell", + "converter": { + "type": "link", + "target": "NpcYell" + } + }, + { + "index": 3, + "name": "ResidentMotionType", + "converter": { + "type": "link", + "target": "ResidentMotionType" + } + } + ] + }, { "sheet": "RetainerTask", "definitions": [ @@ -9204,6 +12765,27 @@ } ] }, + { + "sheet": "RPParameter", + "defaultColumn": "BNpcName", + "definitions": [ + { + "name": "BNpcName", + "converter": { + "type": "link", + "target": "BNpcName" + } + }, + { + "index": 1, + "name": "ClassJob", + "converter": { + "type": "link", + "target": "ClassJob" + } + } + ] + }, { "sheet": "Salvage", "defaultColumn": "OptimalSkill", @@ -9474,7 +13056,7 @@ "name": "Level", "converter": { "type": "link", - "target": "level" + "target": "Level" } } ] @@ -9492,7 +13074,10 @@ "sheet": "ScreenImage", "definitions": [ { - "name": "Image" + "name": "Image", + "converter": { + "type": "icon" + } } ] }, @@ -9706,6 +13291,26 @@ } ] }, + { + "sheet": "SpearfishingRecordPage", + "definitions": [ + { + "index": 3, + "name": "PlaceName", + "converter": { + "type": "link", + "target": "PlaceName" + } + }, + { + "index": 4, + "name": "Image", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "SpecialShop", "defaultColumn": "Name", @@ -9831,6 +13436,14 @@ ] } }, + { + "index": 1862, + "name": "Quest{Unlock}", + "converter": { + "type": "link", + "target": "Quest" + } + }, { "index": 1863, "name": "Quest{Shop}", @@ -9838,6 +13451,22 @@ "type": "link", "target": "Quest" } + }, + { + "index": 1864, + "name": "NotCompleteText", + "converter": { + "type": "link", + "target": "DefaultTalk" + } + }, + { + "index": 1865, + "name": "CompleteText", + "converter": { + "type": "link", + "target": "DefaultTalk" + } } ] }, @@ -9986,10 +13615,26 @@ }, { "sheet": "StatusLoopVFX", - "defaultColumn": "Location", + "defaultColumn": "VFX", "definitions": [ { - "name": "Location", + "name": "VFX", + "converter": { + "type": "link", + "target": "VFX" + } + }, + { + "index": 2, + "name": "VFX2", + "converter": { + "type": "link", + "target": "VFX" + } + }, + { + "index": 4, + "name": "VFX3", "converter": { "type": "link", "target": "VFX" @@ -10120,7 +13765,7 @@ }, { "sheet": "TerritoryType", - "defaultColumn": "Name", + "defaultColumn": "PlaceName", "definitions": [ { "name": "Name" @@ -10227,12 +13872,15 @@ { "index": 2, "name": "IsPrefix" + }, + { + "index": 3, + "name": "Order" } ] }, { "sheet": "Tomestones", - "defaultColumn": "WeeklyLimit", "definitions": [ { "name": "WeeklyLimit" @@ -10332,6 +13980,14 @@ "index": 3, "name": "Level" }, + { + "index": 4, + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + }, { "index": 5, "name": "Value" @@ -10392,7 +14048,7 @@ } }, { - "index": 2, + "index": 4, "name": "BNpcCustomize", "converter": { "type": "link", @@ -10400,15 +14056,7 @@ } }, { - "index": 3, - "name": "BNpcEquip", - "converter": { - "type": "link", - "target": "BNpcEquip" - } - }, - { - "index": 4, + "index": 5, "type": "repeat", "count": 6, "definition": { @@ -10420,23 +14068,23 @@ } }, { - "index": 12, + "index": 13, "name": "Speed" }, { - "index": 13, + "index": 14, "name": "Scale" }, { - "index": 14, + "index": 15, "name": "IsPvP" }, { - "index": 15, + "index": 16, "name": "IsEvent" }, { - "index": 16, + "index": 17, "name": "PlayerCamera" } ] @@ -10842,6 +14490,18 @@ } ] }, + { + "sheet": "UIColor", + "definitions": [ + { + "name": "Foreground" + }, + { + "index": 1, + "name": "Background" + } + ] + }, { "sheet": "VaseFlower", "definitions": [ @@ -10885,7 +14545,7 @@ }, { "index": 2, - "name": "DefaultTalk1", + "name": "ConditionSuccessEvent", "converter": { "type": "link", "target": "DefaultTalk" @@ -10893,7 +14553,7 @@ }, { "index": 3, - "name": "DefaultTalk2", + "name": "ConditionFailEvent", "converter": { "type": "link", "target": "DefaultTalk" @@ -10901,7 +14561,7 @@ }, { "index": 4, - "name": "DefaultTalk3", + "name": "ConfirmEvent", "converter": { "type": "link", "target": "DefaultTalk" @@ -10909,11 +14569,19 @@ }, { "index": 5, - "name": "WarpCondition" + "name": "WarpCondition", + "converter": { + "type": "link", + "target": "WarpCondition" + } }, { "index": 6, - "name": "WarpLogic" + "name": "WarpLogic", + "converter": { + "type": "link", + "target": "WarpLogic" + } } ] }, @@ -10954,6 +14622,44 @@ } ] }, + { + "sheet": "WarpLogic", + "defaultColumn": "WarpName", + "definitions": [ + { + "index": 1, + "name": "WarpName" + }, + { + "index": 3, + "type": "repeat", + "count": 10, + "definition": { + "name": "Function" + } + }, + { + "index": 13, + "type": "repeat", + "count": 10, + "definition": { + "name": "Argument" + } + }, + { + "index": 23, + "name": "Question" + }, + { + "index": 24, + "name": "Response{Yes}" + }, + { + "index": 25, + "name": "Response{No}" + } + ] + }, { "sheet": "Weather", "defaultColumn": "Name", @@ -11033,9 +14739,24 @@ { "sheet": "WeeklyBingoOrderData", "definitions": [ + { + "name": "Type" + }, { "index": 1, - "name": "Data" + "name": "Data", + "converter": { + "type": "complexlink", + "links": [ + { + "sheet": "InstanceContent", + "when": { + "key": "Type", + "value": 0 + } + } + ] + } }, { "index": 3, @@ -11125,16 +14846,39 @@ } ] }, + { + "sheet": "WeeklyLotBonus", + "definitions": [ + { + "type": "repeat", + "count": 31, + "definition": { + "name": "WeeklyLotBonusThreshold", + "converter": { + "type": "link", + "target": "WeeklyLotBonusThreshold" + } + } + } + ] + }, { "sheet": "World", "definitions": [ { - "index": 1, + "name": "Name" + }, + { + "index": 2, "name": "DataCenter", "converter": { "type": "link", "target": "WorldDCGroupType" } + }, + { + "index": 3, + "name": "IsPublic" } ] }, @@ -11226,4 +14970,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index d60b153b..3cad3b5f 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -45,8 +45,8 @@ std::vector< std::string > cppKeyWords "class" }; -//std::string datLocation( "/opt/sapphire_3_15_0/bin/sqpack" ); -std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" ); +std::string datLocation( "/home/mordred/sqpack" ); +//std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" ); std::map< uint8_t, std::string > g_typeMap; @@ -117,29 +117,57 @@ std::string generateStruct( const std::string& exd ) std::ifstream exJson( "ex.json" ); exJson >> json; - for( auto& definition : json["sheets"][exd] ) + for( auto& sheet : json[ "sheets" ] ) { - uint32_t index; - std::string converterTarget = ""; - bool isRepeat = false; - int num = 0; - - index = definition["index"].get< uint32_t >(); - indexToNameMap[ index ] = std::string( definition["name"] ); - - converterTarget = std::string( definition["converter"]["target"] ); - if( nameTaken.find( converterTarget ) != nameTaken.end() ) - indexToTarget[ index ] = converterTarget; - - if( auto count = definition["count"] ) + if( sheet[ "sheet" ] != exd ) + continue; + + for( auto& definition : sheet[ "definitions" ] ) { - num = std::stoi( std::string( count ) ); - isRepeat = true; - indexIsArrayMap[ index ] = true; - indexCountMap[ index ] = num; + uint32_t index; + std::string converterTarget = ""; + bool isRepeat = false; + int num = 0; + try + { + index = definition.at( "index" ); + } + catch( ... ) + { + index = 0; + } + + try + { + std::string fieldName = std::string( definition.at( "name" ) ); + indexToNameMap[ index ] = fieldName; + } + catch( ... ) + { + } - std::string fName = definition["definition"]["name"]; - indexToNameMap[ index ] = fName; + try + { + converterTarget = std::string( definition.at( "converter" ).at( "target" ) ); + if( nameTaken.find( converterTarget ) != nameTaken.end() ) + indexToTarget[ index ] = converterTarget; + } + catch( ... ) + { + } + + try + { + num = definition.at( "count" ); + isRepeat = true; + indexIsArrayMap[ index ] = true; + indexCountMap[ index ] = num; + std::string fName = definition.at( "definition" ).at( "name" ); + indexToNameMap[ index ] = fName; + } + catch( ... ) + { + } } @@ -213,7 +241,15 @@ std::string generateStruct( const std::string& exd ) count++; } - result += "\n " + exd + "( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );\n"; + auto exhHead = exh.get_header(); + if( exhHead.variant == 2 ) + { + result += "\n " + exd + "( uint32_t row_id, uint32_t subRow, Core::Data::ExdDataGenerated* exdData );\n"; + } + else + { + result += "\n " + exd + "( uint32_t row_id, Core::Data::ExdDataGenerated* exdData );\n"; + } result += "};\n\n"; return result; @@ -229,11 +265,20 @@ std::string generateConstructorsDecl( const std::string& exd ) int count = 0; - - result += "\nCore::Data::" + exd + "::" + exd + "( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )\n"; - result += "{\n"; std::string indent = " "; - result += indent + "auto row = exdData->m_" + exd + "Dat.get_row( row_id );\n"; + auto exhHead = exh.get_header(); + if( exhHead.variant == 2 ) + { + result += "\nCore::Data::" + exd + "::" + exd + "( uint32_t row_id, uint32_t subRow, Core::Data::ExdDataGenerated* exdData )\n"; + result += "{\n"; + result += indent + "auto row = exdData->m_" + exd + "Dat.get_row( row_id, subRow );\n"; + } + else + { + result += "\nCore::Data::" + exd + "::" + exd + "( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )\n"; + result += "{\n"; + result += indent + "auto row = exdData->m_" + exd + "Dat.get_row( row_id );\n"; + } for( auto member : exhMem ) { if( indexToNameMap.find( count ) == indexToNameMap.end() ) @@ -333,22 +378,20 @@ int main( int argc, char** argv ) //BOOST_FOREACH( boost::property_tree::ptree::value_type &sheet, m_propTree.get_child( "sheets" ) ) //{ - //std::string name = sheet.second.get< std::string >( "sheet" ); //nameTaken[name] = "1"; //} - - for( auto& sheet : json["sheets"] ) - { - std::string name = json["sheet"]; - - forwards += "struct " + name + ";\n"; - structDefs += generateStruct( name ); - dataDecl += generateDatAccessDecl( name ); - idListsDecl += generateIdListDecl( name ); - getterDecl += generateDirectGetters( name ); - datAccCall += generateSetDatAccessCall( name ); - constructorDecl += generateConstructorsDecl( name ); - idListGetters += generateIdListGetter( name ); + // + for( auto& sheet : json[ "sheets" ] ) + { + std::string name = sheet[ "sheet" ]; + forwards += "struct " + name + ";\n"; + structDefs += generateStruct( name ); + dataDecl += generateDatAccessDecl( name ); + idListsDecl += generateIdListDecl( name ); + getterDecl += generateDirectGetters( name ); + datAccCall += generateSetDatAccessCall( name ); + constructorDecl += generateConstructorsDecl( name ); + idListGetters += generateIdListGetter( name ); } getterDecl +=