mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-06-17 22:23:03 +00:00
add :Wait(timeout_s) function to the result of MP.TriggerGlobalEvent
This commit is contained in:
+22
-5
@@ -444,16 +444,21 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerGlobalEvent(const std::string
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JsonString Str { LuaAPI::MP::JsonEncode(Table) };
|
JsonString Str { "" };
|
||||||
|
if (!Table.empty()) {
|
||||||
|
Str.value = LuaAPI::MP::JsonEncode(Table);
|
||||||
|
}
|
||||||
|
|
||||||
auto Return = mEngine->TriggerEvent(EventName, mStateId, Str);
|
auto Return = mEngine->TriggerEvent(EventName, mStateId, Str);
|
||||||
mEngine->ReportErrors(Return);
|
mEngine->ReportErrors(Return);
|
||||||
auto MyHandlers = mEngine->GetEventHandlersForState(EventName, mStateId);
|
auto MyHandlers = mEngine->GetEventHandlersForState(EventName, mStateId);
|
||||||
|
|
||||||
sol::variadic_results LocalArgs = JsonStringToArray(Str);
|
sol::variadic_results LocalArgs = Str.value.empty() ? sol::variadic_results {} : JsonStringToArray(Str);
|
||||||
|
|
||||||
for (const auto& Handler : MyHandlers) {
|
for (const auto& Handler : MyHandlers) {
|
||||||
auto Fn = mStateView[Handler];
|
auto Fn = mStateView[Handler];
|
||||||
if (Fn.valid()) {
|
if (Fn.valid()) {
|
||||||
auto LuaResult = Fn(LocalArgs);
|
auto LuaResult = LocalArgs.empty() ? Fn() : Fn(LocalArgs);
|
||||||
auto Result = std::make_shared<TLuaResult>();
|
auto Result = std::make_shared<TLuaResult>();
|
||||||
if (LuaResult.valid()) {
|
if (LuaResult.valid()) {
|
||||||
Result->Error = false;
|
Result->Error = false;
|
||||||
@@ -492,6 +497,15 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerGlobalEvent(const std::string
|
|||||||
}
|
}
|
||||||
return Result;
|
return Result;
|
||||||
});
|
});
|
||||||
|
AsyncEventReturn.set_function("Wait",
|
||||||
|
[](const sol::table& Self, std::optional<float> TimeoutS) {
|
||||||
|
auto Vector = Self.get<std::vector<std::shared_ptr<TLuaResult>>>("ReturnValueImpl");
|
||||||
|
if (TimeoutS.has_value()) {
|
||||||
|
TLuaEngine::WaitForAll(Vector, std::chrono::milliseconds(size_t(TimeoutS.value() * 1000.0f)));
|
||||||
|
} else {
|
||||||
|
TLuaEngine::WaitForAll(Vector);
|
||||||
|
}
|
||||||
|
});
|
||||||
return AsyncEventReturn;
|
return AsyncEventReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1026,8 +1040,11 @@ void TLuaEngine::StateThreadData::operator()() {
|
|||||||
LuaArgs.push_back(sol::make_object(StateView, std::get<int>(Arg)));
|
LuaArgs.push_back(sol::make_object(StateView, std::get<int>(Arg)));
|
||||||
break;
|
break;
|
||||||
case TLuaType::Json: {
|
case TLuaType::Json: {
|
||||||
auto LocalArgs = JsonStringToArray(std::get<JsonString>(Arg));
|
auto Str = std::get<JsonString>(Arg);
|
||||||
LuaArgs.insert(LuaArgs.end(), LocalArgs.begin(), LocalArgs.end());
|
if (!Str.value.empty()) {
|
||||||
|
auto LocalArgs = JsonStringToArray(Str);
|
||||||
|
LuaArgs.insert(LuaArgs.end(), LocalArgs.begin(), LocalArgs.end());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TLuaType::Bool:
|
case TLuaType::Bool:
|
||||||
|
|||||||
Reference in New Issue
Block a user