v50 Steam/Premium information for editors
- v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
- Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.
User:Andux/Scripts
Jump to navigation
Jump to search
A collection of scripts for DFHack.
Fortress mode
Name generator
Based on Aerval's; changes:
- Expanded selection of name parts.
- Uses the world's name seed instead of the dwarf race index.
- Better handling of historical figures.
--Nameparts by http://jtevans.kilnar.com/rpg/dnd/tools/dwarf.php, Aerval, and Andux
local firstnamepart = {
"ad", "ak", "an", "ar", "ash", "at",
"ba", "bal", "bar", "bel", "ber", "bil", "bof", "bol", "bro", "bul",
"cal", "chal",
"da", "das", "dal", "dim", "dor", "dru", "dur", "dwe", "dwin",
"el",
"fal", "far", "fash", "fel", "fim", "ful", "fun",
"gal", "gar", "ger", "gil", "gim", "gom", "gol", "gri", "gro", "gru", "grun",
"ha", "hal", "ham", "har", "hel", "her", "ho", "hol", "hor", "hul",
"ing", "in", "ir",
"kal", "kas", "ket", "kha", "khor", "kil", "kin", "ko", "kor", "kul",
"lam", "lar", "lon", "lun",
"mag", "mal", "mar", "mor", "mun",
"nal", "nar", "nil", "nor",
"ol", "or", "ov",
"rag", "ral", "ram", "rim", "ron", "run",
"sal", "sar", "shal", "shar", "shor", "sim", "sor", "stal", "stav", "sven",
"tan", "tha", "thal", "thin", "thor", "thra", "thu",
"um", "ur",
"val", "van",
"wil",
"yar",
"za", "zir", "zul"
};
local female_secondpart = {
"a", "ada", "ala", "ana", "ani", "atha",
"bari", "bina", "bine", "bura",
"cha", "chi",
"da", "dana", "dani", "dili", "dina", "dola", "dora", "dri", "dria",
"edi", "ena", "eta", "eva", "eza",
"fani", "fi",
"ga", "gana", "gari", "gela", "gina", "gini", "goli", "grima",
"i", "ia", "ida", "ila", "ilda", "ili", "ika", "ina", "iri",
"ka", "ki", "kia", "kona", "kuni",
"la", "lani", "leda", "lena", "lia", "lina", "lona",
"ma", "mani", "mela", "mina", "moda", "modi",
"na", "neva", "ni", "nia", "nomi",
"ola", "olga", "ona", "ondi", "oti", "ova",
"ra", "raka", "rana", "ravi", "ri", "ria", "rimi", "rinda", "rundi",
"sha", "shi", "si", "ska",
"ta", "tha", "ti", "tila", "tri", "tria",
"umma", "undi", "unga", "unni",
"vala", "vali", "vara", "vari", "vina",
"ya",
"zadi", "zani", "zara", "zi"
};
local male_secondpart = {
"aim", "ain", "ak", "ald", "am", "ar", "ard", "ash",
"bain", "bald", "ban", "bar", "bash", "brun", "bur",
"dain", "dall", "dar", "din", "dok", "dol", "dor", "dum", "dun", "dur",
"eff", "esh", "ev",
"far", "fath", "feb",
"gan", "gar", "gath", "gin", "gor", "grim",
"ik", "il", "im", "in", "ip", "isch",
"kad", "kar", "kash", "keld", "kesh", "kon",
"lek", "lem", "lesh", "let", "leth", "lin", "lor",
"mar", "mek", "min", "mok", "mon", "moth", "mund",
"nar", "nek", "nir", "nod", "nor",
"od", "oin", "ok", "old", "on", "ond", "or",
"rak", "ram", "rik", "rim", "rin", "ros", "roth", "rund",
"skal", "skar",
"tar", "tek", "til", "tok", "tul",
"um", "und", "unn", "ur", "urd",
"val", "van", "var", "vath", "vek", "ven", "vesh", "veth", "vin", "von",
"zad", "zar", "zek", "zim", "zin"
};
local dwarfRace = df.global.ui.race_id;
math.randomseed(tonumber(df.global.world.worldgen.worldgen_parms.name_seed,36));
for index,unit in pairs(df.global.world.history.figures) do --Renaming all the historical dwarves
if ( unit.race == dwarfRace ) then
if (unit.sex ~= 0) then
unit.name.first_name = firstnamepart[math.random(#firstnamepart)]..male_secondpart[math.random(#male_secondpart)];
else
unit.name.first_name = firstnamepart[math.random(#firstnamepart)]..female_secondpart[math.random(#female_secondpart)];
end
end
end
for index,unit in pairs(df.global.world.units.all) do --Renaming pretty much everyone else
if ( unit.race == dwarfRace ) then
if unit.flags1.important_historical_figure or unit.flags2.important_historical_figure then
--Use the same name as the histfig data
unit.name.first_name = df.global.world.history.figures[unit.hist_figure_id].name.first_name;
else
if (unit.sex ~= 0) then
unit.name.first_name = firstnamepart[math.random(#firstnamepart)]..male_secondpart[math.random(#male_secondpart)];
else
unit.name.first_name = firstnamepart[math.random(#firstnamepart)]..female_secondpart[math.random(#female_secondpart)];
end
end
end
end
print("firstnamepart: "..#firstnamepart.."\nfemale: "..#female_secondpart.."\nmale: "..#male_secondpart);
Adventure mode
Item material changer
Roughly equivalent to changeitem m, but works better in adventure mode.
local r=nil
local top=dfhack.gui.getCurViewscreen()
print(top.parent,top)
local cvstype=dfhack.gui.getFocusString(top)
print(dfhack.gui.getFocusString(top.parent).."/"..cvstype)
if cvstype=="dungeon_monsterstatus" then
print(" inventory size: "..#top.inventory)
print(" inventory_cursor: "..top.inventory_cursor)
r=top.inventory[top.inventory_cursor].item
elseif cvstype=="item" then
-- override getSelectedItem()'s default behaviour for containers
r=top.item
else
r=dfhack.gui.getSelectedItem()
end
if r then
local m=...
if not m then
print("no material")
return
end
r.mat_type=dfhack.matinfo.find(m).type
r.mat_index=dfhack.matinfo.find(m).index
r.flags.weight_computed=0
printall(r)
end
Urbanizer
Converts all forest retreats to visitable towns.
for k,v in pairs(df.global.world.world_data.sites) do
if v.type==4 then
v.type=5
print('Site #'..k..': '..dfhack.TranslateName(v.name)..', "'..dfhack.TranslateName(v.name,1)..'", converted to town.')
end
end
General
HealUnit
Repairs all health issues except for syndromes and severed limbs.
local unit=dfhack.gui.getSelectedUnit()
if unit then
print("Erasing wounds...")
while #unit.body.wounds > 0 do
unit.body.wounds:erase(#unit.body.wounds-1)
end
unit.body.wound_next_id=1
print("Refilling blood...")
unit.body.blood_count=unit.body.blood_max
print("Resetting status flags...")
unit.status2.able_stand_impair=unit.status2.able_stand
unit.status2.able_grasp_impair=unit.status2.able_grasp
unit.flags2.has_breaks=false
unit.flags2.gutted=false
unit.flags2.circulatory_spray=false
unit.flags2.vision_good=true
unit.flags2.vision_damaged=false
unit.flags2.vision_missing=false
unit.flags2.breathing_good=true
unit.flags2.breathing_problem=false
unit.flags2.calculated_nerves=false
unit.flags2.calculated_bodyparts=false
print("Resetting counters...")
unit.counters.winded=0
unit.counters.stunned=0
unit.counters.unconscious=0
unit.counters.webbed=0
unit.counters.pain=0
unit.counters.nausea=0
unit.counters.dizziness=0
unit.counters2.paralysis=0
unit.counters2.fever=0
unit.counters2.exhaustion=0
unit.counters2.hunger_timer=0
unit.counters2.thirst_timer=0
unit.counters2.sleepiness_timer=0
unit.counters2.vomit_timeout=0
end
GoodAsNew
Removes all wear from the selected item.
local r=nil
local top=dfhack.gui.getCurViewscreen()
print(top.parent,top)
local cvstype=dfhack.gui.getFocusString(top)
print(dfhack.gui.getFocusString(top.parent).."/"..cvstype)
if cvstype=="dungeon_monsterstatus" then
print(" inventory size: "..#top.inventory)
print(" inventory_cursor: "..top.inventory_cursor)
r=top.inventory[top.inventory_cursor].item
else
r=dfhack.gui.getSelectedItem()
end
if r then
r.wear=0
r.wear_timer=0
printall(r)
end