diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index 7cf2fa98b4..8d867cd180 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -868,8 +868,9 @@ DukValue ScriptEngine::ExecutePluginCall( return ExecutePluginCall(plugin, func, dukUndefined, args, isGameStateMutable); } +// Must pass plugin by-value, a JS function could destroy the original reference DukValue ScriptEngine::ExecutePluginCall( - const std::shared_ptr& plugin, const DukValue& func, const DukValue& thisValue, const std::vector& args, + std::shared_ptr plugin, const DukValue& func, const DukValue& thisValue, const std::vector& args, bool isGameStateMutable) { DukStackFrame frame(_context); diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index 01633ca8f7..add4c00f99 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -220,8 +220,8 @@ namespace OpenRCT2::Scripting const std::shared_ptr& plugin, const DukValue& func, const std::vector& args, bool isGameStateMutable); DukValue ExecutePluginCall( - const std::shared_ptr& plugin, const DukValue& func, const DukValue& thisValue, - const std::vector& args, bool isGameStateMutable); + std::shared_ptr plugin, const DukValue& func, const DukValue& thisValue, const std::vector& args, + bool isGameStateMutable); void LogPluginInfo(const std::shared_ptr& plugin, std::string_view message);