mirror of
https://git.code.sf.net/p/quake/game-source
synced 2024-11-22 12:01:26 +00:00
122 lines
2.3 KiB
C++
122 lines
2.3 KiB
C++
#include "common.qh"
|
|
#include "misc.qh"
|
|
#include "server.qh"
|
|
#include "delays.qh"
|
|
|
|
.float delay_health, delay_armorvalue, delay_currentammo;
|
|
.float delay_items, delay_effects;
|
|
|
|
.float delay_ammo_shells, delay_ammo_nails;
|
|
.float delay_ammo_rockets, delay_ammo_cells;
|
|
|
|
.float delay_dmg_take, delay_dmg_save;
|
|
|
|
.float delay_time, delay_last_change;
|
|
|
|
#define all_func(func) \
|
|
void () func##_all = { \
|
|
local entity oldself; \
|
|
local float i; \
|
|
\
|
|
oldself = self; \
|
|
\
|
|
self = world; \
|
|
for (i = 0; i < max_clients; i++) { \
|
|
self = nextent (self); \
|
|
\
|
|
if (!is_cl (self)) \
|
|
continue; \
|
|
\
|
|
func (); \
|
|
} \
|
|
\
|
|
self = oldself; \
|
|
}
|
|
|
|
#define do_fields() \
|
|
do_(health); \
|
|
do_(armorvalue); \
|
|
do_(currentammo); \
|
|
do_(items); \
|
|
do_(effects); \
|
|
do_(ammo_shells); \
|
|
do_(ammo_nails); \
|
|
do_(ammo_rockets); \
|
|
do_(ammo_cells);
|
|
|
|
void ()
|
|
delays_swapin_stats =
|
|
{
|
|
local float tmp;
|
|
|
|
#define do_(field) \
|
|
tmp = self.field; \
|
|
self.field = self.delay_##field; \
|
|
self.delay_##field = tmp;
|
|
|
|
do_fields ();
|
|
#undef do_
|
|
};
|
|
|
|
all_func (delays_swapin_stats);
|
|
|
|
// ===================================================================== //
|
|
|
|
float ()
|
|
delays_changed =
|
|
{
|
|
#define do_(field) \
|
|
if (floor (self.field) != floor (self.delay_##field)) \
|
|
return TRUE
|
|
do_fields ();
|
|
#undef do_
|
|
|
|
return FALSE;
|
|
};
|
|
|
|
// ===================================================================== //
|
|
|
|
void ()
|
|
delays_force_update =
|
|
{
|
|
self.delay_time = 0;
|
|
};
|
|
|
|
all_func (delays_force_update);
|
|
|
|
// ===================================================================== //
|
|
|
|
void ()
|
|
delays_swapout_stats =
|
|
{
|
|
if (delays_changed ())
|
|
self.delay_last_change = time;
|
|
|
|
self.delay_dmg_take += self.dmg_take;
|
|
self.dmg_take = 0;
|
|
self.delay_dmg_save += self.dmg_save;
|
|
self.dmg_save = 0;
|
|
|
|
if (time < self.delay_time) {
|
|
delays_swapin_stats ();
|
|
return;
|
|
}
|
|
|
|
#define do_(field) self.delay_##field = self.field
|
|
do_fields ();
|
|
#undef do_
|
|
|
|
self.dmg_take = ceil (self.delay_dmg_take);
|
|
self.delay_dmg_take = 0;
|
|
if (self.dmg_take > 255)
|
|
self.dmg_take = 255;
|
|
|
|
self.dmg_save = ceil(self.delay_dmg_save); self.delay_dmg_save = 0;
|
|
if (self.dmg_save > 255)
|
|
self.dmg_save = 255;
|
|
|
|
if ((self.delay_last_change - time) >= -CONFIG_STATS_DELAY)
|
|
self.delay_time = time + CONFIG_STATS_DELAY;
|
|
};
|
|
|
|
all_func (delays_swapout_stats);
|