• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
The settings file in the new version has

#AddFlag = Localization.IgnoreDuplicatesIfInVanilla

It's not tested though, but in theory it might work.

It doesn't work, at least not for me. I did two tests, to make certain I wasn't messing something up with ValidatorSettings.txt in the mod folder.

Test #1

- I ran the Validator on the "Character" group, coming up with 2910 errors.
- I edited the ValidatorSettings.txt file and changed line 65 to:

AddFlag = CharacterHistory.NoTwinCheck

- I ran the Validator on the "Character" group again, coming up with 2518 errors.


Test #2

- I ran the Validator on the "Localisation" group, coming up with 2365 errors.
- I edited the ValidatorSettings.txt file and changed line 41 to:

AddFlag = Localization.IgnoreDuplicatesIfInVanilla

- I ran the Validator on the "Localisation" group again, coming up with 2365 errors.

-----

I know that at least 1000 of the errors are vanilla duplicates, possibly as high as 2000 because of the province history files and county localisations. For reference in case you need it, here are some of the errors that are still showing even with the ignore duplicates option added:

Code:
--- Error 1 of 1 ---
Duplicate ID: d_vidin
[1]: <mod>\localisation\0_titles.csv (1714, 1)
[2]: localisation\text1.csv (10504, 1)

--- Error 1 of 1 ---
Duplicate ID: d_toulouse
[1]: <mod>\localisation\0_titles.csv (1662, 1)
[2]: localisation\text1.csv (11586, 1)

--- Error 1 of 1 ---
Duplicate ID: PROV63
[1]: <mod>\localisation\0_provinces.csv (64, 1)
[2]: localisation\text1.csv (17494, 1)

--- Error 1 of 1 ---
Duplicate ID: duchy_mongol
[1]: <mod>\localisation\0_text.csv (351, 1)
[2]: localisation\v1_06.csv (152, 1)

--- Error 1 of 1 ---
Duplicate ID: schiltron_formation_tactic
[1]: <mod>\localisation\0_culture.csv (1519, 1)
[2]: localisation\v1_06.csv (505, 1)

--- Error 1 of 1 ---
Duplicate ID: d_nubian_band
[1]: <mod>\localisation\0_titles.csv (1494, 1)
[2]: localisation\v1_09b.csv (24, 1)

--- Error 1 of 1 ---
Duplicate ID: PROV1060
[1]: <mod>\localisation\0_provinces.csv (1046, 1)
[2]: localisation\v1_10.csv (548, 1)
 
Must have been for a previous version then, forget about it.

Now I am getting the Parse Failure, Error : Header expected for my localisation csv. What is the problem ?

Code:
--- Error 1 of 1 ---
Parse Failure
Path: <mod>\localisation\Immortal_events.csv
Error: Header expected.

Here is the csv file, its pretty simple

Code:
# Written by Milkan,
,
#CODE;ENGLISH;FRENCH;GERMAN;;SPANISH;;;;;;;;;x,
,
milkan.0.title;Immortals Swearing Fealty;;;;;;;;;;;;;x,
milkan.0.desc;Oh Holy [Root.GetTitledFirstName], Infidels swarm the holy regions around us and the Immortals swear fealty to help in your divine mission to cleanse the land of infidels.;;;;;;;;;;;;;x
milkan.0.a;Congratulations! You have vassalised the Immortals!;;;;;;;;;;;;;x,

Validator being silly, should hopefully be fixed.
 
It doesn't work, at least not for me. I did two tests, to make certain I wasn't messing something up with ValidatorSettings.txt in the mod folder.

Test #1

- I ran the Validator on the "Character" group, coming up with 2910 errors.
- I edited the ValidatorSettings.txt file and changed line 65 to:

AddFlag = CharacterHistory.NoTwinCheck

- I ran the Validator on the "Character" group again, coming up with 2518 errors.


Test #2

- I ran the Validator on the "Localisation" group, coming up with 2365 errors.
- I edited the ValidatorSettings.txt file and changed line 41 to:

AddFlag = Localization.IgnoreDuplicatesIfInVanilla

- I ran the Validator on the "Localisation" group again, coming up with 2365 errors.

-----

I know that at least 1000 of the errors are vanilla duplicates, possibly as high as 2000 because of the province history files and county localisations. For reference in case you need it, here are some of the errors that are still showing even with the ignore duplicates option added:

Code:
--- Error 1 of 1 ---
Duplicate ID: d_vidin
[1]: <mod>\localisation\0_titles.csv (1714, 1)
[2]: localisation\text1.csv (10504, 1)

--- Error 1 of 1 ---
Duplicate ID: d_toulouse
[1]: <mod>\localisation\0_titles.csv (1662, 1)
[2]: localisation\text1.csv (11586, 1)

--- Error 1 of 1 ---
Duplicate ID: PROV63
[1]: <mod>\localisation\0_provinces.csv (64, 1)
[2]: localisation\text1.csv (17494, 1)

--- Error 1 of 1 ---
Duplicate ID: duchy_mongol
[1]: <mod>\localisation\0_text.csv (351, 1)
[2]: localisation\v1_06.csv (152, 1)

--- Error 1 of 1 ---
Duplicate ID: schiltron_formation_tactic
[1]: <mod>\localisation\0_culture.csv (1519, 1)
[2]: localisation\v1_06.csv (505, 1)

--- Error 1 of 1 ---
Duplicate ID: d_nubian_band
[1]: <mod>\localisation\0_titles.csv (1494, 1)
[2]: localisation\v1_09b.csv (24, 1)

--- Error 1 of 1 ---
Duplicate ID: PROV1060
[1]: <mod>\localisation\0_provinces.csv (1046, 1)
[2]: localisation\v1_10.csv (548, 1)

Sorry, it should work better this time. If it still doesn't work can you point to a mod with the issue so I can debug directly.
 
Version v1.5 RC16 has been released: https://www.dropbox.com/s/dj0iepatfazg4iv/Audax.Validator v1.5 RC16.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.
 
Sorry, it should work better this time. If it still doesn't work can you point to a mod with the issue so I can debug directly.

RC16 worked; I went from 2365 errors to 54 with the no duplicates flag enabled, thanks for adding it.

Edit: It seems like it is screening all duplicates from the mod files instead of only blocking vanilla ones.

I know there were a few event descriptions that got placed into two different files within the mod but it's difficult to find them in the list with vanilla ones showing up, and they aren't showing when the no duplicates flag is on. Here is an example of ones that I'd like to still have listed:

Code:
--- Error 1 of 1 ---
Duplicate ID: EVTDESC1000182419
[1]: <mod>\localisation\0_events.csv (599, 1)
[2]: <mod>\localisation\0_events.csv (600, 1)

--- Error 1 of 1 ---
Duplicate ID: EVTDESCsiegenoenemy
[1]: <mod>\localisation\0_events.csv (1045, 1)
[2]: <mod>\localisation\0_text.csv (491, 1)

--- Error 1 of 1 ---
Duplicate ID: c_teate_adj
[1]: <mod>\localisation\0_titles.csv (951, 1)
[2]: <mod>\localisation\0_titles.csv (952, 1)

I'm working mostly with the CK2+ mod right now, but I've noted the duplicate localisation thing when using most of the mods that modify the map.
 
Last edited:
RC16 worked; I went from 2365 errors to 54 with the no duplicates flag enabled, thanks for adding it.

Edit: It seems like it is screening all duplicates from the mod files instead of only blocking vanilla ones.

I know there were a few event descriptions that got placed into two different files within the mod but it's difficult to find them in the list with vanilla ones showing up, and they aren't showing when the no duplicates flag is on. Here is an example of ones that I'd like to still have listed:

Code:
--- Error 1 of 1 ---
Duplicate ID: EVTDESC1000182419
[1]: <mod>\localisation\0_events.csv (599, 1)
[2]: <mod>\localisation\0_events.csv (600, 1)

--- Error 1 of 1 ---
Duplicate ID: EVTDESCsiegenoenemy
[1]: <mod>\localisation\0_events.csv (1045, 1)
[2]: <mod>\localisation\0_text.csv (491, 1)

--- Error 1 of 1 ---
Duplicate ID: c_teate_adj
[1]: <mod>\localisation\0_titles.csv (951, 1)
[2]: <mod>\localisation\0_titles.csv (952, 1)

I'm working mostly with the CK2+ mod right now, but I've noted the duplicate localisation thing when using most of the mods that modify the map.

-_- yeah I'm stupid... it will be fixed next time
 
Version v1.5 RC17 has been released: https://www.dropbox.com/s/zoybmdao8yss1wm/Audax.Validator v1.5 RC17.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.
 
RC17: AddFlag = Localization.IgnoreDuplicatesIfInVanilla works now.

Feature Request:

I'd like to be able to place the ValidatorSettings.txt file into a folder in Audix Validator, rather than inside of my mod folder. I could retain all of my custom settings no matter which mods I'm working on; I routinely delete the entire /mod/ folder in order to ensure that I'm working off of the same version as my collaborators. I keep a copy of this file on my desktop and re-paste it into each mod/sub-mod that I'm testing, but it would be easier if I only had to have one master copy that was stored in a different place. the /Data/ folder would be a good spot as I already backup my profile file from there.

Some false positives from running an "Event" check in RC17, apologies if they are already reported and being handled:

Code:
--- Error 1 of 1 ---
At <mod>\events\adventures_the_old_gods.txt [character_event\immediate\random_independent_ruler\limit\any_realm_province\OR\AND\NOT\capital_scope] (Line 758, column 9):
Invalid node "capital_scope" in scope ProvTrigger (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\character_event\id] (Line 979, column 23):
"LoR.881" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\custom_tooltip\hidden_tooltip\random_list\70\character_event\id] (Line 958, column 33):
"LoR.879" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\custom_tooltip\hidden_tooltip\random_list\30\character_event\id] (Line 957, column 33):
"LoR.880" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\oldgods_runestone_events.txt [character_event\option\custom_tooltip\hidden_tooltip\character_event\id] (Line 665, column 43):
"TOG.570" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\oldgods_runestone_events.txt [character_event\option\custom_tooltip\hidden_tooltip\character_event\id] (Line 647, column 43):
"TOG.572" is not a valid CharEventId.

- As for the first issue involving scopes, I believe this is correct usage:

capital_scope = { kingdom = { title = k_persia } }

But it's spitting out Validator errors wherever it is used; it seems to be working when playing the game though. If I'm wrong about this being correct syntax, I'd really like to know how because I will need to re-write it all if that's the case.

- The second issue(s) involve the DLC events. LoR.879 IS a valid event even though that is one of the errors listed above, I copied this data from the vanilla /events/byzantine_events.txt file:

Code:
narrative_event = {
	id = LoR.879
	title = EVTNAMELoR.878
	desc =*EVTDESCLoR.879
	picture = GFX_evt_victory_arch_byzantine

The Validator seems to be unable to check for the DLC Namespaces, as it's spitting out errors for ToG/SoA/REP as well.
 
RC17: AddFlag = Localization.IgnoreDuplicatesIfInVanilla works now.

Feature Request:

I'd like to be able to place the ValidatorSettings.txt file into a folder in Audix Validator, rather than inside of my mod folder. I could retain all of my custom settings no matter which mods I'm working on; I routinely delete the entire /mod/ folder in order to ensure that I'm working off of the same version as my collaborators. I keep a copy of this file on my desktop and re-paste it into each mod/sub-mod that I'm testing, but it would be easier if I only had to have one master copy that was stored in a different place. the /Data/ folder would be a good spot as I already backup my profile file from there.

Some false positives from running an "Event" check in RC17, apologies if they are already reported and being handled:

Code:
--- Error 1 of 1 ---
At <mod>\events\adventures_the_old_gods.txt [character_event\immediate\random_independent_ruler\limit\any_realm_province\OR\AND\NOT\capital_scope] (Line 758, column 9):
Invalid node "capital_scope" in scope ProvTrigger (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\character_event\id] (Line 979, column 23):
"LoR.881" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\custom_tooltip\hidden_tooltip\random_list\70\character_event\id] (Line 958, column 33):
"LoR.879" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\byzantine_events.txt [narrative_event\option\custom_tooltip\hidden_tooltip\random_list\30\character_event\id] (Line 957, column 33):
"LoR.880" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\oldgods_runestone_events.txt [character_event\option\custom_tooltip\hidden_tooltip\character_event\id] (Line 665, column 43):
"TOG.570" is not a valid CharEventId.

--- Error 1 of 1 ---
At <mod>\events\oldgods_runestone_events.txt [character_event\option\custom_tooltip\hidden_tooltip\character_event\id] (Line 647, column 43):
"TOG.572" is not a valid CharEventId.

- As for the first issue involving scopes, I believe this is correct usage:

capital_scope = { kingdom = { title = k_persia } }

But it's spitting out Validator errors wherever it is used; it seems to be working when playing the game though. If I'm wrong about this being correct syntax, I'd really like to know how because I will need to re-write it all if that's the case.

- The second issue(s) involve the DLC events. LoR.879 IS a valid event even though that is one of the errors listed above, I copied this data from the vanilla /events/byzantine_events.txt file:

Code:
narrative_event = {
	id = LoR.879
	title = EVTNAMELoR.878
	desc =*EVTDESCLoR.879
	picture = GFX_evt_victory_arch_byzantine

The Validator seems to be unable to check for the DLC Namespaces, as it's spitting out errors for ToG/SoA/REP as well.

The second error is due to using character_event to call a narrative_event. There is a ValidatorSettings.txt option to disable this since it works fine.

The first error: what should capital_scope be doing? You're in a province scope above it, so where would it go?

Will consider putting it in Data but if its done probably not for a while.
 
The Validator doesn't recognise the PREV = {} as subtituting the previous scope when parsing scopes nested within it. To clarify, here's an example:

Code:
[COLOR="#008000"]any_realm_character [/COLOR]= { 
	[COLOR="#FF8C00"]ROOT[/COLOR] = {
		[COLOR="#FF0000"]random_demesne_title[/COLOR] = { 
			[COLOR="#FFFF00"]PREV[/COLOR] = {
				[COLOR="#0000FF"]PREV[/COLOR] = {
				}
			}
		}
	}
}
The blue scope is a reference to the green one, but the Validator interprets it as a reference to the red scope. This is because the yellow scope is in fact a reference to the orange scope, but the Validator apparently doesn't track that. The yellow scope is treated as if it were a normal scope, and not a reference, when parsing the blue one.

To avoid this, the Validator needs to correctly substitute the PREV = scope with the scope it references and keep that as the current scope while parsing the next scope level.
 
The Validator doesn't recognise the PREV = {} as subtituting the previous scope when parsing scopes nested within it. To clarify, here's an example:

Code:
[COLOR="#008000"]any_realm_character [/COLOR]= { 
	[COLOR="#FF8C00"]ROOT[/COLOR] = {
		[COLOR="#FF0000"]random_demesne_title[/COLOR] = { 
			[COLOR="#FFFF00"]PREV[/COLOR] = {
				[COLOR="#0000FF"]PREV[/COLOR] = {
				}
			}
		}
	}
}
The blue scope is a reference to the green one, but the Validator interprets it as a reference to the red scope. This is because the yellow scope is in fact a reference to the orange scope, but the Validator apparently doesn't track that. The yellow scope is treated as if it were a normal scope, and not a reference, when parsing the blue one.

To avoid this, the Validator needs to correctly substitute the PREV = scope with the scope it references and keep that as the current scope while parsing the next scope level.

Curious, so PREVPREV = { ... } won't work? Also does this happen for other things like using FROM = { } and then on the inside you can look into the caller's scopes with PREV and whatever?
 
Curious, so PREVPREV = { ... } won't work? Also does this happen for other things like using FROM = { } and then on the inside you can look into the caller's scopes with PREV and whatever?
I do not think PREVPREV = {...} is valid.

I'm pretty certain that FROM = {...} cannot reference the calling scope, because the event has to be called within a scope referencing the character who will receive it. Calling FROM seems to only scope to the character who received the calling event.
 
Just want to say this tool has been invaluable in my modding endeavours, so thanks!

One false positive to report, instances of destroy_landed_title = ROOT/FROM are returning as errors when in fact it is valid, example:

--- Error 1 of 1 ---
At <mod>\events\clash_of_kings_events.txt [letter_event\option\hidden_tooltip\FROM\any_demesne_title\destroy_landed_title] (Line 1580, column 6):
"FROM" is not a valid Yes or ThisTitle.
ThisTitle: cannot be because FROM points to Char.
However, a Title was expected.
 
I do not think PREVPREV = {...} is valid.

I'm pretty certain that FROM = {...} cannot reference the calling scope, because the event has to be called within a scope referencing the character who will receive it. Calling FROM seems to only scope to the character who received the calling event.
PREVPREV is a valid scope, as is PREVPREVPREV, and in some files even PREVPREVPREVPREV.
I have no idea if PREV = { PREV = { } } actually works.
 
PREVPREV is a valid scope, as is PREVPREVPREV, and in some files even PREVPREVPREVPREV.
I have no idea if PREV = { PREV = { } } actually works.
You don't understand—I don't mean xxxx = PREVPREV (where I'd call PREVPREV a reference, but not a scope, since you're not executing commands within it but instead using it as a variable) but PREVPREV = {...} which as far as I can tell is not valid. It's certainly not used by Paradox in the current version of the vanilla game. If you've been able to use it successfully, I will take note of it....

As to PREV = { PREV = {...}} it definitely works (and in the somewhat convoluted way described above).
 
You don't understand—I don't mean xxxx = PREVPREV (where I'd call PREVPREV a reference, but not a scope, since you're not executing commands within it but instead using it as a variable) but PREVPREV = {...} which as far as I can tell is not valid. It's certainly not used by Paradox in the current version of the vanilla game. If you've been able to use it successfully, I will take note of it....

As to PREV = { PREV = {...}} it definitely works (and in the somewhat convoluted way described above).
Seems you're right; did a quick test and PREVPREV = { } did not in fact work. Strange; I could've sworn I've used it in the past without any issues, but a quick search through my mod folder confirms that's not actually the case.
 
You don't understand—I don't mean xxxx = PREVPREV (where I'd call PREVPREV a reference, but not a scope, since you're not executing commands within it but instead using it as a variable) but PREVPREV = {...} which as far as I can tell is not valid. It's certainly not used by Paradox in the current version of the vanilla game. If you've been able to use it successfully, I will take note of it....

As to PREV = { PREV = {...}} it definitely works (and in the somewhat convoluted way described above).

*grumble grumble* can someone bug Paradox to make PREVPREV = { blah } work grumble grumble.

A question: So in this code (trimmed from event 8430),
Code:
trigger = {
	liege = {
		religion_head = {
			PREV = {
				rightful_religious_head_scope = {
					character = PREVPREV
				}
				NOT = { excommunicated_for = PREV }
			}
		}
	}
}

In the PREV clause, we would now keep a pointer to the liege's scope, so things take place inside the liege scope. However, in "character = PREVPREV", this is pointing to religion_head because the PREV of that slot is PREV, so the PREVPREV is the thing above PREV? While the "excommunicated_for = PREV" would also point to religion_head since THIS is PREV and so PREV would be religion_head? So in general "PREV = ..." and "XXX = PREV" actually do fairly different things.

Since this is the only thing that seems to make sense, I will be implementing it that way, but let me know if it's actually wrong.

EDIT: Actually, still confused. What is the proper behavior of PREV = { liege = { PREV = { ... } } }? Does the first PREV create a anchor from where all deeper PREVs take the PREV from or will the second PREV just jump back to the first PREV? So in order to jump backwards, you need the PREVs right next to each other as in your example? Actually I have no idea how this would have gotten coded by Paradox, it seems like whatever they did would be pretty strange-looking.

(This won't get fixed in the about-to-be-released version)
 
Last edited:
Version v1.5 RC18 has been released: https://www.dropbox.com/s/f0eef5y4mn4614t/Audax.Validator v1.5 RC18.rar

If I did not reply to you, then you issue should be fixed, but of course report again if it doesn't seem to be.

Please keep reporting false positives with the Validator, and they will likely get fixed. If you are reporting a false positive, it is very useful to copy the error message into the post - you can just select the error message, then press Ctrl+C to copy it.
 
Some false positives in RC18:

Code:
--- Error 1 of 1 ---
At <mod>\common\retinue_subunits\00_retinue_subunits.txt [RETTYPE_CUL_Azt3\potential] (Line 1539, column 2):
Invalid node "potential" in scope Subunit (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\common\traits\zz_vanilla_traits.txt [narrow_flank_leader\command_modifier\narrow_flank] (Line 491, column 3):
Invalid node "narrow_flank" in scope <anon> (value is: 0.5)

[CODE][/SPOILER]