jonaaa wrote: ↑Tue Nov 19, 2024 2:33 am
AeroShok999 wrote: ↑Mon Nov 18, 2024 9:25 pm
jonaaa wrote: ↑Mon Nov 18, 2024 9:14 pm
~~snip~
~~snip~
Sorry if i was not clear enough, so, by "only once" i mean when you buy any weapon/armor/accessory normally, you can't buy it again because you already unlocked, right? So, in this case it works the same, even if you Swap IDs and revert it later, you can't buy that specific item anymore, even if you revert the IDs, probably there's a flag somewhere allowing us to buy that same item from the vendor again?
It seems to me that it works like this:
there is this pointer that allows you to list all the items you have already found (open player menu to populate)
Code: Select all
[ENABLE]
aobscanmodule(getItems,Dragon Age The Veilguard.exe,4D 8B 4D 08 49 8B 4D 10 45) // should be unique
alloc(newmem,$1000,getItems)
label(code)
label(return)
globalalloc(adrItems,8)
adrItems:
dq 0
newmem:
mov r9,adrItems
mov [r9],r13
code:
mov r9,[r13+08]
mov rcx,[r13+10]
jmp return
getItems:
jmp newmem
nop 3
return:
registersymbol(getItems)
[DISABLE]
getItems:
db 4D 8B 4D 08 49 8B 4D 10
unregistersymbol(getItems)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: getItems
Dragon Age The Veilguard.exe+13FBD70: 4C 8B 62 08 - mov r12,[rdx+08]
Dragon Age The Veilguard.exe+13FBD74: 4D 3B FC - cmp r15,r12
Dragon Age The Veilguard.exe+13FBD77: 0F 84 85 01 00 00 - je "Dragon Age The Veilguard.exe"+13FBF02
Dragon Age The Veilguard.exe+13FBD7D: 48 89 58 08 - mov [rax+08],rbx
Dragon Age The Veilguard.exe+13FBD81: 48 89 68 D8 - mov [rax-28],rbp
Dragon Age The Veilguard.exe+13FBD85: 48 89 70 D0 - mov [rax-30],rsi
Dragon Age The Veilguard.exe+13FBD89: 48 89 78 C8 - mov [rax-38],rdi
Dragon Age The Veilguard.exe+13FBD8D: 48 8B 58 10 - mov rbx,[rax+10]
Dragon Age The Veilguard.exe+13FBD91: 48 8B 78 18 - mov rdi,[rax+18]
Dragon Age The Veilguard.exe+13FBD95: 66 66 66 0F 1F 84 00 00 00 00 00 - nop word ptr [rax+rax+00000000]
// ---------- INJECTING HERE ----------
getItems: 4D 8B 4D 08 - mov r9,[r13+08]
// ---------- DONE INJECTING ----------
Dragon Age The Veilguard.exe+13FBDA4: 49 8B 4D 10 - mov rcx,[r13+10]
Dragon Age The Veilguard.exe+13FBDA8: 45 8B 17 - mov r10d,[r15]
Dragon Age The Veilguard.exe+13FBDAB: 49 2B C9 - sub rcx,r9
Dragon Age The Veilguard.exe+13FBDAE: 48 C1 F9 03 - sar rcx,03
Dragon Age The Veilguard.exe+13FBDB2: 48 85 C9 - test rcx,rcx
Dragon Age The Veilguard.exe+13FBDB5: 7E 4B - jle "Dragon Age The Veilguard.exe"+13FBE02
Dragon Age The Veilguard.exe+13FBDB7: 66 0F 1F 84 00 00 00 00 00 - nop word ptr [rax+rax+00000000]
Dragon Age The Veilguard.exe+13FBDC0: 48 8B D1 - mov rdx,rcx
Dragon Age The Veilguard.exe+13FBDC3: 48 D1 FA - sar rdx,1
Dragon Age The Veilguard.exe+13FBDC6: 49 83 3C D1 00 - cmp qword ptr [r9+rdx*8],00
}
Code: Select all
getLuaEngine().MenuItem5.doClick()
local chkAdr = getAddressSafe('[adrItems]')
if chkAdr == nil or chkAdr == 0 then return end
local basAdr = getAddressSafe('[[adrItems]+8]+0')
local maxAdr = getAddressSafe('[[adrItems]+10]+0')
local i = 0
while basAdr < maxAdr do
i = i + 1
local adrItem = readPointer(basAdr)
local level = readInteger(adrItem + 0x38)
local rarity = readInteger(adrItem + 0x40)
local adr2 = readPointer(adrItem + 0x90)
local adr3 = readPointer(adr2 + 0x38)
local desc = readString(adr3,200)
print(string.format("%3d\t%08x\t%08x\t%2d\t%d\t%s", i, basAdr, adrItem, level, rarity, desc))
basAdr = basAdr + 0x8
end
For all equipment items (desc begins with 'rpg/equipment/') I think you can only find the same in a chest if you don't already have the max rarity for it but no matter the rarity you won't fint it anymore in a shop.