L L4D2node

MapEntity_ParseToken

0x00468ca0 · 473 bytes · __cdecl

_Z20MapEntity_ParseTokenPKcPc

Decompiled

undefined (2 params)

/* MapEntity_ParseToken(char const*, char*) */

char * MapEntity_ParseToken(char *param_1,char *param_2)

{
  char cVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  char *pcVar5;
  int iVar6;
  char *local_20;
  
  *param_2 = '\0';
  if (param_1 == (char *)0x0) {
    return (char *)0x0;
  }
  if (s_BuildReverseMap != '\0') {
    s_BuildReverseMap = '\0';
    _V_memset(s_BraceCharacters,0,0x100);
    iVar2 = 0x7b;
    pcVar5 = "{}()\'";
    do {
      pcVar5 = pcVar5 + 1;
      s_BraceCharacters[iVar2] = 1;
      iVar2 = (int)*pcVar5;
    } while (*pcVar5 != '\0');
  }
  cVar1 = *param_1;
  iVar2 = (int)cVar1;
joined_r0x00468cce:
  if (iVar2 < 0x21) {
    if (iVar2 == 0) {
      return (char *)0x0;
    }
    cVar1 = param_1[1];
    param_1 = param_1 + 1;
    goto LAB_00468d03;
  }
  if (iVar2 == 0x2f) {
    if (param_1[1] == '/') goto code_r0x00468cdf;
    iVar4 = 1;
    local_20._0_1_ = '/';
    iVar3 = 0;
    iVar6 = 0;
  }
  else if (iVar2 == 0x22) {
    iVar4 = 0;
    pcVar5 = param_1 + 1;
    do {
      param_1 = pcVar5 + 1;
      local_20._0_1_ = *pcVar5;
      iVar2 = (int)(char)local_20;
      if ((iVar2 == 0) || (iVar2 == 0x22)) {
        param_2[iVar4] = '\0';
        return param_1;
      }
      param_2[iVar4] = (char)local_20;
      iVar4 = iVar4 + 1;
      pcVar5 = param_1;
    } while (iVar4 != 0x800);
    iVar3 = 0x7ff;
    iVar6 = 0x7ff;
    param_2[0x7ff] = '\0';
    iVar4 = 0x800;
  }
  else {
    local_20._0_1_ = (char)iVar2;
    iVar4 = 1;
    iVar3 = 0;
    iVar6 = 0;
  }
  if (s_BraceCharacters[iVar2] != '\0') {
    param_2[iVar3] = (char)local_20;
    param_2[iVar4] = '\0';
    return param_1 + 1;
  }
  do {
    while( true ) {
      param_1 = param_1 + 1;
      iVar4 = iVar6 + 1;
      pcVar5 = param_2 + iVar6;
      cVar1 = (char)iVar2;
      *pcVar5 = cVar1;
      iVar2 = (int)*param_1;
      if (s_BraceCharacters[iVar2] != '\0') {
        param_2[iVar4] = '\0';
        return param_1;
      }
      if (iVar4 != 0x800) break;
      *pcVar5 = '\0';
      local_20 = pcVar5;
      if (iVar2 < 0x21) goto LAB_00468dd8;
    }
    local_20 = param_2 + iVar4;
    *pcVar5 = cVar1;
    iVar6 = iVar4;
  } while (0x20 < iVar2);
LAB_00468dd8:
  *local_20 = '\0';
  return param_1;
code_r0x00468cdf:
  if ((cVar1 != '\0') && (cVar1 != '\n')) {
    cVar1 = '/';
    pcVar5 = param_1;
    while ((param_1 = pcVar5 + 1, cVar1 != '\n' && (cVar1 != '\0'))) {
      cVar1 = pcVar5[2];
      pcVar5 = param_1;
    }
LAB_00468d03:
    iVar2 = (int)cVar1;
  }
  goto joined_r0x00468cce;
}

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)