L L4D2node

CVEngineServer::EmitAmbientSound

0x0022d730 · 1382 bytes · __thiscall

_ZN14CVEngineServer16EmitAmbientSoundEiRK6VectorPKcf12soundlevel_tiif

Decompiled

undefined (9 params)

/* CVEngineServer::EmitAmbientSound(int, Vector const&, char const*, float, soundlevel_t, int, int,
   float) */

void __thiscall
CVEngineServer::EmitAmbientSound
          (undefined4 this,undefined4 param_1,undefined4 *param_2,byte *param_3,undefined4 param_4,
          undefined4 param_6,uint param_7,undefined4 param_8,float param_9)

{
  byte bVar1;
  char cVar2;
  int iVar3;
  int iVar4;
  byte *pbVar5;
  int in_GS_OFFSET;
  longdouble lVar6;
  undefined4 local_184;
  undefined4 local_180;
  undefined4 local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170;
  undefined4 local_16c;
  undefined4 local_168;
  undefined4 local_164;
  undefined4 local_160;
  undefined4 local_15c;
  float local_158;
  undefined4 local_154;
  undefined4 local_150;
  undefined4 local_14c;
  undefined4 local_148;
  undefined4 local_144;
  uint local_140;
  int local_13c;
  undefined4 local_138;
  undefined4 local_134;
  undefined1 local_130;
  undefined1 local_12f;
  undefined1 local_12e;
  undefined4 local_12c;
  undefined4 local_128;
  undefined4 local_124;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined1 local_d8;
  undefined1 local_d7;
  undefined1 local_d6;
  undefined **local_d4;
  undefined1 local_d0;
  undefined4 local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined1 local_a0;
  undefined8 local_9c;
  undefined4 local_94;
  undefined4 local_90;
  undefined1 local_88;
  undefined4 local_84;
  undefined4 local_7c;
  undefined1 local_78;
  undefined4 local_74;
  undefined4 local_70;
  bf_write local_58 [24];
  undefined1 local_40 [32];
  int local_20;
  
  local_158 = 0.0;
  local_154 = 0;
  local_12e = 0;
  local_130 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_178 = 0;
  local_14c = param_1;
  local_15c = param_4;
  local_140 = param_7;
  local_138 = 0xffffffff;
  local_134 = param_6;
  local_148 = 6;
  local_13c = 0;
  local_150 = 0;
  local_160 = 0;
  local_174 = 0;
  local_170 = 0;
  local_16c = 0;
  local_168 = 0;
  local_164 = 0;
  local_144 = param_8;
  local_184 = *param_2;
  local_12f = 1;
  local_180 = param_2[1];
  local_17c = param_2[2];
  pbVar5 = param_3;
  if (param_9 != 0.0) {
    lVar6 = (longdouble)CBaseServer::GetTime((CBaseServer *)&sv);
    local_140 = local_140 | 0x10;
    local_158 = param_9 - (float)lVar6;
  }
LAB_0022d840:
  bVar1 = *pbVar5;
  if ((bVar1 & 0xfd) == 0x21) {
LAB_0022d8a8:
    if (bVar1 != 0x21) goto LAB_0022d8ac;
    local_130 = 1;
    for (pbVar5 = param_3;
        (((bVar1 = *pbVar5, bVar1 == 0x21 || ((byte)(bVar1 - 0x23) < 2)) ||
         ((byte)(bVar1 - 0x28) < 3)) ||
        ((((byte)(bVar1 - 0x3e) < 3 || (bVar1 == 0x3c)) || ((bVar1 == 0x5e || (bVar1 == 0x7d))))));
        pbVar5 = pbVar5 + 1) {
    }
    iVar3 = V_atoi((char *)pbVar5);
    local_13c = iVar3;
    iVar4 = VOX_SentenceCount();
    if (iVar4 <= iVar3) {
      for (; ((bVar1 = *param_3, bVar1 == 0x21 || ((byte)(bVar1 - 0x23) < 2)) ||
             (((byte)(bVar1 - 0x28) < 3 ||
              (((((byte)(bVar1 - 0x3e) < 3 || (bVar1 == 0x3c)) || (bVar1 == 0x5e)) ||
               (bVar1 == 0x7d)))))); param_3 = param_3 + 1) {
      }
      ConMsg("EmitAmbientSound: invalid sentence number: %s",param_3);
      goto LAB_0022d9e6;
    }
    goto LAB_0022d92c;
  }
  if ((byte)(bVar1 - 0x28) < 3) {
LAB_0022d8ac:
    pbVar5 = pbVar5 + 1;
    goto LAB_0022d840;
  }
  if (((byte)(bVar1 - 0x3e) < 3) || (bVar1 == 0x3c)) goto LAB_0022d8a8;
  if (((bVar1 == 0x5e) || (bVar1 == 0x7d)) || (bVar1 == 0x24)) goto LAB_0022d8ac;
  local_130 = 0;
  local_13c = SV_SoundIndex((char *)param_3);
  if (local_13c < 1) {
    ConMsg("EmitAmbientSound:  sound note precached: %s\n",param_3);
  }
  else {
LAB_0022d92c:
    if ((param_7 & 8) != 0) {
      if (DAT_003b8184 != '\0') {
        local_c8 = 0;
        local_c0 = 0;
        local_b0 = 0;
        local_9c = 0;
        local_c4 = 0;
        local_b8 = 0;
        local_b4 = 0;
        local_a8 = 0;
        local_a4 = 0;
        local_a0 = 0;
        local_94 = 0;
        local_90 = 0;
        local_d0 = 1;
        local_cc = 0;
        local_d4 = &PTR__SVC_Sounds_002a1dc8;
        local_78 = 0;
        local_7c = 0;
        local_74 = 0xffffffff;
        local_70 = 0;
        bf_write::bf_write(local_58);
        bf_write::StartWriting(local_58,local_40,0x20,0,-1);
        local_84 = 1;
        local_88 = 1;
        local_100 = 0;
        local_fc = 0;
        local_104 = 0x3f800000;
        local_dc = 0x4b;
        local_ec = 100;
        local_f4 = 0;
        local_e0 = 0xffffffff;
        local_f0 = 6;
        local_e4 = 0;
        local_e8 = 0;
        local_f8 = 0;
        local_108 = 0;
        local_d6 = 0;
        local_d8 = 0;
        local_d7 = 0;
        local_12c = 0;
        local_128 = 0;
        local_124 = 0;
        local_120 = 0;
        local_11c = 0;
        local_118 = 0;
        local_114 = 0;
        local_110 = 0;
        local_10c = 0;
        lVar6 = (longdouble)CBaseServer::GetFinalTickTime((CBaseServer *)&sv);
        SoundInfo_t::WriteDelta
                  ((SoundInfo_t *)&local_184,(SoundInfo_t *)&local_12c,local_58,(float)lVar6);
        cVar2 = SVC_Sounds::WriteToBuffer((SVC_Sounds *)&local_d4,(bf_write *)&DAT_003b8034);
        if (cVar2 == '\0') {
          Sys_Error("EmitAmbientSound: Init message would overflow signon buffer!\n");
        }
        goto LAB_0022d9e6;
      }
      DevMsg("EmitAmbientSound: warning, broadcasting sound labled as SND_SPAWNING.\n");
    }
    CEngineRecipientFilter::CEngineRecipientFilter((CEngineRecipientFilter *)&local_d4);
                    /* try { // try from 0022d946 to 0022d96c has its CatchHandler @ 0022dcb6 */
    CEngineRecipientFilter::AddAllPlayers((CEngineRecipientFilter *)&local_d4);
    CEngineRecipientFilter::MakeReliable((CEngineRecipientFilter *)&local_d4);
    CGameServer::BroadcastSound
              ((CGameServer *)&sv,(SoundInfo_t *)&local_184,(IRecipientFilter *)&local_d4);
    local_d4 = &PTR__CEngineRecipientFilter_002ae5c8;
    local_c0 = (ulonglong)local_c0._4_4_ << 0x20;
    CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)&local_cc);
    local_c0 = CONCAT44(local_cc,(undefined4)local_c0);
    CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)&local_cc);
  }
LAB_0022d9e6:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __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)