diff --git a/plugins/lua/dfusion/adv_tools.lua b/plugins/lua/dfusion/adv_tools.lua index 6e95d2117..95ace5d38 100644 --- a/plugins/lua/dfusion/adv_tools.lua +++ b/plugins/lua/dfusion/adv_tools.lua @@ -1,5 +1,6 @@ local _ENV = mkmodule('plugins.dfusion.adv_tools') local dfu=require("plugins.dfusion") +local tools=require("plugins.dfusion.tools") menu=dfu.SimpleMenu() function Reincarnate(trg_unit,swap_soul) --only for adventurer i guess if swap_soul==nil then @@ -9,7 +10,7 @@ function Reincarnate(trg_unit,swap_soul) --only for adventurer i guess if adv.flags1.dead==false then qerror("You are not dead (yet)!") end - local hist_fig=getNemesis(adv).figure + local hist_fig=dfhack.units.getNemesis(adv).figure if hist_fig==nil then qerror("No historical figure for adventurer...") end @@ -18,9 +19,9 @@ function Reincarnate(trg_unit,swap_soul) --only for adventurer i guess for i=#events-1,0,-1 do -- reverse search because almost always it will be last entry if df.history_event_hist_figure_diedst:is_instance(events[i]) then --print("is instance:"..i) - if events[i].victim==hist_fig.id then + if events[i].victim_hf==hist_fig.id then --print("Is same id:"..i) - trg_hist_fig=events[i].slayer + trg_hist_fig=events[i].slayer_hf if trg_hist_fig then trg_hist_fig=df.historical_figure.find(trg_hist_fig) end @@ -38,7 +39,7 @@ function Reincarnate(trg_unit,swap_soul) --only for adventurer i guess end local trg_unit_final=df.unit.find(trg_unit) - tools.change_adv(trg_unit_final) + change_adv(trg_unit_final) if swap_soul then --actually add a soul... t_soul=adv.status.current_soul adv.status.current_soul=df.NULL @@ -53,7 +54,7 @@ function change_adv(unit,nemesis) nemesis=true --default value is nemesis switch too. end if unit==nil then - unit=getCreatureAtPointer() + unit=dfhack.gui.getSelectedUnit()--getCreatureAtPointer() end if unit==nil then error("Invalid unit!") @@ -72,8 +73,8 @@ function change_adv(unit,nemesis) other[unit_indx]=other[0] other[0]=unit if nemesis then --basicly copied from advtools plugin... - local nem=getNemesis(unit) - local other_nem=getNemesis(other[unit_indx]) + local nem=dfhack.units.getNemesis(unit) + local other_nem=dfhack.units.getNemesis(other[unit_indx]) if other_nem then other_nem.flags[0]=false other_nem.flags[1]=true @@ -113,4 +114,59 @@ function log_pos() f:close() end menu:add("Log adventurers position",log_pos) +function addSite(x,y,rgn_max_x,rgn_min_x,rgn_max_y,rgn_min_y,civ_id,name,sitetype) + if x==nil or y==nil then + x=df.global.world.map.region_x/16 + y=df.global.world.map.region_y/16 + end + if name==nil then + name=dfhack.lineedit("Site name:")or "Hacked site" + end + if sitetype==nil then + sitetype=tonumber(dfhack.lineedit("Site type (numeric):")) or 7 + end + rgn_max_x=rgn_max_x or df.global.world.map.region_x%16 + rgn_max_y=rgn_max_y or df.global.world.map.region_y%16 + rgn_min_y=rgn_min_y or rgn_max_y + rgn_min_x=rgn_min_x or rgn_max_x + print("Region:",rgn_max_x,rgn_min_x,rgn_max_y,rgn_min_y) +--[=[ + global = pos*16 + rgn + BUT + for cities global is usually 17x17, i.e. max size + while rgn designates a small bit in the middle + for stuff like forts that formula holds exactly +]=]-- + local wd=df.global.world.world_data + local nsite=df.world_site:new() + nsite.name.first_name=name + nsite.name.has_name=true + nsite.pos:assign{x=x,y=y} + nsite.rgn_max_x=rgn_max_x + nsite.rgn_min_x=rgn_min_x + nsite.rgn_min_y=rgn_min_y + nsite.rgn_max_y=rgn_max_y + nsite.global_max_x=nsite.pos.x*16+nsite.rgn_max_x + nsite.global_min_x=nsite.pos.x*16+nsite.rgn_min_x + nsite.global_max_y=nsite.pos.y*16+nsite.rgn_max_y + nsite.global_min_y=nsite.pos.y*16+nsite.rgn_min_y + nsite.id=wd.next_site_id + nsite.civ_id=civ_id or -1 + nsite.cur_owner_id=civ_id or -1 + nsite.type=sitetype --lair = 7 + nsite.flags:resize(23) + --nsite.flags[4]=true + --nsite.flags[5]=true + --nsite.flags[6]=true + nsite.index=#wd.sites+1 + wd.sites:insert("#",nsite) + wd.next_site_id=wd.next_site_id+1 + --might not be needed... + --[[local unk130=df.world_site_unk130:new() + unk130.index=#wd.site_unk130+1 + wd.site_unk130:insert("#",unk130) + --wd.next_site_unk136_id=wd.next_site_unk136_id+1--]] + return nsite +end +menu:add("Create site at current location",addSite) return _ENV