1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-25 05:57:45 +00:00

Merge pull request #566 from NotAdam/develop

5.0 updates, the first of many to come
This commit is contained in:
Mordred 2019-06-30 18:22:31 +02:00 committed by GitHub
commit aa4e213103
14 changed files with 714 additions and 593 deletions

View file

@ -21,6 +21,9 @@ namespace Sapphire::Common
const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000;
const uint64_t INVALID_GAME_OBJECT_ID64 = 0xE0000000;
const uint16_t MAX_PLAYER_LEVEL = 80;
const uint8_t CURRENT_EXPANSION_ID = 3;
/*!
* @brief The maximum length (in ms) of a combo before it is canceled/voided.
*

View file

@ -6,8 +6,7 @@
/* This file has been automatically generated.
Changes will be lost upon regeneration.
To change the content edit tools/exd_common_gen */
namespace Sapphire {
namespace Common {
namespace Sapphire::Common {
///////////////////////////////////////////////////////////
//ActionCategory.exd
@ -173,6 +172,8 @@ enum class ClassJob : uint8_t
Samurai = 34,
Redmage = 35,
Bluemage = 36,
Gunbreaker = 37,
Dancer = 38,
};
///////////////////////////////////////////////////////////
@ -199,14 +200,10 @@ enum class ContentType : uint8_t
DisciplesoftheHand = 17,
RetainerVentures = 18,
GoldSaucer = 19,
one = 20,
DeepDungeons = 21,
two = 22,
three = 23,
WondrousTails = 24,
CustomDeliveries = 25,
Eureka = 26,
four = 27,
};
///////////////////////////////////////////////////////////
@ -217,7 +214,6 @@ enum class EmoteCategory : uint8_t
General = 1,
Special = 2,
Expressions = 3,
one = 4,
};
///////////////////////////////////////////////////////////
@ -227,7 +223,7 @@ enum class ExVersion : uint8_t
ARealmReborn = 0,
Heavensward = 1,
Stormblood = 2,
three = 3,
Shadowbringers = 3,
};
///////////////////////////////////////////////////////////
@ -369,6 +365,8 @@ enum class ItemUICategory : uint8_t
SubmersibleBow = 103,
SubmersibleBridge = 104,
BlueMagesArm = 105,
GunbreakersArm = 106,
DancersArm = 107,
};
///////////////////////////////////////////////////////////
@ -393,7 +391,7 @@ enum class ItemSearchCategory : uint8_t
ConjurersArms = 15,
ArcanistsArms = 16,
Shields = 17,
ThrowingWeapons = 18,
DancersArms = 18,
CarpentersTools = 19,
BlacksmithsTools = 20,
ArmorersTools = 21,
@ -454,13 +452,15 @@ enum class ItemSearchCategory : uint8_t
DarkKnightsArms = 76,
MachinistsArms = 77,
AstrologiansArms = 78,
Airship_SubmersibleComponents = 79,
AirshipSubmersibleComponents = 79,
OrchestrionComponents = 80,
GardeningItems = 81,
Paintings = 82,
SamuraisArms = 83,
RedMagesArms = 84,
ScholarsArms = 85,
GunbreakersArms = 86,
ThrowingWeapons = 87,
};
///////////////////////////////////////////////////////////
@ -527,6 +527,8 @@ enum class Race : uint8_t
Miqote = 4,
Roegadyn = 5,
AuRa = 6,
Hrothgar = 7,
Viera = 8,
};
///////////////////////////////////////////////////////////
@ -546,6 +548,10 @@ enum class Tribe : uint8_t
Hellsguard = 10,
Raen = 11,
Xaela = 12,
Helions = 13,
TheLost = 14,
Rava = 15,
Veena = 16,
};
///////////////////////////////////////////////////////////
@ -558,6 +564,7 @@ enum class Town : uint8_t
Uldah = 3,
Ishgard = 4,
Kugane = 7,
TheCrystarium = 10,
};
///////////////////////////////////////////////////////////
@ -680,7 +687,21 @@ enum class Weather : uint8_t
TrueBlue = 113,
TrueBlue1 = 114,
TrueBlue2 = 115,
UmbralTurbulence = 116,
TrueBlue3 = 117,
EverlastingLight = 118,
Gales2 = 119,
Termination = 120,
Termination1 = 121,
Dreams = 122,
Dreams1 = 123,
Dreams2 = 124,
Brilliance = 125,
Brilliance1 = 126,
Termination2 = 127,
Termination3 = 128,
EverlastingLight1 = 129,
Termination4 = 131,
};
///////////////////////////////////////////////////////////
@ -703,8 +724,12 @@ enum class HousingAppeal : uint8_t
Library = 14,
PhotoStudio = 15,
HauntedHouse = 16,
Atelier = 17,
Bathhouse = 18,
Garden = 19,
FarEastern = 20,
};
}
}
#endif

View file

@ -22,7 +22,7 @@ Sapphire::Data::Achievement::Achievement( uint32_t row_id, Sapphire::Data::ExdDa
data.push_back( exdData->getField< int32_t >( row, 16 ) );
data.push_back( exdData->getField< int32_t >( row, 17 ) );
order = exdData->getField< uint16_t >( row, 18 );
initialHide = exdData->getField< bool >( row, 20 );
initialHide = exdData->getField< uint8_t >( row, 20 );
}
Sapphire::Data::AchievementCategory::AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -71,16 +71,16 @@ Sapphire::Data::Action::Action( uint32_t row_id, Sapphire::Data::ExdDataGenerate
cast100ms = exdData->getField< uint16_t >( row, 37 );
recast100ms = exdData->getField< uint16_t >( row, 38 );
cooldownGroup = exdData->getField< uint8_t >( row, 39 );
attackType = exdData->getField< int8_t >( row, 40 );
aspect = exdData->getField< uint8_t >( row, 41 );
actionProcStatus = exdData->getField< uint8_t >( row, 42 );
statusGainSelf = exdData->getField< uint16_t >( row, 43 );
unlockLink = exdData->getField< uint32_t >( row, 44 );
classJobCategory = exdData->getField< uint8_t >( row, 45 );
affectsPosition = exdData->getField< bool >( row, 48 );
omen = exdData->getField< uint8_t >( row, 49 );
isPvP = exdData->getField< bool >( row, 50 );
isPlayerAction = exdData->getField< bool >( row, 62 );
attackType = exdData->getField< int8_t >( row, 42 );
aspect = exdData->getField< uint8_t >( row, 43 );
actionProcStatus = exdData->getField< uint8_t >( row, 44 );
statusGainSelf = exdData->getField< uint16_t >( row, 46 );
unlockLink = exdData->getField< uint32_t >( row, 47 );
classJobCategory = exdData->getField< uint8_t >( row, 48 );
affectsPosition = exdData->getField< bool >( row, 51 );
omen = exdData->getField< uint8_t >( row, 52 );
isPvP = exdData->getField< bool >( row, 53 );
isPlayerAction = exdData->getField< bool >( row, 65 );
}
Sapphire::Data::ActionCastTimeline::ActionCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -656,24 +656,22 @@ Sapphire::Data::BeastReputationRank::BeastReputationRank( uint32_t row_id, Sapph
Sapphire::Data::BeastTribe::BeastTribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_BeastTribeDat.get_row( row_id );
minLevel = exdData->getField< uint8_t >( row, 0 );
maxLevel = exdData->getField< uint8_t >( row, 1 );
minLevel = exdData->getField< uint8_t >( row, 1 );
beastRankBonus = exdData->getField< uint8_t >( row, 2 );
iconReputation = exdData->getField< uint32_t >( row, 3 );
icon = exdData->getField< uint32_t >( row, 4 );
maxRank = exdData->getField< uint8_t >( row, 5 );
alliedBeastTribeQuest = exdData->getField< uint32_t >( row, 6 );
expansion = exdData->getField< uint8_t >( row, 7 );
currencyItem = exdData->getField< uint32_t >( row, 8 );
displayOrder = exdData->getField< uint8_t >( row, 9 );
name = exdData->getField< std::string >( row, 10 );
nameRelation = exdData->getField< std::string >( row, 18 );
expansion = exdData->getField< uint8_t >( row, 6 );
currencyItem = exdData->getField< uint32_t >( row, 7 );
displayOrder = exdData->getField< uint8_t >( row, 8 );
name = exdData->getField< std::string >( row, 9 );
nameRelation = exdData->getField< std::string >( row, 17 );
}
Sapphire::Data::Behavior::Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_BehaviorDat.get_row( row_id, subRow );
balloon = exdData->getField< uint16_t >( row, 6 );
balloon = exdData->getField< uint16_t >( row, 7 );
}
Sapphire::Data::BGM::BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -968,8 +966,6 @@ Sapphire::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Sapphire::Data::E
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, 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 ) );
@ -1010,6 +1006,20 @@ Sapphire::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Sapphire::Data::E
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 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3333 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3334 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3335 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3336 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3337 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3338 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3339 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3340 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3341 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3342 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3343 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3344 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3345 ) );
facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3346 ) );
}
Sapphire::Data::ChocoboRace::ChocoboRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -1368,6 +1378,7 @@ Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id,
contentLinkType = exdData->getField< uint8_t >( row, 2 );
content = exdData->getField< uint16_t >( row, 3 );
contentMemberType = exdData->getField< uint8_t >( row, 9 );
unlockQuest = exdData->getField< uint32_t >( row, 13 );
classJobLevelRequired = exdData->getField< uint8_t >( row, 15 );
classJobLevelSync = exdData->getField< uint8_t >( row, 16 );
itemLevelRequired = exdData->getField< uint16_t >( row, 17 );
@ -1377,8 +1388,11 @@ Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id,
dutyRecorderAllowed = exdData->getField< bool >( row, 30 );
name = exdData->getField< std::string >( row, 34 );
contentType = exdData->getField< uint8_t >( row, 35 );
transientKey = exdData->getField< uint8_t >( row, 36 );
transient = exdData->getField< uint32_t >( row, 37 );
sortKey = exdData->getField< uint16_t >( row, 38 );
image = exdData->getField< uint32_t >( row, 39 );
icon = exdData->getField< uint32_t >( row, 40 );
levelingRoulette = exdData->getField< bool >( row, 42 );
level5060Roulette = exdData->getField< bool >( row, 43 );
mSQRoulette = exdData->getField< bool >( row, 44 );
@ -1475,12 +1489,14 @@ Sapphire::Data::ContentsNote::ContentsNote( uint32_t row_id, Sapphire::Data::Exd
{
auto row = exdData->m_ContentsNoteDat.get_row( row_id );
contentType = exdData->getField< uint8_t >( row, 0 );
icon = exdData->getField< int32_t >( row, 1 );
menuOrder = exdData->getField< uint8_t >( row, 2 );
requiredAmount = exdData->getField< int32_t >( row, 3 );
expMultiplier = exdData->getField< int32_t >( row, 5 );
gilRward = exdData->getField< int32_t >( row, 7 );
levelUnlock = exdData->getField< uint16_t >( row, 8 );
howTo = exdData->getField< uint16_t >( row, 9 );
reqUnlock = exdData->getField< uint32_t >( row, 10 );
name = exdData->getField< std::string >( row, 11 );
description = exdData->getField< std::string >( row, 12 );
expCap = exdData->getField< int32_t >( row, 13 );
@ -2067,6 +2083,21 @@ Sapphire::Data::ENpcDressUpDress::ENpcDressUpDress( uint32_t row_id, uint32_t su
{
auto row = exdData->m_ENpcDressUpDressDat.get_row( row_id, subRow );
eNpc = exdData->getField< uint32_t >( row, 6 );
behavior = exdData->getField< uint16_t >( row, 8 );
modelMainHand = exdData->getField< uint64_t >( row, 35 );
dyeMainHand = exdData->getField< uint8_t >( row, 36 );
modelOffHand = exdData->getField< uint64_t >( row, 37 );
dyeOffHand = exdData->getField< uint8_t >( row, 38 );
modelHead = exdData->getField< uint32_t >( row, 39 );
dyeHead = exdData->getField< uint8_t >( row, 40 );
modelBody = exdData->getField< uint32_t >( row, 41 );
dyeBody = exdData->getField< uint8_t >( row, 42 );
modelHands = exdData->getField< uint32_t >( row, 43 );
dyeHands = exdData->getField< uint8_t >( row, 44 );
modelLegs = exdData->getField< uint32_t >( row, 45 );
dyeLegs = exdData->getField< uint8_t >( row, 46 );
modelFeet = exdData->getField< uint32_t >( row, 47 );
dyeFeet = exdData->getField< uint8_t >( row, 48 );
}
Sapphire::Data::ENpcResident::ENpcResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2111,8 +2142,8 @@ Sapphire::Data::EquipRaceCategory::EquipRaceCategory( uint32_t row_id, Sapphire:
miqote = exdData->getField< bool >( row, 3 );
roegadyn = exdData->getField< bool >( row, 4 );
auRa = exdData->getField< bool >( row, 5 );
male = exdData->getField< bool >( row, 6 );
female = exdData->getField< bool >( row, 7 );
male = exdData->getField< bool >( row, 8 );
female = exdData->getField< bool >( row, 9 );
}
Sapphire::Data::EquipSlotCategory::EquipSlotCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2290,17 +2321,17 @@ Sapphire::Data::Fate::Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* e
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 );
hasWorldMapIcon = exdData->getField< bool >( row, 19 );
name = exdData->getField< std::string >( row, 27 );
description = exdData->getField< std::string >( row, 28 );
objective = exdData->getField< std::string >( row, 29 );
iconObjective = exdData->getField< uint32_t >( row, 9 );
iconMap = exdData->getField< uint32_t >( row, 10 );
music = exdData->getField< int32_t >( row, 12 );
hasWorldMapIcon = exdData->getField< bool >( row, 17 );
name = exdData->getField< std::string >( row, 25 );
description = exdData->getField< std::string >( row, 26 );
objective = exdData->getField< std::string >( row, 27 );
statusText.push_back( exdData->getField< std::string >( row, 28 ) );
statusText.push_back( 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 );
arrayIndex = exdData->getField< uint32_t >( row, 31 );
}
Sapphire::Data::FCActivity::FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2387,6 +2418,10 @@ Sapphire::Data::FishingRecordType::FishingRecordType( uint32_t row_id, Sapphire:
{
auto row = exdData->m_FishingRecordTypeDat.get_row( row_id );
addon = exdData->getField< int32_t >( row, 0 );
rankBRequirement = exdData->getField< uint16_t >( row, 1 );
rankARequirement = exdData->getField< uint16_t >( row, 2 );
rankAARequirement = exdData->getField< uint16_t >( row, 3 );
rankAAARequirement = exdData->getField< uint16_t >( row, 4 );
}
Sapphire::Data::FishingRecordTypeTransient::FishingRecordTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2417,6 +2452,7 @@ Sapphire::Data::FishingSpot::FishingSpot( uint32_t row_id, Sapphire::Data::ExdDa
item.push_back( exdData->getField< int32_t >( row, 18 ) );
item.push_back( exdData->getField< int32_t >( row, 19 ) );
placeName = exdData->getField< uint16_t >( row, 20 );
order = exdData->getField< uint8_t >( row, 21 );
}
Sapphire::Data::FishParameter::FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2428,10 +2464,10 @@ Sapphire::Data::FishParameter::FishParameter( uint32_t row_id, Sapphire::Data::E
isHidden = exdData->getField< bool >( row, 3 );
fishingRecordType = exdData->getField< uint8_t >( row, 5 );
territoryType = exdData->getField< int32_t >( row, 6 );
isInLog = exdData->getField< bool >( row, 7 );
timeRestricted = exdData->getField< bool >( row, 8 );
weatherRestricted = exdData->getField< bool >( row, 9 );
gatheringSubCategory = exdData->getField< uint16_t >( row, 10 );
gatheringSubCategory = exdData->getField< uint16_t >( row, 7 );
isInLog = exdData->getField< bool >( row, 8 );
timeRestricted = exdData->getField< bool >( row, 9 );
weatherRestricted = exdData->getField< bool >( row, 10 );
}
Sapphire::Data::Frontline03::Frontline03( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2510,7 +2546,7 @@ Sapphire::Data::GatheringItem::GatheringItem( uint32_t row_id, Sapphire::Data::E
auto row = exdData->m_GatheringItemDat.get_row( row_id );
item = exdData->getField< int32_t >( row, 0 );
gatheringItemLevel = exdData->getField< uint16_t >( row, 1 );
isHidden = exdData->getField< bool >( row, 2 );
isHidden = exdData->getField< bool >( row, 3 );
}
Sapphire::Data::GatheringItemLevelConvertTable::GatheringItemLevelConvertTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -2951,12 +2987,8 @@ Sapphire::Data::GilShop::GilShop( uint32_t row_id, Sapphire::Data::ExdDataGenera
auto row = exdData->m_GilShopDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 );
icon = exdData->getField< uint32_t >( row, 1 );
questRequired.push_back( exdData->getField< uint32_t >( row, 2 ) );
questRequired.push_back( exdData->getField< uint32_t >( row, 3 ) );
questRequired.push_back( exdData->getField< uint32_t >( row, 4 ) );
questRequired.push_back( exdData->getField< uint32_t >( row, 5 ) );
acceptTalk = exdData->getField< int32_t >( row, 6 );
failTalk = exdData->getField< int32_t >( row, 7 );
acceptTalk = exdData->getField< int32_t >( row, 3 );
failTalk = exdData->getField< int32_t >( row, 4 );
}
Sapphire::Data::GilShopItem::GilShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData )
@ -3036,6 +3068,20 @@ Sapphire::Data::GuildleveAssignmentCategory::GuildleveAssignmentCategory( uint32
category.push_back( exdData->getField< int32_t >( row, 7 ) );
}
Sapphire::Data::GuildOrder::GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_GuildOrderDat.get_row( row_id );
eNpcName = exdData->getField< uint32_t >( row, 0 );
objective = exdData->getField< std::string >( row, 1 );
description1 = exdData->getField< std::string >( row, 2 );
description2 = exdData->getField< std::string >( row, 3 );
description3 = exdData->getField< std::string >( row, 4 );
completionBonusExp = exdData->getField< uint32_t >( row, 5 );
rewardExp = exdData->getField< uint32_t >( row, 6 );
completionBonusGil = exdData->getField< uint32_t >( row, 7 );
rewardGil = exdData->getField< uint32_t >( row, 8 );
}
Sapphire::Data::GuildOrderGuide::GuildOrderGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_GuildOrderGuideDat.get_row( row_id );
@ -3236,66 +3282,66 @@ Sapphire::Data::HousingLandSet::HousingLandSet( uint32_t row_id, Sapphire::Data:
minPrice.push_back( exdData->getField< uint32_t >( row, 117 ) );
minPrice.push_back( exdData->getField< uint32_t >( row, 118 ) );
minPrice.push_back( exdData->getField< uint32_t >( row, 119 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 300 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 301 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 302 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 303 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 304 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 305 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 306 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 307 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 308 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 309 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 310 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 311 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 312 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 313 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 314 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 315 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 316 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 317 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 318 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 319 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 320 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 321 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 322 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 323 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 324 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 325 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 326 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 327 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 328 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 329 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 330 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 331 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 332 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 333 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 334 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 335 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 336 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 337 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 338 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 339 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 340 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 341 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 342 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 343 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 344 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 345 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 346 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 347 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 348 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 349 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 350 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 351 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 352 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 353 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 354 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 355 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 356 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 357 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 358 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 359 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 240 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 241 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 242 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 243 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 244 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 245 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 246 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 247 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 248 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 249 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 250 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 251 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 252 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 253 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 254 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 255 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 256 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 257 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 258 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 259 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 260 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 261 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 262 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 263 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 264 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 265 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 266 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 267 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 268 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 269 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 270 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 271 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 272 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 273 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 274 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 275 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 276 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 277 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 278 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 279 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 280 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 281 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 282 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 283 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 284 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 285 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 286 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 287 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 288 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 289 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 290 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 291 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 292 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 293 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 294 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 295 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 296 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 297 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 298 ) );
initialPrice.push_back( exdData->getField< uint32_t >( row, 299 ) );
}
Sapphire::Data::HousingMapMarkerInfo::HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData )
@ -3418,13 +3464,15 @@ Sapphire::Data::InstanceContent::InstanceContent( uint32_t row_id, Sapphire::Dat
instanceContentTextDataObjectiveStart = exdData->getField< uint32_t >( row, 15 );
instanceContentTextDataObjectiveEnd = exdData->getField< uint32_t >( row, 16 );
sortKey = exdData->getField< uint16_t >( row, 17 );
instanceClearExp = exdData->getField< uint32_t >( row, 18 );
newPlayerBonusA = exdData->getField< uint16_t >( row, 20 );
newPlayerBonusB = exdData->getField< uint16_t >( row, 21 );
finalBossExp = exdData->getField< uint32_t >( row, 22 );
finalBossCurrencyC = exdData->getField< uint16_t >( row, 21 );
finalBossCurrencyA = exdData->getField< uint16_t >( row, 23 );
finalBossCurrencyB = exdData->getField< uint16_t >( row, 24 );
finalBossCurrencyC = exdData->getField< uint16_t >( row, 25 );
instanceClearExp = exdData->getField< uint32_t >( row, 46 );
newPlayerBonusB = exdData->getField< uint16_t >( row, 25 );
instanceClearGil = exdData->getField< uint32_t >( row, 47 );
instanceContentRewardItem = exdData->getField< uint32_t >( row, 48 );
finalBossExp = exdData->getField< uint32_t >( row, 50 );
instanceContentBuff = exdData->getField< int32_t >( row, 51 );
reqInstance = exdData->getField< uint32_t >( row, 52 );
partyCondition = exdData->getField< uint8_t >( row, 54 );
@ -3676,7 +3724,7 @@ Sapphire::Data::JournalGenre::JournalGenre( uint32_t row_id, Sapphire::Data::Exd
auto row = exdData->m_JournalGenreDat.get_row( row_id );
icon = exdData->getField< int32_t >( row, 0 );
journalCategory = exdData->getField< uint8_t >( row, 1 );
name = exdData->getField< std::string >( row, 2 );
name = exdData->getField< std::string >( row, 3 );
}
Sapphire::Data::JournalSection::JournalSection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -3900,7 +3948,7 @@ Sapphire::Data::MapMarker::MapMarker( uint32_t row_id, uint32_t subRow, Sapphire
Sapphire::Data::MapMarkerRegion::MapMarkerRegion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_MapMarkerRegionDat.get_row( row_id );
x = exdData->getField< int16_t >( row, 0 );
x = exdData->getField< int16_t >( row, 1 );
}
Sapphire::Data::MapSymbol::MapSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -4021,8 +4069,7 @@ Sapphire::Data::ModelSkeleton::ModelSkeleton( uint32_t row_id, Sapphire::Data::E
Sapphire::Data::ModelState::ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_ModelStateDat.get_row( row_id );
start = exdData->getField< uint16_t >( row, 0 );
end = exdData->getField< uint16_t >( row, 1 );
start = exdData->getField< uint16_t >( row, 1 );
}
Sapphire::Data::MonsterNote::MonsterNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -4085,30 +4132,18 @@ Sapphire::Data::MountAction::MountAction( uint32_t row_id, Sapphire::Data::ExdDa
Sapphire::Data::MountCustomize::MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_MountCustomizeDat.get_row( row_id );
hyurMaleScale = exdData->getField< float >( row, 1 );
hyurFemaleScale = exdData->getField< float >( row, 2 );
elezenMaleScale = exdData->getField< float >( row, 3 );
elezenFemaleScale = exdData->getField< float >( row, 4 );
lalaMaleScale = exdData->getField< float >( row, 5 );
lalaFemaleScale = exdData->getField< float >( row, 6 );
miqoMaleScale = exdData->getField< float >( row, 7 );
miqoFemaleScale = exdData->getField< float >( row, 8 );
roeMaleScale = exdData->getField< float >( row, 9 );
roeFemaleScale = exdData->getField< float >( row, 10 );
auRaMaleScale = exdData->getField< float >( row, 11 );
auRaFemaleScale = exdData->getField< float >( row, 12 );
hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 13 );
hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 14 );
elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 15 );
elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 16 );
lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 17 );
lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 );
miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 19 );
miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 20 );
roeMaleCameraHeight = exdData->getField< uint8_t >( row, 21 );
roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 );
auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 23 );
auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 );
hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 17 );
hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 );
elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 21 );
elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 );
lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 23 );
lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 );
miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 25 );
miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 26 );
roeMaleCameraHeight = exdData->getField< uint8_t >( row, 27 );
roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 28 );
auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 29 );
auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 30 );
}
Sapphire::Data::MountFlyingCondition::MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -4431,40 +4466,41 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
classJobCategory0 = exdData->getField< uint8_t >( row, 3 );
classJobLevel0 = exdData->getField< uint16_t >( row, 4 );
questLevelOffset = exdData->getField< uint8_t >( row, 5 );
levelMax = exdData->getField< uint16_t >( row, 6 );
classJobCategory1 = exdData->getField< uint8_t >( row, 7 );
classJobLevel1 = exdData->getField< uint16_t >( row, 8 );
previousQuestJoin = exdData->getField< uint8_t >( row, 9 );
previousQuest0 = exdData->getField< uint32_t >( row, 10 );
previousQuest1 = exdData->getField< uint32_t >( row, 12 );
previousQuest2 = exdData->getField< uint32_t >( row, 13 );
questLockJoin = exdData->getField< uint8_t >( row, 14 );
classJobCategory1 = exdData->getField< uint8_t >( row, 6 );
classJobLevel1 = exdData->getField< uint16_t >( row, 7 );
previousQuestJoin = exdData->getField< uint8_t >( row, 8 );
previousQuest0 = exdData->getField< uint32_t >( row, 9 );
previousQuest1 = exdData->getField< uint32_t >( row, 11 );
previousQuest2 = exdData->getField< uint32_t >( row, 12 );
questLockJoin = exdData->getField< uint8_t >( row, 13 );
questLock.push_back( exdData->getField< uint32_t >( row, 14 ) );
questLock.push_back( exdData->getField< uint32_t >( row, 15 ) );
questLock.push_back( exdData->getField< uint32_t >( row, 16 ) );
classJobUnlock = exdData->getField< uint8_t >( row, 20 );
grandCompany = exdData->getField< uint8_t >( row, 21 );
grandCompanyRank = exdData->getField< uint8_t >( row, 22 );
instanceContentJoin = exdData->getField< uint8_t >( row, 23 );
classJobUnlock = exdData->getField< uint8_t >( row, 19 );
grandCompany = exdData->getField< uint8_t >( row, 20 );
grandCompanyRank = exdData->getField< uint8_t >( row, 21 );
instanceContentJoin = exdData->getField< uint8_t >( row, 22 );
instanceContent.push_back( exdData->getField< uint32_t >( row, 23 ) );
instanceContent.push_back( exdData->getField< uint32_t >( row, 24 ) );
instanceContent.push_back( exdData->getField< uint32_t >( row, 25 ) );
instanceContent.push_back( exdData->getField< uint32_t >( row, 26 ) );
festival = exdData->getField< uint8_t >( row, 27 );
bellStart = exdData->getField< uint16_t >( row, 30 );
bellEnd = exdData->getField< uint16_t >( row, 31 );
beastTribe = exdData->getField< uint8_t >( row, 32 );
beastReputationRank = exdData->getField< uint8_t >( row, 33 );
mountRequired = exdData->getField< int32_t >( row, 37 );
isHouseRequired = exdData->getField< bool >( row, 38 );
deliveryQuest = exdData->getField< uint8_t >( row, 39 );
issuerStart = exdData->getField< uint32_t >( row, 40 );
behavior = exdData->getField< uint16_t >( row, 41 );
targetEnd = exdData->getField< uint32_t >( row, 42 );
isRepeatable = exdData->getField< bool >( row, 43 );
repeatIntervalType = exdData->getField< uint8_t >( row, 44 );
questRepeatFlag = exdData->getField< uint8_t >( row, 45 );
unlocksSystemContent = exdData->getField< bool >( row, 46 );
type = exdData->getField< uint8_t >( row, 48 );
questClassJobSupply = exdData->getField< uint16_t >( row, 49 );
festival = exdData->getField< uint8_t >( row, 26 );
bellStart = exdData->getField< uint16_t >( row, 29 );
bellEnd = exdData->getField< uint16_t >( row, 30 );
beastTribe = exdData->getField< uint8_t >( row, 31 );
beastReputationRank = exdData->getField< uint8_t >( row, 32 );
levelMax = exdData->getField< uint16_t >( row, 33 );
mountRequired = exdData->getField< int32_t >( row, 36 );
isHouseRequired = exdData->getField< bool >( row, 37 );
deliveryQuest = exdData->getField< uint8_t >( row, 38 );
issuerStart = exdData->getField< uint32_t >( row, 39 );
behavior = exdData->getField< uint16_t >( row, 40 );
targetEnd = exdData->getField< uint32_t >( row, 41 );
isRepeatable = exdData->getField< bool >( row, 42 );
repeatIntervalType = exdData->getField< uint8_t >( row, 43 );
questRepeatFlag = exdData->getField< uint8_t >( row, 44 );
unlocksSystemContent = exdData->getField< bool >( row, 45 );
type = exdData->getField< uint8_t >( row, 47 );
questClassJobSupply = exdData->getField< uint16_t >( row, 48 );
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 ) );
@ -4514,7 +4550,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
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 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) );
scriptArg.push_back( exdData->getField< uint32_t >( 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 ) );
@ -4564,7 +4600,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
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 ) );
scriptArg.push_back( exdData->getField< uint32_t >( row, 149 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 149 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 150 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 151 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 152 ) );
@ -4628,7 +4664,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 210 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 211 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 212 ) );
actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 214 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 215 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 216 ) );
@ -4692,7 +4728,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 274 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 275 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 276 ) );
actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 277 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 277 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 278 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 279 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 280 ) );
@ -4756,7 +4792,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
actorSpawn.push_back( exdData->getField< uint32_t >( row, 338 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 339 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 340 ) );
actorSpawn.push_back( exdData->getField< uint32_t >( row, 341 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 341 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 342 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 343 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 344 ) );
@ -4788,7 +4824,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
questUInt8A.push_back( exdData->getField< uint8_t >( row, 370 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 371 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 372 ) );
questUInt8A.push_back( exdData->getField< uint8_t >( row, 373 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 373 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 374 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 375 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 376 ) );
@ -4820,7 +4856,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
questUInt8B.push_back( exdData->getField< uint8_t >( row, 402 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 403 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 404 ) );
questUInt8B.push_back( exdData->getField< uint8_t >( row, 405 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1173 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1174 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1175 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1176 ) );
@ -4844,7 +4880,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1194 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1195 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1196 ) );
toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1197 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1197 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1198 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1199 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1200 ) );
@ -4868,7 +4904,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
toDoQty.push_back( exdData->getField< uint8_t >( row, 1218 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1219 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1220 ) );
toDoQty.push_back( exdData->getField< uint8_t >( row, 1221 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1221 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1222 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1223 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1224 ) );
@ -4892,7 +4928,6 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated*
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1242 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1243 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1244 ) );
toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1245 ) );
classJobRequired = exdData->getField< uint8_t >( row, 1438 );
expFactor = exdData->getField< uint16_t >( row, 1440 );
gilReward = exdData->getField< uint32_t >( row, 1441 );
@ -5115,56 +5150,56 @@ Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDa
scriptInstruction.push_back( exdData->getField< std::string >( row, 151 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 152 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 153 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 154 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 155 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 156 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 157 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 158 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 159 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 160 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 161 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 162 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 163 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 164 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 165 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 166 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 167 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 168 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 169 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 170 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 171 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 172 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 173 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 174 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 175 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 176 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 177 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 178 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 179 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 180 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 181 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 182 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 183 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 184 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 185 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 186 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 187 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 188 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 189 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 190 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 191 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 192 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 193 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 194 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 195 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 196 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 197 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 198 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 199 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 200 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 201 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 202 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 203 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 154 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 155 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 156 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 157 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 158 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 159 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 160 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 161 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 162 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 163 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 164 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 165 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 166 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 167 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 168 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 169 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 170 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 171 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 172 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 173 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 174 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 175 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 176 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 177 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 178 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 179 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 180 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 181 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 182 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 183 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 184 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 185 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 186 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 187 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 188 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 189 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 190 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 191 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 192 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 193 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 194 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 195 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 196 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 197 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 198 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 199 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 200 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 201 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 202 ) );
scriptInstruction.push_back( exdData->getField< std::string >( row, 203 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 204 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 205 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 206 ) );
@ -5265,6 +5300,106 @@ Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDa
scriptValue.push_back( exdData->getField< uint32_t >( row, 301 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 302 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 303 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 304 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 305 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 306 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 307 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 308 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 309 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 310 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 311 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 312 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 313 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 314 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 315 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 316 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 317 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 318 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 319 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 320 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 321 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 322 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 323 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 324 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 325 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 326 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 327 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 328 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 329 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 330 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 331 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 332 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 333 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 334 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 335 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 336 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 337 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 338 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 339 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 340 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 341 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 342 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 343 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 344 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 345 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 346 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 347 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 348 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 349 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 350 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 351 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 352 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 353 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 354 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 355 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 356 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 357 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 358 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 359 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 360 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 361 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 362 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 363 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 364 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 365 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 366 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 367 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 368 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 369 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 370 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 371 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 372 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 373 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 374 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 375 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 376 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 377 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 378 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 379 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 380 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 381 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 382 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 383 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 384 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 385 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 386 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 387 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 388 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 389 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 390 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 391 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 392 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 393 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 394 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 395 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 396 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 397 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 398 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 399 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 400 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 401 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 402 ) );
scriptValue.push_back( exdData->getField< uint32_t >( row, 403 ) );
}
Sapphire::Data::QuestClassJobReward::QuestClassJobReward( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData )
@ -5400,8 +5535,7 @@ Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerate
recipeLevelTable = exdData->getField< uint16_t >( row, 2 );
itemResult = exdData->getField< int32_t >( row, 3 );
amountResult = exdData->getField< uint8_t >( row, 4 );
recipeElement = exdData->getField< uint8_t >( row, 25 );
isSecondary = exdData->getField< bool >( row, 27 );
isSecondary = exdData->getField< bool >( row, 26 );
difficultyFactor = exdData->getField< uint16_t >( row, 28 );
qualityFactor = exdData->getField< uint16_t >( row, 29 );
durabilityFactor = exdData->getField< uint16_t >( row, 30 );
@ -5419,21 +5553,15 @@ Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerate
patchNumber = exdData->getField< uint16_t >( row, 44 );
}
Sapphire::Data::RecipeElement::RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_RecipeElementDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 );
}
Sapphire::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
{
auto row = exdData->m_RecipeLevelTableDat.get_row( row_id );
classJobLevel = exdData->getField< uint8_t >( row, 0 );
stars = exdData->getField< uint8_t >( row, 1 );
suggestedCraftsmanship = exdData->getField< uint16_t >( row, 2 );
difficulty = exdData->getField< uint16_t >( row, 3 );
quality = exdData->getField< int16_t >( row, 4 );
durability = exdData->getField< uint16_t >( row, 5 );
difficulty = exdData->getField< uint16_t >( row, 4 );
quality = exdData->getField< uint32_t >( row, 5 );
durability = exdData->getField< uint16_t >( row, 6 );
}
Sapphire::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -6131,9 +6259,8 @@ Sapphire::Data::SpecialShop::SpecialShop( uint32_t row_id, Sapphire::Data::ExdDa
patchNumber.push_back( exdData->getField< uint16_t >( row, 1859 ) );
patchNumber.push_back( exdData->getField< uint16_t >( row, 1860 ) );
questUnlock = exdData->getField< uint32_t >( row, 1862 );
questShop = exdData->getField< int32_t >( row, 1863 );
notCompleteText = exdData->getField< int32_t >( row, 1864 );
completeText = exdData->getField< int32_t >( row, 1865 );
notCompleteText = exdData->getField< int32_t >( row, 1863 );
completeText = exdData->getField< int32_t >( row, 1864 );
}
Sapphire::Data::SpecialShopItemCategory::SpecialShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -6164,18 +6291,18 @@ Sapphire::Data::Status::Status( uint32_t row_id, Sapphire::Data::ExdDataGenerate
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 );
isFcBuff = exdData->getField< bool >( row, 21 );
invisibility = exdData->getField< bool >( row, 22 );
category = exdData->getField< uint8_t >( row, 5 );
hitEffect = exdData->getField< uint8_t >( row, 6 );
vFX = exdData->getField< uint8_t >( row, 7 );
lockMovement = exdData->getField< bool >( row, 8 );
lockActions = exdData->getField< bool >( row, 10 );
lockControl = exdData->getField< bool >( row, 11 );
transfiguration = exdData->getField< bool >( row, 12 );
canDispel = exdData->getField< bool >( row, 14 );
inflictedByActor = exdData->getField< bool >( row, 15 );
isPermanent = exdData->getField< bool >( row, 16 );
isFcBuff = exdData->getField< bool >( row, 24 );
invisibility = exdData->getField< bool >( row, 25 );
}
Sapphire::Data::StatusHitEffect::StatusHitEffect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -6202,11 +6329,11 @@ Sapphire::Data::SubmarineExploration::SubmarineExploration( uint32_t row_id, Sap
auto row = exdData->m_SubmarineExplorationDat.get_row( row_id );
destination = exdData->getField< std::string >( row, 0 );
location = exdData->getField< std::string >( row, 1 );
rankReq = exdData->getField< uint8_t >( row, 5 );
ceruleumTankReq = exdData->getField< uint8_t >( row, 6 );
durationmin = exdData->getField< uint16_t >( row, 7 );
distanceForSurvey = exdData->getField< uint8_t >( row, 8 );
expReward = exdData->getField< uint32_t >( row, 9 );
rankReq = exdData->getField< uint8_t >( row, 8 );
ceruleumTankReq = exdData->getField< uint8_t >( row, 9 );
durationmin = exdData->getField< uint16_t >( row, 10 );
distanceForSurvey = exdData->getField< uint8_t >( row, 11 );
expReward = exdData->getField< uint32_t >( row, 12 );
}
Sapphire::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -6363,20 +6490,20 @@ Sapphire::Data::Transformation::Transformation( uint32_t row_id, Sapphire::Data:
bNpcName = exdData->getField< uint16_t >( row, 2 );
bNpcCustomize = exdData->getField< int32_t >( row, 3 );
npcEquip = exdData->getField< int32_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 ) );
action.push_back( exdData->getField< uint16_t >( row, 10 ) );
speed = exdData->getField< float >( row, 13 );
scale = exdData->getField< float >( row, 14 );
isPvP = exdData->getField< bool >( row, 15 );
isEvent = exdData->getField< bool >( row, 16 );
playerCamera = exdData->getField< bool >( row, 17 );
startVFX = exdData->getField< uint16_t >( row, 18 );
endVFX = exdData->getField< uint16_t >( row, 19 );
rPParameter = exdData->getField< uint8_t >( row, 23 );
action.push_back( exdData->getField< uint16_t >( row, 11 ) );
action.push_back( exdData->getField< uint16_t >( row, 12 ) );
action.push_back( exdData->getField< uint16_t >( row, 13 ) );
action.push_back( exdData->getField< uint16_t >( row, 14 ) );
action.push_back( exdData->getField< uint16_t >( row, 15 ) );
rPParameter = exdData->getField< uint8_t >( row, 18 );
speed = exdData->getField< float >( row, 19 );
scale = exdData->getField< float >( row, 20 );
isPvP = exdData->getField< bool >( row, 21 );
isEvent = exdData->getField< bool >( row, 22 );
playerCamera = exdData->getField< bool >( row, 23 );
startVFX = exdData->getField< uint16_t >( row, 24 );
endVFX = exdData->getField< uint16_t >( row, 25 );
}
Sapphire::Data::Treasure::Treasure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData )
@ -7003,6 +7130,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path )
m_GuardianDeityDat = setupDatAccess( "GuardianDeity", xiv::exd::Language::en );
m_GuildleveAssignmentDat = setupDatAccess( "GuildleveAssignment", xiv::exd::Language::none );
m_GuildleveAssignmentCategoryDat = setupDatAccess( "GuildleveAssignmentCategory", xiv::exd::Language::none );
m_GuildOrderDat = setupDatAccess( "GuildOrder", xiv::exd::Language::en );
m_GuildOrderGuideDat = setupDatAccess( "GuildOrderGuide", xiv::exd::Language::none );
m_GuildOrderOfficerDat = setupDatAccess( "GuildOrderOfficer", xiv::exd::Language::none );
m_HairMakeTypeDat = setupDatAccess( "HairMakeType", xiv::exd::Language::none );
@ -7130,7 +7258,6 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path )
m_RacingChocoboParamDat = setupDatAccess( "RacingChocoboParam", xiv::exd::Language::en );
m_RecastNavimeshDat = setupDatAccess( "RecastNavimesh", xiv::exd::Language::none );
m_RecipeDat = setupDatAccess( "Recipe", xiv::exd::Language::none );
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 );

View file

@ -278,6 +278,7 @@ struct GrandCompanyRank;
struct GuardianDeity;
struct GuildleveAssignment;
struct GuildleveAssignmentCategory;
struct GuildOrder;
struct GuildOrderGuide;
struct GuildOrderOfficer;
struct HairMakeType;
@ -405,7 +406,6 @@ struct RacingChocoboNameInfo;
struct RacingChocoboParam;
struct RecastNavimesh;
struct Recipe;
struct RecipeElement;
struct RecipeLevelTable;
struct RecipeNotebookList;
struct RecommendContents;
@ -511,7 +511,7 @@ struct Achievement
int32_t key;
std::vector< int32_t > data;
uint16_t order;
bool initialHide;
uint8_t initialHide;
Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -1111,12 +1111,10 @@ struct BeastReputationRank
struct BeastTribe
{
uint8_t minLevel;
uint8_t maxLevel;
uint8_t beastRankBonus;
uint32_t iconReputation;
uint32_t icon;
uint8_t maxRank;
uint32_t alliedBeastTribeQuest;
uint8_t expansion;
uint32_t currencyItem;
uint8_t displayOrder;
@ -1734,6 +1732,7 @@ struct ContentFinderCondition
uint8_t contentLinkType;
uint16_t content;
uint8_t contentMemberType;
uint32_t unlockQuest;
uint8_t classJobLevelRequired;
uint8_t classJobLevelSync;
uint16_t itemLevelRequired;
@ -1743,8 +1742,11 @@ struct ContentFinderCondition
bool dutyRecorderAllowed;
std::string name;
uint8_t contentType;
uint8_t transientKey;
uint32_t transient;
uint16_t sortKey;
uint32_t image;
uint32_t icon;
bool levelingRoulette;
bool level5060Roulette;
bool mSQRoulette;
@ -1843,12 +1845,14 @@ struct ContentRouletteRoleBonus
struct ContentsNote
{
uint8_t contentType;
int32_t icon;
uint8_t menuOrder;
int32_t requiredAmount;
int32_t expMultiplier;
int32_t gilRward;
uint16_t levelUnlock;
uint16_t howTo;
uint32_t reqUnlock;
std::string name;
std::string description;
int32_t expCap;
@ -2351,6 +2355,21 @@ struct ENpcDressUp
struct ENpcDressUpDress
{
uint32_t eNpc;
uint16_t behavior;
uint64_t modelMainHand;
uint8_t dyeMainHand;
uint64_t modelOffHand;
uint8_t dyeOffHand;
uint32_t modelHead;
uint8_t dyeHead;
uint32_t modelBody;
uint8_t dyeBody;
uint32_t modelHands;
uint8_t dyeHands;
uint32_t modelLegs;
uint8_t dyeLegs;
uint32_t modelFeet;
uint8_t dyeFeet;
ENpcDressUpDress( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2688,6 +2707,10 @@ struct FieldMarker
struct FishingRecordType
{
int32_t addon;
uint16_t rankBRequirement;
uint16_t rankARequirement;
uint16_t rankAARequirement;
uint16_t rankAAARequirement;
FishingRecordType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2711,6 +2734,7 @@ struct FishingSpot
uint16_t radius;
std::vector< int32_t > item;
uint16_t placeName;
uint8_t order;
FishingSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -2723,10 +2747,10 @@ struct FishParameter
bool isHidden;
uint8_t fishingRecordType;
int32_t territoryType;
uint16_t gatheringSubCategory;
bool isInLog;
bool timeRestricted;
bool weatherRestricted;
uint16_t gatheringSubCategory;
FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -3133,7 +3157,6 @@ struct GilShop
{
std::string name;
uint32_t icon;
std::vector< uint32_t > questRequired;
int32_t acceptTalk;
int32_t failTalk;
@ -3215,6 +3238,21 @@ struct GuildleveAssignmentCategory
GuildleveAssignmentCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct GuildOrder
{
uint32_t eNpcName;
std::string objective;
std::string description1;
std::string description2;
std::string description3;
uint32_t completionBonusExp;
uint32_t rewardExp;
uint32_t completionBonusGil;
uint32_t rewardGil;
GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct GuildOrderGuide
{
@ -3422,13 +3460,15 @@ struct InstanceContent
uint32_t instanceContentTextDataObjectiveStart;
uint32_t instanceContentTextDataObjectiveEnd;
uint16_t sortKey;
uint32_t instanceClearExp;
uint16_t newPlayerBonusA;
uint16_t newPlayerBonusB;
uint32_t finalBossExp;
uint16_t finalBossCurrencyC;
uint16_t finalBossCurrencyA;
uint16_t finalBossCurrencyB;
uint16_t finalBossCurrencyC;
uint32_t instanceClearExp;
uint16_t newPlayerBonusB;
uint32_t instanceClearGil;
uint32_t instanceContentRewardItem;
uint32_t finalBossExp;
int32_t instanceContentBuff;
uint32_t reqInstance;
uint8_t partyCondition;
@ -4004,7 +4044,6 @@ struct ModelSkeleton
struct ModelState
{
uint16_t start;
uint16_t end;
ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -4061,18 +4100,6 @@ struct MountAction
struct MountCustomize
{
float hyurMaleScale;
float hyurFemaleScale;
float elezenMaleScale;
float elezenFemaleScale;
float lalaMaleScale;
float lalaFemaleScale;
float miqoMaleScale;
float miqoFemaleScale;
float roeMaleScale;
float roeFemaleScale;
float auRaMaleScale;
float auRaFemaleScale;
uint8_t hyurMaleCameraHeight;
uint8_t hyurFemaleCameraHeight;
uint8_t elezenMaleCameraHeight;
@ -4436,7 +4463,6 @@ struct Quest
uint8_t classJobCategory0;
uint16_t classJobLevel0;
uint8_t questLevelOffset;
uint16_t levelMax;
uint8_t classJobCategory1;
uint16_t classJobLevel1;
uint8_t previousQuestJoin;
@ -4455,6 +4481,7 @@ struct Quest
uint16_t bellEnd;
uint8_t beastTribe;
uint8_t beastReputationRank;
uint16_t levelMax;
int32_t mountRequired;
bool isHouseRequired;
uint8_t deliveryQuest;
@ -4652,7 +4679,6 @@ struct Recipe
uint16_t recipeLevelTable;
int32_t itemResult;
uint8_t amountResult;
uint8_t recipeElement;
bool isSecondary;
uint16_t difficultyFactor;
uint16_t qualityFactor;
@ -4673,20 +4699,13 @@ struct Recipe
Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct RecipeElement
{
std::string name;
RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
struct RecipeLevelTable
{
uint8_t classJobLevel;
uint8_t stars;
uint16_t suggestedCraftsmanship;
uint16_t difficulty;
int16_t quality;
uint32_t quality;
uint16_t durability;
RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
@ -5006,7 +5025,6 @@ struct SpecialShop
std::vector< int32_t > achievementUnlock;
std::vector< uint16_t > patchNumber;
uint32_t questUnlock;
int32_t questShop;
int32_t notCompleteText;
int32_t completeText;
@ -5232,6 +5250,7 @@ struct Transformation
int32_t bNpcCustomize;
int32_t npcEquip;
std::vector< uint16_t > action;
uint8_t rPParameter;
float speed;
float scale;
bool isPvP;
@ -5239,7 +5258,6 @@ struct Transformation
bool playerCamera;
uint16_t startVFX;
uint16_t endVFX;
uint8_t rPParameter;
Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData );
};
@ -5866,6 +5884,7 @@ struct ZoneSharedGroup
xiv::exd::Exd m_GuardianDeityDat;
xiv::exd::Exd m_GuildleveAssignmentDat;
xiv::exd::Exd m_GuildleveAssignmentCategoryDat;
xiv::exd::Exd m_GuildOrderDat;
xiv::exd::Exd m_GuildOrderGuideDat;
xiv::exd::Exd m_GuildOrderOfficerDat;
xiv::exd::Exd m_HairMakeTypeDat;
@ -5993,7 +6012,6 @@ struct ZoneSharedGroup
xiv::exd::Exd m_RacingChocoboParamDat;
xiv::exd::Exd m_RecastNavimeshDat;
xiv::exd::Exd m_RecipeDat;
xiv::exd::Exd m_RecipeElementDat;
xiv::exd::Exd m_RecipeLevelTableDat;
xiv::exd::Exd m_RecipeNotebookListDat;
xiv::exd::Exd m_RecommendContentsDat;
@ -6346,6 +6364,7 @@ struct ZoneSharedGroup
using GuardianDeityPtr = std::shared_ptr< GuardianDeity >;
using GuildleveAssignmentPtr = std::shared_ptr< GuildleveAssignment >;
using GuildleveAssignmentCategoryPtr = std::shared_ptr< GuildleveAssignmentCategory >;
using GuildOrderPtr = std::shared_ptr< GuildOrder >;
using GuildOrderGuidePtr = std::shared_ptr< GuildOrderGuide >;
using GuildOrderOfficerPtr = std::shared_ptr< GuildOrderOfficer >;
using HairMakeTypePtr = std::shared_ptr< HairMakeType >;
@ -6473,7 +6492,6 @@ struct ZoneSharedGroup
using RacingChocoboParamPtr = std::shared_ptr< RacingChocoboParam >;
using RecastNavimeshPtr = std::shared_ptr< RecastNavimesh >;
using RecipePtr = std::shared_ptr< Recipe >;
using RecipeElementPtr = std::shared_ptr< RecipeElement >;
using RecipeLevelTablePtr = std::shared_ptr< RecipeLevelTable >;
using RecipeNotebookListPtr = std::shared_ptr< RecipeNotebookList >;
using RecommendContentsPtr = std::shared_ptr< RecommendContents >;
@ -6826,6 +6844,7 @@ struct ZoneSharedGroup
std::set< uint32_t > m_GuardianDeityIdList;
std::set< uint32_t > m_GuildleveAssignmentIdList;
std::set< uint32_t > m_GuildleveAssignmentCategoryIdList;
std::set< uint32_t > m_GuildOrderIdList;
std::set< uint32_t > m_GuildOrderGuideIdList;
std::set< uint32_t > m_GuildOrderOfficerIdList;
std::set< uint32_t > m_HairMakeTypeIdList;
@ -6953,7 +6972,6 @@ struct ZoneSharedGroup
std::set< uint32_t > m_RacingChocoboParamIdList;
std::set< uint32_t > m_RecastNavimeshIdList;
std::set< uint32_t > m_RecipeIdList;
std::set< uint32_t > m_RecipeElementIdList;
std::set< uint32_t > m_RecipeLevelTableIdList;
std::set< uint32_t > m_RecipeNotebookListIdList;
std::set< uint32_t > m_RecommendContentsIdList;
@ -8606,6 +8624,12 @@ const std::set< uint32_t >& getGuildleveAssignmentCategoryIdList()
loadIdList( m_GuildleveAssignmentCategoryDat, m_GuildleveAssignmentCategoryIdList );
return m_GuildleveAssignmentCategoryIdList;
}
const std::set< uint32_t >& getGuildOrderIdList()
{
if( m_GuildOrderIdList.size() == 0 )
loadIdList( m_GuildOrderDat, m_GuildOrderIdList );
return m_GuildOrderIdList;
}
const std::set< uint32_t >& getGuildOrderGuideIdList()
{
if( m_GuildOrderGuideIdList.size() == 0 )
@ -9368,12 +9392,6 @@ const std::set< uint32_t >& getRecipeIdList()
loadIdList( m_RecipeDat, m_RecipeIdList );
return m_RecipeIdList;
}
const std::set< uint32_t >& getRecipeElementIdList()
{
if( m_RecipeElementIdList.size() == 0 )
loadIdList( m_RecipeElementDat, m_RecipeElementIdList );
return m_RecipeElementIdList;
}
const std::set< uint32_t >& getRecipeLevelTableIdList()
{
if( m_RecipeLevelTableIdList.size() == 0 )

View file

@ -60,8 +60,8 @@ namespace Sapphire::Network::Packets
///////////////////////////////////////////////////
ChatBanned = 0x006B,
Playtime = 0x006C, // updated 4.5
Logout = 0x0077, // updated 4.5
Playtime = 0x0100, // updated 5.0
Logout = 0x0077, // updated 5.0
CFNotify = 0x0078,
CFMemberStatus = 0x0079,
CFDutyInfo = 0x007A,
@ -73,33 +73,36 @@ namespace Sapphire::Network::Packets
SocialRequestResponse = 0x00BB, // updated 4.1
CancelAllianceForming = 0x00C6, // updated 4.2
Chat = 0x00F7, // updated 4.5?
LogMessage = 0x00D0,
Chat = 0x0104, // updated 5.0
WorldVisitList = 0x00FE, // added 4.5
SocialList = 0x0103, // updated 4.5
SocialList = 0x010D, // updated 5.0
UpdateSearchInfo = 0x0106, // updated 4.5
InitSearchInfo = 0x0107, // updated 4.4
UpdateSearchInfo = 0x0110, // updated 5.0
InitSearchInfo = 0x0111, // updated 5.0
ExamineSearchComment = 0x0102, // updated 4.1
ServerNoticeShort = 0x010B, // added 4.5
ServerNotice = 0x010C, // updated 4.5
SetOnlineStatus = 0x010D, // updated 4.5
ServerNoticeShort = 0x0115, // updated 5.0
ServerNotice = 0x0116, // updated 5.0
SetOnlineStatus = 0x0117, // updated 5.0
CountdownInitiate = 0x0114, // updated 4.5
CountdownCancel = 0x0115, // updated 4.5
CountdownInitiate = 0x011E, // updated 5.0
CountdownCancel = 0x011F, // updated 5.0
BlackList = 0x0118, // updated 4.5
PlayerAddedToBlacklist = 0x0120, // updated 5.0
PlayerRemovedFromBlacklist = 0x0121, // updated 5.0
BlackList = 0x0123, // updated 5.0
LogMessage = 0x00D0,
LinkshellList = 0x012A, // updated 5.0
LinkshellList = 0x011F, // updated 4.5
MailDeleteRequest = 0x0120, // updated 4.5
ReqMoogleMailList = 0x0121, // updated 4.5
ReqMoogleMailLetter = 0x0122, // updated 4.5
MailLetterNotification = 0x0123, // updated 4.5
MailDeleteRequest = 0x012B, // updated 5.0
// 12D - 137 - constant gap between 4.5x -> 5.0
ReqMoogleMailList = 0x0138, // updated 5.0
ReqMoogleMailLetter = 0x0139, // updated 5.0
MailLetterNotification = 0x013A, // updated 5.0
MarketBoardItemListingCount = 0x0125, // updated 4.5
MarketBoardItemListing = 0x0126, // updated 4.5
@ -111,111 +114,115 @@ namespace Sapphire::Network::Packets
FreeCompanyInfo = 0x013D, // updated 4.5
ExamineFreeCompanyInfo = 0x013E, // updated 4.5
StatusEffectList = 0x0151, // updated 4.5
Effect = 0x0154, // updated 4.5
AoeEffect8 = 0x0157, // updated 4.5
AoeEffect16 = 0x0158, // updated 4.5
AoeEffect24 = 0x0159, // updated 4.5
AoeEffect32 = 0x015A, // updated 4.5
PersistantEffect = 0x015B, // updated 4.5
StatusEffectList = 0x015B, // updated 5.0
EurekaStatusEffectList = 0x015C, // updated 5.0
Effect = 0x015E, // updated 5.0
AoeEffect8 = 0x0161, // updated 5.0
AoeEffect16 = 0x0162, // updated 5.0
AoeEffect24 = 0x0163, // updated 5.0
AoeEffect32 = 0x0164, // updated 5.0
PersistantEffect = 0x0165, // updated 5.0
GCAffiliation = 0x0165, // updated 4.5
GCAffiliation = 0x016F, // updated 5.0
PlayerSpawn = 0x0175, // updated 4.5
NpcSpawn = 0x0176, // updated 4.5
NpcSpawn2 = 0x0177, // ( Bigger statuseffectlist? ) updated 4.5
ActorMove = 0x0178, // updated 4.5
PlayerSpawn = 0x017F, // updated 5.0
NpcSpawn = 0x0180, // updated 5.0
NpcSpawn2 = 0x0181, // ( Bigger statuseffectlist? ) updated 5.0
ActorMove = 0x0182, // updated 5.0
ActorSetPos = 0x017A, // updated 4.5
ActorSetPos = 0x0184, // updated 5.0
ActorCast = 0x017C, // updated 4.5
ActorCast = 0x0187, // updated 5.0
PartyList = 0x017E, // updated 4.5
HateRank = 0x017F, // updated 4.5
HateList = 0x0180, // updated 4.5
ObjectSpawn = 0x0181, // updated 4.5
ObjectDespawn = 0x0182, // updated 4.5
UpdateClassInfo = 0x0183, // updated 4.5
SilentSetClassJob = 0x0184, // updated 4.5 - seems to be the case, not sure if it's actually used for anything
PlayerSetup = 0x0185, // updated 4.5
PlayerStats = 0x0186, // updated 4.5
ActorOwner = 0x0187, // updated 4.5
PlayerStateFlags = 0x0188, // updated 4.5
PlayerClassInfo = 0x0189, // updated 4.5
PartyList = 0x0188, // updated 5.0
HateRank = 0x0189, // updated 5.0
HateList = 0x018A, // updated 5.0
ObjectSpawn = 0x018B, // updated 5.0
ObjectDespawn = 0x018C, // updated 5.0
UpdateClassInfo = 0x018D, // updated 5.0
SilentSetClassJob = 0x018E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything
PlayerSetup = 0x018F, // updated 5.0
PlayerStats = 0x0190, // updated 5.0
ActorOwner = 0x0192, // updated 5.0
PlayerStateFlags = 0x0193, // updated 5.0
PlayerClassInfo = 0x0194, // updated 5.0
ModelEquip = 0x018B, // updated 4.5
Examine = 0x018C, // updated 4.5
CharaNameReq = 0x018D, // updated 4.5
ModelEquip = 0x0196, // updated 5.0
Examine = 0x0197, // updated 5.0
CharaNameReq = 0x0198, // updated 5.0
// nb: see #565 on github
UpdateRetainerItemSalePrice = 0x019D, // updated 5.0
SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore
ItemInfo = 0x0196, // updated 4.5
ContainerInfo = 0x0197, // updated 4.5
InventoryTransactionFinish = 0x0198, // updated 4.5
InventoryTransaction = 0x0199, // updated 4.5
ItemInfo = 0x01A1, // updated 5.0
ContainerInfo = 0x01A2, // updated 5.0
InventoryTransactionFinish = 0x01A3, // updated 5.0
InventoryTransaction = 0x01A4, // updated 5.0
CurrencyCrystalInfo = 0x019B, // updated 4.5
CurrencyCrystalInfo = 0x01A5, // updated 5.0
InventoryActionAck = 0x019D, // updated 4.5
UpdateInventorySlot = 0x019E, // updated 4.5
InventoryActionAck = 0x01A7, // updated 5.0
UpdateInventorySlot = 0x01A8, // updated 5.0
HuntingLogEntry = 0x01A9, // added 4.5
HuntingLogEntry = 0x01B3, // updated 5.0
EventPlay = 0x01AB, // updated 4.5
DirectorPlayScene = 0x01AF, // updated 4.5
EventOpenGilShop = 0x01B2, // updated 4.5
EventPlay = 0x01B5, // updated 5.0
DirectorPlayScene = 0x01B9, // updated 5.0
EventOpenGilShop = 0x01BC, // updated 5.0
EventStart = 0x01B4, // updated 4.5
EventFinish = 0x01B5, // updated 4.5
EventStart = 0x01BE, // updated 5.0
EventFinish = 0x01BF, // updated 5.0
EventLinkshell = 0x1169,
QuestActiveList = 0x01C8, // updated 4.5
QuestUpdate = 0x01C9, // updated 4.5
QuestCompleteList = 0x01CA, // updated 4.5
QuestActiveList = 0x01D2, // updated 5.0
QuestUpdate = 0x01D3, // updated 5.0
QuestCompleteList = 0x01D4, // updated 5.0
QuestFinish = 0x01CB, // updated 4.5
MSQTrackerComplete = 0x01CC, // updated 4.5
QuestFinish = 0x01D5, // updated 5.0
MSQTrackerComplete = 0x01D6, // updated 5.0
MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474
QuestMessage = 0x01D3, // updated 4.5
QuestMessage = 0x01DE, // updated 5.0
QuestTracker = 0x01D8, // updated 4.5
QuestTracker = 0x01E3, // updated 5.0
Mount = 0x01E8, // updated 4.5
Mount = 0x01F3, // updated 5.0
DirectorVars = 0x01EA, // updated 4.5
DirectorPopUp = 0x01F5, // display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown
DirectorVars = 0x01F5, // updated 5.0
DirectorPopUp = 0x0200, // updated 5.0 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown
CFAvailableContents = 0xF1FD, // updated 4.2
WeatherChange = 0x0205, // updated 4.5
PlayerTitleList = 0x0206, // updated 4.5?
Discovery = 0x0207, // updated 4.5?
WeatherChange = 0x0210, // updated 5.0
PlayerTitleList = 0x0211, // updated 5.0
Discovery = 0x0212, // updated 5.0
EorzeaTimeOffset = 0x0209, // updated 4.5
EorzeaTimeOffset = 0x0214, // updated 5.0
EquipDisplayFlags = 0x0215, // updated 4.5
EquipDisplayFlags = 0x0220, // updated 5.0
/// Housing //////////////////////////////////////
LandSetInitialize = 0x0229, // updated 4.5
LandUpdate = 0x022A, // updated 4.5
YardObjectSpawn = 0x022B, // updated 4.5
HousingIndoorInitialize = 0x022C, // updated 4.5
LandPriceUpdate = 0x022D, // updated 4.5
LandInfoSign = 0x022E, // updated 4.5
LandRename = 0x022F, // updated 4.5
HousingEstateGreeting = 0x0230, // updated 4.5
HousingUpdateLandFlagsSlot = 0x0231, // updated 4.5
HousingLandFlags = 0x0232, // updated 4.5
HousingShowEstateGuestAccess = 0x0233, // updated 4.5
LandSetInitialize = 0x0234, // updated 5.0
LandUpdate = 0x0235, // updated 5.0
YardObjectSpawn = 0x0236, // updated 5.0
HousingIndoorInitialize = 0x0237, // updated 5.0
LandPriceUpdate = 0x0238, // updated 5.0
LandInfoSign = 0x0239, // updated 5.0
LandRename = 0x023A, // updated 5.0
HousingEstateGreeting = 0x023B, // updated 5.0
HousingUpdateLandFlagsSlot = 0x023C, // updated 5.0
HousingLandFlags = 0x023D, // updated 5.0
HousingShowEstateGuestAccess = 0x023E, // updated 5.0
HousingObjectInitialize = 0x0235, // updated 4.45
HousingInternalObjectSpawn = 0x236, // updated 4.5
HousingObjectInitialize = 0x0240, // updated 5.0
HousingInternalObjectSpawn = 0x241, // updated 5.0
HousingWardInfo = 0x0238, // updated 4.5
HousingObjectMove = 0x0239, // updated 4.5
HousingWardInfo = 0x0243, // updated 5.0
HousingObjectMove = 0x0244, // updated 5.0
SharedEstateSettingsResponse = 0x0245, // updated 4.5
@ -228,16 +235,17 @@ namespace Sapphire::Network::Packets
DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui
PerformNote = 0x0286, // updated 4.3
PrepareZoning = 0x0299, // updated 4.5
PrepareZoning = 0x02A4, // updated 5.0
ActorGauge = 0x0292, // updated 4.3
// Unknown IPC types that still need to be sent
// TODO: figure all these out properly
IPCTYPE_UNK_320 = 0x0253, // updated 4.5
IPCTYPE_UNK_322 = 0x0255, // updated 4.5
// daily quest related, init seed and current quota probably
IPCTYPE_UNK_320 = 0x025E, // updated 5.0
IPCTYPE_UNK_322 = 0x0260, // updated 5.0
/// Doman Mahjong //////////////////////////////////////
MahjongOpenGui = 0x02BC, // only available in mahjong instance
MahjongOpenGui = 0x02A4, // only available in mahjong instance
MahjongNextRound = 0x02BD, // initial hands(baipai), # of riichi(wat), winds, honba, score and stuff
MahjongPlayerAction = 0x02BE, // tsumo(as in drawing a tile) called chi/pon/kan/riichi
MahjongEndRoundTsumo = 0x02BF, // called tsumo
@ -255,36 +263,37 @@ namespace Sapphire::Network::Packets
enum ClientZoneIpcType : uint16_t
{
PingHandler = 0x0065, // unchanged 4.5
InitHandler = 0x0066, // unchanged 4.5
PingHandler = 0x0065, // unchanged 5.0
InitHandler = 0x0066, // unchanged 5.0
FinishLoadingHandler = 0x0069, // unchanged 4.5
FinishLoadingHandler = 0x0069, // unchanged 5.0
CFCommenceHandler = 0x006F,
CFRegisterDuty = 0x0071,
CFRegisterRoulette = 0x0072,
PlayTimeHandler = 0x0073, // unchanged 4.5
LogoutHandler = 0x0074, // unchanged 4.5
PlayTimeHandler = 0x0073, // unchanged 5.0
LogoutHandler = 0x0074, // unchanged 5.0
CancelLogout = 0x0075, // updated 5.0
CFDutyInfoHandler = 0x0078, // updated 4.2
SocialReqSendHandler = 0x00AE, // updated 4.1
CreateCrossWorldLS = 0x00AF, // updated 4.3
ChatHandler = 0x00D7, // updated 4.5
ChatHandler = 0x00D9, // updated 5.0
SocialListHandler = 0x00DF, // updated 4.5
ReqSearchInfoHandler = 0x00E4, // updated 4.5
ReqExamineSearchCommentHandler = 0x00E5, // updated 4.5
SocialListHandler = 0x00E1, // updated 5.0
SetSearchInfoHandler = 0x00E4, // updated 5.0
ReqSearchInfoHandler = 0x00E6, // updated 5.0
ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0
SetSearchInfoHandler = 0x00E2, // unchanged 4.5
ReqRemovePlayerFromBlacklist = 0x00F1, // updated 5.0
BlackListHandler = 0x00F2, // updated 5.0
PlayerSearchHandler = 0x00F4, // updated 5.0
BlackListHandler = 0x00F0, // updated 4.5
PlayerSearchHandler = 0x00E6, // updated 4.5
LinkshellListHandler = 0x00F8, // updated 4.5
LinkshellListHandler = 0x00FA, // updated 5.0
MarketBoardRequestItemListingInfo = 0x0102, // updated 4.5
MarketBoardRequestItemListings = 0x0103, // updated 4.5
@ -302,48 +311,48 @@ namespace Sapphire::Network::Packets
ReqCountdownCancel = 0x0134, // updated 4.5
ClearWaymarks = 0x0135, // updated 4.5
ZoneLineHandler = 0x0137, // updated 4.5
ClientTrigger = 0x0138, // updated 4.5
DiscoveryHandler = 0x0139, // updated 4.5
ZoneLineHandler = 0x0139, // updated 5.0
ClientTrigger = 0x013A, // updated 5.0
DiscoveryHandler = 0x013B, // updated 5.0
AddWaymark = 0x013A, // updated 4.5
SkillHandler = 0x013B, // updated 4.5
GMCommand1 = 0x013C, // updated 4.5
GMCommand2 = 0x013D, // updated 4.5
AoESkillHandler = 0x13E, // updated 4.5
SkillHandler = 0x013D, // updated 5.0
GMCommand1 = 0x013E, // updated 5.0
GMCommand2 = 0x013F, // updated 5.0
AoESkillHandler = 0x140, // updated 5.0
UpdatePositionHandler = 0x013F, // updated 4.5
UpdatePositionHandler = 0x0141, // updated 5.0
UpdatePositionInstance = 0x0183, // updated 4.3
InventoryModifyHandler = 0x0146, // updated 4.5 ( +4 )
InventoryModifyHandler = 0x0148, // updated 5.0
ReqPlaceHousingItem = 0x149, // updated 4.5
ReqPlaceHousingItem = 0x014B, // updated 5.0
BuildPresetHandler = 0x014F, // updated 5.0
BuildPresetHandler = 0x014E, // updated 4.5
TalkEventHandler = 0x014F, // updated 4.5
EmoteEventHandler = 0x0150, // updated 4.5
WithinRangeEventHandler = 0x0151, // updated 4.5
OutOfRangeEventHandler = 0x0152, // updated 4.5
EnterTeriEventHandler = 0x0153, // updated 4.5
TalkEventHandler = 0x0151, // updated 5.0
EmoteEventHandler = 0x0152, // updated 5.0
WithinRangeEventHandler = 0x0153, // updated 5.0
OutOfRangeEventHandler = 0x0154, // updated 5.0
EnterTeriEventHandler = 0x0155, // updated 5.0
ShopEventHandler = 0x0156, // updated 5.0
ShopEventHandler = 0x0155, // updated 4.5
ReturnEventHandler = 0x0158, // updated 4.5
TradeReturnEventHandler = 0x0159, // updated 4.5
ReturnEventHandler = 0x015A, // updated 5.0?
TradeReturnEventHandler = 0x015B, // updated 5.0?
LinkshellEventHandler = 0x016B, // updated 4.5
LinkshellEventHandler1 = 0x016C, // updated 4.5
LandRenameHandler = 0x0175, // updated 4.5
HousingUpdateHouseGreeting = 0x0176, // updated 4.5
HousingUpdateObjectPosition = 0x0177, // updated 4.5
ReqEquipDisplayFlagsChange = 0x0175, // updated 5.0
SetSharedEstateSettings = 0x017B, // updated 4.5
LandRenameHandler = 0x0177, // updated 5.0
HousingUpdateHouseGreeting = 0x0178, // updated 5.0
HousingUpdateObjectPosition = 0x0179, // updated 5.0
SetSharedEstateSettings = 0x017B, // updated 5.0
PerformNoteHandler = 0x029B, // updated 4.3
ReqEquipDisplayFlagsChange = 0x0173, // updated 4.5
};

View file

@ -835,6 +835,7 @@ namespace Sapphire::Network::Packets::Server
unsigned char race;
unsigned char tribe;
unsigned char gender;
unsigned char unknown7A;
unsigned char currentJob;
unsigned char currentClass;
unsigned char deity;
@ -842,7 +843,7 @@ namespace Sapphire::Network::Packets::Server
unsigned char namedayDay;
unsigned char cityState;
unsigned char homepoint;
unsigned char unknown81;
unsigned char unknown82;
unsigned char petHotBar;
unsigned char companionRank;
unsigned char companionStars;
@ -856,16 +857,16 @@ namespace Sapphire::Network::Packets::Server
unsigned char relicBookId;
unsigned char unknown90[4];
unsigned char craftingMasterMask;
unsigned char unknown95[10];
unsigned char unknown95[9];
unsigned char unknown9F[2];
unsigned char unknownA1[3];
unsigned int exp[26];
unsigned int exp[28];
unsigned int unknown108;
unsigned int pvpTotalExp;
unsigned int unknownPvp110;
unsigned int pvpExp;
unsigned int pvpFrontlineOverallRanks[3];
unsigned short levels[26];
unsigned short levels[28];
unsigned short unknown15C[9];
unsigned short u1;
unsigned short u2;
@ -880,32 +881,32 @@ namespace Sapphire::Network::Packets::Server
unsigned char companionAttRank;
unsigned char companionHealRank;
unsigned char u19[2];
unsigned char mountGuideMask[17];
unsigned char mountGuideMask[19];
char name[32];
unsigned char unknownOword[16];
unsigned char unknownOw;
unsigned char unlockBitmask[64];
unsigned char aetheryte[17];
unsigned char discovery[421];
unsigned char aetheryte[21];
unsigned char discovery[445];
unsigned char howto[34];
unsigned char minions[42];
unsigned char chocoboTaxiMask[8];
unsigned char watchedCutscenes[118];
unsigned char companionBardingMask[9];
unsigned char minions[45];
unsigned char chocoboTaxiMask[10];
unsigned char watchedCutscenes[124];
unsigned char companionBardingMask[10];
unsigned char companionEquippedHead;
unsigned char companionEquippedBody;
unsigned char companionEquippedLegs;
unsigned char unknown52A[4];
unsigned char unknownMask52E[11];
unsigned char fishingGuideMask[89];
unsigned char fishingSpotVisited[25];
unsigned char unknown59A[15];
unsigned char unknown5A9[5];
unsigned char fishingGuideMask[105];
unsigned char fishingSpotVisited[31];
unsigned char unknown59A[27];
unsigned char unknown5A9[7];
unsigned char beastRank[11];
unsigned char unknownPvp5AB[11];
unsigned char unknown5B9[5];
unsigned char unknown5B91;
unsigned char pose;
unsigned char unknown5B91;
unsigned char challengeLogComplete[9];
unsigned char weaponPose;
unsigned char unknownMask673[10];

View file

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

View file

@ -21,7 +21,7 @@ Sapphire::Data::ExdDataGenerated g_exdData;
using namespace Sapphire;
//const std::string datLocation( "/opt/sapphire_3_15_0/bin/sqpack" );
const std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" );
std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" );
std::string generateEnum( const std::string& exd, int8_t nameIndex, const std::string& type, bool useLang = true )
{
@ -86,13 +86,20 @@ std::string generateEnum( const std::string& exd, int8_t nameIndex, const std::s
}
int main()
int main( int argc, char** argv )
{
Logger::init( "commongen" );
Logger::info( "Setting up EXD data" );
if( argc > 1 )
{
Logger::info( "using dat path: {0}", std::string( argv[ 1 ] ) );
datLocation = std::string( argv[ 1 ] );
}
if( !g_exdData.init( datLocation ) )
{
Logger::fatal( "Error setting up EXD data " );
@ -107,8 +114,7 @@ int main()
"/* This file has been automatically generated.\n Changes will be lost upon regeneration.\n To change the content edit tools/exd_common_gen */\n";
result += "namespace Sapphire {\n";
result += "namespace Common {\n";
result += "namespace Sapphire::Common {\n";
result += generateEnum( "ActionCategory", 0, "uint8_t" );
result += generateEnum( "BaseParam", 1, "uint8_t" );
result += generateEnum( "BeastReputationRank", 1, "uint8_t" );
@ -127,7 +133,6 @@ int main()
result += generateEnum( "Town", 0, "uint8_t" );
result += generateEnum( "Weather", 1, "uint8_t" );
result += generateEnum( "HousingAppeal", 0, "uint8_t" );
result += "}\n";
result += "}\n#endif\n";
Logger::info( result );
return 0;

View file

@ -27,6 +27,9 @@ namespace fs = std::experimental::filesystem;
Sapphire::Data::ExdDataGenerated g_exdData;
bool skipUnmapped = true;
std::shared_ptr< xiv::dat::GameData > m_data;
std::shared_ptr< xiv::exd::ExdData > m_exd_data;
std::map< char, std::string > numberToStringMap
{
{ '0', "zero" },
@ -83,7 +86,7 @@ std::string generateIdListGetter( const std::string& exd )
std::string generateSetDatAccessCall( const std::string& exd )
{
auto& cat = g_exdData.m_exd_data->get_category( exd );
auto& cat = m_exd_data->get_category( exd );
auto exh = cat.get_header();
std::string lang = "xiv::exd::Language::none";
@ -110,7 +113,7 @@ std::map< std::string, std::string > nameTaken;
std::string generateStruct( const std::string& exd )
{
auto& cat = g_exdData.m_exd_data->get_category( exd );
auto& cat = m_exd_data->get_category( exd );
auto exh = cat.get_header();
auto exhMem = exh.get_exh_members();
@ -261,7 +264,7 @@ std::string generateConstructorsDecl( const std::string& exd )
{
std::string result;
auto& cat = g_exdData.m_exd_data->get_category( exd );
auto& cat = m_exd_data->get_category( exd );
auto exh = cat.get_header();
auto exhMem = exh.get_exh_members();
@ -355,11 +358,10 @@ int main( int argc, char** argv )
Logger::info( "Setting up EXD data" );
if( !g_exdData.init( datLocation ) )
{
Logger::fatal( "Error setting up EXD data " );
return 0;
}
m_data = std::make_shared< xiv::dat::GameData >( datLocation );
m_exd_data = std::make_shared< xiv::exd::ExdData >( *m_data );
Logger::info( "Generating structs, this may take several minutes..." );
Logger::info( "Go grab a coffee..." );
@ -385,6 +387,8 @@ int main( int argc, char** argv )
return 1;
}
auto& cats = m_exd_data->get_cat_names();
uint32_t entryCount = 0;
for( auto& entry : fs::directory_iterator( "./Definitions/" ) )
{
@ -393,10 +397,14 @@ int main( int argc, char** argv )
if( path.extension() != ".json" )
continue;
entryCount++;
auto name = path.stem().string();
if( std::find( cats.begin(), cats.end(), name ) == cats.end() )
{
Logger::warn( "have definition for {} but the sheet doesn't exist", name );
continue;
}
forwards += "struct " + name + ";\n";
structDefs += generateStruct( name );
dataDecl += generateDatAccessDecl( name );
@ -405,6 +413,8 @@ int main( int argc, char** argv )
datAccCall += generateSetDatAccessCall( name );
constructorDecl += generateConstructorsDecl( name );
idListGetters += generateIdListGetter( name );
entryCount++;
}
Logger::info( "Processed {} definition files, writing files...", entryCount );

View file

@ -466,7 +466,7 @@ bool Action::Action::primaryCostCheck( bool subtractCosts )
{
auto curMp = m_pSource->getMp();
auto cost = Math::CalcStats::calculateMpCost( *m_pSource, m_primaryCost );
auto cost = m_primaryCost * 100;
if( curMp < cost )
return false;

View file

@ -695,7 +695,7 @@ void Sapphire::Entity::Player::gainExp( uint32_t amount )
queuePacket( makeActorControl143( getId(), GainExpMsg, static_cast< uint8_t >( getClass() ), amount ) );
if( level >= 70 ) // temporary fix for leveling over levelcap
if( level >= Common::MAX_PLAYER_LEVEL ) // temporary fix for leveling over levelcap
{
queuePacket( makeActorControl143( getId(), UpdateUiExp, static_cast< uint8_t >( getClass() ), amount ) );
return;

View file

@ -15,7 +15,7 @@
using namespace Sapphire::Math;
using namespace Sapphire::Entity;
const int levelTable[71][7] =
const int levelTable[81][7] =
{
// PIE, MP, MAIN,SUB,DIV,HP,ELMT,THREAT
{ 1, 1, 1, 1, 1, 1, 1 },
@ -88,7 +88,19 @@ const int levelTable[71][7] =
{ 830, 10560, 268, 361, 1643, 3300, 292 },
{ 860, 10980, 276, 362, 1802, 3400, 293 },
{ 890, 11450, 284, 363, 1978, 3500, 294 },
{ 890, 12000, 292, 364, 2170, 3600, 295 }
{ 890, 12000, 292, 364, 2170, 3600, 295 },
// todo: add proper shbr values
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
{ 890, 12000, 292, 364, 2170, 3600, 295 },
};
/*
@ -115,8 +127,8 @@ float CalcStats::calculateBaseStat( const Chara& chara )
float base = 0.0f;
uint8_t level = chara.getLevel();
if( level > 70 )
level = 70;
if( level > Common::MAX_PLAYER_LEVEL )
level = Common::MAX_PLAYER_LEVEL;
return static_cast< float >( levelTable[level][2] );
}
@ -187,86 +199,6 @@ uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pF
return result;
}
uint16_t CalcStats::calculateMpCost( const Sapphire::Entity::Chara& chara, uint16_t baseCost )
{
auto level = chara.getLevel();
// each level range is 1-10, 11-20, 21-30, ... therefore:
// level 50 should be in the 4th group, not the 5t
// dividing by 10 on the border will break this unless we subtract 1
auto levelGroup = std::max< uint8_t >( level - 1, 1 ) / 10;
float cost = baseCost;
// thanks to andrew for helping me figure this shit out
// played with this some more and it seems to be accurate for everything i've tried
switch( levelGroup )
{
// level 1-10
case 0:
{
// r^2 = 0.9999
cost = 0.0952f * level + 0.9467f;
break;
}
// level 11-20
case 1:
{
// r^2 = 1
cost = 0.19f * level;
break;
}
// level 21-30
case 2:
{
// r^2 = 1
cost = 0.38f * level - 3.8f;
break;
}
// level 31-40
case 3:
{
// r^2 = 1
cost = 0.6652f * level - 12.358f;
break;
}
// level 41-50
case 4:
{
// r^2 = 1
cost = 1.2352f * level - 35.159f;
break;
}
// level 51-60
case 5:
{
// r^2 = 1
cost = 0.0654f * std::exp( 0.1201f * level );
break;
}
// level 61-70
case 6:
{
// r^2 = 0.9998
cost = 0.2313f * ( level * level ) - 26.98f * level + 875.21f;
break;
}
default:
{
return 0;
}
}
return static_cast< uint16_t >( std::round( cost * baseCost ) );
}
float CalcStats::blockProbability( const Chara& chara )
{
auto level = chara.getLevel();

View file

@ -19,15 +19,6 @@ namespace Sapphire::Math
static uint32_t calculateMaxHp( Sapphire::Entity::PlayerPtr pPlayer, FrameworkPtr pFw );
/*!
* @brief Calculates the MP cost of a spell given its base cost
*
* @param chara The Chara that is casting the action
* @param baseCost The action cost
* @return The total MP to be consumed by a successful cast
*/
static uint16_t calculateMpCost( const Sapphire::Entity::Chara& chara, uint16_t baseCost );
/*!
* @brief Calculates the probability of a block happening
*/

View file

@ -71,8 +71,8 @@ namespace Sapphire::Network::Packets::Server
memcpy( m_data.howto, player.getHowToArray(), sizeof( m_data.howto ) );
// possibly max level or current level
m_data.maxLevel = 0x46;
m_data.expansion = 2;
m_data.maxLevel = Common::MAX_PLAYER_LEVEL;
m_data.expansion = Common::CURRENT_EXPANSION_ID;
// df stuff
// todo: actually do this properly