src/command.cpp
author terom@frrb.lan
Fri, 19 Dec 2008 01:32:07 +0200
changeset 10438 51bff16a04c9
parent 10237 c55922dabb25
permissions -rw-r--r--
initial mini-map stuff
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
9111
48ce04029fe4 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 9061
diff changeset
     3
/** @file command.cpp Handling of commands. */
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1877
diff changeset
     6
#include "openttd.h"
6453
226bcddeba32 (svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents: 6444
diff changeset
     7
#include "landscape.h"
8108
b42a0e5c67ef (svn r11669) -Codechange: refactor tile.h -> tile_type.h and tile_map.h
rubidium
parents: 8107
diff changeset
     8
#include "tile_map.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
#include "gui.h"
8116
8da76dcb3287 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8114
diff changeset
    10
#include "command_func.h"
5469
7edfc643abbc (svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents: 5067
diff changeset
    11
#include "network/network.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 1980
diff changeset
    12
#include "variables.h"
4300
c7e43c47a2b9 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4000
diff changeset
    13
#include "genworld.h"
7609
b70ffc13652a (svn r11138) -Codechange: prepare some subsystems for persistent storage for NewGRFs.
rubidium
parents: 7559
diff changeset
    14
#include "newgrf_storage.h"
8114
dd6d21dc99c1 (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8108
diff changeset
    15
#include "strings_func.h"
8123
ce31d2843a95 (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8116
diff changeset
    16
#include "gfx_func.h"
8131
160939e24ed3 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8123
diff changeset
    17
#include "functions.h"
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
    18
#include "town.h"
8247
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8232
diff changeset
    19
#include "date_func.h"
16e1c8db6f55 (svn r11811) -Fix: make compilation without networking work again (and thus move the debugdumpcommand stuff out of the network 'area').
rubidium
parents: 8232
diff changeset
    20
#include "debug.h"
10208
72c00af5c95d (svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
rubidium
parents: 10207
diff changeset
    21
#include "company_func.h"
72c00af5c95d (svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
rubidium
parents: 10207
diff changeset
    22
#include "company_base.h"
8306
22e1344c5457 (svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents: 8275
diff changeset
    23
#include "signal_func.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    24
8264
b1e85998c7d3 (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8254
diff changeset
    25
#include "table/strings.h"
b1e85998c7d3 (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8254
diff changeset
    26
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    27
const char *_cmd_text = NULL;
8275
f17d0c863ee3 (svn r11839) -Codechange: move some variables from variables.h to a more logical location.
rubidium
parents: 8264
diff changeset
    28
StringID _error_message;
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
    29
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    30
/**
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    31
 * Helper macro to define the header of all command handler macros.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    32
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    33
 * This macro create the function header for a given command handler function, as
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    34
 * all command handler functions got the parameters from the #CommandProc callback
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    35
 * type.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    36
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    37
 * @param yyyy The desired function name of the new command handler function.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
    38
 */
6943
1914f26aee04 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents: 6832
diff changeset
    39
#define DEF_COMMAND(yyyy) CommandCost yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
DEF_COMMAND(CmdBuildRailroadTrack);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
DEF_COMMAND(CmdRemoveRailroadTrack);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
DEF_COMMAND(CmdBuildSingleRail);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
DEF_COMMAND(CmdRemoveSingleRail);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
DEF_COMMAND(CmdLandscapeClear);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
DEF_COMMAND(CmdBuildBridge);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
DEF_COMMAND(CmdBuildRailroadStation);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
DEF_COMMAND(CmdRemoveFromRailroadStation);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
DEF_COMMAND(CmdConvertRail);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
1227
1d940a5e02d2 (svn r1731) - Fix: [ 1106930 ] BugFix: placing signals with 2x1 drags workaround is completely rewritten. Also features checks for hacked/modified clients. Thanks a lot Hackykid!
darkvater
parents: 1217
diff changeset
    54
DEF_COMMAND(CmdBuildSingleSignal);
1d940a5e02d2 (svn r1731) - Fix: [ 1106930 ] BugFix: placing signals with 2x1 drags workaround is completely rewritten. Also features checks for hacked/modified clients. Thanks a lot Hackykid!
darkvater
parents: 1217
diff changeset
    55
DEF_COMMAND(CmdRemoveSingleSignal);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
DEF_COMMAND(CmdTerraformLand);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
DEF_COMMAND(CmdPurchaseLandArea);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
DEF_COMMAND(CmdSellLandArea);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    61
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
DEF_COMMAND(CmdBuildTunnel);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    64
DEF_COMMAND(CmdBuildTrainDepot);
395
788a9bba0889 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky).
darkvater
parents: 215
diff changeset
    65
DEF_COMMAND(CmdBuildTrainWaypoint);
788a9bba0889 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky).
darkvater
parents: 215
diff changeset
    66
DEF_COMMAND(CmdRenameWaypoint);
788a9bba0889 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky).
darkvater
parents: 215
diff changeset
    67
DEF_COMMAND(CmdRemoveTrainWaypoint);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
1217
59c024cfaf54 (svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents: 1093
diff changeset
    69
DEF_COMMAND(CmdBuildRoadStop);
6012
065d7234a7a9 (svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents: 5587
diff changeset
    70
DEF_COMMAND(CmdRemoveRoadStop);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    71
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    72
DEF_COMMAND(CmdBuildLongRoad);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
DEF_COMMAND(CmdRemoveLongRoad);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    74
DEF_COMMAND(CmdBuildRoad);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
DEF_COMMAND(CmdRemoveRoad);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    76
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    77
DEF_COMMAND(CmdBuildRoadDepot);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    79
DEF_COMMAND(CmdBuildAirport);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    80
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    81
DEF_COMMAND(CmdBuildDock);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    82
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    83
DEF_COMMAND(CmdBuildShipDepot);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    84
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    85
DEF_COMMAND(CmdBuildBuoy);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    86
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    87
DEF_COMMAND(CmdPlantTree);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    89
DEF_COMMAND(CmdBuildRailVehicle);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    90
DEF_COMMAND(CmdMoveRailVehicle);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    91
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
DEF_COMMAND(CmdSellRailWagon);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
1794
24b4239f2090 (svn r2298) - CodeChange: removed CmdAbuses: CmdSetTownNameType(), CmdStartNewGame(), CmdCreateScenario(), CmdSetNewLandscapeType() and CmdGenRandomNewGame().
Darkvater
parents: 1786
diff changeset
    94
DEF_COMMAND(CmdSendTrainToDepot);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    95
DEF_COMMAND(CmdForceTrainProceed);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    96
DEF_COMMAND(CmdReverseTrainDirection);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
DEF_COMMAND(CmdModifyOrder);
6794
feec0fe8e824 (svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents: 6667
diff changeset
    99
DEF_COMMAND(CmdSkipToOrder);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
DEF_COMMAND(CmdDeleteOrder);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
DEF_COMMAND(CmdInsertOrder);
2819
f25fb6ee397f (svn r3367) Unify the 4 distinct CMD_CHANGE_{AIRCRAFT,ROADVEH,SHIP,TRAIN}_SERVICE_INT commands into one CMD_CHANGE_SERVICE_INT command.
tron
parents: 2809
diff changeset
   102
DEF_COMMAND(CmdChangeServiceInt);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
DEF_COMMAND(CmdRestoreOrderIndex);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   105
DEF_COMMAND(CmdBuildIndustry);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   106
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   107
DEF_COMMAND(CmdBuildCompanyHQ);
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   108
DEF_COMMAND(CmdSetCompanyManagerFace);
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   109
DEF_COMMAND(CmdSetCompanyColor);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
DEF_COMMAND(CmdIncreaseLoan);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
DEF_COMMAND(CmdDecreaseLoan);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   114
DEF_COMMAND(CmdWantEnginePreview);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
10151
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   116
DEF_COMMAND(CmdRenameVehicle);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   117
DEF_COMMAND(CmdRenameEngine);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   118
10151
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   119
DEF_COMMAND(CmdRenameCompany);
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   120
DEF_COMMAND(CmdRenamePresident);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
DEF_COMMAND(CmdRenameStation);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
DEF_COMMAND(CmdSellAircraft);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
DEF_COMMAND(CmdBuildAircraft);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
DEF_COMMAND(CmdSendAircraftToHangar);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   127
DEF_COMMAND(CmdRefitAircraft);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   129
DEF_COMMAND(CmdPlaceSign);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   130
DEF_COMMAND(CmdRenameSign);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   131
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   132
DEF_COMMAND(CmdBuildRoadVeh);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   133
DEF_COMMAND(CmdSellRoadVeh);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   134
DEF_COMMAND(CmdSendRoadVehToDepot);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   135
DEF_COMMAND(CmdTurnRoadVeh);
3990
a317e665fb77 (svn r5191) - NewGRF: add cargo refit support for road vehicles
peter1138
parents: 3491
diff changeset
   136
DEF_COMMAND(CmdRefitRoadVeh);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   137
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   138
DEF_COMMAND(CmdPause);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   139
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   140
DEF_COMMAND(CmdBuyShareInCompany);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   141
DEF_COMMAND(CmdSellShareInCompany);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   142
DEF_COMMAND(CmdBuyCompany);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   143
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   144
DEF_COMMAND(CmdBuildTown);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   145
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   146
DEF_COMMAND(CmdRenameTown);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   147
DEF_COMMAND(CmdDoTownAction);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   148
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   149
DEF_COMMAND(CmdSetRoadDriveSide);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   150
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   151
DEF_COMMAND(CmdChangePatchSetting);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   152
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   153
DEF_COMMAND(CmdSellShip);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   154
DEF_COMMAND(CmdBuildShip);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   155
DEF_COMMAND(CmdSendShipToDepot);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   156
DEF_COMMAND(CmdRefitShip);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   157
4712
4335ad42e163 (svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents: 4662
diff changeset
   158
DEF_COMMAND(CmdOrderRefit);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   159
DEF_COMMAND(CmdCloneOrder);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   160
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
DEF_COMMAND(CmdClearArea);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   162
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   163
DEF_COMMAND(CmdGiveMoney);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   164
DEF_COMMAND(CmdMoneyCheat);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   165
DEF_COMMAND(CmdBuildCanal);
147
d0c8100d18cf (svn r148) -Feature: Company HQ can now be moved somewhere else (cost 1% of company value). Water floods HQ.
darkvater
parents: 58
diff changeset
   166
DEF_COMMAND(CmdBuildLock);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   167
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   168
DEF_COMMAND(CmdCompanyCtrl);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   169
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   170
DEF_COMMAND(CmdLevelLand);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   171
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   172
DEF_COMMAND(CmdRefitRailVehicle);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   173
1227
1d940a5e02d2 (svn r1731) - Fix: [ 1106930 ] BugFix: placing signals with 2x1 drags workaround is completely rewritten. Also features checks for hacked/modified clients. Thanks a lot Hackykid!
darkvater
parents: 1217
diff changeset
   174
DEF_COMMAND(CmdBuildSignalTrack);
1d940a5e02d2 (svn r1731) - Fix: [ 1106930 ] BugFix: placing signals with 2x1 drags workaround is completely rewritten. Also features checks for hacked/modified clients. Thanks a lot Hackykid!
darkvater
parents: 1217
diff changeset
   175
DEF_COMMAND(CmdRemoveSignalTrack);
58
b9fdcc9b5c90 (svn r59) -Feature: Added Autosignals, just like Autorail. Can copy signal style, convert signal<->semaphore, etc. Big thanks to betatesters Dribbel and Testman57 (Darkvater)
darkvater
parents: 0
diff changeset
   176
4661
89c3cbba9846 (svn r6544) - Codechange: Rename CmdReplaceVehicle to CmdSetAutoReplace, to reflect what it does.
peter1138
parents: 4659
diff changeset
   177
DEF_COMMAND(CmdSetAutoReplace);
812
65ecc321b3db (svn r1283) -Add: AutoRenew is now a client-side patch instead of a game-side patch
truelight
parents: 679
diff changeset
   178
2244
417a472e7cb5 (svn r2764) -Feature: Clone vehicles
bjarni
parents: 2204
diff changeset
   179
DEF_COMMAND(CmdCloneVehicle);
9921
4dfac3c48507 (svn r14076) -Codechange: Merge the four start/stop commands into a single CMD_START_STOP_VEHICLE.
frosch
parents: 9652
diff changeset
   180
DEF_COMMAND(CmdStartStopVehicle);
4640
4e380e2ecfa7 (svn r6515) -Feature: added "start all" and "stop all" buttons to the depot windows
bjarni
parents: 4300
diff changeset
   181
DEF_COMMAND(CmdMassStartStopVehicle);
9928
fa24e759e11d (svn r14083) -Fix [FS#1264, FS#2037, FS#2038, FS#2110]: Rewrite the autoreplace kernel.
frosch
parents: 9921
diff changeset
   182
DEF_COMMAND(CmdAutoreplaceVehicle);
4659
e476c76389a8 (svn r6542) -Feature: [depot window] added a "sell all vehicles in depot" button
bjarni
parents: 4640
diff changeset
   183
DEF_COMMAND(CmdDepotSellAllVehicles);
4662
e36935c7bdde (svn r6552) -Feature: [depot window] added a "autoreplace all vehicles in depot" button
bjarni
parents: 4661
diff changeset
   184
DEF_COMMAND(CmdDepotMassAutoReplace);
2244
417a472e7cb5 (svn r2764) -Feature: Clone vehicles
bjarni
parents: 2204
diff changeset
   185
6643
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   186
DEF_COMMAND(CmdCreateGroup);
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   187
DEF_COMMAND(CmdRenameGroup);
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   188
DEF_COMMAND(CmdDeleteGroup);
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   189
DEF_COMMAND(CmdAddVehicleGroup);
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   190
DEF_COMMAND(CmdAddSharedVehicleGroup);
f81bee57bc09 (svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents: 6630
diff changeset
   191
DEF_COMMAND(CmdRemoveAllVehiclesGroup);
6667
dba8ef60ffd2 (svn r9898) -Fix (r9874): Many...
peter1138
parents: 6643
diff changeset
   192
DEF_COMMAND(CmdSetGroupReplaceProtection);
dba8ef60ffd2 (svn r9898) -Fix (r9874): Many...
peter1138
parents: 6643
diff changeset
   193
6832
fec0caeac27d (svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents: 6794
diff changeset
   194
DEF_COMMAND(CmdMoveOrder);
6980
c7c4f3bf5901 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6957
diff changeset
   195
DEF_COMMAND(CmdChangeTimetable);
c7c4f3bf5901 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6957
diff changeset
   196
DEF_COMMAND(CmdSetVehicleOnTime);
7066
e5d16aa8d6ca (svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents: 7002
diff changeset
   197
DEF_COMMAND(CmdAutofillTimetable);
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   198
#undef DEF_COMMAND
1804
fbe724472bb4 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1802
diff changeset
   199
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   200
/**
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   201
 * The master command table
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   202
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   203
 * This table contains all possible CommandProc functions with
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   204
 * the flags which belongs to it. The indizes are the same
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   205
 * as the value from the CMD_* enums.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   206
 */
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   207
static const Command _command_proc_table[] = {
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   208
	{CmdBuildRailroadTrack,           CMD_AUTO}, /* CMD_BUILD_RAILROAD_TRACK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   209
	{CmdRemoveRailroadTrack,          CMD_AUTO}, /* CMD_REMOVE_RAILROAD_TRACK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   210
	{CmdBuildSingleRail,              CMD_AUTO}, /* CMD_BUILD_SINGLE_RAIL */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   211
	{CmdRemoveSingleRail,             CMD_AUTO}, /* CMD_REMOVE_SINGLE_RAIL */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   212
	{CmdLandscapeClear,                      0}, /* CMD_LANDSCAPE_CLEAR */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   213
	{CmdBuildBridge,                  CMD_AUTO}, /* CMD_BUILD_BRIDGE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   214
	{CmdBuildRailroadStation,         CMD_AUTO}, /* CMD_BUILD_RAILROAD_STATION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   215
	{CmdBuildTrainDepot,              CMD_AUTO}, /* CMD_BUILD_TRAIN_DEPOT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   216
	{CmdBuildSingleSignal,            CMD_AUTO}, /* CMD_BUILD_SIGNALS */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   217
	{CmdRemoveSingleSignal,           CMD_AUTO}, /* CMD_REMOVE_SIGNALS */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   218
	{CmdTerraformLand,                CMD_AUTO}, /* CMD_TERRAFORM_LAND */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   219
	{CmdPurchaseLandArea,             CMD_AUTO}, /* CMD_PURCHASE_LAND_AREA */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   220
	{CmdSellLandArea,                        0}, /* CMD_SELL_LAND_AREA */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   221
	{CmdBuildTunnel,                  CMD_AUTO}, /* CMD_BUILD_TUNNEL */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   222
	{CmdRemoveFromRailroadStation,           0}, /* CMD_REMOVE_FROM_RAILROAD_STATION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   223
	{CmdConvertRail,                         0}, /* CMD_CONVERT_RAILD */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   224
	{CmdBuildTrainWaypoint,                  0}, /* CMD_BUILD_TRAIN_WAYPOINT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   225
	{CmdRenameWaypoint,                      0}, /* CMD_RENAME_WAYPOINT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   226
	{CmdRemoveTrainWaypoint,                 0}, /* CMD_REMOVE_TRAIN_WAYPOINT */
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   227
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   228
	{CmdBuildRoadStop,                CMD_AUTO}, /* CMD_BUILD_ROAD_STOP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   229
	{CmdRemoveRoadStop,                      0}, /* CMD_REMOVE_ROAD_STOP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   230
	{CmdBuildLongRoad,                CMD_AUTO}, /* CMD_BUILD_LONG_ROAD */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   231
	{CmdRemoveLongRoad,               CMD_AUTO}, /* CMD_REMOVE_LONG_ROAD */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   232
	{CmdBuildRoad,                           0}, /* CMD_BUILD_ROAD */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   233
	{CmdRemoveRoad,                          0}, /* CMD_REMOVE_ROAD */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   234
	{CmdBuildRoadDepot,               CMD_AUTO}, /* CMD_BUILD_ROAD_DEPOT */
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   235
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   236
	{CmdBuildAirport,                 CMD_AUTO}, /* CMD_BUILD_AIRPORT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   237
	{CmdBuildDock,                    CMD_AUTO}, /* CMD_BUILD_DOCK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   238
	{CmdBuildShipDepot,               CMD_AUTO}, /* CMD_BUILD_SHIP_DEPOT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   239
	{CmdBuildBuoy,                    CMD_AUTO}, /* CMD_BUILD_BUOY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   240
	{CmdPlantTree,                    CMD_AUTO}, /* CMD_PLANT_TREE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   241
	{CmdBuildRailVehicle,                    0}, /* CMD_BUILD_RAIL_VEHICLE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   242
	{CmdMoveRailVehicle,                     0}, /* CMD_MOVE_RAIL_VEHICLE */
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   243
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   244
	{CmdSellRailWagon,                       0}, /* CMD_SELL_RAIL_WAGON */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   245
	{CmdSendTrainToDepot,                    0}, /* CMD_SEND_TRAIN_TO_DEPOT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   246
	{CmdForceTrainProceed,                   0}, /* CMD_FORCE_TRAIN_PROCEED */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   247
	{CmdReverseTrainDirection,               0}, /* CMD_REVERSE_TRAIN_DIRECTION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   248
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   249
	{CmdModifyOrder,                         0}, /* CMD_MODIFY_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   250
	{CmdSkipToOrder,                         0}, /* CMD_SKIP_TO_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   251
	{CmdDeleteOrder,                         0}, /* CMD_DELETE_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   252
	{CmdInsertOrder,                         0}, /* CMD_INSERT_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   253
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   254
	{CmdChangeServiceInt,                    0}, /* CMD_CHANGE_SERVICE_INT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   255
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   256
	{CmdBuildIndustry,                       0}, /* CMD_BUILD_INDUSTRY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   257
	{CmdBuildCompanyHQ,               CMD_AUTO}, /* CMD_BUILD_COMPANY_HQ */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   258
	{CmdSetCompanyManagerFace,               0}, /* CMD_SET_COMPANY_MANAGER_FACE */
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   259
	{CmdSetCompanyColor,                     0}, /* CMD_SET_COMPANY_COLOR */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   260
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   261
	{CmdIncreaseLoan,                        0}, /* CMD_INCREASE_LOAN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   262
	{CmdDecreaseLoan,                        0}, /* CMD_DECREASE_LOAN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   263
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   264
	{CmdWantEnginePreview,                   0}, /* CMD_WANT_ENGINE_PREVIEW */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   265
10151
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   266
	{CmdRenameVehicle,                       0}, /* CMD_RENAME_VEHICLE */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   267
	{CmdRenameEngine,                        0}, /* CMD_RENAME_ENGINE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   268
10151
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   269
	{CmdRenameCompany,                       0}, /* CMD_RENAME_COMPANY */
0dd6c35bf0cc (svn r14337) -Codechange: use CmdRename* and CMD_RENAME_* for vehicle, president and company renaming commands, too
smatz
parents: 9928
diff changeset
   270
	{CmdRenamePresident,                     0}, /* CMD_RENAME_PRESIDENT */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   271
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   272
	{CmdRenameStation,                       0}, /* CMD_RENAME_STATION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   273
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   274
	{CmdSellAircraft,                        0}, /* CMD_SELL_AIRCRAFT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   275
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   276
	{CmdBuildAircraft,                       0}, /* CMD_BUILD_AIRCRAFT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   277
	{CmdSendAircraftToHangar,                0}, /* CMD_SEND_AIRCRAFT_TO_HANGAR */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   278
	{CmdRefitAircraft,                       0}, /* CMD_REFIT_AIRCRAFT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   279
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   280
	{CmdPlaceSign,                           0}, /* CMD_PLACE_SIGN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   281
	{CmdRenameSign,                          0}, /* CMD_RENAME_SIGN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   282
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   283
	{CmdBuildRoadVeh,                        0}, /* CMD_BUILD_ROAD_VEH */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   284
	{CmdSellRoadVeh,                         0}, /* CMD_SELL_ROAD_VEH */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   285
	{CmdSendRoadVehToDepot,                  0}, /* CMD_SEND_ROADVEH_TO_DEPOT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   286
	{CmdTurnRoadVeh,                         0}, /* CMD_TURN_ROADVEH */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   287
	{CmdRefitRoadVeh,                        0}, /* CMD_REFIT_ROAD_VEH */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   288
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   289
	{CmdPause,                      CMD_SERVER}, /* CMD_PAUSE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   290
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   291
	{CmdBuyShareInCompany,                   0}, /* CMD_BUY_SHARE_IN_COMPANY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   292
	{CmdSellShareInCompany,                  0}, /* CMD_SELL_SHARE_IN_COMPANY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   293
	{CmdBuyCompany,                          0}, /* CMD_BUY_COMANY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   294
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   295
	{CmdBuildTown,                 CMD_OFFLINE}, /* CMD_BUILD_TOWN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   296
	{CmdRenameTown,                 CMD_SERVER}, /* CMD_RENAME_TOWN */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   297
	{CmdDoTownAction,                        0}, /* CMD_DO_TOWN_ACTION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   298
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   299
	{CmdSetRoadDriveSide,           CMD_SERVER}, /* CMD_SET_ROAD_DRIVE_SIDE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   300
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   301
	{CmdSellShip,                            0}, /* CMD_SELL_SHIP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   302
	{CmdBuildShip,                           0}, /* CMD_BUILD_SHIP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   303
	{CmdSendShipToDepot,                     0}, /* CMD_SEND_SHIP_TO_DEPOT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   304
	{CmdRefitShip,                           0}, /* CMD_REFIT_SHIP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   305
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   306
	{CmdOrderRefit,                          0}, /* CMD_ORDER_REFIT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   307
	{CmdCloneOrder,                          0}, /* CMD_CLONE_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   308
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   309
	{CmdClearArea,                           0}, /* CMD_CLEAR_AREA */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   310
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   311
	{CmdMoneyCheat,                CMD_OFFLINE}, /* CMD_MONEY_CHEAT */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   312
	{CmdBuildCanal,                   CMD_AUTO}, /* CMD_BUILD_CANAL */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   313
	{CmdCompanyCtrl,                         0}, /* CMD_COMPANY_CTRL */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   314
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   315
	{CmdLevelLand,                    CMD_AUTO}, /* CMD_LEVEL_LAND */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   316
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   317
	{CmdRefitRailVehicle,                    0}, /* CMD_REFIT_RAIL_VEHICLE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   318
	{CmdRestoreOrderIndex,                   0}, /* CMD_RESTORE_ORDER_INDEX */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   319
	{CmdBuildLock,                    CMD_AUTO}, /* CMD_BUILD_LOCK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   320
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   321
	{CmdBuildSignalTrack,             CMD_AUTO}, /* CMD_BUILD_SIGNAL_TRACK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   322
	{CmdRemoveSignalTrack,            CMD_AUTO}, /* CMD_REMOVE_SIGNAL_TRACK */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   323
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   324
	{CmdGiveMoney,                           0}, /* CMD_GIVE_MONEY */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   325
	{CmdChangePatchSetting,         CMD_SERVER}, /* CMD_CHANGE_PATCH_SETTING */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   326
	{CmdSetAutoReplace,                      0}, /* CMD_SET_AUTOREPLACE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   327
	{CmdCloneVehicle,                        0}, /* CMD_CLONE_VEHICLE */
9921
4dfac3c48507 (svn r14076) -Codechange: Merge the four start/stop commands into a single CMD_START_STOP_VEHICLE.
frosch
parents: 9652
diff changeset
   328
	{CmdStartStopVehicle,                    0}, /* CMD_START_STOP_VEHICLE */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   329
	{CmdMassStartStopVehicle,                0}, /* CMD_MASS_START_STOP */
9928
fa24e759e11d (svn r14083) -Fix [FS#1264, FS#2037, FS#2038, FS#2110]: Rewrite the autoreplace kernel.
frosch
parents: 9921
diff changeset
   330
	{CmdAutoreplaceVehicle,                  0}, /* CMD_AUTOREPLACE_VEHICLE */
8500
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   331
	{CmdDepotSellAllVehicles,                0}, /* CMD_DEPOT_SELL_ALL_VEHICLES */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   332
	{CmdDepotMassAutoReplace,                0}, /* CMD_DEPOT_MASS_AUTOREPLACE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   333
	{CmdCreateGroup,                         0}, /* CMD_CREATE_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   334
	{CmdDeleteGroup,                         0}, /* CMD_DELETE_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   335
	{CmdRenameGroup,                         0}, /* CMD_RENAME_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   336
	{CmdAddVehicleGroup,                     0}, /* CMD_ADD_VEHICLE_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   337
	{CmdAddSharedVehicleGroup,               0}, /* CMD_ADD_SHARE_VEHICLE_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   338
	{CmdRemoveAllVehiclesGroup,              0}, /* CMD_REMOVE_ALL_VEHICLES_GROUP */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   339
	{CmdSetGroupReplaceProtection,           0}, /* CMD_SET_GROUP_REPLACE_PROTECTION */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   340
	{CmdMoveOrder,                           0}, /* CMD_MOVE_ORDER */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   341
	{CmdChangeTimetable,                     0}, /* CMD_CHANGE_TIMETABLE */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   342
	{CmdSetVehicleOnTime,                    0}, /* CMD_SET_VEHICLE_ON_TIME */
133710926f7a (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed.
peter1138
parents: 8486
diff changeset
   343
	{CmdAutofillTimetable,                   0}, /* CMD_AUTOFILL_TIMETABLE */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   344
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   345
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   346
/*!
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   347
 * This function range-checks a cmd, and checks if the cmd is not NULL
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   348
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   349
 * @param cmd The integervalue of a command
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   350
 * @return true if the command is valid (and got a CommandProc function)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   351
 */
10237
c55922dabb25 (svn r14465) -Codechange: minor code style of command.cpp.
rubidium
parents: 10225
diff changeset
   352
bool IsValidCommand(uint32 cmd)
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 889
diff changeset
   353
{
2645
841087328e0e (svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents: 2425
diff changeset
   354
	cmd &= 0xFF;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 889
diff changeset
   355
2645
841087328e0e (svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents: 2425
diff changeset
   356
	return
841087328e0e (svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents: 2425
diff changeset
   357
		cmd < lengthof(_command_proc_table) &&
841087328e0e (svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents: 2425
diff changeset
   358
		_command_proc_table[cmd].proc != NULL;
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 889
diff changeset
   359
}
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 889
diff changeset
   360
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   361
/*!
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   362
 * This function mask the parameter with 0xFF and returns
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   363
 * the flags which belongs to the given command.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   364
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   365
 * @param cmd The integer value of the command
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   366
 * @return The flags for this command
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   367
 */
10237
c55922dabb25 (svn r14465) -Codechange: minor code style of command.cpp.
rubidium
parents: 10225
diff changeset
   368
byte GetCommandFlags(uint32 cmd)
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   369
{
10237
c55922dabb25 (svn r14465) -Codechange: minor code style of command.cpp.
rubidium
parents: 10225
diff changeset
   370
	assert(IsValidCommand(cmd));
c55922dabb25 (svn r14465) -Codechange: minor code style of command.cpp.
rubidium
parents: 10225
diff changeset
   371
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   372
	return _command_proc_table[cmd & 0xFF].flags;
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   373
}
1804
fbe724472bb4 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1802
diff changeset
   374
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   375
static int _docommand_recursive = 0;
2304
bebc1ee33ab2 (svn r2828) Only command.c needs to know about _docommand_recursive, so make it static. Tell me if there's a problem, because i removed it from network_server.c, but afaict it should be ok
tron
parents: 2244
diff changeset
   376
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   377
/*!
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   378
 * This function executes a given command with the parameters from the #CommandProc parameter list.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   379
 * Depending on the flags parameter it execute or test a command.
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   380
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   381
 * @param tile The tile to apply the command on (for the #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   382
 * @param p1 Additional data for the command (for the #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   383
 * @param p2 Additional data for the command (for the #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   384
 * @param flags Flags for the command and how to execute the command
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   385
 * @param procc The command-id to execute (a value of the CMD_* enums)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   386
 * @see CommandProc
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   387
 */
8116
8da76dcb3287 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8114
diff changeset
   388
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32 procc)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   389
{
6943
1914f26aee04 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents: 6832
diff changeset
   390
	CommandCost res;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   391
1776
956f8589024d (svn r2280) - Fix: Check if the passed tile to DoCommand is within the current mapsize
Darkvater
parents: 1728
diff changeset
   392
	/* Do not even think about executing out-of-bounds tile-commands */
8652
671ecccd18ad (svn r12304) -Codechange: use IsValidTile() where it should be used
glx
parents: 8519
diff changeset
   393
	if (!IsValidTile(tile)) {
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   394
		_cmd_text = NULL;
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   395
		return CMD_ERROR;
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   396
	}
1776
956f8589024d (svn r2280) - Fix: Check if the passed tile to DoCommand is within the current mapsize
Darkvater
parents: 1728
diff changeset
   397
10237
c55922dabb25 (svn r14465) -Codechange: minor code style of command.cpp.
rubidium
parents: 10225
diff changeset
   398
	CommandProc *proc = _command_proc_table[procc].proc;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   399
2749
c9312a4a1efe (svn r3294) - Fix: use INVALID_STRING_ID instead of -1.
Darkvater
parents: 2715
diff changeset
   400
	if (_docommand_recursive == 0) _error_message = INVALID_STRING_ID;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   401
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   402
	_docommand_recursive++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   403
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   404
	/* only execute the test call if it's toplevel, or we're not execing. */
8486
6118595a0091 (svn r12061) -Cleanup: since r12060, DC_FORCETEST is not used anymore
smatz
parents: 8442
diff changeset
   405
	if (_docommand_recursive == 1 || !(flags & DC_EXEC) ) {
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   406
		SetTownRatingTestMode(true);
3491
35d747bb5e82 (svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents: 3421
diff changeset
   407
		res = proc(tile, flags & ~DC_EXEC, p1, p2);
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   408
		SetTownRatingTestMode(false);
1691
852ca27d6eef (svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
tron
parents: 1623
diff changeset
   409
		if (CmdFailed(res)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   410
			res.SetGlobalErrorMessage();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   411
			goto error;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   412
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   413
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   414
		if (_docommand_recursive == 1 &&
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   415
				!(flags & DC_QUERY_COST) &&
8519
fe61d7aa3053 (svn r12094) -Codechange: use DC_BANKRUPT command flag when removing player property to allow further fixes
smatz
parents: 8500
diff changeset
   416
				!(flags & DC_BANKRUPT) &&
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   417
				res.GetCost() != 0 &&
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   418
				!CheckCompanyHasMoney(res)) {
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   419
			goto error;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   420
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   421
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   422
		if (!(flags & DC_EXEC)) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   423
			_docommand_recursive--;
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   424
			_cmd_text = NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   425
			return res;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   426
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   427
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   428
889
64d2f7d5f02b (svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents: 842
diff changeset
   429
	/* Execute the command here. All cost-relevant functions set the expenses type
8230
64f28fe2d5c8 (svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents: 8199
diff changeset
   430
	 * themselves to the cost object at some point */
3491
35d747bb5e82 (svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents: 3421
diff changeset
   431
	res = proc(tile, flags, p1, p2);
1691
852ca27d6eef (svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
tron
parents: 1623
diff changeset
   432
	if (CmdFailed(res)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   433
		res.SetGlobalErrorMessage();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   434
error:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   435
		_docommand_recursive--;
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   436
		_cmd_text = NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   437
		return CMD_ERROR;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   438
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   439
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   440
	/* if toplevel, subtract the money. */
8519
fe61d7aa3053 (svn r12094) -Codechange: use DC_BANKRUPT command flag when removing player property to allow further fixes
smatz
parents: 8500
diff changeset
   441
	if (--_docommand_recursive == 0 && !(flags & DC_BANKRUPT)) {
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   442
		SubtractMoneyFromCompany(res);
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   443
		/* XXX - Old AI hack which doesn't use DoCommandDP; update last build coord of company */
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   444
		if (tile != 0 && IsValidCompanyID(_current_company)) {
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   445
			GetCompany(_current_company)->last_build_coordinate = tile;
2772
593f2304e5ea (svn r3319) - Fix (regression): "Unnamed Competitors". A result of revision r3224 which allowed AI's for multiplayer. Old AI's didn't function correctly anymore. The update of last-built tile is moved back, but to a slightly different place so it is only executed when the command is actually successfully executed. This code shouldn't be neccessary, but alas, the old AI doesn't use DoCommandDP() functions.
Darkvater
parents: 2767
diff changeset
   446
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   447
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   448
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   449
	_cmd_text = NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   450
	return res;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   451
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   452
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   453
/*!
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   454
 * This functions returns the money which can be used to execute a command.
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   455
 * This is either the money of the current company or INT64_MAX if there
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   456
 * is no such a company "at the moment" like the server itself.
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   457
 *
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   458
 * @return The available money of a company or INT64_MAX
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   459
 */
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6980
diff changeset
   460
Money GetAvailableMoneyForCommand()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   461
{
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   462
	CompanyID company = _current_company;
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   463
	if (!IsValidCompanyID(company)) return INT64_MAX;
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   464
	return GetCompany(company)->money;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   465
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   466
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   467
/*!
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   468
 * Toplevel network safe docommand function for the current company. Must not be called recursively.
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   469
 * The callback is called when the command succeeded or failed. The parameters
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   470
 * tile, p1 and p2 are from the #CommandProc function. The paramater cmd is the command to execute.
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   471
 * The parameter my_cmd is used to indicate if the command is from a company or the server.
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   472
 *
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   473
 * @param tile The tile to perform a command on (see #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   474
 * @param p1 Additional data for the command (see #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   475
 * @param p2 Additional data for the command (see #CommandProc)
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   476
 * @param callback A callback function to call after the command is finished
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   477
 * @param cmd The command to execute (a CMD_* value)
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   478
 * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
7559
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   479
 * @return true if the command succeeded, else false
40d62002dad3 (svn r11084) -Documentation [FS#1219]: of command.*. Patch by Progman.
rubidium
parents: 7521
diff changeset
   480
 */
7222
d46753675bf7 (svn r10501) -Fix [FS#1015]: error dialog was sometimes shown on all clients when a command failed instead of only the client that actually did the command.
rubidium
parents: 7066
diff changeset
   481
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd, bool my_cmd)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   482
{
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   483
	CommandCost res, res2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   484
	CommandProc *proc;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   485
	uint32 flags;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   486
	bool notest;
3182
0cec126ca9a9 (svn r3827) Remove the global variable _error_message_2, it's only used as local variable
tron
parents: 2820
diff changeset
   487
	StringID error_part1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   488
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3182
diff changeset
   489
	int x = TileX(tile) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3182
diff changeset
   490
	int y = TileY(tile) * TILE_SIZE;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   491
1776
956f8589024d (svn r2280) - Fix: Check if the passed tile to DoCommand is within the current mapsize
Darkvater
parents: 1728
diff changeset
   492
	/* Do not even think about executing out-of-bounds tile-commands */
8652
671ecccd18ad (svn r12304) -Codechange: use IsValidTile() where it should be used
glx
parents: 8519
diff changeset
   493
	if (!IsValidTile(tile)) {
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   494
		_cmd_text = NULL;
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   495
		return false;
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   496
	}
1776
956f8589024d (svn r2280) - Fix: Check if the passed tile to DoCommand is within the current mapsize
Darkvater
parents: 1728
diff changeset
   497
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   498
	assert(_docommand_recursive == 0);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   499
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   500
	_error_message = INVALID_STRING_ID;
3182
0cec126ca9a9 (svn r3827) Remove the global variable _error_message_2, it's only used as local variable
tron
parents: 2820
diff changeset
   501
	error_part1 = GB(cmd, 16, 16);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   502
	_additional_cash_required = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   503
5067
f3816e74ad32 (svn r7125) -Fix: Several errors/glitches related to multiplayer and bankrupcy, mainly such a
Darkvater
parents: 4850
diff changeset
   504
	/** Spectator has no rights except for the (dedicated) server which
f3816e74ad32 (svn r7125) -Fix: Several errors/glitches related to multiplayer and bankrupcy, mainly such a
Darkvater
parents: 4850
diff changeset
   505
	 * is/can be a spectator but as the server it can do anything */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   506
	if (_current_company == COMPANY_SPECTATOR && !_network_server) {
7222
d46753675bf7 (svn r10501) -Fix [FS#1015]: error dialog was sometimes shown on all clients when a command failed instead of only the client that actually did the command.
rubidium
parents: 7066
diff changeset
   507
		if (my_cmd) ShowErrorMessage(_error_message, error_part1, x, y);
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   508
		_cmd_text = NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   509
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   510
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   511
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   512
	flags = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   513
	if (cmd & CMD_NO_WATER) flags |= DC_NO_WATER;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   514
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   515
	/* get pointer to command handler */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   516
	assert((cmd & 0xFF) < lengthof(_command_proc_table));
1804
fbe724472bb4 (svn r2308) - Fix: enforce server-only and/or offline commands by giving them flags in the process table. This also fixes bug "[ 1190944 ] Many commands not checked for security"
Darkvater
parents: 1802
diff changeset
   517
	proc = _command_proc_table[cmd & 0xFF].proc;
1877
ab6a315fa930 (svn r2383) - Fix: Monkey-testing turned up some command crashes.
Darkvater
parents: 1838
diff changeset
   518
	if (proc == NULL) {
ab6a315fa930 (svn r2383) - Fix: Monkey-testing turned up some command crashes.
Darkvater
parents: 1838
diff changeset
   519
		_cmd_text = NULL;
ab6a315fa930 (svn r2383) - Fix: Monkey-testing turned up some command crashes.
Darkvater
parents: 1838
diff changeset
   520
		return false;
ab6a315fa930 (svn r2383) - Fix: Monkey-testing turned up some command crashes.
Darkvater
parents: 1838
diff changeset
   521
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   522
7521
0da1e91510e4 (svn r11040) -Fix [FS#1179]: removing CMD_AUTO from some commands could remotely trigger an assertion.
rubidium
parents: 7506
diff changeset
   523
	if (GetCommandFlags(cmd) & CMD_AUTO) flags |= DC_AUTO;
0da1e91510e4 (svn r11040) -Fix [FS#1179]: removing CMD_AUTO from some commands could remotely trigger an assertion.
rubidium
parents: 7506
diff changeset
   524
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   525
	/* Some commands have a different output in dryrun than the realrun
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   526
	 *  e.g.: if you demolish a whole town, the dryrun would say okay.
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   527
	 *  but by really destroying, your rating drops and at a certain point
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   528
	 *  it will fail. so res and res2 are different
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   529
	 * CMD_REMOVE_LONG_ROAD: This command has special local authority
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   530
	 * restrictions which may cause the test run to fail (the previous
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   531
	 * road fragments still stay there and the town won't let you
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   532
	 * disconnect the road system), but the exec will succeed and this
6546
4c6d90bde803 (svn r9742) -Fix (r9689) [FS#739]: Fix cloning with refit costs again, hopefully for good this time.
maedhros
parents: 6491
diff changeset
   533
	 * fact will trigger an assertion failure. --pasky
4c6d90bde803 (svn r9742) -Fix (r9689) [FS#739]: Fix cloning with refit costs again, hopefully for good this time.
maedhros
parents: 6491
diff changeset
   534
	 * CMD_CLONE_VEHICLE: Both building new vehicles and refitting them can be
4c6d90bde803 (svn r9742) -Fix (r9689) [FS#739]: Fix cloning with refit costs again, hopefully for good this time.
maedhros
parents: 6491
diff changeset
   535
	 * influenced by newgrf callbacks, which makes it impossible to accurately
9061
8ebd40e86171 (svn r12913) -Add: ability to backup and restore a player's economic data and data for a vehicle (or chain of vehicles)
bjarni
parents: 8854
diff changeset
   536
	 * estimate the cost of cloning a vehicle. */
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   537
	notest =
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   538
		(cmd & 0xFF) == CMD_CLEAR_AREA ||
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   539
		(cmd & 0xFF) == CMD_LEVEL_LAND ||
6546
4c6d90bde803 (svn r9742) -Fix (r9689) [FS#739]: Fix cloning with refit costs again, hopefully for good this time.
maedhros
parents: 6491
diff changeset
   540
		(cmd & 0xFF) == CMD_REMOVE_LONG_ROAD ||
9061
8ebd40e86171 (svn r12913) -Add: ability to backup and restore a player's economic data and data for a vehicle (or chain of vehicles)
bjarni
parents: 8854
diff changeset
   541
		(cmd & 0xFF) == CMD_CLONE_VEHICLE;
8187
ebae31fc6f0b (svn r11750) -Revert (r11749): commited too much
glx
parents: 8186
diff changeset
   542
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   543
	_docommand_recursive = 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   544
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   545
	/* cost estimation only? */
5580
b7e597116b9c (svn r8027) -Fix (FS#486) If a pause command is issues, it will now pause the game even if shift is pressed instead of giving a cost estimate of 0. This fixes a problem where the server does not pause_on_join when the player on the interactive server has the shift button pressed. (Thanks to pvz for the report and the fix)
celestar
parents: 5475
diff changeset
   546
	if (!IsGeneratingWorld() &&
b7e597116b9c (svn r8027) -Fix (FS#486) If a pause command is issues, it will now pause the game even if shift is pressed instead of giving a cost estimate of 0. This fixes a problem where the server does not pause_on_join when the player on the interactive server has the shift button pressed. (Thanks to pvz for the report and the fix)
celestar
parents: 5475
diff changeset
   547
			_shift_pressed &&
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   548
			IsLocalCompany() &&
5580
b7e597116b9c (svn r8027) -Fix (FS#486) If a pause command is issues, it will now pause the game even if shift is pressed instead of giving a cost estimate of 0. This fixes a problem where the server does not pause_on_join when the player on the interactive server has the shift button pressed. (Thanks to pvz for the report and the fix)
celestar
parents: 5475
diff changeset
   549
			!(cmd & (CMD_NETWORK_COMMAND | CMD_SHOW_NO_ERROR)) &&
b7e597116b9c (svn r8027) -Fix (FS#486) If a pause command is issues, it will now pause the game even if shift is pressed instead of giving a cost estimate of 0. This fixes a problem where the server does not pause_on_join when the player on the interactive server has the shift button pressed. (Thanks to pvz for the report and the fix)
celestar
parents: 5475
diff changeset
   550
			(cmd & 0xFF) != CMD_PAUSE) {
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   551
		/* estimate the cost. */
8442
bc0ef8db6377 (svn r12012) -Fix (r11795): Enable TownRatingTestMode during cost estimation with 'shift'-key.
frosch
parents: 8306
diff changeset
   552
		SetTownRatingTestMode(true);
3491
35d747bb5e82 (svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents: 3421
diff changeset
   553
		res = proc(tile, flags, p1, p2);
8442
bc0ef8db6377 (svn r12012) -Fix (r11795): Enable TownRatingTestMode during cost estimation with 'shift'-key.
frosch
parents: 8306
diff changeset
   554
		SetTownRatingTestMode(false);
1691
852ca27d6eef (svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
tron
parents: 1623
diff changeset
   555
		if (CmdFailed(res)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   556
			res.SetGlobalErrorMessage();
3182
0cec126ca9a9 (svn r3827) Remove the global variable _error_message_2, it's only used as local variable
tron
parents: 2820
diff changeset
   557
			ShowErrorMessage(_error_message, error_part1, x, y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   558
		} else {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   559
			ShowEstimatedCostOrIncome(res.GetCost(), x, y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   560
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   561
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   562
		_docommand_recursive = 0;
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   563
		_cmd_text = NULL;
7609
b70ffc13652a (svn r11138) -Codechange: prepare some subsystems for persistent storage for NewGRFs.
rubidium
parents: 7559
diff changeset
   564
		ClearStorageChanges(false);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   565
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   566
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   567
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   568
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   569
	if (!((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   570
		/* first test if the command can be executed. */
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   571
		SetTownRatingTestMode(true);
3491
35d747bb5e82 (svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents: 3421
diff changeset
   572
		res = proc(tile, flags, p1, p2);
8232
a4883a0598db (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx
parents: 8230
diff changeset
   573
		SetTownRatingTestMode(false);
1691
852ca27d6eef (svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
tron
parents: 1623
diff changeset
   574
		if (CmdFailed(res)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   575
			res.SetGlobalErrorMessage();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   576
			goto show_error;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   577
		}
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   578
		/* no money? Only check if notest is off */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   579
		if (!notest && res.GetCost() != 0 && !CheckCompanyHasMoney(res)) goto show_error;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   580
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   581
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   582
#ifdef ENABLE_NETWORK
1838
4aed9afd0744 (svn r2343) - Fix (regression): dedicated server caused desyncs with its commands, because the player sent over the network is OWNER_SPECTATOR as well, which on clients cannot execute anything. So *hack*hack* it into temporarily player 0.
Darkvater
parents: 1834
diff changeset
   583
	/** If we are in network, and the command is not from the network
4aed9afd0744 (svn r2343) - Fix (regression): dedicated server caused desyncs with its commands, because the player sent over the network is OWNER_SPECTATOR as well, which on clients cannot execute anything. So *hack*hack* it into temporarily player 0.
Darkvater
parents: 1834
diff changeset
   584
	 * send it to the command-queue and abort execution
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   585
	 * If we are a dedicated server temporarily switch local company, otherwise
1838
4aed9afd0744 (svn r2343) - Fix (regression): dedicated server caused desyncs with its commands, because the player sent over the network is OWNER_SPECTATOR as well, which on clients cannot execute anything. So *hack*hack* it into temporarily player 0.
Darkvater
parents: 1834
diff changeset
   586
	 * the other parties won't be able to execute our command and will desync.
5067
f3816e74ad32 (svn r7125) -Fix: Several errors/glitches related to multiplayer and bankrupcy, mainly such a
Darkvater
parents: 4850
diff changeset
   587
	 * We also need to do this if the server's company has gone bankrupt
f3816e74ad32 (svn r7125) -Fix: Several errors/glitches related to multiplayer and bankrupcy, mainly such a
Darkvater
parents: 4850
diff changeset
   588
	 * @todo Rewrite (dedicated) server to something more than a dirty hack!
1838
4aed9afd0744 (svn r2343) - Fix (regression): dedicated server caused desyncs with its commands, because the player sent over the network is OWNER_SPECTATOR as well, which on clients cannot execute anything. So *hack*hack* it into temporarily player 0.
Darkvater
parents: 1834
diff changeset
   589
	 */
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   590
	if (_networking && !(cmd & CMD_NETWORK_COMMAND)) {
10225
eb61dd8101c1 (svn r14448) -Codechange [FS#2328]: rename a few variables (based on a patch by planetmaker)
smatz
parents: 10208
diff changeset
   591
		CompanyID bck = _local_company;
eb61dd8101c1 (svn r14448) -Codechange [FS#2328]: rename a few variables (based on a patch by planetmaker)
smatz
parents: 10208
diff changeset
   592
		if (_network_dedicated || (_network_server && bck == COMPANY_SPECTATOR)) _local_company = COMPANY_FIRST;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   593
		NetworkSend_Command(tile, p1, p2, cmd, callback);
10225
eb61dd8101c1 (svn r14448) -Codechange [FS#2328]: rename a few variables (based on a patch by planetmaker)
smatz
parents: 10208
diff changeset
   594
		if (_network_dedicated || (_network_server && bck == COMPANY_SPECTATOR)) _local_company = bck;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   595
		_docommand_recursive = 0;
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   596
		_cmd_text = NULL;
7609
b70ffc13652a (svn r11138) -Codechange: prepare some subsystems for persistent storage for NewGRFs.
rubidium
parents: 7559
diff changeset
   597
		ClearStorageChanges(false);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   598
		return true;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   599
	}
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 534
diff changeset
   600
#endif /* ENABLE_NETWORK */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   601
	DebugDumpCommands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd, _cmd_text);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   602
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   603
	/* update last build coordinate of company. */
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   604
	if (tile != 0 && IsValidCompanyID(_current_company)) {
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   605
		GetCompany(_current_company)->last_build_coordinate = tile;
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   606
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   607
889
64d2f7d5f02b (svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents: 842
diff changeset
   608
	/* Actually try and execute the command. If no cost-type is given
64d2f7d5f02b (svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents: 842
diff changeset
   609
	 * use the construction one */
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3991
diff changeset
   610
	res2 = proc(tile, flags | DC_EXEC, p1, p2);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   611
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   612
	/* If notest is on, it means the result of the test can be different than
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   613
	 *  the real command.. so ignore the test */
652
206a7c2016ba (svn r1085) -Fix: [Network] [ 1084834 ] If IF_IN_NETWORK flag was on, an error
truelight
parents: 601
diff changeset
   614
	if (!notest && !((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   615
		assert(res.GetCost() == res2.GetCost() && CmdFailed(res) == CmdFailed(res2)); // sanity check
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   616
	} else {
1702
be148d0fbf9d (svn r2206) - Regression Fix: slight typo of res2 into res, this also fixes recent bug "[ 1183396 ] Train can't find depot, it gives money in Multiplayer"
Darkvater
parents: 1701
diff changeset
   617
		if (CmdFailed(res2)) {
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   618
			res.SetGlobalErrorMessage();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   619
			goto show_error;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   620
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   621
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   622
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   623
	SubtractMoneyFromCompany(res2);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   624
8306
22e1344c5457 (svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents: 8275
diff changeset
   625
	/* update signals if needed */
22e1344c5457 (svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents: 8275
diff changeset
   626
	UpdateSignalsInBuffer();
22e1344c5457 (svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents: 8275
diff changeset
   627
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   628
	if (IsLocalCompany() && _game_mode != GM_EDITOR) {
7506
93b2cbcce3d6 (svn r11021) -Fix [FS#1175]: do not display income/expenses when they do not belong to a "valid" tile, like the money cheat/giving money.
rubidium
parents: 7266
diff changeset
   629
		if (res2.GetCost() != 0 && tile != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
6990
136a08baf0ed (svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents: 6980
diff changeset
   630
		if (_additional_cash_required != 0) {
7002
1bf6a62b0fcb (svn r10258) -Codechange: as we are now using int64 all over the place, it's better to use int64 variables in the string generating too instead of packing them into two int32s.
rubidium
parents: 6991
diff changeset
   631
			SetDParam(0, _additional_cash_required);
7222
d46753675bf7 (svn r10501) -Fix [FS#1015]: error dialog was sometimes shown on all clients when a command failed instead of only the client that actually did the command.
rubidium
parents: 7066
diff changeset
   632
			if (my_cmd) ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
6950
14ecb0acdfb4 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents: 6943
diff changeset
   633
			if (res2.GetCost() == 0) goto callb_err;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   634
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   635
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   636
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   637
	_docommand_recursive = 0;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   638
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   639
	if (callback) callback(true, tile, p1, p2);
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   640
	_cmd_text = NULL;
7609
b70ffc13652a (svn r11138) -Codechange: prepare some subsystems for persistent storage for NewGRFs.
rubidium
parents: 7559
diff changeset
   641
	ClearStorageChanges(true);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   642
	return true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   643
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   644
show_error:
6123
04eb770ec17e (svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6012
diff changeset
   645
	/* show error message if the command fails? */
10207
c291a21b304e (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents: 10151
diff changeset
   646
	if (IsLocalCompany() && error_part1 != 0 && my_cmd) {
6491
00dc414c909d (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6453
diff changeset
   647
		ShowErrorMessage(_error_message, error_part1, x, y);
3182
0cec126ca9a9 (svn r3827) Remove the global variable _error_message_2, it's only used as local variable
tron
parents: 2820
diff changeset
   648
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   649
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   650
callb_err:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   651
	_docommand_recursive = 0;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 147
diff changeset
   652
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   653
	if (callback) callback(false, tile, p1, p2);
1820
d03c56850dc2 (svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents: 1804
diff changeset
   654
	_cmd_text = NULL;
7609
b70ffc13652a (svn r11138) -Codechange: prepare some subsystems for persistent storage for NewGRFs.
rubidium
parents: 7559
diff changeset
   655
	ClearStorageChanges(false);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   656
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   657
}
8854
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   658
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   659
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   660
CommandCost CommandCost::AddCost(CommandCost ret)
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   661
{
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   662
	this->AddCost(ret.cost);
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   663
	if (this->success && !ret.success) {
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   664
		this->message = ret.message;
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   665
		this->success = false;
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   666
	}
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   667
	return *this;
d3f0e0960fb9 (svn r12616) -Codechange: r12591 didn't work as expected for NDS, move one function back to cpp
smatz
parents: 8841
diff changeset
   668
}