• 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.
Possible false positives:
--- Error 1 of 2 ---
At <mod>\events\mnm_hermetics_events.txt [character_event\option\if\random_artifact\tooltip] (Line 3288, column 5):
Invalid node "tooltip" in scope ArtifactMaybeLimitCommand (value is: <a complex type>)
--- Error 2 of 2 ---
At <mod>\events\mnm_hermetics_events.txt [character_event\option\if\random_artifact\hidden_effect] (Line 3289, column 5):
Invalid node "hidden_effect" in scope ArtifactMaybeLimitCommand (value is: <a complex type>)


Here's the code:
Code:
       #Artifacts get stolen
       if = {
           limit = { FROM = { has_character_flag = great_theft } }
           random_artifact = {
               limit = {
                   has_artifact_flag = hermetics
                   has_artifact_flag = text
               }

               tooltip = { destroy_artifact = yes }
               hidden_effect = {
                   transfer_artifact = {
                       from = ROOT
                       to = FROM
                   }
               }
           }
       }

Hard to test, but as far as I can tell, that's working fine.

The new hidden_effect (also hidden_trigger) function the same way as hidden_tooltip.
 
genetic_father and genetic_mother are new additions to the create_character command, and replace the old father and mother that haven't been working for a long time. Can be used to set the parents during character creation (for inheritable traits, etc).

..I don't see them mentioned in the recent patch notes, so I don't know if these are actually new. Maybe they fixed them ages ago, and forgot to tell us.
 
genetic_father and genetic_mother are new additions to the create_character command, and replace the old father and mother that haven't been working for a long time. Can be used to set the parents during character creation (for inheritable traits, etc).

..I don't see them mentioned in the recent patch notes, so I don't know if these are actually new. Maybe they fixed them ages ago, and forgot to tell us.
father and mother = do work, genetic_father and mother are just aliases for them. Both versions function the same in that they are what the portrait of the generated character is based on not who the actual parent of the character is.
 
father and mother = do work, genetic_father and mother are just aliases for them. Both versions function the same in that they are what the portrait of the generated character is based on not who the actual parent of the character is.
Then they're still not fully fixed, since the devs have said that mother/father are also supposed to pass on the traits. Such as sayyid, congenital traits, etc.

And yeah, it doesn't look like they actually do that. I must've got a random congenital trait when I tested it. ...bummer.
 
Then they're still not fully fixed, since the devs have said that mother/father are also supposed to pass on the traits. Such as sayyid, congenital traits, etc.

And yeah, it doesn't look like they actually do that. I must've got a random congenital trait when I tested it. ...bummer.
Maybe they do? Last I heard it was just a graphics thing but it may do the genetic traits as well
 
Of character=0 and character=no, which ones work? Right now according to the Validator yes works, so hopefully no works too. In which case that would be added and 0 left out to avoid having too many ways to do things.
I've only ever tried character = 0, so i couldn't say whether 'no' works or not tbh.
 
I'm sorry if this is something many people have asked but, does this just work for edits done to the actual game files rather than a separate mod file? When I try to get it to validate a mod I created it gets an error for not finding landed titles, even though the only box I checked was dynasties
 
It will work, since it has to scan the original files as part of the mod. However, you shouldn't do that to begin with. Turning off your changes is harder (you basically have to validate your game files and undo everything), if something goes wrong the game stops working entirely, you can't get achievements, and most patches will delete all your work.
Anything you can do editing the originals you can do through a mod, and the mod will make your life easier.
 
OK so these are my conclusions, are they correct?

- character = 0 is functionally identical to always for purposes of checking whether a character exists, and is undocumented, so doesn't really matter. So the validator would not recognize it.
- genetic_(father|mother) is functionally identical to father/mother and they may also just be undocumented so everyone can just use father/mother. So the Validator would not recognize them.
 
- genetic_(father|mother) is functionally identical to father/mother and they may also just be undocumented so everyone can just use father/mother. So the Validator would not recognize them.
They seem functionally same, but vanilla has switched to using genetic_(mother/father) instead of mother/father in the latest beta.
 
OK so these are my conclusions, are they correct?

- character = 0 is functionally identical to always for purposes of checking whether a character exists, and is undocumented, so doesn't really matter. So the validator would not recognize it.
.
It is an odd case. I've been using it to check if a female is pregnant with the child of an unknown father, so:

father_of_unborn = { character = 0 } , will return true if this is the case. However:

father_of_unborn = { always = no } , will not return true.

So it seems, at least in the case of this scope, they are not the same thing, and character = 0 is the only way to check for this. But it is a special case so not overly important if the validator cannot handle it :)
 
It is an odd case. I've been using it to check if a female is pregnant with the child of an unknown father, so:

father_of_unborn = { character = 0 } , will return true if this is the case. However:

father_of_unborn = { always = no } , will not return true.

So it seems, at least in the case of this scope, they are not the same thing, and character = 0 is the only way to check for this. But it is a special case so not overly important if the validator cannot handle it :)

Shouldn't the second rather be NOT = { father_of_unborn = { always = yes } }

The problem here is that if father_of_unborn doesn't point to an actual character, it will be mapped to False, no mattter what's inside the brackets. Thus, NOT needs to be in the outermost part of tha clause for it to work like that.

Or at least that's my understanding.
 
Anyway, here's more false positives:
--- Error 1 of 6 ---
At <mod>\decisions\mnm_society_decisions.txt [targeted_decisions\assassins_recruit\from_potential\OR] (Line 869, column 4):
There may be no duplications of a "society_rank" clause.
There were 2 duplicates.
[I17229|L871|C5]: society_rank = 2
[I17252|L872|C5]: society_rank = 3


Code:
           OR = {
               ai = no
               society_rank == 2
               society_rank == 3
           }
It's within OR, so duplicates should be acceptable?

--- Error 2 of 6 ---
At <mod>\events\indian_pilgrim_events.txt [character_event\immediate\random_independent_ruler\limit\any_character\is_heir] (Line 1507, column 6):
"PREV" is not a valid Bool.

Code:
any_character = {
                   is_heir = PREV
               }
This works, tested it with a decision and it scopes right: 'allow = { is_heir = FROM }' is only allowed if the target is the decision takers' heir, nobody else.

--- Error 3 of 6 ---
At <mod>\events\mnm_secret_religious_societies_events.txt [character_event\immediate\society\if\random_society_member] (Line 8423, column 5):
Invalid node "random_society_member" in scope SocietyIfClause (value is: <a complex type>)


Undocumented, but vanilla uses it a lot and it seems to work. Such as:
Code:
       society = {
           random_society_member = {
               limit = {
                   NOT = { character = ROOT }
                   ai = yes
                   same_realm = ROOT
               }
               save_event_target_as = society_character
           }
           if = {
               limit = { NOT = { event_target:society_character = { always = yes } } }        
               random_society_member = {    # <-- this is reported as invalid
                   limit = {
                       NOT = { character = ROOT }
                       ai = yes
                   }
                   save_event_target_as = society_character
               }
           }
       }

--- Error 4 of 6 ---
At <mod>\events\mnm_monastic_orders_events.txt [character_event] (Line 266, column 1):
The event is set to be triggered only, but it is never called.


All the events that are called from decisions with the new hidden_effect command are currently reported as uncalled..

--- Error 5 of 6 ---
At <mod>\events\mnm_secret_religious_societies_events.txt [character_event\option\hidden_effect\random_list\40\modifier\FROM] (Line 8024, column 7):
Invalid use of 'FROM': This scope has no FROM due to the fact that <mod>\common\on_actions\00_on_actions.txt [on_society_bi_yearly_pulse\random_events\100] (Line 3062, column 3) has no scope.


Here's the valid scopes for events that are called with the on_society_bi_yearly_pulse on_action:
[effectimplementation.cpp:17938]: EVENT [820.2.6]:--------------------------------
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- This: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- Root: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- Prev: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- PrevPrev: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- PrevPrevPrev: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- PrevPrevPrevPrev: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- From: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- FromFrom: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- FromFromFrom: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:- FromFromFromFrom: Count Arnulf the Mutilator (male,42)
[effectimplementation.cpp:17938]: EVENT [820.2.6]:------------------------------


FROM is valid. ...so is everything else, it seems.

--- Error 6 of 6 ---
At <mod>\events\soa_various_events.txt [character_event\immediate\if\clear_education_trait] (Line 1154, column 4):
Invalid node "clear_education_trait" in scope CharIfClause (value is: yes)


Patch notes:
- Added effect 'clear_education_trait'.
Not sure what that actually does, though.
 
Last edited:
Validator doesn't seem to report missing localisation strings in the customized localisations.

For instance, if I create a custom localisation
Code:
defined_text = {
  name = GetRandomAncientThinker

  text = {
    trigger = { always = yes }
    localisation_key = String_Aristotle

... etc ...

Then don't define String_Aristotle in my localisation files, Validator does not report that as a problem. This is especially problematic when adding Devil Worshipper societies for new religions and modifying the many (many) custom localisations used by the DWS to account for them. It can be difficult to keep track of which new strings I've added.
 
Our mod uses very high event numbers 10000000 so what is an easy way to disable constant complaining about this. I looked in the help file and there isn't an option for this.

"The error is "non-namespace ID is larger than 999999, this may lead to collisions"

Not the answer that you're lookingfor, but one ofthe easiest and certainly the most sensible solution is start using namespaces in your mod
 
Our mod uses very high event numbers 10000000 so what is an easy way to disable constant complaining about this. I looked in the help file and there isn't an option for this.

"The error is "non-namespace ID is larger than 999999, this may lead to collisions"
As ngppgn says namespaces are a good idea, but see SettingsFiles\Ck2.txt, specifically "AddFlag = Events.NoCheckIdCollision".
 
The Validator is issuing warnings about children of consorts needing a bastard trait. The children are granted a trait=child_of_consort. The parents are linked with effect={c_####={add_consort=ROOT}}, which is how they're defined in vanilla files. Do you know if I'm doing something wrong, or is the Validator not able to make the proper inference?

Also, this is a minor thing, but it's been around forever and causes me frustration. When you delete an item in the list of issues in the tool, the window highlights the next item down. However, this doesn't appear to be where the cursor is. If you push the down arrow, it doesn't go to the next issue on the list but instead takes you to the very first item in the window. This sort of break my workflow of reviewing issues with the keyboard.