Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Plugin] Fix incorrect target api when executing custom actions #20778

Conversation

Basssiiie
Copy link
Member

Hello,

This fixes an issue where plugins that use the deprecated custom actions API would get incorrect parameters, because the target api check would return an incorrect version on subsequent calls. Only the first query callback would be executed in the correct context.

This issue would break plugins expecting the parameters from the deprecated API, such as Spacek's MapMover

Plugin snippet to reproduce the issue:

registerPlugin({
	name: 'Test custom action',
	version: '1',
	authors: ['Basssiiie'],
	type: 'remote',
	licence: 'MIT',
	main() {		
		context.registerAction("test.action",
			function(args)
			{
				console.log("callback.query: " + JSON.stringify(args));
				return {};
			},
			function(args)
			{
				console.log("callback.execute: " + JSON.stringify(args));
				return {};
			}
		);
		
		ui.registerMenuItem("Call custom action", function()
		{
			context.executeAction("test.action", { myvalue: "hello world" });
		});
	},
});

Preferred and expected output:

'callback.query: {"myvalue":"hello world"}'
'callback.query: {"myvalue":"hello world"}'
'callback.execute: {"myvalue":"hello world"}'

Problematic output:

'callback.query: {"myvalue":"hello world"}'
'callback.query: {"action":"test.action","args":{"myvalue":"hello world"},"player":-1,"type":80,"isClientOnly":false}'
'callback.execute: {"action":"test.action","args":{"myvalue":"hello world"},"player":-1,"type":80,"isClientOnly":false}

Where the first call is using the old API_VERSION_68_CUSTOM_ACTION_ARGS and the second and third are using the newest API.

The fix was to replace the target API check that gets the target via the scripting engine context, with a check that checks directly with the custom action owner.

I have also quickly tested if any other users of GetTargetApiVersion() were affected, but they seem to be fine and always executed within valid a plugin context.

Thank you for your time.

@Basssiiie Basssiiie force-pushed the fix-plugins-using-deprecated-custom-actions branch from 9fe7aa8 to 0fffa5c Compare September 9, 2023 21:56
@ZehMatt ZehMatt added this to the v0.4.7 milestone Sep 9, 2023
@duncanspumpkin
Copy link
Contributor

You'll need to update the changelog the change is under the wrong version.

@Basssiiie Basssiiie force-pushed the fix-plugins-using-deprecated-custom-actions branch from 0fffa5c to 78a5648 Compare September 10, 2023 20:00
@Basssiiie
Copy link
Member Author

You'll need to update the changelog the change is under the wrong version.

Oh dammit. I'll blame it on the time, it was late. 😅 It should be correct now.

@duncanspumpkin duncanspumpkin merged commit f2c6dcb into OpenRCT2:develop Sep 11, 2023
21 checks passed
krrg pushed a commit to krrg/OpenRCT2 that referenced this pull request Sep 14, 2023
Realsteel89 pushed a commit to Realsteel89/OpenRCT2 that referenced this pull request Oct 10, 2023
Realsteel89 pushed a commit to Realsteel89/OpenRCT2 that referenced this pull request Oct 15, 2023
AT41 pushed a commit to AT41/OpenRCT2 that referenced this pull request Dec 24, 2023
janisozaur added a commit that referenced this pull request Dec 31, 2023
- Feature: [#12078] Add shortcut key for toggling wall slope.
- Feature: [#19919] Add diagonal brakes and diagonal block brakes to most coaster types.
- Feature: [#20141] Add additional track pieces to the Giga Coaster.
- Feature: [#20825] Made setting the game speed a game action.
- Feature: [#20830] Display author field on scenery window.
- Feature: [#20853] [Plugin] Add “BaseTileElement.owner” which is saved in the park file.
- Feature: [objects#257] Re-introduce the RCT1 road, which does not have handrails.
- Feature: [OpenMusic#46] Added Mystic ride music style.
- Feature: [OpenMusic#50] Added Rock style 4 ride music.
- Improved: [objects#261] Add composer credits on all RCT2 music objects.
- Change: [#20790] Default ride price set to free if park charges for entry.
- Change: [#20880] Restore removed default coaster colours.
- Change: [#21102] The money effect will now update even when the game is paused.
- Change: [objects#244] Update sort priorities for expansion scenery groups.
- Change: [objects#256] Use recoloured RCT2 artwork on the Fruity Ices Stall, rather than the (slightly different) RCT1 artwork.
- Fix: [#5677] Balloons pass through the ground and objects.
- Fix: [#12299] Placing ride entrances/exits ignores the Disable Clearance Checks cheat.
- Fix: [#13473] Guests complain that the default Circus price is too high.
- Fix: [#15293] TTF fonts don’t format correctly with OpenGL.
- Fix: [#16453] Tile inspector invisibility shortcut does not use a game action.
- Fix: [#16926] When multiple vehicles are grouped in research, only one of them is unlocked.
- Fix: [#17774] Misplaced/missing land and construction rights tiles in RCT1 & RCT2 scenarios.
- Fix: [#18199] Dots in the game save’s name no longer get truncated.
- Fix: [#19722] “Forbid tree removal” restriction doesn’t forbid removal of large scenery tree items.
- Fix: [#20253] Crash when displaying a Lay-Down RC’s half loop.
- Fix: [#20356] Cannot set tertiary colour on small scenery.
- Fix: [#20624] Scrolling text glitches after language is changed.
- Fix: [#20679] Android: game crashes at launch.
- Fix: [#20737] Spent money in player window underflows when getting refunds.
- Fix: [#20747] Staff speed cheat not applying to newly hired staff, UI not showing the current applied speed.
- Fix: [#20778] [Plugin] Incorrect target api when executing custom actions.
- Fix: [#20807] Tertiary colour not copied with small scenery.
- Fix: [#20964] Crash when player connects to server with a group assigned that no longer exists.
- Fix: [#20995] TTF fonts don’t support hinting, outlines, or insets with OpenGL.
- Fix: [#21042] Peeps don’t render properly in S4 parks.
- Fix: [objects#246, objects#248] Some objects are incorrectly marked as originating from RCT1.
- Fix: [objects#260] Submarine Ride has its capacity listed incorrectly.
KatieZeldaKat pushed a commit to KatieZeldaKat/OpenRCT2 that referenced this pull request Jan 2, 2024
- Feature: [OpenRCT2#12078] Add shortcut key for toggling wall slope.
- Feature: [OpenRCT2#19919] Add diagonal brakes and diagonal block brakes to most coaster types.
- Feature: [OpenRCT2#20141] Add additional track pieces to the Giga Coaster.
- Feature: [OpenRCT2#20825] Made setting the game speed a game action.
- Feature: [OpenRCT2#20830] Display author field on scenery window.
- Feature: [OpenRCT2#20853] [Plugin] Add “BaseTileElement.owner” which is saved in the park file.
- Feature: [objects#257] Re-introduce the RCT1 road, which does not have handrails.
- Feature: [OpenMusic#46] Added Mystic ride music style.
- Feature: [OpenMusic#50] Added Rock style 4 ride music.
- Improved: [objects#261] Add composer credits on all RCT2 music objects.
- Change: [OpenRCT2#20790] Default ride price set to free if park charges for entry.
- Change: [OpenRCT2#20880] Restore removed default coaster colours.
- Change: [OpenRCT2#21102] The money effect will now update even when the game is paused.
- Change: [objects#244] Update sort priorities for expansion scenery groups.
- Change: [objects#256] Use recoloured RCT2 artwork on the Fruity Ices Stall, rather than the (slightly different) RCT1 artwork.
- Fix: [OpenRCT2#5677] Balloons pass through the ground and objects.
- Fix: [OpenRCT2#12299] Placing ride entrances/exits ignores the Disable Clearance Checks cheat.
- Fix: [OpenRCT2#13473] Guests complain that the default Circus price is too high.
- Fix: [OpenRCT2#15293] TTF fonts don’t format correctly with OpenGL.
- Fix: [OpenRCT2#16453] Tile inspector invisibility shortcut does not use a game action.
- Fix: [OpenRCT2#16926] When multiple vehicles are grouped in research, only one of them is unlocked.
- Fix: [OpenRCT2#17774] Misplaced/missing land and construction rights tiles in RCT1 & RCT2 scenarios.
- Fix: [OpenRCT2#18199] Dots in the game save’s name no longer get truncated.
- Fix: [OpenRCT2#19722] “Forbid tree removal” restriction doesn’t forbid removal of large scenery tree items.
- Fix: [OpenRCT2#20253] Crash when displaying a Lay-Down RC’s half loop.
- Fix: [OpenRCT2#20356] Cannot set tertiary colour on small scenery.
- Fix: [OpenRCT2#20624] Scrolling text glitches after language is changed.
- Fix: [OpenRCT2#20679] Android: game crashes at launch.
- Fix: [OpenRCT2#20737] Spent money in player window underflows when getting refunds.
- Fix: [OpenRCT2#20747] Staff speed cheat not applying to newly hired staff, UI not showing the current applied speed.
- Fix: [OpenRCT2#20778] [Plugin] Incorrect target api when executing custom actions.
- Fix: [OpenRCT2#20807] Tertiary colour not copied with small scenery.
- Fix: [OpenRCT2#20964] Crash when player connects to server with a group assigned that no longer exists.
- Fix: [OpenRCT2#20995] TTF fonts don’t support hinting, outlines, or insets with OpenGL.
- Fix: [OpenRCT2#21042] Peeps don’t render properly in S4 parks.
- Fix: [objects#246, objects#248] Some objects are incorrectly marked as originating from RCT1.
- Fix: [objects#260] Submarine Ride has its capacity listed incorrectly.
CorySanin added a commit to CorySanin/OpenRCT2 that referenced this pull request Feb 4, 2024
Release v0.4.7

- Feature: [OpenRCT2#12078] Add shortcut key for toggling wall slope.
- Feature: [OpenRCT2#19919] Add diagonal brakes and diagonal block brakes to most coaster types.
- Feature: [OpenRCT2#20141] Add additional track pieces to the Giga Coaster.
- Feature: [OpenRCT2#20825] Made setting the game speed a game action.
- Feature: [OpenRCT2#20830] Display author field on scenery window.
- Feature: [OpenRCT2#20853] [Plugin] Add “BaseTileElement.owner” which is saved in the park file.
- Feature: [objects#257] Re-introduce the RCT1 road, which does not have handrails.
- Feature: [OpenMusic#46] Added Mystic ride music style.
- Feature: [OpenMusic#50] Added Rock style 4 ride music.
- Improved: [objects#261] Add composer credits on all RCT2 music objects.
- Change: [OpenRCT2#20790] Default ride price set to free if park charges for entry.
- Change: [OpenRCT2#20880] Restore removed default coaster colours.
- Change: [OpenRCT2#21102] The money effect will now update even when the game is paused.
- Change: [objects#244] Update sort priorities for expansion scenery groups.
- Change: [objects#256] Use recoloured RCT2 artwork on the Fruity Ices Stall, rather than the (slightly different) RCT1 artwork.
- Fix: [OpenRCT2#5677] Balloons pass through the ground and objects.
- Fix: [OpenRCT2#12299] Placing ride entrances/exits ignores the Disable Clearance Checks cheat.
- Fix: [OpenRCT2#13473] Guests complain that the default Circus price is too high.
- Fix: [OpenRCT2#15293] TTF fonts don’t format correctly with OpenGL.
- Fix: [OpenRCT2#16453] Tile inspector invisibility shortcut does not use a game action.
- Fix: [OpenRCT2#16926] When multiple vehicles are grouped in research, only one of them is unlocked.
- Fix: [OpenRCT2#17774] Misplaced/missing land and construction rights tiles in RCT1 & RCT2 scenarios.
- Fix: [OpenRCT2#18199] Dots in the game save’s name no longer get truncated.
- Fix: [OpenRCT2#19722] “Forbid tree removal” restriction doesn’t forbid removal of large scenery tree items.
- Fix: [OpenRCT2#20253] Crash when displaying a Lay-Down RC’s half loop.
- Fix: [OpenRCT2#20356] Cannot set tertiary colour on small scenery.
- Fix: [OpenRCT2#20624] Scrolling text glitches after language is changed.
- Fix: [OpenRCT2#20679] Android: game crashes at launch.
- Fix: [OpenRCT2#20737] Spent money in player window underflows when getting refunds.
- Fix: [OpenRCT2#20747] Staff speed cheat not applying to newly hired staff, UI not showing the current applied speed.
- Fix: [OpenRCT2#20778] [Plugin] Incorrect target api when executing custom actions.
- Fix: [OpenRCT2#20807] Tertiary colour not copied with small scenery.
- Fix: [OpenRCT2#20964] Crash when player connects to server with a group assigned that no longer exists.
- Fix: [OpenRCT2#20995] TTF fonts don’t support hinting, outlines, or insets with OpenGL.
- Fix: [OpenRCT2#21042] Peeps don’t render properly in S4 parks.
- Fix: [objects#246, objects#248] Some objects are incorrectly marked as originating from RCT1.
- Fix: [objects#260] Submarine Ride has its capacity listed incorrectly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants