mirror of https://github.com/OpenTTD/OpenTTD
Add: script API functions for build with refit feature
parent
d54b6ac09b
commit
f8e6cd10ef
|
@ -1704,6 +1704,19 @@ function Regression::Vehicle()
|
||||||
print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17 3));
|
print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17 3));
|
||||||
print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 3));
|
print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 3));
|
||||||
|
|
||||||
|
print(" --Refit--");
|
||||||
|
print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 255));
|
||||||
|
print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 0));
|
||||||
|
print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 9));
|
||||||
|
print(" BuildVehicleWithRefit(): " + AIVehicle.BuildVehicleWithRefit(28479, 211, 9));
|
||||||
|
print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 9));
|
||||||
|
print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 5));
|
||||||
|
print(" GetRefitCapacity(): " + AIVehicle.GetRefitCapacity(20, 5));
|
||||||
|
print(" RefitVehicle(): " + AIVehicle.RefitVehicle(20, 5));
|
||||||
|
print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 9));
|
||||||
|
print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 5));
|
||||||
|
print(" SellVehicle(): " + AIVehicle.SellVehicle(20));
|
||||||
|
|
||||||
print(" --Errors--");
|
print(" --Errors--");
|
||||||
print(" RefitVehicle(): " + AIVehicle.RefitVehicle(12, 0));
|
print(" RefitVehicle(): " + AIVehicle.RefitVehicle(12, 0));
|
||||||
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
||||||
|
|
|
@ -9128,6 +9128,18 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||||
GetWagonAge(): 0
|
GetWagonAge(): 0
|
||||||
GetWagonEngineType(): 65535
|
GetWagonEngineType(): 65535
|
||||||
GetWagonAge(): -1
|
GetWagonAge(): -1
|
||||||
|
--Refit--
|
||||||
|
GetBuildWithRefitCapacity(): -1
|
||||||
|
GetBuildWithRefitCapacity(): 0
|
||||||
|
GetBuildWithRefitCapacity(): 160
|
||||||
|
BuildVehicleWithRefit(): 20
|
||||||
|
GetCapacity(): 160
|
||||||
|
GetCapacity(): 0
|
||||||
|
GetRefitCapacity(): 160
|
||||||
|
RefitVehicle(): true
|
||||||
|
GetCapacity(): 0
|
||||||
|
GetCapacity(): 160
|
||||||
|
SellVehicle(): true
|
||||||
--Errors--
|
--Errors--
|
||||||
RefitVehicle(): false
|
RefitVehicle(): false
|
||||||
GetLastErrorString(): ERR_VEHICLE_NOT_IN_DEPOT
|
GetLastErrorString(): ERR_VEHICLE_NOT_IN_DEPOT
|
||||||
|
@ -9175,7 +9187,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||||
13 => 5489
|
13 => 5489
|
||||||
12 => 5489
|
12 => 5489
|
||||||
CurrentSpeed ListDump:
|
CurrentSpeed ListDump:
|
||||||
12 => 21
|
12 => 27
|
||||||
17 => 0
|
17 => 0
|
||||||
16 => 0
|
16 => 0
|
||||||
14 => 0
|
14 => 0
|
||||||
|
|
|
@ -122,6 +122,8 @@ void SQAIVehicle_Register(Squirrel *engine)
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
||||||
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii");
|
||||||
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
||||||
|
|
|
@ -123,6 +123,8 @@ void SQGSVehicle_Register(Squirrel *engine)
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
||||||
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii");
|
||||||
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii");
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
||||||
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
||||||
|
|
|
@ -61,21 +61,44 @@
|
||||||
return v->IsGroundVehicle() ? v->GetGroundVehicleCache()->cached_total_length : -1;
|
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, ScriptEngine::IsBuildable(engine_id));
|
||||||
|
EnforcePrecondition(VEHICLE_INVALID, cargo == CT_INVALID || ScriptCargo::IsValidCargo(cargo));
|
||||||
|
|
||||||
::VehicleType type = ::Engine::Get(engine_id)->type;
|
::VehicleType type = ::Engine::Get(engine_id)->type;
|
||||||
|
|
||||||
EnforcePreconditionCustomError(VEHICLE_INVALID, !ScriptGameSettings::IsDisabledVehicleType((ScriptVehicle::VehicleType)type), ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
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 */
|
/* In case of test-mode, we return VehicleID 0 */
|
||||||
return 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)
|
/* static */ VehicleID ScriptVehicle::CloneVehicle(TileIndex depot, VehicleID vehicle_id, bool share_orders)
|
||||||
{
|
{
|
||||||
EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY);
|
EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY);
|
||||||
|
|
|
@ -320,6 +320,41 @@ public:
|
||||||
*/
|
*/
|
||||||
static VehicleID BuildVehicle(TileIndex depot, EngineID engine_id);
|
static VehicleID BuildVehicle(TileIndex depot, EngineID engine_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a vehicle with the given engine at the given depot and refits it to the given cargo.
|
||||||
|
* @param depot The depot where the vehicle will be build.
|
||||||
|
* @param engine_id The engine to use for this vehicle.
|
||||||
|
* @param cargo The cargo to refit to.
|
||||||
|
* @pre The tile at depot has a depot that can build the engine and
|
||||||
|
* is owned by you.
|
||||||
|
* @pre ScriptEngine::IsBuildable(engine_id).
|
||||||
|
* @pre ScriptCargo::IsValidCargo(cargo).
|
||||||
|
* @game @pre Valid ScriptCompanyMode active in scope.
|
||||||
|
* @exception ScriptVehicle::ERR_VEHICLE_TOO_MANY
|
||||||
|
* @exception ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED
|
||||||
|
* @exception ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT
|
||||||
|
* @return The VehicleID of the new vehicle, or an invalid VehicleID when
|
||||||
|
* it failed. Check the return value using IsValidVehicle. In test-mode
|
||||||
|
* 0 is returned if it was successful; any other value indicates failure.
|
||||||
|
* @note In Test Mode it means you can't assign orders yet to this vehicle,
|
||||||
|
* as the vehicle isn't really built yet. Build it for real first before
|
||||||
|
* assigning orders.
|
||||||
|
*/
|
||||||
|
static VehicleID BuildVehicleWithRefit(TileIndex depot, EngineID engine_id, CargoID cargo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the capacity of a vehicle built at the given depot with the given engine and refitted to the given cargo.
|
||||||
|
* @param depot The depot where the vehicle will be build.
|
||||||
|
* @param engine_id The engine to use for this vehicle.
|
||||||
|
* @param cargo The cargo to refit to.
|
||||||
|
* @pre The tile at depot has a depot that can build the engine and
|
||||||
|
* is owned by you.
|
||||||
|
* @pre ScriptEngine::IsBuildable(engine_id).
|
||||||
|
* @pre ScriptCargo::IsValidCargo(cargo).
|
||||||
|
* @return The capacity the vehicle will have when refited.
|
||||||
|
*/
|
||||||
|
static int GetBuildWithRefitCapacity(TileIndex depot, EngineID engine_id, CargoID cargo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clones a vehicle at the given depot, copying or cloning its orders.
|
* Clones a vehicle at the given depot, copying or cloning its orders.
|
||||||
* @param depot The depot where the vehicle will be build.
|
* @param depot The depot where the vehicle will be build.
|
||||||
|
@ -563,6 +598,11 @@ public:
|
||||||
static uint GetMaximumOrderDistance(VehicleID vehicle_id);
|
static uint GetMaximumOrderDistance(VehicleID vehicle_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* Internal function used by BuildVehicle(WithRefit).
|
||||||
|
*/
|
||||||
|
static VehicleID _BuildVehicleInternal(TileIndex depot, EngineID engine_id, CargoID cargo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal function used by SellWagon(Chain).
|
* Internal function used by SellWagon(Chain).
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue