1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-08 11:47:45 +00:00
sapphire/src/world/Action/ActionLutData.cpp
2023-03-08 18:57:10 +01:00

160 lines
No EOL
7.4 KiB
C++

#include "ActionLut.h"
#include "ActionLutData.h"
#include <fstream>
#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 },
{ "TickHeal", Common::ParamModifier::TickHeal },
{ "TickDamage", Common::ParamModifier::TickDamage },
{ "StrengthPercent", Common::ParamModifier::StrengthPercent },
{ "DexterityPercent", Common::ParamModifier::DexterityPercent },
{ "VitalityPercent", Common::ParamModifier::VitalityPercent },
{ "IntelligencePercent", Common::ParamModifier::IntelligencePercent },
{ "MindPercent", Common::ParamModifier::MindPercent },
{ "PietyPercent", Common::ParamModifier::PietyPercent },
{ "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 },
{ "DamageDealtPercent", Common::ParamModifier::DamageDealtPercent },
{ "DamageTakenPercent", Common::ParamModifier::DamageTakenPercent },
{ "HealingMagicRecoveryPercent", Common::ParamModifier::HealingMagicRecoveryPercent },
{ "SlashingResistancePercent", Common::ParamModifier::SlashingResistancePercent },
{ "PiercingResistancePercent", Common::ParamModifier::PiercingResistancePercent },
{ "BluntResistancePercent", Common::ParamModifier::BluntResistancePercent },
{ "ProjectileResistancePercent", Common::ParamModifier::ProjectileResistancePercent },
};
bool ActionLutData::cacheActions()
{
std::fstream f;
for( auto& p : fs::recursive_directory_iterator( "data/actions/" ) )
{
if( p.path().extension() == ".json" )
{
f.open( p.path() );
if( !f.is_open() )
return false;
auto actionJSON = nlohmann::json::parse( f );
for( auto& i : actionJSON.items() )
{
auto id = std::stoi( i.key() );
auto action = i.value().get< ActionEntry >();
ActionLut::m_actionLut.try_emplace( id, action );
}
f.close();
f.clear();
}
}
if( ActionLut::m_actionLut.empty() )
return false;
return true;
}
bool ActionLutData::reloadActions()
{
if( !ActionLut::m_actionLut.empty() )
ActionLut::m_actionLut.clear();
return cacheActions();
}