NextBotPlayer<CTerrorPlayer>::Spawn
0x00949520 · 957 bytes · __thiscall
_ZN13NextBotPlayerI13CTerrorPlayerE5SpawnEv
Decompiled
undefined (1 param)
/* NextBotPlayer<CTerrorPlayer>::Spawn() */
void __thiscall NextBotPlayer<CTerrorPlayer>::Spawn(NextBotPlayer<CTerrorPlayer> *this)
{
(**(code **)(*engine + 0x15c))(engine,*(undefined4 *)(this + 0x30),"cl_autohelp",&DAT_00c09604);
*(undefined4 *)(this + 0x425c) = 0;
*(undefined4 *)(this + 0x4260) = 0;
if (*(float *)(this + 0x426c) != -1.0) {
(**(code **)(*(int *)(this + 0x4264) + 4))(this + 0x4264,this + 0x426c);
*(undefined4 *)(this + 0x426c) = 0xbf800000;
}
if (*(float *)(this + 0x4278) != -1.0) {
(**(code **)(*(int *)(this + 0x4270) + 4))(this + 0x4270,this + 0x4278);
*(undefined4 *)(this + 0x4278) = 0xbf800000;
}
if (*(float *)(this + 0x4284) != -1.0) {
(**(code **)(*(int *)(this + 0x427c) + 4))(this + 0x427c,this + 0x4284);
*(undefined4 *)(this + 0x4284) = 0xbf800000;
}
if (*(float *)(this + 0x4290) != -1.0) {
(**(code **)(*(int *)(this + 0x4288) + 4))(this + 0x4288,this + 0x4290);
*(undefined4 *)(this + 0x4290) = 0xbf800000;
}
if (*(float *)(this + 0x429c) != -1.0) {
(**(code **)(*(int *)(this + 0x4294) + 4))(this + 0x4294,this + 0x429c);
*(undefined4 *)(this + 0x429c) = 0xbf800000;
}
if (*(float *)(this + 0x42a8) != -1.0) {
(**(code **)(*(int *)(this + 0x42a0) + 4))(this + 0x42a0,this + 0x42a8);
*(undefined4 *)(this + 0x42a8) = 0xbf800000;
}
if (*(float *)(this + 0x42b4) != -1.0) {
(**(code **)(*(int *)(this + 0x42ac) + 4))(this + 0x42ac,this + 0x42b4);
*(undefined4 *)(this + 0x42b4) = 0xbf800000;
}
if (*(float *)(this + 0x42c0) != -1.0) {
(**(code **)(*(int *)(this + 0x42b8) + 4))(this + 0x42b8,this + 0x42c0);
*(undefined4 *)(this + 0x42c0) = 0xbf800000;
}
if (*(float *)(this + 0x42cc) != -1.0) {
(**(code **)(*(int *)(this + 0x42c4) + 4))(this + 0x42c4,this + 0x42cc);
*(undefined4 *)(this + 0x42cc) = 0xbf800000;
}
if (*(float *)(this + 0x42d8) != -1.0) {
(**(code **)(*(int *)(this + 0x42d0) + 4))(this + 0x42d0,this + 0x42d8);
*(undefined4 *)(this + 0x42d8) = 0xbf800000;
}
if (*(float *)(this + 0x42e4) != -1.0) {
(**(code **)(*(int *)(this + 0x42dc) + 4))(this + 0x42dc,this + 0x42e4);
*(undefined4 *)(this + 0x42e4) = 0xbf800000;
}
if (*(float *)(this + 0x42f0) != -1.0) {
(**(code **)(*(int *)(this + 0x42e8) + 4))(this + 0x42e8,this + 0x42f0);
*(undefined4 *)(this + 0x42f0) = 0xbf800000;
}
*(undefined4 *)(this + 0x4300) = 0x3d23d70a;
*(undefined4 *)(this + 0x42fc) = 0x3d23d70a;
if (*(float *)(this + 0x42f8) != -1.0) {
(**(code **)(*(int *)(this + 0x42f4) + 4))(this + 0x42f4,this + 0x42f8);
*(undefined4 *)(this + 0x42f8) = 0xbf800000;
}
INextBot::Reset((INextBot *)(this + 0x4028));
CTerrorPlayer::Spawn((CTerrorPlayer *)this);
return;
}
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.