L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)