From 218f40eea2227dddb2e3475f4f89d08ffd5c9c6f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Jan 2021 15:15:14 +0100 Subject: [PATCH] Add: [Script] ScriptCargo::GetName, to get the human readable name of a cargo (#8544) Of course this translates into AICargo.GetName() for AIs and GSCargo.GetName() for GameScripts. --- regression/regression/main.nut | 3 ++- regression/regression/result.txt | 16 ++++++++++++++++ src/script/api/ai_changelog.hpp | 1 + src/script/api/game_changelog.hpp | 1 + src/script/api/script_cargo.cpp | 10 ++++++++++ src/script/api/script_cargo.hpp | 8 ++++++++ 6 files changed, 38 insertions(+), 1 deletion(-) diff --git a/regression/regression/main.nut b/regression/regression/main.nut index 5eb65b08f1..e0859e7a37 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -332,7 +332,8 @@ function Regression::Cargo() for (local i = -1; i < 15; i++) { print(" Cargo " + i); print(" IsValidCargo(): " + AICargo.IsValidCargo(i)); - print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i)+ "'"); + print(" GetName(): '" + AICargo.GetName(i) + "'"); + print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i) + "'"); print(" IsFreight(): " + AICargo.IsFreight(i)); print(" HasCargoClass(): " + AICargo.HasCargoClass(i, AICargo.CC_PASSENGERS)); print(" GetTownEffect(): " + AICargo.GetTownEffect(i)); diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 84d8feaffe..140289ab15 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -1109,6 +1109,7 @@ ERROR: IsEnd() is invalid as Begin() is never called --AICargo-- Cargo -1 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1120,6 +1121,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 0 IsValidCargo(): true + GetName(): 'Passengers' GetCargoLabel(): 'PASS' IsFreight(): false HasCargoClass(): true @@ -1131,6 +1133,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 0 Cargo 1 IsValidCargo(): true + GetName(): 'Coal' GetCargoLabel(): 'COAL' IsFreight(): true HasCargoClass(): false @@ -1142,6 +1145,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 2 IsValidCargo(): true + GetName(): 'Mail' GetCargoLabel(): 'MAIL' IsFreight(): false HasCargoClass(): false @@ -1153,6 +1157,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 3 IsValidCargo(): true + GetName(): 'Oil' GetCargoLabel(): 'OIL_' IsFreight(): true HasCargoClass(): false @@ -1164,6 +1169,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 4 IsValidCargo(): true + GetName(): 'Livestock' GetCargoLabel(): 'LVST' IsFreight(): true HasCargoClass(): false @@ -1175,6 +1181,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 5 IsValidCargo(): true + GetName(): 'Goods' GetCargoLabel(): 'GOOD' IsFreight(): true HasCargoClass(): false @@ -1186,6 +1193,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 6 IsValidCargo(): true + GetName(): 'Grain' GetCargoLabel(): 'GRAI' IsFreight(): true HasCargoClass(): false @@ -1197,6 +1205,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 7 IsValidCargo(): true + GetName(): 'Wood' GetCargoLabel(): 'WOOD' IsFreight(): true HasCargoClass(): false @@ -1208,6 +1217,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 8 IsValidCargo(): true + GetName(): 'Iron Ore' GetCargoLabel(): 'IORE' IsFreight(): true HasCargoClass(): false @@ -1219,6 +1229,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 9 IsValidCargo(): true + GetName(): 'Steel' GetCargoLabel(): 'STEL' IsFreight(): true HasCargoClass(): false @@ -1230,6 +1241,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 10 IsValidCargo(): true + GetName(): 'Valuables' GetCargoLabel(): 'VALU' IsFreight(): true HasCargoClass(): false @@ -1241,6 +1253,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 11 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1252,6 +1265,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 12 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1263,6 +1277,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 13 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1274,6 +1289,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 14 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index a579bb27bc..5d5d5c26fd 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -18,6 +18,7 @@ * This version is not yet released. The following changes are not set in stone yet. * * API additions: + * \li AICargo::GetName * \li AIPriorityQueue * * \b 1.10.0 diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 1f43cdea1c..cbb862f1ca 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -18,6 +18,7 @@ * This version is not yet released. The following changes are not set in stone yet. * * API additions: + * \li GSCargo::GetName * \li GSEventStoryPageButtonClick * \li GSEventStoryPageTileSelect * \li GSEventStoryPageVehicleSelect diff --git a/src/script/api/script_cargo.cpp b/src/script/api/script_cargo.cpp index 67cbc1930c..6b0a4aa7a5 100644 --- a/src/script/api/script_cargo.cpp +++ b/src/script/api/script_cargo.cpp @@ -11,7 +11,9 @@ #include "script_cargo.hpp" #include "../../economy_func.h" #include "../../core/bitmath_func.hpp" +#include "../../strings_func.h" #include "../../settings_type.h" +#include "table/strings.h" #include "../../safeguards.h" @@ -25,6 +27,14 @@ return (towneffect_type >= (TownEffect)TE_BEGIN && towneffect_type < (TownEffect)TE_END); } +/* static */ char *ScriptCargo::GetName(CargoID cargo_type) +{ + if (!IsValidCargo(cargo_type)) return nullptr; + + ::SetDParam(0, 1 << cargo_type); + return GetString(STR_JUST_CARGO_LIST); +} + /* static */ char *ScriptCargo::GetCargoLabel(CargoID cargo_type) { if (!IsValidCargo(cargo_type)) return nullptr; diff --git a/src/script/api/script_cargo.hpp b/src/script/api/script_cargo.hpp index 9ecd4cbfb2..1bfd8c5531 100644 --- a/src/script/api/script_cargo.hpp +++ b/src/script/api/script_cargo.hpp @@ -84,6 +84,14 @@ public: */ static bool IsValidTownEffect(TownEffect towneffect_type); + /** + * Get the name of the cargo type. + * @param cargo_type The cargo type to get the name of. + * @pre IsValidCargo(cargo_type). + * @return The name of the cargo type. + */ + static char *GetName(CargoID cargo_type); + /** * Gets the string representation of the cargo label. * @param cargo_type The cargo to get the string representation of.