summaryrefslogtreecommitdiff
path: root/src/script/api/script_vehicle.cpp
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2019-03-08 19:52:22 +0100
committerPeterN <peter@fuzzle.org>2019-03-24 15:28:48 +0000
commitf8e6cd10ef8161fbaa95a847a794e475d6aeb60e (patch)
tree734b37097034e180161ec9a6b003c2c465d151f9 /src/script/api/script_vehicle.cpp
parentd54b6ac09b6fe88c09f7886739fe9c05f16b8222 (diff)
downloadopenttd-f8e6cd10ef8161fbaa95a847a794e475d6aeb60e.tar.xz
Add: script API functions for build with refit feature
Diffstat (limited to 'src/script/api/script_vehicle.cpp')
-rw-r--r--src/script/api/script_vehicle.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp
index ca05ec58f..46fae0a91 100644
--- a/src/script/api/script_vehicle.cpp
+++ b/src/script/api/script_vehicle.cpp
@@ -61,21 +61,44 @@
return v->IsGroundVehicle() ? v->GetGroundVehicleCache()->cached_total_length : -1;
}
-/* static */ VehicleID ScriptVehicle::BuildVehicle(TileIndex depot, EngineID engine_id)
+/* static */ VehicleID ScriptVehicle::_BuildVehicleInternal(TileIndex depot, EngineID engine_id, CargoID cargo)
{
- EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY);
+ EnforcePrecondition(VEHICLE_INVALID, ScriptObject::GetCompany() != OWNER_DEITY);
EnforcePrecondition(VEHICLE_INVALID, ScriptEngine::IsBuildable(engine_id));
+ EnforcePrecondition(VEHICLE_INVALID, cargo == CT_INVALID || ScriptCargo::IsValidCargo(cargo));
::VehicleType type = ::Engine::Get(engine_id)->type;
EnforcePreconditionCustomError(VEHICLE_INVALID, !ScriptGameSettings::IsDisabledVehicleType((ScriptVehicle::VehicleType)type), ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED);
- if (!ScriptObject::DoCommand(depot, engine_id | (CT_INVALID << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID;
+ if (!ScriptObject::DoCommand(depot, engine_id | (cargo << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID;
/* In case of test-mode, we return VehicleID 0 */
return 0;
}
+/* static */ VehicleID ScriptVehicle::BuildVehicle(TileIndex depot, EngineID engine_id)
+{
+ return _BuildVehicleInternal(depot, engine_id, CT_INVALID);
+}
+
+/* static */ VehicleID ScriptVehicle::BuildVehicleWithRefit(TileIndex depot, EngineID engine_id, CargoID cargo)
+{
+ EnforcePrecondition(VEHICLE_INVALID, ScriptCargo::IsValidCargo(cargo));
+ return _BuildVehicleInternal(depot, engine_id, cargo);
+}
+
+/* static */ int ScriptVehicle::GetBuildWithRefitCapacity(TileIndex depot, EngineID engine_id, CargoID cargo)
+{
+ if (!ScriptEngine::IsBuildable(engine_id)) return -1;
+ if (!ScriptCargo::IsValidCargo(cargo)) return -1;
+
+ ::VehicleType type = ::Engine::Get(engine_id)->type;
+
+ CommandCost res = ::DoCommand(depot, engine_id | (cargo << 24), 0, DC_QUERY_COST, ::GetCmdBuildVeh(type));
+ return res.Succeeded() ? _returned_refit_capacity : -1;
+}
+
/* static */ VehicleID ScriptVehicle::CloneVehicle(TileIndex depot, VehicleID vehicle_id, bool share_orders)
{
EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY);