52 lines
1.5 KiB
Lua
52 lines
1.5 KiB
Lua
local _ENV = mkmodule('plugins.dfusion.adv_tools')
|
|
local dfu=require("plugins.dfusion")
|
|
menu=dfu.SimpleMenu()
|
|
function Reincarnate(trg_unit,swap_soul) --only for adventurer i guess
|
|
if swap_soul==nil then
|
|
swap_soul=true
|
|
end
|
|
local adv=trg_unit or df.global.world.units.active[0]
|
|
if adv.flags1.dead==false then
|
|
qerror("You are not dead (yet)!")
|
|
end
|
|
local hist_fig=getNemesis(adv).figure
|
|
if hist_fig==nil then
|
|
qerror("No historical figure for adventurer...")
|
|
end
|
|
local events=df.global.world.history.events
|
|
local trg_hist_fig
|
|
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
|
|
--print("Is same id:"..i)
|
|
trg_hist_fig=events[i].slayer
|
|
if trg_hist_fig then
|
|
trg_hist_fig=df.historical_figure.find(trg_hist_fig)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if trg_hist_fig ==nil then
|
|
qerror("Slayer not found")
|
|
end
|
|
|
|
local trg_unit=trg_hist_fig.unit_id
|
|
if trg_unit==nil then
|
|
qerror("Unit id not found!")
|
|
end
|
|
local trg_unit_final=df.unit.find(trg_unit)
|
|
|
|
tools.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
|
|
adv.status.souls:resize(0)
|
|
trg_unit_final.status.current_soul=t_soul
|
|
trg_unit_final.status.souls:insert(#trg_unit_final.status.souls,t_soul)
|
|
end
|
|
end
|
|
menu:add("Reincarnate",Reincarnate,{{df.unit,"optional"}})-- bool, optional
|
|
|
|
return _ENV |