L L4D2node

CResponseSystem::CompareUsingMatcher

0x005b8280 · 593 bytes · __cdecl

_ZN15CResponseSystem19CompareUsingMatcherEPKcR7Matcherb

Decompiled

undefined (3 params)

/* CResponseSystem::CompareUsingMatcher(char const*, Matcher&, bool) */

bool CResponseSystem::CompareUsingMatcher(char *param_1,Matcher *param_2,bool param_3)

{
  byte bVar1;
  byte bVar2;
  ushort uVar3;
  char *pcVar4;
  int iVar5;
  longdouble lVar6;
  float fVar7;
  double dVar8;
  undefined3 in_stack_0000000d;
  ushort local_e [3];
  
  bVar1 = *(byte *)(_param_3 + 2);
  if ((bVar1 & 1) != 0) {
    dVar8 = strtod((char *)param_2,(char **)0x0);
    fVar7 = (float)dVar8;
    if (*param_2 == (Matcher)0x5b) {
      local_e[0] = local_e[0] & 0xff00;
      lVar6 = (longdouble)
              LookupEnumeration((CResponseSystem *)param_1,(char *)param_2,(bool *)local_e);
      fVar7 = (float)lVar6;
    }
    bVar2 = *(byte *)(_param_3 + 2);
    if ((bVar2 >> 3 & 1) == 0) {
      if ((bVar2 & 0x20) == 0) {
        if ((bVar2 & 4) != 0) {
          uVar3 = *(ushort *)((int)_param_3 + 9);
          pcVar4 = "";
          if ((bVar2 & 2) == 0) {
            if (uVar3 != 0xffff) {
              local_e[0] = uVar3;
              pcVar4 = (char *)CUtlSymbolTable::String((CUtlSymbolTable *)RR::g_RS,local_e);
            }
            iVar5 = _V_stricmp((char *)param_2,pcVar4);
            return iVar5 != 0;
          }
          if (uVar3 != 0xffff) {
            local_e[0] = uVar3;
            pcVar4 = (char *)CUtlSymbolTable::String((CUtlSymbolTable *)RR::g_RS,local_e);
          }
          dVar8 = strtod(pcVar4,(char **)0x0);
          return fVar7 != (float)dVar8;
        }
        if ((bVar2 & 2) != 0) {
          if (*param_2 == (Matcher)0x0) {
            return false;
          }
          pcVar4 = "";
          if (*(ushort *)((int)_param_3 + 9) != 0xffff) {
            local_e[0] = *(ushort *)((int)_param_3 + 9);
            pcVar4 = (char *)CUtlSymbolTable::String((CUtlSymbolTable *)RR::g_RS,local_e);
          }
          dVar8 = strtod(pcVar4,(char **)0x0);
          return (float)dVar8 == fVar7;
        }
        pcVar4 = "";
        if (*(ushort *)((int)_param_3 + 9) != 0xffff) {
          local_e[0] = *(ushort *)((int)_param_3 + 9);
          pcVar4 = (char *)CUtlSymbolTable::String((CUtlSymbolTable *)RR::g_RS,local_e);
        }
        iVar5 = _V_stricmp((char *)param_2,pcVar4);
        return iVar5 == 0;
      }
    }
    else {
      if ((bVar2 & 0x10) == 0) {
        if (fVar7 < _param_3[1] || fVar7 == _param_3[1]) {
          return false;
        }
      }
      else if (fVar7 < _param_3[1]) {
        return false;
      }
      if ((bVar2 & 0x20) == 0) {
        return (bool)(bVar2 >> 3 & 1);
      }
    }
    if ((bVar2 >> 6 & 1) == 0) {
      if (fVar7 < *_param_3) {
        return (bool)(bVar1 & 1);
      }
    }
    else if (fVar7 < *_param_3 || fVar7 == *_param_3) {
      return (bool)(bVar2 >> 6 & 1);
    }
  }
  return false;
}

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)