• 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.
Won't even start validating for me (fresh install of it, fresh install of CK2 and it stops at Bookmarks, a file I haven't touched in my mod):

Code:
Beginning validation...
Beginning Bookmarks validation...

ec) EXCEPTION CONTEXT
ec) Validation Task: Bookmarks
Validation Key: Bookmarks
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob
ec) Validating element with constraint [BookmarkFile] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating constraint ["bookmark"] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating element with constraint [Bookmark] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating element with constraint [Bookmark] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating constraint ["name"] @ common\bookmarks.txt ! bookmark[4]: 



ERROR
Audax.Validator.DuplicateItemInScopeException: Item "Key" already exists in this scope.
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.Scope.Resolve[T](String name)
   at Audax.Validator.Reference`1.get_Value()
   at Audax.Validator.TypeCore.PlaceholderConstraint.get_Actual()
   at Audax.Validator.TypeCore.PlaceholderConstraint.Audax.Validator.TypeCore.ICElementJudge.get_InternalCanJudgeElement()
   at Audax.Validator.TypeCore.ConstraintExtensions.CoerceElementJudge(IConstraint constraint)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Audax.Validator.TypeCore.ICChildJudge.InternalValidate(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ConstraintExtensions.Validate(ICChildJudge constraint, Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
   at Audax.Validator.TypeCore.ComplexConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.PlaceholderConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c, ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Audax.Validator.TypeCore.ICChildJudge.InternalValidate(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ConstraintExtensions.Validate(ICChildJudge constraint, Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
   at Audax.Validator.TypeCore.ComplexConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c, ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate(Context c)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)

Most of the choices even when selected individually display this error and stop validation
 
Won't even start validating for me (fresh install of it, fresh install of CK2 and it stops at Bookmarks, a file I haven't touched in my mod):

Code:
Beginning validation...
Beginning Bookmarks validation...

ec) EXCEPTION CONTEXT
ec) Validation Task: Bookmarks
Validation Key: Bookmarks
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob
ec) Validating element with constraint [BookmarkFile] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating constraint ["bookmark"] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating element with constraint [Bookmark] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating element with constraint [Bookmark] @ common\bookmarks.txt ! bookmark[4]: 
ec) Validating constraint ["name"] @ common\bookmarks.txt ! bookmark[4]: 



ERROR
Audax.Validator.DuplicateItemInScopeException: Item "Key" already exists in this scope.
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.RealScope.TryResolve[T](String name, T& value)
   at Audax.Validator.Scope.Resolve[T](String name)
   at Audax.Validator.Reference`1.get_Value()
   at Audax.Validator.TypeCore.PlaceholderConstraint.get_Actual()
   at Audax.Validator.TypeCore.PlaceholderConstraint.Audax.Validator.TypeCore.ICElementJudge.get_InternalCanJudgeElement()
   at Audax.Validator.TypeCore.ConstraintExtensions.CoerceElementJudge(IConstraint constraint)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Audax.Validator.TypeCore.ICChildJudge.InternalValidate(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ConstraintExtensions.Validate(ICChildJudge constraint, Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
   at Audax.Validator.TypeCore.ComplexConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.PlaceholderConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c, ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Audax.Validator.TypeCore.ICChildJudge.InternalValidate(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ConstraintExtensions.Validate(ICChildJudge constraint, Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(Context c, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(Context c)
   at Audax.Validator.TypeCore.ComplexConstraint.Audax.Validator.TypeCore.ICElementJudge.InternalElementValidate(Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c)
   at Audax.Validator.TypeCore.ConstraintExtensions.ElementValidate(ICElementJudge constraint, Context c, ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate(Context c)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)

Most of the choices even when selected individually display this error and stop validation

Sorry, I did something really stupid. I've updated the download links and they should work now.
 
I figured out my errors the old fashioned way, but I'm sure I forgot other things so thanks :)

PS: Don't worry about it, mistakes happen, otherwise I wouldn't be looking at your validator already ;)
 
Thanks for your great work Jamie. Still, could you please add "No death found for character" to errorCodes.txt? Now that I can't supress them manually, validating the Game of Thrones' character file has become a pain, since almost nobody has a proper death date.
 
Thanks for your great work Jamie. Still, could you please add "No death found for character" to errorCodes.txt? Now that I can't supress them manually, validating the Game of Thrones' character file has become a pain, since almost nobody has a proper death date.

Okay, I will do so.

Sorry for the inconvenience, but I think that it will be better in the long run, because the old suppressions system would break if the line with the error ever moved, so if you added a new character at the beginning of the file, all of the rest of the file would complain. With this system there should be no risk of that :)
 
Thanks for your great work Jamie. Still, could you please add "No death found for character" to errorCodes.txt? Now that I can't supress them manually, validating the Game of Thrones' character file has become a pain, since almost nobody has a proper death date.

Added. Just to be clear, you would use it like such:

Code:
# Audax Validator "." Ignore_2001
122502 = {
	name="Anastasia"
	female = yes
	religion="orthodox"
	culture="alan"
	990.2.28={
		birth="990.2.28"
	}
}

ie targeting the character as a whole.
 
Added. Just to be clear, you would use it like such:

Code:
# Audax Validator "." Ignore_2001
122502 = {
	name="Anastasia"
	female = yes
	religion="orthodox"
	culture="alan"
	990.2.28={
		birth="990.2.28"
	}
}

ie targeting the character as a whole.
I was thinking more of using it like this:

Code:
# Audax Validator "!" Ignore_2001

at the beginning of the file. Since at the moment what we mostly have is characters from the books who we still don't know when they die, the fact that we don't have a death date for most of them is WAD and not an error for us (otoh, I can see how it would be desirable for historical mods to give death dates to everybody, of course, so this will probably only be an issue for us).

I agree this looks like a better system indeed :)
 
I was thinking more of using it like this:

Code:
# Audax Validator "!" Ignore_2001

at the beginning of the file. Since at the moment what we mostly have is characters from the books who we still don't know when they die, the fact that we don't have a death date for most of them is WAD and not an error for us (otoh, I can see how it would be desirable for historical mods to give death dates to everybody, of course, so this will probably only be an issue for us).

I agree this looks like a better system indeed :)

I just checked to make sure that "!" did work as expected, and it did, so once the next RC is released, all should be good :)
 
Is there a quick way to turn off the localisation checking? It's virtually impossible to detect actual errors among all the "not found in localisation" spam.
 
Is there a quick way to turn off the localisation checking? It's virtually impossible to detect actual errors among all the "not found in localisation" spam.

Look in SettingsFiles/Ck2.txt, copy that file to your CK2 root directory as ValidatorSettings.txt, then open the file and remove the comment in front of AddFlag = NoKeyChecks.
 
How would I make the validator check other mods alongside mine? (for example, I have a version of my mod that is compatible with CK2+ and requires it. Checking it individually will make it throw errors for things that aren't errors with CK2+)
 
How would I make the validator check other mods alongside mine? (for example, I have a version of my mod that is compatible with CK2+ and requires it. Checking it individually will make it throw errors for things that aren't errors with CK2+)

*in theory* the Validator will read the "prerequisites" field of the .mod file and look at those files first. However I'm not sure if anyone has ever tried it. Maybe you can see if it works?

If not, then the easiest way I can think of is extracting your mod over CK2+ and validating that thing as a whole, but of course that's a bit hackish. In any case, if the prerequisites doesn't work, I'll look into fixing it.
 
How would the syntax for that work (sorry this is the first time even seeing it mentioned in this reference)? Like this?

Code:
prerequisite = "mod/CK2Plus.mod"

I am certainly willing to give it a shot, because I can for the life of me not figure out what is wrong with my compatibility fix for CK2+ (my standalone version works just fine for example)
 
How would the syntax for that work (sorry this is the first time even seeing it mentioned in this reference)? Like this?

Code:
prerequisite = "mod/CK2Plus.mod"

I am certainly willing to give it a shot, because I can for the life of me not figure out what is wrong with my compatibility fix for CK2+ (my standalone version works just fine for example)

There's some information here: http://forum.paradoxplaza.com/forum/showthread.php?572577-Crusader-Kings-Dev-Diary-21-Usermodding

So it's called "dependencies" actually, not "prerequisistes". The Validator is supposed to read that and look at that mod first, but if it will actually work, I don't know.
 
Code:
name = "[4] Flavourful Titular Titles 1.18 for CK2+ 1.21"
path = "mod/FTT"
dependencies = "CK2Plus"

Nope, validator doesn't read CK2Plus when it checks for errors
 
Code:
name = "[4] Flavourful Titular Titles 1.18 for CK2+ 1.21"
path = "mod/FTT"
dependencies = "CK2Plus"

Nope, validator doesn't read CK2Plus when it checks for errors

Okay, I'll look into it. In the meantime you could try extracting on top of Ck2+.