1
0
Fork 0

Codechange: Allow encoded strings to use as many parameters as necessary.

pull/13736/head
Peter Nelson 2024-12-16 19:58:46 +00:00 committed by Peter Nelson
parent 37b276b4b5
commit e818fcbf19
1 changed files with 7 additions and 8 deletions

View File

@ -1119,7 +1119,7 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type)
*/
static const char *DecodeEncodedString(const char *str, bool game_script, StringBuilder &builder)
{
ArrayStringParameters<20> sub_args;
std::vector<StringParameter> sub_args;
char *p;
StringIndexInTab id(std::strtoul(str, &p, 16));
@ -1134,8 +1134,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
return p;
}
int i = 0;
while (*p != '\0' && i < 20) {
while (*p != '\0') {
/* The start of parameter. */
const char *s = ++p;
@ -1144,7 +1143,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
if (s == p) {
/* This is an empty parameter. */
sub_args.SetParam(i++, std::monostate{});
sub_args.emplace_back(std::monostate{});
continue;
}
@ -1162,24 +1161,24 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
return p;
}
param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, StringIndexInTab(param));
sub_args.SetParam(i++, param);
sub_args.emplace_back(param);
break;
}
case SCC_ENCODED_NUMERIC: {
uint64_t param = std::strtoull(s, &p, 16);
sub_args.SetParam(i++, param);
sub_args.emplace_back(param);
break;
}
case SCC_ENCODED_STRING: {
sub_args.SetParam(i++, std::string(s, p - s));
sub_args.emplace_back(std::string(s, p - s));
break;
}
default:
/* Unknown parameter, make it blank. */
sub_args.SetParam(i++, std::monostate{});
sub_args.emplace_back(std::monostate{});
break;
}
}