Portable Half-Life SDK. GoldSource and Xash3D. Crossplatform.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1432 lines
57 KiB

//
// HPB bot - botman's High Ping Bastard bot
//
// (http://planethalflife.com/botman/)
//
// engine.cpp
//
#include "extdll.h"
#include "util.h"
#include "bot.h"
#include "bot_client.h"
#include "engine.h"
extern enginefuncs_t g_engfuncs;
extern bot_t bots[32];
extern int mod_id;
extern int team_allies[4];
int debug_engine = 0;
void (*botMsgFunction)(void *, int) = NULL;
void (*botMsgEndFunction)(void *, int) = NULL;
int botMsgIndex;
// messages created in RegUserMsg which will be "caught"
int message_VGUI = 0;
int message_ShowMenu = 0;
int message_WeaponList = 0;
int message_CurWeapon = 0;
int message_AmmoX = 0;
int message_AmmoPickup = 0;
int message_SecAmmoVal = 0;
int message_WeapPickup = 0;
int message_ItemPickup = 0;
int message_Health = 0;
int message_Battery = 0; // Armor
int message_Damage = 0;
int message_Money = 0;
int message_DeathMsg = 0;
int message_SayText = 0;
int message_TextMsg = 0;
int message_WarmUp = 0;
int message_WinMessage = 0;
int message_ScreenFade = 0;
int message_HideWeapon = 0;
int message_Halo = 0;
int message_GameMode = 0;
int message_HudText = 0;
static FILE *fp;
int pfnPrecacheModel(char* s)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPrecacheModel: %s\n",s); fclose(fp); }
return (*g_engfuncs.pfnPrecacheModel)(s);
}
int pfnPrecacheSound(char* s)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPrecacheSound: %s\n",s); fclose(fp); }
return (*g_engfuncs.pfnPrecacheSound)(s);
}
void pfnSetModel(edict_t *e, const char *m)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetModel: edict=%x %s\n",e,m); fclose(fp); }
(*g_engfuncs.pfnSetModel)(e, m);
}
int pfnModelIndex(const char *m)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnModelIndex: %s\n",m); fclose(fp); }
return (*g_engfuncs.pfnModelIndex)(m);
}
int pfnModelFrames(int modelIndex)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnModelFrames:\n"); fclose(fp); }
return (*g_engfuncs.pfnModelFrames)(modelIndex);
}
void pfnSetSize(edict_t *e, const float *rgflMin, const float *rgflMax)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetSize: %x\n",e); fclose(fp); }
(*g_engfuncs.pfnSetSize)(e, rgflMin, rgflMax);
}
void pfnChangeLevel(char* s1, char* s2)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnChangeLevel:\n"); fclose(fp); }
// kick any bot off of the server after time/frag limit...
for (int index = 0; index < 32; index++)
{
if (bots[index].is_used) // is this slot used?
{
char cmd[40];
sprintf(cmd, "kick \"%s\"\n", bots[index].name);
bots[index].respawn_state = RESPAWN_NEED_TO_RESPAWN;
SERVER_COMMAND(cmd); // kick the bot using (kick "name")
}
}
(*g_engfuncs.pfnChangeLevel)(s1, s2);
}
void pfnGetSpawnParms(edict_t *ent)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetSpawnParms:\n"); fclose(fp); }
(*g_engfuncs.pfnGetSpawnParms)(ent);
}
void pfnSaveSpawnParms(edict_t *ent)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSaveSpawnParms:\n"); fclose(fp); }
(*g_engfuncs.pfnSaveSpawnParms)(ent);
}
float pfnVecToYaw(const float *rgflVector)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnVecToYaw:\n"); fclose(fp); }
return (*g_engfuncs.pfnVecToYaw)(rgflVector);
}
void pfnVecToAngles(const float *rgflVectorIn, float *rgflVectorOut)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnVecToAngles:\n"); fclose(fp); }
(*g_engfuncs.pfnVecToAngles)(rgflVectorIn, rgflVectorOut);
}
void pfnMoveToOrigin(edict_t *ent, const float *pflGoal, float dist, int iMoveType)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnMoveToOrigin:\n"); fclose(fp); }
(*g_engfuncs.pfnMoveToOrigin)(ent, pflGoal, dist, iMoveType);
}
void pfnChangeYaw(edict_t* ent)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnChangeYaw:\n"); fclose(fp); }
(*g_engfuncs.pfnChangeYaw)(ent);
}
void pfnChangePitch(edict_t* ent)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnChangePitch:\n"); fclose(fp); }
(*g_engfuncs.pfnChangePitch)(ent);
}
edict_t* pfnFindEntityByString(edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFindEntityByString: %s\n",pszValue); fclose(fp); }
return (*g_engfuncs.pfnFindEntityByString)(pEdictStartSearchAfter, pszField, pszValue);
}
int pfnGetEntityIllum(edict_t* pEnt)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetEntityIllum:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetEntityIllum)(pEnt);
}
edict_t* pfnFindEntityInSphere(edict_t *pEdictStartSearchAfter, const float *org, float rad)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFindEntityInSphere:\n"); fclose(fp); }
return (*g_engfuncs.pfnFindEntityInSphere)(pEdictStartSearchAfter, org, rad);
}
edict_t* pfnFindClientInPVS(edict_t *pEdict)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFindClientInPVS:\n"); fclose(fp); }
return (*g_engfuncs.pfnFindClientInPVS)(pEdict);
}
edict_t* pfnEntitiesInPVS(edict_t *pplayer)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEntitiesInPVS:\n"); fclose(fp); }
return (*g_engfuncs.pfnEntitiesInPVS)(pplayer);
}
void pfnMakeVectors(const float *rgflVector)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnMakeVectors:\n"); fclose(fp); }
(*g_engfuncs.pfnMakeVectors)(rgflVector);
}
void pfnAngleVectors(const float *rgflVector, float *forward, float *right, float *up)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnAngleVectors:\n"); fclose(fp); }
(*g_engfuncs.pfnAngleVectors)(rgflVector, forward, right, up);
}
edict_t* pfnCreateEntity(void)
{
edict_t *pent = (*g_engfuncs.pfnCreateEntity)();
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCreateEntity: %x\n",pent); fclose(fp); }
return pent;
}
void pfnRemoveEntity(edict_t* e)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnRemoveEntity: %x\n",e); fclose(fp); }
if (debug_engine)
{
fp=fopen("HPB_bot.txt","a");
fprintf(fp,"pfnRemoveEntity: %x\n",e);
if (e->v.model != 0)
fprintf(fp," model=%s\n", STRING(e->v.model));
fclose(fp);
}
(*g_engfuncs.pfnRemoveEntity)(e);
}
edict_t* pfnCreateNamedEntity(int className)
{
edict_t *pent = (*g_engfuncs.pfnCreateNamedEntity)(className);
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCreateNamedEntity: edict=%x name=%s\n",pent,STRING(className)); fclose(fp); }
return pent;
}
void pfnMakeStatic(edict_t *ent)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnMakeStatic:\n"); fclose(fp); }
(*g_engfuncs.pfnMakeStatic)(ent);
}
int pfnEntIsOnFloor(edict_t *e)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEntIsOnFloor:\n"); fclose(fp); }
return (*g_engfuncs.pfnEntIsOnFloor)(e);
}
int pfnDropToFloor(edict_t* e)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDropToFloor:\n"); fclose(fp); }
return (*g_engfuncs.pfnDropToFloor)(e);
}
int pfnWalkMove(edict_t *ent, float yaw, float dist, int iMode)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWalkMove:\n"); fclose(fp); }
return (*g_engfuncs.pfnWalkMove)(ent, yaw, dist, iMode);
}
void pfnSetOrigin(edict_t *e, const float *rgflOrigin)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetOrigin:\n"); fclose(fp); }
(*g_engfuncs.pfnSetOrigin)(e, rgflOrigin);
}
void pfnEmitSound(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch)
{
int index;
float distance;
Vector vecEnd;
edict_t *pEdict;
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEmitSound: edict=%x sound=%s\n",entity,sample); fclose(fp); }
if (mod_id == TFC_DLL)
{
// is someone yelling for a medic?
if ((strcmp(sample, "speech/saveme1.wav") == 0) ||
(strcmp(sample, "speech/saveme2.wav") == 0))
{
for (index=0; index < 32; index++)
{
if (bots[index].is_used) // is this slot used?
{
pEdict = bots[index].pEdict;
if ((pEdict->v.playerclass != TFC_CLASS_MEDIC) &&
(pEdict->v.playerclass != TFC_CLASS_ENGINEER))
continue;
int player_team = UTIL_GetTeam(entity);
int bot_team = UTIL_GetTeam(pEdict);
// don't heal your enemies...
if ((bot_team != player_team) &&
!(team_allies[bot_team] & (1<<player_team)))
continue;
distance = (pEdict->v.origin - entity->v.origin).Length();
vecEnd = entity->v.origin + entity->v.view_ofs;
if ((distance < 1000) && FVisible(vecEnd, pEdict) &&
(bots[index].pBotEnemy == NULL))
{
bots[index].pBotEnemy = entity;
bots[index].enemy_attack_count = 3; // hit 'em 3 times
bots[index].pBotUser = NULL; // don't follow user when enemy found
}
}
}
}
}
}
(*g_engfuncs.pfnEmitSound)(entity, channel, sample, volume, attenuation, fFlags, pitch);
}
void pfnEmitAmbientSound(edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEmitAmbientSound:\n"); fclose(fp); }
(*g_engfuncs.pfnEmitAmbientSound)(entity, pos, samp, vol, attenuation, fFlags, pitch);
}
void pfnTraceLine(const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceLine:\n"); fclose(fp); }
(*g_engfuncs.pfnTraceLine)(v1, v2, fNoMonsters, pentToSkip, ptr);
}
void pfnTraceToss(edict_t* pent, edict_t* pentToIgnore, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceToss:\n"); fclose(fp); }
(*g_engfuncs.pfnTraceToss)(pent, pentToIgnore, ptr);
}
int pfnTraceMonsterHull(edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceMonsterHull:\n"); fclose(fp); }
return (*g_engfuncs.pfnTraceMonsterHull)(pEdict, v1, v2, fNoMonsters, pentToSkip, ptr);
}
void pfnTraceHull(const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceHull:\n"); fclose(fp); }
(*g_engfuncs.pfnTraceHull)(v1, v2, fNoMonsters, hullNumber, pentToSkip, ptr);
}
void pfnTraceModel(const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceModel:\n"); fclose(fp); }
(*g_engfuncs.pfnTraceModel)(v1, v2, hullNumber, pent, ptr);
}
const char *pfnTraceTexture(edict_t *pTextureEntity, const float *v1, const float *v2 )
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceTexture:\n"); fclose(fp); }
return (*g_engfuncs.pfnTraceTexture)(pTextureEntity, v1, v2);
}
void pfnTraceSphere(const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTraceSphere:\n"); fclose(fp); }
(*g_engfuncs.pfnTraceSphere)(v1, v2, fNoMonsters, radius, pentToSkip, ptr);
}
void pfnGetAimVector(edict_t* ent, float speed, float *rgflReturn)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetAimVector:\n"); fclose(fp); }
(*g_engfuncs.pfnGetAimVector)(ent, speed, rgflReturn);
}
void pfnServerCommand(char* str)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnServerCommand: %s\n",str); fclose(fp); }
(*g_engfuncs.pfnServerCommand)(str);
}
void pfnServerExecute(void)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnServerExecute:\n"); fclose(fp); }
(*g_engfuncs.pfnServerExecute)();
}
void pfnClientCommand(edict_t* pEdict, char* szFmt, ...)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnClientCommand: edict=%x cmd=%s\n",pEdict,szFmt); fclose(fp); }
if (!(pEdict->v.flags & FL_FAKECLIENT))
{
char tempFmt[256];
va_list argp;
va_start(argp, szFmt);
vsprintf(tempFmt, szFmt, argp);
(*g_engfuncs.pfnClientCommand)(pEdict, tempFmt);
va_end(argp);
}
return;
}
void pfnParticleEffect(const float *org, const float *dir, float color, float count)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnParticleEffect:\n"); fclose(fp); }
(*g_engfuncs.pfnParticleEffect)(org, dir, color, count);
}
void pfnLightStyle(int style, char* val)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnLightStyle:\n"); fclose(fp); }
(*g_engfuncs.pfnLightStyle)(style, val);
}
int pfnDecalIndex(const char *name)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDecalIndex:\n"); fclose(fp); }
return (*g_engfuncs.pfnDecalIndex)(name);
}
int pfnPointContents(const float *rgflVector)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPointContents:\n"); fclose(fp); }
return (*g_engfuncs.pfnPointContents)(rgflVector);
}
void pfnMessageBegin(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed)
{
if (gpGlobals->deathmatch)
{
int index = -1;
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnMessageBegin: edict=%x dest=%d type=%d\n",ed,msg_dest,msg_type); fclose(fp); }
if (ed)
{
if ((mod_id == HOLYWARS_DLL) &&
(msg_type == message_Halo))
{
// catch this message for ALL players, NOT just bots...
botMsgFunction = BotClient_HolyWars_Halo;
botMsgIndex = (int)ed; // save the edict instead of the bot index
}
else
{
index = UTIL_GetBotIndex(ed);
// is this message for a bot?
if (index != -1)
{
botMsgFunction = NULL; // no msg function until known otherwise
botMsgEndFunction = NULL; // no msg end function until known otherwise
botMsgIndex = index; // index of bot receiving message
if (mod_id == VALVE_DLL)
{
if (msg_type == message_WeaponList)
botMsgFunction = BotClient_Valve_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_Valve_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_Valve_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_Valve_AmmoPickup;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_Valve_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_Valve_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_Valve_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_Valve_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_Valve_Damage;
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_Valve_ScreenFade;
}
else if (mod_id == TFC_DLL)
{
if (msg_type == message_VGUI)
botMsgFunction = BotClient_TFC_VGUI;
else if (msg_type == message_WeaponList)
botMsgFunction = BotClient_TFC_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_TFC_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_TFC_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_TFC_AmmoPickup;
else if (msg_type == message_SecAmmoVal)
botMsgFunction = BotClient_TFC_SecAmmoVal;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_TFC_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_TFC_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_TFC_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_TFC_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_TFC_Damage;
else if (msg_type == message_TextMsg)
{
botMsgFunction = BotClient_TFC_TextMsg;
botMsgEndFunction = BotClient_TFC_TextMsg;
}
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_TFC_ScreenFade;
}
else if (mod_id == CSTRIKE_DLL)
{
if (msg_type == message_VGUI)
botMsgFunction = BotClient_CS_VGUI;
else if (msg_type == message_ShowMenu)
botMsgFunction = BotClient_CS_ShowMenu;
else if (msg_type == message_WeaponList)
botMsgFunction = BotClient_CS_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_CS_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_CS_AmmoX;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_CS_WeaponPickup;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_CS_AmmoPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_CS_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_CS_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_CS_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_CS_Damage;
else if (msg_type == message_Money)
botMsgFunction = BotClient_CS_Money;
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_CS_ScreenFade;
}
else if (mod_id == GEARBOX_DLL)
{
if (msg_type == message_VGUI)
botMsgFunction = BotClient_Gearbox_VGUI;
else if (msg_type == message_WeaponList)
botMsgFunction = BotClient_Gearbox_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_Gearbox_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_Gearbox_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_Gearbox_AmmoPickup;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_Gearbox_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_Gearbox_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_Gearbox_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_Gearbox_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_Gearbox_Damage;
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_Gearbox_ScreenFade;
}
else if (mod_id == FRONTLINE_DLL)
{
if (msg_type == message_VGUI)
{
botMsgFunction = BotClient_FLF_VGUI;
botMsgEndFunction = BotClient_FLF_VGUI;
}
else if (msg_type == message_WeaponList)
botMsgFunction = BotClient_FLF_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_FLF_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_FLF_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_FLF_AmmoPickup;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_FLF_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_FLF_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_FLF_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_FLF_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_FLF_Damage;
else if (msg_type == message_TextMsg)
{
botMsgFunction = BotClient_FLF_TextMsg;
botMsgEndFunction = BotClient_FLF_TextMsg;
}
else if (msg_type == message_WarmUp)
botMsgFunction = BotClient_FLF_WarmUp;
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_FLF_ScreenFade;
else if (msg_type == message_HideWeapon)
botMsgFunction = BotClient_FLF_HideWeapon;
}
else if (mod_id == HOLYWARS_DLL)
{
if (msg_type == message_WeaponList)
botMsgFunction = BotClient_Valve_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_Valve_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_Valve_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_Valve_AmmoPickup;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_Valve_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_Valve_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_Valve_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_Valve_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_Valve_Damage;
else if (msg_type == message_ScreenFade)
botMsgFunction = BotClient_Valve_ScreenFade;
else if (msg_type == message_GameMode)
botMsgFunction = BotClient_HolyWars_GameMode;
else if (msg_type == message_HudText)
botMsgFunction = BotClient_HolyWars_HudText;
}
else if (mod_id == DMC_DLL)
{
if (msg_type == message_WeaponList)
botMsgFunction = BotClient_DMC_WeaponList;
else if (msg_type == message_CurWeapon)
botMsgFunction = BotClient_DMC_CurrentWeapon;
else if (msg_type == message_AmmoX)
botMsgFunction = BotClient_DMC_AmmoX;
else if (msg_type == message_AmmoPickup)
botMsgFunction = BotClient_DMC_AmmoPickup;
else if (msg_type == message_WeapPickup)
botMsgFunction = BotClient_DMC_WeaponPickup;
else if (msg_type == message_ItemPickup)
botMsgFunction = BotClient_DMC_ItemPickup;
else if (msg_type == message_Health)
botMsgFunction = BotClient_DMC_Health;
else if (msg_type == message_Battery)
botMsgFunction = BotClient_DMC_Battery;
else if (msg_type == message_Damage)
botMsgFunction = BotClient_DMC_Damage;
}
}
}
}
else if (msg_dest == MSG_ALL)
{
botMsgFunction = NULL; // no msg function until known otherwise
botMsgIndex = -1; // index of bot receiving message (none)
if (mod_id == VALVE_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_Valve_DeathMsg;
}
else if (mod_id == TFC_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_TFC_DeathMsg;
}
else if (mod_id == CSTRIKE_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_CS_DeathMsg;
}
else if (mod_id == GEARBOX_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_Gearbox_DeathMsg;
}
else if (mod_id == FRONTLINE_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_FLF_DeathMsg;
else if (msg_type == message_WarmUp)
botMsgFunction = BotClient_FLF_WarmUpAll;
else if (msg_type == message_WinMessage)
botMsgFunction = BotClient_FLF_WinMessage;
}
else if (mod_id == HOLYWARS_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_Valve_DeathMsg;
}
else if (mod_id == DMC_DLL)
{
if (msg_type == message_DeathMsg)
botMsgFunction = BotClient_DMC_DeathMsg;
}
}
}
(*g_engfuncs.pfnMessageBegin)(msg_dest, msg_type, pOrigin, ed);
}
void pfnMessageEnd(void)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnMessageEnd:\n"); fclose(fp); }
if (botMsgEndFunction)
(*botMsgEndFunction)(NULL, botMsgIndex); // NULL indicated msg end
// clear out the bot message function pointers...
botMsgFunction = NULL;
botMsgEndFunction = NULL;
}
(*g_engfuncs.pfnMessageEnd)();
}
void pfnWriteByte(int iValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteByte: %d\n",iValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&iValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteByte)(iValue);
}
void pfnWriteChar(int iValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteChar: %d\n",iValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&iValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteChar)(iValue);
}
void pfnWriteShort(int iValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteShort: %d\n",iValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&iValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteShort)(iValue);
}
void pfnWriteLong(int iValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteLong: %d\n",iValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&iValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteLong)(iValue);
}
void pfnWriteAngle(float flValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteAngle: %f\n",flValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&flValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteAngle)(flValue);
}
void pfnWriteCoord(float flValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteCoord: %f\n",flValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&flValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteCoord)(flValue);
}
void pfnWriteString(const char *sz)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteString: %s\n",sz); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)sz, botMsgIndex);
}
(*g_engfuncs.pfnWriteString)(sz);
}
void pfnWriteEntity(int iValue)
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnWriteEntity: %d\n",iValue); fclose(fp); }
// if this message is for a bot, call the client message function...
if (botMsgFunction)
(*botMsgFunction)((void *)&iValue, botMsgIndex);
}
(*g_engfuncs.pfnWriteEntity)(iValue);
}
void pfnCVarRegister(cvar_t *pCvar)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarRegister:\n"); fclose(fp); }
(*g_engfuncs.pfnCVarRegister)(pCvar);
}
float pfnCVarGetFloat(const char *szVarName)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarGetFloat: %s\n",szVarName); fclose(fp); }
return (*g_engfuncs.pfnCVarGetFloat)(szVarName);
}
const char* pfnCVarGetString(const char *szVarName)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarGetString:\n"); fclose(fp); }
return (*g_engfuncs.pfnCVarGetString)(szVarName);
}
void pfnCVarSetFloat(const char *szVarName, float flValue)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarSetFloat:\n"); fclose(fp); }
(*g_engfuncs.pfnCVarSetFloat)(szVarName, flValue);
}
void pfnCVarSetString(const char *szVarName, const char *szValue)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarSetString:\n"); fclose(fp); }
(*g_engfuncs.pfnCVarSetString)(szVarName, szValue);
}
void* pfnPvAllocEntPrivateData(edict_t *pEdict, long cb)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPvAllocEntPrivateData:\n"); fclose(fp); }
return (*g_engfuncs.pfnPvAllocEntPrivateData)(pEdict, cb);
}
void* pfnPvEntPrivateData(edict_t *pEdict)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPvEntPrivateData:\n"); fclose(fp); }
return (*g_engfuncs.pfnPvEntPrivateData)(pEdict);
}
void pfnFreeEntPrivateData(edict_t *pEdict)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFreeEntPrivateData:\n"); fclose(fp); }
(*g_engfuncs.pfnFreeEntPrivateData)(pEdict);
}
const char* pfnSzFromIndex(int iString)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSzFromIndex:\n"); fclose(fp); }
return (*g_engfuncs.pfnSzFromIndex)(iString);
}
int pfnAllocString(const char *szValue)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnAllocString:\n"); fclose(fp); }
return (*g_engfuncs.pfnAllocString)(szValue);
}
entvars_t* pfnGetVarsOfEnt(edict_t *pEdict)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetVarsOfEnt:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetVarsOfEnt)(pEdict);
}
edict_t* pfnPEntityOfEntOffset(int iEntOffset)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPEntityOfEntOffset:\n"); fclose(fp); }
return (*g_engfuncs.pfnPEntityOfEntOffset)(iEntOffset);
}
int pfnEntOffsetOfPEntity(const edict_t *pEdict)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEntOffsetOfPEntity: %x\n",pEdict); fclose(fp); }
return (*g_engfuncs.pfnEntOffsetOfPEntity)(pEdict);
}
int pfnIndexOfEdict(const edict_t *pEdict)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnIndexOfEdict: %x\n",pEdict); fclose(fp); }
return (*g_engfuncs.pfnIndexOfEdict)(pEdict);
}
edict_t* pfnPEntityOfEntIndex(int iEntIndex)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPEntityOfEntIndex:\n"); fclose(fp); }
return (*g_engfuncs.pfnPEntityOfEntIndex)(iEntIndex);
}
edict_t* pfnFindEntityByVars(entvars_t* pvars)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFindEntityByVars:\n"); fclose(fp); }
return (*g_engfuncs.pfnFindEntityByVars)(pvars);
}
void* pfnGetModelPtr(edict_t* pEdict)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetModelPtr: %x\n",pEdict); fclose(fp); }
return (*g_engfuncs.pfnGetModelPtr)(pEdict);
}
int pfnRegUserMsg(const char *pszName, int iSize)
{
int msg;
msg = (*g_engfuncs.pfnRegUserMsg)(pszName, iSize);
if (gpGlobals->deathmatch)
{
#ifdef _DEBUG
fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnRegUserMsg: pszName=%s msg=%d\n",pszName,msg); fclose(fp);
#endif
if (mod_id == VALVE_DLL)
{
if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
}
else if (mod_id == TFC_DLL)
{
if (strcmp(pszName, "VGUIMenu") == 0)
message_VGUI = msg;
else if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "SecAmmoVal") == 0)
message_SecAmmoVal = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "TextMsg") == 0)
message_TextMsg = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
}
else if (mod_id == CSTRIKE_DLL)
{
if (strcmp(pszName, "VGUIMenu") == 0)
message_VGUI = msg;
else if (strcmp(pszName, "ShowMenu") == 0)
message_ShowMenu = msg;
else if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "Money") == 0)
message_Money = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
}
else if (mod_id == GEARBOX_DLL)
{
if (strcmp(pszName, "VGUIMenu") == 0)
message_VGUI = msg;
else if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
}
else if (mod_id == FRONTLINE_DLL)
{
if (strcmp(pszName, "VGUIMenu") == 0)
message_VGUI = msg;
else if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "TextMsg") == 0)
message_TextMsg = msg;
else if (strcmp(pszName, "WarmUp") == 0)
message_WarmUp = msg;
else if (strcmp(pszName, "WinMessage") == 0)
message_WinMessage = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
else if (strcmp(pszName, "HideWeapon") == 0)
message_HideWeapon = msg;
}
else if (mod_id == HOLYWARS_DLL)
{
if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
else if (strcmp(pszName, "ScreenFade") == 0)
message_ScreenFade = msg;
else if (strcmp(pszName, "Halo") == 0)
message_Halo = msg;
else if (strcmp(pszName, "GameMode") == 0)
message_GameMode = msg;
else if (strcmp(pszName, "HudText") == 0)
message_HudText = msg;
}
else if (mod_id == DMC_DLL)
{
if (strcmp(pszName, "WeaponList") == 0)
message_WeaponList = msg;
else if (strcmp(pszName, "CurWeapon") == 0)
message_CurWeapon = msg;
else if (strcmp(pszName, "AmmoX") == 0)
message_AmmoX = msg;
else if (strcmp(pszName, "AmmoPickup") == 0)
message_AmmoPickup = msg;
else if (strcmp(pszName, "WeapPickup") == 0)
message_WeapPickup = msg;
else if (strcmp(pszName, "ItemPickup") == 0)
message_ItemPickup = msg;
else if (strcmp(pszName, "Health") == 0)
message_Health = msg;
else if (strcmp(pszName, "Battery") == 0)
message_Battery = msg;
else if (strcmp(pszName, "Damage") == 0)
message_Damage = msg;
else if (strcmp(pszName, "DeathMsg") == 0)
message_DeathMsg = msg;
else if (strcmp(pszName, "SayText") == 0)
message_SayText = msg;
}
}
return msg;
}
void pfnAnimationAutomove(const edict_t* pEdict, float flTime)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnAnimationAutomove:\n"); fclose(fp); }
(*g_engfuncs.pfnAnimationAutomove)(pEdict, flTime);
}
void pfnGetBonePosition(const edict_t* pEdict, int iBone, float *rgflOrigin, float *rgflAngles )
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetBonePosition:\n"); fclose(fp); }
(*g_engfuncs.pfnGetBonePosition)(pEdict, iBone, rgflOrigin, rgflAngles);
}
unsigned long pfnFunctionFromName( const char *pName )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFunctionFromName:\n"); fclose(fp); }
#ifndef __linux__
return FUNCTION_FROM_NAME(pName);
#else
return (*g_engfuncs.pfnFunctionFromName)(pName);
#endif
}
const char *pfnNameForFunction( unsigned long function )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnNameForFunction:\n"); fclose(fp); }
#ifndef __linux__
return NAME_FOR_FUNCTION(function);
#else
return (*g_engfuncs.pfnNameForFunction)(function);
#endif
}
void pfnClientPrintf( edict_t* pEdict, PRINT_TYPE ptype, const char *szMsg )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnClientPrintf:\n"); fclose(fp); }
if (!(pEdict->v.flags & FL_FAKECLIENT))
(*g_engfuncs.pfnClientPrintf)(pEdict, ptype, szMsg);
}
void pfnServerPrint( const char *szMsg )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnServerPrint: %s\n",szMsg); fclose(fp); }
(*g_engfuncs.pfnServerPrint)(szMsg);
}
void pfnGetAttachment(const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles )
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetAttachment:\n"); fclose(fp); }
(*g_engfuncs.pfnGetAttachment)(pEdict, iAttachment, rgflOrigin, rgflAngles);
}
void pfnCRC32_Init(CRC32_t *pulCRC)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCRC32_Init:\n"); fclose(fp); }
(*g_engfuncs.pfnCRC32_Init)(pulCRC);
}
void pfnCRC32_ProcessBuffer(CRC32_t *pulCRC, void *p, int len)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCRC32_ProcessBuffer:\n"); fclose(fp); }
(*g_engfuncs.pfnCRC32_ProcessBuffer)(pulCRC, p, len);
}
void pfnCRC32_ProcessByte(CRC32_t *pulCRC, unsigned char ch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCRC32_ProcessByte:\n"); fclose(fp); }
(*g_engfuncs.pfnCRC32_ProcessByte)(pulCRC, ch);
}
CRC32_t pfnCRC32_Final(CRC32_t pulCRC)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCRC32_Final:\n"); fclose(fp); }
return (*g_engfuncs.pfnCRC32_Final)(pulCRC);
}
long pfnRandomLong(long lLow, long lHigh)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnRandomLong: lLow=%d lHigh=%d\n",lLow,lHigh); fclose(fp); }
return (*g_engfuncs.pfnRandomLong)(lLow, lHigh);
}
float pfnRandomFloat(float flLow, float flHigh)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnRandomFloat:\n"); fclose(fp); }
return (*g_engfuncs.pfnRandomFloat)(flLow, flHigh);
}
void pfnSetView(const edict_t *pClient, const edict_t *pViewent )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetView:\n"); fclose(fp); }
(*g_engfuncs.pfnSetView)(pClient, pViewent);
}
float pfnTime( void )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnTime:\n"); fclose(fp); }
return (*g_engfuncs.pfnTime)();
}
void pfnCrosshairAngle(const edict_t *pClient, float pitch, float yaw)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCrosshairAngle:\n"); fclose(fp); }
(*g_engfuncs.pfnCrosshairAngle)(pClient, pitch, yaw);
}
byte *pfnLoadFileForMe(char *filename, int *pLength)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnLoadFileForMe: filename=%s\n",filename); fclose(fp); }
return (*g_engfuncs.pfnLoadFileForMe)(filename, pLength);
}
void pfnFreeFile(void *buffer)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFreeFile:\n"); fclose(fp); }
(*g_engfuncs.pfnFreeFile)(buffer);
}
void pfnEndSection(const char *pszSectionName)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnEndSection:\n"); fclose(fp); }
(*g_engfuncs.pfnEndSection)(pszSectionName);
}
int pfnCompareFileTime(char *filename1, char *filename2, int *iCompare)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCompareFileTime:\n"); fclose(fp); }
return (*g_engfuncs.pfnCompareFileTime)(filename1, filename2, iCompare);
}
void pfnGetGameDir(char *szGetGameDir)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetGameDir:\n"); fclose(fp); }
(*g_engfuncs.pfnGetGameDir)(szGetGameDir);
}
void pfnCvar_RegisterVariable(cvar_t *variable)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCvar_RegisterVariable:\n"); fclose(fp); }
(*g_engfuncs.pfnCvar_RegisterVariable)(variable);
}
void pfnFadeClientVolume(const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnFadeClientVolume:\n"); fclose(fp); }
(*g_engfuncs.pfnFadeClientVolume)(pEdict, fadePercent, fadeOutSeconds, holdTime, fadeInSeconds);
}
void pfnSetClientMaxspeed(const edict_t *pEdict, float fNewMaxspeed)
{
int index;
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetClientMaxspeed: edict=%x speed=%f\n",pEdict,fNewMaxspeed); fclose(fp); }
index = UTIL_GetBotIndex((edict_t *)pEdict);
// is this message for a bot?
if (index != -1)
bots[index].f_max_speed = fNewMaxspeed;
(*g_engfuncs.pfnSetClientMaxspeed)(pEdict, fNewMaxspeed);
}
edict_t * pfnCreateFakeClient(const char *netname)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCreateFakeClient:\n"); fclose(fp); }
return (*g_engfuncs.pfnCreateFakeClient)(netname);
}
void pfnRunPlayerMove(edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnRunPlayerMove:\n"); fclose(fp); }
(*g_engfuncs.pfnRunPlayerMove)(fakeclient, viewangles, forwardmove, sidemove, upmove, buttons, impulse, msec);
}
int pfnNumberOfEntities(void)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnNumberOfEntities:\n"); fclose(fp); }
return (*g_engfuncs.pfnNumberOfEntities)();
}
char* pfnGetInfoKeyBuffer(edict_t *e)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetInfoKeyBuffer:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetInfoKeyBuffer)(e);
}
char* pfnInfoKeyValue(char *infobuffer, char *key)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnInfoKeyValue: %s %s\n",infobuffer,key); fclose(fp); }
return (*g_engfuncs.pfnInfoKeyValue)(infobuffer, key);
}
void pfnSetKeyValue(char *infobuffer, char *key, char *value)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetKeyValue: %s %s\n",key,value); fclose(fp); }
(*g_engfuncs.pfnSetKeyValue)(infobuffer, key, value);
}
void pfnSetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetClientKeyValue: %s %s\n",key,value); fclose(fp); }
(*g_engfuncs.pfnSetClientKeyValue)(clientIndex, infobuffer, key, value);
}
int pfnIsMapValid(char *filename)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnIsMapValid:\n"); fclose(fp); }
return (*g_engfuncs.pfnIsMapValid)(filename);
}
void pfnStaticDecal( const float *origin, int decalIndex, int entityIndex, int modelIndex )
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnStaticDecal:\n"); fclose(fp); }
(*g_engfuncs.pfnStaticDecal)(origin, decalIndex, entityIndex, modelIndex);
}
int pfnPrecacheGeneric(char* s)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPrecacheGeneric: %s\n",s); fclose(fp); }
return (*g_engfuncs.pfnPrecacheGeneric)(s);
}
int pfnGetPlayerUserId(edict_t *e )
{
if (gpGlobals->deathmatch)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetPlayerUserId: %x\n",e); fclose(fp); }
if (mod_id == GEARBOX_DLL)
{
// is this edict a bot?
if (UTIL_GetBotPointer( e ))
return 0; // don't return a valid index (so bot won't get kicked)
}
}
return (*g_engfuncs.pfnGetPlayerUserId)(e);
}
void pfnBuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnBuildSoundMsg:\n"); fclose(fp); }
(*g_engfuncs.pfnBuildSoundMsg)(entity, channel, sample, volume, attenuation, fFlags, pitch, msg_dest, msg_type, pOrigin, ed);
}
int pfnIsDedicatedServer(void)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnIsDedicatedServer:\n"); fclose(fp); }
return (*g_engfuncs.pfnIsDedicatedServer)();
}
cvar_t* pfnCVarGetPointer(const char *szVarName)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCVarGetPointer: %s\n",szVarName); fclose(fp); }
return (*g_engfuncs.pfnCVarGetPointer)(szVarName);
}
unsigned int pfnGetPlayerWONId(edict_t *e)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetPlayerWONId: %x\n",e); fclose(fp); }
return (*g_engfuncs.pfnGetPlayerWONId)(e);
}
// new stuff for SDK 2.0
void pfnInfo_RemoveKey(char *s, const char *key)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnInfo_RemoveKey:\n"); fclose(fp); }
(*g_engfuncs.pfnInfo_RemoveKey)(s, key);
}
const char *pfnGetPhysicsKeyValue(const edict_t *pClient, const char *key)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetPhysicsKeyValue:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetPhysicsKeyValue)(pClient, key);
}
void pfnSetPhysicsKeyValue(const edict_t *pClient, const char *key, const char *value)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetPhysicsKeyValue:\n"); fclose(fp); }
(*g_engfuncs.pfnSetPhysicsKeyValue)(pClient, key, value);
}
const char *pfnGetPhysicsInfoString(const edict_t *pClient)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetPhysicsInfoString:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetPhysicsInfoString)(pClient);
}
unsigned short pfnPrecacheEvent(int type, const char *psz)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPrecacheEvent:\n"); fclose(fp); }
return (*g_engfuncs.pfnPrecacheEvent)(type, psz);
}
void pfnPlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay,
float *origin, float *angles, float fparam1,float fparam2, int iparam1, int iparam2, int bparam1, int bparam2)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnPlaybackEvent:\n"); fclose(fp); }
(*g_engfuncs.pfnPlaybackEvent)(flags, pInvoker, eventindex, delay, origin, angles, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2);
}
unsigned char *pfnSetFatPVS(float *org)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetFatPVS:\n"); fclose(fp); }
return (*g_engfuncs.pfnSetFatPVS)(org);
}
unsigned char *pfnSetFatPAS(float *org)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetFatPAS:\n"); fclose(fp); }
return (*g_engfuncs.pfnSetFatPAS)(org);
}
int pfnCheckVisibility(const edict_t *entity, unsigned char *pset)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCheckVisibility:\n"); fclose(fp); }
return (*g_engfuncs.pfnCheckVisibility)(entity, pset);
}
void pfnDeltaSetField(struct delta_s *pFields, const char *fieldname)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaSetField:\n"); fclose(fp); }
(*g_engfuncs.pfnDeltaSetField)(pFields, fieldname);
}
void pfnDeltaUnsetField(struct delta_s *pFields, const char *fieldname)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaUnsetField:\n"); fclose(fp); }
(*g_engfuncs.pfnDeltaUnsetField)(pFields, fieldname);
}
void pfnDeltaAddEncoder(char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to))
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaAddEncoder:\n"); fclose(fp); }
(*g_engfuncs.pfnDeltaAddEncoder)(name, conditionalencode);
}
int pfnGetCurrentPlayer(void)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetCurrentPlayer:\n"); fclose(fp); }
return (*g_engfuncs.pfnGetCurrentPlayer)();
}
int pfnCanSkipPlayer(const edict_t *player)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCanSkipPlayer:\n"); fclose(fp); }
return (*g_engfuncs.pfnCanSkipPlayer)(player);
}
int pfnDeltaFindField(struct delta_s *pFields, const char *fieldname)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaFindField:\n"); fclose(fp); }
return (*g_engfuncs.pfnDeltaFindField)(pFields, fieldname);
}
void pfnDeltaSetFieldByIndex(struct delta_s *pFields, int fieldNumber)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaSetFieldByIndex:\n"); fclose(fp); }
(*g_engfuncs.pfnDeltaSetFieldByIndex)(pFields, fieldNumber);
}
void pfnDeltaUnsetFieldByIndex(struct delta_s *pFields, int fieldNumber)
{
// if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnDeltaUnsetFieldByIndex:\n"); fclose(fp); }
(*g_engfuncs.pfnDeltaUnsetFieldByIndex)(pFields, fieldNumber);
}
void pfnSetGroupMask(int mask, int op)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnSetGroupMask:\n"); fclose(fp); }
(*g_engfuncs.pfnSetGroupMask)(mask, op);
}
int pfnCreateInstancedBaseline(int classname, struct entity_state_s *baseline)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCreateInstancedBaseline:\n"); fclose(fp); }
return (*g_engfuncs.pfnCreateInstancedBaseline)(classname, baseline);
}
void pfnCvar_DirectSet(struct cvar_s *var, char *value)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnCvar_DirectSet:\n"); fclose(fp); }
(*g_engfuncs.pfnCvar_DirectSet)(var, value);
}
void pfnForceUnmodified(FORCE_TYPE type, float *mins, float *maxs, const char *filename)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnForceUnmodified:\n"); fclose(fp); }
(*g_engfuncs.pfnForceUnmodified)(type, mins, maxs, filename);
}
void pfnGetPlayerStats(const edict_t *pClient, int *ping, int *packet_loss)
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnGetPlayerStats:\n"); fclose(fp); }
(*g_engfuncs.pfnGetPlayerStats)(pClient, ping, packet_loss);
}
void pfnAddServerCommand(char *cmd_name, void (*function)(void))
{
if (debug_engine) { fp=fopen("HPB_bot.txt","a"); fprintf(fp,"pfnAddServerCommand: %s %x\n",cmd_name,function); fclose(fp); }
(*g_engfuncs.pfnAddServerCommand)(cmd_name, function);
}