#include "sv_generator.qh"
#include <server/bot/api.qh>
+#include <server/campaign.qh>
#include <server/command/vote.qh>
#include <server/damage.qh>
#include <server/items/items.qh>
sound(this, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILT, VOL_BASE, ATTEN_NORM);
this.owner.iscaptured = true;
this.solid = SOLID_BBOX;
+ setorigin(this, this.origin); // setorigin after change to solid field to ensure area grid linking
Send_Effect(EFFECT_CAP(this.owner.team), this.owner.origin, '0 0 0', 1);
{
entity e = new(onslaught_controlpoint_icon);
+ e.solid = SOLID_NOT; // before setsize/setorigin to prevent area grid linking
setsize(e, CPICON_MIN, CPICON_MAX);
setorigin(e, cp.origin + CPICON_OFFSET);
e.owner = cp;
e.max_health = autocvar_g_onslaught_cp_health;
SetResourceExplicit(e, RES_HEALTH, autocvar_g_onslaught_cp_buildhealth);
- e.solid = SOLID_NOT;
e.takedamage = DAMAGE_AIM;
e.bot_attack = true;
IL_PUSH(g_bot_targets, e);
ons_worldgeneratorlist = gen;
gen.netname = sprintf("%s generator", Team_ColoredFullName(teamnum));
- gen.classname = "onslaught_generator";
gen.solid = SOLID_BBOX;
gen.team_saved = teamnum;
IL_PUSH(g_saved_team, gen);
total_generators = 0;
for (int i = 1; i <= NUM_TEAMS; ++i)
{
- Team_SetNumberOfControlPoints(Team_GetTeamFromIndex(i), 0);
+ Team_SetNumberOfOwnedItems(Team_GetTeamFromIndex(i), 0);
}
for(e = ons_worldgeneratorlist; e; e = e.ons_worldgeneratornext)
{
continue;
}
entity team_ = Entity_GetTeam(e);
- int num_control_points = Team_GetNumberOfControlPoints(team_);
- ++num_control_points;
- Team_SetNumberOfControlPoints(team_, num_control_points);
+ int num_generators = Team_GetNumberOfOwnedItems(team_);
+ ++num_generators;
+ Team_SetNumberOfOwnedItems(team_, num_generators);
}
}
-int Onslaught_GetWinnerTeam()
-{
- int winner_team = 0;
- if (Team_GetNumberOfControlPoints(Team_GetTeamFromIndex(1)) >= 1)
- {
- winner_team = NUM_TEAM_1;
- }
- for (int i = 2; i <= NUM_TEAMS; ++i)
- {
- if (Team_GetNumberOfControlPoints(Team_GetTeamFromIndex(i)) >= 1)
- {
- if (winner_team != 0)
- {
- return 0;
- }
- winner_team = Team_IndexToTeam(i);
- }
- }
- if (winner_team)
- {
- return winner_team;
- }
- return -1; // no generators left?
-}
-
void nades_Clear(entity e);
bool Onslaught_CheckWinner()
else { wpforenemy_announced = false; ons_stalemate = false; }
Onslaught_count_generators();
-
- if (Team_GetNumberOfTeamsWithControlPoints() > 1)
- {
+ int winner_team = Team_GetWinnerTeam_WithOwnedItems(1);
+ if (!winner_team)
return 0;
- }
-
- int winner_team = Onslaught_GetWinnerTeam();
if(winner_team > 0)
{
void ons_Initialize()
{
g_onslaught = true;
+ g_onsshields = IL_NEW();
ons_captureshield_force = autocvar_g_onslaught_shield_force;
cam = new(objective_camera);