diff --git a/src/strings.cpp b/src/strings.cpp index a0f1387972..65bde033fe 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1140,6 +1140,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } else { StringParameters sub_args(args, size); GetStringWithArgs(builder, string_id, sub_args, next_substr_case_index, game_script); + args.AdvanceOffset(size); } next_substr_case_index = 0; break; diff --git a/src/strings_internal.h b/src/strings_internal.h index a0154c3b21..b7e521cc2b 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -39,20 +39,13 @@ protected: public: /** * Create a new StringParameters instance that can reference part of the data of - * the given partent instance. + * the given parent instance. */ StringParameters(StringParameters &parent, size_t size) : parent(&parent), parameters(parent.parameters.subspan(parent.offset, size)) {} - ~StringParameters() - { - if (this->parent != nullptr) { - this->parent->offset += this->parameters.size(); - } - } - void PrepareForNextRun(); void SetTypeOfNextParameter(char32_t type) { this->next_type = type; } @@ -81,6 +74,17 @@ public: this->offset = offset; } + /** + * Advance the offset within the string from where to return the next result of + * \c GetInt64 or \c GetInt32. + * @param advance The amount to advance the offset by. + */ + void AdvanceOffset(size_t advance) + { + this->offset += advance; + assert(this->offset <= this->parameters.size()); + } + /** * Get the next parameter from our parameters. * This updates the offset, so the next time this is called the next parameter