mirror of https://github.com/OpenTTD/OpenTTD
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
parent
5fe906e149
commit
8808f3beea
|
@ -74,7 +74,8 @@
|
||||||
* Effectively collecting garbage once every two months per AI. */
|
* Effectively collecting garbage once every two months per AI. */
|
||||||
if ((AI::frame_counter & 255) == 0) {
|
if ((AI::frame_counter & 255) == 0) {
|
||||||
CompanyID cid = (CompanyID)GB(AI::frame_counter, 8, 4);
|
CompanyID cid = (CompanyID)GB(AI::frame_counter, 8, 4);
|
||||||
if (Company::IsValidID(cid) && !IsHumanCompany(cid)) Company::Get(cid)->ai_instance->CollectGarbage();
|
Company *com = Company::GetIfValid(cid);
|
||||||
|
if (com != NULL && !IsHumanCompany(cid)) com->ai_instance->CollectGarbage();
|
||||||
}
|
}
|
||||||
|
|
||||||
_current_company = OWNER_NONE;
|
_current_company = OWNER_NONE;
|
||||||
|
@ -227,12 +228,12 @@ void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
||||||
/* static */ void AI::Save(CompanyID company)
|
/* static */ void AI::Save(CompanyID company)
|
||||||
{
|
{
|
||||||
if (!_networking || _network_server) {
|
if (!_networking || _network_server) {
|
||||||
assert(Company::IsValidID(company));
|
Company *c = Company::GetIfValid(company);
|
||||||
assert(Company::Get(company)->ai_instance != NULL);
|
assert(c != NULL && c->ai_instance != NULL);
|
||||||
|
|
||||||
CompanyID old_company = _current_company;
|
CompanyID old_company = _current_company;
|
||||||
_current_company = company;
|
_current_company = company;
|
||||||
Company::Get(company)->ai_instance->Save();
|
c->ai_instance->Save();
|
||||||
_current_company = old_company;
|
_current_company = old_company;
|
||||||
} else {
|
} else {
|
||||||
AIInstance::SaveEmpty();
|
AIInstance::SaveEmpty();
|
||||||
|
@ -242,12 +243,12 @@ void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
||||||
/* static */ void AI::Load(CompanyID company, int version)
|
/* static */ void AI::Load(CompanyID company, int version)
|
||||||
{
|
{
|
||||||
if (!_networking || _network_server) {
|
if (!_networking || _network_server) {
|
||||||
assert(Company::IsValidID(company));
|
Company *c = Company::GetIfValid(company);
|
||||||
assert(Company::Get(company)->ai_instance != NULL);
|
assert(c != NULL && c->ai_instance != NULL);
|
||||||
|
|
||||||
CompanyID old_company = _current_company;
|
CompanyID old_company = _current_company;
|
||||||
_current_company = company;
|
_current_company = company;
|
||||||
Company::Get(company)->ai_instance->Load(version);
|
c->ai_instance->Load(version);
|
||||||
_current_company = old_company;
|
_current_company = old_company;
|
||||||
} else {
|
} else {
|
||||||
/* Read, but ignore, the load data */
|
/* Read, but ignore, the load data */
|
||||||
|
|
|
@ -641,7 +641,8 @@ struct AIDebugWindow : public Window {
|
||||||
{
|
{
|
||||||
/* Disable the companies who are not active or not an AI */
|
/* Disable the companies who are not active or not an AI */
|
||||||
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
||||||
this->SetWidgetDisabledState(i + AID_WIDGET_COMPANY_BUTTON_START, !Company::IsValidID(i) || !Company::Get(i)->is_ai);
|
Company *c = Company::GetIfValid(i);
|
||||||
|
this->SetWidgetDisabledState(i + AID_WIDGET_COMPANY_BUTTON_START, c == NULL || !c->is_ai);
|
||||||
}
|
}
|
||||||
this->DisableWidget(AID_WIDGET_RELOAD_TOGGLE);
|
this->DisableWidget(AID_WIDGET_RELOAD_TOGGLE);
|
||||||
|
|
||||||
|
@ -669,7 +670,8 @@ struct AIDebugWindow : public Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
||||||
if (Company::IsValidID(i) && Company::Get(i)->is_ai) {
|
Company *c = Company::GetIfValid(i);
|
||||||
|
if (c != NULL && c->is_ai) {
|
||||||
/* Lower the widget corresponding to this company. */
|
/* Lower the widget corresponding to this company. */
|
||||||
this->LowerWidget(i + AID_WIDGET_COMPANY_BUTTON_START);
|
this->LowerWidget(i + AID_WIDGET_COMPANY_BUTTON_START);
|
||||||
|
|
||||||
|
@ -690,7 +692,8 @@ struct AIDebugWindow : public Window {
|
||||||
|
|
||||||
/* Paint the company icons */
|
/* Paint the company icons */
|
||||||
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
||||||
if (!Company::IsValidID(i) || !Company::Get(i)->is_ai) {
|
Company *c = Company::GetIfValid(i);
|
||||||
|
if (c == NULL || !c->is_ai) {
|
||||||
/* Check if we have the company as an active company */
|
/* Check if we have the company as an active company */
|
||||||
if (!this->IsWidgetDisabled(i + AID_WIDGET_COMPANY_BUTTON_START)) {
|
if (!this->IsWidgetDisabled(i + AID_WIDGET_COMPANY_BUTTON_START)) {
|
||||||
/* Bah, company gone :( */
|
/* Bah, company gone :( */
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
|
|
||||||
/* static */ bool AIGroup::IsValidGroup(GroupID group_id)
|
/* static */ bool AIGroup::IsValidGroup(GroupID group_id)
|
||||||
{
|
{
|
||||||
return ::Group::IsValidID(group_id) && ::Group::Get(group_id)->owner == _current_company;
|
const Group *g = ::Group::GetIfValid(group_id);
|
||||||
|
return g != NULL && g->owner == _current_company;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ AIGroup::GroupID AIGroup::CreateGroup(AIVehicle::VehicleType vehicle_type)
|
/* static */ AIGroup::GroupID AIGroup::CreateGroup(AIVehicle::VehicleType vehicle_type)
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
/* static */ bool AISign::IsValidSign(SignID sign_id)
|
/* static */ bool AISign::IsValidSign(SignID sign_id)
|
||||||
{
|
{
|
||||||
return ::Sign::IsValidID(sign_id) && ::Sign::Get(sign_id)->owner == _current_company;
|
const Sign *si = ::Sign::GetIfValid(sign_id);
|
||||||
|
return si != NULL && si->owner == _current_company;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AISign::SetName(SignID sign_id, const char *name)
|
/* static */ bool AISign::SetName(SignID sign_id, const char *name)
|
||||||
|
|
|
@ -17,7 +17,8 @@
|
||||||
|
|
||||||
/* static */ bool AIStation::IsValidStation(StationID station_id)
|
/* static */ bool AIStation::IsValidStation(StationID station_id)
|
||||||
{
|
{
|
||||||
return ::Station::IsValidID(station_id) && ::Station::Get(station_id)->owner == _current_company;
|
const Station *st = ::Station::GetIfValid(station_id);
|
||||||
|
return st != NULL && st->owner == _current_company;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ StationID AIStation::GetStationID(TileIndex tile)
|
/* static */ StationID AIStation::GetStationID(TileIndex tile)
|
||||||
|
|
|
@ -19,9 +19,8 @@
|
||||||
|
|
||||||
/* static */ bool AIVehicle::IsValidVehicle(VehicleID vehicle_id)
|
/* static */ bool AIVehicle::IsValidVehicle(VehicleID vehicle_id)
|
||||||
{
|
{
|
||||||
if (!::Vehicle::IsValidID(vehicle_id)) return false;
|
const Vehicle *v = ::Vehicle::GetIfValid(vehicle_id);
|
||||||
const Vehicle *v = ::Vehicle::Get(vehicle_id);
|
return v != NULL && v->owner == _current_company && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::IsFreeWagon(v)));
|
||||||
return v->owner == _current_company && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::IsFreeWagon(v)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AIVehicle::GetNumWagons(VehicleID vehicle_id)
|
/* static */ int32 AIVehicle::GetNumWagons(VehicleID vehicle_id)
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
|
|
||||||
/* static */ bool AIWaypoint::IsValidWaypoint(WaypointID waypoint_id)
|
/* static */ bool AIWaypoint::IsValidWaypoint(WaypointID waypoint_id)
|
||||||
{
|
{
|
||||||
return ::Waypoint::IsValidID(waypoint_id) && ::Waypoint::Get(waypoint_id)->owner == _current_company;
|
const Waypoint *wp = ::Waypoint::GetIfValid(waypoint_id);
|
||||||
|
return wp != NULL && wp->owner == _current_company;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ WaypointID AIWaypoint::GetWaypointID(TileIndex tile)
|
/* static */ WaypointID AIWaypoint::GetWaypointID(TileIndex tile)
|
||||||
|
|
|
@ -440,9 +440,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSellAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSellAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED);
|
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED);
|
||||||
|
@ -494,9 +493,8 @@ CommandCost CmdSendAircraftToHangar(TileIndex tile, DoCommandFlag flags, uint32
|
||||||
return SendAllVehiclesToDepot(VEH_AIRCRAFT, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
return SendAllVehiclesToDepot(VEH_AIRCRAFT, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_AIRCRAFT) return CMD_ERROR;
|
if (v->type != VEH_AIRCRAFT) return CMD_ERROR;
|
||||||
|
|
||||||
|
@ -518,9 +516,8 @@ CommandCost CmdRefitAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
{
|
{
|
||||||
byte new_subtype = GB(p2, 8, 8);
|
byte new_subtype = GB(p2, 8, 8);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED);
|
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_AIRCRAFT_MUST_BE_STOPPED);
|
||||||
|
@ -889,8 +886,8 @@ static byte AircraftGetEntryPoint(const Vehicle *v, const AirportFTAClass *apc)
|
||||||
* or it will simply crash in next tick */
|
* or it will simply crash in next tick */
|
||||||
TileIndex tile = 0;
|
TileIndex tile = 0;
|
||||||
|
|
||||||
if (Station::IsValidID(v->u.air.targetairport)) {
|
const Station *st = Station::GetIfValid(v->u.air.targetairport);
|
||||||
const Station *st = Station::Get(v->u.air.targetairport);
|
if (st != NULL) {
|
||||||
/* Make sure we don't go to INVALID_TILE if the airport has been removed. */
|
/* Make sure we don't go to INVALID_TILE if the airport has been removed. */
|
||||||
tile = (st->airport_tile != INVALID_TILE) ? st->airport_tile : st->xy;
|
tile = (st->airport_tile != INVALID_TILE) ? st->airport_tile : st->xy;
|
||||||
}
|
}
|
||||||
|
@ -921,7 +918,7 @@ static bool AircraftController(Vehicle *v)
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
/* NULL if station is invalid */
|
/* NULL if station is invalid */
|
||||||
const Station *st = Station::IsValidID(v->u.air.targetairport) ? Station::Get(v->u.air.targetairport) : NULL;
|
const Station *st = Station::GetIfValid(v->u.air.targetairport);
|
||||||
/* INVALID_TILE if there is no station */
|
/* INVALID_TILE if there is no station */
|
||||||
TileIndex tile = INVALID_TILE;
|
TileIndex tile = INVALID_TILE;
|
||||||
if (st != NULL) {
|
if (st != NULL) {
|
||||||
|
@ -2049,11 +2046,8 @@ Station *GetTargetAirportIfValid(const Vehicle *v)
|
||||||
{
|
{
|
||||||
assert(v->type == VEH_AIRCRAFT);
|
assert(v->type == VEH_AIRCRAFT);
|
||||||
|
|
||||||
StationID sid = v->u.air.targetairport;
|
Station *st = Station::GetIfValid(v->u.air.targetairport);
|
||||||
|
if (st == NULL) return NULL;
|
||||||
if (!Station::IsValidID(sid)) return NULL;
|
|
||||||
|
|
||||||
Station *st = Station::Get(sid);
|
|
||||||
|
|
||||||
return st->airport_tile == INVALID_TILE ? NULL : st;
|
return st->airport_tile == INVALID_TILE ? NULL : st;
|
||||||
}
|
}
|
||||||
|
|
|
@ -608,8 +608,9 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||||
CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, 0);
|
CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, 0);
|
||||||
bool nothing_to_do = true;
|
bool nothing_to_do = true;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
if (v == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!v->IsInDepot()) return CMD_ERROR;
|
if (!v->IsInDepot()) return CMD_ERROR;
|
||||||
if (HASBITS(v->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
if (HASBITS(v->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
||||||
|
|
|
@ -590,8 +590,9 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
||||||
DEBUG(desync, 1, "cmd: %08x; %08x; %1x; %06x; %08x; %08x; %04x; %s\n", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text);
|
DEBUG(desync, 1, "cmd: %08x; %08x; %1x; %06x; %08x; %08x; %04x; %s\n", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text);
|
||||||
|
|
||||||
/* update last build coordinate of company. */
|
/* update last build coordinate of company. */
|
||||||
if (tile != 0 && Company::IsValidID(_current_company)) {
|
if (tile != 0) {
|
||||||
Company::Get(_current_company)->last_build_coordinate = tile;
|
Company *c = Company::GetIfValid(_current_company);
|
||||||
|
if (c != NULL) c->last_build_coordinate = tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actually try and execute the command. If no cost-type is given
|
/* Actually try and execute the command. If no cost-type is given
|
||||||
|
|
|
@ -76,8 +76,8 @@ void SetLocalCompany(CompanyID new_company)
|
||||||
_local_company = new_company;
|
_local_company = new_company;
|
||||||
|
|
||||||
/* Do not update the settings if we are in the intro GUI */
|
/* Do not update the settings if we are in the intro GUI */
|
||||||
if (Company::IsValidID(new_company) && _game_mode != GM_MENU) {
|
const Company *c = Company::GetIfValid(new_company);
|
||||||
const Company *c = Company::Get(new_company);
|
if (_game_mode != GM_MENU && c != NULL) {
|
||||||
_settings_client.company = c->settings;
|
_settings_client.company = c->settings;
|
||||||
InvalidateWindow(WC_GAME_OPTIONS, 0);
|
InvalidateWindow(WC_GAME_OPTIONS, 0);
|
||||||
}
|
}
|
||||||
|
@ -150,8 +150,8 @@ void InvalidateCompanyWindows(const Company *company)
|
||||||
bool CheckCompanyHasMoney(CommandCost cost)
|
bool CheckCompanyHasMoney(CommandCost cost)
|
||||||
{
|
{
|
||||||
if (cost.GetCost() > 0) {
|
if (cost.GetCost() > 0) {
|
||||||
CompanyID company = _current_company;
|
const Company *c = Company::GetIfValid(_current_company);
|
||||||
if (Company::IsValidID(company) && cost.GetCost() > Company::Get(company)->money) {
|
if (c != NULL && cost.GetCost() > c->money) {
|
||||||
SetDParam(0, cost.GetCost());
|
SetDParam(0, cost.GetCost());
|
||||||
_error_message = STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY;
|
_error_message = STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY;
|
||||||
return false;
|
return false;
|
||||||
|
@ -187,9 +187,8 @@ static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost)
|
||||||
|
|
||||||
void SubtractMoneyFromCompany(CommandCost cost)
|
void SubtractMoneyFromCompany(CommandCost cost)
|
||||||
{
|
{
|
||||||
CompanyID cid = _current_company;
|
Company *c = Company::GetIfValid(_current_company);
|
||||||
|
if (c != NULL) SubtractMoneyFromAnyCompany(c, cost);
|
||||||
if (Company::IsValidID(cid)) SubtractMoneyFromAnyCompany(Company::Get(cid), cost);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst)
|
void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst)
|
||||||
|
@ -499,9 +498,9 @@ void OnTick_Companies()
|
||||||
{
|
{
|
||||||
if (_game_mode == GM_EDITOR) return;
|
if (_game_mode == GM_EDITOR) return;
|
||||||
|
|
||||||
if (Company::IsValidID((CompanyID)_cur_company_tick_index)) {
|
Company *c = Company::GetIfValid(_cur_company_tick_index);
|
||||||
Company *c = Company::Get((CompanyID)_cur_company_tick_index);
|
if (c != NULL && c->name_1 != 0) {
|
||||||
if (c->name_1 != 0) GenerateCompanyName(c);
|
GenerateCompanyName(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_next_competitor_start == 0) {
|
if (_next_competitor_start == 0) {
|
||||||
|
@ -567,9 +566,9 @@ void CompaniesYearlyLoop()
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Company::IsValidID(_current_company)) return CMD_ERROR;
|
Company *c = Company::GetIfValid(_current_company);
|
||||||
|
if (c == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
Company *c = Company::Get(_current_company);
|
|
||||||
switch (GB(p1, 0, 3)) {
|
switch (GB(p1, 0, 3)) {
|
||||||
case 0:
|
case 0:
|
||||||
if (c->settings.engine_renew == HasBit(p2, 0)) return CMD_ERROR;
|
if (c->settings.engine_renew == HasBit(p2, 0)) return CMD_ERROR;
|
||||||
|
@ -817,14 +816,11 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: { // Delete a company
|
case 2: { // Delete a company
|
||||||
Company *c;
|
Company *c = Company::GetIfValid(p2);
|
||||||
|
if (c == NULL) return CMD_ERROR;
|
||||||
if (!Company::IsValidID((CompanyID)p2)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (!(flags & DC_EXEC)) return CommandCost();
|
if (!(flags & DC_EXEC)) return CommandCost();
|
||||||
|
|
||||||
c = Company::Get((CompanyID)p2);
|
|
||||||
|
|
||||||
/* Delete any open window of the company */
|
/* Delete any open window of the company */
|
||||||
DeleteCompanyWindows(c->index);
|
DeleteCompanyWindows(c->index);
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
||||||
|
|
|
@ -716,8 +716,6 @@ DEF_CONSOLE_CMD(ConMoveClient)
|
||||||
|
|
||||||
DEF_CONSOLE_CMD(ConResetCompany)
|
DEF_CONSOLE_CMD(ConResetCompany)
|
||||||
{
|
{
|
||||||
CompanyID index;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
IConsoleHelp("Remove an idle company from the game. Usage: 'reset_company <company-id>'");
|
IConsoleHelp("Remove an idle company from the game. Usage: 'reset_company <company-id>'");
|
||||||
IConsoleHelp("For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc.");
|
IConsoleHelp("For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc.");
|
||||||
|
@ -726,16 +724,15 @@ DEF_CONSOLE_CMD(ConResetCompany)
|
||||||
|
|
||||||
if (argc != 2) return false;
|
if (argc != 2) return false;
|
||||||
|
|
||||||
index = (CompanyID)(atoi(argv[1]) - 1);
|
CompanyID index = (CompanyID)(atoi(argv[1]) - 1);
|
||||||
|
const Company *c = Company::GetIfValid(index);
|
||||||
|
|
||||||
/* Check valid range */
|
/* Check valid range */
|
||||||
if (!Company::IsValidID(index)) {
|
if (c == NULL) {
|
||||||
IConsolePrintF(CC_ERROR, "Company does not exist. Company-id must be between 1 and %d.", MAX_COMPANIES);
|
IConsolePrintF(CC_ERROR, "Company does not exist. Company-id must be between 1 and %d.", MAX_COMPANIES);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Company *c = Company::Get(index);
|
|
||||||
|
|
||||||
if (c->is_ai) {
|
if (c->is_ai) {
|
||||||
IConsoleError("Company is owned by an AI.");
|
IConsoleError("Company is owned by an AI.");
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1889,11 +1889,11 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
{
|
{
|
||||||
CommandCost cost(EXPENSES_OTHER);
|
CommandCost cost(EXPENSES_OTHER);
|
||||||
|
|
||||||
|
Company *c = Company::GetIfValid(p1);
|
||||||
|
|
||||||
/* Check if buying shares is allowed (protection against modified clients)
|
/* Check if buying shares is allowed (protection against modified clients)
|
||||||
* Cannot buy own shares */
|
* Cannot buy own shares */
|
||||||
if (!Company::IsValidID((CompanyID)p1) || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
||||||
|
|
||||||
Company *c = Company::Get((CompanyID)p1);
|
|
||||||
|
|
||||||
/* Protect new companies from hostile takeovers */
|
/* Protect new companies from hostile takeovers */
|
||||||
if (_cur_year - c->inaugurated_year < 6) return_cmd_error(STR_PROTECTED);
|
if (_cur_year - c->inaugurated_year < 6) return_cmd_error(STR_PROTECTED);
|
||||||
|
@ -1932,11 +1932,11 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
|
Company *c = Company::GetIfValid(p1);
|
||||||
|
|
||||||
/* Check if selling shares is allowed (protection against modified clients)
|
/* Check if selling shares is allowed (protection against modified clients)
|
||||||
* Cannot sell own shares */
|
* Cannot sell own shares */
|
||||||
if (!Company::IsValidID((CompanyID)p1) || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
||||||
|
|
||||||
Company *c = Company::Get((CompanyID)p1);
|
|
||||||
|
|
||||||
/* Those lines are here for network-protection (clients can be slow) */
|
/* Those lines are here for network-protection (clients can be slow) */
|
||||||
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();
|
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();
|
||||||
|
@ -1965,15 +1965,13 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||||
*/
|
*/
|
||||||
CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
CompanyID cid = (CompanyID)p1;
|
Company *c = Company::GetIfValid(p1);
|
||||||
|
|
||||||
/* Disable takeovers in multiplayer games */
|
/* Disable takeovers in multiplayer games */
|
||||||
if (!Company::IsValidID(cid) || _networking) return CMD_ERROR;
|
if (c == NULL || _networking) return CMD_ERROR;
|
||||||
|
|
||||||
/* Do not allow companies to take over themselves */
|
/* Do not allow companies to take over themselves */
|
||||||
if (cid == _current_company) return CMD_ERROR;
|
if ((CompanyID)p1 == _current_company) return CMD_ERROR;
|
||||||
|
|
||||||
Company *c = Company::Get(cid);
|
|
||||||
|
|
||||||
if (!c->is_ai) return CMD_ERROR;
|
if (!c->is_ai) return CMD_ERROR;
|
||||||
|
|
||||||
|
|
|
@ -425,8 +425,8 @@ public:
|
||||||
|
|
||||||
int numd = 0;
|
int numd = 0;
|
||||||
for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) {
|
for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) {
|
||||||
if (Company::IsValidID(k)) {
|
c = Company::GetIfValid(k);
|
||||||
c = Company::Get(k);
|
if (c != NULL) {
|
||||||
this->colours[numd] = _colour_gradient[c->colour][6];
|
this->colours[numd] = _colour_gradient[c->colour][6];
|
||||||
for (int j = this->num_on_x_axis, i = 0; --j >= 0;) {
|
for (int j = this->num_on_x_axis, i = 0; --j >= 0;) {
|
||||||
this->cost[numd][i] = (j >= c->num_valid_stat_ent) ? INVALID_DATAPOINT : GetGraphData(c, j);
|
this->cost[numd][i] = (j >= c->num_valid_stat_ent) ? INVALID_DATAPOINT : GetGraphData(c, j);
|
||||||
|
|
|
@ -72,12 +72,14 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
|
||||||
|
|
||||||
static inline void IncreaseGroupNumVehicle(GroupID id_g)
|
static inline void IncreaseGroupNumVehicle(GroupID id_g)
|
||||||
{
|
{
|
||||||
if (Group::IsValidID(id_g)) Group::Get(id_g)->num_vehicle++;
|
Group *g = Group::GetIfValid(id_g);
|
||||||
|
if (g != NULL) g->num_vehicle++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void DecreaseGroupNumVehicle(GroupID id_g)
|
static inline void DecreaseGroupNumVehicle(GroupID id_g)
|
||||||
{
|
{
|
||||||
if (Group::IsValidID(id_g)) Group::Get(id_g)->num_vehicle--;
|
Group *g = Group::GetIfValid(id_g);
|
||||||
|
if (g != NULL) g->num_vehicle--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -105,10 +105,8 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
*/
|
*/
|
||||||
CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Group::IsValidID(p1)) return CMD_ERROR;
|
Group *g = Group::GetIfValid(p1);
|
||||||
|
if (g == NULL || g->owner != _current_company) return CMD_ERROR;
|
||||||
Group *g = Group::Get(p1);
|
|
||||||
if (g->owner != _current_company) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
Vehicle *v;
|
Vehicle *v;
|
||||||
|
@ -164,10 +162,8 @@ static bool IsUniqueGroupName(const char *name)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Group::IsValidID(p1)) return CMD_ERROR;
|
Group *g = Group::GetIfValid(p1);
|
||||||
|
if (g == NULL || g->owner != _current_company) return CMD_ERROR;
|
||||||
Group *g = Group::Get(p1);
|
|
||||||
if (g->owner != _current_company) return CMD_ERROR;
|
|
||||||
|
|
||||||
bool reset = StrEmpty(text);
|
bool reset = StrEmpty(text);
|
||||||
|
|
||||||
|
@ -199,11 +195,10 @@ CommandCost CmdRenameGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
*/
|
*/
|
||||||
CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
|
Vehicle *v = Vehicle::GetIfValid(p2);
|
||||||
GroupID new_g = p1;
|
GroupID new_g = p1;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p2) || (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g))) return CMD_ERROR;
|
if (v == NULL || (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g))) return CMD_ERROR;
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(p2);
|
|
||||||
|
|
||||||
if (Group::IsValidID(new_g)) {
|
if (Group::IsValidID(new_g)) {
|
||||||
Group *g = Group::Get(new_g);
|
Group *g = Group::Get(new_g);
|
||||||
|
@ -283,11 +278,10 @@ CommandCost CmdAddSharedVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
|
Group *g = Group::GetIfValid(p1);
|
||||||
VehicleType type = (VehicleType)p2;
|
VehicleType type = (VehicleType)p2;
|
||||||
if (!Group::IsValidID(p1) || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
|
|
||||||
|
|
||||||
Group *g = Group::Get(p1);
|
if (g == NULL || g->owner != _current_company || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
|
||||||
if (g->owner != _current_company) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
GroupID old_g = p1;
|
GroupID old_g = p1;
|
||||||
|
@ -320,10 +314,8 @@ CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint3
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSetGroupReplaceProtection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSetGroupReplaceProtection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Group::IsValidID(p1)) return CMD_ERROR;
|
Group *g = Group::GetIfValid(p1);
|
||||||
|
if (g == NULL || g->owner != _current_company) return CMD_ERROR;
|
||||||
Group *g = Group::Get(p1);
|
|
||||||
if (g->owner != _current_company) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
g->replace_protection = HasBit(p2, 0);
|
g->replace_protection = HasBit(p2, 0);
|
||||||
|
|
|
@ -594,13 +594,13 @@ public:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GRP_WIDGET_REPLACE_PROTECTION:
|
case GRP_WIDGET_REPLACE_PROTECTION: {
|
||||||
if (Group::IsValidID(this->group_sel)) {
|
const Group *g = Group::GetIfValid(this->group_sel);
|
||||||
const Group *g = Group::Get(this->group_sel);
|
if (g != NULL) {
|
||||||
|
|
||||||
DoCommandP(0, this->group_sel, !g->replace_protection, CMD_SET_GROUP_REPLACE_PROTECTION);
|
DoCommandP(0, this->group_sel, !g->replace_protection, CMD_SET_GROUP_REPLACE_PROTECTION);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,14 +88,13 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||||
|
|
||||||
virtual void OnPaint()
|
virtual void OnPaint()
|
||||||
{
|
{
|
||||||
const Company *c;
|
|
||||||
uint x, y;
|
uint x, y;
|
||||||
|
|
||||||
this->SetupHighScoreEndWindow(&x, &y);
|
this->SetupHighScoreEndWindow(&x, &y);
|
||||||
|
|
||||||
if (!Company::IsValidID(_local_company)) return;
|
const Company *c = Company::GetIfValid(_local_company);
|
||||||
|
if (c == NULL) return;
|
||||||
|
|
||||||
c = Company::Get(_local_company);
|
|
||||||
/* We need to get performance from last year because the image is shown
|
/* We need to get performance from last year because the image is shown
|
||||||
* at the start of the new year when these things have already been copied */
|
* at the start of the new year when these things have already been copied */
|
||||||
if (this->background_img == SPR_TYCOON_IMG2_BEGIN) { // Tycoon of the century \o/
|
if (this->background_img == SPR_TYCOON_IMG2_BEGIN) { // Tycoon of the century \o/
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern void StateGameLoop();
|
||||||
*/
|
*/
|
||||||
NetworkClientInfo *NetworkFindClientInfoFromIndex(ClientIndex index)
|
NetworkClientInfo *NetworkFindClientInfoFromIndex(ClientIndex index)
|
||||||
{
|
{
|
||||||
return NetworkClientInfo::IsValidID(index) ? NetworkClientInfo::Get(index) : NULL;
|
return NetworkClientInfo::GetIfValid(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -214,8 +214,8 @@ uint32 IndustryGetVariable(const ResolverObject *object, byte variable, byte par
|
||||||
byte colours;
|
byte colours;
|
||||||
bool is_ai = false;
|
bool is_ai = false;
|
||||||
|
|
||||||
if (Company::IsValidID(industry->founder)) {
|
const Company *c = Company::GetIfValid(industry->founder);
|
||||||
const Company *c = Company::Get(industry->founder);
|
if (c != NULL) {
|
||||||
const Livery *l = &c->livery[LS_DEFAULT];
|
const Livery *l = &c->livery[LS_DEFAULT];
|
||||||
|
|
||||||
is_ai = c->is_ai;
|
is_ai = c->is_ai;
|
||||||
|
|
|
@ -286,6 +286,18 @@ struct PoolItem {
|
||||||
return Tpool->Get(index);
|
return Tpool->Get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get item with given index
|
||||||
|
* @param index item to get
|
||||||
|
* @return NULL for invalid items
|
||||||
|
*/
|
||||||
|
static FORCEINLINE T *GetIfValid(uint index)
|
||||||
|
{
|
||||||
|
if (index >= Tpool->GetSize()) return NULL;
|
||||||
|
T *item = Tpool->Get(index);
|
||||||
|
return item->IsValid() ? item : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns size of the pool (in number of items)
|
* Returns size of the pool (in number of items)
|
||||||
* @return size of the pool
|
* @return size of the pool
|
||||||
|
|
|
@ -411,24 +411,19 @@ static uint GetOrderDistance(const Order *prev, const Order *cur, const Vehicle
|
||||||
*/
|
*/
|
||||||
CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
VehicleID veh = GB(p1, 0, 16);
|
VehicleID veh = GB(p1, 0, 16);
|
||||||
VehicleOrderID sel_ord = GB(p1, 16, 16);
|
VehicleOrderID sel_ord = GB(p1, 16, 16);
|
||||||
Order new_order(p2);
|
Order new_order(p2);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
v = Vehicle::Get(veh);
|
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* Check if the inserted order is to the correct destination (owner, type),
|
/* Check if the inserted order is to the correct destination (owner, type),
|
||||||
* and has the correct flags if any */
|
* and has the correct flags if any */
|
||||||
switch (new_order.GetType()) {
|
switch (new_order.GetType()) {
|
||||||
case OT_GOTO_STATION: {
|
case OT_GOTO_STATION: {
|
||||||
if (!Station::IsValidID(new_order.GetDestination())) return CMD_ERROR;
|
const Station *st = Station::GetIfValid(new_order.GetDestination());
|
||||||
|
if (st == NULL) return CMD_ERROR;
|
||||||
const Station *st = Station::Get(new_order.GetDestination());
|
|
||||||
|
|
||||||
if (st->owner != OWNER_NONE && !CheckOwnership(st->owner)) return CMD_ERROR;
|
if (st->owner != OWNER_NONE && !CheckOwnership(st->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
|
@ -472,21 +467,17 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
case OT_GOTO_DEPOT: {
|
case OT_GOTO_DEPOT: {
|
||||||
if (new_order.GetDepotActionType() != ODATFB_NEAREST_DEPOT) {
|
if (new_order.GetDepotActionType() != ODATFB_NEAREST_DEPOT) {
|
||||||
if (v->type == VEH_AIRCRAFT) {
|
if (v->type == VEH_AIRCRAFT) {
|
||||||
if (!Station::IsValidID(new_order.GetDestination())) return CMD_ERROR;
|
const Station *st = Station::GetIfValid(new_order.GetDestination());
|
||||||
|
|
||||||
const Station *st = Station::Get(new_order.GetDestination());
|
if (st == NULL || !CheckOwnership(st->owner) ||
|
||||||
|
|
||||||
if (!CheckOwnership(st->owner) ||
|
|
||||||
!CanVehicleUseStation(v, st) ||
|
!CanVehicleUseStation(v, st) ||
|
||||||
st->Airport()->nof_depots == 0) {
|
st->Airport()->nof_depots == 0) {
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!Depot::IsValidID(new_order.GetDestination())) return CMD_ERROR;
|
const Depot *dp = Depot::GetIfValid(new_order.GetDestination());
|
||||||
|
|
||||||
const Depot *dp = Depot::Get(new_order.GetDestination());
|
if (dp == NULL || !CheckOwnership(GetTileOwner(dp->xy))) return CMD_ERROR;
|
||||||
|
|
||||||
if (!CheckOwnership(GetTileOwner(dp->xy))) return CMD_ERROR;
|
|
||||||
|
|
||||||
switch (v->type) {
|
switch (v->type) {
|
||||||
case VEH_TRAIN:
|
case VEH_TRAIN:
|
||||||
|
@ -518,10 +509,8 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
case OT_GOTO_WAYPOINT: {
|
case OT_GOTO_WAYPOINT: {
|
||||||
if (v->type != VEH_TRAIN) return CMD_ERROR;
|
if (v->type != VEH_TRAIN) return CMD_ERROR;
|
||||||
|
|
||||||
if (!Waypoint::IsValidID(new_order.GetDestination())) return CMD_ERROR;
|
const Waypoint *wp = Waypoint::GetIfValid(new_order.GetDestination());
|
||||||
const Waypoint *wp = Waypoint::Get(new_order.GetDestination());
|
if (wp == NULL || !CheckOwnership(wp->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (!CheckOwnership(wp->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* Order flags can be any of the following for waypoints:
|
/* Order flags can be any of the following for waypoints:
|
||||||
* [non-stop]
|
* [non-stop]
|
||||||
|
@ -660,16 +649,13 @@ static CommandCost DecloneOrder(Vehicle *dst, DoCommandFlag flags)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdDeleteOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdDeleteOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
VehicleID veh_id = p1;
|
VehicleID veh_id = p1;
|
||||||
VehicleOrderID sel_ord = p2;
|
VehicleOrderID sel_ord = p2;
|
||||||
Order *order;
|
Order *order;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh_id)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(veh_id);
|
||||||
|
|
||||||
v = Vehicle::Get(veh_id);
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* If we did not select an order, we maybe want to de-clone the orders */
|
/* If we did not select an order, we maybe want to de-clone the orders */
|
||||||
if (sel_ord >= v->GetNumOrders())
|
if (sel_ord >= v->GetNumOrders())
|
||||||
|
@ -728,16 +714,15 @@ CommandCost CmdDeleteOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSkipToOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSkipToOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
VehicleID veh_id = p1;
|
VehicleID veh_id = p1;
|
||||||
VehicleOrderID sel_ord = p2;
|
VehicleOrderID sel_ord = p2;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh_id)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(veh_id);
|
||||||
|
|
||||||
v = Vehicle::Get(veh_id);
|
if (v == NULL || !CheckOwnership(v->owner) || sel_ord == v->cur_order_index ||
|
||||||
|
sel_ord >= v->GetNumOrders() || v->GetNumOrders() < 2) {
|
||||||
if (!CheckOwnership(v->owner) || sel_ord == v->cur_order_index ||
|
return CMD_ERROR;
|
||||||
sel_ord >= v->GetNumOrders() || v->GetNumOrders() < 2) return CMD_ERROR;
|
}
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
v->cur_order_index = sel_ord;
|
v->cur_order_index = sel_ord;
|
||||||
|
@ -772,10 +757,8 @@ CommandCost CmdMoveOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
VehicleOrderID moving_order = GB(p2, 0, 16);
|
VehicleOrderID moving_order = GB(p2, 0, 16);
|
||||||
VehicleOrderID target_order = GB(p2, 16, 16);
|
VehicleOrderID target_order = GB(p2, 16, 16);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(veh);
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* Don't make senseless movements */
|
/* Don't make senseless movements */
|
||||||
if (moving_order >= v->GetNumOrders() || target_order >= v->GetNumOrders() ||
|
if (moving_order >= v->GetNumOrders() || target_order >= v->GetNumOrders() ||
|
||||||
|
@ -852,10 +835,9 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
uint16 data = GB(p2, 4, 11);
|
uint16 data = GB(p2, 4, 11);
|
||||||
|
|
||||||
if (mof >= MOF_END) return CMD_ERROR;
|
if (mof >= MOF_END) return CMD_ERROR;
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(veh);
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
/* Is it a valid order? */
|
/* Is it a valid order? */
|
||||||
if (sel_ord >= v->GetNumOrders()) return CMD_ERROR;
|
if (sel_ord >= v->GetNumOrders()) return CMD_ERROR;
|
||||||
|
@ -1072,27 +1054,21 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
*/
|
*/
|
||||||
CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *dst;
|
|
||||||
VehicleID veh_src = GB(p1, 16, 16);
|
VehicleID veh_src = GB(p1, 16, 16);
|
||||||
VehicleID veh_dst = GB(p1, 0, 16);
|
VehicleID veh_dst = GB(p1, 0, 16);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh_dst)) return CMD_ERROR;
|
Vehicle *dst = Vehicle::GetIfValid(veh_dst);
|
||||||
|
|
||||||
dst = Vehicle::Get(veh_dst);
|
if (dst == NULL || !CheckOwnership(dst->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (!CheckOwnership(dst->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
switch (p2) {
|
switch (p2) {
|
||||||
case CO_SHARE: {
|
case CO_SHARE: {
|
||||||
Vehicle *src;
|
Vehicle *src = Vehicle::GetIfValid(veh_src);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh_src)) return CMD_ERROR;
|
|
||||||
|
|
||||||
src = Vehicle::Get(veh_src);
|
|
||||||
|
|
||||||
/* Sanity checks */
|
/* Sanity checks */
|
||||||
if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src)
|
if (src == NULL || !CheckOwnership(src->owner) || dst->type != src->type || dst == src) {
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* Trucks can't share orders with busses (and visa versa) */
|
/* Trucks can't share orders with busses (and visa versa) */
|
||||||
if (src->type == VEH_ROAD) {
|
if (src->type == VEH_ROAD) {
|
||||||
|
@ -1129,16 +1105,12 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case CO_COPY: {
|
case CO_COPY: {
|
||||||
Vehicle *src;
|
Vehicle *src = Vehicle::GetIfValid(veh_src);
|
||||||
int delta;
|
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh_src)) return CMD_ERROR;
|
|
||||||
|
|
||||||
src = Vehicle::Get(veh_src);
|
|
||||||
|
|
||||||
/* Sanity checks */
|
/* Sanity checks */
|
||||||
if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src)
|
if (src == NULL || !CheckOwnership(src->owner) || dst->type != src->type || dst == src) {
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* Trucks can't copy all the orders from busses (and visa versa),
|
/* Trucks can't copy all the orders from busses (and visa versa),
|
||||||
* and neither can helicopters and aircarft. */
|
* and neither can helicopters and aircarft. */
|
||||||
|
@ -1151,7 +1123,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure there are orders available */
|
/* make sure there are orders available */
|
||||||
delta = dst->IsOrderListShared() ? src->GetNumOrders() + 1 : src->GetNumOrders() - dst->GetNumOrders();
|
int delta = dst->IsOrderListShared() ? src->GetNumOrders() + 1 : src->GetNumOrders() - dst->GetNumOrders();
|
||||||
if (!Order::CanAllocateItem(delta) ||
|
if (!Order::CanAllocateItem(delta) ||
|
||||||
((dst->orders.list == NULL || dst->IsOrderListShared()) && !OrderList::CanAllocateItem())) {
|
((dst->orders.list == NULL || dst->IsOrderListShared()) && !OrderList::CanAllocateItem())) {
|
||||||
return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS);
|
return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS);
|
||||||
|
@ -1201,20 +1173,15 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
*/
|
*/
|
||||||
CommandCost CmdOrderRefit(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdOrderRefit(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
const Vehicle *v;
|
|
||||||
Order *order;
|
|
||||||
VehicleID veh = GB(p1, 0, 16);
|
VehicleID veh = GB(p1, 0, 16);
|
||||||
VehicleOrderID order_number = GB(p2, 16, 8);
|
VehicleOrderID order_number = GB(p2, 16, 8);
|
||||||
CargoID cargo = GB(p2, 0, 8);
|
CargoID cargo = GB(p2, 0, 8);
|
||||||
byte subtype = GB(p2, 8, 8);
|
byte subtype = GB(p2, 8, 8);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
const Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
v = Vehicle::Get(veh);
|
Order *order = GetVehicleOrder(v, order_number);
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
order = GetVehicleOrder(v, order_number);
|
|
||||||
if (order == NULL) return CMD_ERROR;
|
if (order == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
|
@ -1357,16 +1324,12 @@ void RestoreVehicleOrders(const Vehicle *v, const BackuppedOrders *bak)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRestoreOrderIndex(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRestoreOrderIndex(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
VehicleOrderID cur_ord = GB(p2, 0, 16);
|
VehicleOrderID cur_ord = GB(p2, 0, 16);
|
||||||
uint16 serv_int = GB(p2, 16, 16);
|
uint16 serv_int = GB(p2, 16, 16);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
/* Check the vehicle type and ownership, and if the service interval and order are in range */
|
/* Check the vehicle type and ownership, and if the service interval and order are in range */
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (serv_int != GetServiceIntervalClamped(serv_int) || cur_ord >= v->GetNumOrders()) return CMD_ERROR;
|
if (serv_int != GetServiceIntervalClamped(serv_int) || cur_ord >= v->GetNumOrders()) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
|
|
|
@ -84,8 +84,9 @@ bool HasRoadTypesAvail(const CompanyID company, const RoadTypes rts)
|
||||||
if (company == OWNER_TOWN || _game_mode == GM_EDITOR || IsGeneratingWorld()) {
|
if (company == OWNER_TOWN || _game_mode == GM_EDITOR || IsGeneratingWorld()) {
|
||||||
avail_roadtypes = ROADTYPES_ROAD;
|
avail_roadtypes = ROADTYPES_ROAD;
|
||||||
} else {
|
} else {
|
||||||
if (!Company::IsValidID(company)) return false;
|
Company *c = Company::GetIfValid(company);
|
||||||
avail_roadtypes = (RoadTypes)Company::Get(company)->avail_roadtypes | ROADTYPES_ROAD; // road is available for always for everybody
|
if (c == NULL) return false;
|
||||||
|
avail_roadtypes = (RoadTypes)c->avail_roadtypes | ROADTYPES_ROAD; // road is available for always for everybody
|
||||||
}
|
}
|
||||||
return (rts & ~avail_roadtypes) == 0;
|
return (rts & ~avail_roadtypes) == 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -312,13 +312,8 @@ bool RoadVehicle::IsStoppedInDepot() const
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSellRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSellRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
@ -423,11 +418,8 @@ CommandCost CmdSendRoadVehToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||||
return SendAllVehiclesToDepot(VEH_ROAD, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
return SendAllVehiclesToDepot(VEH_ROAD, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_ROAD) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_ROAD) return CMD_ERROR;
|
|
||||||
|
|
||||||
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
||||||
}
|
}
|
||||||
|
@ -440,13 +432,8 @@ CommandCost CmdSendRoadVehToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||||
*/
|
*/
|
||||||
CommandCost CmdTurnRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdTurnRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (v->vehstatus & VS_STOPPED ||
|
if (v->vehstatus & VS_STOPPED ||
|
||||||
v->vehstatus & VS_CRASHED ||
|
v->vehstatus & VS_CRASHED ||
|
||||||
|
@ -1968,7 +1955,6 @@ void RoadVehicle::OnNewDay()
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRefitRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRefitRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
CommandCost cost(EXPENSES_ROADVEH_RUN);
|
CommandCost cost(EXPENSES_ROADVEH_RUN);
|
||||||
CargoID new_cid = GB(p2, 0, 8);
|
CargoID new_cid = GB(p2, 0, 8);
|
||||||
byte new_subtype = GB(p2, 8, 8);
|
byte new_subtype = GB(p2, 8, 8);
|
||||||
|
@ -1976,11 +1962,9 @@ CommandCost CmdRefitRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
uint16 capacity = CALLBACK_FAILED;
|
uint16 capacity = CALLBACK_FAILED;
|
||||||
uint total_capacity = 0;
|
uint total_capacity = 0;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
if (v == NULL || v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_ROAD_MUST_BE_STOPPED_INSIDE_DEPOT);
|
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_ROAD_MUST_BE_STOPPED_INSIDE_DEPOT);
|
||||||
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
|
|
@ -698,8 +698,8 @@ bool AfterLoadGame()
|
||||||
* becomes company 0, unless we are in the scenario editor where all the
|
* becomes company 0, unless we are in the scenario editor where all the
|
||||||
* companies are 'invalid'.
|
* companies are 'invalid'.
|
||||||
*/
|
*/
|
||||||
if (!_network_dedicated && Company::IsValidID(COMPANY_FIRST)) {
|
c = Company::GetIfValid(COMPANY_FIRST);
|
||||||
c = Company::Get(COMPANY_FIRST);
|
if (!_network_dedicated && c != NULL) {
|
||||||
c->settings = _settings_client.company;
|
c->settings = _settings_client.company;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -819,13 +819,8 @@ CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
*/
|
*/
|
||||||
CommandCost CmdSellShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdSellShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
@ -870,11 +865,8 @@ CommandCost CmdSendShipToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
return SendAllVehiclesToDepot(VEH_SHIP, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
return SendAllVehiclesToDepot(VEH_SHIP, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_SHIP) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_SHIP) return CMD_ERROR;
|
|
||||||
|
|
||||||
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
||||||
}
|
}
|
||||||
|
@ -892,17 +884,14 @@ CommandCost CmdSendShipToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRefitShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRefitShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
Vehicle *v;
|
|
||||||
CommandCost cost(EXPENSES_SHIP_RUN);
|
CommandCost cost(EXPENSES_SHIP_RUN);
|
||||||
CargoID new_cid = GB(p2, 0, 8); // gets the cargo number
|
CargoID new_cid = GB(p2, 0, 8); // gets the cargo number
|
||||||
byte new_subtype = GB(p2, 8, 8);
|
byte new_subtype = GB(p2, 8, 8);
|
||||||
uint16 capacity = CALLBACK_FAILED;
|
uint16 capacity = CALLBACK_FAILED;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
|
||||||
v = Vehicle::Get(p1);
|
if (v == NULL || v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_SHIP_MUST_BE_STOPPED_IN_DEPOT);
|
if (!v->IsStoppedInDepot()) return_cmd_error(STR_ERROR_SHIP_MUST_BE_STOPPED_IN_DEPOT);
|
||||||
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
|
|
@ -66,15 +66,14 @@ CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Sign::IsValidID(p1)) return CMD_ERROR;
|
Sign *si = Sign::GetIfValid(p1);
|
||||||
|
if (si == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
/* Rename the signs when empty, otherwise remove it */
|
/* Rename the signs when empty, otherwise remove it */
|
||||||
if (!StrEmpty(text)) {
|
if (!StrEmpty(text)) {
|
||||||
if (strlen(text) >= MAX_LENGTH_SIGN_NAME_BYTES) return CMD_ERROR;
|
if (strlen(text) >= MAX_LENGTH_SIGN_NAME_BYTES) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
Sign *si = Sign::Get(p1);
|
|
||||||
|
|
||||||
/* Delete the old name */
|
/* Delete the old name */
|
||||||
free(si->name);
|
free(si->name);
|
||||||
/* Assign the new one */
|
/* Assign the new one */
|
||||||
|
@ -89,8 +88,6 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
}
|
}
|
||||||
} else { // Delete sign
|
} else { // Delete sign
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
Sign *si = Sign::Get(p1);
|
|
||||||
|
|
||||||
MarkSignDirty(si);
|
MarkSignDirty(si);
|
||||||
delete si;
|
delete si;
|
||||||
|
|
||||||
|
|
|
@ -2911,10 +2911,8 @@ static bool IsUniqueStationName(const char *name)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Station::IsValidID(p1)) return CMD_ERROR;
|
Station *st = Station::GetIfValid(p1);
|
||||||
|
if (st == NULL || !CheckOwnership(st->owner)) return CMD_ERROR;
|
||||||
Station *st = Station::Get(p1);
|
|
||||||
if (!CheckOwnership(st->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
bool reset = StrEmpty(text);
|
bool reset = StrEmpty(text);
|
||||||
|
|
||||||
|
|
|
@ -846,8 +846,9 @@ static char *FormatString(char *buff, const char *str, const int64 *argv, uint c
|
||||||
|
|
||||||
case SCC_STATION_NAME: { // {STATION}
|
case SCC_STATION_NAME: { // {STATION}
|
||||||
StationID sid = GetInt32(&argv);
|
StationID sid = GetInt32(&argv);
|
||||||
|
const Station *st = Station::GetIfValid(sid);
|
||||||
|
|
||||||
if (!Station::IsValidID(sid)) {
|
if (st == NULL) {
|
||||||
/* The station doesn't exist anymore. The only place where we might
|
/* The station doesn't exist anymore. The only place where we might
|
||||||
* be "drawing" an invalid station is in the case of cargo that is
|
* be "drawing" an invalid station is in the case of cargo that is
|
||||||
* in transit. */
|
* in transit. */
|
||||||
|
@ -855,7 +856,6 @@ static char *FormatString(char *buff, const char *str, const int64 *argv, uint c
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Station *st = Station::Get(sid);
|
|
||||||
if (st->name != NULL) {
|
if (st->name != NULL) {
|
||||||
buff = strecpy(buff, st->name, last);
|
buff = strecpy(buff, st->name, last);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -57,10 +57,9 @@ CommandCost CmdChangeTimetable(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
||||||
|
|
||||||
VehicleID veh = GB(p1, 0, 16);
|
VehicleID veh = GB(p1, 0, 16);
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(veh);
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
VehicleOrderID order_number = GB(p1, 16, 8);
|
VehicleOrderID order_number = GB(p1, 16, 8);
|
||||||
Order *order = GetVehicleOrder(v, order_number);
|
Order *order = GetVehicleOrder(v, order_number);
|
||||||
|
@ -115,10 +114,9 @@ CommandCost CmdSetVehicleOnTime(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
||||||
|
|
||||||
VehicleID veh = GB(p1, 0, 16);
|
VehicleID veh = GB(p1, 0, 16);
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(veh);
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
v->lateness_counter = 0;
|
v->lateness_counter = 0;
|
||||||
|
@ -143,10 +141,9 @@ CommandCost CmdAutofillTimetable(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
if (!_settings_game.order.timetabling) return CMD_ERROR;
|
||||||
|
|
||||||
VehicleID veh = GB(p1, 0, 16);
|
VehicleID veh = GB(p1, 0, 16);
|
||||||
if (!Vehicle::IsValidID(veh)) return CMD_ERROR;
|
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(veh);
|
Vehicle *v = Vehicle::GetIfValid(veh);
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
if (HasBit(p2, 0)) {
|
if (HasBit(p2, 0)) {
|
||||||
|
|
|
@ -2273,7 +2273,8 @@ static bool IsUniqueTownName(const char *name)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Town::IsValidID(p1)) return CMD_ERROR;
|
Town *t = Town::GetIfValid(p1);
|
||||||
|
if (t == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
bool reset = StrEmpty(text);
|
bool reset = StrEmpty(text);
|
||||||
|
|
||||||
|
@ -2283,8 +2284,6 @@ CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
Town *t = Town::Get(p1);
|
|
||||||
|
|
||||||
free(t->name);
|
free(t->name);
|
||||||
t->name = reset ? NULL : strdup(text);
|
t->name = reset ? NULL : strdup(text);
|
||||||
|
|
||||||
|
@ -2548,9 +2547,8 @@ uint GetMaskOfTownActions(int *nump, CompanyID cid, const Town *t)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdDoTownAction(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdDoTownAction(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Town::IsValidID(p1) || p2 >= lengthof(_town_action_proc)) return CMD_ERROR;
|
Town *t = Town::GetIfValid(p1);
|
||||||
|
if (t == NULL || p2 >= lengthof(_town_action_proc)) return CMD_ERROR;
|
||||||
Town *t = Town::Get(p1);
|
|
||||||
|
|
||||||
if (!HasBit(GetMaskOfTownActions(NULL, _current_company, t), p2)) return CMD_ERROR;
|
if (!HasBit(GetMaskOfTownActions(NULL, _current_company, t), p2)) return CMD_ERROR;
|
||||||
|
|
||||||
|
|
|
@ -1040,11 +1040,8 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
VehicleID s = GB(p1, 0, 16);
|
VehicleID s = GB(p1, 0, 16);
|
||||||
VehicleID d = GB(p1, 16, 16);
|
VehicleID d = GB(p1, 16, 16);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(s)) return CMD_ERROR;
|
Vehicle *src = Vehicle::GetIfValid(s);
|
||||||
|
if (src == NULL || src->type != VEH_TRAIN || !CheckOwnership(src->owner)) return CMD_ERROR;
|
||||||
Vehicle *src = Vehicle::Get(s);
|
|
||||||
|
|
||||||
if (src->type != VEH_TRAIN || !CheckOwnership(src->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* Do not allow moving crashed vehicles inside the depot, it is likely to cause asserts later */
|
/* Do not allow moving crashed vehicles inside the depot, it is likely to cause asserts later */
|
||||||
if (HASBITS(src->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
if (HASBITS(src->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
||||||
|
@ -1054,9 +1051,8 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
if (d == INVALID_VEHICLE) {
|
if (d == INVALID_VEHICLE) {
|
||||||
dst = IsTrainEngine(src) ? NULL : FindGoodVehiclePos(src);
|
dst = IsTrainEngine(src) ? NULL : FindGoodVehiclePos(src);
|
||||||
} else {
|
} else {
|
||||||
if (!Vehicle::IsValidID(d)) return CMD_ERROR;
|
dst = Vehicle::GetIfValid(d);
|
||||||
dst = Vehicle::Get(d);
|
if (dst == NULL || dst->type != VEH_TRAIN || !CheckOwnership(dst->owner)) return CMD_ERROR;
|
||||||
if (dst->type != VEH_TRAIN || !CheckOwnership(dst->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
/* Do not allow appending to crashed vehicles, too */
|
/* Do not allow appending to crashed vehicles, too */
|
||||||
if (HASBITS(dst->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
if (HASBITS(dst->vehstatus, VS_CRASHED)) return CMD_ERROR;
|
||||||
|
@ -1395,11 +1391,9 @@ CommandCost CmdSellRailWagon(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
/* Check if we deleted a vehicle window */
|
/* Check if we deleted a vehicle window */
|
||||||
Window *w = NULL;
|
Window *w = NULL;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1) || p2 > 1) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
if (p2 > 1) return CMD_ERROR;
|
||||||
|
|
||||||
if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
@ -1952,11 +1946,8 @@ static void ReverseTrainDirection(Vehicle *v)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdReverseTrainDirection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdReverseTrainDirection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (p2 != 0) {
|
if (p2 != 0) {
|
||||||
/* turn a single unit around */
|
/* turn a single unit around */
|
||||||
|
@ -2013,11 +2004,8 @@ CommandCost CmdReverseTrainDirection(TileIndex tile, DoCommandFlag flags, uint32
|
||||||
*/
|
*/
|
||||||
CommandCost CmdForceTrainProceed(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdForceTrainProceed(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (flags & DC_EXEC) v->u.rail.force_proceed = 0x50;
|
if (flags & DC_EXEC) v->u.rail.force_proceed = 0x50;
|
||||||
|
|
||||||
|
@ -2040,11 +2028,8 @@ CommandCost CmdRefitRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
byte new_subtype = GB(p2, 8, 8);
|
byte new_subtype = GB(p2, 8, 8);
|
||||||
bool only_this = HasBit(p2, 16);
|
bool only_this = HasBit(p2, 16);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_TRAIN || !CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
if (CheckTrainStoppedInDepot(v) < 0) return_cmd_error(STR_TRAIN_MUST_BE_STOPPED);
|
if (CheckTrainStoppedInDepot(v) < 0) return_cmd_error(STR_TRAIN_MUST_BE_STOPPED);
|
||||||
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
|
@ -2246,11 +2231,8 @@ CommandCost CmdSendTrainToDepot(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
return SendAllVehiclesToDepot(VEH_TRAIN, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
return SendAllVehiclesToDepot(VEH_TRAIN, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || v->type != VEH_TRAIN) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (v->type != VEH_TRAIN) return CMD_ERROR;
|
|
||||||
|
|
||||||
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK));
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,11 +440,11 @@ not_valid_below:;
|
||||||
* It's unnecessary to execute this command every time for every bridge. So it is done only
|
* It's unnecessary to execute this command every time for every bridge. So it is done only
|
||||||
* and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated
|
* and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated
|
||||||
*/
|
*/
|
||||||
if (!(flags & DC_QUERY_COST) || (Company::IsValidID(_current_company) && Company::Get(_current_company)->is_ai)) {
|
Company *c = Company::GetIfValid(_current_company);
|
||||||
|
if (!(flags & DC_QUERY_COST) || (c != NULL && c->is_ai)) {
|
||||||
bridge_len += 2; // begin and end tiles/ramps
|
bridge_len += 2; // begin and end tiles/ramps
|
||||||
|
|
||||||
if (Company::IsValidID(_current_company))
|
if (c != NULL) bridge_len = CalcBridgeLenCostFactor(bridge_len);
|
||||||
bridge_len = CalcBridgeLenCostFactor(bridge_len);
|
|
||||||
|
|
||||||
cost.AddCost((int64)bridge_len * _price.build_bridge * GetBridgeSpec(bridge_type)->price >> 8);
|
cost.AddCost((int64)bridge_len * _price.build_bridge * GetBridgeSpec(bridge_type)->price >> 8);
|
||||||
|
|
||||||
|
|
|
@ -61,12 +61,8 @@ CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
/* Disable the effect of p2 bit 0, when DC_AUTOREPLACE is not set */
|
/* Disable the effect of p2 bit 0, when DC_AUTOREPLACE is not set */
|
||||||
if ((flags & DC_AUTOREPLACE) == 0) SetBit(p2, 0);
|
if ((flags & DC_AUTOREPLACE) == 0) SetBit(p2, 0);
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || !CheckOwnership(v->owner) || !v->IsPrimaryVehicle()) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
if (!v->IsPrimaryVehicle()) return CMD_ERROR;
|
|
||||||
|
|
||||||
switch (v->type) {
|
switch (v->type) {
|
||||||
case VEH_TRAIN:
|
case VEH_TRAIN:
|
||||||
|
@ -334,9 +330,8 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
CommandCost total_cost(EXPENSES_NEW_VEHICLES);
|
CommandCost total_cost(EXPENSES_NEW_VEHICLES);
|
||||||
uint32 build_argument = 2;
|
uint32 build_argument = 2;
|
||||||
|
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
Vehicle *v_front = v;
|
Vehicle *v_front = v;
|
||||||
Vehicle *w = NULL;
|
Vehicle *w = NULL;
|
||||||
Vehicle *w_front = NULL;
|
Vehicle *w_front = NULL;
|
||||||
|
@ -532,10 +527,8 @@ CommandCost SendAllVehiclesToDepot(VehicleType type, DoCommandFlag flags, bool s
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Vehicle::IsValidID(p1)) return CMD_ERROR;
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
bool reset = StrEmpty(text);
|
bool reset = StrEmpty(text);
|
||||||
|
|
||||||
|
@ -564,12 +557,9 @@ CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
uint16 serv_int = GetServiceIntervalClamped(p2); // Double check the service interval from the user-input
|
uint16 serv_int = GetServiceIntervalClamped(p2); // Double check the service interval from the user-input
|
||||||
|
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||||
|
|
||||||
if (serv_int != p2 || !Vehicle::IsValidID(p1)) return CMD_ERROR;
|
if (serv_int != p2 || v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
|
|
||||||
Vehicle *v = Vehicle::Get(p1);
|
|
||||||
|
|
||||||
if (!CheckOwnership(v->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
v->service_interval = serv_int;
|
v->service_interval = serv_int;
|
||||||
|
|
|
@ -314,10 +314,8 @@ static bool IsUniqueWaypointName(const char *name)
|
||||||
*/
|
*/
|
||||||
CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||||
{
|
{
|
||||||
if (!Waypoint::IsValidID(p1)) return CMD_ERROR;
|
Waypoint *wp = Waypoint::GetIfValid(p1);
|
||||||
|
if (wp == NULL || !CheckOwnership(wp->owner)) return CMD_ERROR;
|
||||||
Waypoint *wp = Waypoint::Get(p1);
|
|
||||||
if (!CheckOwnership(wp->owner)) return CMD_ERROR;
|
|
||||||
|
|
||||||
bool reset = StrEmpty(text);
|
bool reset = StrEmpty(text);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue