New way of doing things!
Now using a class for menus, also no (non script) way to use bin-plugins.develop
parent
209d593f21
commit
ba071468dc
@ -1,133 +0,0 @@
|
|||||||
adv_tools= {}
|
|
||||||
adv_tools.menu=MakeMenu()
|
|
||||||
--TODO make every tool generic (work for both modes)
|
|
||||||
function adv_tools.reincarnate(swap_soul) --only for adventurer i guess
|
|
||||||
if swap_soul==nil then
|
|
||||||
swap_soul=true
|
|
||||||
end
|
|
||||||
local adv=df.global.world.units.active[0]
|
|
||||||
if adv.flags1.dead==false then
|
|
||||||
error("You are not dead (yet)!")
|
|
||||||
end
|
|
||||||
local hist_fig=getNemesis(adv).figure
|
|
||||||
if hist_fig==nil then
|
|
||||||
error("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
|
|
||||||
adv_tools.menu:add("Reincarnate",adv_tools.reincarnate)
|
|
||||||
function adv_tools.ressurect()
|
|
||||||
|
|
||||||
v2=engine.peek(vector:getval(indx),ptr_Creature.hurt1)
|
|
||||||
for i=0,v2:size()-1 do
|
|
||||||
v2:setval(i,0)
|
|
||||||
end
|
|
||||||
v2=engine.peek(vector:getval(indx),ptr_Creature.hurt2)
|
|
||||||
v2.type=DWORD
|
|
||||||
for i=0,v2:size()-1 do
|
|
||||||
v2:setval(i,0)
|
|
||||||
end
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.bloodlvl,60000) --give blood
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.bleedlvl,0) --stop some bleeding...
|
|
||||||
local flg=engine.peek(vector:getval(indx),ptr_Creature.flags)
|
|
||||||
flg:set(1,false) --ALIVE
|
|
||||||
flg:set(39,false) -- leave body yet again
|
|
||||||
flg:set(37,false) -- something todo with wounds- lets you walk again.
|
|
||||||
flg:set(58,true) -- makes them able to breathe
|
|
||||||
flg:set(61,true) -- gives them sight
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.flags,flg)
|
|
||||||
end
|
|
||||||
|
|
||||||
function adv_tools.wagonmode() --by rumrusher
|
|
||||||
--first three lines same as before (because we will need an offset of creature at location x,y,z)
|
|
||||||
myoff=offsets.getEx("AdvCreatureVec")
|
|
||||||
vector=engine.peek(myoff,ptr_vector)
|
|
||||||
indx=GetCreatureAtPos(getxyz())
|
|
||||||
--indx=0
|
|
||||||
--print(string.format("%x",vector:getval(indx)))
|
|
||||||
flg=engine.peek(vector:getval(indx),ptr_Creature.flags) --get flags
|
|
||||||
flg:set(1,false)
|
|
||||||
flg:set(74,false)
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.flags,flg)
|
|
||||||
print("To stay normal press y, else hit Enter turn Wagon mode on.")
|
|
||||||
r=io.stdin:read() -- repeat for it too work... also creature will be dead.
|
|
||||||
if r== "y" then
|
|
||||||
flg=engine.peek(vector:getval(indx),ptr_Creature.flags)
|
|
||||||
flg:set(1,false)
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.flags,flg)
|
|
||||||
else
|
|
||||||
flg=engine.peek(vector:getval(indx),ptr_Creature.flags)
|
|
||||||
flg:set(1,false)
|
|
||||||
flg:flip(74)
|
|
||||||
engine.poke(vector:getval(indx),ptr_Creature.flags,flg)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function selectall()
|
|
||||||
local retvec={} --return vector (or a list)
|
|
||||||
myoff=offsets.getEx("AdvCreatureVec")
|
|
||||||
vector=engine.peek(myoff,ptr_vector) --standart start
|
|
||||||
for i=0,vector:size()-1 do --check all creatures
|
|
||||||
local off
|
|
||||||
off=vector:getval(i)
|
|
||||||
local flags=engine.peek(off,ptr_Creature.flags)
|
|
||||||
if flags:get(1)==true then --if dead ...
|
|
||||||
table.insert(retvec,off)--... add it to return vector
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return retvec --return the "return vector" :)
|
|
||||||
end
|
|
||||||
function adv_tools.hostilate()
|
|
||||||
vector=engine.peek(offsets.getEx("AdvCreatureVec"),ptr_vector)
|
|
||||||
id=GetCreatureAtPos(getxyz())
|
|
||||||
print(string.format("Vec:%d cr:%d",vector:size(),id))
|
|
||||||
off=vector:getval(id)
|
|
||||||
crciv=engine.peek(vector:getval(id),ptr_Creature.civ)
|
|
||||||
curciv=engine.peek(vector:getval(0),ptr_Creature.civ)
|
|
||||||
|
|
||||||
if curciv==crciv then
|
|
||||||
print("Friendly-making enemy")
|
|
||||||
engine.poke(off,ptr_Creature.civ,-1)
|
|
||||||
flg=engine.peek(off,ptr_Creature.flags)
|
|
||||||
flg:set(17,true)
|
|
||||||
engine.poke(off,ptr_Creature.flags,flg)
|
|
||||||
else
|
|
||||||
print("Enemy- making friendly")
|
|
||||||
engine.poke(off,ptr_Creature.civ,curciv)
|
|
||||||
flg=engine.peek(off,ptr_Creature.flags)
|
|
||||||
flg:set(17,false)
|
|
||||||
flg:set(19,false)
|
|
||||||
engine.poke(off,ptr_Creature.flags,flg)
|
|
||||||
end
|
|
||||||
end
|
|
@ -0,0 +1,52 @@
|
|||||||
|
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
|
@ -1,42 +1,11 @@
|
|||||||
-- a binary hack/plugin collection for df
|
-- a collection of misc lua scripts
|
||||||
local dfu=require("plugins.dfusion")
|
local dfu=require("plugins.dfusion")
|
||||||
local myos=dfhack.getOSType()
|
local myos=dfhack.getOSType()
|
||||||
|
args={...}
|
||||||
--some imports go here
|
mainmenu=dfu.SimpleMenu()
|
||||||
local plugins={
|
function runsave()
|
||||||
require("plugins.dfusion.embark").CustomEmbark
|
print("doing file:"..df.global.world.cur_savegame.save_dir)
|
||||||
}
|
end
|
||||||
--show a table of all the statuses
|
mainmenu:add("Run save script",runsave)
|
||||||
function status(plug)
|
mainmenu:add("Adventurer tools",require("plugins.dfusion.adv_tools").menu)
|
||||||
if dfu.plugins[plug.name]==nil then
|
mainmenu:display()
|
||||||
return plug.class_status
|
|
||||||
else
|
|
||||||
return dfu.plugins[plug.name]:status()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function printPlugs()
|
|
||||||
local endthis=false
|
|
||||||
print("current:")
|
|
||||||
while(not endthis) do
|
|
||||||
for k,v in pairs(plugins) do
|
|
||||||
if v then
|
|
||||||
print(string.format("%2d. %15s-%s",k,v.name,status(v)))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
print("e-edit and load, u-unload,c-cancel and then number to manipulate:")
|
|
||||||
local choice=io.stdin:read()
|
|
||||||
local num=tonumber(io.stdin:read())
|
|
||||||
if num then
|
|
||||||
local plg=dfu.plugins[plugins[num].name] or plugins[num]()
|
|
||||||
if choice=='e' then
|
|
||||||
plg:edit()
|
|
||||||
elseif choice=='u' then
|
|
||||||
plg:uninstall()
|
|
||||||
elseif choice=='c' then
|
|
||||||
endthis=true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
printPlugs()
|
|
Loading…
Reference in New Issue