L L4D2node

CBaseServerVehicle::ParseNPCPassengerSeat

0x00b3bba0 · 303 bytes · __thiscall

_ZN18CBaseServerVehicle21ParseNPCPassengerSeatEP9KeyValuesP14CPassengerSeat

Decompiled

undefined (3 params)

/* CBaseServerVehicle::ParseNPCPassengerSeat(KeyValues*, CPassengerSeat*) */

void __thiscall
CBaseServerVehicle::ParseNPCPassengerSeat
          (CBaseServerVehicle *this,KeyValues *param_1,CPassengerSeat *param_2)

{
  CBaseAnimating *this_00;
  char *pcVar1;
  undefined4 uVar2;
  KeyValues *this_01;
  int iVar3;
  int iVar4;
  undefined4 local_20 [4];
  
  this_00 = *(CBaseAnimating **)(this + 0x2c);
  pcVar1 = (char *)KeyValues::GetString(param_1,"target_attachment","");
  uVar2 = CBaseAnimating::LookupAttachment(this_00,pcVar1);
  *(undefined4 *)(param_2 + 4) = uVar2;
  AllocPooledString((char *)local_20);
  *(undefined4 *)param_2 = local_20[0];
  this_01 = (KeyValues *)KeyValues::GetFirstSubKey(param_1);
  do {
    if (this_01 == (KeyValues *)0x0) {
      CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>::Sort
                ((CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>> *)
                 (param_2 + 8),SeatPrioritySort);
      CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>::Sort
                ((CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>> *)
                 (param_2 + 0x1c),SeatPrioritySort);
      return;
    }
    pcVar1 = (char *)KeyValues::GetName(this_01);
    iVar3 = _V_stricmp(pcVar1,"entry");
    if (iVar3 == 0) {
      iVar4 = CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>::
              InsertBefore((CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>
                            *)(param_2 + 8),*(int *)(param_2 + 0x14));
      iVar3 = *(int *)(param_2 + 8);
LAB_00b3bc3d:
      ParseNPCSeatTransition(this,this_01,(CPassengerSeatTransition *)(iVar3 + iVar4 * 8));
    }
    else {
      iVar3 = _V_stricmp(pcVar1,"exit");
      if (iVar3 == 0) {
        iVar4 = CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>::
                InsertBefore((CUtlVector<CPassengerSeatTransition,CUtlMemory<CPassengerSeatTransition,int>>
                              *)(param_2 + 0x1c),*(int *)(param_2 + 0x28));
        iVar3 = *(int *)(param_2 + 0x1c);
        goto LAB_00b3bc3d;
      }
    }
    this_01 = (KeyValues *)KeyValues::GetNextKey(this_01);
  } while( true );
}

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)