Add the ability to set absolute velocity
This commit is contained in:
parent
0036f44d4f
commit
d9da094430
@ -76,6 +76,38 @@ bool UTIL_ContainsDataTable(SendTable *pTable, const char *name)
|
||||
return false;
|
||||
}
|
||||
|
||||
void UTIL_StringToVector( float *pVector, const char *pString )
|
||||
{
|
||||
char *pstr, *pfront, tempString[128];
|
||||
int j;
|
||||
|
||||
Q_strncpy( tempString, pString, sizeof(tempString) );
|
||||
pstr = pfront = tempString;
|
||||
|
||||
for ( j = 0; j < 3; j++ ) // lifted from pr_edict.c
|
||||
{
|
||||
pVector[j] = atof( pfront );
|
||||
|
||||
// skip any leading whitespace
|
||||
while ( *pstr && *pstr <= ' ' )
|
||||
pstr++;
|
||||
|
||||
// skip to next whitespace
|
||||
while ( *pstr && *pstr > ' ' )
|
||||
pstr++;
|
||||
|
||||
if (!*pstr)
|
||||
break;
|
||||
|
||||
pstr++;
|
||||
pfront = pstr;
|
||||
}
|
||||
for ( j++; j < 3; j++ )
|
||||
{
|
||||
pVector[j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
class CTraceFilterSimple : public CTraceFilter
|
||||
{
|
||||
public:
|
||||
@ -324,10 +356,13 @@ DETOUR_DECL_STATIC2(DETOUR_CreateEntityByName, CBaseEntity*, const char*, classN
|
||||
|
||||
DETOUR_DECL_MEMBER2(DETOUR_KeyValue, bool, const char *, szKeyName, const char *, szValue)
|
||||
{
|
||||
CBaseEntity *pEntity = (CBaseEntity *)this;
|
||||
|
||||
// Fix crash bug in engine
|
||||
if(strcasecmp(szKeyName, "angle") == 0)
|
||||
{
|
||||
szKeyName = "angles";
|
||||
|
||||
}
|
||||
else if(strcasecmp(szKeyName, "classname") == 0 &&
|
||||
strcasecmp(szValue, "info_player_terrorist") == 0)
|
||||
{
|
||||
@ -336,13 +371,31 @@ DETOUR_DECL_MEMBER2(DETOUR_KeyValue, bool, const char *, szKeyName, const char *
|
||||
}
|
||||
else if(strcasecmp(szKeyName, "teamnum") == 0 || strcasecmp(szKeyName, "teamnum") == 0 )
|
||||
{
|
||||
CBaseEntity *pEntity = (CBaseEntity *)this;
|
||||
const char *pClassname = gamehelpers->GetEntityClassname(pEntity);
|
||||
|
||||
// All buyzones should be CT buyzones
|
||||
if(pClassname && strcasecmp(pClassname, "func_buyzone") == 0)
|
||||
szValue = "3";
|
||||
}
|
||||
else if(strcasecmp(szKeyName, "absvelocity") == 0)
|
||||
{
|
||||
static int m_AbsVelocity_offset = 0;
|
||||
|
||||
if (!m_AbsVelocity_offset)
|
||||
{
|
||||
datamap_t *pDataMap = gamehelpers->GetDataMap(pEntity);
|
||||
sm_datatable_info_t info;
|
||||
|
||||
gamehelpers->FindDataMapInfo(pDataMap, "m_vecAbsVelocity", &info);
|
||||
m_AbsVelocity_offset = info.actual_offset;
|
||||
}
|
||||
|
||||
float tmp[3];
|
||||
UTIL_StringToVector(tmp, szValue);
|
||||
|
||||
Vector *vecAbsVelocity = (Vector*)((uint8_t*)pEntity + m_AbsVelocity_offset);
|
||||
vecAbsVelocity->Init(tmp[0], tmp[1], tmp[2]);
|
||||
}
|
||||
|
||||
return DETOUR_MEMBER_CALL(DETOUR_KeyValue)(szKeyName, szValue);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user