Thread: bot_sounds.cpp
View Single Post
Re: bot_sounds.cpp
Old
  (#11)
Huntkillaz
Member
 
Huntkillaz's Avatar
 
Status: Offline
Posts: 594
Join Date: Mar 2004
Location: Middle Earth (New Zealand)
Default Re: bot_sounds.cpp - 25-06-2004

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;

} 

}




●_•
  
Reply With Quote