Skip to content

Commit 01618f6

Browse files
committed
fix(BSV2): remove net id sync calls
1 parent 10fea57 commit 01618f6

9 files changed

Lines changed: 59 additions & 58 deletions

File tree

SSV2/includes/features/YimActionsV3.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -994,11 +994,10 @@ function YimActions.FXManager:StartPTFX(parent, ptfxData)
994994
return
995995
end
996996

997-
TaskWait(Game.RequestNamedPtfxAsset, ptfxData.dict)
998-
999-
local handle
1000-
if (Game.IsOnline() and parent ~= LocalPlayer:GetHandle()) then
1001-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(parent))
997+
local loaded, e = pcall(TaskWait, Game.RequestNamedPtfxAsset, ptfxData.dict)
998+
if (not loaded) then
999+
log.fwarning("[YimActions]: Failed to load partice effect: %s", e)
1000+
return
10021001
end
10031002

10041003
if (ptfxData.delay) then
@@ -1007,6 +1006,7 @@ function YimActions.FXManager:StartPTFX(parent, ptfxData)
10071006

10081007
GRAPHICS.USE_PARTICLE_FX_ASSET(ptfxData.dict)
10091008

1009+
local handle
10101010
if ENTITY.IS_ENTITY_A_PED(parent) then
10111011
handle = GRAPHICS.START_NETWORKED_PARTICLE_FX_LOOPED_ON_ENTITY_BONE(
10121012
ptfxData.name,

SSV2/includes/frontend/settings/debug_ui.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ local function DrawThreads()
192192
end
193193

194194
local function DrawPointers()
195-
local ptr_list, failed_ptr_list = PatternScanner:ListPointers()
195+
local ptr_list, failed_ptr_list = PatternScanner:ListPatterns()
196196
local total_count, failed_count = table.getlen(ptr_list), #failed_ptr_list
197197
local child_height = math.min(total_count * 65, GVars.ui.window_size.y - 30)
198198

SSV2/includes/modules/BSV2/Bodyguard.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ function Bodyguard.new(modelHash, name, spawnPos, weapon, godmode, noRagdoll, be
120120
Game.IsOnline(),
121121
false
122122
)
123+
123124
if (not ok or not Game.IsScriptHandle(handle)) then
124125
Notifier:ShowWarning("Billionaire Services", "Failed to create entity! Please try again later", true, 5)
125126
return
126127
end
127128

128129
if (Game.IsOnline()) then
129130
entities.take_control_of(handle, 500)
130-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(handle))
131131
end
132132

133133
-- ENTITY.SET_ENTITY_LOD_DIST(handle, 0xFFFF) -- huh?

SSV2/includes/modules/BSV2/EscortVehicle.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ function EscortVehicle.new(modelHash, groupName, godMode)
3636
local blipName = groupName or _F("Escort Vehicle (%s)", vehName)
3737
local r, g, b, _ = COL_VANTABLACK:AsRGBA() -- Vantablack
3838

39-
entities.take_control_of(veh, 300)
40-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(veh))
39+
if (Game.IsOnline()) then
40+
entities.take_control_of(veh, 300)
41+
end
42+
4143
Game.SetBlipSprite(blip, 229)
4244
Game.SetBlipName(blip, blipName)
4345

SSV2/includes/modules/BSV2/PrivateHeli.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ function PrivateHeli.spawn(model, spawnPos, godmode)
6363
if (Game.IsOnline()) then
6464
entities.take_control_of(pilot, 300)
6565
entities.take_control_of(handle, 300)
66-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(pilot))
67-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(handle))
6866
end
6967

7068
ENTITY.FREEZE_ENTITY_POSITION(pilot, false)

SSV2/includes/modules/BSV2/PrivateJet.lua

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,6 @@ function PrivateJet.spawn(model, airportData)
8686
entities.take_control_of(pilot, 300)
8787
entities.take_control_of(copilot, 300)
8888
entities.take_control_of(handle, 300)
89-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(pilot))
90-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(copilot))
91-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(handle))
9289
end
9390

9491
ENTITY.FREEZE_ENTITY_POSITION(pilot, false)

SSV2/includes/modules/BSV2/PrivateLimo.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ function PrivateLimo:Spawn(t_Data, spawnPos)
183183
return
184184
end
185185

186-
entities.take_control_of(driver, 300)
187-
entities.take_control_of(limo, 300)
188-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(driver))
189-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(limo))
186+
if (Game.IsOnline()) then
187+
entities.take_control_of(driver, 300)
188+
entities.take_control_of(limo, 300)
189+
end
190190

191191
ENTITY.FREEZE_ENTITY_POSITION(driver, false)
192192
ENTITY.SET_ENTITY_INVINCIBLE(driver, true)

SSV2/includes/services/CompanionManager.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ function CompanionManager:SpawnCompanion(pedModel, name, is_invincible, is_armed
101101
)
102102

103103
entities.take_control_of(handle, 300)
104-
Game.SyncNetworkID(NETWORK.NETWORK_GET_NETWORK_ID_FROM_ENTITY(handle))
105104
GroupManager:AddPedToGroup(handle)
106105
PED.SET_PED_AS_GROUP_MEMBER(handle, playerGroup)
107106
PED.SET_PED_NEVER_LEAVES_GROUP(handle, true)

SSV2/includes/services/PatternScanner.lua

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-- * Provide a copy of or a link to the original license (GPL-3.0 or later); see LICENSE.md or <https://www.gnu.org/licenses/>.
88

99

10+
--#region Pattern
1011
--------------------------------------
1112
-- Class: Pattern
1213
--------------------------------------
@@ -23,7 +24,7 @@
2324
---@field private m_address uint64_t
2425
---@field protected m_ptr pointer
2526
---@field private m_sig string
26-
---@field private m_func fun(ptr: pointer): any
27+
---@field private m_callback fun(ptr: pointer): any
2728
---@overload fun(name: string, ida_sig: string, func: fun(ptr: pointer): any): Pattern
2829
local Pattern = { __type = "Pattern" }
2930
Pattern.__index = Pattern
@@ -40,22 +41,22 @@ end
4041

4142
---@param name string
4243
---@param ida_sig string
43-
---@param func fun(ptr: pointer)
44+
---@param callback fun(ptr: pointer)
4445
---@return Pattern
45-
function Pattern.new(name, ida_sig, func)
46+
function Pattern.new(name, ida_sig, callback)
4647
return setmetatable({
47-
m_name = name,
48-
m_sig = ida_sig,
49-
m_ptr = nullptr,
50-
m_address = 0x0,
51-
m_func = func
48+
m_name = name,
49+
m_sig = ida_sig,
50+
m_ptr = nullptr,
51+
m_address = 0x0,
52+
m_callback = callback
5253
---@diagnostic disable-next-line: param-type-mismatch
5354
}, Pattern)
5455
end
5556

56-
-- Scans memory for this pointer's pattern and resolves its address.
57+
-- Scans memory for this pattern and resolves its address.
5758
--
58-
-- Logs a debug message if successful.
59+
-- Logs a debug messages on successful or failure.
5960
---@return boolean
6061
function Pattern:Scan()
6162
self.m_ptr = memory.scan_pattern(self.m_sig)
@@ -68,10 +69,10 @@ function Pattern:Scan()
6869

6970
log.fdebug("[PatternScanner]: Found %s at 0x%X", self.m_name, self.m_address)
7071

71-
if (type(self.m_func) == "function") then
72-
local ok, result = pcall(self.m_func, self.m_ptr)
72+
if (self.m_callback) then
73+
local ok, e = pcall(self.m_callback, self.m_ptr)
7374
if (not ok) then
74-
log.fwarning("[PatternScanner]: Resolver failed for %s: %s", self.m_name, result)
75+
log.fwarning("[PatternScanner]: Resolver failed for %s: %s", self.m_name, e)
7576
return false
7677
end
7778
end
@@ -84,6 +85,10 @@ function Pattern:GetAddress()
8485
return self.m_address
8586
end
8687

88+
--#endregion
89+
90+
--#region PatternScanner
91+
8792
---@enum eScannerState
8893
local eScannerState = {
8994
NONE = 0x0,
@@ -96,50 +101,48 @@ local eScannerState = {
96101
--------------------------------------
97102
-- A singleton manager for storing and lazy scanning multiple memory patterns.
98103
---@class PatternScanner : ClassMeta<PatternScanner>
99-
---@field private m_patterns dict<Pattern>
100-
---@field private m_failed_patterns array<Pattern>
101-
---@field private m_state eScannerState
104+
---@field protected m_patterns dict<Pattern>
105+
---@field protected m_failed_patterns array<Pattern>
106+
---@field protected m_state eScannerState
102107
---@field protected m_initialized boolean
103108
---@overload fun(): PatternScanner
104109
local PatternScanner = Class("PatternScanner")
105110

106111
---@return PatternScanner
107112
function PatternScanner:init()
108-
if (self.m_initialized) then
109-
log.warning("Attempt to create a second instance of a singleton (PatternScanner)")
110-
return self
111-
end
113+
if (self.m_initialized) then return self end
114+
if (_G.PatternScanner) then return _G.PatternScanner end
112115

113-
self.m_patterns = {}
114-
self.m_failed_patterns = {}
115-
self.m_state = eScannerState.NONE
116-
self.m_initialized = true
117-
return self
116+
return setmetatable({
117+
m_patterns = {},
118+
m_failed_patterns = {},
119+
m_state = eScannerState.NONE,
120+
m_initialized = true,
121+
---@diagnostic disable-next-line
122+
}, PatternScanner)
118123
end
119124

120125
-- Registers a new pattern to be scanned later.
121126
--
122127
-- If a pattern with the same name already exists, the new name will be concatenated with four random characters.
123128
---@param name string -- Unique name
124129
---@param sig string -- IDA signature
125-
---@param func fun(ptr: pointer) -- Resolver called with the found pointer.
126-
function PatternScanner:Add(name, sig, func)
130+
---@param callback fun(ptr: pointer) -- Resolver called with the found pointer.
131+
function PatternScanner:Add(name, sig, callback)
127132
if (self.m_patterns[name]) then
128133
name = name .. string.random(4)
129134
log.fwarning("[PatternScanner]: A pattern with the same name already exists. Renamed current to '%s'", name)
130135
end
131136

132-
self.m_patterns[name] = Pattern(name, sig, func)
137+
self.m_patterns[name] = Pattern(name, sig, callback)
133138
end
134139

135140
---@return Pattern?
136141
function PatternScanner:Get(name)
137142
return self.m_patterns[name]
138143
end
139144

140-
-- Scans all registered patterns asynchronously in a fiber.
141-
--
142-
-- Should be called on script init.
145+
-- Scans all registered patterns. Should be called on script init.
143146
function PatternScanner:Scan()
144147
if (self:IsBusy()) then
145148
log.debug("PatternScanner is busy at the moment. Try again later.")
@@ -159,7 +162,6 @@ function PatternScanner:Scan()
159162
if (not ptr:Scan()) then
160163
table.insert(self.m_failed_patterns, ptr)
161164
end
162-
163165
-- yield()
164166
end
165167

@@ -184,12 +186,11 @@ function PatternScanner:RetryScan()
184186

185187
ThreadManager:Run(function()
186188
local success = 0
187-
self.m_state = eScannerState.BUSY
189+
self.m_state = eScannerState.BUSY
188190

189191
for i = sizeof_failed, 1, -1 do
190-
local ptr = self.m_failed_patterns[i]
191-
192-
if (ptr:Scan()) then
192+
local pattern = self.m_failed_patterns[i]
193+
if (pattern:Scan()) then
193194
table.remove(self.m_failed_patterns, i)
194195
success = success + 1
195196
end
@@ -217,9 +218,13 @@ function PatternScanner:IsBusy()
217218
return self.m_state == eScannerState.BUSY
218219
end
219220

220-
---@return dict<Pattern>, array<Pattern>
221-
function PatternScanner:ListPointers()
221+
---@return dict<Pattern> patterns, array<Pattern> failed_patterns
222+
function PatternScanner:ListPatterns()
222223
return self.m_patterns, self.m_failed_patterns
223224
end
224225

225-
return PatternScanner()
226+
--#endregion
227+
228+
local singleInstance = PatternScanner()
229+
_G.PatternScanner = singleInstance
230+
return singleInstance

0 commit comments

Comments
 (0)