diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 85dfc09bef..05a1d6d20b 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -7,6 +7,7 @@ - Feature: [#21893, #22065] On launch, the game now indicates what system is being initialised. - Feature: [#21913] [Plugin] Allow precise and safe control of peep animations. - Feature: [#22046] [Plugin] Add interface for crashed vehicle particle. +- Feature: [#22085] [Plugin] The result of actions that create banners now includes the bannerIndex. - Feature: [#22087] [Plugin] Expose guests’ favourite rides to the plugin API. - Improved: [#19870] Allow using new colours in UI themes. - Improved: [#21853] Dropdowns now automatically use multiple columns if they are too tall for the screen. diff --git a/distribution/openrct2.d.ts b/distribution/openrct2.d.ts index 9f55127706..b9f93dabec 100644 --- a/distribution/openrct2.d.ts +++ b/distribution/openrct2.d.ts @@ -317,7 +317,7 @@ declare global { queryAction(action: string, args: object, callback?: (result: GameActionResult) => void): void; queryAction(action: ActionType, args: object, callback?: (result: GameActionResult) => void): void; queryAction(action: "balloonpress", args: BalloonPressArgs, callback?: (result: GameActionResult) => void): void; - queryAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: GameActionResult) => void): void; + queryAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; queryAction(action: "bannerremove", args: BannerRemoveArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "bannersetcolour", args: BannerSetColourArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "bannersetname", args: BannerSetNameArgs, callback?: (result: GameActionResult) => void): void; @@ -339,7 +339,7 @@ declare global { queryAction(action: "landsetheight", args: LandSetHeightArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "landsetrights", args: LandSetRightsArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "landsmooth", args: LandSmoothArgs, callback?: (result: GameActionResult) => void): void; - queryAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: GameActionResult) => void): void; + queryAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; queryAction(action: "largesceneryremove", args: LargeSceneryRemoveArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "largescenerysetcolour", args: LargeScenerySetColourArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "loadorquit", args: LoadOrQuitArgs, callback?: (result: GameActionResult) => void): void; @@ -392,7 +392,7 @@ declare global { queryAction(action: "trackplace", args: TrackPlaceArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "trackremove", args: TrackRemoveArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "tracksetbrakespeed", args: TrackSetBrakeSpeedArgs, callback?: (result: GameActionResult) => void): void; - queryAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: GameActionResult) => void): void; + queryAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; queryAction(action: "wallremove", args: WallRemoveArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "wallsetcolour", args: WallSetColourArgs, callback?: (result: GameActionResult) => void): void; queryAction(action: "waterlower", args: WaterLowerArgs, callback?: (result: GameActionResult) => void): void; @@ -409,7 +409,7 @@ declare global { executeAction(action: string, args: object, callback?: (result: GameActionResult) => void): void; executeAction(action: ActionType, args: object, callback?: (result: GameActionResult) => void): void; executeAction(action: "balloonpress", args: BalloonPressArgs, callback?: (result: GameActionResult) => void): void; - executeAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: GameActionResult) => void): void; + executeAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; executeAction(action: "bannerremove", args: BannerRemoveArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "bannersetcolour", args: BannerSetColourArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "bannersetname", args: BannerSetNameArgs, callback?: (result: GameActionResult) => void): void; @@ -431,7 +431,7 @@ declare global { executeAction(action: "landsetheight", args: LandSetHeightArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "landsetrights", args: LandSetRightsArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "landsmooth", args: LandSmoothArgs, callback?: (result: GameActionResult) => void): void; - executeAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: GameActionResult) => void): void; + executeAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; executeAction(action: "largesceneryremove", args: LargeSceneryRemoveArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "largescenerysetcolour", args: LargeScenerySetColourArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "loadorquit", args: LoadOrQuitArgs, callback?: (result: GameActionResult) => void): void; @@ -484,7 +484,7 @@ declare global { executeAction(action: "trackplace", args: TrackPlaceArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "trackremove", args: TrackRemoveArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "tracksetbrakespeed", args: TrackSetBrakeSpeedArgs, callback?: (result: GameActionResult) => void): void; - executeAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: GameActionResult) => void): void; + executeAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void; executeAction(action: "wallremove", args: WallRemoveArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "wallsetcolour", args: WallSetColourArgs, callback?: (result: GameActionResult) => void): void; executeAction(action: "waterlower", args: WaterLowerArgs, callback?: (result: GameActionResult) => void): void; @@ -1343,6 +1343,10 @@ declare global { expenditureType?: ExpenditureType; } + interface BannerCreateActionResult extends GameActionResult { + readonly bannerIndex?: number; + } + interface RideCreateActionResult extends GameActionResult { readonly ride?: number; } diff --git a/src/openrct2/actions/BannerPlaceAction.cpp b/src/openrct2/actions/BannerPlaceAction.cpp index 19830294b6..1e5e736392 100644 --- a/src/openrct2/actions/BannerPlaceAction.cpp +++ b/src/openrct2/actions/BannerPlaceAction.cpp @@ -103,6 +103,7 @@ GameActions::Result BannerPlaceAction::Query() const GameActions::Status::InvalidParameters, STR_CANT_POSITION_THIS_HERE, STR_ERR_BANNER_ELEMENT_NOT_FOUND); } res.Cost = bannerEntry->price; + res.SetData(BannerPlaceActionResult{}); return res; } diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index 919c7157f0..0ae1e48a2c 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -12,10 +12,13 @@ # include "ScriptEngine.h" # include "../PlatformEnvironment.h" +# include "../actions/BannerPlaceAction.h" # include "../actions/CustomAction.h" # include "../actions/GameAction.h" +# include "../actions/LargeSceneryPlaceAction.h" # include "../actions/RideCreateAction.h" # include "../actions/StaffHireNewAction.h" +# include "../actions/WallPlaceAction.h" # include "../config/Config.h" # include "../core/EnumMap.hpp" # include "../core/File.h" @@ -1222,6 +1225,26 @@ DukValue ScriptEngine::GameActionResultToDuk(const GameAction& action, const Gam } } } + // BannerPlaceAction, LargeSceneryPlaceAction, WallPlaceAction + auto bannerId = BannerIndex::GetNull(); + switch (action.GetType()) + { + case GameCommand::PlaceBanner: + bannerId = result.GetData().bannerId; + break; + case GameCommand::PlaceLargeScenery: + bannerId = result.GetData().bannerId; + break; + case GameCommand::PlaceWall: + bannerId = result.GetData().BannerId; + break; + default: + break; + } + if (!bannerId.IsNull()) + { + obj.Set("bannerIndex", bannerId.ToUnderlying()); + } return obj.Take(); } diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index caea02ad5e..753e983f13 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -47,7 +47,7 @@ namespace OpenRCT2 namespace OpenRCT2::Scripting { - static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 91; + static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 92; // Versions marking breaking changes. static constexpr int32_t API_VERSION_33_PEEP_DEPRECATION = 33;