Ensure kicking player has FL_FAKECLIENT bit set and his name length greater than zero.
Replaced "_mm_load_ss" with "_mm_set1_ps" in A_sqrtf. Should fix minor problems. When simulate sound play for bots, verify that issuer origin is not zero. Enable by default smart bot kick management for autovacation.
This commit is contained in:
parent
7d531ee451
commit
684637df03
3 changed files with 23 additions and 14 deletions
|
|
@ -30,7 +30,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
#include <xmmintrin.h>
|
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -150,22 +149,23 @@ namespace Math
|
||||||
const float MATH_R2D = 180.0f / MATH_PI;
|
const float MATH_R2D = 180.0f / MATH_PI;
|
||||||
|
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: mm_abs
|
// Function: sse_abs
|
||||||
//
|
//
|
||||||
// mm version if abs
|
// mm version if abs
|
||||||
//
|
//
|
||||||
static inline __m128 mm_abs (__m128 val)
|
static inline __m128 sse_abs (__m128 val)
|
||||||
{
|
{
|
||||||
return _mm_andnot_ps (_mm_castsi128_ps (_mm_set1_epi32 (0x80000000)), val);
|
return _mm_andnot_ps (_mm_castsi128_ps (_mm_set1_epi32 (0x80000000)), val);
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: mm_sine
|
// Function: sse_sine
|
||||||
//
|
//
|
||||||
// mm version if sine
|
// mm version if sine
|
||||||
//
|
//
|
||||||
static inline __m128 mm_sine (__m128 inp)
|
static inline __m128 sse_sine (__m128 inp)
|
||||||
{
|
{
|
||||||
__m128 pi2 = _mm_set1_ps (MATH_PI * 2);
|
__m128 pi2 = _mm_set1_ps (MATH_PI * 2);
|
||||||
__m128 val = _mm_cmpnlt_ps (inp, _mm_set1_ps (MATH_PI));
|
__m128 val = _mm_cmpnlt_ps (inp, _mm_set1_ps (MATH_PI));
|
||||||
|
|
@ -175,12 +175,12 @@ namespace Math
|
||||||
val = _mm_cmpngt_ps (inp, _mm_set1_ps (-MATH_PI));
|
val = _mm_cmpngt_ps (inp, _mm_set1_ps (-MATH_PI));
|
||||||
val = _mm_and_ps (val, pi2);
|
val = _mm_and_ps (val, pi2);
|
||||||
inp = _mm_add_ps (inp, val);
|
inp = _mm_add_ps (inp, val);
|
||||||
val = _mm_mul_ps (mm_abs (inp), _mm_set1_ps (-4.0f / (MATH_PI * MATH_PI)));
|
val = _mm_mul_ps (sse_abs (inp), _mm_set1_ps (-4.0f / (MATH_PI * MATH_PI)));
|
||||||
val = _mm_add_ps (val, _mm_set1_ps (4.0f / MATH_PI));
|
val = _mm_add_ps (val, _mm_set1_ps (4.0f / MATH_PI));
|
||||||
|
|
||||||
__m128 res = _mm_mul_ps (val, inp);
|
__m128 res = _mm_mul_ps (val, inp);
|
||||||
|
|
||||||
val = _mm_mul_ps (mm_abs (res), res);
|
val = _mm_mul_ps (sse_abs (res), res);
|
||||||
val = _mm_sub_ps (val, res);
|
val = _mm_sub_ps (val, res);
|
||||||
val = _mm_mul_ps (val, _mm_set1_ps (0.225f));
|
val = _mm_mul_ps (val, _mm_set1_ps (0.225f));
|
||||||
res = _mm_add_ps (val, res);
|
res = _mm_add_ps (val, res);
|
||||||
|
|
@ -196,7 +196,7 @@ namespace Math
|
||||||
static inline float A_sqrtf (float value)
|
static inline float A_sqrtf (float value)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
return _mm_cvtss_f32 (_mm_sqrt_ss (_mm_load_ss (&value)));
|
return _mm_cvtss_f32 (_mm_sqrt_ss (_mm_set1_ps (value)));
|
||||||
#else
|
#else
|
||||||
return sqrtf (value);
|
return sqrtf (value);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -210,7 +210,7 @@ namespace Math
|
||||||
static inline float A_sinf (float value)
|
static inline float A_sinf (float value)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
return _mm_cvtss_f32 (mm_sine (_mm_set1_ps (value)));
|
return _mm_cvtss_f32 (sse_sine (_mm_set1_ps (value)));
|
||||||
#else
|
#else
|
||||||
return sinf (value);
|
return sinf (value);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -224,7 +224,7 @@ namespace Math
|
||||||
static inline float A_cosf (float value)
|
static inline float A_cosf (float value)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
return _mm_cvtss_f32 (mm_sine (_mm_set1_ps (value + MATH_PI / 2.0f)));
|
return _mm_cvtss_f32 (sse_sine (_mm_set1_ps (value + MATH_PI / 2.0f)));
|
||||||
#else
|
#else
|
||||||
return cosf (value);
|
return cosf (value);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -238,7 +238,7 @@ namespace Math
|
||||||
static inline void A_sincosf (float rad, float *sine, float *cosine)
|
static inline void A_sincosf (float rad, float *sine, float *cosine)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SSE_INTRINSICS
|
#ifdef ENABLE_SSE_INTRINSICS
|
||||||
__m128 m_sincos = mm_sine (_mm_set_ps (0.0f, 0.0f, rad + MATH_PI / 2.f, rad));
|
__m128 m_sincos = sse_sine (_mm_set_ps (0.0f, 0.0f, rad + MATH_PI / 2.f, rad));
|
||||||
__m128 m_cos = _mm_shuffle_ps (m_sincos, m_sincos, _MM_SHUFFLE (0, 0, 0, 1));
|
__m128 m_cos = _mm_shuffle_ps (m_sincos, m_sincos, _MM_SHUFFLE (0, 0, 0, 1));
|
||||||
|
|
||||||
*sine = _mm_cvtss_f32 (m_sincos);
|
*sine = _mm_cvtss_f32 (m_sincos);
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
#include <core.h>
|
#include <core.h>
|
||||||
|
|
||||||
ConVar yb_autovacate ("yb_autovacate", "1");
|
ConVar yb_autovacate ("yb_autovacate", "1");
|
||||||
ConVar yb_autovacate_smart_kick ("yb_autovacate_smart_kick", "0");
|
ConVar yb_autovacate_smart_kick ("yb_autovacate_smart_kick", "1");
|
||||||
|
|
||||||
ConVar yb_quota ("yb_quota", "0", VT_NORMAL);
|
ConVar yb_quota ("yb_quota", "0", VT_NORMAL);
|
||||||
ConVar yb_quota_mode ("yb_quota_mode", "normal");
|
ConVar yb_quota_mode ("yb_quota_mode", "normal");
|
||||||
|
|
@ -1331,11 +1331,16 @@ void Bot::Kick (bool keepQuota)
|
||||||
{
|
{
|
||||||
// this function kick off one bot from the server.
|
// this function kick off one bot from the server.
|
||||||
|
|
||||||
|
auto username = STRING (pev->netname);
|
||||||
|
|
||||||
|
if (!(pev->flags & FL_FAKECLIENT) || IsNullString (username))
|
||||||
|
return;
|
||||||
|
|
||||||
// clear fakeclient bit immediately
|
// clear fakeclient bit immediately
|
||||||
pev->flags &= ~FL_FAKECLIENT;
|
pev->flags &= ~FL_FAKECLIENT;
|
||||||
|
|
||||||
engine.IssueCmd ("kick \"%s\"", STRING (pev->netname));
|
engine.IssueCmd ("kick \"%s\"", username);
|
||||||
engine.CenterPrintf ("Bot '%s' kicked", STRING (pev->netname));
|
engine.CenterPrintf ("Bot '%s' kicked", username);
|
||||||
|
|
||||||
// keep quota number up to date
|
// keep quota number up to date
|
||||||
if (!keepQuota)
|
if (!keepQuota)
|
||||||
|
|
|
||||||
|
|
@ -722,6 +722,10 @@ void SoundAttachToClients (edict_t *ent, const char *sample, float volume)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const Vector &origin = engine.GetAbsOrigin (ent);
|
const Vector &origin = engine.GetAbsOrigin (ent);
|
||||||
|
|
||||||
|
if (origin.IsZero ())
|
||||||
|
return;
|
||||||
|
|
||||||
int index = engine.IndexOfEntity (ent) - 1;
|
int index = engine.IndexOfEntity (ent) - 1;
|
||||||
|
|
||||||
if (index < 0 || index >= engine.MaxClients ())
|
if (index < 0 || index >= engine.MaxClients ())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue