mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
Throw a JavaScript exception, not a C++ exception when invalid parameters are passed to subscribe.
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
- Fix: [#13342] Rename tabChange to onTabChange in WindowDesc interface.
|
- Fix: [#13342] Rename tabChange to onTabChange in WindowDesc interface.
|
||||||
- Fix: [#13427] Newly created Go-Karts show "Race won by <blank>".
|
- Fix: [#13427] Newly created Go-Karts show "Race won by <blank>".
|
||||||
- Fix: [#13454] Plug-ins do not load on Windows if the user directory contains non-ASCII characters.
|
- Fix: [#13454] Plug-ins do not load on Windows if the user directory contains non-ASCII characters.
|
||||||
|
- Fix: [#13469] Exception thrown from plugin in context.subscribe.
|
||||||
- Improved: [#12917] Changed peep movement so that they stay more spread out over the full width of single tile paths.
|
- Improved: [#12917] Changed peep movement so that they stay more spread out over the full width of single tile paths.
|
||||||
- Removed: [#13423] Built-in explode guests cheat (replaced by plug-in).
|
- Removed: [#13423] Built-in explode guests cheat (replaced by plug-in).
|
||||||
|
|
||||||
|
|||||||
@@ -156,21 +156,24 @@ namespace OpenRCT2::Scripting
|
|||||||
|
|
||||||
std::shared_ptr<ScDisposable> subscribe(const std::string& hook, const DukValue& callback)
|
std::shared_ptr<ScDisposable> subscribe(const std::string& hook, const DukValue& callback)
|
||||||
{
|
{
|
||||||
|
auto& scriptEngine = GetContext()->GetScriptEngine();
|
||||||
|
auto ctx = scriptEngine.GetContext();
|
||||||
|
|
||||||
auto hookType = GetHookType(hook);
|
auto hookType = GetHookType(hook);
|
||||||
if (hookType == HOOK_TYPE::UNDEFINED)
|
if (hookType == HOOK_TYPE::UNDEFINED)
|
||||||
{
|
{
|
||||||
throw DukException() << "Unknown hook type: " << hook;
|
duk_error(ctx, DUK_ERR_ERROR, "Unknown hook type");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!callback.is_function())
|
if (!callback.is_function())
|
||||||
{
|
{
|
||||||
throw DukException() << "Expected function for callback";
|
duk_error(ctx, DUK_ERR_ERROR, "Expected function for callback");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto owner = _execInfo.GetCurrentPlugin();
|
auto owner = _execInfo.GetCurrentPlugin();
|
||||||
if (owner == nullptr)
|
if (owner == nullptr)
|
||||||
{
|
{
|
||||||
throw DukException() << "Not in a plugin context";
|
duk_error(ctx, DUK_ERR_ERROR, "Not in a plugin context");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cookie = _hookEngine.Subscribe(hookType, owner, callback);
|
auto cookie = _hookEngine.Subscribe(hookType, owner, callback);
|
||||||
|
|||||||
Reference in New Issue
Block a user