L L4D2node

CSteamID::SetFromString

0x000ba900 · 749 bytes · __thiscall

_ZN8CSteamID13SetFromStringEPKc9EUniverse

Decompiled

undefined (3 params)

/* CSteamID::SetFromString(char const*, EUniverse) */

void __thiscall CSteamID::SetFromString(CSteamID *this,char *param_1,int param_3)

{
  char cVar1;
  char *pcVar2;
  char *pcVar3;
  char cVar4;
  int local_28;
  undefined4 local_24;
  int local_20 [4];
  
  local_28 = -1;
  local_24 = 1;
  cVar1 = *param_1;
  if (cVar1 == '[') {
    cVar1 = param_1[1];
    param_1 = param_1 + 1;
  }
  if (cVar1 == 'A') {
    if ((param_1[1] == ':') || (pcVar2 = param_1 + 1, param_1[1] == '-')) {
      pcVar2 = param_1 + 2;
    }
    pcVar3 = strchr(pcVar2,0x28);
    if (pcVar3 != (char *)0x0) {
      sscanf(pcVar3,"(%d)",&local_24);
    }
    pcVar3 = strchr(pcVar2,0x3a);
    if (pcVar3 == (char *)0x0) {
      sscanf(pcVar2,"%d",&local_28);
    }
    else {
      sscanf(pcVar2,"%d:%d",local_20,&local_28);
      param_3._0_1_ = local_20[0]._0_1_;
    }
    if (local_28 == 0) {
      *(undefined4 *)this = 0;
      this[4] = (CSteamID)0x0;
      this[5] = (CSteamID)0x0;
      this[6] = (CSteamID)0x40;
      this[7] = param_3._0_1_;
      return;
    }
    *(int *)this = local_28;
    this[4] = SUB41(local_24,0);
    this[7] = param_3._0_1_;
    this[5] = SUB41((uint)local_24 >> 8,0);
    this[6] = (CSteamID)((byte)((uint)local_24 >> 0x10) & 0xf | 0x40);
    return;
  }
  if (cVar1 == 'G') {
    if ((param_1[1] == ':') || (param_1[1] == '-')) {
      param_1 = param_1 + 2;
      cVar4 = '\x03';
    }
    else {
      param_1 = param_1 + 1;
      cVar4 = '\x03';
    }
  }
  else if (cVar1 == 'C') {
    if ((param_1[1] == ':') || (param_1[1] == '-')) {
      param_1 = param_1 + 2;
      cVar4 = '\x06';
    }
    else {
      param_1 = param_1 + 1;
      cVar4 = '\x06';
    }
  }
  else if (cVar1 == 'g') {
    local_24 = 0;
    if ((param_1[1] == ':') || (param_1[1] == '-')) {
      param_1 = param_1 + 2;
      cVar4 = '\a';
    }
    else {
      param_1 = param_1 + 1;
      cVar4 = '\a';
    }
  }
  else {
    if (cVar1 == 'c') {
      cVar1 = param_1[1];
      local_24 = 0x80000;
    }
    else if (cVar1 == 'L') {
      cVar1 = param_1[1];
      local_24 = 0x40000;
    }
    else {
      if (cVar1 != 'T') {
        cVar4 = '\x01';
        if (cVar1 == 'U') {
          if ((param_1[1] == ':') || (param_1[1] == '-')) {
            param_1 = param_1 + 2;
            cVar4 = '\x01';
          }
          else {
            param_1 = param_1 + 1;
          }
        }
        goto LAB_000ba970;
      }
      cVar1 = param_1[1];
      local_24 = 0;
    }
    if ((cVar1 == ':') || (cVar1 == '-')) {
      param_1 = param_1 + 2;
      cVar4 = '\b';
    }
    else {
      param_1 = param_1 + 1;
      cVar4 = '\b';
    }
  }
LAB_000ba970:
  pcVar2 = strchr(param_1,0x3a);
  if (pcVar2 == (char *)0x0) {
    sscanf(param_1,"%d",&local_28);
  }
  else {
    sscanf(param_1 + (*param_1 == '['),"%d:%d",local_20,&local_28);
    if (local_20[0] == 0) {
      local_20[0] = param_3;
    }
    param_3._0_1_ = SUB41(local_20[0],0);
  }
  this[4] = SUB41(local_24,0);
  *(int *)this = local_28;
  this[5] = SUB41((uint)local_24 >> 8,0);
  this[7] = param_3._0_1_;
  this[6] = (CSteamID)(cVar4 << 4 | (byte)((uint)local_24 >> 0x10) & 0xf);
  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)