Huntkillaz |
25-06-2004 06:30 |
Re: bot_sounds.cpp
will this work???
Code:
// ####################################
// # #
// # Ping of Death - Bot #
// # by #
// # Markus Klinge aka Count Floyd #
// # #
// ####################################
//
// Started from the HPB-Bot Alpha Source
// by Botman so Credits for a lot of the basic
// HL Server/Client Stuff goes to him
//
// bot_sounds.cpp
//
// Hooks to let Bots 'hear' otherwise unnoticed things. Base code & idea from killaruna/ParaBot
#include "bot_globals.h"
void SoundAttachToThreat (edict_t *pEdict, const char *pszSample, float fVolume)
{
// Called by the Sound Hooking Code (in EMIT_SOUND)
// Enters the played Sound into the Array associated with the Entity
Vector vecPosition;
int iIndex;
if (FNullEnt (pEdict))
return;
// Hit/Fall Sound ?
if ((strncmp ("player/bhit_flesh", pszSample, 17) == 0)
|| (strncmp ("player/headshot", pszSample, 15) == 0))
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 800.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 800.0, 0.5, false, true)
}
// Weapon Pickup ?
else if (strncmp ("items/gunpickup", pszSample, 15) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 800.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 800.0, 0.5, false, true)
}
// Sniper zooming ?
else if (strncmp ("weapons/zoom", pszSample, 12) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.1;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 500.0, 0.1, false, true)
}
// Reload ?
else if (strncmp ("weapons/reload", pszSample, 14) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 1024.0, 3.0, false, true)
}
// The following Sounds don't have the Player Entity associated
// so we need to search the nearest Player
// Ammo Pickup ?
else if (strncmp ("items/9mmclip", pszSample, 13) == 0)
{
vecPosition = pEdict->v.origin;
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.1;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 500.0, 0.1, false, true)
}
// CT used Hostage ?
else if (strncmp ("hostage/hos", pszSample, 11) == 0)
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 5.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 5.0, false, false)
}
// Broke something ?
else if ((strncmp ("debris/bustmetal", pszSample, 16) == 0)
|| (strncmp ("debris/bustglass", pszSample, 16) == 0))
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 2.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 2.0, false, false)
}
// Someone opened a door
else if (strncmp ("doors/doormove", pszSample, 14) == 0)
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 3.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 3.0, false, false)
}
}
void SoundSimulateUpdate (int iPlayerIndex)
{
// Tries to simulate playing of Sounds to let the Bots hear
// sounds which aren't captured through Server Sound hooking
edict_t *pPlayer = clients[iPlayerIndex].pEdict;
float fVelocity = pPlayer->v.velocity.Length2D ();
float fHearDistance = 0.0;
float fTimeSound;
// Pressed Attack Button ?
if (pPlayer->v.oldbuttons & IN_ATTACK)
{
fHearDistance = 4096.0;
fTimeSound = gpGlobals->time + 0.5;
}
// Pressed Used Button ?
else if (pPlayer->v.oldbuttons & IN_USE)
{
fHearDistance = 1024.0;
fTimeSound = gpGlobals->time + 0.5;
}
// Uses Ladder ?
else if (pPlayer->v.movetype == MOVETYPE_FLY)
{
if (fabs (pPlayer->v.velocity.z) > 50)
{
fHearDistance = 1024.0;
fTimeSound = gpGlobals->time + 0.3;
}
}
// Moves fast enough ?
else
{
static float fMaxSpeed = 0.0;
if (fMaxSpeed == 0.0)
fMaxSpeed = CVAR_GET_FLOAT ("sv_maxspeed");
fHearDistance = 1024.0 * (fVelocity / fMaxSpeed);
fTimeSound = gpGlobals->time + 0.3;
}
// Did issue Sound ?
if (fHearDistance > 0.0)
{
// Some sound already associated ?
if (clients[iPlayerIndex].fTimeSoundLasting > gpGlobals->time)
{
// New Sound louder (bigger range) than old sound ?
if (clients[iPlayerIndex].fHearingDistance <= fHearDistance)
{
// Override it with new
//clients[iPlayerIndex].fHearingDistance = fHearDistance;
//clients[iPlayerIndex].fTimeSoundLasting = fTimeSound;
//clients[iPlayerIndex].vecSoundPosition = pPlayer->v.origin;
SoundMethod(iPlayerIndex, true, 0, 0, true, true)
}
}
// New sound ?
else
{
// Just remember it
//clients[iPlayerIndex].fHearingDistance = fHearDistance;
//clients[iPlayerIndex].fTimeSoundLasting = fTimeSound;
//clients[iPlayerIndex].vecSoundPosition = pPlayer->v.origin;
SoundMethod(iPlayerIndex, true, 0, 0, true, true)
}
}
void SoundMethod(int i, boolean a,float b, float c, boolean d, boolean e)
{
if(a)
clients[i].fHearingDistance = fHearDistance;
else
clients[i].fHearingDistance = b * fVolume;
if(d){
clients[i].fTimeSoundLasting = fTimeSound;
else
clients[i].fTimeSoundLasting = gpGlobals->time + c;
if(e)
clients[i].vecSoundPosition = pEdict->v.origin;
else
clients[i].vecSoundPosition = vecPosition;
}
}
|