2005-07-24 14:12:37 +00:00
/* $Id$ */
2009-08-21 20:21:05 +00:00
/*
* This file is part of OpenTTD .
* OpenTTD is free software ; you can redistribute it and / or modify it under the terms of the GNU General Public License as published by the Free Software Foundation , version 2.
* OpenTTD is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
* See the GNU General Public License for more details . You should have received a copy of the GNU General Public License along with OpenTTD . If not , see < http : //www.gnu.org/licenses/>.
*/
2007-12-21 21:50:46 +00:00
/** @file command_type.h Types related to commands. */
2007-02-23 11:50:43 +00:00
2007-12-21 21:50:46 +00:00
# ifndef COMMAND_TYPE_H
# define COMMAND_TYPE_H
# include "economy_type.h"
# include "strings_type.h"
2007-12-23 10:56:02 +00:00
# include "tile_type.h"
2018-08-13 11:16:41 +00:00
# include <string>
2007-12-21 21:50:46 +00:00
2014-01-12 18:00:39 +00:00
struct GRFFile ;
2007-12-21 21:50:46 +00:00
/**
* Common return value for all commands . Wraps the cost and
* a possible error message / state together .
*/
class CommandCost {
2008-01-09 16:55:48 +00:00
ExpensesType expense_type ; ///< the type of expence as shown on the finances view
2007-12-21 21:50:46 +00:00
Money cost ; ///< The cost of this action
StringID message ; ///< Warning message for when success is unset
bool success ; ///< Whether the comment went fine up to this moment
2014-01-12 18:00:39 +00:00
const GRFFile * textref_stack_grffile ; ///< NewGRF providing the #TextRefStack content.
2011-07-03 14:32:15 +00:00
uint textref_stack_size ; ///< Number of uint32 values to put on the #TextRefStack for the error message.
2018-11-19 18:59:25 +00:00
StringID extra_message = INVALID_STRING_ID ; ///< Additional warning message for when success is unset
2011-07-03 14:32:15 +00:00
static uint32 textref_stack [ 16 ] ;
2007-12-21 21:50:46 +00:00
public :
/**
* Creates a command cost return with no cost and no error
*/
2019-04-10 21:07:06 +00:00
CommandCost ( ) : expense_type ( INVALID_EXPENSES ) , cost ( 0 ) , message ( INVALID_STRING_ID ) , success ( true ) , textref_stack_grffile ( nullptr ) , textref_stack_size ( 0 ) { }
2007-12-21 21:50:46 +00:00
/**
* Creates a command return value the is failed with the given message
*/
2019-04-10 21:07:06 +00:00
explicit CommandCost ( StringID msg ) : expense_type ( INVALID_EXPENSES ) , cost ( 0 ) , message ( msg ) , success ( false ) , textref_stack_grffile ( nullptr ) , textref_stack_size ( 0 ) { }
2007-12-21 21:50:46 +00:00
2018-11-19 18:59:25 +00:00
/**
* Creates a command return value the is failed with the given message
*/
static CommandCost DualErrorMessage ( StringID msg , StringID extra_msg )
{
CommandCost cc ( msg ) ;
cc . extra_message = extra_msg ;
return cc ;
}
2007-12-21 21:50:46 +00:00
/**
2008-01-09 16:55:48 +00:00
* Creates a command cost with given expense type and start cost of 0
* @ param ex_t the expense type
*/
2019-04-10 21:07:06 +00:00
explicit CommandCost ( ExpensesType ex_t ) : expense_type ( ex_t ) , cost ( 0 ) , message ( INVALID_STRING_ID ) , success ( true ) , textref_stack_grffile ( nullptr ) , textref_stack_size ( 0 ) { }
2008-01-09 16:55:48 +00:00
/**
* Creates a command return value with the given start cost and expense type
* @ param ex_t the expense type
2007-12-21 21:50:46 +00:00
* @ param cst the initial cost of this command
*/
2019-04-10 21:07:06 +00:00
CommandCost ( ExpensesType ex_t , const Money & cst ) : expense_type ( ex_t ) , cost ( cst ) , message ( INVALID_STRING_ID ) , success ( true ) , textref_stack_grffile ( nullptr ) , textref_stack_size ( 0 ) { }
2007-12-21 21:50:46 +00:00
/**
* Adds the given cost to the cost of the command .
* @ param cost the cost to add
*/
2011-12-20 17:57:56 +00:00
inline void AddCost ( const Money & cost )
2008-04-06 14:50:37 +00:00
{
this - > cost + = cost ;
}
2007-12-21 21:50:46 +00:00
2010-02-14 15:44:21 +00:00
void AddCost ( const CommandCost & cmd_cost ) ;
2010-02-14 15:30:08 +00:00
2007-12-21 21:50:46 +00:00
/**
* Multiplies the cost of the command by the given factor .
2008-10-14 19:27:08 +00:00
* @ param factor factor to multiply the costs with
2007-12-21 21:50:46 +00:00
*/
2011-12-20 17:57:56 +00:00
inline void MultiplyCost ( int factor )
2008-04-06 14:50:37 +00:00
{
this - > cost * = factor ;
}
2007-12-21 21:50:46 +00:00
/**
* The costs as made up to this moment
* @ return the costs
*/
2011-12-20 17:57:56 +00:00
inline Money GetCost ( ) const
2008-04-06 14:50:37 +00:00
{
return this - > cost ;
}
2007-12-21 21:50:46 +00:00
2008-01-09 16:55:48 +00:00
/**
* The expense type of the cost
* @ return the expense type
*/
2011-12-20 17:57:56 +00:00
inline ExpensesType GetExpensesType ( ) const
2008-04-06 14:50:37 +00:00
{
return this - > expense_type ;
}
2008-01-09 16:55:48 +00:00
2010-01-11 20:21:56 +00:00
/**
2010-03-14 12:39:24 +00:00
* Makes this # CommandCost behave like an error command .
* @ param message The error message .
2010-01-11 20:21:56 +00:00
*/
2018-11-19 18:59:25 +00:00
void MakeError ( StringID message , StringID extra_message = INVALID_STRING_ID )
2010-01-11 20:21:56 +00:00
{
assert ( message ! = INVALID_STRING_ID ) ;
this - > success = false ;
this - > message = message ;
2018-11-19 18:59:25 +00:00
this - > extra_message = extra_message ;
2010-01-11 20:21:56 +00:00
}
2014-01-12 18:00:39 +00:00
void UseTextRefStack ( const GRFFile * grffile , uint num_registers ) ;
/**
* Returns the NewGRF providing the # TextRefStack of the error message .
* @ return the NewGRF .
*/
const GRFFile * GetTextRefStackGRF ( ) const
{
return this - > textref_stack_grffile ;
}
2011-07-03 14:32:15 +00:00
/**
* Returns the number of uint32 values for the # TextRefStack of the error message .
* @ return number of uint32 values .
*/
uint GetTextRefStackSize ( ) const
{
return this - > textref_stack_size ;
}
/**
* Returns a pointer to the values for the # TextRefStack of the error message .
* @ return uint32 values for the # TextRefStack
*/
const uint32 * GetTextRefStack ( ) const
{
return textref_stack ;
}
2008-08-16 14:02:20 +00:00
/**
* Returns the error message of a command
2010-03-20 17:58:24 +00:00
* @ return the error message , if succeeded # INVALID_STRING_ID
2008-08-16 14:02:20 +00:00
*/
StringID GetErrorMessage ( ) const
{
if ( this - > success ) return INVALID_STRING_ID ;
2010-03-20 17:58:24 +00:00
return this - > message ;
2008-08-16 14:02:20 +00:00
}
2018-11-19 18:59:25 +00:00
/**
* Returns the extra error message of a command
* @ return the extra error message , if succeeded # INVALID_STRING_ID
*/
StringID GetExtraErrorMessage ( ) const
{
if ( this - > success ) return INVALID_STRING_ID ;
return this - > extra_message ;
}
2007-12-21 21:50:46 +00:00
/**
* Did this command succeed ?
* @ return true if and only if it succeeded
*/
2011-12-20 17:57:56 +00:00
inline bool Succeeded ( ) const
2008-04-06 14:50:37 +00:00
{
return this - > success ;
}
2007-12-21 21:50:46 +00:00
/**
* Did this command fail ?
* @ return true if and only if it failed
*/
2011-12-20 17:57:56 +00:00
inline bool Failed ( ) const
2008-04-06 14:50:37 +00:00
{
return ! this - > success ;
}
2016-02-16 18:27:21 +00:00
/**
* @ param cmd_msg optional failure string as passed to DoCommand
* @ return an allocated string summarising the command result
*/
char * AllocSummaryMessage ( StringID cmd_msg = 0 ) const ;
/**
* Write a string summarising the command result
* @ param buf buffer to write to
* @ param last last byte in buffer
* @ param cmd_msg optional failure string as passed to DoCommand
* @ return the number of bytes written
*/
int WriteSummaryMessage ( char * buf , char * last , StringID cmd_msg = 0 ) const ;
2007-12-21 21:50:46 +00:00
} ;
2004-08-09 17:04:08 +00:00
2007-09-10 15:21:14 +00:00
/**
* List of commands .
*
* This enum defines all possible commands which can be executed to the game
* engine . Observing the game like the query - tool or checking the profit of a
* vehicle don ' t result in a command which should be executed in the engine
* nor send to the server in a network game .
*
* @ see _command_proc_table
*/
2010-05-13 09:44:44 +00:00
enum Commands {
2008-02-06 23:08:49 +00:00
CMD_BUILD_RAILROAD_TRACK , ///< build a rail track
CMD_REMOVE_RAILROAD_TRACK , ///< remove a rail track
CMD_BUILD_SINGLE_RAIL , ///< build a single rail track
CMD_REMOVE_SINGLE_RAIL , ///< remove a single rail track
CMD_LANDSCAPE_CLEAR , ///< demolish a tile
CMD_BUILD_BRIDGE , ///< build a bridge
2009-07-29 22:32:20 +00:00
CMD_BUILD_RAIL_STATION , ///< build a rail station
2008-02-06 23:08:49 +00:00
CMD_BUILD_TRAIN_DEPOT , ///< build a train depot
CMD_BUILD_SIGNALS , ///< build a signal
CMD_REMOVE_SIGNALS , ///< remove a signal
CMD_TERRAFORM_LAND , ///< terraform a tile
2010-08-08 10:59:30 +00:00
CMD_BUILD_OBJECT , ///< build an object
2018-11-23 19:07:13 +00:00
CMD_PURCHASE_LAND_AREA , ///< purchase an area of landscape
2015-08-03 20:29:03 +00:00
CMD_BUILD_HOUSE , ///< build a house
2008-02-06 23:08:49 +00:00
CMD_BUILD_TUNNEL , ///< build a tunnel
2007-09-10 15:36:33 +00:00
2009-07-29 22:32:20 +00:00
CMD_REMOVE_FROM_RAIL_STATION , ///< remove a (rectangle of) tiles from a rail station
2008-02-06 23:08:49 +00:00
CMD_CONVERT_RAIL , ///< convert a rail type
2007-09-10 15:36:33 +00:00
2009-07-29 22:32:20 +00:00
CMD_BUILD_RAIL_WAYPOINT , ///< build a waypoint
2008-02-06 23:08:49 +00:00
CMD_RENAME_WAYPOINT , ///< rename a waypoint
2009-07-29 22:32:20 +00:00
CMD_REMOVE_FROM_RAIL_WAYPOINT , ///< remove a (rectangle of) tiles from a rail waypoint
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_ROAD_STOP , ///< build a road stop
CMD_REMOVE_ROAD_STOP , ///< remove a road stop
CMD_BUILD_LONG_ROAD , ///< build a complete road (not a "half" one)
CMD_REMOVE_LONG_ROAD , ///< remove a complete road (not a "half" one)
CMD_BUILD_ROAD , ///< build a "half" road
CMD_BUILD_ROAD_DEPOT , ///< build a road depot
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_AIRPORT , ///< build an airport
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_DOCK , ///< build a dock
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_SHIP_DEPOT , ///< build a ship depot
CMD_BUILD_BUOY , ///< build a buoy
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_PLANT_TREE , ///< plant a tree
2004-08-09 17:04:08 +00:00
2010-08-17 23:15:55 +00:00
CMD_BUILD_VEHICLE , ///< build a vehicle
2010-08-17 23:55:22 +00:00
CMD_SELL_VEHICLE , ///< sell a vehicle
2010-08-18 00:47:31 +00:00
CMD_REFIT_VEHICLE , ///< refit the cargo space of a vehicle
2010-09-08 18:55:58 +00:00
CMD_SEND_VEHICLE_TO_DEPOT , ///< send a vehicle to a depot
2014-09-07 16:12:58 +00:00
CMD_SET_VEHICLE_VISIBILITY , ///< hide or unhide a vehicle in the build vehicle and autoreplace GUIs
2004-08-09 17:04:08 +00:00
2010-08-17 23:55:22 +00:00
CMD_MOVE_RAIL_VEHICLE , ///< move a rail vehicle (in the depot)
2008-02-06 23:08:49 +00:00
CMD_FORCE_TRAIN_PROCEED , ///< proceed a train to pass a red signal
CMD_REVERSE_TRAIN_DIRECTION , ///< turn a train around
2004-08-09 17:04:08 +00:00
2010-08-18 20:48:38 +00:00
CMD_CLEAR_ORDER_BACKUP , ///< clear the order backup of a given user/tile
2008-02-06 23:08:49 +00:00
CMD_MODIFY_ORDER , ///< modify an order (like set full-load)
CMD_SKIP_TO_ORDER , ///< skip an order to the next of specific one
CMD_DELETE_ORDER , ///< delete an order
CMD_INSERT_ORDER , ///< insert a new order
2016-01-27 20:02:35 +00:00
CMD_MASS_CHANGE_ORDER , ///< mass change the target of an order
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_CHANGE_SERVICE_INT , ///< change the server interval of a vehicle
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_INDUSTRY , ///< build a new industry
2004-08-09 17:04:08 +00:00
2008-09-30 20:39:50 +00:00
CMD_SET_COMPANY_MANAGER_FACE , ///< set the manager's face of the company
2010-08-02 22:10:05 +00:00
CMD_SET_COMPANY_COLOUR , ///< set the colour of the company
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_INCREASE_LOAN , ///< increase the loan from the bank
CMD_DECREASE_LOAN , ///< decrease the loan from the bank
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_WANT_ENGINE_PREVIEW , ///< confirm the preview of an engine
2004-08-09 17:04:08 +00:00
2016-02-14 00:52:42 +00:00
CMD_SET_VEHICLE_UNIT_NUMBER , ///< sets the unit number of a vehicle
2008-09-15 22:58:41 +00:00
CMD_RENAME_VEHICLE , ///< rename a whole vehicle
2008-02-06 23:08:49 +00:00
CMD_RENAME_ENGINE , ///< rename a engine (in the engine list)
2008-09-15 22:58:41 +00:00
CMD_RENAME_COMPANY , ///< change the company name
CMD_RENAME_PRESIDENT , ///< change the president name
2008-02-06 23:08:49 +00:00
CMD_RENAME_STATION , ///< rename a station
2010-05-12 20:50:10 +00:00
CMD_RENAME_DEPOT , ///< rename a depot
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_PLACE_SIGN , ///< place a sign
CMD_RENAME_SIGN , ///< rename a sign
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_TURN_ROADVEH , ///< turn a road vehicle around
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_PAUSE , ///< pause the game
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUY_SHARE_IN_COMPANY , ///< buy a share from a company
CMD_SELL_SHARE_IN_COMPANY , ///< sell a share from a company
CMD_BUY_COMPANY , ///< buy a company which is bankrupt
2004-08-09 17:04:08 +00:00
2009-09-21 18:16:00 +00:00
CMD_FOUND_TOWN , ///< found a town
2008-02-06 23:08:49 +00:00
CMD_RENAME_TOWN , ///< rename a town
CMD_DO_TOWN_ACTION , ///< do a action from the town detail window (like advertises or bribe)
2011-12-19 20:59:19 +00:00
CMD_TOWN_CARGO_GOAL , ///< set the goal of a cargo for a town
CMD_TOWN_GROWTH_RATE , ///< set the town growth rate
2011-12-19 21:00:55 +00:00
CMD_TOWN_SET_TEXT , ///< set the custom text of a town
2010-08-02 21:06:06 +00:00
CMD_EXPAND_TOWN , ///< expand a town
2010-08-02 21:07:23 +00:00
CMD_DELETE_TOWN , ///< delete a town
2004-08-09 17:04:08 +00:00
2011-05-14 18:35:40 +00:00
CMD_ORDER_REFIT , ///< change the refit information of an order (for "goto depot" )
2008-02-06 23:08:49 +00:00
CMD_CLONE_ORDER , ///< clone (and share) an order
CMD_CLEAR_AREA , ///< clear an area
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_MONEY_CHEAT , ///< do the money cheat
2013-09-21 13:07:42 +00:00
CMD_CHANGE_BANK_BALANCE , ///< change bank balance to charge costs or give money from a GS
2008-02-06 23:08:49 +00:00
CMD_BUILD_CANAL , ///< build a canal
2004-08-09 17:04:08 +00:00
2011-12-19 21:01:12 +00:00
CMD_CREATE_SUBSIDY , ///< create a new subsidy
2008-09-30 20:39:50 +00:00
CMD_COMPANY_CTRL , ///< used in multiplayer to create a new companies etc.
2011-12-19 21:01:03 +00:00
CMD_CUSTOM_NEWS_ITEM , ///< create a custom news message
2011-12-19 21:03:17 +00:00
CMD_CREATE_GOAL , ///< create a new goal
CMD_REMOVE_GOAL , ///< remove a goal
2013-05-26 19:54:43 +00:00
CMD_SET_GOAL_TEXT , ///< update goal text of a goal
CMD_SET_GOAL_PROGRESS , ///< update goal progress text of a goal
CMD_SET_GOAL_COMPLETED , ///< update goal completed status of a goal
2012-01-03 16:36:24 +00:00
CMD_GOAL_QUESTION , ///< ask a goal related question
CMD_GOAL_QUESTION_ANSWER , ///< answer(s) to CMD_GOAL_QUESTION
2013-06-09 12:19:09 +00:00
CMD_CREATE_STORY_PAGE , ///< create a new story page
CMD_CREATE_STORY_PAGE_ELEMENT , ///< create a new story page element
CMD_UPDATE_STORY_PAGE_ELEMENT , ///< update a story page element
CMD_SET_STORY_PAGE_TITLE , ///< update title of a story page
2014-02-06 19:48:19 +00:00
CMD_SET_STORY_PAGE_DATE , ///< update date of a story page
2013-06-09 12:57:22 +00:00
CMD_SHOW_STORY_PAGE , ///< show a story page
2013-06-09 12:19:09 +00:00
CMD_REMOVE_STORY_PAGE , ///< remove a story page
2014-02-06 19:48:19 +00:00
CMD_REMOVE_STORY_PAGE_ELEMENT , ///< remove a story page element
2018-04-24 17:19:01 +00:00
CMD_SCROLL_VIEWPORT , ///< scroll main viewport of players
2008-02-06 23:08:49 +00:00
CMD_LEVEL_LAND , ///< level land
2004-08-09 17:04:08 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_LOCK , ///< build a lock
2004-09-10 19:02:27 +00:00
2008-02-06 23:08:49 +00:00
CMD_BUILD_SIGNAL_TRACK , ///< add signals along a track (by dragging)
CMD_REMOVE_SIGNAL_TRACK , ///< remove signals along a track (by dragging)
2004-08-09 17:04:08 +00:00
2008-09-30 20:39:50 +00:00
CMD_GIVE_MONEY , ///< give money to another company
2009-02-08 12:25:13 +00:00
CMD_CHANGE_SETTING , ///< change a setting
2013-01-08 22:46:42 +00:00
CMD_CHANGE_COMPANY_SETTING , ///< change a company setting
2004-12-27 18:18:44 +00:00
2008-02-06 23:08:49 +00:00
CMD_SET_AUTOREPLACE , ///< set an autoreplace entry
2005-07-31 13:08:08 +00:00
2016-02-14 00:52:42 +00:00
CMD_TOGGLE_REUSE_DEPOT_VEHICLES , ///< toggle 'reuse depot vehicles' on template
CMD_TOGGLE_KEEP_REMAINING_VEHICLES , ///< toggle 'keep remaining vehicles' on template
CMD_TOGGLE_REFIT_AS_TEMPLATE , ///< toggle 'refit as template' on template
2018-10-18 17:34:22 +00:00
CMD_TOGGLE_TMPL_REPLACE_OLD_ONLY , ///< toggle 'replace old vehicles only' on template
2016-02-14 00:52:42 +00:00
CMD_VIRTUAL_TRAIN_FROM_TEMPLATE_VEHICLE , ///< Creates a virtual train from a template
CMD_VIRTUAL_TRAIN_FROM_TRAIN , ///< Creates a virtual train from a regular train
CMD_DELETE_VIRTUAL_TRAIN , ///< Delete a virtual train
CMD_BUILD_VIRTUAL_RAIL_VEHICLE , ///< Build a virtual train
CMD_REPLACE_TEMPLATE_VEHICLE , ///< Replace a template vehicle with another one based on a virtual train
CMD_CLONE_TEMPLATE_VEHICLE_FROM_TRAIN , ///< clone a train and create a new template vehicle based on it
CMD_DELETE_TEMPLATE_VEHICLE , ///< delete a template vehicle
CMD_ISSUE_TEMPLATE_REPLACEMENT , ///< issue a template replacement for a vehicle group
CMD_DELETE_TEMPLATE_REPLACEMENT , ///< delete a template replacement from a vehicle group
2008-02-06 23:08:49 +00:00
CMD_CLONE_VEHICLE , ///< clone a vehicle
2008-08-15 13:57:43 +00:00
CMD_START_STOP_VEHICLE , ///< start or stop a vehicle
2008-02-06 23:08:49 +00:00
CMD_MASS_START_STOP , ///< start/stop all vehicles (in a depot)
2008-08-16 14:02:20 +00:00
CMD_AUTOREPLACE_VEHICLE , ///< replace/renew a vehicle while it is in a depot
2016-02-14 00:52:42 +00:00
CMD_TEMPLATE_REPLACE_VEHICLE , ///< template replace a vehicle while it is in a depot
2008-02-06 23:08:49 +00:00
CMD_DEPOT_SELL_ALL_VEHICLES , ///< sell all vehicles which are in a given depot
CMD_DEPOT_MASS_AUTOREPLACE , ///< force the autoreplace to take action in a given depot
2007-06-08 18:59:29 +00:00
2008-02-06 23:08:49 +00:00
CMD_CREATE_GROUP , ///< create a new group
CMD_DELETE_GROUP , ///< delete a group
2014-04-08 21:09:06 +00:00
CMD_ALTER_GROUP , ///< alter a group
2016-03-08 19:27:03 +00:00
CMD_CREATE_GROUP_FROM_LIST , ///< create and rename a new group from a vehicle list
2008-02-06 23:08:49 +00:00
CMD_ADD_VEHICLE_GROUP , ///< add a vehicle to a group
CMD_ADD_SHARED_VEHICLE_GROUP , ///< add all other shared vehicles to a group which are missing
CMD_REMOVE_ALL_VEHICLES_GROUP , ///< remove all vehicles from a group
CMD_SET_GROUP_REPLACE_PROTECTION , ///< set the autoreplace-protection for a group
2019-01-31 13:57:44 +00:00
CMD_SET_GROUP_LIVERY , ///< set the livery for a group
2007-06-08 18:59:29 +00:00
2008-02-06 23:08:49 +00:00
CMD_MOVE_ORDER , ///< move an order
CMD_CHANGE_TIMETABLE , ///< change the timetable for a vehicle
2016-03-02 22:36:21 +00:00
CMD_BULK_CHANGE_TIMETABLE , ///< change the timetable for all orders of a vehicle
2008-02-06 23:08:49 +00:00
CMD_SET_VEHICLE_ON_TIME , ///< set the vehicle on time feature (timetable)
CMD_AUTOFILL_TIMETABLE , ///< autofill the timetable
2015-08-04 20:29:19 +00:00
CMD_AUTOMATE_TIMETABLE , ///< automate the timetable
2016-05-07 00:15:46 +00:00
CMD_TIMETABLE_SEPARATION , ///< auto timetable separation
2009-11-25 23:37:15 +00:00
CMD_SET_TIMETABLE_START , ///< set the date that a timetable should start
2010-12-30 18:14:37 +00:00
2012-04-17 19:43:18 +00:00
CMD_OPEN_CLOSE_AIRPORT , ///< open/close an airport to incoming aircraft
2015-07-21 23:28:53 +00:00
CMD_PROGRAM_TRACERESTRICT_SIGNAL , ///< modify a signal tracerestrict program
2017-03-30 20:14:14 +00:00
CMD_CREATE_TRACERESTRICT_SLOT , ///< create a tracerestrict slot
CMD_ALTER_TRACERESTRICT_SLOT , ///< alter a tracerestrict slot
CMD_DELETE_TRACERESTRICT_SLOT , ///< delete a tracerestrict slot
CMD_ADD_VEHICLE_TRACERESTRICT_SLOT , ///< add a vehicle to a tracerestrict slot
CMD_REMOVE_VEHICLE_TRACERESTRICT_SLOT , ///< remove a vehicle from a tracerestrict slot
2015-07-21 23:28:53 +00:00
2014-01-14 20:32:07 +00:00
CMD_INSERT_SIGNAL_INSTRUCTION , ///< insert a signal instruction
CMD_MODIFY_SIGNAL_INSTRUCTION , ///< modifies a signal instruction
CMD_REMOVE_SIGNAL_INSTRUCTION , ///< removes a signal instruction
2015-11-24 01:03:09 +00:00
CMD_SIGNAL_PROGRAM_MGMT , ///< removes a signal program management command
2014-01-14 20:32:07 +00:00
2017-05-29 18:37:08 +00:00
CMD_SCHEDULED_DISPATCH , ///< scheduled dispatch start
CMD_SCHEDULED_DISPATCH_ADD , ///< scheduled dispatch add
CMD_SCHEDULED_DISPATCH_REMOVE , ///< scheduled dispatch remove
CMD_SCHEDULED_DISPATCH_SET_DURATION , ///< scheduled dispatch set schedule duration
CMD_SCHEDULED_DISPATCH_SET_START_DATE , ///< scheduled dispatch set start date
CMD_SCHEDULED_DISPATCH_SET_DELAY , ///< scheduled dispatch set maximum allow delay
CMD_SCHEDULED_DISPATCH_RESET_LAST_DISPATCH , ///< scheduled dispatch reset last dispatch date
2015-08-02 18:37:42 +00:00
CMD_ADD_PLAN ,
CMD_ADD_PLAN_LINE ,
CMD_REMOVE_PLAN ,
CMD_REMOVE_PLAN_LINE ,
CMD_CHANGE_PLAN_VISIBILITY ,
2018-04-10 13:29:22 +00:00
CMD_RENAME_PLAN ,
2015-08-02 18:37:42 +00:00
2015-11-23 19:47:59 +00:00
CMD_DESYNC_CHECK , ///< Force desync checks to be run
2011-12-19 17:48:04 +00:00
CMD_END , ///< Must ALWAYS be on the end of this list!! (period)
2004-08-09 17:04:08 +00:00
} ;
2007-09-10 15:21:14 +00:00
/**
* List of flags for a command .
*
* This enums defines some flags which can be used for the commands .
*/
2009-02-09 21:20:05 +00:00
enum DoCommandFlag {
2009-02-11 18:33:27 +00:00
DC_NONE = 0x000 , ///< no flag is set
DC_EXEC = 0x001 , ///< execute the given command
DC_AUTO = 0x002 , ///< don't allow building on structures
DC_QUERY_COST = 0x004 , ///< query cost only, don't build.
DC_NO_WATER = 0x008 , ///< don't allow building on water
DC_NO_RAIL_OVERLAP = 0x010 , ///< don't allow overlap of rails (used in buildrail)
DC_NO_TEST_TOWN_RATING = 0x020 , ///< town rating does not disallow you from building
DC_BANKRUPT = 0x040 , ///< company bankrupts, skip money check, skip vehicle on tile check in some cases
DC_AUTOREPLACE = 0x080 , ///< autoreplace/autorenew is in progress, this shall disable vehicle limits when building, and ignore certain restrictions when undoing things (like vehicle attach callback)
2011-12-28 19:48:04 +00:00
DC_NO_CARGO_CAP_CHECK = 0x100 , ///< when autoreplace/autorenew is in progress, this shall prevent truncating the amount of cargo in the vehicle to prevent testing the command to remove cargo
DC_ALL_TILES = 0x200 , ///< allow this command also on MP_VOID tiles
DC_NO_MODIFY_TOWN_RATING = 0x400 , ///< do not change town rating
DC_FORCE_CLEAR_TILE = 0x800 , ///< do not only remove the object on the tile, but also clear any water left on it
2017-07-30 13:27:42 +00:00
DC_ALLOW_REMOVE_WATER = 0x1000 , ///< always allow removing water
2004-08-09 17:04:08 +00:00
} ;
2010-03-23 22:25:43 +00:00
DECLARE_ENUM_AS_BIT_SET ( DoCommandFlag )
2004-08-09 17:04:08 +00:00
2007-09-10 15:21:14 +00:00
/**
* Used to combine a StringID with the command .
*
* This macro can be used to add a StringID ( the error message to show ) on a command - id
* ( CMD_xxx ) . Use the binary or - operator " | " to combine the command with the result from
* this macro .
*
* @ param x The StringID to combine with a command - id
*/
2007-04-18 22:10:36 +00:00
# define CMD_MSG(x) ((x) << 16)
2004-08-09 17:04:08 +00:00
2007-09-10 15:21:14 +00:00
/**
* Defines some flags .
*
* This enumeration defines some flags which are binary - or ' ed on a command .
*/
2010-05-13 09:44:44 +00:00
enum FlaggedCommands {
2009-01-07 14:58:43 +00:00
CMD_NETWORK_COMMAND = 0x0100 , ///< execute the command without sending it on the network
2009-01-07 13:26:48 +00:00
CMD_FLAGS_MASK = 0xFF00 , ///< mask for all command flags
CMD_ID_MASK = 0x00FF , ///< mask for the command ID
2004-08-09 17:04:08 +00:00
} ;
2007-09-10 15:21:14 +00:00
/**
* Command flags for the command table _command_proc_table .
*
* This enumeration defines flags for the _command_proc_table .
*/
2010-05-13 09:44:44 +00:00
enum CommandFlags {
2011-12-19 20:50:36 +00:00
CMD_SERVER = 0x001 , ///< the command can only be initiated by the server
CMD_SPECTATOR = 0x002 , ///< the command may be initiated by a spectator
CMD_OFFLINE = 0x004 , ///< the command cannot be executed in a multiplayer game; single-player only
CMD_AUTO = 0x008 , ///< set the DC_AUTO flag on this command
CMD_ALL_TILES = 0x010 , ///< allow this command also on MP_VOID tiles
CMD_NO_TEST = 0x020 , ///< the command's output may differ between test and execute due to town rating changes etc.
CMD_NO_WATER = 0x040 , ///< set the DC_NO_WATER flag on this command
CMD_CLIENT_ID = 0x080 , ///< set p2 with the ClientID of the sending client.
CMD_DEITY = 0x100 , ///< the command may be executed by COMPANY_DEITY
2011-12-19 20:50:44 +00:00
CMD_STR_CTRL = 0x200 , ///< the command's string may contain control strings
2019-02-04 17:19:21 +00:00
CMD_NO_EST = 0x400 , ///< the command is never estimated.
2019-03-03 20:53:59 +00:00
CMD_PROCEX = 0x800 , ///< the command proc function has extended parameters
2005-05-14 19:25:18 +00:00
} ;
2011-11-14 20:38:56 +00:00
DECLARE_ENUM_AS_BIT_SET ( CommandFlags )
2005-05-14 19:25:18 +00:00
2010-12-07 21:05:27 +00:00
/** Types of commands we have. */
enum CommandType {
CMDT_LANDSCAPE_CONSTRUCTION , ///< Construction and destruction of objects on the map.
CMDT_VEHICLE_CONSTRUCTION , ///< Construction, modification (incl. refit) and destruction of vehicles.
CMDT_MONEY_MANAGEMENT , ///< Management of money, i.e. loans and shares.
CMDT_VEHICLE_MANAGEMENT , ///< Stopping, starting, sending to depot, turning around, replace orders etc.
CMDT_ROUTE_MANAGEMENT , ///< Modifications to route management (orders, groups, etc).
CMDT_OTHER_MANAGEMENT , ///< Renaming stuff, changing company colours, placing signs, etc.
CMDT_COMPANY_SETTING , ///< Changing settings related to a company.
CMDT_SERVER_SETTING , ///< Pausing/removing companies/server settings.
2011-02-07 22:23:37 +00:00
CMDT_CHEAT , ///< A cheat of some sorts.
2010-12-07 21:05:27 +00:00
CMDT_END , ///< Magic end marker.
} ;
/** Different command pause levels. */
enum CommandPauseLevel {
CMDPL_NO_ACTIONS , ///< No user actions may be executed.
CMDPL_NO_CONSTRUCTION , ///< No construction actions may be executed.
CMDPL_NO_LANDSCAPING , ///< No landscaping actions may be executed.
CMDPL_ALL_ACTIONS , ///< All actions may be executed.
} ;
2007-09-10 15:21:14 +00:00
/**
* Defines the callback type for all command handler functions .
*
* This type defines the function header for all functions which handles a CMD_ * command .
* A command handler use the parameters to act according to the meaning of the command .
* The tile parameter defines the tile to perform an action on .
* The flag parameter is filled with flags from the DC_ * enumeration . The parameters
* p1 and p2 are filled with parameters for the command like " which road type " , " which
* order " or " direction " . Each function should mentioned in there doxygen comments
* the usage of these parameters .
*
* @ param tile The tile to apply a command on
* @ param flags Flags for the command , from the DC_ * enumeration
* @ param p1 Additional data for the command
* @ param p2 Additional data for the command
2008-12-28 14:37:19 +00:00
* @ param text Additional text
2007-09-10 15:21:14 +00:00
* @ return The CommandCost of the command , which can be succeeded or failed .
*/
2009-02-09 21:20:05 +00:00
typedef CommandCost CommandProc ( TileIndex tile , DoCommandFlag flags , uint32 p1 , uint32 p2 , const char * text ) ;
2019-03-03 20:53:59 +00:00
typedef CommandCost CommandProcEx ( TileIndex tile , DoCommandFlag flags , uint32 p1 , uint32 p2 , const char * text , uint32 binary_length ) ;
2006-04-10 07:15:58 +00:00
2007-09-10 15:21:14 +00:00
/**
* Define a command with the flags which belongs to it .
*
* This struct connect a command handler function with the flags created with
* the # CMD_AUTO , # CMD_OFFLINE and # CMD_SERVER values .
*/
2007-03-07 12:11:48 +00:00
struct Command {
2019-03-03 20:53:59 +00:00
union {
CommandProc * proc ; ///< The procedure to actually execute
CommandProcEx * procex ; ///< The procedure to actually execute, extended parameters
} ;
2011-11-14 20:38:56 +00:00
const char * name ; ///< A human readable name for the procedure
CommandFlags flags ; ///< The (command) flags to that apply to this command
CommandType type ; ///< The type of command.
2019-03-03 20:53:59 +00:00
Command ( CommandProc * proc , const char * name , CommandFlags flags , CommandType type )
: proc ( proc ) , name ( name ) , flags ( flags & ~ CMD_PROCEX ) , type ( type ) { }
Command ( CommandProcEx * procex , const char * name , CommandFlags flags , CommandType type )
: procex ( procex ) , name ( name ) , flags ( flags | CMD_PROCEX ) , type ( type ) { }
inline CommandCost Execute ( TileIndex tile , DoCommandFlag flags , uint32 p1 , uint32 p2 , const char * text , uint32 binary_length ) const {
if ( this - > flags & CMD_PROCEX ) {
return this - > procex ( tile , flags , p1 , p2 , text , binary_length ) ;
} else {
return this - > proc ( tile , flags , p1 , p2 , text ) ;
}
}
2007-03-07 12:11:48 +00:00
} ;
2005-05-14 19:25:18 +00:00
2007-09-10 15:21:14 +00:00
/**
* Define a callback function for the client , after the command is finished .
*
* Functions of this type are called after the command is finished . The parameters
* are from the # CommandProc callback type . The boolean parameter indicates if the
* command succeeded or failed .
*
2010-01-11 18:46:09 +00:00
* @ param result The result of the executed command
2007-09-10 15:21:14 +00:00
* @ param tile The tile of the command action
* @ param p1 Additional data of the command
* @ param p1 Additional data of the command
* @ see CommandProc
*/
2010-01-11 18:46:09 +00:00
typedef void CommandCallback ( const CommandCost & result , TileIndex tile , uint32 p1 , uint32 p2 ) ;
2007-09-10 15:21:14 +00:00
2015-08-02 18:37:42 +00:00
# define MAX_CMD_TEXT_LENGTH 32000
2009-01-08 14:40:18 +00:00
/**
* Structure for buffering the build command when selecting a station to join .
*/
struct CommandContainer {
2010-12-05 22:17:25 +00:00
TileIndex tile ; ///< tile command being executed on.
uint32 p1 ; ///< parameter p1.
uint32 p2 ; ///< parameter p2.
uint32 cmd ; ///< command being executed.
CommandCallback * callback ; ///< any callback function executed upon successful completion of the command.
2015-08-02 18:37:42 +00:00
uint32 binary_length ; ///< in case text contains binary data, this describes its length.
2018-08-13 11:16:41 +00:00
std : : string text ; ///< possible text sent for name changes etc.
2009-01-08 14:40:18 +00:00
} ;
2007-12-21 21:50:46 +00:00
# endif /* COMMAND_TYPE_H */