mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-02 07:45:26 +00:00
Further Changes to rewrite Lua
This commit is contained in:
parent
3805d7ce6c
commit
0a35aadc51
@ -32,7 +32,7 @@ public:
|
|||||||
[[nodiscard]] const TNetwork& Network() const { return mNetwork; }
|
[[nodiscard]] const TNetwork& Network() const { return mNetwork; }
|
||||||
|
|
||||||
void UnregisterScript(std::shared_ptr<TLuaFile> Script);
|
void UnregisterScript(std::shared_ptr<TLuaFile> Script);
|
||||||
std::shared_ptr<TLuaFile> GetLuaFileOfScript(lua_State* L);
|
std::shared_ptr<TLuaFile> GetLuaFileOfState(lua_State* L);
|
||||||
std::shared_ptr<TLuaFile> InsertNewLuaFile(const fs::path& FileName, const std::string& PluginName);
|
std::shared_ptr<TLuaFile> InsertNewLuaFile(const fs::path& FileName, const std::string& PluginName);
|
||||||
void SendError(lua_State* L, const std::string& msg);
|
void SendError(lua_State* L, const std::string& msg);
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ std::any TLuaEngine::TriggerLuaEvent(const std::string& Event, bool local, std::
|
|||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TLuaFile> TLuaEngine::GetLuaFileOfScript(lua_State* L) {
|
std::shared_ptr<TLuaFile> TLuaEngine::GetLuaFileOfState(lua_State* L) {
|
||||||
std::unique_lock Lock(mLuaFilesMutex);
|
std::unique_lock Lock(mLuaFilesMutex);
|
||||||
for (auto& Script : mLuaFiles) {
|
for (auto& Script : mLuaFiles) {
|
||||||
if (Script->GetState() == L)
|
if (Script->GetState() == L)
|
||||||
@ -143,7 +143,7 @@ bool TLuaEngine::IsNewFile(const std::string& Path) {
|
|||||||
|
|
||||||
void TLuaEngine::SendError(lua_State* L, const std::string& msg) {
|
void TLuaEngine::SendError(lua_State* L, const std::string& msg) {
|
||||||
Assert(L);
|
Assert(L);
|
||||||
auto MaybeS = GetLuaFileOfScript(L);
|
auto MaybeS = GetLuaFileOfState(L);
|
||||||
std::string a;
|
std::string a;
|
||||||
if (!MaybeS) {
|
if (!MaybeS) {
|
||||||
a = ("_Console");
|
a = ("_Console");
|
||||||
@ -195,13 +195,46 @@ int ServerLua_GetIdentifiers(lua_State* L) {
|
|||||||
} else
|
} else
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
SendError(*TheLuaEngine, L, "lua_GetIdentifiers wrong arguments");
|
TheLuaEngine->SendError(L, "lua_GetIdentifiers wrong arguments");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::shared_ptr<TLuaArgs> CollectArgs(lua_State* L) {
|
||||||
|
int ArgCount = lua_gettop(L);
|
||||||
|
if (ArgCount == 0) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
std::shared_ptr<TLuaArgs> Temp = std::make_shared<TLuaArgs>();
|
||||||
|
for (int C = 2; C <= ArgCount; C++) {
|
||||||
|
if (lua_isstring(L, C)) {
|
||||||
|
Temp->Args.emplace_back(std::string(lua_tostring(L, C)));
|
||||||
|
} else if (lua_isinteger(L, C)) {
|
||||||
|
Temp->Args.emplace_back(int(lua_tointeger(L, C)));
|
||||||
|
} else if (lua_isboolean(L, C)) {
|
||||||
|
Temp->Args.emplace_back(bool(lua_toboolean(L, C)));
|
||||||
|
} else if (lua_isnumber(L, C)) {
|
||||||
|
Temp->Args.emplace_back(float(lua_tonumber(L, C)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ServerLua_TriggerEventG(lua_State* L) {
|
||||||
|
auto MaybeScript = TheLuaEngine->GetLuaFileOfState(L);
|
||||||
|
Assert(!!MaybeScript);
|
||||||
|
if (lua_gettop(L) <= 0) {
|
||||||
|
TheLuaEngine->SendError(L, ("TriggerGlobalEvent not enough arguments"));
|
||||||
|
return 0;
|
||||||
|
} else if (!lua_isstring(L, 1)) {
|
||||||
|
TheLuaEngine->SendError(L, "TriggerGlobalEvent wrong argument [1] need string");
|
||||||
|
}
|
||||||
|
std::string Name = lua_tostring(L, 1);
|
||||||
|
auto Args = CollectArgs(L);
|
||||||
|
TheLuaEngine->TriggerLuaEvent(Name, false, MaybeScript, Args, false);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// LEAVE THIS AT THE **VERY** BOTTOM OF THE FILE
|
// LEAVE THIS AT THE **VERY** BOTTOM OF THE FILE
|
||||||
|
|
||||||
@ -214,7 +247,7 @@ std::shared_ptr<TLuaFile> TLuaEngine::InsertNewLuaFile(const fs::path& FileName,
|
|||||||
lua_State* State = Script->GetState();
|
lua_State* State = Script->GetState();
|
||||||
luaL_openlibs(State);
|
luaL_openlibs(State);
|
||||||
lua_register(State, "GetPlayerIdentifiers", ServerLua_GetIdentifiers);
|
lua_register(State, "GetPlayerIdentifiers", ServerLua_GetIdentifiers);
|
||||||
lua_register(State, "TriggerGlobalEvent", lua_TriggerEventG);
|
lua_register(State, "TriggerGlobalEvent", ServerLua_TriggerEventG);
|
||||||
lua_register(State, "TriggerLocalEvent", lua_TriggerEventL);
|
lua_register(State, "TriggerLocalEvent", lua_TriggerEventL);
|
||||||
lua_register(State, "TriggerClientEvent", lua_RemoteEvent);
|
lua_register(State, "TriggerClientEvent", lua_RemoteEvent);
|
||||||
lua_register(State, "GetPlayerCount", lua_GetPlayerCount);
|
lua_register(State, "GetPlayerCount", lua_GetPlayerCount);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user