|
173 | 173 | { |
174 | 174 | // https://asherkin.github.io/vtable/ |
175 | 175 | // search string: "func_pushable" and you can find CBaseTrigger::PassesTriggerFilters / CBaseVPhysicsTrigger::PassesTriggerFilters. Follow references to these functions to find the vtable and then calculate the offset... |
176 | | - // CHECKED 2025-02-19 |
177 | 176 | "CBaseTrigger::PassesTriggerFilters" |
178 | 177 | { |
179 | 178 | "windows" "203" |
|
183 | 182 | } |
184 | 183 | // https://asherkin.github.io/vtable/ (if updated) |
185 | 184 | // search string: "start %f %f %f" and then check the function call offsets above it and convert them to vtable offsets (divide by 4 most likely or whatever) |
186 | | - // CHECKED 2025-02-19 |
187 | 185 | "CCSPlayer::GetPlayerMaxSpeed" |
188 | 186 | { |
189 | 187 | "windows" "445" |
|
194 | 192 | } |
195 | 193 | // https://asherkin.github.io/vtable/ |
196 | 194 | // search string: "Invalid counterterrorist spawnpoint" and then look for the first function call in each iteration of the loop |
197 | | - // CHECKED 2025-02-19 |
198 | 195 | "CGameRules::IsSpawnPointValid" |
199 | 196 | { |
200 | 197 | "windows" "76" |
|
205 | 202 | } |
206 | 203 | // https://asherkin.github.io/vtable/ |
207 | 204 | // search string: "water" to find CBasePlayer::UpdateStepSound. At the bottom there's a vtable call to ::PlayStepSound. Grab that, divide by 4, subtract 1. Bam, UpdateStepSound... |
208 | | - // CHECKED 2025-02-19 |
209 | 205 | "CBasePlayer::UpdateStepSound" |
210 | 206 | { |
211 | 207 | "windows" "364" |
|
241 | 237 | // } |
242 | 238 | // return 1; |
243 | 239 | // } |
244 | | - // CHECKED 2025-02-19 |
245 | 240 | "CCSPlayer::m_lastStandingPos" |
246 | 241 | { |
247 | 242 | "windows" "6016" |
|
250 | 245 | "linux64" "6688" // +48 wow that's easy! |
251 | 246 | } |
252 | 247 | // find CCSPlayer::CanGrabLadder via 4096.0f or symbols on linux... |
253 | | - // CHECKED 2025-02-19 |
254 | 248 | "CCSPlayer::m_ladderSurpressionTimer" |
255 | 249 | { |
256 | 250 | "windows" "6032" |
|
259 | 253 | "linux64" "6716" // +48 wow that's easy! |
260 | 254 | } |
261 | 255 | // find CCSPlayer::CanGrabLadder via 4096.0f or symbols on linux... |
262 | | - // CHECKED 2025-02-19 |
263 | 256 | "CCSPlayer::m_lastLadderNormal" |
264 | 257 | { |
265 | 258 | "windows" "6044" |
|
268 | 261 | "linux64" "6720" // +48 wow that's easy! |
269 | 262 | } |
270 | 263 | // find CCSPlayer::CanGrabLadder via 4096.0f or symbols on linux... |
271 | | - // CHECKED 2025-02-19 |
272 | 264 | "CCSPlayer::m_lastLadderPos" |
273 | 265 | { |
274 | 266 | "windows" "6056" |
|
293 | 285 | "Signatures" |
294 | 286 | { |
295 | 287 | // search string: "ReloadEffect" to find CWeaponCSBase::SendReloadEvents and then CCSPlayer::DoAnimationEvent is probably the second to last function called there. |
296 | | - // CHECKED 2025-02-19 |
297 | 288 | "Player::DoAnimationEvent" |
298 | 289 | { |
299 | 290 | "windows" "\x55\x8B\xEC\x83\xEC\x0C\x89\x4D\x2A\x83\x7D\x2A\x02" |
|
302 | 293 | "linux64" "@_ZN9CCSPlayer16DoAnimationEventE17PlayerAnimEvent_ti" |
303 | 294 | } |
304 | 295 | // search string: "-nobots" (and then look for the function that also references "fill" and "match" (or just the function with 0 or 1 parameters...)) |
305 | | - // CHECKED 2025-02-19 |
306 | 296 | "BotManager::MaintainBotQuota" |
307 | 297 | { |
308 | 298 | "windows" "\x55\x8B\xEC\x83\xEC\x14\xFF\x15" |
|
312 | 302 | } |
313 | 303 | // search string: "Server is hibernating" to find SetHibernating and then go its references |
314 | 304 | // NOTE 2025-02-19: Function has been inlined on Windows into SV_Think... |
315 | | - // CHECKED 2025-02-19 |
316 | 305 | "CGameServer::UpdateHibernationState" |
317 | 306 | { |
318 | 307 | "library" "engine" |
|
324 | 313 | // search string: "remove 0x%p: %s-%s" to find PhysicsRemoveToucher. |
325 | 314 | // Find PhysicsCheckForEntityUntouch by checking the functions that call PhysicsRemoveToucher. |
326 | 315 | // (should be the function with one argument (this ptr)) |
327 | | - // CHECKED 2025-02-19 |
328 | 316 | "PhysicsCheckForEntityUntouch" |
329 | 317 | { |
330 | 318 | "windows" "\x55\x8B\xEC\x83\xEC\x08\x57\x8B\xF9\x8B\x87" |
|
334 | 322 | } |
335 | 323 | // search string: "Could not add bot to the game: Team is full" to find CCSBotManager::BotAddCommand and then follow the if-statement up to find the function call that was fall (because TeamFull()) |
336 | 324 | // protip: on csgo we just use mp_randomspawn instead. |
337 | | - // CHECKED 2025-02-19 |
338 | 325 | "CCSGameRules::TeamFull" |
339 | 326 | { |
340 | 327 | "windows" "\x55\x8B\xEC\x56\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x8B\x45\x2A\x83\xE8\x02" |
|
344 | 331 | } |
345 | 332 | // search string: "remove 0x%p: %s-%s (%d-%d) [%d in play, %d max]\n". |
346 | 333 | // function with one argument is PhysicsRemoveTouchedList |
347 | | - // CHECKED 2025-02-19 |
348 | 334 | "PhysicsRemoveTouchedList" |
349 | 335 | { |
350 | 336 | "windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x8B\x5D\x2A\x8B\x83" |
|
355 | 341 | // look for CGameMovement::CategorizePosition by searching for 140.0f |
356 | 342 | // and you will see something something `*(_DWORD*)(a1[1] + some_offset) = 0x3F800000` right at the top |
357 | 343 | // make a signature at "mov dword ptr[eax+some_offset], 3F800000h" |
358 | | - // CHECKED 2025-02-19 |
359 | 344 | "CBasePlayer->m_surfaceFriction" |
360 | 345 | { |
361 | 346 | "windows" "\xC7\x80\x2A\x2A\x2A\x2A\x00\x00\x80\x3F\x8B\x07" |
|
0 commit comments