From 0a12d7d7f87929392f403c6555f9b974b38eb95e Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 10 Oct 2008 06:53:05 +0000 Subject: [PATCH] use g_ctf_personalscore* cvars if g_ctf_win_mode is 0 or 1 (caps scoring); this fixes the problems with [-z-]'s scoring system as it would be HIGHLY broken as only decider of a match (it would reward camping more than anything else) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4692 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/ctfscoring-ai.cfg | 13 ++++++++++++ data/ctfscoring-alien.cfg | 13 ++++++++++++ data/ctfscoring-alpha.cfg | 13 ++++++++++++ data/ctfscoring-nex242.cfg | 13 ++++++++++++ data/ctfscoring-z-lowdeposit.cfg | 19 +++++++++++++++++ data/ctfscoring-z.cfg | 26 ++++++++++++----------- data/qcsrc/server/ctf.qc | 34 +++++++++++++++++++------------ data/qcsrc/server/defs.qh | 3 +++ data/qcsrc/server/g_damage.qc | 7 +++---- data/qcsrc/server/scores_rules.qc | 1 - data/qcsrc/server/teamplay.qc | 3 ++- 11 files changed, 114 insertions(+), 31 deletions(-) create mode 100644 data/ctfscoring-z-lowdeposit.cfg diff --git a/data/ctfscoring-ai.cfg b/data/ctfscoring-ai.cfg index e1534b87b..b6cd6f9ff 100644 --- a/data/ctfscoring-ai.cfg +++ b/data/ctfscoring-ai.cfg @@ -15,3 +15,16 @@ set g_ctf_flagscore_return_rogue_by_killer 10 // failed (shot into void) (pickup kill drop) 0 (0 for enemy) // capture retry (kill drop pickup) 0 (0 for enemy) // suicide, then retake (suicidedrop pickup) 0 (0 for enemy) + +set g_ctf_personalscore_pickup_base 0 +set g_ctf_personalscore_pickup_dropped_early 0 +set g_ctf_personalscore_pickup_dropped_late 0 +set g_ctf_personalscore_capture 20 +set g_ctf_personalscore_kill 0 +set g_ctf_personalpenalty_drop 0 +set g_ctf_personalpenalty_suicidedrop 0 +set g_ctf_personalpenalty_returned 5 +set g_ctf_personalscore_return 0 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 0 +set g_ctf_personalscore_return_rogue_by_killer 10 diff --git a/data/ctfscoring-alien.cfg b/data/ctfscoring-alien.cfg index c10fcfeb8..62792b294 100644 --- a/data/ctfscoring-alien.cfg +++ b/data/ctfscoring-alien.cfg @@ -15,3 +15,16 @@ set g_ctf_flagscore_return_rogue_by_killer 11 // failed (shot into void) (pickup kill drop) 1 (1 for enemy) // capture retry (kill drop pickup) -1 (1 for enemy) // suicide, then retake (suicidedrop pickup) -1 (0 for enemy) + +set g_ctf_personalscore_pickup_base 1 +set g_ctf_personalscore_pickup_dropped_early 1 +set g_ctf_personalscore_pickup_dropped_late 1 +set g_ctf_personalscore_capture 30 +set g_ctf_personalscore_kill 1 +set g_ctf_personalpenalty_drop 2 +set g_ctf_personalpenalty_suicidedrop 2 +set g_ctf_personalpenalty_returned 0 +set g_ctf_personalscore_return 5 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 6 +set g_ctf_personalscore_return_rogue_by_killer 11 diff --git a/data/ctfscoring-alpha.cfg b/data/ctfscoring-alpha.cfg index 7a938d08e..deabea53f 100644 --- a/data/ctfscoring-alpha.cfg +++ b/data/ctfscoring-alpha.cfg @@ -15,3 +15,16 @@ set g_ctf_flagscore_return_rogue_by_killer 10 // failed (shot into void) (pickup kill drop) 0 (0 for enemy) // capture retry (kill drop pickup) 0 (0 for enemy) // suicide, then retake (suicidedrop pickup) 0 (0 for enemy) + +set g_ctf_personalscore_pickup_base 0 +set g_ctf_personalscore_pickup_dropped_early 0 +set g_ctf_personalscore_pickup_dropped_late 0 +set g_ctf_personalscore_capture 20 +set g_ctf_personalscore_kill 0 +set g_ctf_personalpenalty_drop 0 +set g_ctf_personalpenalty_suicidedrop 0 +set g_ctf_personalpenalty_returned 0 +set g_ctf_personalscore_return 5 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 5 +set g_ctf_personalscore_return_rogue_by_killer 10 diff --git a/data/ctfscoring-nex242.cfg b/data/ctfscoring-nex242.cfg index 7137eb23b..39c33dfeb 100644 --- a/data/ctfscoring-nex242.cfg +++ b/data/ctfscoring-nex242.cfg @@ -15,3 +15,16 @@ set g_ctf_flagscore_return_rogue_by_killer 10 // failed (shot into void) (pickup kill drop) 1 (1 for enemy) // capture retry (kill drop pickup) 1 (1 for enemy) // suicide, then retake (suicidedrop pickup) 0 (0 for enemy) + +set g_ctf_personalscore_pickup_base 1 +set g_ctf_personalscore_pickup_dropped_early 1 +set g_ctf_personalscore_pickup_dropped_late 1 +set g_ctf_personalscore_capture 20 +set g_ctf_personalscore_kill 1 +set g_ctf_personalpenalty_drop 0 +set g_ctf_personalpenalty_suicidedrop 1 +set g_ctf_personalpenalty_returned 0 +set g_ctf_personalscore_return 5 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 5 +set g_ctf_personalscore_return_rogue_by_killer 10 diff --git a/data/ctfscoring-z-lowdeposit.cfg b/data/ctfscoring-z-lowdeposit.cfg new file mode 100644 index 000000000..ce9b506f0 --- /dev/null +++ b/data/ctfscoring-z-lowdeposit.cfg @@ -0,0 +1,19 @@ +exec ctfscoring-ai.cfg // fall back to ai's scoring for flag scores, if g_ctf_win_mode is 2, as this system is highly broken in that mode + +set g_ctf_personalscore_pickup_base -1 +set g_ctf_personalscore_pickup_dropped_early 5 +set g_ctf_personalscore_pickup_dropped_late 9 +set g_ctf_personalscore_capture 26 +set g_ctf_personalscore_kill 5 +set g_ctf_personalpenalty_drop 10 +set g_ctf_personalpenalty_suicidedrop 10 +set g_ctf_personalpenalty_returned 0 +set g_ctf_personalscore_return 3 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 3 +set g_ctf_personalscore_return_rogue_by_killer 10 +// succeeded capture (pickup capture) 25 (0 for enemy) +// failed capture (pickup kill drop return) -10 (8 for enemy) +// failed (shot into void) (pickup kill drop) -10 (5 for enemy) +// capture retry (kill drop pickup) -1..-4 (5 for enemy) +// suicide, then retake (suicidedrop pickup) -1..-4 (0 for enemy) diff --git a/data/ctfscoring-z.cfg b/data/ctfscoring-z.cfg index 83a8c4edf..193cdfd71 100644 --- a/data/ctfscoring-z.cfg +++ b/data/ctfscoring-z.cfg @@ -1,15 +1,17 @@ -set g_ctf_flagscore_pickup_base -5 -set g_ctf_flagscore_pickup_dropped_early 1 -set g_ctf_flagscore_pickup_dropped_late 5 -set g_ctf_flagscore_capture 30 -set g_ctf_flagscore_kill 5 -set g_ctf_flagpenalty_drop 5 -set g_ctf_flagpenalty_suicidedrop 5 -set g_ctf_flagpenalty_returned 0 -set g_ctf_flagscore_return 3 -set g_ctf_flagscore_return_rogue 10 -set g_ctf_flagscore_return_by_killer 3 -set g_ctf_flagscore_return_rogue_by_killer 10 +exec ctfscoring-ai.cfg // fall back to ai's scoring for flag scores, if g_ctf_win_mode is 2, as this system is highly broken in that mode + +set g_ctf_personalscore_pickup_base -5 +set g_ctf_personalscore_pickup_dropped_early 1 +set g_ctf_personalscore_pickup_dropped_late 5 +set g_ctf_personalscore_capture 30 +set g_ctf_personalscore_kill 5 +set g_ctf_personalpenalty_drop 5 +set g_ctf_personalpenalty_suicidedrop 5 +set g_ctf_personalpenalty_returned 0 +set g_ctf_personalscore_return 3 +set g_ctf_personalscore_return_rogue 10 +set g_ctf_personalscore_return_by_killer 3 +set g_ctf_personalscore_return_rogue_by_killer 10 // succeeded capture (pickup capture) 25 (0 for enemy) // failed capture (pickup kill drop return) -10 (8 for enemy) // failed (shot into void) (pickup kill drop) -10 (5 for enemy) diff --git a/data/qcsrc/server/ctf.qc b/data/qcsrc/server/ctf.qc index d025b4df2..130478b5e 100644 --- a/data/qcsrc/server/ctf.qc +++ b/data/qcsrc/server/ctf.qc @@ -11,6 +11,14 @@ entity ctf_worldflaglist; // CTF flags in the map #define FLAG_CARRY_POS '-15 0 7' +float ctf_score_value(string parameter) +{ + if(g_ctf_win_mode != 2) + return cvar(strcat("g_ctf_personal", parameter)); + else + return cvar(strcat("g_ctf_flag", parameter)); +} + void FakeTimeLimit(entity e, float t) { msg_entity = e; @@ -129,9 +137,9 @@ void DropFlag(entity e, entity penalty_receiver, entity attacker) bprint(p.netname, "^7 lost the ", e.netname, "\n"); if(penalty_receiver) - UpdateFrags(penalty_receiver, -cvar("g_ctf_flagpenalty_suicidedrop")); + UpdateFrags(penalty_receiver, -ctf_score_value("penalty_suicidedrop")); else - UpdateFrags(p, -cvar("g_ctf_flagpenalty_drop")); + UpdateFrags(p, -ctf_score_value("penalty_drop")); PlayerScore_Add(p, SP_CTF_DROPS, +1); e.playerid = attacker.playerid; @@ -289,7 +297,7 @@ void FlagTouch() PlayerTeamScore_Add(other, SP_CTF_CAPS, ST_CTF_CAPS, 1); LogCTF("capture", other.flagcarried.team, other); // give credit to the individual player - UpdateFrags(other, cvar("g_ctf_flagscore_capture")); + UpdateFrags(other, ctf_score_value("score_capture")); sound (other, CHAN_AUTO, self.noise2, VOL_BASE, ATTN_NONE); WaypointSprite_DetachCarrier(other); @@ -319,7 +327,7 @@ void FlagTouch() self.cnt = FLAG_CARRY; self.angles = '0 0 0'; bprint(other.netname, "^7 got the ", self.netname, "\n"); - UpdateFrags(other, cvar("g_ctf_flagscore_pickup_base")); + UpdateFrags(other, ctf_score_value("score_pickup_base")); PlayerScore_Add(other, SP_CTF_PICKUPS, 1); LogCTF("steal", self.team, other); sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE); @@ -349,28 +357,28 @@ void FlagTouch() // punish the player who last had it FOR_EACH_PLAYER(player) if(player.playerid == self.playerid) - PlayerScore_Add(player, SP_SCORE, -cvar("g_ctf_flagpenalty_returned")); + PlayerScore_Add(player, SP_SCORE, -ctf_score_value("penalty_returned")); // punish the team who was last carrying it if(self.team == COLOR_TEAM1) - TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, -cvar("g_ctf_flagpenalty_returned")); + TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, -ctf_score_value("penalty_returned")); else - TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, -cvar("g_ctf_flagpenalty_returned")); + TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, -ctf_score_value("penalty_returned")); // reward the player who returned it if(other.playerid == self.playerid) // is this the guy who killed the FC last? { if (other.team == COLOR_TEAM1 || other.team == COLOR_TEAM2) - UpdateFrags(other, cvar("g_ctf_flagscore_return_by_killer")); + UpdateFrags(other, ctf_score_value("score_return_by_killer")); else - UpdateFrags(other, cvar("g_ctf_flagscore_return_rogue_by_killer")); + UpdateFrags(other, ctf_score_value("score_return_rogue_by_killer")); } else { if (other.team == COLOR_TEAM1 || other.team == COLOR_TEAM2) - UpdateFrags(other, cvar("g_ctf_flagscore_return")); + UpdateFrags(other, ctf_score_value("score_return")); else - UpdateFrags(other, cvar("g_ctf_flagscore_return_rogue")); + UpdateFrags(other, ctf_score_value("score_return_rogue")); } PlayerScore_Add(other, SP_CTF_RETURNS, 1); LogCTF("return", self.team, other); @@ -390,8 +398,8 @@ void FlagTouch() float f; f = bound(0, (self.pain_finished - time) / cvar("g_ctf_flag_returntime"), 1); //print("factor is ", ftos(f), "\n"); - f = cvar("g_ctf_flagscore_pickup_dropped_late") * (1-f) - + cvar("g_ctf_flagscore_pickup_dropped_early") * f; + f = ctf_score_value("score_pickup_dropped_late") * (1-f) + + ctf_score_value("score_pickup_dropped_early") * f; f = floor(f + 0.5); //print("score is ", ftos(f), "\n"); diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index d9b4e81d3..93691188c 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -16,12 +16,15 @@ float require_spawnfunc_prefix; // if this float exists, only functions with spa // Globals +float ctf_score_value(string parameter); + float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch, g_race; float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_laserguided_missile, g_midair, g_minstagib, g_nixnex, g_nixnex_with_laser, g_norecoil, g_rocketarena, g_vampire, g_minstagib_invis_alpha; float g_warmup_limit; float g_warmup_allguns; float g_warmup_allow_timeout; float g_ctf_win_mode; +float g_ctf_ignore_frags; float g_race_qualifying; float inWarmupStage; float g_pickup_respawntime_short; diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index 67579511e..886de1be5 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -93,7 +93,7 @@ void GiveFrags (entity attacker, entity targ, float f) } else if(g_ctf) { - if(g_ctf_win_mode == 3) + if(g_ctf_ignore_frags) f = 0; } @@ -330,10 +330,9 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) } if(g_ctf && targ.flagcarried) { - //GiveFrags(attacker, targ, cvar("g_ctf_flagscore_kill")); - UpdateFrags(attacker, cvar("g_ctf_flagscore_kill")); + UpdateFrags(attacker, ctf_score_value("score_kill")); PlayerScore_Add(attacker, SP_CTF_FCKILLS, 1); - GiveFrags(attacker, targ, 0); + GiveFrags(attacker, targ, 0); // for logging } else GiveFrags(attacker, targ, 1); diff --git a/data/qcsrc/server/scores_rules.qc b/data/qcsrc/server/scores_rules.qc index 44b5470dc..30fdfbc28 100644 --- a/data/qcsrc/server/scores_rules.qc +++ b/data/qcsrc/server/scores_rules.qc @@ -66,7 +66,6 @@ void ScoreRules_ctf() sp_score = SFL_SORT_PRIO_SECONDARY; break; case 2: // score only - case 3: // score only, no frags default: sp_score = SFL_SORT_PRIO_PRIMARY; sp_caps = SFL_SORT_PRIO_SECONDARY; // looks better ;) diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 5e96f606d..fca3c8d75 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -227,7 +227,8 @@ void InitGameplayMode() gamemode_name = "Capture the Flag"; ActivateTeamplay(); g_ctf_win_mode = cvar("g_ctf_win_mode"); - if(g_ctf_win_mode >= 2) + g_ctf_ignore_frags = cvar("g_ctf_ignore_frags"); + if(g_ctf_win_mode == 2) fraglimit_override = cvar("g_ctf_capture_limit"); else fraglimit_override = cvar("capturelimit_override"); -- 2.39.2