diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index a866ede174..3474a571e4 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3984,66 +3984,23 @@ STR_5642 :Group: STR_5643 :Add Group STR_5644 :Remove Group STR_5645 :Chat -STR_5646 :Set Ride Appearance -STR_5647 :Pause/Unpause -STR_5648 :Place Track -STR_5649 :Remove Track -STR_5650 :Create Ride -STR_5651 :Remove Ride -STR_5652 :Set Ride Status -STR_5653 :Set Ride Vehicles -STR_5654 :Set Ride Name -STR_5655 :Set Ride Setting -STR_5656 :Place Ride Entrance/Exit -STR_5657 :Remove Ride Entrance/Exit -STR_5658 :Remove Scenery -STR_5659 :Place Scenery -STR_5660 :Place Path -STR_5661 :Place Path From Track -STR_5662 :Remove Path -STR_5663 :Change Surface Style -STR_5664 :Set Ride Price -STR_5665 :Set Peep Name -STR_5666 :Raise Land -STR_5667 :Lower Land -STR_5668 :Smooth Land -STR_5669 :Raise Water -STR_5670 :Lower Water -STR_5671 :Set Brakes Speed -STR_5672 :Hire New Staff -STR_5673 :Set Staff Patrol -STR_5674 :Fire Staff -STR_5675 :Set Staff Order -STR_5676 :Set Park Name -STR_5677 :Open/Close Park -STR_5678 :Buy Land Rights -STR_5679 :Place Park Entrance -STR_5680 :Remove Park Entrance -STR_5681 :Set Maze Track -STR_5682 :Set Park Entrance Fee -STR_5683 :Set Staff Colour -STR_5684 :Place Fence -STR_5685 :Remove Fence -STR_5686 :Place Large Scenery -STR_5687 :Set Current Loan -STR_5688 :Set Research Funding -STR_5689 :Place Track Design -STR_5690 :Start Marketing Campaign -STR_5691 :Place Maze Design -STR_5692 :Place Banner -STR_5693 :Remove Banner -STR_5694 :Set Scenery Colour -STR_5695 :Set Fence Colour -STR_5696 :Set Large Scenery Colour -STR_5697 :Set Banner Colour -STR_5698 :Set Land Ownership -STR_5699 :Clear Scenery -STR_5700 :Set Banner Name -STR_5701 :Set Sign Name -STR_5702 :Set Banner Style -STR_5703 :Set Sign Style -STR_5704 :Set Player Group -STR_5705 :Modify Groups +STR_5646 :Terraform +STR_5647 :Toggle Pause +STR_5648 :Set Water Level +STR_5649 :Create Ride +STR_5650 :Remove Ride +STR_5651 :Build Ride +STR_5652 :Ride Properties +STR_5653 :Scenery +STR_5654 :Path +STR_5655 :Guest +STR_5656 :Staff +STR_5657 :Park Properties +STR_5658 :Park Funding +STR_5659 :Kick Player +STR_5660 :Modify Groups +STR_5661 :Set Player Group +STR_5705 :Can't set to this group STR_5706 :Can't remove group that players belong to STR_5707 :This group cannot be modified STR_5708 :Can't change the group that the host belongs to diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 30c81d22bf..feb3a03cec 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2272,67 +2272,24 @@ enum { STR_REMOVE_GROUP = 5644, STR_ACTION_CHAT = 5645, - STR_ACTION_SET_RIDE_APPEARANCE = 5646, + STR_ACTION_TERRAFORM = 5646, STR_ACTION_TOGGLE_PAUSE = 5647, - STR_ACTION_PLACE_TRACK = 5648, - STR_ACTION_REMOVE_TRACK = 5649, - STR_ACTION_CREATE_RIDE = 5650, - STR_ACTION_REMOVE_RIDE = 5651, - STR_ACTION_SET_RIDE_STATUS = 5652, - STR_ACTION_SET_RIDE_VEHICLES = 5653, - STR_ACTION_SET_RIDE_NAME = 5654, - STR_ACTION_SET_RIDE_SETTING = 5655, - STR_ACTION_PLACE_RIDE_ENTRANCE_EXIT = 5656, - STR_ACTION_REMOVE_RIDE_ENTRANCE_EXIT = 5657, - STR_ACTION_REMOVE_SCENERY = 5658, - STR_ACTION_PLACE_SCENERY = 5659, - STR_ACTION_PLACE_PATH = 5660, - STR_ACTION_PLACE_PATH_FROM_TRACK = 5661, - STR_ACTION_REMOVE_PATH = 5662, - STR_ACTION_CHANGE_SURFACE_STYLE = 5663, - STR_ACTION_SET_RIDE_PRICE = 5664, - STR_ACTION_SET_PEEP_NAME = 5665, - STR_ACTION_RAISE_LAND = 5666, - STR_ACTION_LOWER_LAND = 5667, - STR_ACTION_SMOOTH_LAND = 5668, - STR_ACTION_RAISE_WATER = 5669, - STR_ACTION_LOWER_WATER = 5670, - STR_ACTION_SET_BRAKES_SPEED = 5671, - STR_ACTION_HIRE_NEW_STAFF = 5672, - STR_ACTION_SET_STAFF_PATROL = 5673, - STR_ACTION_FIRE_STAFF = 5674, - STR_ACTION_SET_STAFF_ORDER = 5675, - STR_ACTION_SET_PARK_NAME = 5676, - STR_ACTION_OPEN_CLOSE_PARK = 5677, - STR_ACTION_BUY_LAND_RIGHTS = 5678, - STR_ACTION_PLACE_PARK_ENTRANCE = 5679, - STR_ACTION_REMOVE_PARK_ENTRANCE = 5680, - STR_ACTION_SET_MAZE_TRACK = 5681, - STR_ACTION_SET_PARK_ENTRANCE_FEE = 5682, - STR_ACTION_SET_STAFF_COLOUR = 5683, - STR_ACTION_PLACE_FENCE = 5684, - STR_ACTION_REMOVE_FENCE = 5685, - STR_ACTION_PLACE_LARGE_SCENERY = 5686, - STR_ACTION_SET_CURRENT_LOAN = 5687, - STR_ACTION_SET_RESEARCH_FUNDING = 5688, - STR_ACTION_PLACE_TRACK_DESIGN = 5689, - STR_ACTION_START_MARKETING_CAMPAIGN = 5690, - STR_ACTION_PLACE_MAZE_DESIGN = 5691, - STR_ACTION_PLACE_BANNER = 5692, - STR_ACTION_REMOVE_BANNER = 5693, - STR_ACTION_SET_SCENERY_COLOUR = 5694, - STR_ACTION_SET_FENCE_COLOUR = 5695, - STR_ACTION_SET_LARGE_SCENERY_COLOUR = 5696, - STR_ACTION_SET_BANNER_COLOUR = 5697, - STR_ACTION_SET_LAND_OWNERSHIP = 5698, - STR_ACTION_CLEAR_SCENERY = 5699, - STR_ACTION_SET_BANNER_NAME = 5700, - STR_ACTION_SET_SIGN_NAME = 5701, - STR_ACTION_SET_BANNER_STYLE = 5702, - STR_ACTION_SET_SIGN_STYLE = 5703, - STR_ACTION_SET_PLAYER_GROUP = 5704, - STR_ACTION_MODIFY_GROUPS = 5705, + STR_ACTION_SET_WATER_LEVEL = 5648, + STR_ACTION_CREATE_RIDE = 5649, + STR_ACTION_REMOVE_RIDE = 5650, + STR_ACTION_BUILD_RIDE = 5651, + STR_ACTION_RIDE_PROPERTIES = 5652, + STR_ACTION_SCENERY = 5653, + STR_ACTION_PATH = 5654, + STR_ACTION_GUEST = 5655, + STR_ACTION_STAFF = 5656, + STR_ACTION_PARK_PROPERTIES = 5657, + STR_ACTION_PARK_FUNDING = 5658, + STR_ACTION_KICK_PLAYER = 5659, + STR_ACTION_MODIFY_GROUPS = 5660, + STR_ACTION_SET_PLAYER_GROUP = 5661, + STR_CANT_SET_TO_THIS_GROUP = 5705, STR_CANT_REMOVE_GROUP_THAT_PLAYERS_BELONG_TO = 5706, STR_THIS_GROUP_CANNOT_BE_MODIFIED = 5707, STR_CANT_CHANGE_GROUP_THAT_THE_HOST_BELONGS_TO = 5708, @@ -2341,8 +2298,6 @@ enum { STR_ENTER_NEW_NAME_FOR_THIS_GROUP = 5711, STR_CANT_MODIFY_PERMISSION_THAT_YOU_DO_NOT_HAVE_YOURSELF = 5712, - STR_ACTION_KICK_PLAYER = 5713, - // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/network/network.cpp b/src/network/network.cpp index 7e3e60073b..93c18203a3 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -219,9 +219,16 @@ void NetworkPlayer::AddMoneySpent(money32 cost) window_invalidate_by_number(WC_PLAYER, id); } -int NetworkActions::FindGameCommand(int command) +int NetworkActions::FindCommand(int command) { - auto it = std::find_if(actions.begin(), actions.end(), [&command](NetworkAction const& action) { return action.game_command == command; }); + auto it = std::find_if(actions.begin(), actions.end(), [&command](NetworkAction const& action) { + for (auto it = action.commands.begin(); it != action.commands.end(); it++) { + if ((*it) == command) { + return true; + } + } + return false; + }); if (it != actions.end()) { return it - actions.begin(); } @@ -285,9 +292,9 @@ bool NetworkGroup::CanPerformAction(size_t index) return (actions_allowed[byte] & (1 << bit)) ? true : false; } -bool NetworkGroup::CanPerformGameCommand(int command) +bool NetworkGroup::CanPerformCommand(int command) { - int action = gNetworkActions.FindGameCommand(command); + int action = gNetworkActions.FindCommand(command); if (action != -1) { return CanPerformAction(action); } @@ -566,15 +573,15 @@ bool Network::Init() group_list.push_back(std::move(admin)); std::unique_ptr spectator(new NetworkGroup()); // change to make_unique in c++14 spectator->SetName("Spectator"); - spectator->ToggleActionPermission(0); + spectator->ToggleActionPermission(0); // Chat spectator->id = 1; group_list.push_back(std::move(spectator)); std::unique_ptr user(new NetworkGroup()); // change to make_unique in c++14 user->SetName("User"); user->actions_allowed.fill(0xFF); - user->ToggleActionPermission(59); - user->ToggleActionPermission(60); - user->ToggleActionPermission(61); + user->ToggleActionPermission(14); // Kick Player + user->ToggleActionPermission(15); // Modify Groups + user->ToggleActionPermission(16); // Set Player Group user->id = 2; group_list.push_back(std::move(user)); SetDefaultGroup(1); @@ -1643,10 +1650,8 @@ void Network::Server_Handle_CHAT(NetworkConnection& connection, NetworkPacket& p { if (connection.player) { NetworkGroup* group = GetGroupByID(connection.player->group); - if (group) { - if (!group->CanPerformGameCommand(-1)) { - return; - } + if (!group || (group && !group->CanPerformCommand(-1))) { + return; } } const char* text = packet.ReadString(); @@ -1688,7 +1693,7 @@ void Network::Server_Handle_GAMECMD(NetworkConnection& connection, NetworkPacket // Check if player's group permission allows command to run NetworkGroup* group = GetGroupByID(connection.player->group); - if (group && !group->CanPerformGameCommand(commandCommand)) { + if (!group || (group && !group->CanPerformCommand(commandCommand))) { Server_Send_SHOWERROR(connection, STR_CANT_DO_THIS, STR_PERMISSION_DENIED); return; } @@ -1967,6 +1972,7 @@ void game_command_set_player_group(int* eax, int* ebx, int* ecx, int* edx, int* uint8 playerid = (uint8)*ecx; uint8 groupid = (uint8)*edx; NetworkPlayer* player = gNetwork.GetPlayerByID(playerid); + NetworkGroup* fromgroup = gNetwork.GetGroupByID(game_command_playerid); if (!player) { *ebx = MONEY32_UNDEFINED; return; @@ -1980,6 +1986,11 @@ void game_command_set_player_group(int* eax, int* ebx, int* ecx, int* edx, int* *ebx = MONEY32_UNDEFINED; return; } + if (groupid == 0 && fromgroup && fromgroup->id != 0) { + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_SET_TO_THIS_GROUP; + *ebx = MONEY32_UNDEFINED; + return; + } if (*ebx & GAME_COMMAND_FLAG_APPLY) { player->group = groupid; window_invalidate_by_number(WC_PLAYER, playerid); @@ -2035,14 +2046,12 @@ void game_command_modify_groups(int *eax, int *ebx, int *ecx, int *edx, int *esi } NetworkGroup* mygroup = nullptr; NetworkPlayer* player = gNetwork.GetPlayerByID(game_command_playerid); - if (player) { + if (player && !all) { mygroup = gNetwork.GetGroupByID(player->group); - if (mygroup) { - if (!all && !mygroup->CanPerformAction(index)) { - RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_MODIFY_PERMISSION_THAT_YOU_DO_NOT_HAVE_YOURSELF; - *ebx = MONEY32_UNDEFINED; - return; - } + if (!mygroup || (mygroup && !mygroup->CanPerformAction(index))) { + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_MODIFY_PERMISSION_THAT_YOU_DO_NOT_HAVE_YOURSELF; + *ebx = MONEY32_UNDEFINED; + return; } } if (*ebx & GAME_COMMAND_FLAG_APPLY) { @@ -2096,6 +2105,11 @@ void game_command_modify_groups(int *eax, int *ebx, int *ecx, int *edx, int *esi } }break; case 4:{ // set default group + if (groupid == 0) { + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_SET_TO_THIS_GROUP; + *ebx = MONEY32_UNDEFINED; + return; + } if (*ebx & GAME_COMMAND_FLAG_APPLY) { gNetwork.SetDefaultGroup(groupid); } diff --git a/src/network/network.h b/src/network/network.h index f531dc5688..6af99b102f 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -166,79 +166,31 @@ class NetworkAction { public: rct_string_id name; - int game_command; + std::vector commands; }; class NetworkActions { public: - int FindGameCommand(int command); + int FindCommand(int command); const std::vector actions = { - {STR_ACTION_CHAT, -1}, - {STR_ACTION_SET_RIDE_APPEARANCE, GAME_COMMAND_SET_RIDE_APPEARANCE}, - //{STR_NONE, GAME_COMMAND_SET_LAND_HEIGHT}, - {STR_ACTION_TOGGLE_PAUSE, GAME_COMMAND_TOGGLE_PAUSE}, - {STR_ACTION_PLACE_TRACK, GAME_COMMAND_PLACE_TRACK}, - {STR_ACTION_REMOVE_TRACK, GAME_COMMAND_REMOVE_TRACK}, - //{STR_NONE, GAME_COMMAND_LOAD_OR_QUIT}, - {STR_ACTION_CREATE_RIDE, GAME_COMMAND_CREATE_RIDE}, - {STR_ACTION_REMOVE_RIDE, GAME_COMMAND_DEMOLISH_RIDE}, - {STR_ACTION_SET_RIDE_STATUS, GAME_COMMAND_SET_RIDE_STATUS}, - {STR_ACTION_SET_RIDE_VEHICLES, GAME_COMMAND_SET_RIDE_VEHICLES}, - {STR_ACTION_SET_RIDE_NAME, GAME_COMMAND_SET_RIDE_NAME}, - {STR_ACTION_SET_RIDE_SETTING, GAME_COMMAND_SET_RIDE_SETTING}, - {STR_ACTION_PLACE_RIDE_ENTRANCE_EXIT, GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT}, - {STR_ACTION_REMOVE_RIDE_ENTRANCE_EXIT, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT}, - {STR_ACTION_REMOVE_SCENERY, GAME_COMMAND_REMOVE_SCENERY}, - {STR_ACTION_PLACE_SCENERY, GAME_COMMAND_PLACE_SCENERY}, - //{STR_NONE, GAME_COMMAND_SET_WATER_HEIGHT}, - {STR_ACTION_PLACE_PATH, GAME_COMMAND_PLACE_PATH}, - {STR_ACTION_PLACE_PATH_FROM_TRACK, GAME_COMMAND_PLACE_PATH_FROM_TRACK}, - {STR_ACTION_REMOVE_PATH, GAME_COMMAND_REMOVE_PATH}, - {STR_ACTION_CHANGE_SURFACE_STYLE, GAME_COMMAND_CHANGE_SURFACE_STYLE}, - {STR_ACTION_SET_RIDE_PRICE, GAME_COMMAND_SET_RIDE_PRICE}, - {STR_ACTION_SET_PEEP_NAME, GAME_COMMAND_SET_PEEP_NAME}, - {STR_ACTION_RAISE_LAND, GAME_COMMAND_RAISE_LAND}, - {STR_ACTION_LOWER_LAND, GAME_COMMAND_LOWER_LAND}, - {STR_ACTION_SMOOTH_LAND, GAME_COMMAND_EDIT_LAND_SMOOTH}, - {STR_ACTION_RAISE_WATER, GAME_COMMAND_RAISE_WATER}, - {STR_ACTION_LOWER_WATER, GAME_COMMAND_LOWER_WATER}, - {STR_ACTION_SET_BRAKES_SPEED, GAME_COMMAND_SET_BRAKES_SPEED}, - {STR_ACTION_HIRE_NEW_STAFF, GAME_COMMAND_HIRE_NEW_STAFF_MEMBER}, - {STR_ACTION_SET_STAFF_PATROL, GAME_COMMAND_SET_STAFF_PATROL}, - {STR_ACTION_FIRE_STAFF, GAME_COMMAND_FIRE_STAFF_MEMBER}, - {STR_ACTION_SET_STAFF_ORDER, GAME_COMMAND_SET_STAFF_ORDER}, - {STR_ACTION_SET_PARK_NAME, GAME_COMMAND_SET_PARK_NAME}, - {STR_ACTION_OPEN_CLOSE_PARK, GAME_COMMAND_SET_PARK_OPEN}, - {STR_ACTION_BUY_LAND_RIGHTS, GAME_COMMAND_BUY_LAND_RIGHTS}, - {STR_ACTION_PLACE_PARK_ENTRANCE, GAME_COMMAND_PLACE_PARK_ENTRANCE}, - {STR_ACTION_REMOVE_PARK_ENTRANCE, GAME_COMMAND_REMOVE_PARK_ENTRANCE}, - {STR_ACTION_SET_MAZE_TRACK, GAME_COMMAND_SET_MAZE_TRACK}, - {STR_ACTION_SET_PARK_ENTRANCE_FEE, GAME_COMMAND_SET_PARK_ENTRANCE_FEE}, - {STR_ACTION_SET_STAFF_COLOUR, GAME_COMMAND_SET_STAFF_COLOUR}, - {STR_ACTION_PLACE_FENCE, GAME_COMMAND_PLACE_FENCE}, - {STR_ACTION_REMOVE_FENCE, GAME_COMMAND_REMOVE_FENCE}, - {STR_ACTION_PLACE_LARGE_SCENERY, GAME_COMMAND_PLACE_LARGE_SCENERY}, - {STR_ACTION_SET_CURRENT_LOAN, GAME_COMMAND_SET_CURRENT_LOAN}, - {STR_ACTION_SET_RESEARCH_FUNDING, GAME_COMMAND_SET_RESEARCH_FUNDING}, - {STR_ACTION_PLACE_TRACK_DESIGN, GAME_COMMAND_PLACE_TRACK_DESIGN}, - {STR_ACTION_START_MARKETING_CAMPAIGN, GAME_COMMAND_START_MARKETING_CAMPAIGN}, - {STR_ACTION_PLACE_MAZE_DESIGN, GAME_COMMAND_PLACE_MAZE_DESIGN}, - {STR_ACTION_PLACE_BANNER, GAME_COMMAND_PLACE_BANNER}, - {STR_ACTION_REMOVE_BANNER, GAME_COMMAND_REMOVE_BANNER}, - {STR_ACTION_SET_SCENERY_COLOUR, GAME_COMMAND_SET_SCENERY_COLOUR}, - {STR_ACTION_SET_FENCE_COLOUR, GAME_COMMAND_SET_FENCE_COLOUR}, - {STR_ACTION_SET_LARGE_SCENERY_COLOUR, GAME_COMMAND_SET_LARGE_SCENERY_COLOUR}, - {STR_ACTION_SET_BANNER_COLOUR, GAME_COMMAND_SET_BANNER_COLOUR}, - {STR_ACTION_SET_LAND_OWNERSHIP, GAME_COMMAND_SET_LAND_OWNERSHIP}, - {STR_ACTION_CLEAR_SCENERY, GAME_COMMAND_CLEAR_SCENERY}, - {STR_ACTION_SET_BANNER_NAME, GAME_COMMAND_SET_BANNER_NAME}, - {STR_ACTION_SET_SIGN_NAME, GAME_COMMAND_SET_SIGN_NAME}, - {STR_ACTION_SET_BANNER_STYLE, GAME_COMMAND_SET_BANNER_STYLE}, - {STR_ACTION_SET_SIGN_STYLE, GAME_COMMAND_SET_SIGN_STYLE}, - {STR_ACTION_SET_PLAYER_GROUP, GAME_COMMAND_SET_PLAYER_GROUP}, - {STR_ACTION_MODIFY_GROUPS, GAME_COMMAND_MODIFY_GROUPS}, - {STR_ACTION_KICK_PLAYER, GAME_COMMAND_KICK_PLAYER} + {STR_ACTION_CHAT, {-1}}, + {STR_ACTION_TERRAFORM, {GAME_COMMAND_SET_LAND_HEIGHT, GAME_COMMAND_RAISE_LAND, GAME_COMMAND_LOWER_LAND, GAME_COMMAND_EDIT_LAND_SMOOTH, GAME_COMMAND_CHANGE_SURFACE_STYLE}}, + {STR_ACTION_SET_WATER_LEVEL, {GAME_COMMAND_SET_WATER_HEIGHT, GAME_COMMAND_RAISE_WATER, GAME_COMMAND_LOWER_WATER}}, + {STR_ACTION_TOGGLE_PAUSE, {GAME_COMMAND_TOGGLE_PAUSE}}, + {STR_ACTION_CREATE_RIDE, {GAME_COMMAND_CREATE_RIDE}}, + {STR_ACTION_REMOVE_RIDE, {GAME_COMMAND_DEMOLISH_RIDE}}, + {STR_ACTION_BUILD_RIDE, {GAME_COMMAND_PLACE_TRACK, GAME_COMMAND_REMOVE_TRACK, GAME_COMMAND_SET_MAZE_TRACK, GAME_COMMAND_PLACE_TRACK_DESIGN, GAME_COMMAND_PLACE_MAZE_DESIGN, GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT}}, + {STR_ACTION_RIDE_PROPERTIES, {GAME_COMMAND_SET_RIDE_NAME, GAME_COMMAND_SET_RIDE_APPEARANCE, GAME_COMMAND_SET_RIDE_STATUS, GAME_COMMAND_SET_RIDE_VEHICLES, GAME_COMMAND_SET_RIDE_SETTING, GAME_COMMAND_SET_RIDE_PRICE, GAME_COMMAND_SET_BRAKES_SPEED}}, + {STR_ACTION_SCENERY, {GAME_COMMAND_REMOVE_SCENERY, GAME_COMMAND_PLACE_SCENERY, GAME_COMMAND_SET_BRAKES_SPEED, GAME_COMMAND_REMOVE_FENCE, GAME_COMMAND_PLACE_FENCE, GAME_COMMAND_REMOVE_LARGE_SCENERY, GAME_COMMAND_PLACE_LARGE_SCENERY, GAME_COMMAND_PLACE_BANNER, GAME_COMMAND_REMOVE_BANNER, GAME_COMMAND_SET_SCENERY_COLOUR, GAME_COMMAND_SET_FENCE_COLOUR, GAME_COMMAND_SET_LARGE_SCENERY_COLOUR, GAME_COMMAND_SET_BANNER_COLOUR, GAME_COMMAND_CLEAR_SCENERY, GAME_COMMAND_SET_BANNER_NAME, GAME_COMMAND_SET_SIGN_NAME, GAME_COMMAND_SET_BANNER_STYLE, GAME_COMMAND_SET_SIGN_STYLE}}, + {STR_ACTION_PATH, {GAME_COMMAND_PLACE_PATH, GAME_COMMAND_PLACE_PATH_FROM_TRACK, GAME_COMMAND_REMOVE_PATH}}, + {STR_ACTION_GUEST, {GAME_COMMAND_SET_PEEP_NAME}}, + {STR_ACTION_STAFF, {GAME_COMMAND_HIRE_NEW_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_PATROL, GAME_COMMAND_FIRE_STAFF_MEMBER, GAME_COMMAND_SET_STAFF_ORDER, GAME_COMMAND_SET_STAFF_COLOUR}}, + {STR_ACTION_PARK_PROPERTIES, {GAME_COMMAND_SET_PARK_NAME, GAME_COMMAND_SET_PARK_OPEN, GAME_COMMAND_SET_PARK_ENTRANCE_FEE, GAME_COMMAND_SET_LAND_OWNERSHIP, GAME_COMMAND_BUY_LAND_RIGHTS, GAME_COMMAND_PLACE_PARK_ENTRANCE, GAME_COMMAND_REMOVE_PARK_ENTRANCE}}, + {STR_ACTION_PARK_FUNDING, {GAME_COMMAND_SET_CURRENT_LOAN, GAME_COMMAND_SET_RESEARCH_FUNDING, GAME_COMMAND_START_MARKETING_CAMPAIGN}}, + {STR_ACTION_KICK_PLAYER, {GAME_COMMAND_KICK_PLAYER}}, + {STR_ACTION_MODIFY_GROUPS, {GAME_COMMAND_MODIFY_GROUPS}}, + {STR_ACTION_SET_PLAYER_GROUP, {GAME_COMMAND_SET_PLAYER_GROUP}} }; }; @@ -252,7 +204,7 @@ public: void FreeNameStringId(); void ToggleActionPermission(size_t index); bool CanPerformAction(size_t index); - bool CanPerformGameCommand(int command); + bool CanPerformCommand(int command); std::string& GetName(); void SetName(std::string name); rct_string_id GetNameStringId();