[Content Patcher] Named args nested within positional args parsed incorrectly
Pathoschild opened this issue ยท 1 comments
When parsing a positional input arg with nested named input args, the outer input arg is incorrectly split on the inner delimiter. The input parsing should work with the lex tokens instead of the raw text.
Repro steps
-
Create a content pack with this
content.json
:{ "Format": "1.23.0", "Changes": [ { "Action": "EditData", "Target": "Characters/Dialogue/Abigail", "Entries": { "Mon": "Hi!" }, "When": { "HasValue: {{ChildNames |valueAt=1}}": "true" } } ] }
-
Launch the game and wait for Content Patcher to load content packs.
Expected result: the HasValue
input should be parsed into a single {{ChildNames |valueAt=1}}
positional argument.
Actual result: the HasValue
input is parsed into a {{ChildNames
positional argument, and a named valueAt
argument with the value 1}}
. That results in an error like this:
Example > EditData Characters\Dialogue\Abigail: the When field is invalid: invalid 'valueAt' index '0}}', must be a numeric value.
Workaround
A temporary workaround is to move the inner argument into a dynamic token, so there's no nested input arg:
{
"Format": "1.23.0",
"DynamicTokens": [
{
"Name": "SecondChildName",
"Value": "{{ChildNames |valueAt=1}}"
}
],
"Changes": [
{
"Action": "EditData",
"Target": "Characters/Dialogue/Abigail",
"Entries": {
"Mon": "Hi!"
},
"When": {
"HasValue: {{SecondChildName}}": "true"
}
}
]
}
This should be fixed via e06400c in the upcoming Content Patcher 1.24.3.