L L4D2node

z_spawn_old

0x00a5f5b0 · 3783 bytes · __cdecl

_ZL11z_spawn_oldRK8CCommand

Decompiled

undefined (1 param)

/* z_spawn_old(CCommand const&) */

void z_spawn_old(CCommand *param_1)

{
  float fVar1;
  char *pcVar2;
  code *pcVar3;
  uint *puVar4;
  char cVar5;
  CBasePlayer *this;
  int iVar6;
  undefined1 *puVar7;
  int iVar8;
  int *piVar9;
  int *piVar10;
  bool bVar11;
  bool bVar12;
  bool bVar13;
  longdouble lVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  undefined4 local_158;
  long local_124;
  char *local_11c;
  int local_118;
  float local_104;
  float local_100;
  float local_fc;
  int *local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  Vector local_d0 [12];
  int *local_c4;
  float local_c0;
  float local_bc;
  float local_a4;
  char local_99;
  int *local_7c;
  float local_78;
  float local_74;
  float local_6c;
  float local_68;
  float local_64;
  float local_5c;
  float local_58;
  float local_54;
  float local_4c;
  float local_48;
  float local_44;
  undefined4 local_3c;
  undefined1 local_38;
  undefined1 local_37;
  
  this = (CBasePlayer *)UTIL_GetCommandClient();
  if (this == (CBasePlayer *)0x0) {
    return;
  }
  fVar1 = *(float *)(ZombieSpawnHeight._28_4_ + 0x2c);
  CBasePlayer::EyeVectors(this,(Vector *)&local_104,(Vector *)0x0,(Vector *)0x0);
  fVar17 = local_104 * 10000.0;
  fVar16 = local_100 * 10000.0;
  fVar15 = local_fc * 10000.0;
  (**(code **)(*(int *)this + 0x234))();
  (**(code **)(*(int *)this + 0x234))();
  piVar10 = (int *)&stack0xfffffeac;
  local_38 = 1;
  local_7c = local_f8;
  local_6c = (fVar17 - (float)local_f8) + local_ec;
  local_78 = local_f4;
  local_68 = (fVar16 - local_f4) + local_e8;
  local_74 = local_f0;
  local_3c = 0;
  local_64 = (fVar15 - local_f0) + local_e4;
  local_44 = 0.0;
  local_48 = 0.0;
  local_4c = 0.0;
  local_37 = local_68 * local_68 + local_6c * local_6c + local_64 * local_64 != 0.0;
  local_54 = 0.0;
  local_58 = 0.0;
  local_5c = 0.0;
  local_158 = 0xa5f785;
  CTraceFilterSimple::CTraceFilterSimple
            ((CTraceFilterSimple *)&local_e0,(IHandleEntity *)this,0,
             (_func_bool_IHandleEntity_ptr_int *)0x0);
  local_158 = 0xa5f7b5;
  (**(code **)(*enginetrace + 0x14))();
  if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
    local_158 = 0xa5f811;
    DebugDrawLine(local_d0,(Vector *)&local_c4,0xff,0,0,true,-1.0);
  }
  fVar15 = *(float *)(ZombieSpawnConstDistance._28_4_ + 0x2c);
  if (0.0 <= fVar15) {
    local_158 = 0xa5f872;
    (**(code **)(*(int *)this + 0x234))();
    piVar10 = &local_158;
    local_c0 = local_100 * fVar15 + local_78;
    local_bc = fVar15 * local_fc + local_74;
    local_c4 = (int *)(local_104 * fVar15 + (float)local_7c);
    local_a4 = *(float *)(ZombieSpawnConstDistance._28_4_ + 0x2c) * 0.0001;
  }
  if (local_a4 == 1.0) {
    return;
  }
  if (*(int *)param_1 < 2) {
    local_11c = "Common";
    bVar11 = false;
    local_118 = 0;
    local_124 = -1;
    bVar12 = false;
    bVar13 = false;
  }
  else {
    local_11c = *(char **)(param_1 + 0x40c);
    if (local_11c == "mob") {
LAB_00a5fec0:
      *piVar10 = TheDirector;
      piVar10[-1] = 0xa5fecd;
      iVar6 = CDirector::GetCommonInfectedLimit((CDirector *)*piVar10);
      piVar10[1] = iVar6;
      *piVar10 = TheZombieManager;
      piVar10[-1] = 0xa5fede;
      ZombieManager::SpawnMob((ZombieManager *)*piVar10,piVar10[1]);
      return;
    }
    piVar10[1] = (int)local_11c;
    *piVar10 = (int)"mob";
    piVar10[-1] = 0xa5f907;
    iVar6 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
    if (iVar6 == 0) goto LAB_00a5fec0;
    *piVar10 = (int)local_11c;
    piVar10[-1] = 0xa5f91d;
    local_118 = GetZombieClassFromName((char *)*piVar10);
    iVar6 = *(int *)param_1;
    if (iVar6 < 4) {
LAB_00a5f95c:
      local_124 = -1;
    }
    else {
      pcVar2 = *(char **)(param_1 + 0x410);
      if (pcVar2 == "wound") {
LAB_00a5f937:
        puVar7 = *(undefined1 **)(param_1 + 0x414);
      }
      else {
        piVar10[1] = (int)"wound";
        *piVar10 = (int)pcVar2;
        piVar10[-1] = 0xa5f952;
        iVar6 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
        if (iVar6 != 0) {
          iVar6 = *(int *)param_1;
          goto LAB_00a5f95c;
        }
        puVar7 = &DAT_00d539c2;
        if (3 < *(int *)param_1) goto LAB_00a5f937;
      }
      piVar10[2] = 10;
      piVar10[1] = 0;
      *piVar10 = (int)puVar7;
      piVar10[-1] = 0xa602c3;
      local_124 = strtol((char *)*piVar10,(char **)piVar10[1],piVar10[2]);
      iVar6 = *(int *)param_1;
    }
    if (iVar6 < 3) {
      bVar11 = false;
      bVar12 = false;
      bVar13 = false;
    }
    else {
      iVar6 = 2;
      bVar11 = false;
      bVar12 = false;
      bVar13 = false;
      do {
        if (!bVar13) {
          piVar10[1] = (int)"auto";
          *piVar10 = *(undefined4 *)(param_1 + iVar6 * 4 + 0x408);
          piVar10[-1] = 0xa60187;
          iVar8 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
          bVar13 = iVar8 == 0;
        }
        if (!bVar12) {
          puVar7 = &DAT_00d539c2;
          if (iVar6 < *(int *)param_1) {
            puVar7 = *(undefined1 **)(param_1 + iVar6 * 4 + 0x408);
          }
          piVar10[1] = (int)"ragdoll";
          *piVar10 = (int)puVar7;
          piVar10[-1] = 0xa60150;
          iVar8 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
          bVar12 = iVar8 == 0;
        }
        if (!bVar11) {
          puVar7 = &DAT_00d539c2;
          if (iVar6 < *(int *)param_1) {
            puVar7 = *(undefined1 **)(param_1 + iVar6 * 4 + 0x408);
          }
          piVar10[1] = (int)"area";
          *piVar10 = (int)puVar7;
          piVar10[-1] = 0xa5f9ce;
          iVar8 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
          bVar11 = iVar8 == 0;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 < *(int *)param_1);
    }
  }
  piVar10[1] = 0x43b40000;
  *piVar10 = 0;
  local_f8 = local_c4;
  local_f4 = local_c0;
  local_f0 = fVar1 + local_bc;
  piVar10[-1] = 0xa5fa28;
  lVar14 = (longdouble)RandomFloat();
  local_ec = 0.0;
  local_e8 = (float)lVar14;
  local_e4 = 0.0;
  if (g_bSpawnAtConstPos != '\0') {
    local_f8 = g_vConstSpawnPos;
    local_f4 = DAT_01028648;
    local_f0 = DAT_0102864c;
  }
  if (g_bSpawnAtConstAng != '\0') {
    local_e8 = g_flConstSpawnAng;
  }
  if (bVar13) {
    piVar10[3] = 0;
    piVar10[4] = (int)&local_f8;
    piVar10[2] = 5;
    piVar10[1] = local_118;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa5fade;
    cVar5 = ZombieManager::GetRandomPZSpawnPosition();
    if (cVar5 == '\0') {
      piVar10[2] = 5;
      *piVar10 = (int)"Couldn\'t find a %s Spawn position in %d tries\n";
      piVar10[1] = (int)local_11c;
      piVar10[-1] = 0xa602fe;
      Warning();
      return;
    }
  }
  iVar6 = *g_pGameRules;
  *piVar10 = (int)g_pGameRules;
  pcVar3 = *(code **)(iVar6 + 0x7c);
  piVar10[-1] = 0xa5faf3;
  iVar8 = (*pcVar3)();
  iVar6 = *g_pGameRules;
  *piVar10 = (int)g_pGameRules;
  pcVar3 = *(code **)(iVar6 + 0x7c);
  piVar10[-1] = 0xa5fb02;
  iVar6 = (*pcVar3)();
  local_6c = 0.0;
  local_68 = 0.0;
  local_64 = 0.0;
  local_3c = 0;
  local_37 = 0;
  local_4c = (*(float *)(iVar8 + 0x18) - *(float *)(iVar6 + 0xc)) * 0.5;
  local_48 = (*(float *)(iVar8 + 0x1c) - *(float *)(iVar6 + 0x10)) * 0.5;
  local_44 = (*(float *)(iVar8 + 0x20) - *(float *)(iVar6 + 0x14)) * 0.5;
  local_38 = local_48 * local_48 + local_4c * local_4c + local_44 * local_44 < 1e-06;
  local_5c = (*(float *)(iVar8 + 0x18) + *(float *)(iVar6 + 0xc)) * 0.5;
  local_7c = (int *)((float)local_f8 + local_5c);
  local_58 = (*(float *)(iVar8 + 0x1c) + *(float *)(iVar6 + 0x10)) * 0.5;
  local_78 = local_f4 + local_58;
  local_54 = (*(float *)(iVar8 + 0x20) + *(float *)(iVar6 + 0x14)) * 0.5;
  local_5c = -local_5c;
  local_58 = -local_58;
  local_74 = local_f0 + local_54;
  local_54 = -local_54;
  *piVar10 = (int)&local_e0;
  piVar10[3] = 0;
  piVar10[2] = 0;
  piVar10[1] = 0;
  piVar10[-1] = 0xa5fc43;
  CTraceFilterSimple::CTraceFilterSimple
            ((CTraceFilterSimple *)*piVar10,(IHandleEntity *)piVar10[1],piVar10[2],
             (_func_bool_IHandleEntity_ptr_int *)piVar10[3]);
  iVar6 = *enginetrace;
  piVar10[4] = (int)local_d0;
  piVar10[3] = (int)&local_e0;
  *piVar10 = (int)enginetrace;
  piVar10[2] = 0x202420b;
  piVar10[1] = (int)&local_7c;
  pcVar3 = *(code **)(iVar6 + 0x14);
  piVar10[-1] = 0xa5fc73;
  (*pcVar3)();
  if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
    piVar10[6] = -0x40800000;
    piVar10[1] = (int)&local_c4;
    piVar10[5] = 1;
    piVar10[4] = 0;
    piVar10[3] = 0xff;
    piVar10[2] = 0xff;
    *piVar10 = (int)local_d0;
    piVar10[-1] = 0xa5fcbf;
    DebugDrawLine((Vector *)*piVar10,(Vector *)piVar10[1],piVar10[2],piVar10[3],piVar10[4],
                  SUB41(piVar10[5],0),(float)piVar10[6]);
  }
  piVar10[6] = 0;
  piVar10[1] = (int)&local_f8;
  piVar10[5] = 1;
  piVar10[4] = 0;
  piVar10[3] = 0x461c4000;
  piVar10[2] = 0;
  *piVar10 = TheNavMesh;
  piVar10[-1] = 0xa5fcfe;
  iVar6 = CNavMesh::GetNearestNavArea
                    ((CNavMesh *)*piVar10,(Vector *)piVar10[1],SUB41(piVar10[2],0),(float)piVar10[3]
                     ,SUB41(piVar10[4],0),SUB41(piVar10[5],0),SUB41(piVar10[6],0));
  if (((local_99 != '\0') || (local_a4 < 1.0)) && (iVar6 != 0)) {
    piVar10[1] = iVar6;
    *piVar10 = (int)&local_7c;
    piVar10[-1] = 0xa601af;
    TerrorNavArea::FindRandomSpot();
    local_f8 = local_7c;
    local_f0 = fVar1 + local_74;
    local_f4 = local_78;
  }
  if (local_118 == 7) {
    if (bVar12) {
      *piVar10 = (int)"ragdoll flag is not implemented\n";
      piVar10[-1] = 0xa602dc;
      Warning();
    }
    s_ManualSpawn = 1;
    piVar10[2] = (int)&local_ec;
    piVar10[1] = (int)&local_f8;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa60291;
    ZombieManager::SpawnWitch((ZombieManager *)*piVar10,(Vector *)piVar10[1],(QAngle *)piVar10[2]);
    s_ManualSpawn = 0;
    return;
  }
  if (local_11c == "witch_bride") {
LAB_00a60228:
    s_ManualSpawn = 1;
    piVar10[2] = (int)&local_ec;
    piVar10[1] = (int)&local_f8;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa60250;
    ZombieManager::SpawnWitchBride
              ((ZombieManager *)*piVar10,(Vector *)piVar10[1],(QAngle *)piVar10[2]);
    s_ManualSpawn = 0;
    return;
  }
  piVar10[1] = (int)"witch_bride";
  *piVar10 = (int)local_11c;
  piVar10[-1] = 0xa5fd50;
  iVar8 = _V_stricmp((char *)*piVar10,(char *)piVar10[1]);
  if (iVar8 == 0) goto LAB_00a60228;
  if ((5 < local_118 - 1U) && (local_118 != 8)) {
    piVar10[1] = iVar6;
    piVar10[2] = (int)&local_f8;
    piVar10[3] = 0;
    s_ManualSpawn = 1;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa5fdab;
    piVar9 = (int *)ZombieManager::SpawnCommonZombie();
    if (piVar9 == (int *)0x0) {
      piVar10[6] = 0;
      piVar10[1] = (int)&local_f8;
      piVar10[5] = 1;
      piVar10[4] = 0;
      piVar10[3] = 0x461c4000;
      piVar10[2] = 0;
      *piVar10 = TheNavMesh;
      piVar10[-1] = 0xa60424;
      iVar6 = CNavMesh::GetNearestNavArea
                        ((CNavMesh *)*piVar10,(Vector *)piVar10[1],SUB41(piVar10[2],0),
                         (float)piVar10[3],SUB41(piVar10[4],0),SUB41(piVar10[5],0),
                         SUB41(piVar10[6],0));
      if (iVar6 == 0) {
        s_ManualSpawn = 0;
        return;
      }
      piVar10[1] = iVar6;
      *piVar10 = (int)&local_7c;
      piVar10[-1] = 0xa6043d;
      TerrorNavArea::FindRandomSpot();
      piVar10[2] = (int)&local_f8;
      local_f0 = fVar1 + local_74;
      local_f8 = local_7c;
      piVar10[3] = 0;
      piVar10[1] = iVar6;
      *piVar10 = TheZombieManager;
      local_f4 = local_78;
      piVar10[-1] = 0xa60492;
      ZombieManager::SpawnCommonZombie();
      s_ManualSpawn = 0;
      return;
    }
    s_ManualSpawn = 0;
    if (-1 < local_124) {
      iVar6 = *piVar9;
      *piVar10 = (int)piVar9;
      pcVar3 = *(code **)(iVar6 + 0x14c);
      piVar10[-1] = 0xa5fdd1;
      iVar6 = (*pcVar3)();
      fVar16 = DAT_01053d50;
      fVar15 = DAT_01053d4c;
      fVar1 = vec3_origin;
      if (iVar6 != 0) {
        if (((vec3_origin != *(float *)(iVar6 + 0x1cdc)) ||
            (DAT_01053d4c != *(float *)(iVar6 + 0x1ce0))) ||
           (DAT_01053d50 != *(float *)(iVar6 + 0x1ce4))) {
          if (*(char *)(iVar6 + 0x6c) == '\0') {
            puVar4 = *(uint **)(iVar6 + 0x30);
            if (puVar4 != (uint *)0x0) {
              *puVar4 = *puVar4 | 0x101;
              *piVar10 = (int)puVar4;
              piVar10[-1] = 0xa60375;
              iVar8 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*piVar10);
              *(undefined2 *)(iVar8 + 2) = 0;
            }
          }
          else {
            *(byte *)(iVar6 + 0x70) = *(byte *)(iVar6 + 0x70) | 1;
          }
          *(float *)(iVar6 + 0x1cdc) = fVar1;
          *(float *)(iVar6 + 0x1ce0) = fVar15;
          *(float *)(iVar6 + 0x1ce4) = fVar16;
        }
        *piVar10 = iVar6;
        piVar10[1] = local_124;
        piVar10[-1] = 0xa5fe28;
        Infected::RequestWound((Infected *)*piVar10,piVar10[1]);
      }
    }
    if (!bVar12) {
      return;
    }
    piVar10[5] = 0;
    *piVar10 = (int)&local_7c;
    piVar10[4] = 1;
    piVar10[3] = 0x461c4000;
    piVar10[2] = (int)piVar9;
    piVar10[1] = (int)piVar9;
    piVar10[-1] = 0xa5fe5c;
    CTakeDamageInfo::CTakeDamageInfo
              ((CTakeDamageInfo *)*piVar10,(CBaseEntity *)piVar10[1],(CBaseEntity *)piVar10[2],
               (float)piVar10[3],piVar10[4],piVar10[5]);
    local_e0 = 0;
    local_dc = 0;
    local_d8 = 0x3f800000;
    iVar6 = *piVar9;
    piVar10[2] = (int)&local_e0;
    piVar10[1] = (int)&local_7c;
    *piVar10 = (int)piVar9;
    pcVar3 = *(code **)(iVar6 + 0x4dc);
    piVar10[-1] = 0xa5fe96;
    (*pcVar3)();
    return;
  }
  if (bVar12) {
    *piVar10 = (int)"ragdoll flag is not implemented";
    piVar10[-1] = 0xa6030f;
    Warning();
  }
  local_7c = (int *)0x0;
  local_78 = 0.0;
  local_74 = (float)local_118;
  *piVar10 = (int)&local_7c;
  piVar10[-1] = 0xa5ff1f;
  ForEachTerrorPlayer<SpawnablePZScan>((SpawnablePZScan *)*piVar10);
  if (local_7c != (int *)0x0) {
    piVar10[1] = 6;
    *piVar10 = (int)local_7c;
    piVar10[-1] = 0xa5ff3a;
    CCSPlayer::State_Transition();
    piVar9 = local_7c;
    if (local_7c != (int *)0x0) {
      if ((*(int *)(ZombieDebugTankSpawn._28_4_ + 0x30) == 0) && (local_118 == 8))
      goto LAB_00a5ff62;
      if (*(int *)(tank_raffle_debug._28_4_ + 0x30) == 0) {
        piVar10[1] = 0;
        *piVar10 = (int)local_7c;
        piVar10[-1] = 0xa5ffd9;
        CCSPlayer::State_Transition();
        *piVar10 = (int)piVar9;
        piVar10[1] = (int)&local_f8;
        piVar10[-1] = 0xa5ffeb;
        CBaseEntity::SetAbsOrigin((CBaseEntity *)*piVar10,(Vector *)piVar10[1]);
        *piVar10 = (int)piVar9;
        piVar10[1] = (int)&local_ec;
        piVar10[-1] = 0xa5fffd;
        CBaseEntity::SetAbsAngles((CBaseEntity *)*piVar10,(QAngle *)piVar10[1]);
        if ((*(byte *)((int)piVar9 + 0x14d) & 8) != 0) {
          *piVar10 = (int)piVar9;
          piVar10[-1] = 0xa603de;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar10);
        }
        iVar8 = TheZombieManager;
        *(int *)(TheZombieManager + 0x27c) = piVar9[0xb8];
        g_ZombieClass = local_118;
        *(int *)(iVar8 + 0x280) = piVar9[0xb9];
        iVar6 = piVar9[0xba];
        *(undefined1 *)(iVar8 + 0x288) = 1;
        *(int *)(iVar8 + 0x284) = iVar6;
        iVar6 = *piVar9;
        *(undefined1 *)((int)piVar9 + 0x3fe1) = 1;
        piVar9[0xff9] = -1;
        piVar9[0xffa] = -0x40800000;
        *piVar10 = (int)piVar9;
        pcVar3 = *(code **)(iVar6 + 100);
        piVar10[-1] = 0xa60075;
        (*pcVar3)();
        iVar6 = *(int *)(z_spawn_health._28_4_ + 0x30);
        if ((0 < iVar6) && (iVar6 != piVar9[0x40])) {
          iVar8 = *piVar9;
          *piVar10 = (int)piVar9;
          piVar10[1] = (int)(piVar9 + 0x40);
          pcVar3 = *(code **)(iVar8 + 0x214);
          piVar10[-1] = 0xa6009f;
          (*pcVar3)();
          piVar9[0x40] = iVar6;
        }
        iVar6 = *piVar9;
        piVar10[3] = (int)&vec3_origin;
        piVar10[2] = (int)&local_ec;
        piVar10[1] = (int)&local_f8;
        *piVar10 = (int)piVar9;
        pcVar3 = *(code **)(iVar6 + 0x1dc);
        piVar10[-1] = 0xa600cc;
        (*pcVar3)();
        *(undefined1 *)(TheZombieManager + 0x288) = 0;
        return;
      }
    }
  }
  s_ManualSpawn = 1;
  if (local_118 != 8) {
    piVar10[3] = (int)&local_ec;
    if ((iVar6 != 0) && (bVar11)) {
      piVar10[2] = iVar6;
      piVar10[1] = local_118;
      *piVar10 = TheZombieManager;
      piVar10[-1] = 0xa6012b;
      ZombieManager::SpawnSpecial();
      s_ManualSpawn = 0;
      return;
    }
    piVar10[2] = (int)&local_f8;
    piVar10[1] = local_118;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa60339;
    ZombieManager::SpawnSpecial();
    s_ManualSpawn = 0;
    return;
  }
LAB_00a5ff62:
  s_ManualSpawn = 1;
  if ((iVar6 == 0) || (!bVar11)) {
    piVar10[2] = (int)&local_ec;
    piVar10[1] = (int)&local_f8;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa603d1;
    iVar6 = ZombieManager::SpawnTank
                      ((ZombieManager *)*piVar10,(Vector *)piVar10[1],(QAngle *)piVar10[2]);
  }
  else {
    piVar10[3] = 0;
    piVar10[2] = (int)&local_ec;
    piVar10[1] = iVar6;
    *piVar10 = TheZombieManager;
    piVar10[-1] = 0xa5ff97;
    iVar6 = ZombieManager::SpawnTank
                      ((ZombieManager *)*piVar10,(TerrorNavArea *)piVar10[1],(QAngle *)piVar10[2],
                       SUB41(piVar10[3],0));
  }
  piVar10[1] = iVar6;
  piVar10[2] = 1;
  *piVar10 = TheDirector;
  piVar10[-1] = 0xa5ffb0;
  CDirector::TryOfferingTankBot((CDirector *)*piVar10,(CBaseEntity *)piVar10[1],SUB41(piVar10[2],0))
  ;
  s_ManualSpawn = 0;
  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)