Skip to content

Commit 63cc4b9

Browse files
committed
fix: some fixes
- Fix Stancer and Handling Editor bugs. - Exclude unnecessary folders and files from release zip. - Remove debug "update" function from atArray class. - Remove unnecessary closures in some UI code.
1 parent 9d85a1a commit 63cc4b9

60 files changed

Lines changed: 582 additions & 620 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/zip-release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ jobs:
159159
- name: Bump Version
160160
if: steps.check_changes.outputs.should_proceed == 'true'
161161
run: |
162-
sed -i "s|return \".*\"|return \"${{steps.increment_tag.outputs.no_prefix}}\"|" SSV2/includes/version.lua
163-
sed -i "s|https://img.shields.io/badge/Script%20Version-v[0-9]\+\.[0-9]\+\.[0-9]\+-blue|https://img.shields.io/badge/Script%20Version-${{steps.increment_tag.outputs.version_number}}-blue|g" README.md
162+
sed -i "s|return \".*\"|return \"${{ steps.increment_tag.outputs.no_prefix }}\"|" SSV2/includes/version.lua
163+
sed -i "s|https://img.shields.io/badge/Script%20Version-v[0-9]\+\.[0-9]\+\.[0-9]\+-blue|https://img.shields.io/badge/Script%20Version-${{ steps.increment_tag.outputs.version_number }}-blue|g" README.md
164164
git config user.name "github-actions[bot]"
165165
git config user.email "github-actions[bot]@users.noreply.github.com"
166166
git add SSV2/includes/version.lua README.md
@@ -173,7 +173,7 @@ jobs:
173173
with:
174174
type: 'zip'
175175
filename: "Samurais_Scripts_${{ steps.increment_tag.outputs.version_number }}.zip"
176-
exclusions: /.git* /scripts* /docs* *.json *.md *.editorconfig *.py *.txt LICENSE
176+
exclusions: /.git* /dev* /docs* **.json **.md **.editorconfig **.py **.txt *.ps1 .gitignore LICENSE
177177

178178
- name: Upload Release
179179
if: steps.check_changes.outputs.should_proceed == 'true'

SSV2/includes/classes/Vector2.lua

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@
2525
---@operator eq(vec2): boolean
2626
---@operator le(vec2): boolean
2727
---@operator lt(vec2): boolean
28-
vec2 = {}
28+
vec2 = { __type = "vec2" }
2929
vec2.__index = vec2
30-
vec2.__type = "vec2"
3130

3231

3332
--------------------------------------

SSV2/includes/classes/Vector4.lua

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,8 @@
2727
---@operator eq(vec4): boolean
2828
---@operator le(vec4): boolean
2929
---@operator lt(vec4): boolean
30-
vec4 = {}
30+
vec4 = { __type = "vec4" }
3131
vec4.__index = vec4
32-
vec4.__type = "vec4"
3332

3433

3534
--------------------------------------

SSV2/includes/classes/gta/CPlayerInfo.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ local rlGamerInfo = require("includes.classes.gta.rlGamerInfo")
2020
---@field m_swim_speed pointer<float>
2121
---@field m_walk_speed pointer<float>
2222
---@field m_game_state pointer<eGameState>
23+
---@field m_ped pointer_ref<CPed>
2324
---@field m_is_wanted pointer<bool>
2425
---@field m_wanted_level pointer<uint32_t>
2526
---@field m_wanted_level_display pointer<uint32_t>
@@ -40,6 +41,7 @@ function CPlayerInfo.new(ptr)
4041
m_swim_speed = ptr:add(0x01C8),
4142
m_walk_speed = ptr:add(0x01E4),
4243
m_game_state = ptr:add(0x0230),
44+
m_ped = ptr:add(0x0240),
4345
m_is_wanted = ptr:add(0x08E0),
4446
m_wanted_level = ptr:add(0x08E8),
4547
m_wanted_level_display = ptr:add(0x08EC),

SSV2/includes/classes/gta/CVehicle.lua

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ local SubHandlingCtorMap <const> = {
4747
---@field public m_car_handling_data pointer<CCarHandlingData>?
4848
---@field public m_model_info_layout pointer<CVehicleModelInfoLayout>
4949
---@field public m_can_boost_jump pointer<byte> `bool`
50+
---@field public m_velocity pointer<vec3>
5051
---@field public m_deform_god pointer<uint8_t>
5152
---@field public m_water_damage pointer<uint32_t>
5253
---@field public m_next_gear pointer<int16_t>
@@ -107,8 +108,9 @@ function CVehicle:init(vehicle)
107108
instance.m_sub_handling_data = atArray(instance.m_handling_data:add(0x158), CCarHandlingData)
108109
instance.m_model_info_layout = instance.m_model_info:add(0x00B0):deref()
109110
instance.m_physics_fragments = phFragInst(ptr:add(0x0030):deref())
110-
instance.m_draw_data = CVehicleDrawData:init(ptr:add(0x0048):deref())
111+
instance.m_draw_data = CVehicleDrawData(ptr:add(0x0048):deref())
111112
instance.m_can_boost_jump = ptr:add(0x03A4)
113+
instance.m_velocity = ptr:add(0x07D0)
112114
instance.m_deform_god = ptr:add(0x096C)
113115
instance.m_is_targetable = ptr:add(0x0AEE)
114116
instance.m_door_lock_status = ptr:add(0x13D0)
@@ -185,7 +187,9 @@ end
185187
---@return CCarHandlingData|CBikeHandlingData|CFlyingHandlingData|any
186188
function CVehicle:GetSubHandlingData(handlingType)
187189
return self:__safecall(nil, function()
188-
for _, sub_ptr in self.m_sub_handling_data:Iter() do
190+
local array = self.m_sub_handling_data
191+
for i = 1, array:Size() do
192+
local sub_ptr = array:At(i)
189193
if (sub_ptr:is_valid()) then
190194
-- local base = CBaseSubHandlingData.new(sub_ptr)
191195
-- if (base and base:GetHandlingType() == handlingType) then
@@ -440,7 +444,7 @@ function CVehicle:GetWheel(index)
440444
return
441445
end
442446

443-
local ptr = self.m_wheels:Get(index)
447+
local ptr = self.m_wheels:At(index)
444448
if (not ptr or ptr:is_null()) then
445449
return
446450
end

SSV2/includes/classes/gta/CVehicleDrawData.lua

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,19 @@ end
7373
--------------------------------------
7474
-- Class: CVehicleDrawData
7575
--------------------------------------
76-
---@class CVehicleDrawData : fwDrawData
76+
---@class CVehicleDrawData
7777
---@field m_wheel_draw_data pointer_ref<CWheelDrawData>
7878
---@overload fun(ptr: pointer): CVehicleDrawData
79-
local CVehicleDrawData = Class("CVehicleDrawData", { parent = fwDrawData, pointer_ctor = true })
79+
local CVehicleDrawData = Class("CVehicleDrawData", { pointer_ctor = true })
8080

8181
---@param ptr pointer
8282
---@return CVehicleDrawData
8383
function CVehicleDrawData:init(ptr)
84-
self.m_ptr = ptr
85-
self.m_wheel_draw_data = ptr:add(0x370)
86-
return self
84+
return setmetatable({
85+
m_ptr = ptr,
86+
m_wheel_draw_data = ptr:add(0x370)
87+
---@diagnostic disable-next-line: param-type-mismatch
88+
}, CVehicleDrawData)
8789
end
8890

8991
---@return CWheelDrawData

SSV2/includes/classes/gta/CWheel.lua

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,14 @@ function CWheel:SetConfigFlag(flag, toggle)
266266
end)
267267
end
268268

269+
---@return boolean
270+
function CWheel:IsLeftWheel()
271+
return self:GetConfigFlag(Enums.eWheelConfigFlags.LEFTWHEEL)
272+
end
273+
274+
---@return boolean
275+
function CWheel:IsRearWheel()
276+
return self:GetConfigFlag(Enums.eWheelConfigFlags.REARWHEEL)
277+
end
278+
269279
return CWheel

SSV2/includes/classes/gta/atArray.lua

Lines changed: 43 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
---@ignore
1414
---@generic T
1515
---@class atArray<T>
16-
---@field private m_address pointer
16+
---@field protected m_ptr pointer
1717
---@field private m_data_ptr pointer
18+
---@field private m_data array<pointer_ref<T>>
1819
---@field private m_size uint16_t
19-
---@field private m_count uint16_t
20-
---@field private m_data array<pointer>
20+
---@field private m_capacity uint16_t
2121
---@field private m_data_type any
22-
---@field private m_last_update_time TimePoint
2322
---@overload fun(address: pointer, data_type?: any): atArray
2423
local atArray = {
2524
__type = "atArray",
@@ -35,46 +34,44 @@ setmetatable(atArray, {
3534
})
3635

3736
---@generic T
38-
---@param address pointer
37+
---@param ptr pointer
3938
---@param data_type optional<T>
4039
---@return atArray<T>
41-
function atArray.new(address, data_type)
40+
function atArray.new(ptr, data_type)
4241
local instance = setmetatable({
43-
m_address = nullptr,
42+
m_ptr = ptr,
4443
m_data_ptr = nullptr,
45-
m_size = 0x0,
46-
m_count = 0x0,
44+
m_size = 0,
45+
m_capacity = 0,
4746
m_data = {},
4847
m_data_type = nil
49-
---@diagnostic disable-next-line
48+
---@diagnostic disable-next-line: param-type-mismatch
5049
}, atArray)
5150

52-
if not (IsInstance(address, "pointer") and address:is_valid()) then
51+
if (ptr:is_null()) then
5352
return instance
5453
end
5554

56-
local array_size = address:add(0x8):get_word()
55+
local array_size = ptr:add(0x8):get_word()
5756
if (array_size == 0) then
5857
return instance
5958
end
6059

61-
instance.m_address = address
62-
instance.m_data_ptr = address:deref()
63-
instance.m_size = array_size
64-
instance.m_count = address:add(0xA):get_word()
65-
instance.m_data_type = data_type
66-
instance.m_last_update_time = TimePoint:new()
60+
instance.m_data_ptr = ptr:deref()
61+
instance.m_size = array_size
62+
instance.m_capacity = ptr:add(0x10):get_word()
63+
instance.m_data_type = data_type
6764

6865
for i = 0, array_size - 1 do
69-
instance.m_data[i + 1] = instance.m_data_ptr:add(i * 0x8):deref()
66+
instance.m_data[i + 1] = instance.m_data_ptr:add(i * 0x8)
7067
end
7168

7269
return instance
7370
end
7471

7572
---@return boolean
7673
function atArray:IsValid()
77-
return self.m_address:is_valid() and self.m_data_ptr:is_valid()
74+
return self.m_ptr:is_valid() and self.m_data_ptr:is_valid()
7875
end
7976

8077
---@return boolean
@@ -84,56 +81,30 @@ end
8481

8582
---@return boolean
8683
function atArray:IsEmpty()
87-
self:Update()
8884
return self.m_size == 0
8985
end
9086

9187
function atArray:Clear()
92-
self.m_address = nullptr
88+
self.m_ptr = nullptr
9389
self.m_data_ptr = nullptr
90+
self.m_size = 0
91+
self.m_capacity = 0
9492
self.m_data = {}
95-
self.m_size = 0x0
96-
self.m_count = 0x0
9793
self.m_data_type = nil
98-
self.m_last_update_time:Reset()
99-
end
100-
101-
function atArray:Update()
102-
if not self:IsValid() then
103-
return
104-
end
105-
106-
if not self.m_last_update_time:HasElapsed(250) then
107-
return
108-
end
109-
110-
self.m_size = self.m_address:add(0x8):get_word()
111-
self.m_count = self.m_address:add(0xA):get_word()
112-
if (self.m_size == 0) then
113-
self.m_data = {}
114-
self.m_last_update_time:Reset()
115-
return
116-
end
117-
118-
for i = 0, self.m_size - 1 do
119-
self.m_data[i + 1] = self.m_data_ptr:add(i * 0x8):deref()
120-
end
121-
122-
self.m_last_update_time:Reset()
12394
end
12495

12596
---@return pointer|nil
12697
function atArray:GetPointer()
127-
if not self:IsValid() then
98+
if (not self:IsValid()) then
12899
return
129100
end
130101

131-
return self.m_address
102+
return self.m_ptr
132103
end
133104

134105
---@return pointer|nil
135106
function atArray:GetDataPointer()
136-
if not self:IsValid() then
107+
if (not self:IsValid()) then
137108
return
138109
end
139110

@@ -142,94 +113,72 @@ end
142113

143114
---@return uint64_t
144115
function atArray:GetAddress()
145-
return self:IsValid() and self.m_address:get_address() or 0x0
116+
return self:IsValid() and self.m_ptr:get_address() or 0x0
146117
end
147118

148119
---@return uint64_t
149120
function atArray:GetDataAddress()
150121
return self:IsValid() and self.m_data_ptr:get_address() or 0x0
151122
end
152123

153-
---@return uint16_t
154-
function atArray:Size()
155-
self:Update()
156-
return self.m_size
157-
end
158-
159-
---@return uint16_t
160-
function atArray:Count()
161-
self:Update()
162-
return self.m_count
163-
end
164-
165-
---@return uint16_t
166-
function atArray:DataSize()
167-
return SizeOf(self.m_data)
168-
end
169-
170124
---@return string
171-
function atArray:DataType()
125+
function atArray:GetDataType()
172126
local _t = "unknonwn"
173-
if (self.m_data_type and IsInstance(self.m_data_type.__type, "string")) then
127+
if (type(self.m_data_type) == "table" and self.m_data_type.__type) then
174128
_t = self.m_data_type.__type
175129
end
176130

177131
return _F("pointer<%s>", _t)
178132
end
179133

180-
---@param i number
181-
---@return pointer
182-
function atArray:Get(i)
183-
self:Update()
134+
---@param i integer
135+
---@return pointer<T>
136+
function atArray:At(i)
184137
assert(math.is_inrange(i, 1, self.m_size), "[atArray]: Index out of bounds!")
185-
return self.m_data[i]
138+
return self.m_data[i]:deref()
186139
end
187140

188-
---@param i number
189-
---@param v pointer
190-
function atArray:Set(i, v)
191-
self:Update()
192-
assert(math.is_inrange(i, 1, self.m_size), "[atArray]: Index out of bounds!")
193-
assert(IsInstance(v, "pointer"), "[atArray]: Attempt to set array value to non-pointer value!")
141+
---@return uint16_t
142+
function atArray:Size()
143+
return self.m_size
144+
end
194145

195-
self.m_data[i] = v
146+
---@return uint16_t
147+
function atArray:Capacity()
148+
return self.m_capacity
196149
end
197150

198-
---@return fun(): integer, pointer Iterator
151+
-- NOTE: As opposed to the `At` method, you must dereference the pointers returned by this iterator.
152+
---@return fun(): integer, pointer_ref<T> Iterator
199153
function atArray:Iter()
200-
self:Update()
201154
local i = 0
202-
203155
return function()
204156
i = i + 1
205-
if i <= self.m_size then
157+
if (i <= self.m_size) then
206158
return i, self.m_data[i]
207159
---@diagnostic disable-next-line: missing-return
208160
end
209161
end
210162
end
211163

164+
---@return fun(): integer, pointer<T> Iterator
212165
function atArray:__pairs()
213166
log.warning("[atArray]: Use of pairs! Please use atArray:Iter() instead.")
214167
return self:Iter()
215168
end
216169

217170
---@return integer
218171
function atArray:__len()
219-
self:Update()
220172
return self.m_size
221173
end
222174

223175
---@return string
224176
function atArray:__tostring()
225-
self:Update()
226177
local buffer = ""
227-
local data_type = self:DataType()
228-
178+
local __type = self:GetDataType()
229179
for i, data in self:Iter() do
230-
buffer = buffer .. _F("\n[%d] %s @ 0x%X>", i, data_type, data:get_address())
180+
buffer = buffer .. _F("\n[%d] %s* @ 0x%X>", i, __type, data:get_address())
231181
end
232-
233182
return buffer
234183
end
235184

0 commit comments

Comments
 (0)