diff --git a/src/script/api/script_cargo.cpp b/src/script/api/script_cargo.cpp index 49fdc4f294..7354c848c0 100644 --- a/src/script/api/script_cargo.cpp +++ b/src/script/api/script_cargo.cpp @@ -70,9 +70,12 @@ return (ScriptCargo::TownEffect)::CargoSpec::Get(cargo_type)->town_effect; } -/* static */ Money ScriptCargo::GetCargoIncome(CargoID cargo_type, uint32 distance, uint32 days_in_transit) +/* static */ Money ScriptCargo::GetCargoIncome(CargoID cargo_type, SQInteger distance, SQInteger days_in_transit) { if (!IsValidCargo(cargo_type)) return -1; + + distance = Clamp(distance, 0, UINT32_MAX); + return ::GetTransportedGoodsIncome(1, distance, Clamp(days_in_transit * 2 / 5, 0, 255), cargo_type); } @@ -82,8 +85,11 @@ return (ScriptCargo::DistributionType)_settings_game.linkgraph.GetDistributionType(cargo_type); } -/* static */ int64 ScriptCargo::GetWeight(CargoID cargo_type, uint32 amount) +/* static */ SQInteger ScriptCargo::GetWeight(CargoID cargo_type, SQInteger amount) { if (!IsValidCargo(cargo_type)) return -1; + + amount = Clamp(amount, 0, UINT32_MAX); + return ::CargoSpec::Get(cargo_type)->WeightOfNUnits(amount); } diff --git a/src/script/api/script_cargo.hpp b/src/script/api/script_cargo.hpp index 67a54a3467..c5b5c1b5f0 100644 --- a/src/script/api/script_cargo.hpp +++ b/src/script/api/script_cargo.hpp @@ -142,10 +142,12 @@ public: * @param cargo_type The cargo to transport. * @pre ScriptCargo::IsValidCargo(cargo_type). * @param distance The distance the cargo travels from begin to end. - * @param days_in_transit Amount of (game) days the cargo is in transit. The max value of this variable is 637. Any value higher returns the same as 637 would. + * The value will be clamped to 0 .. MAX(uint32). + * @param days_in_transit Amount of (game) days the cargo is in transit. + * The max value of this variable is 637. Any value higher returns the same as 637 would. * @return The amount of money that would be earned by this trip. */ - static Money GetCargoIncome(CargoID cargo_type, uint32 distance, uint32 days_in_transit); + static Money GetCargoIncome(CargoID cargo_type, SQInteger distance, SQInteger days_in_transit); /** * Get the cargo distribution type for a cargo. @@ -159,10 +161,11 @@ public: * cargo for the specified type. * @param cargo_type The cargo to check on. * @param amount The quantity of cargo. + * The value will be clamped to 0 .. MAX(uint32). * @pre ScriptCargo::IsValidCargo(cargo_type). * @return The weight in tonnes for that quantity of cargo. */ - static int64 GetWeight(CargoID cargo_type, uint32 amount); + static SQInteger GetWeight(CargoID cargo_type, SQInteger amount); }; #endif /* SCRIPT_CARGO_HPP */