Merge branch 'master' of git://github.com/peterix/dfhack
commit
8665d1b195
@ -1 +1 @@
|
|||||||
Subproject commit 31e91326eb01e002f525cb48bba1cda0dab68977
|
Subproject commit 6acc7f14274343319a61d6118afdc669ee2ff485
|
@ -1,327 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
function f_dwarves()
|
|
||||||
--mov DWORD PTR [ESP+14],7
|
|
||||||
--jmp +0x08
|
|
||||||
pos_=offsets.findall(0,0x24,0x14,0x07,0,0,0) --search pattern
|
|
||||||
for _,v in pairs(pos_) do
|
|
||||||
print(string.format("Possible hit:%x",v))
|
|
||||||
end
|
|
||||||
pos=offsets.find(0,0x24,0x14,0x07,0,0,0,0xeb,0x08,0x8d) --search pattern
|
|
||||||
print(string.format("Start dwarf position:%x",pos))
|
|
||||||
if pos~=0 then
|
|
||||||
return pos+2-offsets.base();
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
offsets.new("StartDwarfs",f_dwarves) -- finds the starting dwarf count
|
|
||||||
function f_creatures()
|
|
||||||
--01C48034-base=0x1258034
|
|
||||||
local val=0
|
|
||||||
--print("Enter creature count:");
|
|
||||||
--local r=io.stdin:read()
|
|
||||||
for k,v in pairs(offsets.getvectors()) do
|
|
||||||
if (v>60) and (v<100) then --used count changed some time ago... two hits second one is the right one. Maybe some smarter way could be better?
|
|
||||||
--new version first one is right?? needs more testing thou...
|
|
||||||
val= k-offsets.base()
|
|
||||||
print(string.format("%x",val))
|
|
||||||
break;
|
|
||||||
end
|
|
||||||
--vec=engine.peek(k,ptr_vector);
|
|
||||||
|
|
||||||
--[[if(vec:size()==tonumber(r)) then
|
|
||||||
val=k-offsets.base()
|
|
||||||
print(string.format("off:%x",k))
|
|
||||||
end--]]
|
|
||||||
end
|
|
||||||
offsets.new("AdvCreatureVec",val)
|
|
||||||
return val
|
|
||||||
end
|
|
||||||
offsets.new("CreatureVec",f_creatures)
|
|
||||||
function f_words()
|
|
||||||
local val=0
|
|
||||||
for k,v in pairs(offsets.getvectors()) do
|
|
||||||
local toff=engine.peekd(engine.peekd(k))
|
|
||||||
if(engine.peekstr(toff)=="ABBEY") then
|
|
||||||
val=k-offsets.base()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return val
|
|
||||||
end
|
|
||||||
offsets.newlazy("WordVec",f_words)
|
|
||||||
function f_creatureptr() --a creature number under the pointer
|
|
||||||
pos=offsets.find(0,0xa1,ANYDWORD,0x83,0xf8,0xff,0x75)
|
|
||||||
print("Offset="..pos)
|
|
||||||
if pos~=0 then
|
|
||||||
pos=engine.peekd(pos+1)
|
|
||||||
return pos-offsets.base()
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
offsets.new("CreaturePtr",f_creatureptr)
|
|
||||||
|
|
||||||
function f_creaturegloss() --creature race vector
|
|
||||||
for k,v in pairs(offsets.getvectors()) do
|
|
||||||
local reg
|
|
||||||
reg=GetRegionIn(k)
|
|
||||||
if reg ~=nil then
|
|
||||||
print(string.format("looking into %x wich is in %s",k,reg.name or ""))
|
|
||||||
else
|
|
||||||
print(string.format("looking into %x in nil region",k))
|
|
||||||
end
|
|
||||||
if ValidOffset(k) then
|
|
||||||
print("Looking into:"..string.format("%x",k).." used:"..v)
|
|
||||||
|
|
||||||
local vec=engine.peek(k,ptr_vector)
|
|
||||||
if vec:size()>0 and vec:size()<100000 and vec:getval(0)~=0 then
|
|
||||||
local toff=vec:getval(0)
|
|
||||||
if ValidOffset(toff) then
|
|
||||||
print("\tval:"..string.format("%x",vec:getval(0)))
|
|
||||||
local token=engine.peek(toff,ptt_dfstring)
|
|
||||||
--print("\t\tval:".. token:getval())
|
|
||||||
if token:getval()=="TOAD" then -- more offsets could be found this way
|
|
||||||
return k-offsets.base()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.new("CreatureGloss",f_creaturegloss)
|
|
||||||
--reaction vec: search for TAN_A_HIDE
|
|
||||||
function f_racevec() --current race
|
|
||||||
--find all movsx anyreg,address
|
|
||||||
local den={}
|
|
||||||
local pos=offsets.findall(0,0x0f,0xbf,ANYBYTE,ADDRESS)
|
|
||||||
for k,v in pairs(pos) do
|
|
||||||
local add
|
|
||||||
if v~=0 then
|
|
||||||
add=engine.peekd(v+3)
|
|
||||||
if den[add]~=nil then
|
|
||||||
den[add]= den[add]+1
|
|
||||||
else
|
|
||||||
den[add]=1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
for k,v in pairs(den) do
|
|
||||||
if v <60 then
|
|
||||||
den[k]=nil
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
for k,v in pairs(den) do
|
|
||||||
print("Looking into:"..string.format("%x",k).." used:"..v.." Race:"..engine.peekw(k))
|
|
||||||
if engine.peekw(k) >0 and engine.peekw(k)<1000 then
|
|
||||||
|
|
||||||
return k-offsets.base()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.new("CurrentRace",f_racevec)
|
|
||||||
function f_pointer() --adventure (not only?) pointer x,y,z
|
|
||||||
print("\n")
|
|
||||||
local den={}
|
|
||||||
local pos=0
|
|
||||||
repeat
|
|
||||||
pos=offsets.find(pos+3,0x0f,0xb7,ANYBYTE,ADDRESS)
|
|
||||||
local add=engine.peekd(pos+3)
|
|
||||||
local add2=engine.peekd(pos+13)
|
|
||||||
local add3=engine.peekd(pos+23)
|
|
||||||
if( math.abs(add-add2)==4 or math.abs(add-add3)==4) then
|
|
||||||
|
|
||||||
if den[add]~=nil then
|
|
||||||
den[add]= den[add]+1
|
|
||||||
else
|
|
||||||
den[add]=1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
until pos==0
|
|
||||||
for k,v in pairs(den) do
|
|
||||||
print("Looking into:"..string.format("%x",k).." used:"..v)
|
|
||||||
return k-offsets.base()-4
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.new("Xpointer",f_pointer)
|
|
||||||
function f_adventure()
|
|
||||||
RaceTable=RaceTable or BuildNameTable() -- this gets all the races' numbers
|
|
||||||
--[[print("input chars race:")
|
|
||||||
repeat
|
|
||||||
r=io.stdin:read()
|
|
||||||
if RaceTable[r]==nil then print("Incorrect race...") end
|
|
||||||
until RaceTable[r]~=nil -- query till correct race is inputed
|
|
||||||
rnum=RaceTable[r] --get its num
|
|
||||||
print("Race:"..rnum)]]--
|
|
||||||
myoff=0
|
|
||||||
print("input player's creature's name (lowercaps):")
|
|
||||||
r=io.stdin:read()
|
|
||||||
|
|
||||||
for k,v in pairs(offsets.getvectors()) do -- now lets look through all vector offsets
|
|
||||||
off=engine.peekd(k) --get vector start
|
|
||||||
off=engine.peekd(off) --get 0 element (or first) in adventurer mode its our hero
|
|
||||||
name=engine.peekstr(off)
|
|
||||||
if(name==r) then
|
|
||||||
--if engine.peek(off+140)==rnum then -- creature start+140 is the place where race is kept
|
|
||||||
print(string.format("%x race:%x",k,engine.peekw(off+140)))
|
|
||||||
myoff=k -- ok found it
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if myoff~=0 then
|
|
||||||
crvec=engine.peek(myoff,ptr_vector)
|
|
||||||
print(string.format("player offset:%x",crvec:getval(0)))
|
|
||||||
local legidVec=engine.peek(crvec:getval(0),ptr_Creature.legends)
|
|
||||||
print(string.format("legends offset:%x",legidVec:getval(0)))
|
|
||||||
local vtable=engine.peekd(legidVec:getval(0))
|
|
||||||
print(string.format("vtable offset:%x",vtable))
|
|
||||||
offsets.new("vtableLegends",vtable-offsets.base())
|
|
||||||
return myoff-offsets.base() --save the offset for laters
|
|
||||||
else
|
|
||||||
return 0 --indicate failure
|
|
||||||
end
|
|
||||||
end
|
|
||||||
offsets.newlazy("AdvCreatureVec",f_adventure) -- register a way to find this offset
|
|
||||||
--7127F0
|
|
||||||
function f_legends()
|
|
||||||
pos=1
|
|
||||||
T={}
|
|
||||||
repeat
|
|
||||||
pos=offsets.find(pos+1,0x50,0xb8,ANYDWORD,0xe8,ANYDWORD,0x8b,0xf0)
|
|
||||||
off=engine.peekd(pos+2)
|
|
||||||
vec=engine.peek(off,ptr_vector)
|
|
||||||
if vec:size()~=0 then
|
|
||||||
if T[off]~=nil then
|
|
||||||
T[off].c=T[off].c+1
|
|
||||||
else
|
|
||||||
T[off]={c=1,vsize=vec:size()}
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
until pos==0
|
|
||||||
for k,v in pairs(T) do
|
|
||||||
vec=engine.peek(k,ptr_vector)
|
|
||||||
print(string.format("off:%x used:%i size:%d",k,v.c,v.vsize))
|
|
||||||
print(string.format("fith elements id:%d",engine.peekd(vec:getval(5))))
|
|
||||||
if engine.peekd(vec:getval(5))==5 then
|
|
||||||
--if v.c==2 and v.vsize>1000 then
|
|
||||||
return k-offsets.base()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.newlazy("Legends",f_legends)
|
|
||||||
function f_playerlegendid()
|
|
||||||
local off=offsets.getEx("Legends")
|
|
||||||
local pos=1
|
|
||||||
repeat
|
|
||||||
pos=offsets.find(pos+1,0xa1,DWORD_,off+4,0x2b,0x05,DWORD_,off)
|
|
||||||
val=engine.peekd(pos+16)
|
|
||||||
if engine.peekd(val)~=0 then
|
|
||||||
--if val >offsets.base() then
|
|
||||||
return val-offsets.base()
|
|
||||||
end
|
|
||||||
--print(string.format("%x",val))
|
|
||||||
until pos==0
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.newlazy("PlayerLegend",f_playerlegendid)
|
|
||||||
|
|
||||||
function f_world()
|
|
||||||
local pos=offsets.base()
|
|
||||||
T={}
|
|
||||||
while pos~=0 do
|
|
||||||
--pos=offsets.find(pos+6,0xa1,DWORD_,mapoffset,0x8b,0x4c,0x88,0xFC)
|
|
||||||
pos=offsets.find(pos+6,0x8b,0x35,ANYDWORD,0x85,0xf6)--,0x8b,0x4c,0x88,0xFC)
|
|
||||||
--pos2=offsets.find(pos,0x8b,0x34,0x88)
|
|
||||||
|
|
||||||
if pos~=0 then
|
|
||||||
add=engine.peekd(pos+2);
|
|
||||||
--if pos2 ~=0 and pos2-pos<25 then
|
|
||||||
-- print(string.format("Address:%x dist:%d Map:%x",pos2,pos2-pos,add))
|
|
||||||
--
|
|
||||||
--end
|
|
||||||
if add~=0 then
|
|
||||||
if T[add]~=nil then
|
|
||||||
T[add]=T[add]+1
|
|
||||||
else
|
|
||||||
T[add]=1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
local kk,vv
|
|
||||||
vv=0
|
|
||||||
for k,v in pairs(T) do
|
|
||||||
if v>vv then
|
|
||||||
vv=v
|
|
||||||
kk=k
|
|
||||||
end
|
|
||||||
--print(string.format("Address:%x, times used:%d",k,v))
|
|
||||||
end
|
|
||||||
return kk-offsets.base()
|
|
||||||
end
|
|
||||||
offsets.new("WorldData",f_world)
|
|
||||||
|
|
||||||
function f_sites()
|
|
||||||
local pos=offsets.base()
|
|
||||||
T={}
|
|
||||||
while pos~=0 do
|
|
||||||
|
|
||||||
pos=offsets.find(pos+17,0xA1,ANYDWORD, --mov eax, ptr to some biger thing
|
|
||||||
0x8B,0x90,0x24,0x01,0x00,0x00, --mov edx [eax+0x124]
|
|
||||||
0x2b,0x90,0x20,0x01,0x00,0x00, --sub edx [eax+0x120]
|
|
||||||
EOL)
|
|
||||||
if pos~=0 then
|
|
||||||
add=engine.peekd(pos+1)
|
|
||||||
return add-offsets.base()
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.newlazy("SiteData",f_sites) --actually has a lot more data...
|
|
||||||
function f_items()
|
|
||||||
local pos=offsets.base()
|
|
||||||
while pos~= 0 do
|
|
||||||
pos=offsets.find(pos+17,0x8b,0x0d,ANYDWORD, --mov eax, ptr to some biger thing
|
|
||||||
0x8B,0x54,0x24,0x34)
|
|
||||||
if pos~=0 then
|
|
||||||
--print(string.format("%x",engine.peekd(pos+2)))
|
|
||||||
local ret=engine.peekd(pos+2)-offsets.base()
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.new("Items",f_items)
|
|
||||||
function f_materials()
|
|
||||||
for k,v in pairs(offsets.getvectors()) do
|
|
||||||
--print("Looking into:"..string.format("%x",k).." used:"..v)
|
|
||||||
local vec=engine.peek(k,ptr_vector)
|
|
||||||
if vec:getval(0)~=0 then
|
|
||||||
--print("\tval:"..string.format("%x",vec:getval(0)))
|
|
||||||
local token=engine.peek(vec:getval(0),ptt_dfstring)
|
|
||||||
if token:getval()~=""then
|
|
||||||
--print("\t\tval:".. token:getval())
|
|
||||||
if token:getval()=="IRON" then
|
|
||||||
--print("Found:"..string.format("%x",k).." used:"..v)
|
|
||||||
return k-offsets.base()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
offsets.new("Materials",f_materials)
|
|
@ -1,16 +0,0 @@
|
|||||||
AdvCreatureVec : 0x12c44ac
|
|
||||||
CreatureGloss : 0x1308040
|
|
||||||
CreaturePtr : 0xaf2430
|
|
||||||
CreatureVec : 0x12c44ac
|
|
||||||
CurrentRace : 0x10f0c28
|
|
||||||
Items : 0x12c4550
|
|
||||||
Legends : 0x12c451c
|
|
||||||
Materials : 0x1307f50
|
|
||||||
PlayerLegend : 0x145bfec
|
|
||||||
SiteData : 0x1307778
|
|
||||||
WordVec : 0x1308254
|
|
||||||
WorldData : 0x1306148
|
|
||||||
Xpointer : 0x7347f0
|
|
||||||
vtableLegends : 0x6e7594
|
|
||||||
Buildings : 0x12C4DA8
|
|
||||||
StartDwarfs : 0x5DA790
|
|
@ -1 +1 @@
|
|||||||
Subproject commit 906d6439d4cb694cf287d63badabb675a8b89329
|
Subproject commit 8365e4a89cf4c21fc402dd6042c9743f71654ac9
|
Loading…
Reference in New Issue