L L4D2node

CBaseServerVehicle::CacheEntryExitPoints

0x00b3a150 · 447 bytes · __thiscall

_ZN18CBaseServerVehicle20CacheEntryExitPointsEv

Decompiled

undefined (1 param)

/* CBaseServerVehicle::CacheEntryExitPoints() */

void __thiscall CBaseServerVehicle::CacheEntryExitPoints(CBaseServerVehicle *this)

{
  char cVar1;
  CBaseAnimating *this_00;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  this_00 = (CBaseAnimating *)(**(code **)(**(int **)(this + 0x2c) + 0xf0))(*(int **)(this + 0x2c));
  if ((this_00 != (CBaseAnimating *)0x0) &&
     (iVar2 = CBaseAnimating::LookupAttachment(this_00,"vehicle_driver_eyes"),
     0 < *(int *)(this + 0x60))) {
    iVar4 = 0;
    do {
      while( true ) {
        iVar5 = iVar4 * 0x9c;
        iVar3 = *(int *)(this + 0x54) + iVar5;
        cVar1 = GetLocalAttachmentAtTime
                          (this,(char *)(iVar3 + 2),iVar2,1.0,(Vector *)(iVar3 + 0x84),
                           (QAngle *)(iVar3 + 0x90));
        if (cVar1 != '\0') break;
        Warning("Exit animation %s failed to cache target points properly!\n",
                *(int *)(this + 0x54) + iVar5 + 2);
        if (*(int *)(g_debug_vehicleexit._28_4_ + 0x30) == 0) goto LAB_00b3a1ac;
LAB_00b3a21d:
        iVar5 = iVar5 + *(int *)(this + 0x54);
        iVar4 = iVar4 + 1;
        local_4c = *(undefined4 *)(iVar5 + 0x84);
        local_48 = *(undefined4 *)(iVar5 + 0x88);
        local_44 = *(undefined4 *)(iVar5 + 0x8c);
        local_40 = *(undefined4 *)(iVar5 + 0x90);
        local_3c = *(undefined4 *)(iVar5 + 0x94);
        local_38 = *(undefined4 *)(iVar5 + 0x98);
        UTIL_ParentToWorldSpace((CBaseEntity *)this_00,(Vector *)&local_4c,(QAngle *)&local_40);
        local_28 = 0x41000000;
        local_24 = 0x41000000;
        local_20 = 0x41000000;
        local_34 = 0xc1000000;
        local_30 = 0xc1000000;
        local_2c = 0xc1000000;
        NDebugOverlay::Box((Vector *)&local_4c,(Vector *)&local_34,(Vector *)&local_28,0,0xff,0,0,
                           20.0);
        NDebugOverlay::Axis((Vector *)&local_4c,(QAngle *)&local_40,8.0,true,20.0);
        if (*(int *)(this + 0x60) <= iVar4) {
          return;
        }
      }
      if (*(int *)(g_debug_vehicleexit._28_4_ + 0x30) != 0) goto LAB_00b3a21d;
LAB_00b3a1ac:
      iVar4 = iVar4 + 1;
    } while (iVar4 < *(int *)(this + 0x60));
  }
  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)