r3593 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Apr 23 14:56:21 EDT 2008
Author: div0
Date: 2008-04-23 14:56:21 -0400 (Wed, 23 Apr 2008)
New Revision: 3593
Modified:
trunk/data/qcsrc/server/ctf.qc
Log:
blinking magic: if there is more than one flag, show one of these in a clever way
"fixes" "flag status shows key in ftw" "bug"
Modified: trunk/data/qcsrc/server/ctf.qc
===================================================================
--- trunk/data/qcsrc/server/ctf.qc 2008-04-22 08:34:11 UTC (rev 3592)
+++ trunk/data/qcsrc/server/ctf.qc 2008-04-23 18:56:21 UTC (rev 3593)
@@ -654,22 +654,18 @@
flagcaptimerecord = stof(db_get(ServerProgsDB, strcat(GetMapname(), "/captimerecord/time")));
};
-void(entity flag) ctf_setstatus2 =
+void(entity flag, float shift) ctf_setstatus2 =
{
- if (flag) {
- local float shift;
- if (flag.team == COLOR_TEAM1) shift = IT_RED_FLAG_TAKEN;
- else if (flag.team == COLOR_TEAM2) shift = IT_BLUE_FLAG_TAKEN;
- else shift = 0;
-
- local float status;
- if (flag.cnt == FLAG_CARRY)
- if (flag.owner == self) status = 3;
- else status = 1;
- else if (flag.cnt == FLAG_DROPPED) status = 2;
- else status = 0;
-
- self.items = self.items | (shift * status);
+ if (flag.cnt == FLAG_CARRY)
+ if (flag.owner == self)
+ self.items |= shift * 3;
+ else
+ self.items |= shift * 1;
+ else if (flag.cnt == FLAG_DROPPED)
+ self.items |= shift * 2;
+ else
+ {
+ // no status bits
}
};
@@ -682,11 +678,37 @@
if (g_ctf) {
local entity flag;
- flag = ctf_worldflaglist;
- while (flag)
+ float redflags, blueflags;
+
+ redflags = 0;
+ blueflags = 0;
+
+ for (flag = ctf_worldflaglist; flag; flag = flag.ctf_worldflagnext) if(flag.cnt != FLAG_BASE)
{
- ctf_setstatus2(flag);
- flag = flag.ctf_worldflagnext;
+ if(flag.team == COLOR_TEAM1)
+ ++redflags;
+ else if(flag.team == COLOR_TEAM2)
+ ++blueflags;
}
+
+ // blinking magic: if there is more than one flag, show one of these in a clever way
+ if(redflags)
+ redflags = mod(floor(time * redflags * 0.75), redflags);
+ if(blueflags)
+ blueflags = mod(floor(time * blueflags * 0.75), blueflags);
+
+ for (flag = ctf_worldflaglist; flag; flag = flag.ctf_worldflagnext) if(flag.cnt != FLAG_BASE)
+ {
+ if(flag.team == COLOR_TEAM1)
+ {
+ if(redflags-- == 0) // happens exactly once
+ ctf_setstatus2(flag, IT_RED_FLAG_TAKEN);
+ }
+ else if(flag.team == COLOR_TEAM2)
+ {
+ if(blueflags-- == 0) // happens exactly once
+ ctf_setstatus2(flag, IT_BLUE_FLAG_TAKEN);
+ }
+ }
}
};
More information about the nexuiz-commits
mailing list