]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/gameover_stuff
authorterencehill <piuntn@gmail.com>
Tue, 13 Sep 2016 20:56:35 +0000 (22:56 +0200)
committerterencehill <piuntn@gmail.com>
Tue, 13 Sep 2016 20:56:35 +0000 (22:56 +0200)
1  2 
qcsrc/server/mutators/mutator/gamemode_assault.qc

index 6b31dbf2f91bd406f1616334d57b1168487dad9e,b032ab01949db9c6453da64da4d96058e9a926ce..6127aa72a536cd36cfa3d9afac05ef6212c700a8
@@@ -1,7 -1,6 +1,7 @@@
  #include "gamemode_assault.qh"
  
  .entity sprite;
 +#define AS_ROUND_DELAY 5
  
  // random functions
  void assault_objective_use(entity this, entity actor, entity trigger)
@@@ -186,15 -185,6 +186,6 @@@ void assault_new_round(entity this
  {
        //bprint("ASSAULT: new round\n");
  
-       // Eject players from vehicles
-     FOREACH_CLIENT(IS_PLAYER(it) && it.vehicle, vehicles_exit(it.vehicle, VHEF_RELEASE));
-     IL_EACH(g_vehicles, true,
-     {
-         vehicles_clearreturn(it);
-         vehicles_spawn(it);
-     });
        // up round counter
        this.winning = this.winning + 1;
  
        });
  
        // reset the level with a countdown
 -      cvar_set("timelimit", ftos(ceil(time - game_starttime) / 60));
 +      cvar_set("timelimit", ftos(ceil(time - AS_ROUND_DELAY - game_starttime) / 60));
        ReadyRestart_force(); // sets game_starttime
  }
  
 +entity as_round;
 +.entity ent_winning;
 +void as_round_think()
 +{
 +      gameover = false;
 +      assault_new_round(as_round.ent_winning);
 +      delete(as_round);
 +      as_round = NULL;
 +}
 +
  // Assault winning condition: If the attackers triggered a round end (by fulfilling all objectives)
  // they win. Otherwise the defending team wins once the timelimit passes.
  int WinningCondition_Assault()
  {
 +      if(as_round)
 +              return WINNING_NO;
 +
        WinningConditionHelper(NULL); // set worldstatus
  
        int status = WINNING_NO;
        {
                if(ent.winning) // round end has been triggered by attacking team
                {
 -                      bprint("ASSAULT: round completed...\n");
 +                      bprint("Assault: round completed.\n");
                        SetWinners(team, assault_attacker_team);
  
                        TeamScore_AddToTeam(assault_attacker_team, ST_ASSAULT_OBJECTIVES, 666 - TeamScore_AddToTeam(assault_attacker_team, ST_ASSAULT_OBJECTIVES, 0));
                        }
                        else
                        {
 -                              assault_new_round(ent);
 +                              Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_ASSAULT_OBJ_DESTROYED, ceil(time - game_starttime));
 +                              as_round = new(as_round);
 +                              as_round.think = as_round_think;
 +                              as_round.ent_winning = ent;
 +                              as_round.nextthink = time + AS_ROUND_DELAY;
 +                              gameover = true;
 +
 +                              // make sure timelimit isn't hit while the game is blocked
 +                              if(autocvar_timelimit > 0)
 +                              if(time + AS_ROUND_DELAY >= game_starttime + autocvar_timelimit * 60)
 +                                      cvar_set("timelimit", ftos(autocvar_timelimit + AS_ROUND_DELAY / 60));
                        }
                }
        }
@@@ -564,11 -531,13 +555,13 @@@ MUTATOR_HOOKFUNCTION(as, TurretSpawn
                turret.team = 5; // this gets reversed when match starts?
  }
  
- MUTATOR_HOOKFUNCTION(as, VehicleSpawn)
+ MUTATOR_HOOKFUNCTION(as, VehicleInit)
  {
        entity veh = M_ARGV(0, entity);
  
-       veh.nextthink = time + 0.5;
+       if(veh.active != ACTIVE_NOT)
+               veh.nextthink = time + 0.5;
+       return true;
  }
  
  MUTATOR_HOOKFUNCTION(as, HavocBot_ChooseRole)