• 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.

Mhoirbheinn

Captain
66 Badges
Sep 17, 2020
402
901
  • Europa Universalis IV: Mare Nostrum
  • Cities: Skylines
  • Europa Universalis IV: El Dorado
  • Europa Universalis IV: Pre-order
  • Mount & Blade: Warband
  • Crusader Kings II: Way of Life
  • Pillars of Eternity
  • Europa Universalis IV: Common Sense
  • Crusader Kings II: Horse Lords
  • Cities: Skylines - After Dark
  • Europa Universalis IV: Cossacks
  • Crusader Kings II: Conclave
  • Cities: Skylines - Snowfall
  • Victoria 2: Heart of Darkness
  • Stellaris
  • Crusader Kings II: Reapers Due
  • Europa Universalis IV: Rights of Man
  • Tyranny: Archon Edition
  • Stellaris: Digital Anniversary Edition
  • Stellaris: Leviathans Story Pack
  • Cities: Skylines - Natural Disasters
  • Crusader Kings II: Monks and Mystics
  • Stellaris - Path to Destruction bundle
  • Cities: Skylines - Mass Transit
  • Europa Universalis IV: Mandate of Heaven
  • Victoria 3 Sign Up
  • Europa Universalis IV: Call to arms event
  • Crusader Kings II: Charlemagne
  • Crusader Kings II: Legacy of Rome
  • Crusader Kings II: The Old Gods
  • Crusader Kings II: Rajas of India
  • Crusader Kings II: The Republic
  • Crusader Kings II: Sons of Abraham
  • Crusader Kings II: Sunset Invasion
  • Crusader Kings II: Sword of Islam
  • Europa Universalis IV
  • Europa Universalis IV: Art of War
  • Europa Universalis IV: Conquest of Paradise
  • Europa Universalis IV: Wealth of Nations
  • Crusader Kings II
  • For the Motherland
  • Hearts of Iron III
  • Hearts of Iron III: Their Finest Hour
  • Hearts of Iron III Collection
  • Europa Universalis IV: Res Publica
  • Victoria: Revolutions
  • Semper Fi
  • Ship Simulator Extremes
  • Sword of the Stars
  • Victoria 2
war alerts 16x9.jpg

War Alerts - Customisable War Notifications
Steam Workshop I Paradox Mods
Never again lose your landed heir to a peasant revolt you didn't notice besieging his holding until it was too late.
Set customisable notifications to alert you to wars declared by or against family, friends, lovers, house members, dynasts, vassals, neighbours, and pinned characters. Toggle alerts on and off by decision.


How to Activate
Subscribe in Steam or Paradox Mods and select the mod as normal in the Paradox Launcher. A new major decision will be available to your character in game to 'Activate War Alerts'. Select the decision. The War Alert customisable war notifications will then appear under minor decisions and can be toggled on and off.

Notification Options
Toggle alerts on and off for the following when they declare wars or have war declared on them:
  • Pinned characters
  • Peasant revolts against vassals
  • Close family (parents, children, spouse, grandparents, and grandchildren) and relations (friends, lovers, soulmates, rivals, wards, mentors etc.)
  • Extended family (cousins, uncles, and aunties)
  • House members
  • Dynasty members
  • Vassals external wars
  • Vassals internal and external wars
  • Neighbouring top lieges
Family and Relations Localised with Custom Alerts
War alert notifications are customised to have the characters relations to you listed in the title. Be immersed as your brothers declare wars, save your soulmate, rescue your landed spouse, fight with your cousin, laugh at your nemesis's troubles, and join your dynasts in their conquests.

Co-op and Multiplayer
War Alerts is unlikely to work as intended when there is more than one non-AI player at a time. I expect that all human players will receive all alerts if any of the human player's relations satisfy the global settings that any player sets through decisions. Let me know if it performs better than that.
 
Last edited:
  • 5Like
  • 3Love
Reactions:
That was very much needed!
Many thanks!
 
  • 2Like
Reactions:
Version 0.3
  • Hide and show toggle decision added. War Alert options can now be hidden from the decision menu once alerts have been set to reduce menu clutter. Existing save games will have a new major decision to activate the hide and show toggle and redisplay the War Alert options.
  • Decision loc titles changed from "Notifications" to "Alerts" to better display in the decision menu.

That was very much needed!
Many thanks!
Cheers, thanks mate. Hope you enjoy it.
 
  • 2Like
Reactions:
Without a german localisiation there is just Script-Language instead of the descriptions.
How a m i able to add a german localisation or can i help you to add a translation ?
 
Without a german localisiation there is just Script-Language instead of the descriptions.
How a m i able to add a german localisation or can i help you to add a translation ?
I'd be more than happy to include different localisations directly in to the mod if you or anyone else can do the translations. There are two localisation files in the mod, one for the notification messages (war_alerts_messages_mod_l_english.yml) and another for the decisions (war_alerts_decisions_mod_l_english.yml).

The decision localisation is in plain English and would need an ordinary translation. The defitions are self explanatory, the first "<keyname>" term is the title of the decision and is the name that will appearin the decision menu. The "<keyname>_desc" is the description given in the decision box. The "<keyname>_tooltip" is the description of the decision that pops up in the tooltop box when hovering over the decision in the decision menu, for most it's a copy of the "<keyname>_desc" loc, sometimes a little shortened. The "<keyname>_confirm" is what will appear on the selection button in the decision box to select the decision. Each decisions loc, with the four keys to be defined for each decision, are seperated by an empty line, so you shoudn't get lost matching key sets to decisions.

The second is the message localisation for the notifications, "war_alerts_messages_mod_l_english.yml". I can clean that loc file up a lot so that it calls on the different localisations that are already defined by the game directly. For example by changing the plain English "Uncle" with "$UNCLE$" so that it calls on the localisation "UNCLE:" already defined in the vanilla localisations as English "Uncle", German "Onkel", French "oncle", Russian "дядя"' etc. That way the localisation translation for the notificiations would be much simpler; mainly posessives and copulas, and getting the world order right.

If you want to get started I've attached the English localisation for the decisions. If you haven't done a mod localisation before, they're .yml documents, use Notepad++ or similar, change the text inside the brackets to the German translation of the English sentences. Change the first line from "l_english:" to "l_german", save as <name>_l_german.yml" in UTF-8 BOM encoding. Upload it here and I'll include them in a "<mod name>\localization\german" folder inside the mod.

I'll clean up the notification message localisation and upload it here sometime in the next few days, and then it should just be a handful of words and phrases to change to complete the loc.

Edit: The "war_alerts_messages_mod_l_english.yml" loc uploaded too. See posts below.
 

Attachments

  • war_alerts_decisions_mod_l_english.yml
    11,2 KB · Views: 0
  • war_alerts_messages_mod_l_english.yml
    46,8 KB · Views: 0
Last edited:
Hello, I'm working on a french loc.

Just noticed something, I think you put the extended family twice? Instead to have family and extended family (about the "disable option"). See screenshot:

rep2.JPG


And thanks again for this awesome mod :)
 
  • 1Like
Reactions:
Hello, I'm working on a french loc.

Just noticed something, I think you put the extended family twice? Instead to have family and extended family (about the "disable option"). See screenshot:

View attachment 642176

And thanks again for this awesome mod :)
That's great, I'll be happy to add it in. You're right, you can omit "extended family" in the 'notify_of_war_family_decision_value_zero_first_desc' and the 'notify_of_war_family_decision_value_zero_first_tooltip'. I'll correct the English loc. Thanks.

The 'value_zero_first' decision there turns off the stage one Family War Alerts which is only for close family and relations (as the rest of the loc says). The 'value_zero' turns off both stage one and stage two Family War Alerts which includes extended family.
 
Here is the file for the French translations. Let me know if you see any problem; first time I'm doing the loc for a mod. I could modify.
 

Attachments

  • war_alerts_decisions_mod_l_french.yml
    13,8 KB · Views: 0
  • 1Like
Reactions:
The second is the message localisation for the notifications, "war_alerts_messages_mod_l_english.yml". I can clean that loc file up a lot so that it calls on the different localisations that are already defined by the game directly. For example by changing the plain English "Uncle" with "$UNCLE$" so that it calls on the localisation "UNCLE:" already defined in the vanilla localisations as English "Uncle", German "Onkel", French "oncle", Russian "дядя"' etc. That way the localisation translation for the notificiations would be much simpler; mainly posessives and copulas, and getting the world order right.
I should ask, is it easier to do loc translations with plain English rather than adding in more scripted localisation values? They can be confusing and add another level of complexity that isn't really needed if you're going manually do a translation. I'll upload the second loc to this post.

In war_alerts_messages_mod_l_english.yml there are three templates.

The first for when the character you are interested in is the attacker:
Code:
 msg_war_declared_by_wife:0 "Your Wife Attacks"
msg_war_declared_by_wife_message:2 "Your wife the [attacker.Custom('ComplimentAdjective')] [attacker.GetTitledFirstName|U] of the [attacker.GetPrimaryTitle.GetName] is attacking the [defender.Custom('InsultAdjective')] [defender.GetTitledFirstName|U] of the [defender.GetPrimaryTitle.GetName] in the [war.GetName|V]"
[attacker.GetTitledFirstName|U] is "Queen Beth" and [attacker.GetPrimaryTitle.GetName] is "Kingdom of France" (come to think of it I'll have to check how that particular script works for unlanded wives).

The second where the character you are interested in is the defender:
Code:
 msg_war_declared_on_grandmother:0 "Your Grandmother is Under Attack"
msg_war_declared_on_grandmother_message:0 "Your grandmother the [defender.Custom('ComplimentAdjective')] [defender.GetTitledFirstName|U] of the [defender.GetPrimaryTitle.GetName] is under attack by the [attacker.Custom('InsultAdjective')] [attacker.GetTitledFirstName|U] of the [attacker.GetPrimaryTitle.GetName] in the [war.GetName|V]"
This is an inversion of the first attacker template and can be made by replacing:
  • "_by_" with "_on_"
  • "attacker" with "defender"
  • and whatever localised translation you choose for the English: "is attacking the" with "is under attack by the"
The third where the character you are interested in is the defender against a peasant revolt:
Code:
msg_peasant_war_declared_on_father:0 "Peasant Revolt Against Father"
msg_peasant_war_declared_on_father_message:2 "Your father the [defender.Custom('ComplimentAdjective')] [defender.GetTitledFirstName|U] of the [defender.GetPrimaryTitle.GetName] is under attack in the [war.GetName|V] of the [attacker.Custom('InsultAdjective')] [attacker.GetTitledFirstName|U]"
Which can be generated from the defendertemplate by replacing
  • "msg_war_" with "msg_peasant_war_"
Because peasant revolt leaders don't have a proper title I omit the [attacker.GetPrimaryTitle.GetName] and change the order where the war name [war.GetName|V] is mentioned to act as a pseudo-title. The word order of the sentance will depend on what works best in your language.

The other variations are closer relations have an scripted vanilla loc compliment added before their name, and most antagonists have a scripted vanilla loc insult added before their names. Soulmates and lovers get a petname too.
 

Attachments

  • war_alerts_messages_mod_l_english.yml
    46,8 KB · Views: 0
Last edited:
Ok, i was able to make the first step and now the english definitions are used ingame instead of the script gibberish.
I made the mistake and saved the files, where i has just changed "english" to "german", via windows integrated wordpad instead of notepad++.

Now that this problem is figured out i will try to find some time to make a proper translation.
 
  • 1Like
Reactions:
Hello, I just finished the French loc for the second file. BUT. I just noticed that the "replace all" option is really a bad idea as it replaces also your settings. Example: "msg_war_declared_by_mari_âme-sœur_message"

And I don't know how to manage it atm, except to correct it line by line. I can do it, but before to send it to you, is it possible for me to test the translation I'm doing? If I put the yml French file in your mod folder or something?

***

About the translation itself:
  • I don't know what are "gretson" etc. Grandson I guess?
  • Same for "nemesis", in French it's "némésis" but I have never seen this term in the game. But as I'm a beginner on CK, maybe I missed something
  • In French we have to deal with male/female adjective etc. For a male we say "est attaqué" for "is under attack". For female we say "est attaquée". Then for most of the cases, I simply put "attaqué(e)" which is a pretty common thing for us in these situations.
  • I will probably miss some mistakes because of the "replace all" options and maybe some alerts could be a bit "weird". That's why I want to test it. But anyway, I will follow and update your mod about my translations and correct it if necessary.
    • (But everything should be understandable anyway, no worries)
PS: I just saw you updated the first FR loc part on the mod, awesome thanks!
 
Last edited:
  • 1Like
Reactions:
And I don't know how to manage it atm, except to correct it line by line. I can do it, but before to send it to you, is it possible for me to test the translation I'm doing? If I put the yml French file in your mod folder or something?
Yeah for sure, place it in your local version of the mod's \localization\french folder and then have it run. If you use Steam it should be in Steam\steamapps\workshop\content\1158310\2256989379\localization\french . 1158310 is CK3's Steam ID, and 2256989379 is the mods ID.

Nemesis is the "worst rival" counterpart to "best friend". The French loc Paradox use are:
Code:
\localization\french\game_concepts_l_french.yml

game_concept_nemesis:0 "Ennemi juré"
game_concept_nemesis_possessive:0 "Nemesis'"
game_concept_nemesis_possessive:0 "Nemesis'"

I'm not sure where you got "gretson" from? I noticed that I made a mistake in the:
Code:
 msg_war_declared_by_grandson:0 "Your Son Attacks"
It should be "Your Grandson Attacks". I'll correct it for the next update.

Yeah I can see why replace all would run into trouble with changing the keys. If you use Notepad++ you could try ticking the "Match whole word only" box so it will not change the words inside the keys. So replacing "son" will only replace the "son" inside the loc brackets, but not touch the "son" inside the key strings like "msg_war_declared_by_son" because the "son" there isn't a whole word.

I defer to you on the gendered adjectives. Happy to go with whatever you think is best. Many of the family locs are tested for gender (uncle/aunt, son/daughter, father/mother, husband/wife etc.) but for the rest they could be any gender.

Thanks for the loc mate, happy to include them.
 
  • 1Like
Reactions:
Ok, i was able to make the first step and now the english definitions are used ingame instead of the script gibberish.
I made the mistake and saved the files, where i has just changed "english" to "german", via windows integrated wordpad instead of notepad++.

Now that this problem is figured out i will try to find some time to make a proper translation.
Look forward to including it mate. Yeah Notepad++ is the way to go.
 
One other thing, if your testing your loc in the game check the "error.log" afterwords in 'My Documents\Paradox Interactive\Crusader Kings III\logs'. It will display any coding mistakes, like if you've accidently changed a key or missed a quotation mark. If the error.log is too big to manually scan, run a "find all in current document" search for "war_alerts" and if there's any they'll show up.
 
  • 1Like
Reactions:
On another subject, I saw we can have like 3 notifications for the same character. If this one is house member + pinned + father for example.

Any chance you can handle this small issue?
 
On another subject, I saw we can have like 3 notifications for the same character. If this one is house member + pinned + father for example.

Any chance you can handle this small issue?
I've tried to exclude most duplicate notifications and also provide redundency for the different notification choices. Did you see House Member and Father both come up for the same character? That should be restricted.

The other source of duplicates is the house/dynasty member attack eachother, one notice for the attacker and another notice for the defender. One thought is that you should get two notices so you know it's also a relation that's getting attacked, I can have another look at how to do something similar to the "Vassals Attack Eachother" notification when both sides are characters who would trigger a notification based on the players choices.

My first thought with Pinned characters was to let them duplicate as a double notice, because if they're pinned they're special to the player and I don't want the pinned notificaiton to be lost and be just another "vassal" or "dynasty member". I'll have another look at expanding the pinned alerts so they feature custom loc based on their relation to the player that also stops the second notification under the other options.
 
  • 1Like
Reactions:
It was just an example; I'll check if I see something weird according to your explanations. It will be more practical with the French version héhé

Thanks!
 
  • 1Like
Reactions: