My method is not exactly "proper" but the way I've been handling teleportation is via a few AOB scripts that grab the player's coordinate, the last vehicle to have stopped (which is the only time in which the teleportation seems to work), and the last waypoint they placed. The waypoint script needs to be activated in conjunction with whichever other coordinate script is running for this to work. The way I'm doing vehicle teleportation is janky as fuck though and this has a lot of shortcomings.
Essentially it's set up via 4 hotkeys.
Numpad 1 teleports the player to the last placement of their waypoint
Numpad 2 activates my really crappy lua script to teleport the vehicle as "safely" as possible whilst the player is inside to the last placement of their waypoint via sinking the vehicle down to the target z coordinate and then teleporting them to the destination (It'll be pretty much instant if the z coordinate is equal or higher). It'll only ever actually work if the vehicle is not in motion
Numpad 3 teleports the vehicle directly by copying over the value of the waypoints. The teleport won't happen unless the vehicle is not in motion.
Numpad 4 is for the last attached Floating Carrier given that script is enabled (Will only really work after you detach it IIRC)
The reason for numpad 2's script is because changing the vehicle's coordinates via the values I found more or less calculates it as a "next coordinate the vehicle will go" from my understanding. The issue from that is it means that if the waypoint's coordinate is lower than the z coordinate, the game will register that as fall damage. I did a very small look to see if I can disable the fall damage but I haven't really found any good results. Instead, my workaround is that it will bring the player's vehicle down to the target z coordinate at a rate the game doesn't consider falling, and then teleport the vehicle to the coordinate. Note that you should only use this if you're not in the map.
Easier solution is just to exit the vehicle, place a waypoint, use numpad 3, place another waypoint next to the vehicle, and then teleport yourself to said waypoint with numpad 1, as the fall damage physics are only determined while you're actually inside the vehicle. If you ever use numpad 4, I recommend doing both that and numpad 1 from within the map. Finally, I have no safeguards in place for numpad 1, 3, and 4 in terms of if you deleted all waypoints. So be careful not to use it in such a case as it will teleport you to the coordinate 0,0,0.
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>586</ID>
<Description>"COORDINATES"</Description>
<Options moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
<LastState Value="" RealAddress="00000000"/>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>602</ID>
<Description>"No Cargo Fall Damage"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : ds.exe
Version:
Date : 2020-08-20
Author : SenorPlebeian
This script does blah blah blah
}
[ENABLE]
aobscanmodule(NOFALLDAMAGE,ds.exe,C4 C1 7A 11 4E 34 * * * * 75) // should be unique
alloc(newmem,$1000,"ds.exe"+293D37A)
label(code)
label(return)
newmem:
code:
jmp return
NOFALLDAMAGE:
jmp newmem
nop
return:
registersymbol(NOFALLDAMAGE)
[DISABLE]
NOFALLDAMAGE:
db C4 C1 7A 11 4E 34
unregistersymbol(NOFALLDAMAGE)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+293D37A
"ds.exe"+293D347: C4 41 7A 10 5E 34 - vmovss xmm11,[r14+34]
"ds.exe"+293D34D: C4 41 78 2F D8 - vcomiss xmm11,xmm0,xmm8
"ds.exe"+293D352: C4 C1 78 28 FA - vmovaps xmm7,xmm10
"ds.exe"+293D357: 0F 86 2D 0B 00 00 - jbe ds.exe+293DE8A
"ds.exe"+293D35D: C4 41 78 2F D0 - vcomiss xmm10,xmm0,xmm8
"ds.exe"+293D362: 0F 86 22 0B 00 00 - jbe ds.exe+293DE8A
"ds.exe"+293D368: 41 80 7E 20 05 - cmp byte ptr [r14+20],05
"ds.exe"+293D36D: 41 B7 01 - mov r15l,01
"ds.exe"+293D370: C4 C1 22 5C C2 - vsubss xmm0,xmm11,xmm10
"ds.exe"+293D375: C4 C1 7A 5F C8 - vmaxss xmm1,xmm0,xmm8
// ---------- INJECTING HERE ----------
"ds.exe"+293D37A: C4 C1 7A 11 4E 34 - vmovss [r14+34],xmm1
// ---------- DONE INJECTING ----------
"ds.exe"+293D380: C5 A2 5C F9 - vsubss xmm7,xmm11,xmm1
"ds.exe"+293D384: 75 0D - jne ds.exe+293D393
"ds.exe"+293D386: 44 8B F9 - mov r15d,ecx
"ds.exe"+293D389: 41 C1 EF 10 - shr r15d,10
"ds.exe"+293D38D: 41 80 E7 01 - and r15l,01
"ds.exe"+293D391: EB 69 - jmp ds.exe+293D3FC
"ds.exe"+293D393: 49 8B 46 28 - mov rax,[r14+28]
"ds.exe"+293D397: 80 78 3B 0A - cmp byte ptr [rax+3B],0A
"ds.exe"+293D39B: 75 0A - jne ds.exe+293D3A7
"ds.exe"+293D39D: 41 80 BE 80 00 00 00 0F - cmp byte ptr [r14+00000080],0F
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>959</ID>
<Description>"TELEPORT VEHICLE TO WAYPOINT (1.0)"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{$lua}
function teleportVehicleGracefully(waypointcoordinate, vcoordinate)
local x = readFloat(waypointcoordinate+16)
local y = readFloat(waypointcoordinate+20)
local z = readFloat(waypointcoordinate+24)
local currentVehicleZ = readDouble(vcoordinate + 16)
local rec = getAddressList().getMemoryRecordByDescription("TELEPORT VEHICLE TO WAYPOINT (1.0)")
if thistimer == nil then
thistimer = createTimer(nil, false)
end
thistimer.Interval = 250
thistimer.OnTimer = function(timer)
if currentVehicleZ > (z + 5) and z ~= 0 then
currentVehicleZ = currentVehicleZ - 5
writeDouble(vcoordinate + 16, currentVehicleZ)
writeDouble(vcoordinate - 1952, currentVehicleZ)
-- print (currentVehicleZ)
else
if (z ~= 0) then
writeDouble(vcoordinate + 16, z)
writeDouble(vcoordinate - 1952, z)
end
if x ~= 0 then
writeDouble(vcoordinate, x)
writeDouble(vcoordinate - 1968, x)
writeDouble(vcoordinate + 8, y)
writeDouble(vcoordinate - 1960, y)
end
-- print ("Done")
rec.Active = false
thistimer.setEnabled(false)
end
end
thistimer.setEnabled(true)
if currentVehicleZ <= (z + 5) then
writeDouble(vcoordinate + 16, z)
writeDouble(vcoordinate - 1952, z)
end
end
function init()
local waypointcoordinate = getAddressSafe("last_waypoint")
local vcoordinate = getAddressSafe("vehcoordinates")
waypointcoordinate = readQword(waypointcoordinate)
vcoordinate = readQword(vcoordinate) + 2168
teleportVehicleGracefully(waypointcoordinate, vcoordinate)
end
function initDisable()
if thistimer ~= nil then
thistimer.setEnabled(false)
end
end
[ENABLE]
init()
[DISABLE]
initDisable()
</AssemblerScript>
<Hotkeys>
<Hotkey>
<Action>Toggle Activation</Action>
<Keys>
<Key>98</Key>
</Keys>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>552</ID>
<Description>"GRAB PLAYER COORDINATES"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : ds.exe
Version:
Date : 2020-08-15
Author : SenorPlebeian
This script grabs the coordinates of the player that
you can alter to move Sam's position
}
[ENABLE]
aobscanmodule(GRABPLAYERCOORDINATES,ds.exe,C5 FA 10 82 80 00 00 00 * * * * C4) // should be unique
alloc(newmem,$1000,"ds.exe"+19C3DA1)
alloc(coordinates, 8)
registersymbol(coordinates)
label(code)
label(return)
newmem:
code:
mov [coordinates], rdx
vmovss xmm0,[rdx+00000080]
jmp return
GRABPLAYERCOORDINATES:
jmp newmem
nop 3
return:
registersymbol(GRABPLAYERCOORDINATES)
[DISABLE]
GRABPLAYERCOORDINATES:
db C5 FA 10 82 80 00 00 00
unregistersymbol(GRABPLAYERCOORDINATES)
unregistersymbol(coordinates)
dealloc(coordinates)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+19C3DA1
"ds.exe"+19C3D6C: C5 E8 58 C6 - vaddps xmm0,xmm2,xmm6
"ds.exe"+19C3D70: C5 F8 28 74 24 60 - vmovaps xmm6,[rsp+60]
"ds.exe"+19C3D76: 49 8B C0 - mov rax,r8
"ds.exe"+19C3D79: C5 F8 58 E2 - vaddps xmm4,xmm0,xmm2
"ds.exe"+19C3D7D: C5 F2 59 15 3B FB D9 01 - vmulss xmm2,xmm1,[ds.exe+37638C0]
"ds.exe"+19C3D85: C5 EA 58 05 07 38 DB 01 - vaddss xmm0,xmm2,[ds.exe+3777594]
"ds.exe"+19C3D8D: C5 C2 5A D7 - vcvtss2sd xmm2,xmm7,xmm7
"ds.exe"+19C3D91: C5 F8 28 7C 24 50 - vmovaps xmm7,[rsp+50]
"ds.exe"+19C3D97: C5 E0 57 DB - vxorps xmm3,xmm3,xmm3
"ds.exe"+19C3D9B: C4 E3 61 21 D8 20 - unknown avx 0F3A 21 xmm3,xmm3,xmm0,20
// ---------- INJECTING HERE ----------
"ds.exe"+19C3DA1: C5 FA 10 82 80 00 00 00 - vmovss xmm0,[rdx+00000080]
// ---------- DONE INJECTING ----------
"ds.exe"+19C3DA9: C5 FA 5A C0 - vcvtss2sd xmm0,xmm0,xmm0
"ds.exe"+19C3DAD: C4 C1 7B 58 C8 - vaddsd xmm1,xmm0,xmm8
"ds.exe"+19C3DB2: C5 D8 58 EB - vaddps xmm5,xmm4,xmm3
"ds.exe"+19C3DB6: C5 D2 5A C5 - vcvtss2sd xmm0,xmm5,xmm5
"ds.exe"+19C3DBA: C5 F3 5C C8 - vsubsd xmm1,xmm1,xmm0
"ds.exe"+19C3DBE: C4 C1 7B 11 08 - vmovsd [r8],xmm1
"ds.exe"+19C3DC3: C5 D0 C6 C5 55 - vshufps xmm0,xmm5,xmm5,55
"ds.exe"+19C3DC8: C4 41 39 15 C0 - vunpckhpd xmm8,xmm8,xmm8
"ds.exe"+19C3DCD: C4 C1 6B 58 C8 - vaddsd xmm1,xmm2,xmm8
"ds.exe"+19C3DD2: C5 78 28 44 24 40 - vmovaps xmm8,[rsp+40]
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>553</ID>
<Description>"Coordinates"</Description>
<Options moHideChildren="1"/>
<LastState Value="" RealAddress="00000000"/>
<ShowAsHex>1</ShowAsHex>
<VariableType>Array of byte</VariableType>
<ByteLength>0</ByteLength>
<Address>coordinates</Address>
<Offsets>
<Offset>80</Offset>
</Offsets>
<CheatEntries>
<CheatEntry>
<ID>585</ID>
<Description>"Player X"</Description>
<VariableType>Float</VariableType>
<Address>+0</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>97</Key>
</Keys>
<Value>(WayX)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
<CheatEntry>
<ID>554</ID>
<Description>"Player Y"</Description>
<VariableType>Float</VariableType>
<Address>+4</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>97</Key>
</Keys>
<Value>(WayY)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
<CheatEntry>
<ID>555</ID>
<Description>"Player Z"</Description>
<VariableType>Float</VariableType>
<Address>+8</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>97</Key>
</Keys>
<Value>(WayZ)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>939</ID>
<Description>"Last Attached Carrier"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : ds.exe
Version:
Date : 2020-08-21
Author : SenorPlebeian
This script does blah blah blah
}
[ENABLE]
aobscanmodule(LASTATTACHEDCARRIER,ds.exe,C4 C1 78 10 85 C8 00 00 00 C4 E3) // should be unique
alloc(newmem,$1000,"ds.exe"+23F5661)
alloc(last_attached_carrier, 8)
registersymbol(last_attached_carrier)
label(code)
label(return)
newmem:
mov [last_attached_carrier], r13
code:
vmovups xmm0,[r13+000000C8]
jmp return
LASTATTACHEDCARRIER:
jmp newmem
nop 4
return:
registersymbol(LASTATTACHEDCARRIER)
[DISABLE]
LASTATTACHEDCARRIER:
db C4 C1 78 10 85 C8 00 00 00
unregistersymbol(LASTATTACHEDCARRIER)
unregistersymbol(last_attached_carrier)
dealloc(last_attached_carrier)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+23F5661
"ds.exe"+23F5619: C4 E3 79 40 DC 7F - vdpps xmm3,xmm0,xmm4,7F
"ds.exe"+23F561F: C5 FB 10 84 24 78 01 00 00 - vmovsd xmm0,[rsp+00000178]
"ds.exe"+23F5628: C4 E3 79 21 84 24 80 01 00 00 20 - unknown avx 0F3A 21 xmm0,xmm0,[rsp+00000180],20
"ds.exe"+23F5633: C4 C1 72 10 CA - vmovss xmm1,xmm1,xmm10
"ds.exe"+23F5638: C5 F8 11 8C 24 00 01 00 00 - vmovups [rsp+00000100],xmm1
"ds.exe"+23F5641: 45 33 F6 - xor r14d,r14d
"ds.exe"+23F5644: C7 84 24 F8 00 00 00 08 00 00 00 - mov [rsp+000000F8],00000008
"ds.exe"+23F564F: C4 E3 79 40 C4 7F - vdpps xmm0,xmm0,xmm4,7F
"ds.exe"+23F5655: C4 E3 71 40 D4 7F - vdpps xmm2,xmm1,xmm4,7F
"ds.exe"+23F565B: C4 E3 79 21 CA 10 - unknown avx 0F3A 21 xmm1,xmm0,xmm2,10
// ---------- INJECTING HERE ----------
"ds.exe"+23F5661: C4 C1 78 10 85 C8 00 00 00 - vmovups xmm0,[r13+000000C8]
// ---------- DONE INJECTING ----------
"ds.exe"+23F566A: C4 E3 71 21 DB 20 - unknown avx 0F3A 21 xmm3,xmm1,xmm3,20
"ds.exe"+23F5670: C4 C1 7B 10 8D D8 00 00 00 - vmovsd xmm1,[r13+000000D8]
"ds.exe"+23F5679: 48 8D 05 C8 E1 38 01 - lea rax,[ds.exe+3783848]
"ds.exe"+23F5680: 48 C7 84 24 FC 00 00 00 FF 00 00 00 - mov qword ptr [rsp+000000FC],000000FF
"ds.exe"+23F568C: C4 C1 78 28 FD - vmovaps xmm7,xmm13
"ds.exe"+23F5691: C5 C0 C6 FF 00 - vshufps xmm7,xmm7,xmm7,00
"ds.exe"+23F5696: C5 F8 11 84 24 90 00 00 00 - vmovups [rsp+00000090],xmm0
"ds.exe"+23F569F: C5 C0 59 C4 - vmulps xmm0,xmm7,xmm4
"ds.exe"+23F56A3: C5 F8 11 84 24 D0 00 00 00 - vmovups [rsp+000000D0],xmm0
"ds.exe"+23F56AC: C5 7A 11 A4 24 D8 00 00 00 - vmovss [rsp+000000D8],xmm12
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>935</ID>
<Description>"Flying Carrier X pos"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>last_attached_carrier</Address>
<Offsets>
<Offset>C8</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>(Player X)</Value>
<ID>0</ID>
</Hotkey>
<Hotkey>
<Action>Increase Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>1</Value>
<ID>1</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
<CheatEntry>
<ID>936</ID>
<Description>"Flying Carrier Y pos"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>last_attached_carrier</Address>
<Offsets>
<Offset>D0</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>(Player Y)</Value>
<ID>0</ID>
</Hotkey>
<Hotkey>
<Action>Increase Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>1</Value>
<ID>1</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
<CheatEntry>
<ID>937</ID>
<Description>"Flying Carrier Z pos"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>last_attached_carrier</Address>
<Offsets>
<Offset>D8</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>(Player Z)</Value>
<ID>0</ID>
</Hotkey>
<Hotkey>
<Action>Increase Value</Action>
<Keys>
<Key>100</Key>
</Keys>
<Value>.2</Value>
<ID>1</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>581</ID>
<Description>"Grab Last Waypoint"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : ds.exe
Version:
Date : 2020-08-18
Author : SenorPlebeian
This script does blah blah blah
}
[ENABLE]
aobscanmodule(GRABWAYPOINT,ds.exe,C5 F9 7F 43 10 88) // should be unique
alloc(newmem,$1000,"ds.exe"+1B7FE048)
alloc(last_waypoint, 8)
registersymbol(last_waypoint)
label(code)
label(return)
newmem:
mov [last_waypoint], rbx
code:
vmovdqa [rbx+10],xmm0
jmp return
GRABWAYPOINT:
jmp newmem
return:
registersymbol(GRABWAYPOINT)
[DISABLE]
GRABWAYPOINT:
db C5 F9 7F 43 10
unregistersymbol(GRABWAYPOINT)
unregistersymbol(last_waypoint)
dealloc(last_waypoint)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+1B7FE048
"ds.exe"+1B7FE028: 89 4B 28 - mov [rbx+28],ecx
"ds.exe"+1B7FE02B: 89 C8 - mov eax,ecx
"ds.exe"+1B7FE02D: C1 E8 02 - shr eax,02
"ds.exe"+1B7FE030: A8 01 - test al,01
"ds.exe"+1B7FE032: 75 06 - jne ds.exe+1B7FE03A
"ds.exe"+1B7FE034: 83 C9 04 - or ecx,04
"ds.exe"+1B7FE037: 89 4B 28 - mov [rbx+28],ecx
"ds.exe"+1B7FE03A: C5 F8 10 07 - vmovups xmm0,[rdi]
"ds.exe"+1B7FE03E: 0F B6 4C 24 60 - movzx ecx,byte ptr [rsp+60]
"ds.exe"+1B7FE043: 0F B6 44 24 68 - movzx eax,byte ptr [rsp+68]
// ---------- INJECTING HERE ----------
"ds.exe"+1B7FE048: C5 F9 7F 43 10 - vmovdqa [rbx+10],xmm0
// ---------- DONE INJECTING ----------
"ds.exe"+1B7FE04D: 88 43 43 - mov [rbx+43],al
"ds.exe"+1B7FE050: 88 4B 41 - mov [rbx+41],cl
"ds.exe"+1B7FE053: 88 4B 42 - mov [rbx+42],cl
"ds.exe"+1B7FE056: 44 88 73 4C - mov [rbx+4C],r14l
"ds.exe"+1B7FE05A: 44 88 7B 4D - mov [rbx+4D],r15l
"ds.exe"+1B7FE05E: 8B 86 F0 5E 00 00 - mov eax,[rsi+00005EF0]
"ds.exe"+1B7FE064: 83 C8 04 - or eax,04
"ds.exe"+1B7FE067: 89 86 F0 5E 00 00 - mov [rsi+00005EF0],eax
"ds.exe"+1B7FE06D: 84 C9 - test cl,cl
"ds.exe"+1B7FE06F: 74 0A - je ds.exe+1B7FE07B
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>582</ID>
<Description>"WayX"</Description>
<VariableType>Float</VariableType>
<Address>last_waypoint</Address>
<Offsets>
<Offset>10</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>583</ID>
<Description>"WayY"</Description>
<VariableType>Float</VariableType>
<Address>last_waypoint</Address>
<Offsets>
<Offset>14</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>584</ID>
<Description>"WayZ"</Description>
<VariableType>Float</VariableType>
<Address>last_waypoint</Address>
<Offsets>
<Offset>18</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>565</ID>
<Description>"GRAB VEHICLE COORDINATES"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : ds.exe
Version:
Date : 2020-08-15
Author : SenorPlebeian
This script does blah blah blah
}
[ENABLE]
aobscanmodule(GRAB_VEHICLE_COORDS,ds.exe,1F * * * * C8 00 00 00 C5 F8 11 87 78 08 00 00) // should be unique
alloc(newmem,$1000,"ds.exe"+2BF86A6)
alloc(vehcoordinates, 8)
registersymbol(vehcoordinates)
label(code)
label(return)
newmem:
mov [vehcoordinates], rdi
code:
vmovups [rdi+00000878],xmm0
jmp return
GRAB_VEHICLE_COORDS+09:
jmp newmem
nop 3
return:
registersymbol(GRAB_VEHICLE_COORDS)
[DISABLE]
GRAB_VEHICLE_COORDS+09:
db C5 F8 11 87 78 08 00 00
unregistersymbol(GRAB_VEHICLE_COORDS)
unregistersymbol(vehcoordinates)
dealloc(vehcoordinates)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+2BF86A6
"ds.exe"+2BF8669: 48 8D 8F 90 08 00 00 - lea rcx,[rdi+00000890]
"ds.exe"+2BF8670: C5 F8 28 74 24 30 - vmovaps xmm6,[rsp+30]
"ds.exe"+2BF8676: 48 8B 5C 24 50 - mov rbx,[rsp+50]
"ds.exe"+2BF867B: 74 21 - je ds.exe+2BF869E
"ds.exe"+2BF867D: C5 F8 10 87 F8 08 00 00 - vmovups xmm0,[rdi+000008F8]
"ds.exe"+2BF8685: C5 F8 11 87 78 08 00 00 - vmovups [rdi+00000878],xmm0
"ds.exe"+2BF868D: C5 FB 10 8F 08 09 00 00 - vmovsd xmm1,[rdi+00000908]
"ds.exe"+2BF8695: 48 8D 87 10 09 00 00 - lea rax,[rdi+00000910]
"ds.exe"+2BF869C: EB 1F - jmp ds.exe+2BF86BD
"ds.exe"+2BF869E: C5 F8 10 87 C8 00 00 00 - vmovups xmm0,[rdi+000000C8]
// ---------- INJECTING HERE ----------
"ds.exe"+2BF86A6: C5 F8 11 87 78 08 00 00 - vmovups [rdi+00000878],xmm0
// ---------- DONE INJECTING ----------
"ds.exe"+2BF86AE: C5 FB 10 8F D8 00 00 00 - vmovsd xmm1,[rdi+000000D8]
"ds.exe"+2BF86B6: 48 8D 87 E0 00 00 00 - lea rax,[rdi+000000E0]
"ds.exe"+2BF86BD: C5 FB 11 8F 88 08 00 00 - vmovsd [rdi+00000888],xmm1
"ds.exe"+2BF86C5: 48 3B C8 - cmp rcx,rax
"ds.exe"+2BF86C8: 74 0E - je ds.exe+2BF86D8
"ds.exe"+2BF86CA: C5 FC 10 00 - vmovups ymm0,[rax]
"ds.exe"+2BF86CE: C5 FC 11 01 - vmovups [rcx],ymm0
"ds.exe"+2BF86D2: 8B 40 20 - mov eax,[rax+20]
"ds.exe"+2BF86D5: 89 41 20 - mov [rcx+20],eax
"ds.exe"+2BF86D8: 83 8F 38 05 00 00 04 - or dword ptr [rdi+00000538],04
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>566</ID>
<Description>"Veh X"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>vehcoordinates</Address>
<Offsets>
<Offset>878</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayX)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
<CheatEntries>
<CheatEntry>
<ID>575</ID>
<Description>"Secondary Veh X"</Description>
<VariableType>Double</VariableType>
<Address>-7B0</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayX)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>573</ID>
<Description>"Veh Y"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>vehcoordinates</Address>
<Offsets>
<Offset>880</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayY)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
<CheatEntries>
<CheatEntry>
<ID>576</ID>
<Description>"Secondary Veh Y"</Description>
<VariableType>Double</VariableType>
<Address>-7B0</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayY)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>574</ID>
<Description>"Veh Z"</Description>
<Options moRecursiveSetValue="1"/>
<VariableType>Double</VariableType>
<Address>vehcoordinates</Address>
<Offsets>
<Offset>888</Offset>
</Offsets>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayZ)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
<CheatEntries>
<CheatEntry>
<ID>577</ID>
<Description>"Secondary Veh Z"</Description>
<VariableType>Double</VariableType>
<Address>-7B0</Address>
<Hotkeys>
<Hotkey>
<Action>Set Value</Action>
<Keys>
<Key>99</Key>
</Keys>
<Value>(WayZ)</Value>
<ID>0</ID>
</Hotkey>
</Hotkeys>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
I'm hoping to come back to these at some point and make them less shitty, but I'm swamped at work, so hopefully someone else can get some use out of these. At the very least, a guard clause against non existing waypoints would go a long way, or hopefully a way to actually disable the impact of falling, I've been using the fall damage script I have up there in tandem with a vehicle invulnerability script, but it still shoves Sam out of the vehicle which is just annoying.
On a side note, I've been noticing cheat engine complains about stuff like this:
vcomiss xmm0,xmm0,[rdx+34]
Which I've only been getting around by just straight up putting it as the bytes like so:
db C5 F8 2F 42 34
Is that the best way to go about it or is there a way to not pop out an error message in such cases?