X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_assault.qc;h=6364b7dad1b8e9ff948851cf96c2e765aa63b128;hb=3cc2f37092129be173109ef4c47d765945e94b7a;hp=b8a2ab1a59178d57543cef1bbd85bc19e34e7e8e;hpb=e090603a32c8cba598f2c54e355cdb5b32b0d986;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_assault.qc b/qcsrc/server/mutators/gamemode_assault.qc index b8a2ab1a5..6364b7dad 100644 --- a/qcsrc/server/mutators/gamemode_assault.qc +++ b/qcsrc/server/mutators/gamemode_assault.qc @@ -131,20 +131,20 @@ void target_objective_decrease_activate() ent.sprite = world; } - spr = WaypointSprite_SpawnFixed("", 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite, RADARICON_OBJECTIVE, '1 0.5 0'); + spr = WaypointSprite_SpawnFixed(WP_Assault, 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite, RADARICON_OBJECTIVE); spr.assault_decreaser = self; spr.waypointsprite_visible_for_player = assault_decreaser_sprite_visible; spr.classname = "sprite_waypoint"; WaypointSprite_UpdateRule(spr, assault_attacker_team, SPRITERULE_TEAMPLAY); if(ent.classname == "func_assault_destructible") { - WaypointSprite_UpdateSprites(spr, "as-defend", "as-destroy", "as-destroy"); + WaypointSprite_UpdateSprites(spr, WP_AssaultDefend, WP_AssaultDestroy, WP_AssaultDestroy); WaypointSprite_UpdateMaxHealth(spr, ent.max_health); WaypointSprite_UpdateHealth(spr, ent.health); ent.sprite = spr; } else - WaypointSprite_UpdateSprites(spr, "as-defend", "as-push", "as-push"); + WaypointSprite_UpdateSprites(spr, WP_AssaultDefend, WP_AssaultPush, WP_AssaultPush); } } @@ -170,7 +170,6 @@ void assault_roundstart_use() activator = self; SUB_UseTargets(); -#ifdef TTURRETS_ENABLED entity ent, oldself; //(Re)spawn all turrets @@ -186,12 +185,11 @@ void assault_roundstart_use() self = ent; // Dubbles as teamchange - turret_stdproc_respawn(); + turret_respawn(); ent = find(ent, classname, "turret_main"); } self = oldself; -#endif } void assault_wall_think() @@ -212,8 +210,31 @@ void assault_wall_think() // trigger new round // reset objectives, toggle spawnpoints, reset triggers, ... +void vehicles_clearreturn(entity veh); +void vehicles_spawn(); void assault_new_round() { + entity oldself; + //bprint("ASSAULT: new round\n"); + + oldself = self; + // Eject players from vehicles + FOR_EACH_PLAYER(self) + { + if(self.vehicle) + vehicles_exit(VHEF_RELEASE); + } + + self = findchainflags(vehicle_flags, VHF_ISVEHICLE); + while(self) + { + vehicles_clearreturn(self); + vehicles_spawn(); + self = self.chain; + } + + self = oldself; + // up round counter self.winning = self.winning + 1; @@ -551,6 +572,11 @@ MUTATOR_HOOKFUNCTION(assault_BotRoles) return true; } +MUTATOR_HOOKFUNCTION(assault_PlayHitsound) +{ + return (frag_victim.classname == "func_assault_destructible"); +} + // scoreboard setup void assault_ScoreRules() { @@ -566,6 +592,7 @@ MUTATOR_DEFINITION(gamemode_assault) MUTATOR_HOOK(TurretSpawn, assault_TurretSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(VehicleSpawn, assault_VehicleSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(HavocBot_ChooseRole, assault_BotRoles, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayHitsound, assault_PlayHitsound, CBC_ORDER_ANY); MUTATOR_ONADD {