X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_freezetag.qc;h=85ef5119f85e6d85cde9de45be211f351a6b3f5e;hb=2ce2f533321210bef1f49b1245a8ea1fda15eea4;hp=5ab96277b9e4a286a04999ab8c0832fb09d0fdc2;hpb=b5c7eb4ebce0271e742eb850ad9b974a1540fef3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc index 5ab96277b..85ef5119f 100644 --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@ -1,13 +1,11 @@ -.float freezetag_frozen_time; -.float freezetag_frozen_timeout; -#define ICE_MAX_ALPHA 1 -#define ICE_MIN_ALPHA 0.1 -float freezetag_teams; +#include "gamemode_freezetag.qh" -#define SP_FREEZETAG_REVIVALS 4 +#include "gamemode.qh" + +const float SP_FREEZETAG_REVIVALS = 4; void freezetag_ScoreRules(float teams) { - ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); // SFL_SORT_PRIO_PRIMARY ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS, "revivals", 0); ScoreRules_basics_end(); } @@ -39,9 +37,9 @@ void freezetag_count_alive_players() #define FREEZETAG_ALIVE_TEAMS() ((redalive > 0) + (bluealive > 0) + (yellowalive > 0) + (pinkalive > 0)) #define FREEZETAG_ALIVE_TEAMS_OK() (FREEZETAG_ALIVE_TEAMS() == freezetag_teams) -float prev_missing_teams_mask; float freezetag_CheckTeams() { + static float prev_missing_teams_mask; if(FREEZETAG_ALIVE_TEAMS_OK()) { if(prev_missing_teams_mask > 0) @@ -135,7 +133,7 @@ float freezetag_CheckWinner() } entity freezetag_LastPlayerForTeam() -{ +{SELFPARAM(); entity pl, last_pl = world; FOR_EACH_PLAYER(pl) { @@ -163,7 +161,7 @@ void freezetag_LastPlayerForTeam_Notify() } void freezetag_Add_Score(entity attacker) -{ +{SELFPARAM(); if(attacker == self) { // you froze your own dumb self @@ -181,14 +179,14 @@ void freezetag_Add_Score(entity attacker) } void freezetag_Freeze(entity attacker) -{ +{SELFPARAM(); if(self.frozen) return; if(autocvar_g_freezetag_frozen_maxtime > 0) self.freezetag_frozen_timeout = time + autocvar_g_freezetag_frozen_maxtime; - Freeze(self, 0, 1, TRUE); + Freeze(self, 0, 1, true); freezetag_count_alive_players(); @@ -196,7 +194,7 @@ void freezetag_Freeze(entity attacker) } void freezetag_Unfreeze(entity attacker) -{ +{SELFPARAM(); self.freezetag_frozen_time = 0; self.freezetag_frozen_timeout = 0; @@ -206,8 +204,8 @@ void freezetag_Unfreeze(entity attacker) float freezetag_isEliminated(entity e) { if(IS_PLAYER(e) && (e.frozen == 1 || e.deadflag != DEAD_NO)) - return TRUE; - return FALSE; + return true; + return false; } @@ -219,7 +217,7 @@ void() havocbot_role_ft_freeing; void() havocbot_role_ft_offense; void havocbot_goalrating_freeplayers(float ratingscale, vector org, float sradius) -{ +{SELFPARAM(); entity head; float distance; @@ -245,7 +243,7 @@ void havocbot_goalrating_freeplayers(float ratingscale, vector org, float sradiu } void havocbot_role_ft_offense() -{ +{SELFPARAM(); entity head; float unfrozen; @@ -266,7 +264,7 @@ void havocbot_role_ft_offense() // If only one left on team or if role has timed out then start trying to free players. if (((unfrozen == 0) && (!self.frozen)) || (time > self.havocbot_role_timeout)) { - dprint("changing role to freeing\n"); + LOG_TRACE("changing role to freeing\n"); self.havocbot_role = havocbot_role_ft_freeing; self.havocbot_role_timeout = 0; return; @@ -286,7 +284,7 @@ void havocbot_role_ft_offense() } void havocbot_role_ft_freeing() -{ +{SELFPARAM(); if(self.deadflag != DEAD_NO) return; @@ -295,7 +293,7 @@ void havocbot_role_ft_freeing() if (time > self.havocbot_role_timeout) { - dprint("changing role to offense\n"); + LOG_TRACE("changing role to offense\n"); self.havocbot_role = havocbot_role_ft_offense; self.havocbot_role_timeout = 0; return; @@ -320,7 +318,7 @@ void havocbot_role_ft_freeing() // ============== MUTATOR_HOOKFUNCTION(freezetag_RemovePlayer) -{ +{SELFPARAM(); self.health = 0; // neccessary to update correctly alive stats if(!self.frozen) freezetag_LastPlayerForTeam_Notify(); @@ -330,7 +328,7 @@ MUTATOR_HOOKFUNCTION(freezetag_RemovePlayer) } MUTATOR_HOOKFUNCTION(freezetag_PlayerDies) -{ +{SELFPARAM(); if(round_handler_IsActive()) if(round_handler_CountdownRunning()) { @@ -384,7 +382,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDies) } MUTATOR_HOOKFUNCTION(freezetag_PlayerSpawn) -{ +{SELFPARAM(); if(self.freezetag_frozen_timeout == -1) // if PlayerSpawn is called by reset_map_players return 1; // do nothing, round is starting right now @@ -407,13 +405,15 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerSpawn) } MUTATOR_HOOKFUNCTION(freezetag_reset_map_players) -{ - FOR_EACH_PLAYER(self) +{SELFPARAM(); + entity e; + FOR_EACH_PLAYER(e) { - self.killcount = 0; - self.freezetag_frozen_timeout = -1; + e.killcount = 0; + e.freezetag_frozen_timeout = -1; + setself(e); PutClientInServer(); - self.freezetag_frozen_timeout = 0; + e.freezetag_frozen_timeout = 0; } freezetag_count_alive_players(); return 1; @@ -425,9 +425,8 @@ MUTATOR_HOOKFUNCTION(freezetag_GiveFragsForKill) return 1; } -.float reviving; // temp var MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) -{ +{SELFPARAM(); float n; if(gameover) @@ -465,7 +464,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) if(!o) o = other; if(self.frozen == 1) - other.reviving = TRUE; + other.reviving = true; ++n; } } @@ -509,7 +508,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) if(other.reviving) { other.revive_progress = self.revive_progress; - other.reviving = FALSE; + other.reviving = false; } } } @@ -526,8 +525,23 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) return 1; } -MUTATOR_HOOKFUNCTION(freezetag_BotRoles) +MUTATOR_HOOKFUNCTION(freezetag_SetStartItems) { + start_items &= ~IT_UNLIMITED_AMMO; + //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"); + start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails"); + start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); + start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells"); + start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_lms_start_ammo_plasma"); + start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); + + return 0; +} + +MUTATOR_HOOKFUNCTION(freezetag_BotRoles) +{SELFPARAM(); if (!self.deadflag) { if (random() < 0.5) @@ -536,13 +550,13 @@ MUTATOR_HOOKFUNCTION(freezetag_BotRoles) self.havocbot_role = havocbot_role_ft_offense; } - return TRUE; + return true; } MUTATOR_HOOKFUNCTION(freezetag_GetTeamCount) { ret_float = freezetag_teams; - return 0; + return false; } void freezetag_Initialize() @@ -573,6 +587,7 @@ MUTATOR_DEFINITION(gamemode_freezetag) MUTATOR_HOOK(reset_map_players, freezetag_reset_map_players, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, freezetag_GiveFragsForKill, CBC_ORDER_FIRST); MUTATOR_HOOK(PlayerPreThink, freezetag_PlayerPreThink, CBC_ORDER_FIRST); + MUTATOR_HOOK(SetStartItems, freezetag_SetStartItems, CBC_ORDER_ANY); MUTATOR_HOOK(HavocBot_ChooseRole, freezetag_BotRoles, CBC_ORDER_ANY); MUTATOR_HOOK(GetTeamCount, freezetag_GetTeamCount, CBC_ORDER_EXCLUSIVE); @@ -592,7 +607,7 @@ MUTATOR_DEFINITION(gamemode_freezetag) MUTATOR_ONREMOVE { - print("This is a game type and it cannot be removed at runtime."); + LOG_INFO("This is a game type and it cannot be removed at runtime."); return -1; }