• 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.
1) This is actually possible, you just need to copy ValidatorSettings.txt and edit it to disable localization. Instructions are available in DidYouKnow.pdf.
2) Can you explain why the Validator is wrong and what the engine is actually doing? In that case these checks can be made to work correctly and everyone will be happy. Also if you happen to know if this stuff would work in Eu4 the same way.

Thanks I will try to figure it out, a lot of times I don't care about localization stuff until I'm working just on that.

As for why the Validator is wrong, I must admit I only have demonstrated results in the game. The Mongol event that I referenced actually spawns the armies correctly, creates the leaders and then wardecs someone. The old_gods_adventures also pop a lot of errors as well with province based scopes, but the adventurers are doing their wars and finding their targets correctly. I think the province scopes in the game have a failsafe default that the Validator doesn't account for, but I'm not sure exactly what that is.

Some false positives (I think) for the new patch:

Under Traits -

--- Error 1 of 1 ---
At <mod>\common\traits\02_traits.txt [sympathy_zoroastrianism\tolerates_zoroastrian_group] (Line 347, column 2):
Invalid node "tolerates_zoroastrian_group" in scope Trait (value is: yes)

tolerates_christian = yes
tolerates_muslim = yes
tolerates_pagan_group = yes
tolerates_zoroastrian_group = yes
tolerates_jewish_group = yes

--- Error 1 of 1 ---
At <mod>\events\achievement_events.txt [character_event\trigger\killer\rightful_religious_head_scope\ROOT\likes_better_than] (Line 175, column 6):
Invalid node "likes_better_than" in scope CharTrigger (value is: <a complex type>)

--- 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 772, column 9):
Invalid node "capital_scope" in scope ProvTrigger (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\battle_events.txt [character_event\weight_multiplier] (Line 2535, column 2):
Invalid node "weight_multiplier" in scope CharEvent (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\birth_events.txt [character_event\option\death\death_reason] (Line 1815, column 4):
"death_childbirth" is not a valid DeathReason.

--- Error 1 of 1 ---
At <mod>\common\landed_titles\02_holy_orders.txt [d_knights_templar\monthly_income] (Line 26, column 2):
Invalid node "monthly_income" in scope DukeTitleDef (value is: 10)

I thought I would mention that I used the Validator to find syntax errors in the SoA event files, missing equal signs. Props to you for that, maybe Paradox needs to license your tool. >:)
 
Last edited:
Thanks I will try to figure it out, a lot of times I don't care about localization stuff until I'm working just on that.

As for why the Validator is wrong, I must admit I only have demonstrated results in the game. The Mongol event that I referenced actually spawns the armies correctly, creates the leaders and then wardecs someone. The old_gods_adventures also pop a lot of errors as well with province based scopes, but the adventurers are doing their wars and finding their targets correctly. I think the province scopes in the game have a failsafe default that the Validator doesn't account for, but I'm not sure exactly what that is.

Some false positives (I think) for the new patch:

Under Traits -

--- Error 1 of 1 ---
At <mod>\common\traits\02_traits.txt [sympathy_zoroastrianism\tolerates_zoroastrian_group] (Line 347, column 2):
Invalid node "tolerates_zoroastrian_group" in scope Trait (value is: yes)

tolerates_christian = yes
tolerates_muslim = yes
tolerates_pagan_group = yes
tolerates_zoroastrian_group = yes
tolerates_jewish_group = yes

--- Error 1 of 1 ---
At <mod>\events\achievement_events.txt [character_event\trigger\killer\rightful_religious_head_scope\ROOT\likes_better_than] (Line 175, column 6):
Invalid node "likes_better_than" in scope CharTrigger (value is: <a complex type>)

--- 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 772, column 9):
Invalid node "capital_scope" in scope ProvTrigger (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\battle_events.txt [character_event\weight_multiplier] (Line 2535, column 2):
Invalid node "weight_multiplier" in scope CharEvent (value is: <a complex type>)

--- Error 1 of 1 ---
At <mod>\events\birth_events.txt [character_event\option\death\death_reason] (Line 1815, column 4):
"death_childbirth" is not a valid DeathReason.

--- Error 1 of 1 ---
At <mod>\common\landed_titles\02_holy_orders.txt [d_knights_templar\monthly_income] (Line 26, column 2):
Invalid node "monthly_income" in scope DukeTitleDef (value is: 10)

I thought I would mention that I used the Validator to find syntax errors in the SoA event files, missing equal signs. Props to you for that, maybe Paradox needs to license your tool. >:)

Fixed these except capital_scope, doesn't capital_scope just switch to a province? But it's already inside the province it seems.

Also if someone could explain how the PREVPREVPREV stuff works, then that can be fixed. Because it is rather annoying to have those errors that might not actually be errors.
 
Version v1.5 RC14 has been released: https://www.dropbox.com/s/xlryr53ljr4x724/Audax.Validator v1.5 RC14.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.
 
Fixed these except capital_scope, doesn't capital_scope just switch to a province? But it's already inside the province it seems.

Also if someone could explain how the PREVPREVPREV stuff works, then that can be fixed. Because it is rather annoying to have those errors that might not actually be errors.

I will try in my limited way, and maybe someone who is better at it than I will come along and correct anything I am wrong about.

This is from that file adventures_the_old_gods.txt that pops a bunch of Validator errors, lines 220 - 264
Code:
		liege = {
			capital_scope = {
				ROOT = {
					set_defacto_liege = ROOT
					create_title = {
						tier = DUKE
						landless = yes
						temporary = yes
						culture = ROOT
						name = "CLAIMANT_ADVENTURE"
						holder = ROOT
					}

					random_claim = {
						limit = {
							has_holder = yes
							holder_scope = {
								independent = yes # Only do this vs independent rulers
								reverse_has_opinion_modifier = {
									who = ROOT
									modifier = opinion_claimant_adventure_target
								}
							}
							OR = {
								tier = KING
								holder_scope = { tier = PREV }
							}
						}
						holder_scope = {
							ROOT = {
								set_character_flag = claimant_adventurer
								random_list = {
									34 = {
										spawn_unit = {
											province = PREVPREVPREVPREV
											home = PREVPREVPREVPREV
											owner = THIS
											leader = THIS
											match_character = PREV
											match_mult = 0.2
											match_min = 300
											match_max = 5000
											attrition = 0.25
											earmark = claimant_adventure
										}

There are multiple levels to the scope, but the Event starts (off screen) with a landless character in somebody else's court.

1. Landless Character (character scope) - This is the guy who the Event fires for
2. Liege (character scope) - This is noted at the beginning of this code block
3. Liege's Capital (province scope) - this is noted in the capital_scope line
4. ROOT - Is always the originator of the event

Now, what PREVPREVPREVPREV does in this block, is go back up the Scope Chain 4 times. So in this case, it runs a "spawn_unit = {" command in the Landless Character's Liege's Capital. I marked it with green / red / blue, with red being the middle hops.

Code:
		liege = {
[COLOR="#00FF00"]			capital_scope = {[/COLOR]
[COLOR="#FF0000"]				ROOT = {[/COLOR]
					set_defacto_liege = ROOT
					create_title = {
						tier = DUKE
						landless = yes
						temporary = yes
						culture = ROOT
						name = "CLAIMANT_ADVENTURE"
						holder = ROOT
					}

					random_claim = {
						limit = {
							has_holder = yes
							holder_scope = {
								independent = yes # Only do this vs independent rulers
								reverse_has_opinion_modifier = {
									who = ROOT
									modifier = opinion_claimant_adventure_target
								}
							}
							OR = {
								tier = KING
								holder_scope = { tier = PREV }
							}
						}
						[COLOR="#FF0000"]holder_scope = {[/COLOR]
[COLOR="#FF0000"]							ROOT = {[/COLOR]
								set_character_flag = claimant_adventurer
								random_list = {
									34 = {
										spawn_unit = {
[COLOR="#0000FF"]											province = PREVPREVPREVPREV[/COLOR]
											home = PREVPREVPREVPREV
											owner = THIS
											leader = THIS
											match_character = PREV
											match_mult = 0.2
											match_min = 300
											match_max = 5000
											attrition = 0.25
											earmark = claimant_adventure
										}

I hope that helps, and that I didn't get anything wrong. Anyone else looking feel free to correct me. :)
 
Last edited:
Some more false positives:

Code:
--- Error 1 of 1 ---
At events\soa_jewish_events.txt [character_event\option\banish_religion] (Line 98, column 3):
Invalid node "banish_religion" in scope Option (value is: jewish)

--- Error 1 of 1 ---
At events\soa_holy_order_events.txt [character_event\only_capable] (Line 972, column 2):
Invalid node "only_capable" in scope CharEvent (value is: yes)

--- Error 1 of 1 ---
At events\soa_heresy_events.txt [province_event\trigger\has_heresies] (Line 29, column 3):
Invalid node "has_heresies" in scope ProvTrigger (value is: yes)

--- Error 1 of 1 ---
At events\soa_heresy_events.txt [province_event\immediate\parent_religion_head] (Line 823, column 3):
Invalid node "parent_religion_head" in scope ProvCommand (value is: <a complex type>)

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [province_event\immediate\new_character\character_event\random] (Line 3549, column 49):
The value '180' on node 'random' must be between -0.0. and 100.0.

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\immediate\FROM\set_real_father] (Line 892, column 4):
Invalid node "set_real_father" in scope CharCommand (value is: ROOT)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\option\FROM\hidden_tooltip\if\limit\is_father_real_father] (Line 820, column 7):
Invalid node "is_father_real_father" in scope CharTrigger (value is: yes)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\option\FROM\hidden_tooltip\set_father] (Line 826, column 5):
"0" is not a valid ThisChar.

There's also this from a trigger inside a narrative event:
Code:
distance = {
	where = 491	# Mount Athos
	value = 300	# Not too far away
}

Which creates these four errors:

Code:
--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance] (Line 2243, column 3):
The required "who" entry was not found.

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance] (Line 2243, column 3):
The required "distance" entry was not found.

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance\value] (Line 2245, column 4):
Invalid node "value" in scope DistanceCharDef (value is: 300)

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance\where] (Line 2244, column 4):
Invalid node "where" in scope DistanceCharDef (value is: 491)
Looks like this new way of using distance takes a province number as an input and then checks how far away it is.
 
I will try in my limited way, and maybe someone who is better at it than I will come along and correct anything I am wrong about.

This is from that file adventures_the_old_gods.txt that pops a bunch of Validator errors, lines 220 - 264
Code:
		liege = {
			capital_scope = {
				ROOT = {
					set_defacto_liege = ROOT
					create_title = {
						tier = DUKE
						landless = yes
						temporary = yes
						culture = ROOT
						name = "CLAIMANT_ADVENTURE"
						holder = ROOT
					}

					random_claim = {
						limit = {
							has_holder = yes
							holder_scope = {
								independent = yes # Only do this vs independent rulers
								reverse_has_opinion_modifier = {
									who = ROOT
									modifier = opinion_claimant_adventure_target
								}
							}
							OR = {
								tier = KING
								holder_scope = { tier = PREV }
							}
						}
						holder_scope = {
							ROOT = {
								set_character_flag = claimant_adventurer
								random_list = {
									34 = {
										spawn_unit = {
											province = PREVPREVPREVPREV
											home = PREVPREVPREVPREV
											owner = THIS
											leader = THIS
											match_character = PREV
											match_mult = 0.2
											match_min = 300
											match_max = 5000
											attrition = 0.25
											earmark = claimant_adventure
										}

There are multiple levels to the scope, but the Event starts (off screen) with a landless character in somebody else's court.

1. Landless Character (character scope) - This is the guy who the Event fires for
2. Liege (character scope) - This is noted at the beginning of this code block
3. Liege's Capital (province scope) - this is noted in the capital_scope line
4. ROOT - Is always the originator of the event

Now, what PREVPREVPREVPREV does in this block, is go back up the Scope Chain 4 times. So in this case, it runs a "spawn_unit = {" command in the Landless Character's Liege's Capital. I marked it with green / red / blue, with red being the middle hops.

Code:
		liege = {
[COLOR="#00FF00"]			capital_scope = {[/COLOR]
[COLOR="#FF0000"]				ROOT = {[/COLOR]
					set_defacto_liege = ROOT
					create_title = {
						tier = DUKE
						landless = yes
						temporary = yes
						culture = ROOT
						name = "CLAIMANT_ADVENTURE"
						holder = ROOT
					}

					random_claim = {
						limit = {
							has_holder = yes
							holder_scope = {
								independent = yes # Only do this vs independent rulers
								reverse_has_opinion_modifier = {
									who = ROOT
									modifier = opinion_claimant_adventure_target
								}
							}
							OR = {
								tier = KING
								holder_scope = { tier = PREV }
							}
						}
						[COLOR="#FF0000"]holder_scope = {[/COLOR]
[COLOR="#FF0000"]							ROOT = {[/COLOR]
								set_character_flag = claimant_adventurer
								random_list = {
									34 = {
										spawn_unit = {
[COLOR="#0000FF"]											province = PREVPREVPREVPREV[/COLOR]
											home = PREVPREVPREVPREV
											owner = THIS
											leader = THIS
											match_character = PREV
											match_mult = 0.2
											match_min = 300
											match_max = 5000
											attrition = 0.25
											earmark = claimant_adventure
										}

I hope that helps, and that I didn't get anything wrong. Anyone else looking feel free to correct me. :)

Okay, so, THIS would be referring to ROOT,
PREV would be holder_scope
PREVPREV would be random_claim,
PREVPREVPREV would be ROOT
and PREVPREVPREVPREV would be capital_scope?

Strangely, in the Validator code, there is something that considers spawn_unit to be a scope level. So this definitely is not the case and spawn_unit does not create its own scope?

EDIT: Making spawn_unit not a scope seems to reduce error counts by a bunch, so it seems it is the right thing to do? Though there's still plenty of FROM/THIS/ROOT/PREV errors, they just don't seem to do with spawn_unit anymore.
 
Last edited:
Some more false positives:

Code:
--- Error 1 of 1 ---
At events\soa_jewish_events.txt [character_event\option\banish_religion] (Line 98, column 3):
Invalid node "banish_religion" in scope Option (value is: jewish)

--- Error 1 of 1 ---
At events\soa_holy_order_events.txt [character_event\only_capable] (Line 972, column 2):
Invalid node "only_capable" in scope CharEvent (value is: yes)

--- Error 1 of 1 ---
At events\soa_heresy_events.txt [province_event\trigger\has_heresies] (Line 29, column 3):
Invalid node "has_heresies" in scope ProvTrigger (value is: yes)

--- Error 1 of 1 ---
At events\soa_heresy_events.txt [province_event\immediate\parent_religion_head] (Line 823, column 3):
Invalid node "parent_religion_head" in scope ProvCommand (value is: <a complex type>)

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [province_event\immediate\new_character\character_event\random] (Line 3549, column 49):
The value '180' on node 'random' must be between -0.0. and 100.0.

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\immediate\FROM\set_real_father] (Line 892, column 4):
Invalid node "set_real_father" in scope CharCommand (value is: ROOT)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\option\FROM\hidden_tooltip\if\limit\is_father_real_father] (Line 820, column 7):
Invalid node "is_father_real_father" in scope CharTrigger (value is: yes)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\option\FROM\hidden_tooltip\set_father] (Line 826, column 5):
"0" is not a valid ThisChar.

There's also this from a trigger inside a narrative event:
Code:
distance = {
	where = 491	# Mount Athos
	value = 300	# Not too far away
}

Which creates these four errors:

Code:
--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance] (Line 2243, column 3):
The required "who" entry was not found.

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance] (Line 2243, column 3):
The required "distance" entry was not found.

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance\value] (Line 2245, column 4):
Invalid node "value" in scope DistanceCharDef (value is: 300)

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [narrative_event\trigger\distance\where] (Line 2244, column 4):
Invalid node "where" in scope DistanceCharDef (value is: 491)
Looks like this new way of using distance takes a province number as an input and then checks how far away it is.

Fixed, except:
- only_capable: in the past capable_only was the only one that worked, and there were only_capable that were typos. Is it now that only_capable now works fine?
- The value '180' on node 'random' must be between -0.0. and 100.0.: I thought random was the % chance of them getting the event, is that not the case?
 
Fixed, except:
- only_capable: in the past capable_only was the only one that worked, and there were only_capable that were typos. Is it now that only_capable now works fine?
- The value '180' on node 'random' must be between -0.0. and 100.0.: I thought random was the % chance of them getting the event, is that not the case?

As far as I can see, only_capable and capable_only are both used in vanilla code and they seem to be interchangeable. As for the random value, I actually experimented with it previously and it looks like it's actually a random amount of time, so if I were to put "days = 10 random = 20" into an event call it would fire in 10 days + 0-20 additional days.

Edit: I'll throw together a quick test mod to see if only_capable and capable_only really are interchangeable.

Edit 2: And yes, confirmed... They are indeed interchangeable.
 
Last edited:
Hi Jamie550, wanted to thank you for having this program available for us to use, I've been using for almost a year now and it's been really helpful.

Anyways, I've come across some issues with the validator. For some reason it has been lagging a lot recently, I dunno why. For instance if I type something it takes five or more seconds to respond, or, when I try to select something in the right hand corner, it also takes five or more seconds to respond; addiitonally, if I try to select one of the drop-down menus such as the validation options, the options will appear in the upper right corner instead of right below the menu. The lag appears to occur only after I select a game to validate.
 
Strangely, in the Validator code, there is something that considers spawn_unit to be a scope level. So this definitely is not the case and spawn_unit does not create its own scope?

EDIT: Making spawn_unit not a scope seems to reduce error counts by a bunch, so it seems it is the right thing to do? Though there's still plenty of FROM/THIS/ROOT/PREV errors, they just don't seem to do with spawn_unit anymore.

I'm sorry I was taking a rest from CK2 for a couple of days so I didn't respond right away. I don't know the exact definitions that Paradox uses, but spawn_unit is a "command" while ROOT is a "scope" for a command. Another command would be "Immediate" or "Option", and other scopes would be "random_claim" and "capital_scope".

But it looks like you already worked all that out, and I think making spawn_unit not a scope would be a great idea.

----

I was wondering if you could show me a way to ignore these kinds of localisation errors:

--- Error 1 of 1 ---
Duplicate ID: d_brandenburg
[1]: <mod>\localisation\0_titles.csv (1114, 1)
[2]: localisation\text1.csv (7126, 1)


I get about 4000 of them and it makes it really tough to sort through. In this case, we have our own localisation for the title d_brandenburg that overrides the Vanilla localisation. We also do it for the provinces as well. It works, as in, our localisation is loaded correctly and Vanilla isn't in the game. We can't exclude the /localisation/ directory in our .mod file because we don't duplicate all the event descriptions and other items.

I tried the settings "Show mod errors" and "Show main mod errors", but neither of those settings prevents the Vanilla "Duplicate ID" error from displaying for the localisations. I did look into the .pdf file you provided, but I can't figure out how to exclude just this error without blocking the actual duplicate localisations within the mod/localisation/ folder itself.
 
Last edited:
Hi Jamie550, wanted to thank you for having this program available for us to use, I've been using for almost a year now and it's been really helpful.

Anyways, I've come across some issues with the validator. For some reason it has been lagging a lot recently, I dunno why. For instance if I type something it takes five or more seconds to respond, or, when I try to select something in the right hand corner, it also takes five or more seconds to respond; addiitonally, if I try to select one of the drop-down menus such as the validation options, the options will appear in the upper right corner instead of right below the menu. The lag appears to occur only after I select a game to validate.

This seems strange, does anyone else seem to be experiencing this?
 
I'm sorry I was taking a rest from CK2 for a couple of days so I didn't respond right away. I don't know the exact definitions that Paradox uses, but spawn_unit is a "command" while ROOT is a "scope" for a command. Another command would be "Immediate" or "Option", and other scopes would be "random_claim" and "capital_scope".

But it looks like you already worked all that out, and I think making spawn_unit not a scope would be a great idea.

----

I was wondering if you could show me a way to ignore these kinds of localisation errors:

--- Error 1 of 1 ---
Duplicate ID: d_brandenburg
[1]: <mod>\localisation\0_titles.csv (1114, 1)
[2]: localisation\text1.csv (7126, 1)


I get about 4000 of them and it makes it really tough to sort through. In this case, we have our own localisation for the title d_brandenburg that overrides the Vanilla localisation. We also do it for the provinces as well. It works, as in, our localisation is loaded correctly and Vanilla isn't in the game. We can't exclude the /localisation/ directory in our .mod file because we don't duplicate all the event descriptions and other items.

I tried the settings "Show mod errors" and "Show main mod errors", but neither of those settings prevents the Vanilla "Duplicate ID" error from displaying for the localisations. I did look into the .pdf file you provided, but I can't figure out how to exclude just this error without blocking the actual duplicate localisations within the mod/localisation/ folder itself.

The settings file in the new version has

Code:
# If localization keys appear in both vanilla and in a mod, don't report an error.
#AddFlag = Localization.IgnoreDuplicatesIfInVanilla

It's not tested though, but in theory it might work.
 
Version v1.5 RC15 has been released: https://www.dropbox.com/s/vebvib6k5d55b3u/Audax.Validator v1.5 RC15.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.
 
Getting the following error when I try to validate my mod which I can't get to work properly.

Code:
--- Error 1 of 1 ---
Parse Failure
Path: <mod>\events\immortal_tweaks.txt
Error: Token "=" at line 7, column 17 is part of a list and thus must be a literal.

Here is my mod ->
Code:
###################################################
# The Immortals swear fealty
###################################################

namespace milkan

character_event = {
	id = milkan.0
	desc = milkan.0.desc
	title = milkan.0.title
	picture = GFX_evt_melee_zoroastrian_group
	border = GFX_event_normal_frame_religion
	
	only_playable = yes
	is_ruler = yes
	only_capable = yes
	prisoner = no
	
	trigger = {
		ai = no
		has_global_flag = zoroastrian_priesthood_founded
		NOT = { has_global_flag = immortals_vassal }
		religion_group = zoroastrian_group
		is_heretic = no
		is_title_active = d_immortals
		OR = { 
			k_persia = { is_primary_holder_title = yes } 
			e_persia = { is_primary_holder_title = yes } 
			}
	}
	
	mean_time_to_happen = {
		months = 12
	}
	
	option = {
		name = milkan.0.a
		set_global_flag = immortals_vassal
		IF = {
			limit = {
				k_persia = { is_primary_holder_title = yes }
				}
			d_immortals = {
				holder_scope = {
					e_persia = {
						holder_scope = {
							set_defacto_vassal = PREVPREV
						}
					}
				}
			}
		}
		IF = {
			limit = {
				e_persia = { is_primary_holder_title = yes }
				}
			d_immortals = {
				holder_scope = {
					k_persia = {
						holder_scope = {
							set_defacto_vassal = PREVPREV
						}
					}
				}
			}
		}
	}
}

What does it mean? Its just a standard character_event opener right?

EDIT : Fixed it, seems I was missing a '=' after namespace. Thank god for this tool, finally got my mod working... Cheers!

Also noticed that the Validator does not recognise SoA as a valid DLC, might want to update that.
 
Last edited:
Getting the following error when I try to validate my mod which I can't get to work properly.

Code:
--- Error 1 of 1 ---
Parse Failure
Path: <mod>\events\immortal_tweaks.txt
Error: Token "=" at line 7, column 17 is part of a list and thus must be a literal.

Here is my mod ->
Code:
###################################################
# The Immortals swear fealty
###################################################

namespace milkan

character_event = {
	id = milkan.0
	desc = milkan.0.desc
	title = milkan.0.title
	picture = GFX_evt_melee_zoroastrian_group
	border = GFX_event_normal_frame_religion
	
	only_playable = yes
	is_ruler = yes
	only_capable = yes
	prisoner = no
	
	trigger = {
		ai = no
		has_global_flag = zoroastrian_priesthood_founded
		NOT = { has_global_flag = immortals_vassal }
		religion_group = zoroastrian_group
		is_heretic = no
		is_title_active = d_immortals
		OR = { 
			k_persia = { is_primary_holder_title = yes } 
			e_persia = { is_primary_holder_title = yes } 
			}
	}
	
	mean_time_to_happen = {
		months = 12
	}
	
	option = {
		name = milkan.0.a
		set_global_flag = immortals_vassal
		IF = {
			limit = {
				k_persia = { is_primary_holder_title = yes }
				}
			d_immortals = {
				holder_scope = {
					e_persia = {
						holder_scope = {
							set_defacto_vassal = PREVPREV
						}
					}
				}
			}
		}
		IF = {
			limit = {
				e_persia = { is_primary_holder_title = yes }
				}
			d_immortals = {
				holder_scope = {
					k_persia = {
						holder_scope = {
							set_defacto_vassal = PREVPREV
						}
					}
				}
			}
		}
	}
}

What does it mean? Its just a standard character_event opener right?

EDIT : Fixed it, seems I was missing a '=' after namespace. Thank god for this tool, finally got my mod working... Cheers!

Also noticed that the Validator does not recognise SoA as a valid DLC, might want to update that.

Is "Sons of Abraham" not the correct thing for has_dlc? Or do you mean something else?
 
Another round of false positives:

Code:
--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\trigger\is_at_sea] (Line 1550, column 3):
Invalid node "is_at_sea" in scope CharTrigger (value is: no)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\immediate\location\ROOT\create_character\dna] (Line 1567, column 6):
Invalid node "dna" in scope CharCreation (value is: bdlhexmbcai)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\trigger\any_sibling\OR\is_older_than] (Line 998, column 5):
Invalid node "is_older_than" in scope CharTrigger (value is: ROOT)

--- Error 1 of 1 ---
At events\soa_various_events.txt [character_event\option\FROM\mother\remove_spouse] (Line 654, column 5):
"yes" is not a valid "spouse" or ThisChar.

--- Error 1 of 1 ---
At events\soa_misc_religious_events.txt [character_event\immediate\new_character\if\set_name] (Line 2374, column 5):
Invalid node "set_name" in scope CharIfClause (value is: Jeanne)

--- Error 1 of 1 ---
At events\soa_jewish_events.txt [character_event\option\create_character\dynasty] (Line 342, column 4):
"culture" is not a valid "random", "NONE", "none", DynastyId, or ThisChar.

--- Error 1 of 1 ---
At events\soa_heresy_events.txt [province_event\immediate\religion_head] (Line 1529, column 3):
Invalid node "religion_head" in scope ProvCommand (value is: <a complex type>)

--- Error 1 of 1 ---
At events\pilgrim_events.txt [character_event\option\if\random\impregnate] (Line 3047, column 5):
"0" is not a valid ThisChar.

Thanks for all the work on this! It really is an invaluable tool.
 
In the latest version, Sons of Abraham was supposed to work. Can you post the error message?

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,
 
Another false positive:

Code:
--- Error 1 of 1 ---
At common\on_actions\00_on_actions.txt [on_county_religion_change\events\SoA.4121] (Line 1472, column 3):
"SoA.4121" is not a valid CharEventId, LetterEventId, DiploRespEventId, or NarrativeEventId.

Looks like province events can be called from some on_actions.