mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-09 12:17:45 +00:00
Convert action lut to JSON
This commit is contained in:
parent
cc0a7aa70a
commit
f3627a9566
15 changed files with 180975 additions and 19337 deletions
|
@ -15,6 +15,8 @@ add_custom_target( copy_runtime_files ALL
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/web ${CMAKE_BINARY_DIR}/bin/web
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/web ${CMAKE_BINARY_DIR}/bin/web
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/sql_import.sh ${CMAKE_BINARY_DIR}/bin/sql_import.sh )
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/sql_import.sh ${CMAKE_BINARY_DIR}/bin/sql_import.sh )
|
||||||
|
|
||||||
|
file( COPY ${CMAKE_SOURCE_DIR}/data DESTINATION ${CMAKE_BINARY_DIR}/bin )
|
||||||
|
|
||||||
######################################
|
######################################
|
||||||
# Dependencies and compiler settings #
|
# Dependencies and compiler settings #
|
||||||
######################################
|
######################################
|
||||||
|
|
82365
data/actions/player.json
Normal file
82365
data/actions/player.json
Normal file
File diff suppressed because it is too large
Load diff
26724
deps/nlohmann/json.hpp
vendored
26724
deps/nlohmann/json.hpp
vendored
File diff suppressed because it is too large
Load diff
|
@ -798,6 +798,103 @@ namespace Sapphire::Common
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class ParamModifier : uint16_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Strength = 1,
|
||||||
|
Dexterity = 2,
|
||||||
|
Vitality = 3,
|
||||||
|
Intelligence = 4,
|
||||||
|
Mind = 5,
|
||||||
|
Piety = 6,
|
||||||
|
HP = 7,
|
||||||
|
MP = 8,
|
||||||
|
TP = 9,
|
||||||
|
GP = 10,
|
||||||
|
CP = 11,
|
||||||
|
PhysicalDamage = 12,
|
||||||
|
MagicDamage = 13,
|
||||||
|
Delay = 14,
|
||||||
|
AdditionalEffect = 15,
|
||||||
|
AttackSpeed = 16,
|
||||||
|
BlockRate = 17,
|
||||||
|
BlockStrength = 18,
|
||||||
|
Parry = 19,
|
||||||
|
AttackPower = 20,
|
||||||
|
Defense = 21,
|
||||||
|
Accuracy = 22,
|
||||||
|
Evasion = 23,
|
||||||
|
MagicDefense = 24,
|
||||||
|
CriticalHitPower = 25,
|
||||||
|
CriticalHitResilience = 26,
|
||||||
|
CriticalHit = 27,
|
||||||
|
CriticalHitEvasion = 28,
|
||||||
|
SlashingResistance = 29,
|
||||||
|
PiercingResistance = 30,
|
||||||
|
BluntResistance = 31,
|
||||||
|
ProjectileResistance = 32,
|
||||||
|
AttackMagicPotency = 33,
|
||||||
|
HealingMagicPotency = 34,
|
||||||
|
EnhancementMagicPotency = 35,
|
||||||
|
ElementalBonus = 36,
|
||||||
|
FireResistance = 37,
|
||||||
|
IceResistance = 38,
|
||||||
|
WindResistance = 39,
|
||||||
|
EarthResistance = 40,
|
||||||
|
LightningResistance = 41,
|
||||||
|
WaterResistance = 42,
|
||||||
|
MagicResistance = 43,
|
||||||
|
Determination = 44,
|
||||||
|
SkillSpeed = 45,
|
||||||
|
SpellSpeed = 46,
|
||||||
|
Haste = 47,
|
||||||
|
Morale = 48,
|
||||||
|
Enmity = 49,
|
||||||
|
EnmityReduction = 50,
|
||||||
|
CarefulDesynthesis = 51,
|
||||||
|
EXPBonus = 52,
|
||||||
|
Regen = 53,
|
||||||
|
Refresh = 54,
|
||||||
|
MainAttribute = 55,
|
||||||
|
SecondaryAttribute = 56,
|
||||||
|
SlowResistance = 57,
|
||||||
|
PetrificationResistance = 58,
|
||||||
|
ParalysisResistance = 59,
|
||||||
|
SilenceResistance = 60,
|
||||||
|
BlindResistance = 61,
|
||||||
|
PoisonResistance = 62,
|
||||||
|
StunResistance = 63,
|
||||||
|
SleepResistance = 64,
|
||||||
|
BindResistance = 65,
|
||||||
|
HeavyResistance = 66,
|
||||||
|
DoomResistance = 67,
|
||||||
|
ReducedDurabilityLoss = 68,
|
||||||
|
IncreasedSpiritbondGain = 69,
|
||||||
|
Craftsmanship = 70,
|
||||||
|
Control = 71,
|
||||||
|
Gathering = 72,
|
||||||
|
Perception = 73,
|
||||||
|
|
||||||
|
// Unique modifiers
|
||||||
|
HPPercent = 1000,
|
||||||
|
MPPercent = 1001,
|
||||||
|
TPPercent = 1002,
|
||||||
|
GPPercent = 1003,
|
||||||
|
CPPercent = 1004,
|
||||||
|
PhysicalDamagePercent = 1005,
|
||||||
|
MagicDamagePercent = 1006,
|
||||||
|
AttackPowerPercent = 1007,
|
||||||
|
DefensePercent = 1008,
|
||||||
|
AccuracyPercent = 1009,
|
||||||
|
EvasionPercent = 1010,
|
||||||
|
MagicDefensePercent = 1011,
|
||||||
|
CriticalHitPowerPercent = 1012,
|
||||||
|
CriticalHitResiliencePercent = 1013,
|
||||||
|
CriticalHitPercent = 1014,
|
||||||
|
EnmityPercent = 1015,
|
||||||
|
EnmityReductionPercent = 1016,
|
||||||
|
};
|
||||||
|
|
||||||
enum struct ActionAspect : uint8_t
|
enum struct ActionAspect : uint8_t
|
||||||
{
|
{
|
||||||
None = 0, // Doesn't imply unaspected
|
None = 0, // Doesn't imply unaspected
|
||||||
|
|
|
@ -12,4 +12,3 @@ if (UNIX)
|
||||||
else()
|
else()
|
||||||
target_link_libraries( action_parse common xivdat mysql zlib)
|
target_link_libraries( action_parse common xivdat mysql zlib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
82365
src/tools/action_parse/actions/player.json
Normal file
82365
src/tools/action_parse/actions/player.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -9,10 +9,12 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <string>
|
||||||
#include <Exd/ExdData.h>
|
#include <Exd/ExdData.h>
|
||||||
#include <Exd/Structs.h>
|
#include <Exd/Structs.h>
|
||||||
#include <Logging/Logger.h>
|
#include <Logging/Logger.h>
|
||||||
#include <Common.h>
|
#include <Common.h>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <streambuf>
|
#include <streambuf>
|
||||||
|
@ -29,6 +31,18 @@ Sapphire::Data::ExdData g_exdDataGen;
|
||||||
std::string datLocation( "C:\\Data\\Dev\\ffxiv3.01\\game\\sqpack" );
|
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" );
|
//const std::string datLocation( "/mnt/c/Program Files (x86)/Steam/steamapps/common/FINAL FANTASY XIV Online/game/sqpack" );
|
||||||
|
|
||||||
|
struct StatusEntry
|
||||||
|
{
|
||||||
|
uint16_t id;
|
||||||
|
std::unordered_map< std::string, uint16_t > modifiers;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StatusEffect
|
||||||
|
{
|
||||||
|
std::vector< StatusEntry > caster;
|
||||||
|
std::vector< StatusEntry > target;
|
||||||
|
};
|
||||||
|
|
||||||
struct ActionEntry
|
struct ActionEntry
|
||||||
{
|
{
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
|
@ -41,8 +55,37 @@ struct ActionEntry
|
||||||
uint32_t curePotency;
|
uint32_t curePotency;
|
||||||
uint32_t restorePercentage;
|
uint32_t restorePercentage;
|
||||||
std::vector< uint32_t > nextCombo{};
|
std::vector< uint32_t > nextCombo{};
|
||||||
|
StatusEffect statuses;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void to_json(nlohmann::ordered_json& j, const StatusEntry& statusEntry)
|
||||||
|
{
|
||||||
|
j = nlohmann::ordered_json{
|
||||||
|
{ "id", statusEntry.id },
|
||||||
|
{ "modifiers", statusEntry.modifiers }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void to_json(nlohmann::ordered_json& j, const ActionEntry& action)
|
||||||
|
{
|
||||||
|
j = nlohmann::ordered_json{
|
||||||
|
{ "name", action.name },
|
||||||
|
{ "potency", action.potency },
|
||||||
|
{ "comboPotency", action.comboPotency },
|
||||||
|
{ "flankPotency", action.flankPotency },
|
||||||
|
{ "frontPotency", action.frontPotency },
|
||||||
|
{ "rearPotency", action.rearPotency },
|
||||||
|
{ "curePotency", action.curePotency },
|
||||||
|
{ "restorePercentage", action.restorePercentage },
|
||||||
|
{ "nextCombo", action.nextCombo },
|
||||||
|
{ "statuses", {
|
||||||
|
{ "caster", action.statuses.caster },
|
||||||
|
{ "target", action.statuses.target },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
bool invalidChar( char c )
|
bool invalidChar( char c )
|
||||||
{
|
{
|
||||||
return !( c >= 0 && c < 128 );
|
return !( c >= 0 && c < 128 );
|
||||||
|
@ -89,9 +132,6 @@ int main( int argc, char* argv[] )
|
||||||
|
|
||||||
Logger::init( "action_parse" );
|
Logger::init( "action_parse" );
|
||||||
|
|
||||||
if( !fs::exists( "ActionLutData.cpp.tmpl" ) )
|
|
||||||
throw std::runtime_error( "ActionLut.cpp.tmpl is missing in working directory" );
|
|
||||||
|
|
||||||
if( argc == 2 )
|
if( argc == 2 )
|
||||||
{
|
{
|
||||||
datLocation = std::string( argv[ 1 ] );
|
datLocation = std::string( argv[ 1 ] );
|
||||||
|
@ -267,7 +307,7 @@ int main( int argc, char* argv[] )
|
||||||
// dump entries
|
// dump entries
|
||||||
Logger::info( "Found {} player actions", actions.size() );
|
Logger::info( "Found {} player actions", actions.size() );
|
||||||
|
|
||||||
std::string output;
|
nlohmann::ordered_json output;
|
||||||
Logger::info( std::to_string( traversedCombos.size() ) );
|
Logger::info( std::to_string( traversedCombos.size() ) );
|
||||||
for( const auto& action : actions )
|
for( const auto& action : actions )
|
||||||
{
|
{
|
||||||
|
@ -279,29 +319,11 @@ int main( int argc, char* argv[] )
|
||||||
// action.first, data.name, data.potency, data.flankPotency, data.frontPotency, data.rearPotency,
|
// action.first, data.name, data.potency, data.flankPotency, data.frontPotency, data.rearPotency,
|
||||||
// data.curePotency, data.restorePercentage );
|
// data.curePotency, data.restorePercentage );
|
||||||
|
|
||||||
auto comboStr = stringVec( data.nextCombo );
|
output[ std::to_string(action.first) ] = data;
|
||||||
if( !comboStr.empty() )
|
|
||||||
comboStr = " " + comboStr + " ";
|
|
||||||
|
|
||||||
auto out = fmt::format( " // {}\n {{ {}, {{ {}, {}, {}, {}, {}, {}, {}, {{{}}} }} }},\n",
|
|
||||||
data.name, action.first,
|
|
||||||
data.potency, data.comboPotency,
|
|
||||||
data.flankPotency, data.frontPotency, data.rearPotency,
|
|
||||||
data.curePotency, 0, comboStr );
|
|
||||||
|
|
||||||
output += out;
|
|
||||||
// Logger::info( out );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ifstream ifs( "ActionLutData.cpp.tmpl" );
|
std::ofstream outH( "actions/player.json" );
|
||||||
|
outH << std::setw(2) << output << std::endl;
|
||||||
std::string actionTmpl( ( std::istreambuf_iterator< char >( ifs ) ),
|
|
||||||
std::istreambuf_iterator< char >() );
|
|
||||||
|
|
||||||
auto result = std::regex_replace( actionTmpl, std::regex( "%INSERT_GARBAGE%" ), output );
|
|
||||||
|
|
||||||
std::ofstream outH( "ActionLutData.cpp" );
|
|
||||||
outH << result;
|
|
||||||
outH.close();
|
outH.close();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2,10 +2,25 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace Sapphire::World::Action
|
namespace Sapphire::World::Action
|
||||||
{
|
{
|
||||||
|
using StatusModifier = std::unordered_map< std::string, uint16_t >;
|
||||||
|
|
||||||
|
struct StatusEntry
|
||||||
|
{
|
||||||
|
uint16_t id;
|
||||||
|
StatusModifier modifiers;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StatusEffect
|
||||||
|
{
|
||||||
|
std::vector< StatusEntry > caster;
|
||||||
|
std::vector< StatusEntry > target;
|
||||||
|
};
|
||||||
|
|
||||||
struct ActionEntry
|
struct ActionEntry
|
||||||
{
|
{
|
||||||
uint16_t potency;
|
uint16_t potency;
|
||||||
|
@ -16,6 +31,7 @@ namespace Sapphire::World::Action
|
||||||
uint16_t curePotency;
|
uint16_t curePotency;
|
||||||
uint16_t restoreMPPercentage;
|
uint16_t restoreMPPercentage;
|
||||||
std::vector< uint32_t > nextCombo;
|
std::vector< uint32_t > nextCombo;
|
||||||
|
StatusEffect statuses;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ActionLut
|
class ActionLut
|
||||||
|
|
File diff suppressed because it is too large
Load diff
32
src/world/Action/ActionLutData.h
Normal file
32
src/world/Action/ActionLutData.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include "ActionLut.h"
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
namespace Sapphire::World::Action
|
||||||
|
{
|
||||||
|
class ActionLutData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static bool cacheActions();
|
||||||
|
static bool reloadActions();
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void from_json( const nlohmann::json& j, StatusEntry& statusEntry )
|
||||||
|
{
|
||||||
|
j.at( "id" ).get_to( statusEntry.id );
|
||||||
|
j.at( "modifiers" ).get_to( statusEntry.modifiers );
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void from_json( const nlohmann::json& j, ActionEntry& action )
|
||||||
|
{
|
||||||
|
j.at( "potency" ).get_to( action.potency );
|
||||||
|
j.at( "comboPotency" ).get_to( action.comboPotency );
|
||||||
|
j.at( "flankPotency" ).get_to( action.flankPotency );
|
||||||
|
j.at( "frontPotency" ).get_to( action.frontPotency );
|
||||||
|
j.at( "rearPotency" ).get_to( action.rearPotency );
|
||||||
|
j.at( "curePotency" ).get_to( action.curePotency );
|
||||||
|
j.at( "restorePercentage" ).get_to( action.restoreMPPercentage );
|
||||||
|
j.at( "nextCombo" ).get_to( action.nextCombo );
|
||||||
|
j.at( "statuses" ).at( "caster" ).get_to( action.statuses.caster );
|
||||||
|
j.at( "statuses" ).at( "target" ).get_to( action.statuses.target );
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
#include "ActionMgr.h"
|
#include "ActionMgr.h"
|
||||||
#include "PlayerMgr.h"
|
#include "PlayerMgr.h"
|
||||||
|
|
||||||
|
#include "Action/ActionLutData.h"
|
||||||
#include "Action/Action.h"
|
#include "Action/Action.h"
|
||||||
#include "Action/ItemAction.h"
|
#include "Action/ItemAction.h"
|
||||||
#include "Action/EventItemAction.h"
|
#include "Action/EventItemAction.h"
|
||||||
|
@ -16,6 +17,11 @@
|
||||||
using namespace Sapphire;
|
using namespace Sapphire;
|
||||||
using namespace Sapphire::World::Manager;
|
using namespace Sapphire::World::Manager;
|
||||||
|
|
||||||
|
bool ActionMgr::cacheActionLut()
|
||||||
|
{
|
||||||
|
return Action::ActionLutData::cacheActions();
|
||||||
|
}
|
||||||
|
|
||||||
void ActionMgr::handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
|
void ActionMgr::handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
|
||||||
Excel::ExcelStructPtr< Excel::Action > actionData, Common::FFXIVARR_POSITION3 pos,
|
Excel::ExcelStructPtr< Excel::Action > actionData, Common::FFXIVARR_POSITION3 pos,
|
||||||
uint16_t sequence )
|
uint16_t sequence )
|
||||||
|
@ -146,4 +152,4 @@ bool ActionMgr::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for spe
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return actionInfoPtr->data().CastTime != 0;
|
return actionInfoPtr->data().CastTime != 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@ namespace Sapphire::World::Manager
|
||||||
ActionMgr() = default;
|
ActionMgr() = default;
|
||||||
~ActionMgr() = default;
|
~ActionMgr() = default;
|
||||||
|
|
||||||
|
bool cacheActionLut();
|
||||||
|
|
||||||
void handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId,
|
void handleTargetedPlayerAction( Entity::Player& player, uint32_t actionId,
|
||||||
std::shared_ptr< Excel::ExcelStruct< Excel::Action > > actionData, uint64_t targetId, uint16_t sequence );
|
std::shared_ptr< Excel::ExcelStruct< Excel::Action > > actionData, uint64_t targetId, uint16_t sequence );
|
||||||
void handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
|
void handlePlacedPlayerAction( Entity::Player& player, uint32_t actionId,
|
||||||
|
@ -42,4 +44,4 @@ namespace Sapphire::World::Manager
|
||||||
// item action handlers
|
// item action handlers
|
||||||
void handleItemActionVFX( Entity::Player& player, uint32_t itemId, uint16_t vfxId );
|
void handleItemActionVFX( Entity::Player& player, uint32_t itemId, uint16_t vfxId );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
#include "Actor/EventObject.h"
|
#include "Actor/EventObject.h"
|
||||||
#include "Actor/BNpc.h"
|
#include "Actor/BNpc.h"
|
||||||
|
|
||||||
|
#include "Action/ActionLutData.h"
|
||||||
|
|
||||||
#include "Territory/Territory.h"
|
#include "Territory/Territory.h"
|
||||||
#include "Territory/HousingZone.h"
|
#include "Territory/HousingZone.h"
|
||||||
#include "Territory/InstanceContent.h"
|
#include "Territory/InstanceContent.h"
|
||||||
|
@ -76,6 +78,7 @@ DebugCommandMgr::DebugCommandMgr()
|
||||||
registerCommand( "linkshell", &DebugCommandMgr::linkshell, "Linkshell creation", 1 );
|
registerCommand( "linkshell", &DebugCommandMgr::linkshell, "Linkshell creation", 1 );
|
||||||
registerCommand( "cf", &DebugCommandMgr::contentFinder, "Content-Finder", 1 );
|
registerCommand( "cf", &DebugCommandMgr::contentFinder, "Content-Finder", 1 );
|
||||||
registerCommand( "ew", &DebugCommandMgr::easyWarp, "Easy warping", 1 );
|
registerCommand( "ew", &DebugCommandMgr::easyWarp, "Easy warping", 1 );
|
||||||
|
registerCommand( "reload", &DebugCommandMgr::hotReload, "Reloads a resource", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear all loaded commands
|
// clear all loaded commands
|
||||||
|
@ -1471,3 +1474,42 @@ void DebugCommandMgr::easyWarp( char* data, Sapphire::Entity::Player& player, st
|
||||||
else
|
else
|
||||||
PlayerMgr::sendUrgent( player, "{0} is not a valid easyWarp location.", subCommand );
|
PlayerMgr::sendUrgent( player, "{0} is not a valid easyWarp location.", subCommand );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugCommandMgr::hotReload( char* data, Sapphire::Entity::Player& player, std::shared_ptr< DebugCommand > command )
|
||||||
|
{
|
||||||
|
std::string subCommand;
|
||||||
|
std::string params = "";
|
||||||
|
|
||||||
|
// check if the command has parameters
|
||||||
|
std::string tmpCommand = std::string( data + command->getName().length() + 1 );
|
||||||
|
|
||||||
|
std::size_t pos = tmpCommand.find_first_of( ' ' );
|
||||||
|
|
||||||
|
if( pos != std::string::npos )
|
||||||
|
// command has parameters, grab the first part
|
||||||
|
subCommand = tmpCommand.substr( 0, pos );
|
||||||
|
else
|
||||||
|
// no subcommand given
|
||||||
|
subCommand = tmpCommand;
|
||||||
|
|
||||||
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
|
Logger::debug( "[{0}] subCommand: {1} params: {2}", player.getId(), subCommand, params );
|
||||||
|
|
||||||
|
if( subCommand == "actions" )
|
||||||
|
{
|
||||||
|
if( Action::ActionLutData::reloadActions() )
|
||||||
|
{
|
||||||
|
PlayerMgr::sendDebug( player, "Successfully reloaded actions." );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerMgr::sendDebug( player, "There was an error reloading actions." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerMgr::sendDebug( player, "Unknown sub command." );
|
||||||
|
}
|
||||||
|
}
|
|
@ -63,6 +63,8 @@ namespace Sapphire::World::Manager
|
||||||
|
|
||||||
void easyWarp( char* data, Entity::Player& player, std::shared_ptr< DebugCommand > command );
|
void easyWarp( char* data, Entity::Player& player, std::shared_ptr< DebugCommand > command );
|
||||||
|
|
||||||
|
void hotReload( char* data, Sapphire::Entity::Player& player, std::shared_ptr< DebugCommand > command );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -201,6 +201,13 @@ void WorldServer::run( int32_t argc, char* argv[] )
|
||||||
Common::Service< Sapphire::InstanceObjectCache >::set( pInstanceObjCache );
|
Common::Service< Sapphire::InstanceObjectCache >::set( pInstanceObjCache );
|
||||||
|
|
||||||
auto pActionMgr = std::make_shared< Manager::ActionMgr >();
|
auto pActionMgr = std::make_shared< Manager::ActionMgr >();
|
||||||
|
|
||||||
|
Logger::info( "ActionMgr: Caching action LUT" );
|
||||||
|
if( !pActionMgr->cacheActionLut() )
|
||||||
|
{
|
||||||
|
Logger::fatal( "Unable to cache actions!" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
Common::Service< Manager::ActionMgr >::set( pActionMgr );
|
Common::Service< Manager::ActionMgr >::set( pActionMgr );
|
||||||
|
|
||||||
auto pNaviMgr = std::make_shared< Manager::NaviMgr >();
|
auto pNaviMgr = std::make_shared< Manager::NaviMgr >();
|
||||||
|
|
Loading…
Add table
Reference in a new issue