Merge remote-tracking branch 'peridexis/vjek-scripts' into vjek
commit
93ce64a32c
@ -0,0 +1,194 @@
|
|||||||
|
-- Adjust all attributes, personality, age and skills of all dwarves in play
|
||||||
|
-- without arguments, all attributes, age & personalities are adjusted
|
||||||
|
-- arguments allow for skills to be adjusted as well
|
||||||
|
-- WARNING: USING THIS SCRIPT WILL ADJUST ALL DWARVES IN PLAY!
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
function rejuvenate(unit)
|
||||||
|
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local current_year=df.global.cur_year
|
||||||
|
local newbirthyear=current_year - 20
|
||||||
|
if unit.relations.birth_year < newbirthyear then
|
||||||
|
unit.relations.birth_year=newbirthyear
|
||||||
|
end
|
||||||
|
if unit.relations.old_year < current_year+100 then
|
||||||
|
unit.relations.old_year=current_year+100
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function brainwash_unit(unit)
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local profile ={75,25,25,75,25,25,25,99,25,25,25,50,75,50,25,75,75,50,75,75,25,75,75,50,75,25,50,25,75,75,75,25,75,75,25,75,25,25,75,75,25,75,75,75,25,75,75,25,25,50}
|
||||||
|
local i
|
||||||
|
|
||||||
|
for i=1, #profile do
|
||||||
|
unit.status.current_soul.personality.traits[i-1]=profile[i]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function elevate_attributes(unit)
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local ok,f,t,k = pcall(pairs,unit.status.current_soul.mental_attrs)
|
||||||
|
if ok then
|
||||||
|
for k,v in f,t,k do
|
||||||
|
v.value=v.max_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local ok,f,t,k = pcall(pairs,unit.body.physical_attrs)
|
||||||
|
if ok then
|
||||||
|
for k,v in f,t,k do
|
||||||
|
v.value=v.max_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- this function will return the number of elements, starting at zero.
|
||||||
|
-- useful for counting things where #foo doesn't work
|
||||||
|
function count_this(to_be_counted)
|
||||||
|
local count = -1
|
||||||
|
local var1 = ""
|
||||||
|
while var1 ~= nil do
|
||||||
|
count = count + 1
|
||||||
|
var1 = (to_be_counted[count])
|
||||||
|
end
|
||||||
|
count=count-1
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function make_legendary(skillname,unit)
|
||||||
|
local skillnamenoun,skillnum
|
||||||
|
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if (df.job_skill[skillname]) then
|
||||||
|
skillnamenoun = df.job_skill.attrs[df.job_skill[skillname]].caption_noun
|
||||||
|
else
|
||||||
|
print ("The skill name provided is not in the list.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if skillnamenoun ~= nil then
|
||||||
|
utils = require 'utils'
|
||||||
|
skillnum = df.job_skill[skillname]
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = skillnum, rating = 20 }, 'id')
|
||||||
|
print (unit.name.first_name.." is now a Legendary "..skillnamenoun)
|
||||||
|
else
|
||||||
|
print ("Empty skill name noun, bailing out!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function BreathOfArmok(unit)
|
||||||
|
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local i
|
||||||
|
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
utils = require 'utils'
|
||||||
|
for i=0, count_max do
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = i, rating = 20 }, 'id')
|
||||||
|
end
|
||||||
|
print ("The breath of Armok has engulfed "..unit.name.first_name)
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function LegendaryByClass(skilltype,v)
|
||||||
|
unit=v
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
utils = require 'utils'
|
||||||
|
local i
|
||||||
|
local skillclass
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
for i=0, count_max do
|
||||||
|
skillclass = df.job_skill_class[df.job_skill.attrs[i].type]
|
||||||
|
if skilltype == skillclass then
|
||||||
|
print ("Skill "..df.job_skill.attrs[i].caption.." is type: "..skillclass.." and is now Legendary for "..unit.name.first_name)
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = i, rating = 20 }, 'id')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function PrintSkillList()
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
local i
|
||||||
|
for i=0, count_max do
|
||||||
|
print("'"..df.job_skill.attrs[i].caption.."' "..df.job_skill[i].." Type: "..df.job_skill_class[df.job_skill.attrs[i].type])
|
||||||
|
end
|
||||||
|
print ("Provide the UPPER CASE argument, for example: PROCESSPLANTS rather than Threshing")
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function PrintSkillClassList()
|
||||||
|
local i
|
||||||
|
local count_max = count_this(df.job_skill_class)
|
||||||
|
for i=0, count_max do
|
||||||
|
print(df.job_skill_class[i])
|
||||||
|
end
|
||||||
|
print ("Provide one of these arguments, and all skills of that type will be made Legendary")
|
||||||
|
print ("For example: Medical will make all medical skills legendary")
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function adjust_all_dwarves(skillname)
|
||||||
|
for _,v in ipairs(df.global.world.units.all) do
|
||||||
|
if v.race == df.global.ui.race_id then
|
||||||
|
print("Adjusting "..dfhack.TranslateName(dfhack.units.getVisibleName(v)))
|
||||||
|
brainwash_unit(v)
|
||||||
|
elevate_attributes(v)
|
||||||
|
rejuvenate(v)
|
||||||
|
if skillname then
|
||||||
|
if skillname=="Normal" or skillname=="Medical" or skillname=="Personal" or skillname=="Social" or skillname=="Cultural" or skillname=="MilitaryWeapon" or skillname=="MilitaryAttack" or skillname=="MilitaryDefense" or skillname=="MilitaryMisc" then
|
||||||
|
LegendaryByClass(skillname,v)
|
||||||
|
elseif skillname=="all" then
|
||||||
|
BreathOfArmok(v)
|
||||||
|
else
|
||||||
|
make_legendary(skillname,v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- main script operation starts here
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
local opt = ...
|
||||||
|
local skillname
|
||||||
|
|
||||||
|
if opt then
|
||||||
|
if opt=="list" then
|
||||||
|
PrintSkillList()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="classes" then
|
||||||
|
PrintSkillClassList()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
skillname = opt
|
||||||
|
else
|
||||||
|
print ("No skillname supplied, no skills will be adjusted. Pass argument 'list' to see a skill list, 'classes' to show skill classes, or use 'all' if you want all skills legendary.")
|
||||||
|
end
|
||||||
|
|
||||||
|
adjust_all_dwarves(skillname)
|
@ -0,0 +1,61 @@
|
|||||||
|
-- This script will brainwash a dwarf, modifying their personality
|
||||||
|
-- usage is: target a unit in DF, and execute this script in dfhack
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
function brainwash_unit(profile)
|
||||||
|
local i,unit_name
|
||||||
|
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
unit_name=dfhack.TranslateName(dfhack.units.getVisibleName(unit))
|
||||||
|
|
||||||
|
print("Previous personality values for "..unit_name)
|
||||||
|
printall(unit.status.current_soul.personality.traits)
|
||||||
|
|
||||||
|
--now set new personality
|
||||||
|
for i=1, #profile do
|
||||||
|
unit.status.current_soul.personality.traits[i-1]=profile[i]
|
||||||
|
end
|
||||||
|
|
||||||
|
print("New personality values for "..unit_name)
|
||||||
|
printall(unit.status.current_soul.personality.traits)
|
||||||
|
print(unit_name.." has been brainwashed, praise Armok!")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- main script starts here
|
||||||
|
-- profiles are listed here and passed to the brainwash function
|
||||||
|
--
|
||||||
|
local baseline={50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50}
|
||||||
|
local ideal={75,25,25,75,25,25,25,99,25,25,25,50,75,50,25,75,75,50,75,75,25,75,75,50,75,25,50,25,75,75,75,25,75,75,25,75,25,25,75,75,25,75,75,75,25,75,75,25,25,50}
|
||||||
|
local stepford={99,1,1,99,1,1,1,99,1,1,1,1,50,50,1,99,99,50,50,50,1,1,99,50,50,50,50,50,50,99,50,1,1,99,1,99,1,1,99,99,1,99,99,99,1,50,50,1,1,1}
|
||||||
|
local wrecked={1,99,99,1,99,99,99,1,99,99,99,1,1,99,99,1,1,1,1,1,99,1,1,99,1,99,99,99,1,1,1,99,1,1,99,1,99,99,1,1,99,1,1,1,99,1,1,99,99,99}
|
||||||
|
local opt = ...
|
||||||
|
|
||||||
|
if opt then
|
||||||
|
if opt=="ideal" then
|
||||||
|
brainwash_unit(ideal)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="baseline" then
|
||||||
|
brainwash_unit(baseline)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="stepford" then
|
||||||
|
brainwash_unit(stepford)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="wrecked" then
|
||||||
|
brainwash_unit(wrecked)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print ("Invalid or missing personality argument.\nValid choices are ideal , baseline , stepford, and wrecked.")
|
||||||
|
print ("ideal will create a reliable dwarf with generally positive personality traits.")
|
||||||
|
print ("baseline will reset all personality traits to a default / the average.")
|
||||||
|
print ("stepford amplifies all good qualities to an excessive degree.")
|
||||||
|
print ("wrecked amplifies all bad qualities to an excessive degree.")
|
||||||
|
end
|
@ -0,0 +1,45 @@
|
|||||||
|
-- This script will elevate all the mental attributes of a unit
|
||||||
|
-- usage is: target a unit in DF, and execute this script in dfhack
|
||||||
|
-- all physical attributes will be set to whatever the max value is
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
function ElevateMentalAttributes(value)
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
--print name of dwarf
|
||||||
|
print("Adjusting "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)))
|
||||||
|
--walk through available attributes, adjust current to max
|
||||||
|
local ok,f,t,k = pcall(pairs,unit.status.current_soul.mental_attrs)
|
||||||
|
if ok then
|
||||||
|
for k,v in f,t,k do
|
||||||
|
if value ~= nil then
|
||||||
|
print("Adjusting current value for "..tostring(k).." of "..v.value.." to the value of "..value)
|
||||||
|
v.value=value
|
||||||
|
else
|
||||||
|
print("Adjusting current value for "..tostring(k).." of "..v.value.." to max value of "..v.max_value)
|
||||||
|
v.value=v.max_value
|
||||||
|
--below will reset values back to "normal"
|
||||||
|
--v.value=v.max_value/2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--script execution starts here
|
||||||
|
local opt = ...
|
||||||
|
opt = tonumber(opt)
|
||||||
|
|
||||||
|
if opt ~= nil then
|
||||||
|
if opt >=0 and opt <=5000 then
|
||||||
|
ElevateMentalAttributes(opt)
|
||||||
|
end
|
||||||
|
if opt <0 or opt >5000 then
|
||||||
|
print("Invalid Range or argument. This script accepts either no argument, in which case it will increase the attribute to the max_value for the unit, or an argument between 0 and 5000, which will set all attributes to that value.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if opt == nil then
|
||||||
|
ElevateMentalAttributes()
|
||||||
|
end
|
@ -0,0 +1,45 @@
|
|||||||
|
-- This script will elevate all the physical attributes of a unit
|
||||||
|
-- usage is: target a unit in DF, and execute this script in dfhack
|
||||||
|
-- all physical attributes will be set to whatever the max value is
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
function ElevatePhysicalAttributes(value)
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
--print name of dwarf
|
||||||
|
print("Adjusting "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)))
|
||||||
|
--walk through available attributes, adjust current to max
|
||||||
|
local ok,f,t,k = pcall(pairs,unit.body.physical_attrs)
|
||||||
|
if ok then
|
||||||
|
for k,v in f,t,k do
|
||||||
|
if value ~= nil then
|
||||||
|
print("Adjusting current value for "..tostring(k).." of "..v.value.." to the value of "..value)
|
||||||
|
v.value=value
|
||||||
|
else
|
||||||
|
print("Adjusting current value for "..tostring(k).." of "..v.value.." to max value of "..v.max_value)
|
||||||
|
v.value=v.max_value
|
||||||
|
--below will reset values back to "normal"
|
||||||
|
--v.value=v.max_value/2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--script execution starts here
|
||||||
|
local opt = ...
|
||||||
|
opt = tonumber(opt)
|
||||||
|
|
||||||
|
if opt ~= nil then
|
||||||
|
if opt >=0 and opt <=5000 then
|
||||||
|
ElevatePhysicalAttributes(opt)
|
||||||
|
end
|
||||||
|
if opt <0 or opt >5000 then
|
||||||
|
print("Invalid Range or argument. This script accepts either no argument, in which case it will increase the attribute to the max_value for the unit, or an argument between 0 and 5000, which will set all attributes to that value.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if opt == nil then
|
||||||
|
ElevatePhysicalAttributes()
|
||||||
|
end
|
@ -0,0 +1,130 @@
|
|||||||
|
-- This script will modify a skill or the skills of a single unit
|
||||||
|
-- usage is: target a unit in DF, and execute this script in dfhack
|
||||||
|
-- the skill will be increased to 20 (Legendary +5)
|
||||||
|
-- arguments 'list', 'classes' and 'all' added
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
-- this function will return the number of elements, starting at zero.
|
||||||
|
-- useful for counting things where #foo doesn't work
|
||||||
|
function count_this(to_be_counted)
|
||||||
|
local count = -1
|
||||||
|
local var1 = ""
|
||||||
|
while var1 ~= nil do
|
||||||
|
count = count + 1
|
||||||
|
var1 = (to_be_counted[count])
|
||||||
|
end
|
||||||
|
count=count-1
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
|
function make_legendary(skillname)
|
||||||
|
local skillnamenoun,skillnum
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if (df.job_skill[skillname]) then
|
||||||
|
skillnamenoun = df.job_skill.attrs[df.job_skill[skillname]].caption_noun
|
||||||
|
else
|
||||||
|
print ("The skill name provided is not in the list.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if skillnamenoun ~= nil then
|
||||||
|
utils = require 'utils'
|
||||||
|
skillnum = df.job_skill[skillname]
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = skillnum, rating = 20 }, 'id')
|
||||||
|
print (dfhack.TranslateName(dfhack.units.getVisibleName(unit)).." is now a Legendary "..skillnamenoun)
|
||||||
|
else
|
||||||
|
print ("Empty skill name noun, bailing out!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PrintSkillList()
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
local i
|
||||||
|
for i=0, count_max do
|
||||||
|
print("'"..df.job_skill.attrs[i].caption.."' "..df.job_skill[i].." Type: "..df.job_skill_class[df.job_skill.attrs[i].type])
|
||||||
|
end
|
||||||
|
print ("Provide the UPPER CASE argument, for example: PROCESSPLANTS rather than Threshing")
|
||||||
|
end
|
||||||
|
|
||||||
|
function BreathOfArmok()
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local i
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
utils = require 'utils'
|
||||||
|
for i=0, count_max do
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = i, rating = 20 }, 'id')
|
||||||
|
end
|
||||||
|
print ("The breath of Armok has engulfed "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)))
|
||||||
|
end
|
||||||
|
|
||||||
|
function LegendaryByClass(skilltype)
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit under cursor! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
utils = require 'utils'
|
||||||
|
local i
|
||||||
|
local skillclass
|
||||||
|
local count_max = count_this(df.job_skill)
|
||||||
|
for i=0, count_max do
|
||||||
|
skillclass = df.job_skill_class[df.job_skill.attrs[i].type]
|
||||||
|
if skilltype == skillclass then
|
||||||
|
print ("Skill "..df.job_skill.attrs[i].caption.." is type: "..skillclass.." and is now Legendary for "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)))
|
||||||
|
utils.insert_or_update(unit.status.current_soul.skills, { new = true, id = i, rating = 20 }, 'id')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PrintSkillClassList()
|
||||||
|
local i
|
||||||
|
local count_max = count_this(df.job_skill_class)
|
||||||
|
for i=0, count_max do
|
||||||
|
print(df.job_skill_class[i])
|
||||||
|
end
|
||||||
|
print ("Provide one of these arguments, and all skills of that type will be made Legendary")
|
||||||
|
print ("For example: Medical will make all medical skills legendary")
|
||||||
|
end
|
||||||
|
|
||||||
|
--main script operation starts here
|
||||||
|
----
|
||||||
|
local opt = ...
|
||||||
|
local skillname
|
||||||
|
|
||||||
|
if opt then
|
||||||
|
if opt=="list" then
|
||||||
|
PrintSkillList()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="classes" then
|
||||||
|
PrintSkillClassList()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="all" then
|
||||||
|
BreathOfArmok()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if opt=="Normal" or opt=="Medical" or opt=="Personal" or opt=="Social" or opt=="Cultural" or opt=="MilitaryWeapon" or opt=="MilitaryAttack" or opt=="MilitaryDefense" or opt=="MilitaryMisc" then
|
||||||
|
LegendaryByClass(opt)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
skillname = opt
|
||||||
|
else
|
||||||
|
print ("No skillname supplied.\nUse argument 'list' to see a list, 'classes' to show skill classes, or use 'all' if you want it all!")
|
||||||
|
print ("Example: To make a legendary miner, use make_legendary MINING")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
make_legendary(skillname)
|
@ -0,0 +1,92 @@
|
|||||||
|
-- Adjust all preferences of all dwarves in play
|
||||||
|
-- all preferences are cleared, then set
|
||||||
|
-- WARNING: USING THIS SCRIPT WILL ADJUST ALL DWARVES IN PLAY!
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function brainwash_unit(unit)
|
||||||
|
|
||||||
|
if unit==nil then
|
||||||
|
print ("No unit available! Aborting with extreme prejudice.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local pss_counter=31415926
|
||||||
|
|
||||||
|
local prefcount = #(unit.status.current_soul.preferences)
|
||||||
|
print ("Before, unit "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)).." has "..prefcount.." preferences")
|
||||||
|
|
||||||
|
utils = require 'utils'
|
||||||
|
-- below populates an array with all creature names and id's, used for 'detests...'
|
||||||
|
rtbl={}
|
||||||
|
vec=df.global.world.raws.creatures.all
|
||||||
|
for k=0,#vec-1 do
|
||||||
|
local name=vec[k].creature_id
|
||||||
|
rtbl[name]=k
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Now iterate through for the type 3 detests...
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 3 , item_type = rtbl.TROLL , creature_id = rtbl.TROLL , color_id = rtbl.TROLL , shape_id = rtbl.TROLL , plant_id = rtbl.TROLL , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 3 , item_type = rtbl.BIRD_BUZZARD , creature_id = rtbl.BIRD_BUZZARD , color_id = rtbl.BIRD_BUZZARD , shape_id = rtbl.BIRD_BUZZARD , plant_id = rtbl.BIRD_BUZZARD , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 3 , item_type = rtbl.BIRD_VULTURE , creature_id = rtbl.BIRD_VULTURE , color_id = rtbl.BIRD_VULTURE , shape_id = rtbl.BIRD_VULTURE , plant_id = rtbl.BIRD_VULTURE , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 3 , item_type = rtbl.CRUNDLE , creature_id = rtbl.CRUNDLE , color_id = rtbl.CRUNDLE , shape_id = rtbl.CRUNDLE , plant_id = rtbl.CRUNDLE , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
-- and the type 4 likes
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 4 , item_type = df.item_type.WEAPON , creature_id = df.item_type.WEAPON , color_id = df.item_type.WEAPON , shape_id = df.item_type.WEAPON , plant_id = df.item_type.WEAPON , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 4 , item_type = df.item_type.ARMOR , creature_id = df.item_type.ARMOR , color_id = df.item_type.ARMOR , shape_id = df.item_type.ARMOR , plant_id = df.item_type.ARMOR , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 4 , item_type = df.item_type.SHIELD , creature_id = df.item_type.SHIELD , color_id = df.item_type.SHIELD , shape_id = df.item_type.SHIELD , plant_id = df.item_type.SHIELD , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
-- prefers plump helmets for their ...
|
||||||
|
local ph_mat_type=dfhack.matinfo.find("MUSHROOM_HELMET_PLUMP:STRUCTURAL").index
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 5 , item_type = ph_mat_type , creature_id = ph_mat_type , color_id = ph_mat_type , shape_id = ph_mat_type , plant_id = ph_mat_type , item_subtype = -1 , mattype = -1 , matindex = -1 , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
-- prefers to consume dwarven wine:
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 2 , item_type = 68 , creature_id = 68 , color_id = 68 , shape_id = 68 , plant_id = 68 , item_subtype = -1 , mattype = dfhack.matinfo.find("MUSHROOM_HELMET_PLUMP:DRINK").type , matindex = dfhack.matinfo.find("MUSHROOM_HELMET_PLUMP:DRINK").index , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
-- likes iron, steel (0,8) adam is 25
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 0 , item_type = -1 , creature_id = -1 , color_id = -1 , shape_id = -1 , plant_id = -1 , item_subtype = -1 , mattype = 0 , matindex = dfhack.matinfo.find("IRON").index , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
pss_counter = pss_counter + 1
|
||||||
|
utils.insert_or_update(unit.status.current_soul.preferences, { new = true, type = 0 , item_type = -1 , creature_id = -1 , color_id = -1 , shape_id = -1 , plant_id = -1 , item_subtype = -1 , mattype = 0 , matindex = dfhack.matinfo.find("STEEL").index , active = true, prefstring_seed = pss_counter }, 'prefstring_seed')
|
||||||
|
|
||||||
|
prefcount = #(unit.status.current_soul.preferences)
|
||||||
|
print ("After, unit "..dfhack.TranslateName(dfhack.units.getVisibleName(unit)).." has "..prefcount.." preferences")
|
||||||
|
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function clear_preferences(v)
|
||||||
|
unit=v
|
||||||
|
|
||||||
|
local prefs=unit.status.current_soul.preferences
|
||||||
|
for index,pref in ipairs(prefs) do
|
||||||
|
pref:delete()
|
||||||
|
end
|
||||||
|
prefs:resize(0)
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function clearpref_all_dwarves()
|
||||||
|
for _,v in ipairs(df.global.world.units.active) do
|
||||||
|
if v.race == df.global.ui.race_id then
|
||||||
|
print("Clearing Preferences for "..dfhack.TranslateName(dfhack.units.getVisibleName(v)))
|
||||||
|
clear_preferences(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
function adjust_all_dwarves()
|
||||||
|
for _,v in ipairs(df.global.world.units.active) do
|
||||||
|
if v.race == df.global.ui.race_id then
|
||||||
|
print("Adjusting "..dfhack.TranslateName(dfhack.units.getVisibleName(v)))
|
||||||
|
brainwash_unit(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
-- main script operation starts here
|
||||||
|
-- ---------------------------------------------------------------------------
|
||||||
|
clearpref_all_dwarves()
|
||||||
|
adjust_all_dwarves()
|
@ -0,0 +1,24 @@
|
|||||||
|
-- This script will make any "old" dwarf 20 years old
|
||||||
|
-- usage is: target a unit in DF, and execute this script in dfhack
|
||||||
|
-- the target will be changed to 20 years old
|
||||||
|
-- by vjek
|
||||||
|
|
||||||
|
function rejuvenate()
|
||||||
|
local current_year,newbirthyear
|
||||||
|
unit=dfhack.gui.getSelectedUnit()
|
||||||
|
|
||||||
|
if unit==nil then print ("No unit under cursor! Aborting.") return end
|
||||||
|
|
||||||
|
current_year=df.global.cur_year
|
||||||
|
newbirthyear=current_year - 20
|
||||||
|
if unit.relations.birth_year < newbirthyear then
|
||||||
|
unit.relations.birth_year=newbirthyear
|
||||||
|
end
|
||||||
|
if unit.relations.old_year < current_year+100 then
|
||||||
|
unit.relations.old_year=current_year+100
|
||||||
|
end
|
||||||
|
print (dfhack.TranslateName(dfhack.units.getVisibleName(unit)).." is now 20 years old and will live at least 100 years")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
rejuvenate()
|
Loading…
Reference in New Issue