Skip to content

Commit 8a1f258

Browse files
committed
various fixes & remove/add some todo's
1 parent 9f81a40 commit 8a1f258

4 files changed

Lines changed: 63 additions & 62 deletions

File tree

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ RUN apt update && apt install -y clang-21
99
RUN ln -sf /usr/bin/clang-21 /usr/bin/clang && ln -sf /usr/bin/clang++-21 /usr/bin/clang++
1010
RUN git clone https://github.com/alliedmodders/ambuild
1111
RUN cd ambuild && python setup.py install && cd ..
12-
RUN git clone --recurse-submodules -b fix-submodule https://github.com/Vauff/metamod-source
12+
RUN git clone --recurse-submodules -b k/sourcehook_alternative https://github.com/alliedmodders/metamod-source
1313
RUN git config --global --add safe.directory /app
1414

1515
COPY ./docker-entrypoint.sh ./

src/cs2fixes.cpp

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
213213
bRequiredInitLoaded = false;
214214
}
215215

216-
loadEventsFromFileHook.AddGlobal(g_pCGameEventManagerVTable);
216+
loadEventsFromFileHook.AddGlobal((IGameEventManager2*)&g_pCGameEventManagerVTable);
217217

218218
g_pCEntitySystemVTable = (CEntitySystem*)modules::server->FindVirtualTable("CGameEntitySystem");
219219
if (!g_pCEntitySystemVTable)
@@ -222,7 +222,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
222222
bRequiredInitLoaded = false;
223223
}
224224

225-
spawnHook.AddGlobal(g_pCEntitySystemVTable);
225+
spawnHook.AddGlobal((CEntitySystem*)&g_pCEntitySystemVTable);
226226

227227
int offset = g_GameConfig->GetOffset("IGameTypes_CreateWorkshopMapGroup");
228228
if (offset == -1)
@@ -249,7 +249,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
249249
}
250250

251251
getTouchingListHook.Configure(offset);
252-
getTouchingListHook.AddGlobal(g_pCVPhys2WorldVTable);
252+
getTouchingListHook.AddGlobal((CVPhys2World*)&g_pCVPhys2WorldVTable);
253253

254254
g_pCCSPlayer_MovementServicesVTable = (CCSPlayer_MovementServices*)modules::server->FindVirtualTable("CCSPlayer_MovementServices");
255255
if (!g_pCCSPlayer_MovementServicesVTable)
@@ -266,7 +266,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
266266
}
267267

268268
checkMovingGroundHook.Configure(offset);
269-
checkMovingGroundHook.AddGlobal(g_pCCSPlayer_MovementServicesVTable);
269+
checkMovingGroundHook.AddGlobal((CCSPlayer_MovementServices*)&g_pCCSPlayer_MovementServicesVTable);
270270

271271
g_pCCSPlayer_WeaponServicesVTable = (CCSPlayer_WeaponServices*)modules::server->FindVirtualTable("CCSPlayer_WeaponServices");
272272
if (!g_pCCSPlayer_WeaponServicesVTable)
@@ -283,7 +283,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
283283
}
284284

285285
dropWeaponHook.Configure(offset);
286-
dropWeaponHook.AddGlobal(g_pCCSPlayer_WeaponServicesVTable);
286+
dropWeaponHook.AddGlobal((CCSPlayer_WeaponServices*)&g_pCCSPlayer_WeaponServicesVTable);
287287

288288
g_pCCSGameRulesVTable = (CCSGameRules*)modules::server->FindVirtualTable("CCSGameRules");
289289
if (!g_pCCSGameRulesVTable)
@@ -300,7 +300,8 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
300300
}
301301

302302
goToIntermissionHook.Configure(offset);
303-
goToIntermissionHook.AddGlobal(g_pCCSGameRulesVTable);
303+
// TODO: this crashes, borked in khook for some reason
304+
//goToIntermissionHook.AddGlobal((CCSGameRules*)&g_pCCSGameRulesVTable);
304305

305306
g_pCGamePlayerEquipVTable = (CGamePlayerEquip*)modules::server->FindVirtualTable("CGamePlayerEquip");
306307
if (!g_pCGamePlayerEquipVTable)
@@ -317,7 +318,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
317318
}
318319

319320
playerEquipUseHook.Configure(offset);
320-
playerEquipUseHook.AddGlobal(g_pCGamePlayerEquipVTable);
321+
playerEquipUseHook.AddGlobal((CGamePlayerEquip*)&g_pCGamePlayerEquipVTable);
321322

322323
offset = g_GameConfig->GetOffset("CBaseEntity::Precache");
323324
if (offset == -1)
@@ -327,7 +328,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
327328
}
328329

329330
playerEquipPrecacheHook.Configure(offset);
330-
playerEquipPrecacheHook.AddGlobal(g_pCGamePlayerEquipVTable);
331+
playerEquipPrecacheHook.AddGlobal((CGamePlayerEquip*)&g_pCGamePlayerEquipVTable);
331332

332333
g_pTriggerGravityVTable = (CTriggerGravity*)modules::server->FindVirtualTable("CTriggerGravity");
333334
if (!g_pTriggerGravityVTable)
@@ -337,7 +338,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
337338
}
338339

339340
triggerGravityPrecacheHook.Configure(offset);
340-
triggerGravityPrecacheHook.AddGlobal(g_pTriggerGravityVTable);
341+
triggerGravityPrecacheHook.AddGlobal((CTriggerGravity*)&g_pTriggerGravityVTable);
341342

342343
offset = g_GameConfig->GetOffset("CBaseEntity::EndTouch");
343344
if (offset == -1)
@@ -347,7 +348,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
347348
}
348349

349350
triggerGravityEndTouchHook.Configure(offset);
350-
triggerGravityEndTouchHook.AddGlobal(g_pTriggerGravityVTable);
351+
triggerGravityEndTouchHook.AddGlobal((CTriggerGravity*)&g_pTriggerGravityVTable);
351352

352353
g_pCCSPlayerPawnVTable = (CCSPlayerPawn*)modules::server->FindVirtualTable("CCSPlayerPawn");
353354
if (!g_pCCSPlayerPawnVTable)
@@ -364,7 +365,7 @@ bool CS2Fixes::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
364365
}
365366

366367
onTakeDamageAliveHook.Configure(offset);
367-
onTakeDamageAliveHook.AddGlobal(g_pCCSPlayerPawnVTable);
368+
onTakeDamageAliveHook.AddGlobal((CCSPlayerPawn*)&g_pCCSPlayerPawnVTable);
368369

369370
if (!bRequiredInitLoaded)
370371
{
@@ -461,19 +462,19 @@ bool CS2Fixes::Unload(char* error, size_t maxlen)
461462
startupServerHook.Remove(g_pNetworkServerService);
462463
checkTransmitHook.Remove(g_pSource2GameEntities);
463464
dispatchConCommandHook.Remove(g_pCVar);
464-
loadEventsFromFileHook.RemoveGlobal(g_pCGameEventManagerVTable);
465-
spawnHook.RemoveGlobal(g_pCEntitySystemVTable);
465+
loadEventsFromFileHook.RemoveGlobal((IGameEventManager2*)&g_pCGameEventManagerVTable);
466+
spawnHook.RemoveGlobal((CEntitySystem*)&g_pCEntitySystemVTable);
466467
setGameSpawnGroupMgrHook.Remove(GetNetworkGameServer());
467468
createWorkshopMapGroupHook.Remove(g_pGameTypes);
468-
getTouchingListHook.RemoveGlobal(g_pCVPhys2WorldVTable);
469-
checkMovingGroundHook.RemoveGlobal(g_pCCSPlayer_MovementServicesVTable);
470-
dropWeaponHook.RemoveGlobal(g_pCCSPlayer_WeaponServicesVTable);
471-
goToIntermissionHook.RemoveGlobal(g_pCCSGameRulesVTable);
472-
playerEquipUseHook.RemoveGlobal(g_pCGamePlayerEquipVTable);
473-
playerEquipPrecacheHook.RemoveGlobal(g_pCGamePlayerEquipVTable);
474-
triggerGravityPrecacheHook.RemoveGlobal(g_pTriggerGravityVTable);
475-
triggerGravityEndTouchHook.RemoveGlobal(g_pTriggerGravityVTable);
476-
onTakeDamageAliveHook.RemoveGlobal(g_pCCSPlayerPawnVTable);
469+
getTouchingListHook.RemoveGlobal((CVPhys2World*)&g_pCVPhys2WorldVTable);
470+
checkMovingGroundHook.RemoveGlobal((CCSPlayer_MovementServices*)&g_pCCSPlayer_MovementServicesVTable);
471+
dropWeaponHook.RemoveGlobal((CCSPlayer_WeaponServices*)&g_pCCSPlayer_WeaponServicesVTable);
472+
goToIntermissionHook.RemoveGlobal((CCSGameRules*)&g_pCCSGameRulesVTable);
473+
playerEquipUseHook.RemoveGlobal((CGamePlayerEquip*)&g_pCGamePlayerEquipVTable);
474+
playerEquipPrecacheHook.RemoveGlobal((CGamePlayerEquip*)&g_pCGamePlayerEquipVTable);
475+
triggerGravityPrecacheHook.RemoveGlobal((CTriggerGravity*)&g_pTriggerGravityVTable);
476+
triggerGravityEndTouchHook.RemoveGlobal((CTriggerGravity*)&g_pTriggerGravityVTable);
477+
onTakeDamageAliveHook.RemoveGlobal((CCSPlayerPawn*)&g_pCCSPlayerPawnVTable);
477478

478479
ConVar_Unregister();
479480

@@ -583,8 +584,8 @@ KHook::Return<void> CS2Fixes::Hook_DispatchConCommand(ICvar* pThis, ConCommandRe
583584

584585
if (!bGagged && !bSilent && !bFlooding)
585586
{
586-
auto originalFunc = *(std::function<void(ConCommandRef, const CCommandContext&, const CCommand&)>*)KHook::GetOriginalFunction();
587-
originalFunc(cmdHandle, ctx, args);
587+
// TODO: upstream issue
588+
//KHook::CallOriginal(&ICvar::DispatchConCommand, pThis, cmdHandle, ctx, args);
588589
}
589590
else if (bFlooding)
590591
{
@@ -732,8 +733,8 @@ KHook::Return<void> CS2Fixes::Hook_PostEventAbstract(IGameEventSystem* pThis, CS
732733

733734
uint64 clientMask = *(uint64*)clients & g_playerManager->GetSilenceSoundMask();
734735

735-
auto originalFunc = *(std::function<void(CSplitScreenSlot, bool, int, const uint64*, INetworkMessageInternal*, const CNetMessage*, unsigned long, NetChannelBufType_t)>*)KHook::GetOriginalFunction();
736-
originalFunc(nSlot, bLocalOnly, nClientCount, &clientMask, pEvent, msg, nSize, bufType);
736+
// TODO: upstream issue
737+
//KHook::CallOriginal(&IGameEventSystem::PostEventAbstract, pThis, nSlot, bLocalOnly, nClientCount, &clientMask, pEvent, msg, nSize, bufType);
737738

738739
msg->set_weapon_id(weapon_id);
739740
msg->set_sound_type(sound_type);
@@ -912,7 +913,6 @@ KHook::Return<bool> CS2Fixes::Hook_ClientConnect(IServerGameClients* pThis, CPla
912913
if (!g_playerManager->OnClientConnected(slot, xuid, pszNetworkID))
913914
return {KHook::Action::Supersede, false};
914915

915-
// TODO: verify true return isn't needed
916916
return {KHook::Action::Ignore};
917917
}
918918

@@ -1081,11 +1081,11 @@ KHook::Return<void> CS2Fixes::Hook_ApplyGameSettings(IServerGameDLL* pThis, KeyV
10811081
return {KHook::Action::Ignore};
10821082
}
10831083

1084-
KHook::Return<void> CS2Fixes::Hook_CreateWorkshopMapGroup(IGameTypes* pThis, const char* name, CUtlStringList& mapList)
1084+
KHook::Return<void> CS2Fixes::Hook_CreateWorkshopMapGroup(IGameTypes* pThis, const char* name, const CUtlStringList& mapList)
10851085
{
1086-
// TODO: does this even work? just guessing how param override might work in khook..
1086+
// TODO: this isn't working even with recall, upstream issue?
10871087
if (g_cvarVoteManagerEnable.Get() && g_pMapVoteSystem->IsMapListLoaded())
1088-
mapList = g_pMapVoteSystem->CreateWorkshopMapGroup();
1088+
KHook::Recall(KHook::Return<void>{KHook::Action::Ignore}, pThis, name, g_pMapVoteSystem->CreateWorkshopMapGroup());
10891089

10901090
return {KHook::Action::Ignore};
10911091
}
@@ -1126,7 +1126,6 @@ KHook::Return<bool> CS2Fixes::Hook_OnTakeDamage_Alive(CCSPlayerPawn* pPawn, CTak
11261126
pPawn->DropMapWeapons();
11271127
}
11281128

1129-
// TODO: verify true return isn't needed
11301129
return {KHook::Action::Ignore};
11311130
}
11321131

@@ -1240,7 +1239,6 @@ KHook::Return<int> CS2Fixes::Hook_LoadEventsFromFile(IGameEventManager2* pThis,
12401239
{
12411240
ExecuteOnce(g_gameEventManager = pThis);
12421241

1243-
// TODO: verify 0 return isn't needed
12441242
return {KHook::Action::Ignore};
12451243
}
12461244

src/cs2fixes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class CS2Fixes : public ISmmPlugin, public IMetamodListener, public ICS2Fixes
9696
KHook::Return<int> Hook_LoadEventsFromFile(IGameEventManager2* pThis, const char* filename, bool bSearchAll);
9797
KHook::Return<void> Hook_Spawn_Post(CEntitySystem* pThis, int nCount, const EntitySpawnInfo_t* pInfo);
9898
KHook::Return<void> Hook_SetGameSpawnGroupMgr(INetworkGameServer* pThis, IGameSpawnGroupMgr* pSpawnGroupMgr);
99-
KHook::Return<void> Hook_CreateWorkshopMapGroup(IGameTypes* pThis, const char* name, CUtlStringList& mapList);
99+
KHook::Return<void> Hook_CreateWorkshopMapGroup(IGameTypes* pThis, const char* name, const CUtlStringList& mapList);
100100
KHook::Return<void> Hook_GetTouchingList_Post(CVPhys2World* pThis, CUtlVector<TouchLinked_t>* pList, bool unknown);
101101
KHook::Return<void> Hook_CheckMovingGround(CCSPlayer_MovementServices* pThis, double frametime);
102102
KHook::Return<void> Hook_DropWeapon_Post(CCSPlayer_WeaponServices* pThis, CBasePlayerWeapon* pWeapon, Vector* pVecTarget, Vector* pVelocity);

src/entwatch.cpp

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,20 +1356,23 @@ void CEWHandler::CreateHooks()
13561356
return;
13571357
}
13581358

1359+
//TODO: these hooks crash with khook for some reason
1360+
return;
1361+
13591362
baseButtonUseHook.Configure(offset);
1360-
baseButtonUseHook.AddGlobal(g_pCBaseButtonVTable);
1363+
baseButtonUseHook.AddGlobal((CBaseEntity*)&g_pCBaseButtonVTable);
13611364

13621365
physBoxUseHook.Configure(offset);
1363-
physBoxUseHook.AddGlobal(g_pCPhysBoxVTable);
1366+
physBoxUseHook.AddGlobal((CBaseEntity*)&g_pCPhysBoxVTable);
13641367

13651368
rotButtonUseHook.Configure(offset);
1366-
rotButtonUseHook.AddGlobal(g_pCRotButtonVTable);
1369+
rotButtonUseHook.AddGlobal((CBaseEntity*)&g_pCRotButtonVTable);
13671370

13681371
momentaryRotButtonUseHook.Configure(offset);
1369-
momentaryRotButtonUseHook.AddGlobal(g_pCMomentaryRotButtonVTable);
1372+
momentaryRotButtonUseHook.AddGlobal((CBaseEntity*)&g_pCMomentaryRotButtonVTable);
13701373

13711374
physicalButtonUseHook.Configure(offset);
1372-
physicalButtonUseHook.AddGlobal(g_pCPhysicalButtonVTable);
1375+
physicalButtonUseHook.AddGlobal((CBaseEntity*)&g_pCPhysicalButtonVTable);
13731376

13741377
offset = g_GameConfig->GetOffset("CBaseEntity::StartTouch");
13751378

@@ -1380,13 +1383,13 @@ void CEWHandler::CreateHooks()
13801383
}
13811384

13821385
triggerTeleportStartTouchHook.Configure(offset);
1383-
triggerTeleportStartTouchHook.AddGlobal(g_pCTriggerTeleportVTable);
1386+
triggerTeleportStartTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
13841387

13851388
triggerOnceStartTouchHook.Configure(offset);
1386-
triggerOnceStartTouchHook.AddGlobal(g_pCTriggerOnceVTable);
1389+
triggerOnceStartTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
13871390

13881391
triggerMultipleStartTouchHook.Configure(offset);
1389-
triggerMultipleStartTouchHook.AddGlobal(g_pCTriggerMultipleVTable);
1392+
triggerMultipleStartTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
13901393

13911394
offset = g_GameConfig->GetOffset("CBaseEntity::Touch");
13921395

@@ -1397,13 +1400,13 @@ void CEWHandler::CreateHooks()
13971400
}
13981401

13991402
triggerTeleportTouchHook.Configure(offset);
1400-
triggerTeleportTouchHook.AddGlobal(g_pCTriggerTeleportVTable);
1403+
triggerTeleportTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
14011404

14021405
triggerOnceTouchHook.Configure(offset);
1403-
triggerOnceTouchHook.AddGlobal(g_pCTriggerOnceVTable);
1406+
triggerOnceTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
14041407

14051408
triggerMultipleTouchHook.Configure(offset);
1406-
triggerMultipleTouchHook.AddGlobal(g_pCTriggerMultipleVTable);
1409+
triggerMultipleTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
14071410

14081411
offset = g_GameConfig->GetOffset("CBaseEntity::EndTouch");
14091412

@@ -1414,31 +1417,31 @@ void CEWHandler::CreateHooks()
14141417
}
14151418

14161419
triggerTeleportEndTouchHook.Configure(offset);
1417-
triggerTeleportEndTouchHook.AddGlobal(g_pCTriggerTeleportVTable);
1420+
triggerTeleportEndTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
14181421

14191422
triggerOnceEndTouchHook.Configure(offset);
1420-
triggerOnceEndTouchHook.AddGlobal(g_pCTriggerOnceVTable);
1423+
triggerOnceEndTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
14211424

14221425
triggerMultipleEndTouchHook.Configure(offset);
1423-
triggerMultipleEndTouchHook.AddGlobal(g_pCTriggerMultipleVTable);
1426+
triggerMultipleEndTouchHook.AddGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
14241427
}
14251428

14261429
void CEWHandler::RemoveHooks()
14271430
{
1428-
baseButtonUseHook.RemoveGlobal(g_pCBaseButtonVTable);
1429-
physBoxUseHook.RemoveGlobal(g_pCPhysBoxVTable);
1430-
rotButtonUseHook.RemoveGlobal(g_pCRotButtonVTable);
1431-
momentaryRotButtonUseHook.RemoveGlobal(g_pCMomentaryRotButtonVTable);
1432-
physicalButtonUseHook.RemoveGlobal(g_pCPhysicalButtonVTable);
1433-
triggerTeleportStartTouchHook.RemoveGlobal(g_pCTriggerTeleportVTable);
1434-
triggerOnceStartTouchHook.RemoveGlobal(g_pCTriggerOnceVTable);
1435-
triggerMultipleStartTouchHook.RemoveGlobal(g_pCTriggerMultipleVTable);
1436-
triggerTeleportTouchHook.RemoveGlobal(g_pCTriggerTeleportVTable);
1437-
triggerOnceTouchHook.RemoveGlobal(g_pCTriggerOnceVTable);
1438-
triggerMultipleTouchHook.RemoveGlobal(g_pCTriggerMultipleVTable);
1439-
triggerTeleportEndTouchHook.RemoveGlobal(g_pCTriggerTeleportVTable);
1440-
triggerOnceEndTouchHook.RemoveGlobal(g_pCTriggerOnceVTable);
1441-
triggerMultipleEndTouchHook.RemoveGlobal(g_pCTriggerMultipleVTable);
1431+
baseButtonUseHook.RemoveGlobal((CBaseEntity*)&g_pCBaseButtonVTable);
1432+
physBoxUseHook.RemoveGlobal((CBaseEntity*)&g_pCPhysBoxVTable);
1433+
rotButtonUseHook.RemoveGlobal((CBaseEntity*)&g_pCRotButtonVTable);
1434+
momentaryRotButtonUseHook.RemoveGlobal((CBaseEntity*)&g_pCMomentaryRotButtonVTable);
1435+
physicalButtonUseHook.RemoveGlobal((CBaseEntity*)&g_pCPhysicalButtonVTable);
1436+
triggerTeleportStartTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
1437+
triggerOnceStartTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
1438+
triggerMultipleStartTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
1439+
triggerTeleportTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
1440+
triggerOnceTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
1441+
triggerMultipleTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
1442+
triggerTeleportEndTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerTeleportVTable);
1443+
triggerOnceEndTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerOnceVTable);
1444+
triggerMultipleEndTouchHook.RemoveGlobal((CBaseEntity*)&g_pCTriggerMultipleVTable);
14421445
}
14431446

14441447
KHook::Return<void> CEWHandler::Hook_Touch(CBaseEntity* pThis, CBaseEntity* pOther)

0 commit comments

Comments
 (0)