Ludeon Forums

RimWorld => Bugs => Topic started by: b606 on March 22, 2020, 12:36:38 PM

Title: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on March 22, 2020, 12:36:38 PM
Since yesterday, the two QuestScripts below are constantly changing, almost every minutes. When I use the ingame translation tool, sometimes I get Diff 1, next time I get Diff 2 for Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml and Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml. Which is the correct one ?

Diff 1: Wants to replace already translated texts with TODO (???)

diff --git a/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml b/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
index 336fd41b..7cf9b8b4 100644
--- a/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
+++ b/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
@@ -32,7 +32,7 @@
   <!-- EN: [letterSubject], who you were charged to protect, is gone. [remainingWillNowLeave][failLetterEndingCommon] -->
   <Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.text.slateRef>[letterSubject], que vous étiez chargé de protéger, a disparu. [remainingWillNowLeave][failLetterEndingCommon]</Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.text.slateRef>
   <!-- EN: Guest lost: {SUBJECT_definite} -->
-  <Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>Invité perdu : {SUBJECT_definite}</Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>
+  <Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>TODO</Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>
   <!-- EN: [letterSubject], who you were charged to protect, has joined another faction. [remainingWillNowLeave][failLetterEndingCommon] -->
   <Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.text.slateRef>[letterSubject], que vous avez été chargé de protéger, a rejoint une autre faction. [remainingWillNowLeave][failLetterEndingCommon]</Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.text.slateRef>
   <!-- EN: Shuttle destroyed -->
diff --git a/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml b/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
index a71b155b..32e7a75b 100644
--- a/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
+++ b/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
@@ -134,7 +134,7 @@
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_pronoun] was supposed to marry the child of [enemyFaction_leader_nameFull], leader of [enemyFaction_name]. [joiner_pronoun] became drunk before the ceremony and vomited on the altar - a flagrant insult towards [enemyFaction_leader_nameDef]'s whole family.\n    \n[enemyFaction_leader_nameDef] swore to seek revenge on [joiner_nameDef] and all those associated with [joiner_objective], and sent [enemyFaction_pawnsPlural] to carry out the task.\n    \n{BASETEXT} -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_pronoun] était supposé(e) se marier avec l'enfant de [enemyFaction_leader_nameFull], leader de [enemyFaction_name]. [joiner_pronoun] s'est saoulé(e) avant la cérémonie et a vomi sur l'autel, une insulte flagrante envers toute la famille de [enemyFaction_leader_nameDef].\n    \n[enemyFaction_leader_nameDef] a juré de se venger de [joiner_nameDef] et de tous ceux avec [joiner_objective], et a envoyé des [enemyFaction_pawnsPlural] pour cela.\n    \n{BASETEXT}</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-1.value.slateRef>
   <!-- EN: {BASELABEL}: Chasing [joiner_nameDef] -->
-  <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>{BASELABEL} : pourchassant [joiner_nameDef]</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>
+  <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>TODO</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_nameDef], greedy for the pleasures and money insect jelly can bring, intended to destroy a massive insect hive using poison. [joiner_pronoun] failed, but was doused in insect threat pheromones. Insects have been hunting [joiner_objective] ever since. Now they've launched their final attack.\n    \n{BASETEXT} -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_nameDef], avide du plaisir et de l'argent que les gelées d'insectes procurent, voulait détruire une énorme ruche d'insectes avec du poison. [joiner_pronoun] a échoué, mais a été imbibé(e) de phéromones de menace par les insectes. Depuis, [joiner_pronoun] est pourchassé(e) par ces insectes qui maintenant, vont lancer leur assaut final.\n    \n{BASETEXT}</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-1.value.slateRef>
   <!-- EN: Site appeared to harass [joiner_nameDef]: [site_label] -->
@@ -163,7 +163,7 @@
   <!-- EN: {BASETEXT}\n                  \nThe [enemyFaction_pawnsPlural] are coming for [../joiner_nameFull]. -->
   <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>{BASETEXT}\n                  \nLes [enemyFaction_pawnsPlural] sont venus pour [../joiner_nameFull].</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>
   <!-- EN: {BASELABEL} chasing [../joiner_nameDef] -->
-  <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>{BASELABEL} : pourchassant [../joiner_nameDef]</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>
+  <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>TODO</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>
   <!-- EN: {BASETEXT}\n                        \nThe [enemyFaction_pawnsPlural] are coming for [../joiner_nameFull]. -->
   <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>{BASETEXT}\n                        \nLes [enemyFaction_pawnsPlural] sont venus pour [../joiner_nameFull].</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>


Diff 2: Wants to delete rules, move 1 rule from Sequence-1.nodes.Set-0 to Sequence-3.nodes.Set-0

diff --git a/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml b/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
index 336fd41b..c65e6db5 100644
--- a/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
+++ b/Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml
@@ -31,8 +31,6 @@
   <Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.label.slateRef>Invité perdu : {SUBJECT_definite}</Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.label.slateRef>
   <!-- EN: [letterSubject], who you were charged to protect, is gone. [remainingWillNowLeave][failLetterEndingCommon] -->
   <Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.text.slateRef>[letterSubject], que vous étiez chargé de protéger, a disparu. [remainingWillNowLeave][failLetterEndingCommon]</Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.text.slateRef>
-  <!-- EN: Guest lost: {SUBJECT_definite} -->
-  <Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>Invité perdu : {SUBJECT_definite}</Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>
   <!-- EN: [letterSubject], who you were charged to protect, has joined another faction. [remainingWillNowLeave][failLetterEndingCommon] -->
   <Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.text.slateRef>[letterSubject], que vous avez été chargé de protéger, a rejoint une autre faction. [remainingWillNowLeave][failLetterEndingCommon]</Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.text.slateRef>
   <!-- EN: Shuttle destroyed -->
diff --git a/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml b/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
index a71b155b..614a956f 100644
--- a/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
+++ b/Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml
@@ -133,14 +133,14 @@
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-0.value.slateRef>{BASELABEL} : pourchassant [joiner_nameDef]</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-0.value.slateRef>
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_pronoun] was supposed to marry the child of [enemyFaction_leader_nameFull], leader of [enemyFaction_name]. [joiner_pronoun] became drunk before the ceremony and vomited on the altar - a flagrant insult towards [enemyFaction_leader_nameDef]'s whole family.\n    \n[enemyFaction_leader_nameDef] swore to seek revenge on [joiner_nameDef] and all those associated with [joiner_objective], and sent [enemyFaction_pawnsPlural] to carry out the task.\n    \n{BASETEXT} -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_pronoun] était supposé(e) se marier avec l'enfant de [enemyFaction_leader_nameFull], leader de [enemyFaction_name]. [joiner_pronoun] s'est saoulé(e) avant la cérémonie et a vomi sur l'autel, une insulte flagrante envers toute la famille de [enemyFaction_leader_nameDef].\n    \n[enemyFaction_leader_nameDef] a juré de se venger de [joiner_nameDef] et de tous ceux avec [joiner_objective], et a envoyé des [enemyFaction_pawnsPlural] pour cela.\n    \n{BASETEXT}</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-0.nodes.Set-1.value.slateRef>
-  <!-- EN: {BASELABEL}: Chasing [joiner_nameDef] -->
-  <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>{BASELABEL} : pourchassant [joiner_nameDef]</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_nameDef], greedy for the pleasures and money insect jelly can bring, intended to destroy a massive insect hive using poison. [joiner_pronoun] failed, but was doused in insect threat pheromones. Insects have been hunting [joiner_objective] ever since. Now they've launched their final attack.\n    \n{BASETEXT} -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_nameDef], avide du plaisir et de l'argent que les gelées d'insectes procurent, voulait détruire une énorme ruche d'insectes avec du poison. [joiner_pronoun] a échoué, mais a été imbibé(e) de phéromones de menace par les insectes. Depuis, [joiner_pronoun] est pourchassé(e) par ces insectes qui maintenant, vont lancer leur assaut final.\n    \n{BASETEXT}</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-1.value.slateRef>
   <!-- EN: Site appeared to harass [joiner_nameDef]: [site_label] -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-2.nodes.Set-0.value.slateRef>Un site semble harceler [joiner_nameDef] : [site_label]</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-2.nodes.Set-0.value.slateRef>
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_nameDef] was traveling when [joiner_pronoun] happened upon [enemyFaction_leader_nameFull], leader of [enemyFaction_name], sick on the side of the road. [joiner_nameDef] insulted [enemyFaction_leader_nameDef] by comparing [enemyFaction_leader_objective] to a [Animal].\n    \nNow [enemyFaction_leader_nameDef]'s [enemyFaction_pawnsPlural] are activating a site nearby to harass you.\n    \n[allSitePartsDescriptions] -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-2.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_nameDef] était en voyage quand [joiner_pronoun] est tombé(e) sur [enemyFaction_leader_nameFull], leader de [enemyFaction_name], malade sur le bord de la route. [joiner_nameDef] a insulté [enemyFaction_leader_nameDef] en le/la comparant à [AnimalAny_indef].\n    \nMaintenant, les [enemyFaction_pawnsPlural] de [enemyFaction_leader_nameDef] s'installeront sur un site à proximité pour vous harceler.\n    \n[allSitePartsDescriptions]</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-2.nodes.Set-1.value.slateRef>
+  <!-- EN: {BASELABEL}: Chasing [joiner_nameDef] -->
+  <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-3.nodes.Set-0.value.slateRef>TODO</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-3.nodes.Set-0.value.slateRef>
   <!-- EN: [joiner_nameDef] has admitted what [joiner_pronoun] was fleeing from.\n    \n[joiner_nameDef] was traveling when [joiner_pronoun] came upon a lost group of [animalKind_labelPlural]. [joiner_pronoun], in a bad mood, goaded the [animalKind_labelPlural]. Unexpectedly, they attacked [joiner_objective]. And they have followed [joiner_objective] a long distance.\n    \n{BASETEXT} -->
   <ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-3.nodes.Set-1.value.slateRef>[joiner_nameDef] a révélé pour quoi [joiner_pronoun] s'enfuit.\n    \n[joiner_nameDef] était en voyage quand [joiner_pronoun] est tombé(e) sur un groupe perdu de [animalKind_labelPlural]. De mauvaise humeur, [joiner_pronoun] a provoqué les [animalKind_labelPlural]. Ils l'attaquèrent à l'improviste et l'ont poursuivi(e) sur une longue distance.\n    \n{BASETEXT}</ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-3.nodes.Set-1.value.slateRef>
   
@@ -162,8 +162,6 @@
   <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>{BASELABEL} : pourchassant [../joiner_nameDef]</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>
   <!-- EN: {BASETEXT}\n                  \nThe [enemyFaction_pawnsPlural] are coming for [../joiner_nameFull]. -->
   <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>{BASETEXT}\n                  \nLes [enemyFaction_pawnsPlural] sont venus pour [../joiner_nameFull].</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>
-  <!-- EN: {BASELABEL} chasing [../joiner_nameDef] -->
-  <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>{BASELABEL} : pourchassant [../joiner_nameDef]</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>
   <!-- EN: {BASETEXT}\n                        \nThe [enemyFaction_pawnsPlural] are coming for [../joiner_nameFull]. -->
   <ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>{BASETEXT}\n                        \nLes [enemyFaction_pawnsPlural] sont venus pour [../joiner_nameFull].</ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterText.value.slateRef>
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Ragnar-F on March 25, 2020, 04:05:16 PM
Since 1.1.2584 rev912 also for the following:

Royalty/DefInjected/QuestScriptDef/Script_BuildMonument_Worker.xml
Element: BuildMonumentWorker.root.nodes.IsTrue-2.elseNode.elseNode.nodes.IsNull.elseNode.node.nodes.Delay.expiryInfoPartTip.slateRef

Royalty/DefInjected/QuestScriptDef/Script_ChangeRoyalHeir.xml
Element: ChangeRoyalHeir.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPartTip.slateRef

Royalty/DefInjected/QuestScriptDef/Script_EndGame_RoyalAscent.xml
Element: EndGame_RoyalAscent.root.nodes.shuttleSentUnsatisfied.node.nodes.Letter.label.slateRef

Royalty/DefInjected/QuestScriptDef/Scripts_Decree.xml
Element: Decree_BuildMonument.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPartTip.slateRef
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on March 27, 2020, 04:46:36 AM
It looks like two git repos or two git branches are out of sync on these six Royalty/DefInjected/QuestScriptDef/ files. One stores one set of modifications and the other another set.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Cabinatx on March 30, 2020, 02:16:31 AM
Can be observed as well.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on March 30, 2020, 04:44:16 AM
Step to reproduce:

1. Choose one translation language (save the files)
2. Clean it with the ingame tool, save again (or commit the changes)
3. Quit to OS
4. Restart RimWorld
5. Clean again the translation files with the ingame tool, save or commit the change.
6. diff what you have from step 2 and step 5 : six QuestScript files bounced back and forth.

This is observable without any delay significant between step 3 and 4 (sometimes within a minute, might be two successive revs).
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Tynan on April 15, 2020, 10:58:20 AM
Just moved this to Bugs from Translations, we should take a look.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Cynapse on April 20, 2020, 04:12:47 PM
Would it be possible for someone to give me an exact repro case? (with files included)

Also, are two options for the same language appearing when you attempt to change languages?
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on April 20, 2020, 05:05:15 PM
Hi !
I pushed https://github.com/Ludeon/RimWorld-fr/tree/test-cleaning
where you can retrace the reproduction steps using RimWorld-fr from the current master branch.
[RimWorld 1.1.2609 rev633]

Best regards
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on April 20, 2020, 05:20:36 PM
I have this for language options (no duplicate)
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Cynapse on April 23, 2020, 02:01:42 AM
During my tests, I can only repro "Hospitality_Util_Worker.root.nodes.Equal-0.node.nodes.Sequence-1.nodes.Set-2.value.slateRef" bouncing between Sequence-1 and Sequence-2 after translation/clean. Odd, since it's a math expression and shouldn't need translation anyways.

We have changed some QuestScriptDefs around a bit, so that would explain why the cleaner is placing TODOs in seemingly random areas. Eg. expiryPartInfoTip on top of expiryPartInfo.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on April 23, 2020, 12:20:08 PM
Hi Cynapse,
I tested again, this odd thing is still there, but I cannot tell you more.
One of the questions is what should be the final contents of the QuestScript files, and which sequence number is the correct one. Do the removed tags need to be present and translated, or is it safe to leave them as TODO ?
These tags are:
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: ison on April 23, 2020, 02:31:21 PM
@b606 Is there any "EN: xxx" comment next to those lines? If not, then maybe it's a leftover from previous versions you can safely delete. Generally TODO translations are safe, as they're simply ignored. But I wonder what causes it in this case.

@Cynapse Maybe SlateRef.MustTranslate() detects math expressions incorrectly?

//edit: I just fixed something similar, but I'm not sure if it caused the bug reported here
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on April 24, 2020, 04:59:35 AM
All of them have <!-- EN: xxx -->, they just do not accept the provided translations. First cleaning wipes them out (Step 1 see the commit history of https://github.com/Ludeon/RimWorld-fr/tree/test-cleaning), and second cleaning (Step 3) reinserts them with TODOs.

If I know which of the tags should be there, I'll just ignore the cleaning tool directive until this is fixed.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Nowhere on April 28, 2020, 01:13:57 PM
So if i check out the Step 2 from your repo and run TranslationCleaner it's supposed to add those values back, right? Asking cause that didn't happen. It did add some, but pretty sure those were from recent changes that aren't present in the translation yet.
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: b606 on April 28, 2020, 02:25:16 PM
Yes, from Step 2, it does add them back with TODOs (I checked again now with 1.1.2618 rev720). Steps 1 to 3 were made after commiting the proposed cleaning and game restart. Something is weird and let us summarize:

- From my side: debian stable + backports, linux 4.19.0-8-amd64, git version 2.20.1. RimWorld game "unstable" (now 1.1.2618 rev720) from steam v1.0.0.59-4, no mods. If needed (I thought about some line ending problem), .gitattributes:

*       text=auto
*.xml   text eol=lf whitespace=-trailing-space
*.txt   text eol=lf whitespace=-trailing-space
*.png   -text


- The problem started appearing one or two days before the original post, first with two QuestScripts, then to all six files as confirmed by Ragnar. No other files are concerned.

- Cynapse could reproduce "Hospitality_Util_Worker.root.nodes.Equal-0.node.nodes.Sequence-1.nodes.Set-2.value.slateRef" but not the others.

- If you leave the TODO in the tags, the loop stops. It only continues on and on when one tries to fill in with the translated texts from the <!-- EN... comments. So question from translator POV: should we leave the tags with TODO or translate them ?

- Does the game really need these InfoPartTip.slateRef> and Letter.label.slateRef> that the cleaning tool does not want ? (I'm joking :-) )
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Ragnar-F on April 28, 2020, 04:49:19 PM
All affected elements have one thing in common: Within the same XML file, they have at least one counterpart element with the same content. In other words, there are elements with the same EN: comment per XML file. Apparently these elements interfere with each other. The EN: comments of all other non-affected elements are unique within an XML file. Specifically (the last element of each element group will be removed and later re-added):


Royalty/DefInjected/QuestScriptDef/Script_BuildMonument_Worker.xml

<!-- EN: Do not destroy the monument for {0} -->

<BuildMonumentWorker.root.nodes.IsTrue-2.elseNode.elseNode.nodes.IsNull.elseNode.node.nodes.Delay.expiryInfoPart.slateRef>

<BuildMonumentWorker.root.nodes.IsTrue-2.elseNode.elseNode.nodes.IsNull.elseNode.node.nodes.Delay.expiryInfoPartTip.slateRef>


Royalty/DefInjected/QuestScriptDef/Script_ChangeRoyalHeir.xml

<!-- EN: Do not destroy the monument for {0} -->

<ChangeRoyalHeir.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPart.slateRef>

<ChangeRoyalHeir.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPartTip.slateRef>


Royalty/DefInjected/QuestScriptDef/Script_EndGame_RoyalAscent.xml

<!-- EN: Quest failed: [resolvedQuestName] -->

<EndGame_RoyalAscent.root.nodes.Letter.label.slateRef>

<EndGame_RoyalAscent.root.nodes.shuttleSentUnsatisfied.node.nodes.Letter.label.slateRef>


Royalty/DefInjected/QuestScriptDef/Script_Hospitality_Worker.xml

<!-- EN: Guest lost: {SUBJECT_definite} -->

<Hospitality_Util_Worker.root.nodes.lodgersLeftMap.node.nodes.Letter.label.slateRef>

<Hospitality_Util_Worker.root.nodes.AnySignal.node.node.nodes.Letter.label.slateRef>


Royalty/DefInjected/QuestScriptDef/Scripts_Decree.xml

<!-- EN: Do not destroy the monument for {0} -->

<Decree_BuildMonument.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPart.slateRef>

<Decree_BuildMonument.root.nodes.monumentMarkerMonumentCompleted.node.nodes.Delay.expiryInfoPartTip.slateRef>


Royalty/DefInjected/QuestScriptDef/Scripts_JoinerThreat.xml

<!-- EN: {BASELABEL}: Chasing [joiner_nameDef] -->

<ThreatReward_Infestation_Joiner.root.nodes.Delay.node.nodes.Util_Infestation.parms.customLetterLabel.value.slateRef>

<ThreatReward_Manhunters_Joiner.root.nodes.Delay.node.nodes.ManhunterPack.customLetterLabel.slateRef>

<ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-1.nodes.Set-0.value.slateRef>

<ThreatReward_MysteryThreat_Joiner.root.nodes.Delay.node.nodes.RandomNode.nodes.Sequence-3.nodes.Set-0.value.slateRef>

<!-- EN: {BASELABEL} chasing [../joiner_nameDef] -->

<ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>

<ThreatReward_RaidMultiFaction_Joiner.root.nodes.Delay.node.nodes.Delay.node.nodes.Util_Raid.parms.customLetterLabel.value.slateRef>
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Nowhere on April 29, 2020, 12:56:41 PM
Nvm, i got confused by some descriptions. I was able to repro these items being removed after going to a commit just before the Step 1. Now i can finally debug it!
Title: Re: [1.1.2579 rev1092] QuestScripts bouncing back and forth between two states
Post by: Nowhere on April 30, 2020, 10:29:39 AM
Fixed for the next build. Thanks for reporting!