tools updated (not fully), added editor( edit everything in df)
parent
77738085e2
commit
086ce16f0f
@ -0,0 +1,145 @@
|
|||||||
|
function getTypename(object)
|
||||||
|
local tbl
|
||||||
|
local ret={}
|
||||||
|
if getmetatable(object)~=nil then
|
||||||
|
local tbl=getmetatable(object)
|
||||||
|
for k,v in pairs(xtypes) do
|
||||||
|
if v==tbl then
|
||||||
|
return k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for k,v in pairs(xtypes.containers) do
|
||||||
|
if v==tbl then
|
||||||
|
return k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if object.name~= nil then
|
||||||
|
return object.name
|
||||||
|
end
|
||||||
|
return "?"
|
||||||
|
end
|
||||||
|
function getFields(object)
|
||||||
|
local tbl
|
||||||
|
local ret={}
|
||||||
|
if getmetatable(object)==xtypes["struct-type"].wrap then
|
||||||
|
tbl=rawget(object,"mtype")
|
||||||
|
elseif getmetatable(object)==xtypes["struct-type"] then
|
||||||
|
tbl=object
|
||||||
|
else
|
||||||
|
error("Not an class_type or a class_object")
|
||||||
|
end
|
||||||
|
for k,v in pairs(tbl.types) do
|
||||||
|
table.insert(ret,{k,v[2],getTypename(v[1])})
|
||||||
|
--ret[v[2]]=k
|
||||||
|
--print(string.format("%s %x",k,v[2]))
|
||||||
|
end
|
||||||
|
table.sort(ret,function (a,b) return a[2]>b[2] end)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
function editField(tbl,field,typename)
|
||||||
|
if EditType[typename] ~= nil then
|
||||||
|
EditType[typename](tbl[field])
|
||||||
|
else
|
||||||
|
print("Cur value:"..tostring(tbl[field]))
|
||||||
|
val=getline("Enter newvalue:")
|
||||||
|
tbl[field]=val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EditType={}
|
||||||
|
EditType["df-flagarray"]=function(trg)
|
||||||
|
local fields=rawget(trg,"mtype").index.names
|
||||||
|
print("Flag count:"..trg.size)
|
||||||
|
print("Name count:"..#fields)
|
||||||
|
for i=0,#fields do
|
||||||
|
print(string.format("%3d %20s %s",i,fields[i],tostring(trg[i-1])))
|
||||||
|
end
|
||||||
|
number=getline("enter flag id to flip:")
|
||||||
|
number=tonumber(number)
|
||||||
|
if number then
|
||||||
|
trg[fields[number]]= not trg[fields[number]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EditType["enum-type"]=function(trg)
|
||||||
|
local fields=rawget(trg,"mtype").names
|
||||||
|
local typename=getTypename(rawget(trg,"mtype").etype)
|
||||||
|
for k,v in pairs(fields) do
|
||||||
|
print(string.format("%3d %s",k,v))
|
||||||
|
end
|
||||||
|
local cval=trg:get()
|
||||||
|
if fields[cval]~= nil then
|
||||||
|
print(string.format("Current value:%d (%s)",cval,fields[cval]))
|
||||||
|
else
|
||||||
|
print(string.format("Current value:%d",cval))
|
||||||
|
end
|
||||||
|
number=getline("enter new value:")
|
||||||
|
number=tonumber(number)
|
||||||
|
if number then
|
||||||
|
trg:set(number)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EditType["static-array"]=function(trg)
|
||||||
|
local item_type=rawget(trg,"mtype").item_type
|
||||||
|
local typename=getTypename(item_type)
|
||||||
|
number=getline(string.format("Select item (max %d, item-type '%s'):",trg.size,typename))
|
||||||
|
number=tonumber(number)
|
||||||
|
if number then
|
||||||
|
EditType[typename](trg[number])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EditType["stl-vector"]=EditType["static-array"]
|
||||||
|
EditType["struct-type"]=function(trg)
|
||||||
|
local mtype=rawget(trg,"mtype")
|
||||||
|
local fields=getFields(trg)
|
||||||
|
for k,v in pairs(fields) do
|
||||||
|
print(string.format("%4d %25s %s",k,v[1],v[3]))
|
||||||
|
end
|
||||||
|
number=getline("Choose field to edit:")
|
||||||
|
number=tonumber(number)
|
||||||
|
if number then
|
||||||
|
local v=fields[number]
|
||||||
|
editField(trg,v[1],v[3])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EditType["pointer"]=function(trg)
|
||||||
|
local mtype=rawget(trg,"mtype").ptype
|
||||||
|
local typename=getTypename(mtype)
|
||||||
|
print("Auto dereferencing pointer! type:"..typename)
|
||||||
|
if EditType[typename] ~= nil then
|
||||||
|
EditType[typename](trg:deref())
|
||||||
|
else
|
||||||
|
print("Cur value:"..tostring(trg:deref()))
|
||||||
|
val=getline("Enter newvalue:")
|
||||||
|
trg:setref(val)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function EditDF()
|
||||||
|
local i=1
|
||||||
|
local tbl={}
|
||||||
|
for k,v in pairs(rawget(df,"types")) do
|
||||||
|
print(string.format("%4d %25s %s",i,k,getTypename(v)))
|
||||||
|
tbl[i]={k,getTypename(v)}
|
||||||
|
i=i+1
|
||||||
|
end
|
||||||
|
number=Console.lineedit("select item to edit (q to quit):")
|
||||||
|
if number and tonumber(number) then
|
||||||
|
local entry=tbl[tonumber(number)]
|
||||||
|
if entry==nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
editField(df,entry[1],entry[2])
|
||||||
|
--[=[
|
||||||
|
if EditType[entry[2]] ~= nil then
|
||||||
|
EditType[entry[2]](df[entry[1]])
|
||||||
|
else
|
||||||
|
print("Cur value:"..tostring(df[entry[1]]))
|
||||||
|
val=getline("Enter newvalue:")
|
||||||
|
df[entry[1]]=val
|
||||||
|
end
|
||||||
|
--]=]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function EditObject(obj)
|
||||||
|
EditType[getTypename(obj)](obj)
|
||||||
|
end
|
@ -1,33 +1,8 @@
|
|||||||
--local bit = require("bit")
|
|
||||||
|
|
||||||
if not(FILE) then
|
if not(FILE) then
|
||||||
tools.menu:add("Change site type",tools.changesite)
|
--tools.menu:add("Change site type",tools.changesite)
|
||||||
tools.menu:add("Change site flags",tools.changeflags)
|
--tools.menu:add("Change site flags",tools.changeflags)
|
||||||
tools.menu:add("Run script file",tools.runscript)
|
--tools.menu:add("Hostilate creature",tools.hostilate)
|
||||||
tools.menu:add("Hostilate creature",tools.hostilate)
|
--tools.menu:add("Print current mouse block",tools.mouseBlock)
|
||||||
tools.menu:add("Protect site from item scattering",tools.protectsite)
|
|
||||||
tools.menu:add("Print current mouse block",tools.mouseBlock)
|
|
||||||
--tools.menu:add("XXX",tools.fixwarp)
|
|
||||||
tools.menu:display()
|
|
||||||
|
|
||||||
--[[choices={
|
tools.menu:display()
|
||||||
{tools.setrace,"Change race"},
|
|
||||||
{tools.GiveSentience,"Give Sentience"},
|
|
||||||
{tools.embark,"Embark anywhere"},
|
|
||||||
{tools.change_adv,"Change Adventurer"},
|
|
||||||
{tools.changesite,"Change site type"},
|
|
||||||
{tools.runscript,"Run script file"},
|
|
||||||
{tools.MakeFollow,"Make creature follow"},
|
|
||||||
{function () return end,"Quit"}}
|
|
||||||
print("Select choice:")
|
|
||||||
for p,c in pairs(choices) do
|
|
||||||
print(p..")."..c[2])
|
|
||||||
end
|
|
||||||
repeat
|
|
||||||
ans=tonumber(io.stdin:read())
|
|
||||||
if ans==nil or not(ans<=table.maxn(choices) and ans>0) then
|
|
||||||
print("incorrect choice")
|
|
||||||
end
|
|
||||||
until ans~=nil and (ans<=table.maxn(tdir) and ans>0)
|
|
||||||
choices[ans][1]()]]--
|
|
||||||
end
|
end
|
Loading…
Reference in New Issue