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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.