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
|
||||
tools.menu:add("Change site type",tools.changesite)
|
||||
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("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()
|
||||
--tools.menu:add("Change site type",tools.changesite)
|
||||
--tools.menu:add("Change site flags",tools.changeflags)
|
||||
--tools.menu:add("Hostilate creature",tools.hostilate)
|
||||
--tools.menu:add("Print current mouse block",tools.mouseBlock)
|
||||
|
||||
--[[choices={
|
||||
{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]()]]--
|
||||
tools.menu:display()
|
||||
end
|
Loading…
Reference in New Issue