forked from mirror/openmw-tes3mp
The terms "plugins" and "mods" were used interchangeably to refer to collections of server scripts, which was bound to cause confusion later on, especially with client data files frequently being referred to as "plugins" and "mods" as well. Moreover, the server configuration file now starts its manual ordering with "Module1" for consistency with the pluginlist.json (soon to be dataFileList.json) of the CoreScripts.
61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
//
|
|
// Created by koncord on 01.08.17.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include "sol.hpp"
|
|
#include "CommandController.hpp"
|
|
#include "Timer.hpp"
|
|
#include <unordered_map>
|
|
#include <memory>
|
|
#include <apps/openmw-mp/Actors.hpp>
|
|
#include <apps/openmw-mp/Object.hpp>
|
|
|
|
//class CommandController;
|
|
class EventController;
|
|
//class TimerController;
|
|
|
|
struct ServerModuleInfo
|
|
{
|
|
std::string name;
|
|
std::pair<std::string, std::string> path; // homePath, moduleName
|
|
std::string version;
|
|
std::string author;
|
|
std::vector<std::pair<std::string, std::string>> dependencies; // name, requestedVersion
|
|
sol::environment env;
|
|
};
|
|
|
|
class LuaState
|
|
{
|
|
public:
|
|
LuaState();
|
|
~LuaState() = default;
|
|
std::shared_ptr<sol::state> getState() { return lua; }
|
|
void addGlobalPackagePath(const std::string &path);
|
|
void addGlobalCPath(const std::string &path);
|
|
sol::table getCoreTable() { return dataEnv["Core"]; }
|
|
sol::environment &getDataEnv(){ return dataEnv; }
|
|
void loadModules(const std::string &path, std::vector<std::string> *list = nullptr);
|
|
|
|
CommandController &getCmdCtrl();
|
|
EventController &getEventCtrl();
|
|
TimerController &getTimerCtrl();
|
|
ObjectController &getObjectCtrl();
|
|
|
|
ActorController &getActorCtrl();
|
|
|
|
private:
|
|
sol::environment openScript(std::string path, std::string moduleName);
|
|
private:
|
|
std::shared_ptr<sol::state> lua;
|
|
sol::environment dataEnv;
|
|
sol::environment configEnv;
|
|
std::unique_ptr<CommandController> cmdCtrl;
|
|
std::unique_ptr<EventController> eventCtrl;
|
|
std::unique_ptr<TimerController> timerCtrl;
|
|
std::unique_ptr<ActorController> actorCtrl;
|
|
std::unique_ptr<ObjectController> objectCtrl;
|
|
|
|
std::vector<ServerModuleInfo> modules;
|
|
};
|