// declarations
entity tmp_entity;
- self.nextthink = time;// + FLAG_THINKRATE; // only 5 fps, more is unnecessary.
+ self.nextthink = time + FLAG_THINKRATE; // only 5 fps, more is unnecessary.
// captureshield
if(self == ctf_worldflaglist) // only for the first flag
{
if(autocvar_g_ctf_flag_dropped_floatinwater)// && (self.flags & FL_INWATER))
{
- //self.velocity = self.velocity * 0.5;
- //self.velocity_z = autocvar_g_ctf_flag_dropped_floatinwater;
- //}
- if(self.water_foundsurface)
+ vector midpoint = ((self.absmin + self.absmax) * 0.5);
+ if(pointcontents(midpoint) == CONTENT_WATER)
{
- if(self.flags & FL_INWATER) { self.origin_z = self.water_height; }
- else { CTF_CLEARWATERVARS(self); }
- }
- else
- {
- if(self.flags & FL_INWATER)
- {
- if(self.was_in_water && self.was_in_air)
- {
- self.water_foundsurface = TRUE;
- self.water_height = self.origin_z;
- }
- else
- {
- self.was_in_water = TRUE;
- self.velocity_z = autocvar_g_ctf_flag_dropped_floatinwater;
- }
- }
+ self.velocity = self.velocity * 0.5;
+
+ if(pointcontents(midpoint + FLAG_FLOAT_OFFSET) == CONTENT_WATER)
+ { self.velocity_z = autocvar_g_ctf_flag_dropped_floatinwater; }
else
- {
- if(self.was_in_water) { self.was_in_air = TRUE; }
- else { CTF_CLEARWATERVARS(self); }
- }
+ { self.movetype = MOVETYPE_FLY; }
}
+ else if(self.movetype == MOVETYPE_FLY) { self.movetype = MOVETYPE_TOSS; }
}
-
if(autocvar_g_ctf_flag_return_dropped)
{
if((vlen(self.origin - self.ctf_spawnorigin) <= autocvar_g_ctf_flag_return_dropped) || (autocvar_g_ctf_flag_return_dropped == -1))
#define FLAG_CARRY_OFFSET ('-16 0 8')
#define FLAG_SPAWN_OFFSET ('0 0 1' * (PL_MAX_z - 13))
#define FLAG_WAYPOINT_OFFSET ('0 0 64')
+#define FLAG_FLOAT_OFFSET ('0 0 32')
#define VEHICLE_FLAG_OFFSET ('0 0 96')
#define VEHICLE_FLAG_SCALE 1.0
.entity pass_target;
.float throw_antispam;
-// water floating properties
-#define CTF_CLEARWATERVARS(ent) (ent.water_foundsurface = ent.water_height = ent.was_in_water = ent.was_in_air = FALSE)
-.float water_foundsurface;
-.float water_height;
-.float was_in_water;
-.float was_in_air;
-
// CaptureShield: If the player is too bad to be allowed to capture, shield them from taking the flag.
.float ctf_captureshielded; // set to 1 if the player is too bad to be allowed to capture
float ctf_captureshield_min_negscore; // punish at -20 points