From 19923e81f97fe560ba102ebcbaf116634c68ccb6 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 10 Mar 2012 19:04:49 +0000 Subject: [PATCH] (svn r24022) -Add: CARGO_LIST control code for strings --- src/strings.cpp | 32 ++++++++++++++++++++++++++++++++ src/table/control_codes.h | 1 + src/table/strgen_tables.h | 1 + 3 files changed, 34 insertions(+) diff --git a/src/strings.cpp b/src/strings.cpp index a1c147c83b..954996d680 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1106,6 +1106,38 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg break; } + case SCC_CARGO_LIST: { // {CARGO_LIST} + uint32 cmask = args->GetInt32(SCC_CARGO_LIST); + bool first = true; + + const CargoSpec *cs; + FOR_ALL_SORTED_CARGOSPECS(cs) { + if (!HasBit(cmask, cs->Index())) continue; + + if (buff >= last - 2) break; // ',' and ' ' + + if (first) { + first = false; + } else { + /* Add a comma if this is not the first item */ + *buff++ = ','; + *buff++ = ' '; + } + + buff = GetStringWithArgs(buff, cs->name, args, last, next_substr_case_index, game_script); + } + + /* If first is still true then no cargo is accepted */ + if (first) buff = GetStringWithArgs(buff, STR_JUST_NOTHING, args, last, next_substr_case_index, game_script); + + *buff = '\0'; + next_substr_case_index = 0; + + /* Make sure we detect any buffer overflow */ + assert(buff < last); + break; + } + case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} buff = FormatGenericCurrency(buff, _currency, args->GetInt64(), true, last); break; diff --git a/src/table/control_codes.h b/src/table/control_codes.h index 81b100921a..50233d5f60 100644 --- a/src/table/control_codes.h +++ b/src/table/control_codes.h @@ -54,6 +54,7 @@ enum StringControlCode { SCC_CARGO_LONG, SCC_CARGO_SHORT, SCC_CARGO_TINY, + SCC_CARGO_LIST, SCC_POWER, SCC_VOLUME_LONG, SCC_VOLUME_SHORT, diff --git a/src/table/strgen_tables.h b/src/table/strgen_tables.h index 276a94cce2..ed77d54ef4 100644 --- a/src/table/strgen_tables.h +++ b/src/table/strgen_tables.h @@ -73,6 +73,7 @@ static const CmdStruct _cmd_structs[] = { {"CARGO_LONG", EmitSingleChar, SCC_CARGO_LONG, 2, C_NONE | C_GENDER}, {"CARGO_SHORT", EmitSingleChar, SCC_CARGO_SHORT, 2, C_NONE}, // short cargo description, only ### tons, or ### litres {"CARGO_TINY", EmitSingleChar, SCC_CARGO_TINY, 2, C_NONE}, // tiny cargo description with only the amount, not a specifier for the amount or the actual cargo name + {"CARGO_LIST", EmitSingleChar, SCC_CARGO_LIST, 1, C_CASE}, {"POWER", EmitSingleChar, SCC_POWER, 1, C_NONE}, {"VOLUME_LONG", EmitSingleChar, SCC_VOLUME_LONG, 1, C_NONE}, {"VOLUME_SHORT", EmitSingleChar, SCC_VOLUME_SHORT, 1, C_NONE},