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.historical_figure.find(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...")
	-- for DFHack >= 0.34.11 r3
	unit.status2.limbs_stand_count=unit.status2.limbs_stand_max
	unit.status2.limbs_grasp_count=unit.status2.limbs_grasp_max
	-- for older versions, use these instead:
	--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