CBaseClient::ConnectionStart
0x000f87d0 · 2032 bytes · __thiscall
_ZN11CBaseClient15ConnectionStartEP11INetChannel
Decompiled
undefined (2 params)
/* CBaseClient::ConnectionStart(INetChannel*) */
void __thiscall CBaseClient::ConnectionStart(CBaseClient *this,INetChannel *param_1)
{
CBaseClient *pCVar1;
undefined4 *puVar2;
NET_SplitScreenUser *this_00;
undefined4 *puVar3;
int *piVar4;
CLC_CmdKeyValues *this_01;
int iVar5;
byte bVar6;
uint in_stack_ffffff98;
undefined4 local_58;
undefined4 local_54;
undefined4 local_50;
undefined4 local_4c;
undefined4 local_48;
undefined4 local_44;
undefined4 local_40;
undefined4 local_3c;
undefined4 local_38;
undefined4 local_34;
undefined1 local_30;
undefined8 local_2c;
undefined4 local_24;
undefined4 local_20;
bVar6 = 0;
puVar2 = CNetMessage::operator_new((CNetMessage *)0x58,in_stack_ffffff98);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
pCVar1 = this + 8;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
puVar2[2] = 0;
*puVar2 = &PTR__NET_Tick_002a1b28;
*(undefined1 *)(puVar2 + 1) = 0;
puVar2[0x14] = 0;
puVar2[0x15] = 0;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar2 = CNetMessage::operator_new((CNetMessage *)0x450,(uint)puVar2);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 1) = 1;
puVar2[2] = 0;
*puVar2 = &PTR__NET_StringCmd_002a17c8;
puVar2[0x13] = 0;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar2 = CNetMessage::operator_new((CNetMessage *)0x60,(uint)puVar2);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 1) = 1;
puVar2[2] = 0;
*puVar2 = &PTR__NET_SetConVar_002a1ca8;
puVar2[0x13] = 0;
puVar2[0x14] = 0;
puVar2[0x15] = 0;
puVar2[0x16] = 0;
puVar2[0x17] = 0;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar2 = CNetMessage::operator_new((CNetMessage *)0x80,(uint)puVar2);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 1) = 1;
puVar2[2] = 0;
*puVar2 = &PTR__NET_SignonState_002a1888;
puVar2[0x16] = 0;
puVar2[0x17] = 0;
puVar2[0x18] = 0;
puVar2[0x19] = 0;
puVar2[0x1a] = 0;
puVar2[0x1b] = 0;
puVar2[0x1c] = 0;
puVar2[0x1d] = 0;
puVar2[0x1e] = 0;
puVar2[0x1f] = 0;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
this_00 = CNetMessage::operator_new((CNetMessage *)0x50,(uint)puVar2);
/* try { // try from 000f8ab9 to 000f8abd has its CatchHandler @ 000f8fc0 */
NET_SplitScreenUser::NET_SplitScreenUser(this_00);
*(CBaseClient **)(this_00 + 0x48) = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x8c,(uint)this_00);
puVar2 = puVar3;
for (iVar5 = 0x23; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_ClientInfo_002a13a8;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar2 = CNetMessage::operator_new((CNetMessage *)0x94,(uint)puVar3);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 1) = 1;
puVar2[2] = 0;
*puVar2 = &PTR__CLC_Move_002a1348;
*(undefined1 *)(puVar2 + 0x17) = 0;
puVar2[0x16] = 0;
puVar2[0x18] = 0xffffffff;
puVar2[0x19] = 0;
/* try { // try from 000f8bce to 000f8bd2 has its CatchHandler @ 000f8ffc */
bf_write::bf_write((bf_write *)(puVar2 + 0x1f));
*(undefined1 *)(puVar2 + 1) = 0;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
piVar4 = CNetMessage::operator_new((CNetMessage *)0x94,(uint)puVar2);
piVar4[3] = 0;
piVar4[4] = 0;
piVar4[5] = 0;
piVar4[6] = 0;
piVar4[7] = 0;
piVar4[8] = 0;
piVar4[9] = 0;
piVar4[10] = 0;
piVar4[0xb] = 0;
piVar4[0xc] = 0;
*(undefined1 *)(piVar4 + 0xd) = 0;
piVar4[0xe] = 0;
piVar4[0xf] = 0;
piVar4[0x10] = 0;
piVar4[0x11] = 0;
*(undefined1 *)(piVar4 + 1) = 1;
piVar4[2] = 0;
*piVar4 = (int)&PTR__CLC_VoiceData_002a12e8;
*(undefined1 *)(piVar4 + 0x15) = 0;
piVar4[0x14] = 0;
piVar4[0x16] = -1;
piVar4[0x17] = 0;
/* try { // try from 000f8c8b to 000f8c8f has its CatchHandler @ 000f8fe4 */
bf_write::bf_write((bf_write *)(piVar4 + 0x1d));
*(undefined1 *)(piVar4 + 1) = 0;
piVar4[0x12] = (int)pCVar1;
piVar4[0x23] = 0;
piVar4[0x24] = 0;
local_2c = 0x3f50624dd2f1a9fc;
local_58 = 0;
local_54 = 0;
local_50 = 0;
local_4c = 0;
local_48 = 0;
local_44 = 0;
local_40 = 0;
local_3c = 0;
local_38 = 0;
local_34 = 0;
local_24 = 10;
local_20 = 0x800;
local_30 = 1;
(**(code **)(*piVar4 + 0x3c))(piVar4,&local_58);
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar2 = CNetMessage::operator_new((CNetMessage *)0x54,(uint)piVar4);
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[7] = 0;
puVar2[8] = 0;
puVar2[9] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xc] = 0;
*(undefined1 *)(puVar2 + 0xd) = 0;
puVar2[0xe] = 0;
puVar2[0xf] = 0;
puVar2[0x10] = 0;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 1) = 1;
puVar2[2] = 0;
*puVar2 = &PTR__CLC_BaselineAck_002a1468;
puVar2[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x8c,(uint)puVar2);
puVar2 = puVar3;
for (iVar5 = 0x23; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_ListenEvents_002a14c8;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x25c,(uint)puVar3);
puVar2 = puVar3;
for (iVar5 = 0x97; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_RespondCvarValue_002a1528;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x258,(uint)puVar3);
puVar2 = puVar3;
for (iVar5 = 0x96; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_FileCRCCheck_002a1588;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x60,(uint)puVar3);
puVar2 = puVar3;
for (iVar5 = 0x18; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_SplitPlayerConnect_002a15e8;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
puVar3 = CNetMessage::operator_new((CNetMessage *)0x50,(uint)puVar3);
puVar2 = puVar3;
for (iVar5 = 0x14; iVar5 != 0; iVar5 = iVar5 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + (uint)bVar6 * -2 + 1;
}
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xe] = 0;
puVar3[0xf] = 0;
*(undefined1 *)(puVar3 + 1) = 1;
*puVar3 = &PTR__CLC_LoadingProgress_002a1408;
puVar3[0x12] = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1);
this_01 = CNetMessage::operator_new((CNetMessage *)0x50,(uint)puVar3);
/* try { // try from 000f8fa4 to 000f8fa8 has its CatchHandler @ 000f8fd2 */
CLC_CmdKeyValues::CLC_CmdKeyValues(this_01,(KeyValues *)0x0);
*(CBaseClient **)(this_01 + 0x4c) = pCVar1;
(**(code **)(*(int *)param_1 + 0x78))(param_1,this_01);
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.