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

Map out modifiers for lut and handle deserializing

This commit is contained in:
Lucy 2023-01-28 00:07:06 +01:00
parent 637c786ebc
commit 5b225de6f7
6 changed files with 137 additions and 5 deletions

View file

@ -891,8 +891,7 @@ namespace Sapphire::Common
CriticalHitPowerPercent = 1012,
CriticalHitResiliencePercent = 1013,
CriticalHitPercent = 1014,
EnmityPercent = 1015,
EnmityReductionPercent = 1016,
EnmityPercent = 1015
};
enum struct ActionAspect : uint8_t

View file

@ -31,10 +31,16 @@ Sapphire::Data::ExdData g_exdDataGen;
std::string datLocation( "C:\\Data\\Dev\\ffxiv3.01\\game\\sqpack" );
//const std::string datLocation( "/mnt/c/Program Files (x86)/Steam/steamapps/common/FINAL FANTASY XIV Online/game/sqpack" );
struct StatusModifier
{
Common::ParamModifier modifier;
int32_t value;
};
struct StatusEntry
{
uint16_t id;
std::unordered_map< std::string, uint16_t > modifiers;
std::vector< StatusModifier > modifiers;
};
struct StatusEffect
@ -58,6 +64,14 @@ struct ActionEntry
StatusEffect statuses;
};
void to_json( nlohmann::ordered_json& j, const StatusModifier& statusModifier)
{
j = nlohmann::ordered_json{
{ "modifier", statusModifier.modifier },
{ "value", statusModifier.value }
};
}
void to_json( nlohmann::ordered_json& j, const StatusEntry& statusEntry )
{
j = nlohmann::ordered_json{

View file

@ -1,6 +1,7 @@
#include <cassert>
#include "ActionLut.h"
using namespace Sapphire;
using namespace Sapphire::World::Action;
bool ActionLut::validEntryExists( uint16_t actionId )

View file

@ -4,15 +4,20 @@
#include <unordered_map>
#include <string>
#include <vector>
#include "Common.h"
namespace Sapphire::World::Action
{
using StatusModifier = std::unordered_map< std::string, uint16_t >;
struct StatusModifier
{
Common::ParamModifier modifier;
int32_t value;
};
struct StatusEntry
{
uint16_t id;
StatusModifier modifiers;
std::vector< StatusModifier > modifiers;
};
struct StatusEffect

View file

@ -4,11 +4,105 @@
#include <filesystem>
#include <iostream>
using namespace Sapphire;
using namespace Sapphire::World::Action;
namespace fs = std::filesystem;
ActionLut::Lut ActionLut::m_actionLut;
std::unordered_map< std::string, Common::ParamModifier > ActionLutData::m_modifierStringMap =
{
{ "Strength", Common::ParamModifier::Strength },
{ "Dexterity", Common::ParamModifier::Dexterity },
{ "Vitality", Common::ParamModifier::Vitality },
{ "Intelligence", Common::ParamModifier::Intelligence },
{ "Mind", Common::ParamModifier::Mind },
{ "Piety", Common::ParamModifier::Piety },
{ "HP", Common::ParamModifier::HP },
{ "MP", Common::ParamModifier::MP },
{ "TP", Common::ParamModifier::TP },
{ "GP", Common::ParamModifier::GP },
{ "CP", Common::ParamModifier::CP },
{ "PhysicalDamage", Common::ParamModifier::PhysicalDamage },
{ "MagicDamage", Common::ParamModifier::MagicDamage },
{ "Delay", Common::ParamModifier::Delay },
{ "AdditionalEffect", Common::ParamModifier::AdditionalEffect },
{ "AttackSpeed", Common::ParamModifier::AttackSpeed },
{ "BlockRate", Common::ParamModifier::BlockRate },
{ "BlockStrength", Common::ParamModifier::BlockStrength },
{ "Parry", Common::ParamModifier::Parry },
{ "AttackPower", Common::ParamModifier::AttackPower },
{ "Defense", Common::ParamModifier::Defense },
{ "Accuracy", Common::ParamModifier::Accuracy },
{ "Evasion", Common::ParamModifier::Evasion },
{ "MagicDefense", Common::ParamModifier::MagicDefense },
{ "CriticalHitPower", Common::ParamModifier::CriticalHitPower },
{ "CriticalHitResilience", Common::ParamModifier::CriticalHitResilience },
{ "CriticalHit", Common::ParamModifier::CriticalHit },
{ "CriticalHitEvasion", Common::ParamModifier::CriticalHitEvasion },
{ "SlashingResistance", Common::ParamModifier::SlashingResistance },
{ "PiercingResistance", Common::ParamModifier::PiercingResistance },
{ "BluntResistance", Common::ParamModifier::BluntResistance },
{ "ProjectileResistance", Common::ParamModifier::ProjectileResistance },
{ "AttackMagicPotency", Common::ParamModifier::AttackMagicPotency },
{ "HealingMagicPotency", Common::ParamModifier::HealingMagicPotency },
{ "EnhancementMagicPotency", Common::ParamModifier::EnhancementMagicPotency },
{ "ElementalBonus", Common::ParamModifier::ElementalBonus },
{ "FireResistance", Common::ParamModifier::FireResistance },
{ "IceResistance", Common::ParamModifier::IceResistance },
{ "WindResistance", Common::ParamModifier::WindResistance },
{ "EarthResistance", Common::ParamModifier::EarthResistance },
{ "LightningResistance", Common::ParamModifier::LightningResistance },
{ "WaterResistance", Common::ParamModifier::WaterResistance },
{ "MagicResistance", Common::ParamModifier::MagicResistance },
{ "Determination", Common::ParamModifier::Determination },
{ "SkillSpeed", Common::ParamModifier::SkillSpeed },
{ "SpellSpeed", Common::ParamModifier::SpellSpeed },
{ "Haste", Common::ParamModifier::Haste },
{ "Morale", Common::ParamModifier::Morale },
{ "Enmity", Common::ParamModifier::Enmity },
{ "EnmityReduction", Common::ParamModifier::EnmityReduction },
{ "CarefulDesynthesis", Common::ParamModifier::CarefulDesynthesis },
{ "EXPBonus", Common::ParamModifier::EXPBonus },
{ "Regen", Common::ParamModifier::Regen },
{ "Refresh", Common::ParamModifier::Refresh },
{ "MainAttribute", Common::ParamModifier::MainAttribute },
{ "SecondaryAttribute", Common::ParamModifier::SecondaryAttribute },
{ "SlowResistance", Common::ParamModifier::SlowResistance },
{ "PetrificationResistance", Common::ParamModifier::PetrificationResistance },
{ "ParalysisResistance", Common::ParamModifier::ParalysisResistance },
{ "SilenceResistance", Common::ParamModifier::SilenceResistance },
{ "BlindResistance", Common::ParamModifier::BlindResistance },
{ "PoisonResistance", Common::ParamModifier::PoisonResistance },
{ "StunResistance", Common::ParamModifier::StunResistance },
{ "SleepResistance", Common::ParamModifier::SleepResistance },
{ "BindResistance", Common::ParamModifier::BindResistance },
{ "HeavyResistance", Common::ParamModifier::HeavyResistance },
{ "DoomResistance", Common::ParamModifier::DoomResistance },
{ "ReducedDurabilityLoss", Common::ParamModifier::ReducedDurabilityLoss },
{ "IncreasedSpiritbondGain", Common::ParamModifier::IncreasedSpiritbondGain },
{ "Craftsmanship", Common::ParamModifier::Craftsmanship },
{ "Control", Common::ParamModifier::Control },
{ "Gathering", Common::ParamModifier::Gathering },
{ "Perception", Common::ParamModifier::Perception },
{ "HPPercent", Common::ParamModifier::HPPercent },
{ "MPPercent", Common::ParamModifier::MPPercent },
{ "TPPercent", Common::ParamModifier::TPPercent },
{ "GPPercent", Common::ParamModifier::GPPercent },
{ "CPPercent", Common::ParamModifier::CPPercent },
{ "PhysicalDamagePercent", Common::ParamModifier::PhysicalDamagePercent },
{ "MagicDamagePercent", Common::ParamModifier::MagicDamagePercent },
{ "AttackPowerPercent", Common::ParamModifier::AttackPowerPercent },
{ "DefensePercent", Common::ParamModifier::DefensePercent },
{ "AccuracyPercent", Common::ParamModifier::AccuracyPercent },
{ "EvasionPercent", Common::ParamModifier::EvasionPercent },
{ "MagicDefensePercent", Common::ParamModifier::MagicDefensePercent },
{ "CriticalHitPowerPercent", Common::ParamModifier::CriticalHitPowerPercent },
{ "CriticalHitResiliencePercent", Common::ParamModifier::CriticalHitResiliencePercent },
{ "CriticalHitPercent", Common::ParamModifier::CriticalHitPercent },
{ "EnmityPercent", Common::ParamModifier::EnmityPercent }
};
bool ActionLutData::cacheActions()
{
std::fstream f;

View file

@ -1,4 +1,5 @@
#include "ActionLut.h"
#include "Common.h"
#include <nlohmann/json.hpp>
namespace Sapphire::World::Action
@ -8,8 +9,26 @@ namespace Sapphire::World::Action
public:
static bool cacheActions();
static bool reloadActions();
static std::unordered_map< std::string, Common::ParamModifier > m_modifierStringMap;
};
inline void from_json( const nlohmann::json& j, StatusModifier& statusModifier )
{
auto stringKey = j.at( "modifier" ).get< std::string >();
j.at( "value" ).get_to( statusModifier.value );
auto enumKey = ActionLutData::m_modifierStringMap.find( stringKey );
if( enumKey != ActionLutData::m_modifierStringMap.end() )
{
statusModifier.modifier = enumKey->second;
}
else
{
statusModifier.modifier = Common::ParamModifier::None;
}
}
inline void from_json( const nlohmann::json& j, StatusEntry& statusEntry )
{
j.at( "id" ).get_to( statusEntry.id );