diff options
| author | jj | 2012-08-11 22:25:40 +0200 |
|---|---|---|
| committer | jj | 2012-08-11 22:25:40 +0200 |
| commit | 85f1a6fa6ac2248f3d4b867c70e220fbed55c651 (patch) | |
| tree | 0b7cb574deafab1d08f6e752e4360bf14f40a41a /scripts | |
| parent | 2362bb8eea2d45352fc42c995d8aa2d0fb2b4689 (diff) | |
| download | dfhack-85f1a6fa6ac2248f3d4b867c70e220fbed55c651.tar.gz dfhack-85f1a6fa6ac2248f3d4b867c70e220fbed55c651.tar.bz2 dfhack-85f1a6fa6ac2248f3d4b867c70e220fbed55c651.tar.xz | |
add fix/loyaltycascade script
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/fix/loyaltycascade.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/scripts/fix/loyaltycascade.rb b/scripts/fix/loyaltycascade.rb new file mode 100644 index 00000000..632f8024 --- /dev/null +++ b/scripts/fix/loyaltycascade.rb @@ -0,0 +1,51 @@ +# script to fix loyalty cascade, when you order your militia to kill friendly units + +def fixunit(u) + return if u.race != df.ui.race_id or u.civ_id != df.ui.civ_id + links = u.hist_figure_tg.entity_links + fixed = false + + if i1 = links.index { |l| + l.kind_of?(DFHack::HistfigEntityLinkFormerMemberst) and + l.entity_id == df.ui.civ_id + } and i2 = links.index { |l| + l.kind_of?(DFHack::HistfigEntityLinkEnemyst) and + l.entity_id == df.ui.civ_id + } + fixed = true + i1, i2 = i2, i1 if i1 > i2 + links.delete_at i2 + links.delete_at i1 + links << DFHack::HistfigEntityLinkMemberst.cpp_new(:entity_id => df.ui.civ_id, :link_strength => 100) + df.add_announcement "fixloyalty: #{u.name} is now a member of #{df.ui.civ_tg.name} again" + end + + if i1 = links.index { |l| + l.kind_of?(DFHack::HistfigEntityLinkFormerMemberst) and + l.entity_id == df.ui.group_id + } and i2 = links.index { |l| + l.kind_of?(DFHack::HistfigEntityLinkEnemyst) and + l.entity_id == df.ui.group_id + } + fixed = true + i1, i2 = i2, i1 if i1 > i2 + links.delete_at i2 + links.delete_at i1 + links << DFHack::HistfigEntityLinkMemberst.cpp_new(:entity_id => df.ui.group_id, :link_strength => 100) + df.add_announcement "fixloyalty: #{u.name} is now a member of #{df.ui.group_tg.name} again" + end + + fixed +end + +fixed = 0 +df.unit_citizens.each { |u| + fixed += 1 if fixunit(u) +} + +if fixed > 0 + df.popup_announcement "Fixed a loyalty cascade, you should save and reload now" + puts "loyalty cascade fixed (#{fixed} dwarves), you should save and reload" +else + puts "no loyalty cascade found" +end |
