L L4D2node

banid

0x001f0ce0 · 1890 bytes · __cdecl

_ZL5banidRK8CCommand

Decompiled

undefined (1 param)

/* banid(CCommand const&) */

void banid(CCommand *param_1)

{
  code *pcVar1;
  code *pcVar2;
  bool bVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  int *piVar9;
  uint uVar10;
  int *piVar11;
  int *piVar12;
  int *piVar13;
  char *pcVar14;
  int iVar15;
  int in_GS_OFFSET;
  bool bVar16;
  longdouble lVar17;
  undefined4 local_1d0;
  undefined1 *local_1a4;
  undefined4 *local_1a0;
  undefined4 local_188 [4];
  undefined4 local_178 [6];
  char local_160 [64];
  undefined1 local_120 [256];
  int local_20;
  
  piVar13 = (int *)&stack0xfffffe34;
  piVar12 = (int *)&stack0xfffffe34;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_1d0 = 0x1f0cff;
  iVar5 = Steam3Server();
  if (*(int *)(iVar5 + 0x98) == 1) {
    local_1d0 = 0x1f127c;
    ConMsg("Can\'t ban users on a LAN\n");
    goto LAB_001f0e78;
  }
  if (5 < *(int *)param_1 - 3U) {
    local_1d0 = 0x1f0e6c;
    ConMsg("Usage:  banid < minutes > < userid | uniqueid > { kick }\n");
    local_1d0 = 0x1f0e78;
    ConMsg("Use 0 minutes for permanent\n");
    piVar12 = (int *)&stack0xfffffe34;
    goto LAB_001f0e78;
  }
  local_1d0 = 0x1f0d28;
  lVar17 = (longdouble)V_atof(*(char **)(param_1 + 0x40c));
  local_1a4 = (undefined1 *)(float)lVar17;
  if ((float)local_1a4 < 0.01) {
    local_1a4 = (undefined1 *)0x0;
  }
  pcVar14 = "";
  if (2 < *(int *)param_1) {
    pcVar14 = *(char **)(param_1 + 0x410);
  }
  local_1d0 = 0x1f0d85;
  iVar5 = V_strncmp(pcVar14,"#",1);
  if (iVar5 == 0) {
    local_1d0 = 0x1f125c;
    ConMsg("Usage:  banid < minutes > < userid | uniqueid > { kick }\n");
    local_1d0 = 0x1f1268;
    ConMsg("No # necessary\n");
    piVar12 = (int *)&stack0xfffffe34;
    goto LAB_001f0e78;
  }
  bVar16 = false;
  if (3 < *(int *)param_1) {
    local_1d0 = 0x1f0db2;
    iVar5 = V_strcasecmp(*(char **)(param_1 + *(int *)param_1 * 4 + 0x404),"kick");
    bVar16 = iVar5 == 0;
  }
  if ((byte)(*pcVar14 - 0x30U) < 10) {
    local_1d0 = 0x1f0e98;
    iVar5 = V_atoi(pcVar14);
LAB_001f0e9a:
    if (DAT_003b8080 < 1) {
      piVar11 = (int *)0x0;
    }
    else {
      iVar15 = 0;
      do {
        piVar11 = *(int **)(DAT_003b8074 + iVar15 * 4);
        if (piVar11 != (int *)0x0) {
          local_1d0 = 0x1f0ed3;
          cVar4 = (**(code **)(*piVar11 + 0x74))();
          if (cVar4 != '\0') {
            local_1d0 = 0x1f0edf;
            cVar4 = (**(code **)(*piVar11 + 0x6c))();
            if (cVar4 != '\0') {
              local_1d0 = 0x1f0eeb;
              cVar4 = (**(code **)(*piVar11 + 0x70))();
              if (cVar4 != '\0') {
                local_1d0 = 0x1f0ef7;
                cVar4 = (**(code **)(*piVar11 + 0x78))();
                if (cVar4 == '\0') {
                  if (iVar5 == -1) {
                    local_1d0 = 0x1f11fb;
                    pcVar14 = (char *)(**(code **)(*piVar11 + 0x2c))();
                    local_1d0 = 0x1f120d;
                    iVar6 = _V_stricmp(pcVar14,local_160);
                    if (iVar6 == 0) goto LAB_001f0f10;
                  }
                  else {
                    local_1d0 = 0x1f0f0c;
                    iVar6 = (**(code **)(*piVar11 + 0x14))();
                    if (iVar5 == iVar6) {
LAB_001f0f10:
                      local_1d0 = 0x1f0f22;
                      (**(code **)(*piVar11 + 0x18))();
                      bVar3 = true;
                      piVar13 = &local_1d0;
                      local_1a0 = local_188;
                      goto LAB_001f0f68;
                    }
                  }
                }
              }
            }
          }
        }
        iVar15 = iVar15 + 1;
      } while (iVar15 < DAT_003b8080);
    }
    if (iVar5 == -1) {
      local_1d0 = 0x1f1413;
      local_1a0 = (undefined4 *)Filter_StringToUserID(local_160);
      bVar3 = false;
      if (local_1a0 == (undefined4 *)0x0) {
        local_1d0 = 0x1f1438;
        ConMsg("banid:  Couldn\'t resolve uniqueid \"%s\".\n");
        local_1d0 = 0x1f1444;
        ConMsg("Usage:  banid < minutes > < userid | uniqueid > { kick }\n");
        local_1d0 = 0x1f1450;
        ConMsg("Use 0 minutes for permanent\n");
        piVar12 = (int *)&stack0xfffffe34;
      }
      else {
LAB_001f0f68:
        piVar12 = piVar13;
        if (0 < DAT_003b244c) {
          iVar5 = 0;
          iVar15 = 0;
          do {
            iVar6 = g_UserFilters;
            piVar13[-1] = 0x1f0fa6;
            uVar7 = Steam3Server();
            *piVar13 = uVar7;
            piVar13[2] = (int)local_1a0;
            piVar13[1] = iVar6 + iVar5;
            piVar13[-1] = 0x1f0fbe;
            cVar4 = CSteam3Server::CompareUserID
                              ((CSteam3Server *)*piVar13,(USERID_s *)piVar13[1],
                               (USERID_s *)piVar13[2]);
            if (cVar4 != '\0') {
              if (iVar15 < DAT_003b244c) goto LAB_001f0fd7;
              break;
            }
            iVar15 = iVar15 + 1;
            iVar5 = iVar5 + 0x18;
          } while (iVar15 < DAT_003b244c);
        }
        if (DAT_003b244c < 0x8000) {
          if (*(int *)(sv_banid_enabled._28_4_ + 0x30) == 0) {
            piVar13[1] = 0;
            *piVar13 = (int)"banid: disabled on server (sv_banid_enabled = %d)\n";
            piVar13[-1] = 0x1f12bd;
            ConMsg((char *)*piVar13);
          }
          else {
            piVar13[-1] = 0x1f1374;
            iVar5 = GetSteamUniverse();
            if ((iVar5 == 2) && (*(int *)(sv_banid_dev_enabled._28_4_ + 0x30) == 0)) {
              *piVar13 = (int)"banid: disabled in dev mode\n";
              piVar13[-1] = 0x1f13d0;
              ConMsg((char *)*piVar13);
            }
            else {
              uVar10 = 0;
              do {
                *(undefined4 *)((int)local_178 + uVar10) = 0;
                uVar10 = uVar10 + 4;
              } while (uVar10 < 0x18);
              *piVar13 = (int)&g_UserFilters;
              piVar13[2] = (int)local_178;
              piVar13[1] = DAT_003b244c;
              piVar13[-1] = 0x1f13b9;
              iVar5 = CUtlVector<userfilter_t,CUtlMemory<userfilter_t,int>>::InsertBefore
                                ((CUtlVector<userfilter_t,CUtlMemory<userfilter_t,int>> *)*piVar13,
                                 piVar13[1],(userfilter_t *)piVar13[2]);
              iVar5 = iVar5 * 0x18;
LAB_001f0fd7:
              puVar8 = (undefined4 *)(g_UserFilters + iVar5);
              puVar8[5] = local_1a4;
              if ((float)local_1a4 == 0.0) {
                puVar8[4] = 0;
                *puVar8 = *local_1a0;
                puVar8[1] = local_1a0[1];
                puVar8[2] = local_1a0[2];
                puVar8[3] = local_1a0[3];
                piVar13[2] = (int)"permanently";
                piVar13[1] = 0x100;
                *piVar13 = (int)local_120;
                piVar13[-1] = 0x1f1307;
                V_snprintf((char *)*piVar13,piVar13[1],(char *)piVar13[2]);
              }
              else {
                puVar8[4] = (float)((double)(float)local_1a4 * 60.0 + (double)realtime);
                *puVar8 = *local_1a0;
                puVar8[1] = local_1a0[1];
                puVar8[2] = local_1a0[2];
                puVar8[3] = local_1a0[3];
                *(double *)(piVar13 + 3) = (double)(float)local_1a4;
                piVar13[2] = (int)"for %.2f minutes";
                piVar13[1] = 0x100;
                *piVar13 = (int)local_120;
                piVar13[-1] = 0x1f106e;
                V_snprintf((char *)*piVar13,piVar13[1],(char *)piVar13[2]);
              }
              local_1a4 = local_120;
              piVar13[3] = 0;
              piVar13[2] = 0;
              piVar13[1] = (int)"server_addban";
              *piVar13 = (int)&s_GameEventManager;
              pcVar1 = *(code **)(s_GameEventManager + 0x1c);
              piVar13[-1] = 0x1f1099;
              piVar9 = (int *)(*pcVar1)();
              if (piVar9 != (int *)0x0) {
                iVar5 = *piVar9;
                if (bVar3) {
                  piVar13[1] = (int)"name";
                  piVar13[2] = (int)(piVar11 + 0xf);
                  *piVar13 = (int)piVar9;
                  pcVar1 = *(code **)(iVar5 + 0x3c);
                  piVar13[-1] = 0x1f10c7;
                  (*pcVar1)();
                  pcVar1 = *(code **)(*piVar9 + 0x30);
                  iVar5 = *piVar11;
                  *piVar13 = (int)piVar11;
                  pcVar2 = *(code **)(iVar5 + 0x14);
                  piVar13[-1] = 0x1f10d4;
                  iVar5 = (*pcVar2)();
                  piVar13[1] = (int)"userid";
                  piVar13[2] = iVar5;
                  *piVar13 = (int)piVar9;
                  piVar13[-1] = 0x1f10e5;
                  (*pcVar1)();
                  pcVar1 = *(code **)(*piVar9 + 0x3c);
                  iVar5 = *piVar11;
                  *piVar13 = (int)piVar11;
                  pcVar2 = *(code **)(iVar5 + 0x2c);
                  piVar13[-1] = 0x1f10f2;
                  iVar5 = (*pcVar2)();
                  piVar13[1] = (int)"networkid";
                  piVar13[2] = iVar5;
                  *piVar13 = (int)piVar9;
                  piVar13[-1] = 0x1f1103;
                  (*pcVar1)();
                }
                else {
                  piVar13[2] = (int)&DAT_002c79d4;
                  piVar13[1] = (int)"name";
                  *piVar13 = (int)piVar9;
                  pcVar1 = *(code **)(iVar5 + 0x3c);
                  piVar13[-1] = 0x1f1322;
                  (*pcVar1)();
                  iVar5 = *piVar9;
                  piVar13[2] = 0;
                  piVar13[1] = (int)"userid";
                  *piVar13 = (int)piVar9;
                  pcVar1 = *(code **)(iVar5 + 0x30);
                  piVar13[-1] = 0x1f133a;
                  (*pcVar1)();
                  pcVar1 = *(code **)(*piVar9 + 0x3c);
                  *piVar13 = (int)local_1a0;
                  piVar13[-1] = 0x1f1353;
                  iVar5 = GetUserIDString((USERID_s *)*piVar13);
                  *piVar13 = (int)piVar9;
                  piVar13[2] = iVar5;
                  piVar13[1] = (int)"networkid";
                  piVar13[-1] = 0x1f136a;
                  (*pcVar1)();
                }
                iVar5 = *piVar9;
                piVar13[2] = (int)&DAT_002c79d4;
                piVar13[1] = (int)"ip";
                *piVar13 = (int)piVar9;
                pcVar1 = *(code **)(iVar5 + 0x3c);
                piVar13[-1] = 0x1f111b;
                (*pcVar1)();
                iVar5 = *piVar9;
                piVar13[1] = (int)"duration";
                *piVar13 = (int)piVar9;
                piVar13[2] = (int)local_1a4;
                pcVar1 = *(code **)(iVar5 + 0x3c);
                piVar13[-1] = 0x1f1135;
                (*pcVar1)();
                pcVar1 = *(code **)(*piVar9 + 0x3c);
                pcVar14 = "Console";
                if (cmd_source != 1) {
                  pcVar14 = (char *)(host_client + 0x3c);
                }
                piVar13[2] = (int)pcVar14;
                piVar13[1] = (int)"by";
                *piVar13 = (int)piVar9;
                piVar13[-1] = 0x1f1161;
                (*pcVar1)();
                pcVar1 = *(code **)(*piVar9 + 0x30);
                uVar10 = 0;
                if ((bool)(bVar3 & bVar16)) {
                  uVar10 = (uint)(piVar11 != (int *)0x0);
                }
                piVar13[2] = uVar10;
                piVar13[1] = (int)"kicked";
                *piVar13 = (int)piVar9;
                piVar13[-1] = 0x1f1191;
                (*pcVar1)();
                piVar13[2] = 0;
                piVar13[1] = (int)piVar9;
                *piVar13 = (int)&s_GameEventManager;
                pcVar1 = *(code **)(s_GameEventManager + 0x20);
                piVar13[-1] = 0x1f11b0;
                (*pcVar1)();
              }
              if (((bool)(bVar3 & bVar16)) && (piVar11 != (int *)0x0)) {
                iVar5 = *piVar11;
                piVar13[1] = (int)"You have been kicked and banned %s by the server.\n";
                *piVar13 = (int)piVar11;
                piVar13[2] = (int)local_1a4;
                pcVar1 = *(code **)(iVar5 + 0x68);
                piVar13[-1] = 0x1f11dc;
                (*pcVar1)();
                iVar5 = *piVar11;
                piVar13[1] = (int)"Kicked and banned";
                *piVar13 = (int)piVar11;
                pcVar1 = *(code **)(iVar5 + 0x3c);
                piVar13[-1] = 0x1f11ec;
                (*pcVar1)();
              }
            }
          }
        }
        else {
          *piVar13 = (int)"banid:  user filter list is full\n";
          piVar13[-1] = 0x1f13e1;
          ConMsg((char *)*piVar13);
        }
      }
    }
    else {
      local_1d0 = 0x1f1468;
      ConMsg("banid:  couldn\'t find userid %d\n");
      piVar12 = (int *)&stack0xfffffe34;
    }
  }
  else {
    local_1d0 = 0x1f0de1;
    iVar5 = V_strnicmp(pcVar14,"STEAM_",6);
    if (iVar5 == 0) {
      pcVar14 = "";
      if (3 < *(int *)param_1) {
        pcVar14 = *(char **)(param_1 + 0x414);
      }
      local_1d0 = 0x1f0e09;
      iVar5 = _V_strstr(pcVar14,":");
      if (iVar5 != 0) {
        iVar5 = -1;
        local_1d0 = 0x1f0e57;
        V_snprintf(local_160,0x40,"%s:%s:%s");
        goto LAB_001f0e9a;
      }
    }
    local_1d0 = 0x1f1230;
    ConMsg("Can\'t ban users with ID \"%s\"\n");
    piVar12 = (int *)&stack0xfffffe34;
  }
LAB_001f0e78:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined **)((int)piVar12 + -4) = &UNK_001f1472;
    __stack_chk_fail();
  }
  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)