.entity sprite;
.float captime;
+// pps: points per second
+.float dom_total_pps;
+.float dom_pps_red;
+.float dom_pps_blue;
+.float dom_pps_yellow;
+.float dom_pps_pink;
+float total_pps;
+float pps_red;
+float pps_blue;
+float pps_yellow;
+float pps_pink;
+void set_dom_state(void)
+{
+ // BIG ugly hack to make stat sending work
+ self.dom_total_pps = total_pps;
+ self.dom_pps_red = pps_red;
+ self.dom_pps_blue = pps_blue;
+ if(c3 >= 0)
+ {
+ self.dom_pps_yellow = pps_yellow;
+ }
+ if(c4 >= 0)
+ {
+ self.dom_pps_pink = pps_pink;
+ }
+}
+
void() dom_controlpoint_setup;
void LogDom(string mode, float team_before, entity actor)
self.delay = old_delay;
self.team = old_team;
+ switch(self.team)
+ {
+ // "fix" pps when slightly under 0 because of approximation errors
+ case COLOR_TEAM1:
+ pps_red -= (points/wait_time);
+ if (pps_red < 0) pps_red = 0;
+ break;
+ case COLOR_TEAM2:
+ pps_blue -= (points/wait_time);
+ if (pps_blue < 0) pps_blue = 0;
+ break;
+ case COLOR_TEAM3:
+ pps_yellow -= (points/wait_time);
+ if (pps_yellow < 0) pps_yellow = 0;
+ break;
+ case COLOR_TEAM4:
+ pps_pink -= (points/wait_time);
+ if (pps_pink < 0) pps_pink = 0;
+ }
+
switch(self.goalentity.team)
{
+ // "fix" pps when slightly over total_pps because of approximation errors
case COLOR_TEAM1:
+ pps_red += (points/wait_time);
+ if (pps_red > total_pps) pps_red = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-red", "", "");
break;
case COLOR_TEAM2:
+ pps_blue += (points/wait_time);
+ if (pps_blue > total_pps) pps_blue = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-blue", "", "");
break;
case COLOR_TEAM3:
+ pps_yellow += (points/wait_time);
+ if (pps_yellow > total_pps) pps_yellow = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-yellow", "", "");
break;
case COLOR_TEAM4:
+ pps_pink += (points/wait_time);
+ if (pps_pink > total_pps) pps_pink = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-pink", "", "");
- break;
}
+
+ FOR_EACH_PLAYER(self)
+ set_dom_state();
+
WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_DOMPOINT, colormapPaletteColor(self.goalentity.team - 1, 0));
WaypointSprite_Ping(self.sprite);
if (gameover || self.delay > time || time < game_starttime) // game has ended, don't keep giving points
return;
- g_domination_point_rate = cvar("g_domination_point_rate");
- g_domination_point_amt = cvar("g_domination_point_amt");
-
if(g_domination_point_rate)
self.delay = time + g_domination_point_rate;
else
self.effects = self.effects | EF_LOWPRECISION;
if (cvar("g_domination_point_fullbright"))
self.effects |= EF_FULLBRIGHT;
+
+ float points, waittime;
+ if (g_domination_point_rate)
+ points = g_domination_point_rate;
+ else
+ points = self.frags;
+ if(points == 0) // default
+ points = 1;
+
+ if (g_domination_point_amt)
+ waittime = g_domination_point_amt;
+ else
+ waittime = self.wait;
+ if(waittime == 0) // default
+ waittime = 5;
+ total_pps += points/waittime;
};
// code from here on is just to support maps that don't have control point and team entities
precache_sound("domination/claim.wav");
InitializeEntity(world, dom_delayedinit, INITPRIO_GAMETYPE);
+ addstat(STAT_DOM_TOTAL_PPS, AS_FLOAT, dom_total_pps);
+ addstat(STAT_DOM_PPS_RED, AS_FLOAT, dom_pps_red);
+ addstat(STAT_DOM_PPS_BLUE, AS_FLOAT, dom_pps_blue);
+ if(c3 >= 0) addstat(STAT_DOM_PPS_YELLOW, AS_FLOAT, dom_pps_yellow);
+ if(c4 >= 0) addstat(STAT_DOM_PPS_PINK, AS_FLOAT, dom_pps_pink);
+
+ g_domination_point_rate = cvar("g_domination_point_rate");
+ g_domination_point_amt = cvar("g_domination_point_amt");
+
// teamplay is always on in domination, defaults to hurt self but not teammates
//if(!teams_matter)
// cvar_set("teamplay", "3");