• 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.
List your landed_titles through line 12. Is it possible you accidentally deleted the closing bracket on the previous line?
 
List your landed_titles through line 12. Is it possible you accidentally deleted the closing bracket on the previous line?
Code:
e _rebels = {
    rebel = yes
    landless = yes
    primary = yes

    culture = swedish
    religion = pagan
    tribe = yes

    color={ 0 0 0 }
    color2={ 0 0 0 }
}

e_pirates = {
    pirate = yes
    landless = yes
    primary = yes

    culture = swedish
    religion = pagan
    tribe = yes

    color={ 0 0 0 }
    color2={ 0 0 0 }
}
Oh now I see it, a space in e_rebels. Odd that notepad+ comparison tool didn't see that.
 
--- Error 1 of 1 ---
At <mod>\events\achievement_events.txt [narrative_event\option\change_variable] (Line 21056, column 3):
The right sides of a "which" clause may not be identical.
There were 2 duplicates.
[I376132|L21058|C4]: which = dynastic_achievements
[I376098|L21057|C4]: which = dynastic_achievements
Actual code:
Code:
       change_variable = {
           which = dynastic_achievements
           which = dynastic_achievements
           which = FROM
       }
Since the third which gives the scope which the second which is referencing, the RHS is not really identical.

BTW, the wiki says that the third "which" can be "who" instead, but the Validator does not recognize "who" as a valid keyword in a change_variable context.
 
Support for 3.0 is in progress and will take some time as the patch seems to be rather large. In the meantime, please continue reporting issues that existed pre-3.0. You can also report 3.0 issues, but it probably would be better to wait until the initial round of validator support is complete.
 
Preview (very incomplete still!) of next version which has support for Ck2 3.0: https://www.dropbox.com/s/9by82xu73ffqdxp/Audax.Validator v1.28.0 preview 1.zip?dl=0

I've been going through vanilla errors and have gotten up to and including province history. So if you report any issues for "Province History" or before for vanilla, that would be helpful.

These are the new directories that need validation (none of which have yet been added), are there any missing?


Code:
# religion_features
# alternate_start
# bloodlines
# succession_voting
# scripted_score_values
 
--- Error 1 of 1 ---
At <mod>\events\court_ai_events.txt [character_event\immediate\any_known_plotter] (Line 1318, column 3):
Invalid node "any_known_plotter" in scope CharCommand (value is: <a complex type>)
I have not verified this, but wiki says that any_known_plotter is a valid effect scope. Perhaps @blackninja9939 will be kind enough to verify this, if not I will try to remember to verify this evening in-game.
 
I have not verified this, but wiki says that any_known_plotter is a valid effect scope. Perhaps @blackninja9939 will be kind enough to verify this, if not I will try to remember to verify this evening in-game.
any_known_plotter should be a valid script list for effects
 
I have not verified this, but wiki says that any_known_plotter is a valid effect scope. Perhaps @blackninja9939 will be kind enough to verify this, if not I will try to remember to verify this evening in-game.
What are the scopes it can be in? e.g. is it just char scope or others too?
 
What are the scopes it can be in? e.g. is it just char scope or others too?
As far as I can tell from Vanilla (where it is exclusively used in character trigger scopes in decisions and events), just character scopes.
 
--- Error 1 of 1 ---
At common\artifacts\00_artifacts.txt [ingredient_herb1\history] (Line 2901, column 2):
Invalid node "history" in scope ArtifactDef (value is: no)
artifact_script.info said:
history = no # artifact history will not be kept for this artifact
 
Code:
--- Error 1 of 1 ---
At <mod>\decisions\imperial_court_decisions.txt [decisions\move_imperial_capital\allow\custom_tooltip\any_demesne_title\is_quest_target] (Line 903, column 6):
Invalid node "is_quest_target" in scope TitleTriggerWithCount (value is: no)
Code:
--- Error 1 of 1 ---
At <mod>\events\ipc_maintenance_events.txt [character_event\immediate\FROM\if\any_realm_title\if\any_quester_targetting_this] (Line 2298, column 7):
Invalid node "any_quester_targetting_this" in scope TitleIfClause (value is: <a complex type>)
Code:
--- Error 1 of 1 ---
At <mod>\events\ipc_mission_events.txt [society_quest_event\option\event_target:imperial_road_province\set_quest_target] (Line 1021, column 4):
Invalid node "set_quest_target" in scope ProvCommand (value is: <a complex type>)
Code:
--- Error 1 of 1 ---
At <mod>\events\ipc_mission_events.txt [society_quest_event\option\event_target:imperial_capital\set_quest_target] (Line 1280, column 4):
Invalid node "set_quest_target" in scope TitleCommand (value is: <a complex type>)
Code:
is_quest_target = yes                # scope must be a character, landed title or province, and returns true if the current scope is targetted by any quest

any_quester_targeting_this = {    # takes the current scope and finds all characters with a quest targeting it.
    wealth = 100                # the scope for the effect being executed is the character having the quest
}

set_quest_target = {                # scope is the entity being targeted (can be a character, a title or a province).
    id = quest_id                    # if the quest exists, the target is changed, otherwise the quest is created
    holder = quester                 # character who receives the quest, or who has it already
    society = optional_society_name    # optional, if not set will use the character's society.
                                    # If the society is not set, and the character is not part of a society, will send an error and nothing happens
}
The above are all pre-3.0 stuff, I can confirm that these commands and triggers all work.

Code:
--- Error 1 of 1 ---
At <mod>\common\societies\imperial_court_unique_societies.txt [imperial_court_byzantine\society_rank\powers] (Line 62, column 3):
Invalid node "powers" in scope SocietyRankDef (value is: <a complex type>)
Renamed the "decisions" section in societies to "powers" (though the old name still works). Now supports loc keys too, not just decisions. Will then use the key for the name, and the key + "_power_desc" for the extended description
Code:
--- Error 1 of 1 ---
At <mod>\common\societies\imperial_court_unique_societies.txt [imperial_court_byzantine\monthly_currency_gain\triggered_gain] (Line 213, column 3):
Invalid node "triggered_gain" in scope <anon> (value is: <a complex type>)
Code:
triggered_gain = {
        desc = loc_key # What to show in the score gain breakdown. Passed through custom loc with the character as ROOT. The gain is provided as $GAIN$
        trigger = { # When to give the gain. The character is ROOT
            some triggers
        }
        value = 10 # How much to give
    }

The above are new stuff added in 3.0.


Code:
--- Error 1 of 1 ---
At <mod>\events\ipc_mission_events.txt [character_event\option\show_portrait] (Line 3720, column 3):
"top_liege" is not a valid Yes, MaybeEventTargetOffmapPowerTitle, OffmapPower, or AnyTitle.

This last one I'm not sure when was added, but it works too.
 
--- Error 1 of 1 ---
At common\scripted_effects\04_scripted_effects_crusades.txt [reconquista_win_effect\ROOT\if\random_dynasty_member\ROOT\make_tributary] (Line 1258, column 6):
The required "tributary_type" entry was not found.
* called from common\cb_types\00_cb_types.txt [reconquista_navarra\on_success\reconquista_win_effect] (Line 21196, column 3)
Per tributary_types.info, tributary_type is optional in a make_tributary context:
make_tributary = { # Effect to create a tributary. The scope character is the suzerain
who = ROOT # who is the new tributary
percentage = 0.05 # the tribute being paid (as a percentage of the tributary's income), overrides the value defined in the tributary type
tributary_type = imperial # the type of tributary. If ommited, defaults to "default"
}
 
--- Error 1 of 1 ---
At common\cb_types\00_cb_types.txt [decadence_invasion\on_reverse_demand_title\ROOT\remove_claim] (Line 8836, column 35):
"PREV" is not a valid AnyTitle.
--- Error 1 of 1 ---
At common\cb_types\00_cb_types.txt [new_crusade\on_success_title\hidden_tooltip\if\limit\NOT\crusade_beneficiary] (Line 4465, column 7):
Invalid node "crusade_beneficiary" in scope TitleTrigger (value is: <a complex type>)
PREV in both cases points to an on_*_title block, which is the title in dispute for the CB.
--- Error 1 of 1 ---
At common\cb_types\00_cb_types.txt [new_crusade\on_success_title\hidden_tooltip\if\limit\NOT\crusade_beneficiary] (Line 4465, column 7):
Invalid node "crusade_beneficiary" in scope TitleTrigger (value is: <a complex type>)
Similarly (if I'm counting right) PREVPREVPREV points to on_success_title (the title under dispute)
 
--- Error 1 of 1 ---
At <mod>\events\friends_rivals_events.txt [character_event] (Line 12373, column 1):
This triggered-only non-on action event should not have a weight multiplier.
The event is an on_action event, listed in the friends_rivals_adult subsection of on_yearly_pulse random_events.
_on_actions.info said:
Code:
== Format ==
on_action_name = { # The identifier
   effect = { # Effects to happen in the scope the on-action provides. Happens before any events
       wealth = 1000
   }
   events = { # Events to always happen if their trigger is fulfilled
       namespace.id
   }
   random_events = { # Events where one valid event is selected at random
       1000 = namespace.id # The first number is the chance. It will be modified by MTTH modifiers in the event; the higher the MTTH, the higher the chance
       1000 = 0 # If the right-hand-side is "0", this provides the chance of no event at all happening
       
       name = { # Name of an independent random list. One valid event will be selected at random from it
           delay = 5 # How many days to delay the event. Useful to ensure the player doesn't get spammed with a bunch of events at the same time
           1000 = namespace.id # Format is the same as within random_events itself
       }
       name_2 = { # Another independent random list. They can all fire at the same time. You can have as many of these as you want, with whatever names you want
           1000 = namespace.id
       }
   }
}
Validator does not yet understand the independent random lists inside random_event lists. (On actions come before province history in the Validator menu, so I assume this was overlooked.)
 
--- Error 1 of 1 ---
At <mod>\events\imprisoned_events.txt [character_event\option\if\if\hidden_effect] (Line 923, column 4):
The right sides of a "add_character_modifier" clause may not be identical.
There were 2 duplicates.
[I17163|L925|C6]: add_character_modifier = { name = sacrificed_prisoner # Add 1st duration = 1000 stacking = yes }
[I17292|L930|C6]: add_character_modifier = { # Add 2nd name = sacrificed_prisoner duration = 1000 stacking = yes }
It's allowable if the modifier is stacking. At least one vanilla event deliberately does it to refresh the duration when the stacking limit is reached. (Event 50020 in the Warrior Lodge only option, if the sacrificed_prisoner modifier has reached 3 stacks, they're all removed then two are re-added in a hidden_effect, and a third added that is not hidden.) Perhaps give a warning rather than an error?
 
--- Error 1 of 1 ---
At <mod>\events\court_ai_events.txt [character_event\immediate\capital_scope\ROOT\job_spymaster\else\set_job_action] (Line 2990, column 7):
The required "where" entry was not found.
Code:
                       set_job_action = {
                           action = action_uncover_plots_offmap
                       }
Haven't tested yet, but if the job_action has "offmap = yes" in its definition, I would suspect that where isn't needed. @blackninja9939 , can you confirm that where is unneeded for set_job_action of an offmap job action, or if it is, what the right hand side should be? There are no vanilla uses I can find where offmap job actions are set.
Edit: Tested, doesn't work without a where. Haven't tested to see if it matters what province is specified.

--- Error 1 of 1 ---
At <mod>\events\court_ai_events.txt [character_event\trigger\job_chancellor\OR\AND\NOT\infamy] (Line 2903, column 7):
Invalid node "infamy" in scope CharTrigger (value is: 25)
According to wiki, infamy can be used as a trigger with an example of infamy = 12.5. (only used as an effect in vanilla.)
 
Last edited:
--- Error 1 of 2 ---
At <mod>\decisions\minor_decisions.txt [decisions\rename_artifact\potential\FROM] (Line 3147, column 4):
No direct match found for FROM (is the casing correct?). However, other possible matches in scope NormalDecisionTriggerFromFromNone were found.
Left: [ThisChar] Right: [CharTrigger] cannot be correct because of left: FROM points to <null>.
However, a Char was expected.
This is not a valid place to use FROM.
Left: [ThisProv] Right: [ProvTrigger] cannot be correct because of left: FROM points to <null>.
However, a Prov was expected.
This is not a valid place to use FROM.
Left: [ThisTitle] Right: [TitleTrigger] cannot be correct because of left: FROM points to <null>.
However, a Title was expected.
This is not a valid place to use FROM.
Left: [ThisUnit] Right: [UnitTrigger] cannot be correct because of left: FROM points to <null>.
However, a Unit was expected.
This is not a valid place to use FROM.
Left: [ThisSociety] Right: [SocietyTrigger] cannot be correct because of left: FROM points to <null>.
However, a Society was expected.
This is not a valid place to use FROM.
Left: [ThisArtifact] Right: [ArtifactTrigger] cannot be correct because of left: FROM points to <null>.
However, a Artifact was expected.
This is not a valid place to use FROM.
Left: [ThisBattle] Right: [BattleTrigger] cannot be correct because of left: FROM points to <null>.
However, a Battle was expected.
This is not a valid place to use FROM.
Left: [ThisWar] Right: [WarTrigger] cannot be correct because of left: FROM points to <null>.
However, a War was expected.
This is not a valid place to use FROM.
Left: [ThisSiege] Right: [SiegeTrigger] cannot be correct because of left: FROM points to <null>.
However, a Siege was expected.
This is not a valid place to use FROM.
Left: [ThisSide] Right: [SideTrigger] cannot be correct because of left: FROM points to <null>.
However, a Side was expected.
This is not a valid place to use FROM.
Left: [ThisOffmapPower] Right: [OffmapPowerTrigger] cannot be correct because of left: FROM points to <null>.
However, a OffmapPower was expected.
This is not a valid place to use FROM.
Left: [ThisReligion] Right: [ReligionTrigger] cannot be correct because of left: FROM points to <null>.
However, a Religion was expected.
This is not a valid place to use FROM.
Left: [ThisCulture] Right: [CultureTrigger] cannot be correct because of left: FROM points to <null>.
However, a Culture was expected.
This is not a valid place to use FROM.
Left: [ThisBloodline] Right: [BloodlineTrigger] cannot be correct because of left: FROM points to <null>.
However, a Bloodline was expected.
This is not a valid place to use FROM.
--- Error 2 of 2 ---
At <mod>\decisions\minor_decisions.txt [decisions\rename_artifact\potential\FROM] (Line 3147, column 4):
Invalid use of 'FROM': This is not a valid place to use FROM.
This and the destroy_artifact (which threw the same errors) decisions are unedited vanilla decisions. I don't know why they made them normal decisions rather than making a new type of right-click decision for artifacts. Both have hide_in_decision_list = yes, which may be the determining factor to indicate that FROM is valid in the decision. (If it's hidden in the decision list, it's only available to the player by a right click on something.) Hopefully @blackninja9939 will comment.
 
--- Error 1 of 1 ---
At <mod>\decisions\minor_decisions.txt [decisions\settle_iceland\ai_will_do\trigger] (Line 924, column 4):
Invalid node "trigger" in scope AiWillDoFromFromNone (value is: <a complex type>)
After seeing this error thrown by a vanilla decision, I happened across some dev comments on their bug tracking site indicating trigger can now be used in ai_will_do, ai_chance and selection_score (and possibly other places) as a superior alternative to modifiers with 0 factors.
 
Actual code:
Code:
       change_variable = {
           which = dynastic_achievements
           which = dynastic_achievements
           which = FROM
       }
Since the third which gives the scope which the second which is referencing, the RHS is not really identical.

BTW, the wiki says that the third "which" can be "who" instead, but the Validator does not recognize "who" as a valid keyword in a change_variable context.
Nevermind about this one, I found something on the wiki about using second "which" to specify the scope when both variables have the same name from different scopes.
 
False negative - had the beta version of CK2 throw on error on unknown character trigger for is_independent in one of my mods today, but it passed Validator. (And if I told you years ago that it did work, I apologize.)

Edit: Nevermind, I thought it had been clean, but checking the Validator run on my test event for this error, it did in fact find it.

A few false negatives in bracket commands:
GetHimselfHerself (not actually used in any current vanilla files, correct one is GetHerselfHimself)
FromGetSheHe (used once in German localization, has been reported)
FromGetName (used once in German localization, has been reported)
GetTitled
FirstName (This and the above one are used in one file as [From.GetTitled.FirstName], has been reported)
FromGetFullName (not actually used in any current vanilla files)
GetLord (not used in any current vanilla files)
RandomGodName (not used in any current vanilla files)
God (not used in any current vanilla files)
Relhead (not used in any current vanilla files)
FromGetHerHis (not used in any current vanilla files)
GetTitlesName (used in one line, reported)
 
Last edited: