X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Ffreezetag%2Fsv_freezetag.qc;h=5b4c80e7f619c6fc0ce768f8c2cb2a09e5067004;hp=5d94da9d9a41990093089895a7e62d8ece85026e;hb=ddd92adfb6efbb7017c371b9a1a66a889e5ac5e9;hpb=f6e7de9c845f26f9c4f68ab2eb21d61e92fed2f1 diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc index 5d94da9d9a..5b4c80e7f6 100644 --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc @@ -130,7 +130,7 @@ bool freezetag_CheckWinner() { Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, APP_TEAM_NUM(winner_team, CENTER_ROUND_TEAM_WIN)); Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(winner_team, INFO_ROUND_TEAM_WIN)); - TeamScore_AddToTeam(winner_team, ST_SCORE, +1); + TeamScore_AddToTeam(winner_team, ST_FT_ROUNDS, +1); } else if(winner_team == -1) { @@ -361,9 +361,14 @@ MUTATOR_HOOKFUNCTION(ft, PlayerDies) if (STAT(FROZEN, frag_target) == FROZEN_NORMAL) Unfreeze(frag_target, true); freezetag_count_alive_players(); - return true; // let the player die so that he can respawn whenever he wants + frag_target.respawn_time = time; + frag_target.respawn_flags |= RESPAWN_FORCE; + return true; } + frag_target.respawn_time = time + 1; + frag_target.respawn_flags |= RESPAWN_FORCE; + // Cases DEATH_TEAMCHANGE and DEATH_AUTOTEAMCHANGE are needed to fix a bug whe // you succeed changing team through the menu: you both really die (gibbing) and get frozen if(ITEM_DAMAGE_NEEDKILL(frag_deathtype) @@ -470,15 +475,18 @@ MUTATOR_HOOKFUNCTION(ft, PlayerPreThink, CBC_ORDER_FIRST) if(!round_handler_IsRoundStarted()) return true; - int n; entity player = M_ARGV(0, entity); //if (STAT(FROZEN, player) == FROZEN_NORMAL) //if(player.freezetag_frozen_timeout > 0 && time < player.freezetag_frozen_timeout) //player.iceblock.alpha = ICE_MIN_ALPHA + (ICE_MAX_ALPHA - ICE_MIN_ALPHA) * (player.freezetag_frozen_timeout - time) / (player.freezetag_frozen_timeout - player.freezetag_frozen_time); + if (!(frametime && IS_PLAYER(player))) + return true; + entity reviving_players_last = NULL; entity reviving_players_first = NULL; + int n; if(player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout) n = -1; else @@ -547,7 +555,7 @@ MUTATOR_HOOKFUNCTION(ft, PlayerPreThink, CBC_ORDER_FIRST) MUTATOR_HOOKFUNCTION(ft, SetStartItems) { - start_items &= ~IT_UNLIMITED_AMMO; + start_items &= ~(IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS); //start_health = warmup_start_health = cvar("g_lms_start_health"); //start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor"); start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells"); @@ -607,6 +615,20 @@ MUTATOR_HOOKFUNCTION(ft, FragCenterMessage) return true; } +MUTATOR_HOOKFUNCTION(ft, SV_ParseServerCommand) +{ + string cmd_name = M_ARGV(0, string); + if (cmd_name == "shuffleteams") + shuffleteams_on_reset_map = !(round_handler_IsActive() && !round_handler_IsRoundStarted()); + return false; +} + +MUTATOR_HOOKFUNCTION(ft, Scores_CountFragsRemaining) +{ + // announce remaining frags + return true; +} + void freezetag_Initialize() { freezetag_teams = autocvar_g_freezetag_teams_override; @@ -615,6 +637,7 @@ void freezetag_Initialize() freezetag_teams = BITS(bound(2, freezetag_teams, 4)); GameRules_scoring(freezetag_teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, { + field_team(ST_FT_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY); field(SP_FREEZETAG_REVIVALS, "revivals", 0); });