From 8bf3689d42887284331f0aad43633bf8d5c902bf Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Mon, 18 Feb 2019 12:04:02 +0000 Subject: [PATCH] Introduce flag to prevent ghosts in multiplayer Fix error message arguments Remove dead code. Fix clang format --- src/openrct2-ui/windows/RideConstruction.cpp | 8 +++++++- src/openrct2/actions/TrackPlaceAction.hpp | 19 +++++++------------ src/openrct2/ride/Ride.h | 1 + src/openrct2/windows/_legacy.cpp | 3 +-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 32914ddbba..db674b7b53 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -1773,6 +1773,11 @@ static void window_ride_construction_construct(rct_window* w) } audio_play_sound_at_location(SOUND_PLACE_ITEM, x, y, z); + if (network_get_mode() != NETWORK_MODE_NONE) + { + _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_TRACK_PLACE_ACTION_QUEUED; + } + if (gTrackGroundFlags & TRACK_ELEMENT_LOCATION_IS_UNDERGROUND) { viewport_set_visibility(1); @@ -2549,7 +2554,8 @@ void sub_6C94D8() { case RIDE_CONSTRUCTION_STATE_FRONT: case RIDE_CONSTRUCTION_STATE_BACK: - if (!(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK)) + if (!(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) + && !(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK_PLACE_ACTION_QUEUED)) { if (window_ride_construction_update_state( &type, &direction, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, nullptr)) diff --git a/src/openrct2/actions/TrackPlaceAction.hpp b/src/openrct2/actions/TrackPlaceAction.hpp index 208c110851..c4816db738 100644 --- a/src/openrct2/actions/TrackPlaceAction.hpp +++ b/src/openrct2/actions/TrackPlaceAction.hpp @@ -123,12 +123,7 @@ public: } } - const uint8_t(*wallEdges)[16]; - if (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) - { - wallEdges = &FlatRideTrackSequenceElementAllowedWallEdges[_trackType]; - } - else + if (!(rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE)) { if (_trackType == TRACK_ELEM_ON_RIDE_PHOTO) { @@ -159,8 +154,6 @@ public: GA_ERROR::DISALLOWED, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_TOO_STEEP_FOR_LIFT_HILL); } } - - wallEdges = &TrackSequenceElementAllowedWallEdges[_trackType]; } money32 cost = 0; @@ -313,7 +306,8 @@ public: crossingMode)) { return std::make_unique( - GA_ERROR::NO_CLEARANCE, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText); + GA_ERROR::NO_CLEARANCE, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText, + gCommonFormatArgs); } } @@ -632,11 +626,12 @@ public: ? CREATE_CROSSING_MODE_TRACK_OVER_PATH : CREATE_CROSSING_MODE_NONE; if (!map_can_construct_with_clear_at( - tileCoords.x, tileCoords.y, baseZ, clearanceZ, &map_place_non_scenery_clear_func, bl, GetFlags() | GAME_COMMAND_FLAG_APPLY, &cost, - crossingMode)) + tileCoords.x, tileCoords.y, baseZ, clearanceZ, &map_place_non_scenery_clear_func, bl, + GetFlags() | GAME_COMMAND_FLAG_APPLY, &cost, crossingMode)) { return std::make_unique( - GA_ERROR::NO_CLEARANCE, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText); + GA_ERROR::NO_CLEARANCE, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, gGameCommandErrorText, + gCommonFormatArgs); } } diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 915e5621d6..a053e4b82c 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -883,6 +883,7 @@ enum TRACK_SELECTION_FLAG_TRACK = 1 << 1, TRACK_SELECTION_FLAG_ENTRANCE_OR_EXIT = 1 << 2, TRACK_SELECTION_FLAG_RECHECK = 1 << 3, + TRACK_SELECTION_FLAG_TRACK_PLACE_ACTION_QUEUED = 1 << 4, }; enum diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index 3f9f2bf8f7..3e5a208deb 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -176,8 +176,7 @@ money32 place_provisional_track_piece( else { auto trackPlaceAction = TrackPlaceAction( - rideIndex, trackType, { x, y, z, static_cast(trackDirection) }, 0, - 0, 0, liftHillAndAlternativeState); + rideIndex, trackType, { x, y, z, static_cast(trackDirection) }, 0, 0, 0, liftHillAndAlternativeState); trackPlaceAction.SetFlags(GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST); // This command must not be sent over the network auto res = GameActions::Execute(&trackPlaceAction);