diff --git a/distribution/openrct2.d.ts b/distribution/openrct2.d.ts index b873a99b03..6c04404802 100644 --- a/distribution/openrct2.d.ts +++ b/distribution/openrct2.d.ts @@ -297,6 +297,7 @@ declare global { readonly player: number; readonly type: string; readonly isClientOnly: boolean; + readonly args: object; result: GameActionResult; } @@ -313,28 +314,6 @@ declare global { readonly ride: number; } - interface RideCreateActionEventArgs extends GameActionEventArgs { - readonly rideType: number; - readonly rideObject: number; - result: RideCreateGameActionResult; - } - - interface SmallSceneryPlaceEventArgs extends GameActionEventArgs { - readonly x: number; - readonly y: number; - readonly z: number; - readonly direction: number; - readonly quadrant: number; - readonly object: number; - readonly primaryColour: number; - readonly secondaryColour: number; - } - - interface GuestSetNameActionEventArgs extends GameActionEventArgs { - readonly id: number; - readonly name: number; - } - interface NetworkEventArgs { readonly player: number; } diff --git a/src/openrct2/actions/CustomAction.hpp b/src/openrct2/actions/CustomAction.hpp index 3419061a72..0d4b975944 100644 --- a/src/openrct2/actions/CustomAction.hpp +++ b/src/openrct2/actions/CustomAction.hpp @@ -29,6 +29,16 @@ public: { } + std::string GetId() const + { + return _id; + } + + std::string GetJson() const + { + return _json; + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index a883485c06..3a86c08890 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -148,6 +148,10 @@ class GameActionParameterVisitor public: virtual ~GameActionParameterVisitor() = default; + virtual void Visit(const std::string_view& name, bool& param) + { + } + virtual void Visit(const std::string_view& name, int32_t& param) { } @@ -156,6 +160,12 @@ public: { } + void Visit(CoordsXY& param) + { + Visit("x", param.x); + Visit("y", param.y); + } + void Visit(CoordsXYZD& param) { Visit("x", param.x); @@ -171,6 +181,11 @@ public: Visit(name, value); param = static_cast(value); } + + template void Visit(const std::string_view& name, NetworkObjectId_t& param) + { + Visit(name, param.id); + } }; struct GameAction diff --git a/src/openrct2/actions/GuestSetNameAction.hpp b/src/openrct2/actions/GuestSetNameAction.hpp index 57d85e0788..fbf295849e 100644 --- a/src/openrct2/actions/GuestSetNameAction.hpp +++ b/src/openrct2/actions/GuestSetNameAction.hpp @@ -39,7 +39,7 @@ public: void AcceptParameters(GameActionParameterVisitor & visitor) override { - visitor.Visit("id", _spriteIndex); + visitor.Visit("peep", _spriteIndex); visitor.Visit("name", _name); } diff --git a/src/openrct2/actions/MazePlaceTrackAction.hpp b/src/openrct2/actions/MazePlaceTrackAction.hpp index f8931d81d0..3197b634c4 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.hpp +++ b/src/openrct2/actions/MazePlaceTrackAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -30,6 +30,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("ride", _rideIndex); + visitor.Visit("mazeEntry", _mazeEntry); + } + void Serialise(DataSerialiser & stream) override { GameAction::Serialise(stream); diff --git a/src/openrct2/actions/MazeSetTrackAction.hpp b/src/openrct2/actions/MazeSetTrackAction.hpp index ed4e3698dd..8b9fa7b102 100644 --- a/src/openrct2/actions/MazeSetTrackAction.hpp +++ b/src/openrct2/actions/MazeSetTrackAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -67,6 +67,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("ride", _rideIndex); + visitor.Visit("mode", _mode); + visitor.Visit("isInitialPlacement", _initialPlacement); + } + void Serialise(DataSerialiser & stream) override { GameAction::Serialise(stream); diff --git a/src/openrct2/actions/RideDemolishAction.hpp b/src/openrct2/actions/RideDemolishAction.hpp index 53612e2a72..0bc5de3bef 100644 --- a/src/openrct2/actions/RideDemolishAction.hpp +++ b/src/openrct2/actions/RideDemolishAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -45,6 +45,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("modifyType", _modifyType); + } + uint32_t GetCooldownTime() const override { return 1000; diff --git a/src/openrct2/actions/RideEntranceExitPlaceAction.hpp b/src/openrct2/actions/RideEntranceExitPlaceAction.hpp index 5118f61a79..da7a5659e6 100644 --- a/src/openrct2/actions/RideEntranceExitPlaceAction.hpp +++ b/src/openrct2/actions/RideEntranceExitPlaceAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -40,6 +40,15 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("direction", _direction); + visitor.Visit("ride", _rideIndex); + visitor.Visit("station", _stationNum); + visitor.Visit("isExit", _isExit); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/RideEntranceExitRemoveAction.hpp b/src/openrct2/actions/RideEntranceExitRemoveAction.hpp index 418c802791..235d632ec1 100644 --- a/src/openrct2/actions/RideEntranceExitRemoveAction.hpp +++ b/src/openrct2/actions/RideEntranceExitRemoveAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -33,6 +33,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("ride", _rideIndex); + visitor.Visit("station", _stationNum); + visitor.Visit("isExit", _isExit); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/RideSetAppearanceAction.hpp b/src/openrct2/actions/RideSetAppearanceAction.hpp index 480c10a33c..48a5dbb0ee 100644 --- a/src/openrct2/actions/RideSetAppearanceAction.hpp +++ b/src/openrct2/actions/RideSetAppearanceAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -55,6 +55,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("type", _type); + visitor.Visit("value", _value); + visitor.Visit("index", _index); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetColourScheme.hpp b/src/openrct2/actions/RideSetColourScheme.hpp index ef3f3524cb..ac0c798b4a 100644 --- a/src/openrct2/actions/RideSetColourScheme.hpp +++ b/src/openrct2/actions/RideSetColourScheme.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -37,6 +37,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("trackType", _trackType); + visitor.Visit("colourScheme", _newColourScheme); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetName.hpp b/src/openrct2/actions/RideSetName.hpp index cfb73dda81..1f12d3aba7 100644 --- a/src/openrct2/actions/RideSetName.hpp +++ b/src/openrct2/actions/RideSetName.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -38,6 +38,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("name", _name); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetPriceAction.hpp b/src/openrct2/actions/RideSetPriceAction.hpp index 968b6a8403..b61830f7a8 100644 --- a/src/openrct2/actions/RideSetPriceAction.hpp +++ b/src/openrct2/actions/RideSetPriceAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -41,6 +41,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("price", _price); + visitor.Visit("isPrimaryPrice", _primaryPrice); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetSetting.hpp b/src/openrct2/actions/RideSetSetting.hpp index 097d0b37fc..ec90231c0a 100644 --- a/src/openrct2/actions/RideSetSetting.hpp +++ b/src/openrct2/actions/RideSetSetting.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -46,6 +46,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("setting", _setting); + visitor.Visit("value", _value); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetStatus.hpp b/src/openrct2/actions/RideSetStatus.hpp index 2d6a5e61d8..15b5fa716a 100644 --- a/src/openrct2/actions/RideSetStatus.hpp +++ b/src/openrct2/actions/RideSetStatus.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -46,6 +46,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("status", _status); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/RideSetVehiclesAction.hpp b/src/openrct2/actions/RideSetVehiclesAction.hpp index 299a37f527..8044223f70 100644 --- a/src/openrct2/actions/RideSetVehiclesAction.hpp +++ b/src/openrct2/actions/RideSetVehiclesAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -57,6 +57,14 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit("ride", _rideIndex); + visitor.Visit("type", _type); + visitor.Visit("value", _value); + visitor.Visit("colour", _colour); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/actions/TrackDesignAction.h b/src/openrct2/actions/TrackDesignAction.h index 2206959bbc..a5efc102d3 100644 --- a/src/openrct2/actions/TrackDesignAction.h +++ b/src/openrct2/actions/TrackDesignAction.h @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -50,6 +50,12 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + // TODO visit the track design (it has a lot of sub fields) + } + uint16_t GetActionFlags() const override { return GameActionBase::GetActionFlags(); diff --git a/src/openrct2/actions/TrackPlaceAction.hpp b/src/openrct2/actions/TrackPlaceAction.hpp index ef24a56b4d..41b34a2278 100644 --- a/src/openrct2/actions/TrackPlaceAction.hpp +++ b/src/openrct2/actions/TrackPlaceAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -74,6 +74,18 @@ public: _origin.direction &= 3; } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_origin); + visitor.Visit("ride", _rideIndex); + visitor.Visit("trackType", _trackType); + visitor.Visit("brakeSpeed", _brakeSpeed); + visitor.Visit("colour", _colour); + visitor.Visit("seatRotation", _seatRotation); + visitor.Visit("trackPlaceFlags", _trackPlaceFlags); + visitor.Visit("isFromTrackDesign", _fromTrackDesign); + } + uint16_t GetActionFlags() const override final { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/TrackRemoveAction.hpp b/src/openrct2/actions/TrackRemoveAction.hpp index a475e1b933..6c6193dd07 100644 --- a/src/openrct2/actions/TrackRemoveAction.hpp +++ b/src/openrct2/actions/TrackRemoveAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -39,6 +39,13 @@ public: _origin.direction &= 3; } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_origin); + visitor.Visit("trackType", _trackType); + visitor.Visit("sequence", _sequence); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags(); diff --git a/src/openrct2/actions/TrackSetBrakeSpeedAction.hpp b/src/openrct2/actions/TrackSetBrakeSpeedAction.hpp index 4764542fd6..c7bb3a5b55 100644 --- a/src/openrct2/actions/TrackSetBrakeSpeedAction.hpp +++ b/src/openrct2/actions/TrackSetBrakeSpeedAction.hpp @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014-2019 OpenRCT2 developers + * Copyright (c) 2014-2020 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 @@ -28,6 +28,13 @@ public: { } + void AcceptParameters(GameActionParameterVisitor & visitor) override + { + visitor.Visit(_loc); + visitor.Visit("trackType", _trackType); + visitor.Visit("brakeSpeed", _brakeSpeed); + } + uint16_t GetActionFlags() const override { return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED; diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index a1bae7e7ff..fdb7f3dbec 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -900,6 +900,11 @@ public: { } + void Visit(const std::string_view& name, bool& param) override + { + param = _dukValue[name].as_bool(); + } + void Visit(const std::string_view& name, int32_t& param) override { param = _dukValue[name].as_int(); @@ -922,6 +927,12 @@ public: { } + void Visit(const std::string_view& name, bool& param) override + { + std::string szName(name); + _dukObject.Set(szName.c_str(), param); + } + void Visit(const std::string_view& name, int32_t& param) override { std::string szName(name); @@ -935,6 +946,48 @@ public: } }; +const static std::unordered_map ActionNameToType = { + { "guestsetname", GAME_COMMAND_SET_GUEST_NAME }, + { "parksetname", GAME_COMMAND_SET_PARK_NAME }, + { "ridecreate", GAME_COMMAND_CREATE_RIDE }, + { "ridedemolish", GAME_COMMAND_DEMOLISH_RIDE }, + { "rideentranceexitplace", GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT }, + { "rideentranceexitremove", GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT }, + { "ridesetappearance", GAME_COMMAND_SET_RIDE_APPEARANCE }, + { "ridesetcolourscheme.hpp", GAME_COMMAND_SET_COLOUR_SCHEME }, + { "ridesetname", GAME_COMMAND_SET_RIDE_NAME }, + { "ridesetprice", GAME_COMMAND_SET_RIDE_PRICE }, + { "ridesetsetting", GAME_COMMAND_SET_RIDE_SETTING }, + { "ridesetstatus", GAME_COMMAND_SET_RIDE_STATUS }, + { "ridesetvehicles", GAME_COMMAND_SET_RIDE_VEHICLES }, + { "smallsceneryplace", GAME_COMMAND_PLACE_SCENERY }, + { "trackdesign", GAME_COMMAND_PLACE_TRACK_DESIGN }, + { "trackplace", GAME_COMMAND_PLACE_TRACK }, + { "trackremove", GAME_COMMAND_REMOVE_TRACK }, + { "tracksetbrakespeed", GAME_COMMAND_SET_BRAKES_SPEED }, +}; + +static std::string GetActionName(uint32_t commandId) +{ + auto it = std::find_if( + ActionNameToType.begin(), ActionNameToType.end(), [commandId](const auto& kvp) { return kvp.second == commandId; }); + if (it != ActionNameToType.end()) + { + return it->first; + } + return {}; +} + +static std::unique_ptr CreateGameActionFromActionId(const std::string& actionid) +{ + auto result = ActionNameToType.find(actionid); + if (result != ActionNameToType.end()) + { + return GameActions::Create(result->second); + } + return nullptr; +} + void ScriptEngine::RunGameActionHooks(const GameAction& action, std::unique_ptr& result, bool isExecute) { DukStackFrame frame(_context); @@ -943,15 +996,44 @@ void ScriptEngine::RunGameActionHooks(const GameAction& action, std::unique_ptr< if (_hookEngine.HasSubscriptions(hookType)) { DukObject obj(_context); + + auto actionId = action.GetType(); + if (action.GetType() == GAME_COMMAND_CUSTOM) + { + auto customAction = static_cast(action); + obj.Set("action", customAction.GetId()); + + auto dukArgs = DuktapeTryParseJson(_context, customAction.GetJson()); + if (dukArgs) + { + obj.Set("args", *dukArgs); + } + else + { + DukObject args(_context); + obj.Set("args", args.Take()); + } + } + else + { + auto actionName = GetActionName(actionId); + if (!actionName.empty()) + { + obj.Set("action", actionName); + } + + DukObject args(_context); + DukFromGameActionParameterVisitor visitor(args); + const_cast(action).AcceptParameters(visitor); + obj.Set("args", args.Take()); + } + obj.Set("player", action.GetPlayer()); - obj.Set("type", action.GetType()); + obj.Set("type", actionId); auto flags = action.GetActionFlags(); obj.Set("isClientOnly", (flags & GA_FLAGS::CLIENT_ONLY) != 0); - DukFromGameActionParameterVisitor visitor(obj); - const_cast(action).AcceptParameters(visitor); - obj.Set("result", GameActionResultToDuk(action, result)); auto dukEventArgs = obj.Take(); @@ -974,22 +1056,6 @@ void ScriptEngine::RunGameActionHooks(const GameAction& action, std::unique_ptr< } } -static std::unique_ptr CreateGameActionFromActionId(const std::string& actionid) -{ - const static std::unordered_map ActionNameToType = { - { "parksetname", GAME_COMMAND_SET_PARK_NAME }, - { "smallsceneryplace", GAME_COMMAND_PLACE_SCENERY }, - { "guestsetname", GAME_COMMAND_SET_GUEST_NAME }, - }; - - auto result = ActionNameToType.find(actionid); - if (result != ActionNameToType.end()) - { - return GameActions::Create(result->second); - } - return nullptr; -} - std::unique_ptr ScriptEngine::CreateGameAction(const std::string& actionid, const DukValue& args) { auto action = CreateGameActionFromActionId(actionid);