BeamMP-Server/include/Lua/LuaSystem.hpp
2020-11-01 12:19:19 +01:00

69 lines
2.1 KiB
C++

///
/// Created by Anonymous275 on 5/20/2020
///
#pragma once
#include <filesystem>
#include <iostream>
#include "lua.hpp"
#include <vector>
#include <thread>
#include <mutex>
#include <set>
#include <any>
namespace fs = std::filesystem;
struct LuaArg{
std::vector<std::any> args;
void PushArgs(lua_State *State){
for(std::any arg : args){
if(!arg.has_value())return;
std::string Type = arg.type().name();
if(Type.find("bool") != std::string::npos){
lua_pushboolean(State,std::any_cast<bool>(arg));
}
if(Type.find("basic_string") != std::string::npos || Type.find("char") != std::string::npos){
lua_pushstring(State,std::any_cast<std::string>(arg).c_str());
}
if(Type.find("int") != std::string::npos){
lua_pushinteger(State,std::any_cast<int>(arg));
}
if(Type.find("float") != std::string::npos){ lua_pushnumber(State,std::any_cast<float>(arg));
}
}
}
};
class Lua {
private:
std::set<std::pair<std::string,std::string>> RegisteredEvents;
lua_State *luaState = luaL_newstate();
fs::file_time_type LastWrote;
std::string PluginName;
std::string FileName;
public:
void RegisterEvent(const std::string&Event,const std::string&FunctionName);
std::string GetRegistered(const std::string&Event);
void UnRegisterEvent(const std::string&Event);
void SetLastWrite(fs::file_time_type time);
bool IsRegistered(const std::string&Event);
void SetPluginName(const std::string&Name);
void Execute(const std::string& Command);
void SetFileName(const std::string&Name);
fs::file_time_type GetLastWrite();
std::string GetPluginName();
std::string GetFileName();
bool StopThread = false;
bool Console = false;
lua_State* GetState();
char* GetOrigin();
std::mutex Lock;
void Reload();
void Init();
};
int CallFunction(Lua*lua,const std::string& FuncName,LuaArg* args);
int TriggerLuaEvent(const std::string& Event,bool local,Lua*Caller,LuaArg* arg,bool Wait);
extern std::set<Lua*> PluginEngine;