From 85188a5c6861d988361762bde982254b81479f18 Mon Sep 17 00:00:00 2001 From: LegendaryGuard Date: Mon, 22 Feb 2021 01:14:24 +0100 Subject: [PATCH] Added Detective part, there are TODOs to continue the project --- gamemodes-server.cfg | 1 + notifications.cfg | 1 + qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc | 29 ++++- qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc | 123 ++++++++++++++++-- qcsrc/common/gamemodes/gamemode/ttt/ttt.qh | 2 + qcsrc/common/notifications/all.inc | 6 +- qcsrc/common/scores.qh | 2 +- 7 files changed, 142 insertions(+), 22 deletions(-) diff --git a/gamemodes-server.cfg b/gamemodes-server.cfg index 05531496e..c580e7a69 100644 --- a/gamemodes-server.cfg +++ b/gamemodes-server.cfg @@ -573,6 +573,7 @@ set g_duel_not_dm_maps 0 "when this is set, DM maps will NOT be listed in duel" set g_ttt 0 "Trouble in Terrorist Town: A group of space terrorists have traitors among them. Traitors must kill terrorists, while the terrorists have to try to find and kill the traitors" set g_ttt_not_lms_maps 0 "when this is set, LMS maps will NOT be listed in ttt" set g_ttt_traitor_count 0.25 "number of players who will become traitors, set between 0 and 0.9 to use a multiplier of the current players, or 1 and above to specify an exact number of players" +set g_ttt_detective_count 0.125 "number of players who will become detectives, set between 0 and 0.9 to use a multiplier of the current players, or 1 and above to specify an exact number of players" set g_ttt_punish_teamkill 1 "kill the player when they kill an ally" set g_ttt_reward_innocent 1 "give a point to all innocent players if the round timelimit is reached, in addition to the points given for kills" set g_ttt_warmup 10 "how long the players will have time to run around the map before the round starts" diff --git a/notifications.cfg b/notifications.cfg index ff9fbfad7..cfcff6f7c 100644 --- a/notifications.cfg +++ b/notifications.cfg @@ -548,6 +548,7 @@ seta notification_CENTER_TTT_TRAITOR "1" "0 = off, 1 = centerprint" seta notification_CENTER_TTT_TRAITOR_WIN "1" "0 = off, 1 = centerprint" seta notification_CENTER_TTT_INNOCENT "1" "0 = off, 1 = centerprint" seta notification_CENTER_TTT_INNOCENT_WIN "1" "0 = off, 1 = centerprint" +seta notification_CENTER_TTT_DETECTIVE "1" "0 = off, 1 = centerprint" seta notification_CENTER_VEHICLE_ENTER "1" "0 = off, 1 = centerprint" seta notification_CENTER_VEHICLE_ENTER_GUNNER "1" "0 = off, 1 = centerprint" diff --git a/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc index a5b4ce4f0..1583345bd 100644 --- a/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc +++ b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc @@ -23,6 +23,12 @@ void HUD_Mod_TTT(vector pos, vector mySize) player_color = '0 1 0'; //player_icon = "player_neutral"; } + else if(mystatus == TTT_STATUS_DETECTIVE) + { + player_text = _("Detective"); + player_color = '0 0 1'; + //player_icon = "player_blue"; + } else { // if the player has no valid status, don't draw anything @@ -64,21 +70,34 @@ MUTATOR_HOOKFUNCTION(cl_ttt, ForcePlayercolors_Skip, CBC_ORDER_LAST) entity player = M_ARGV(0, entity); entity e = entcs_receiver(player.entnum - 1); - int innocent_status = ((e) ? e.ttt_status : 0); + int otherplayer_status = ((e) ? e.ttt_status : 0); int mystatus = entcs_receiver(player_localnum).ttt_status; int plcolor = TTT_COLOR_INNOCENT; // default to innocent - //TODO: add Detective 20-02-2021 - if((mystatus == TTT_STATUS_TRAITOR || intermission || STAT(GAME_STOPPED)) && innocent_status == TTT_STATUS_TRAITOR) + + if((mystatus == TTT_STATUS_TRAITOR || intermission || STAT(GAME_STOPPED)) && otherplayer_status == TTT_STATUS_TRAITOR) + { plcolor = TTT_COLOR_TRAITOR; - + } + + //LegendGuard adds INNOCENT part 21-02-2021 + if((mystatus == TTT_STATUS_INNOCENT || intermission || STAT(GAME_STOPPED)) && otherplayer_status == TTT_STATUS_INNOCENT) + { + plcolor = TTT_COLOR_INNOCENT; + } + //LegendGuard adds if sentence for Detective model color which will shown for everyone 21-02-2021 + if (otherplayer_status == TTT_STATUS_DETECTIVE) + { + plcolor = TTT_COLOR_DETECTIVE; + } + player.colormap = 1024 + plcolor; return true; } MUTATOR_HOOKFUNCTION(cl_ttt, DrawScoreboard_Force) { - // show the scoreboard when the round ends, so players can see who the hunter was + // show the scoreboard when the round ends, so players can see who the traitor was return STAT(GAME_STOPPED); } diff --git a/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc index 4730ec26b..22f30ba07 100644 --- a/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc +++ b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc @@ -1,12 +1,20 @@ #include "sv_ttt.qh" +float autocvar_g_ttt_detective_count = 0.125; float autocvar_g_ttt_traitor_count = 0.25; float autocvar_g_ttt_round_timelimit = 180; float autocvar_g_ttt_warmup = 10; -bool autocvar_g_ttt_punish_teamkill = true; +bool autocvar_g_ttt_punish_teamkill = false; bool autocvar_g_ttt_reward_innocent = true; +//float autocvar_g_ttt_karma_points = 1000; //TODO: Karma points 21-02-2021 //TODO: add Detective and corpse function if a player is DEAD + +//TODO: Problems: Detective is a created team, this team is added inside Innocents team +// if there's a detective and a traitor and no innocent in the round, round ends. +// detective shouldn't be attacked by innocent bots. +// detective should detect the point of the corpses (new function). + void ttt_FakeTimeLimit(entity e, float t) { if(!IS_REAL_CLIENT(e)) @@ -26,7 +34,7 @@ void ttt_FakeTimeLimit(entity e, float t) void nades_Clear(entity player); -void Ttt_UpdateScores(bool timed_out) +void ttt_UpdateScores(bool timed_out) { // give players their hard-earned kills now that the round is over FOREACH_CLIENT(true, @@ -36,9 +44,9 @@ void Ttt_UpdateScores(bool timed_out) GameRules_scoring_add(it, SCORE, it.ttt_validkills); it.ttt_validkills = 0; // player survived the round - if(IS_PLAYER(it) && !IS_DEAD(it)) + if(IS_PLAYER(it) && !IS_DEAD(it)) //TODO: LegendGuard, add something for Karma if possible 21-02-2021 { - if(autocvar_g_ttt_reward_innocent && timed_out && it.ttt_status == TTT_STATUS_INNOCENT) + if(autocvar_g_ttt_reward_innocent && timed_out && it.ttt_status == TTT_STATUS_INNOCENT && it.ttt_status == TTT_STATUS_DETECTIVE) GameRules_scoring_add(it, SCORE, 1); // reward innocents who make it to the end of the round time limit if(it.ttt_status == TTT_STATUS_INNOCENT) GameRules_scoring_add(it, TTT_RESISTS, 1); @@ -48,7 +56,7 @@ void Ttt_UpdateScores(bool timed_out) }); } -float Ttt_CheckWinner() +float ttt_CheckWinner() { if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0) { @@ -62,7 +70,7 @@ float Ttt_CheckWinner() ttt_FakeTimeLimit(it, -1); }); - Ttt_UpdateScores(true); + ttt_UpdateScores(true); allowed_to_spawn = false; game_stopped = true; @@ -70,13 +78,15 @@ float Ttt_CheckWinner() return 1; } - int innocent_count = 0, traitor_count = 0; + int innocent_count = 0, traitor_count = 0, detective_count = 0; FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), { if(it.ttt_status == TTT_STATUS_INNOCENT) innocent_count++; else if(it.ttt_status == TTT_STATUS_TRAITOR) traitor_count++; + else if(it.ttt_status == TTT_STATUS_DETECTIVE) //LegendGuard adds detective_count 20-02-2021 + detective_count++; }); if(innocent_count > 0 && traitor_count > 0) { @@ -93,13 +103,18 @@ float Ttt_CheckWinner() Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_INNOCENT_WIN); Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_TTT_INNOCENT_WIN); } + else if (detective_count > 0) // detectives are same as innocents win + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_INNOCENT_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_TTT_INNOCENT_WIN); + } else { Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_ROUND_TIED); Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ROUND_TIED); } - Ttt_UpdateScores(false); + ttt_UpdateScores(false); allowed_to_spawn = false; game_stopped = true; @@ -115,7 +130,7 @@ float Ttt_CheckWinner() return 1; } -void Ttt_RoundStart() +void ttt_RoundStart() { allowed_to_spawn = boolean(warmup_stage); int playercount = 0; @@ -130,6 +145,7 @@ void Ttt_RoundStart() it.ttt_status = 0; // this is mostly a safety check; if a client manages to somehow maintain a ttt status, clear it before the round starts! it.ttt_validkills = 0; }); + int traitor_count = bound(1, ((autocvar_g_ttt_traitor_count >= 1) ? autocvar_g_ttt_traitor_count : floor(playercount * autocvar_g_ttt_traitor_count)), playercount - 1); // 20%, but ensure at least 1 and less than total int total_traitors = 0; FOREACH_CLIENT_RANDOM(IS_PLAYER(it) && !IS_DEAD(it), @@ -140,18 +156,41 @@ void Ttt_RoundStart() it.ttt_status = TTT_STATUS_TRAITOR; }); + int detective_count = bound(1, ((autocvar_g_ttt_detective_count >= 1) ? autocvar_g_ttt_detective_count : floor(playercount * autocvar_g_ttt_detective_count)), playercount - 1); // 20%, but ensure at least 1 and less than total + int total_detectives = 0; + FOREACH_CLIENT_RANDOM(IS_PLAYER(it) && !IS_DEAD(it), + { + if(total_detectives >= detective_count) + break; + total_detectives++; + it.ttt_status = TTT_STATUS_DETECTIVE; + }); + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), { if(it.ttt_status == TTT_STATUS_INNOCENT) + { Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_TTT_INNOCENT); + //PrintToChatAll(sprintf("^1DEBUG^7: %s is ^2Innocent^7!", it.netname)); + } else if(it.ttt_status == TTT_STATUS_TRAITOR) + { Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_TTT_TRAITOR); + //PrintToChatAll(sprintf("^1DEBUG^7: %s is ^1Traitor^7!", it.netname)); + } + else if(it.ttt_status == TTT_STATUS_DETECTIVE) + { + Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_TTT_DETECTIVE); //Detective notification should be sent to all players to see who is + PrintToChatAll(sprintf("%s is ^4Detective^7!", it.netname)); + // Should notify in the center for everyone about who is Detective? + //Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_DETECTIVE, 1); + } ttt_FakeTimeLimit(it, round_handler_GetEndTime()); }); } -bool Ttt_CheckPlayers() +bool ttt_CheckPlayers() { static int prev_missing_players; allowed_to_spawn = true; @@ -197,10 +236,11 @@ void ttt_Initialize() // run at the start of a match, initiates game mode GameRules_scoring(0, SFL_SORT_PRIO_PRIMARY, 0, { field(SP_TTT_RESISTS, "resists", 0); field(SP_TTT_HUNTS, "hunts", SFL_SORT_PRIO_SECONDARY); + //field(SP_TTT_KARMA, "karma", autocvar_g_ttt_karma_points); //Karma points in the scoreboard }); allowed_to_spawn = true; - round_handler_Spawn(Ttt_CheckPlayers, Ttt_CheckWinner, Ttt_RoundStart); + round_handler_Spawn(ttt_CheckPlayers, ttt_CheckWinner, ttt_RoundStart); round_handler_Init(5, autocvar_g_ttt_warmup, autocvar_g_ttt_round_timelimit); EliminatedPlayers_Init(ttt_isEliminated); } @@ -215,6 +255,7 @@ MUTATOR_HOOKFUNCTION(ttt, ClientObituary) // in ttt, announcing a frag would tell everyone who the traitor is entity frag_attacker = M_ARGV(1, entity); entity frag_target = M_ARGV(2, entity); + //.float karmapoints; //karma points for each player if(IS_PLAYER(frag_attacker) && frag_attacker != frag_target) { float frag_deathtype = M_ARGV(3, float); @@ -222,9 +263,34 @@ MUTATOR_HOOKFUNCTION(ttt, ClientObituary) // "team" kill, a point is awarded to the player by default so we must take it away plus an extra one // unless the player is going to be punished for suicide, in which case just remove one if(frag_attacker.ttt_status == frag_target.ttt_status) + { + //PrintToChatAll("^1DEBUG^7: A ^2PLAYER^7 has fragged a ^2PLAYER OF HIS OWN TEAM^7, TOO BAD!"); GiveFrags(frag_attacker, frag_target, ((autocvar_g_ttt_punish_teamkill) ? -1 : -2), frag_deathtype, wep_ent.weaponentity_fld); - } + //frag_attacker.karmapoints = frag_attacker.karmapoints - (autocvar_g_ttt_karma_points * random(0.9 * 0.1)); //karma points reduce when player attacked to other player //example: 1000 - (1000*(0.9*0.1)) = 910 + } + + if(frag_attacker.ttt_status == TTT_STATUS_DETECTIVE) + { + if (frag_target.ttt_status == TTT_STATUS_INNOCENT) + { + PrintToChatAll("^7A ^4Detective^7 has fragged an ^2Innocent^7, TOO BAD!"); + GiveFrags(frag_attacker, frag_target, ((autocvar_g_ttt_punish_teamkill) ? -1 : -2), frag_deathtype, wep_ent.weaponentity_fld); + } + } + if (frag_attacker.ttt_status == TTT_STATUS_INNOCENT) + { + if (frag_target.ttt_status == TTT_STATUS_DETECTIVE) + { + PrintToChatAll("^7An ^2Innocent^7 has fragged a ^4Detective^7, TOO BAD!"); + GiveFrags(frag_attacker, frag_target, ((autocvar_g_ttt_punish_teamkill) ? -1 : -2), frag_deathtype, wep_ent.weaponentity_fld); + } + } + //if ttt_status is 1, means innocent, 2 means traitor, 3 means detective, TODO: the bots: frag_attacker(1) shouldn't attack to frag_target(3) + //PrintToChatAll(sprintf("^1DEBUG^7: frag_attacker.ttt_status is ^3%s^7",ftos(frag_attacker.ttt_status))); + //PrintToChatAll(sprintf("^1DEBUG^7: frag_target.ttt_status is ^3%s^7",ftos(frag_target.ttt_status))); + } + //TODO: LegendGuard, try to do a "find out" if a traitor can see who fragged to who if possible 21-02-2021 M_ARGV(5, bool) = true; // anonymous attacker } @@ -239,6 +305,9 @@ MUTATOR_HOOKFUNCTION(ttt, PlayerPreThink) int plcolor = TTT_COLOR_INNOCENT; if(player.ttt_status == TTT_STATUS_TRAITOR && game_stopped) plcolor = TTT_COLOR_TRAITOR; + //LegendGuard adds for Detective 21-02-2021 + if(player.ttt_status == TTT_STATUS_DETECTIVE && game_stopped) + plcolor = TTT_COLOR_DETECTIVE; setcolor(player, plcolor); } } @@ -351,11 +420,32 @@ MUTATOR_HOOKFUNCTION(ttt, PlayerDies) if (IS_BOT_CLIENT(frag_target)) bot_clear(frag_target); } - + + //TODO: LegendGuard, here is where maybe karma points should be outputted 21-02-2021 + //TODO: a if for if innocent attacks detective, then reduce points, death_punishment should be disabled for TTT 21-02-2021 + //if(frag_attacker.ttt_status == frag_target.ttt_status) // killed an ally! punishment is death if(autocvar_g_ttt_punish_teamkill && frag_attacker != frag_target && IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target) && frag_attacker.ttt_status == frag_target.ttt_status && !ITEM_DAMAGE_NEEDKILL(frag_deathtype)) if(!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) // don't autokill if the round hasn't - Damage(frag_attacker, frag_attacker, frag_attacker, 100000, DEATH_MIRRORDAMAGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + Damage(frag_attacker, frag_attacker, frag_attacker, 100000, DEATH_MIRRORDAMAGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + if(frag_attacker.ttt_status == TTT_STATUS_DETECTIVE) + { + if (frag_target.ttt_status == TTT_STATUS_INNOCENT) + { + PrintToChatAll("^7^4DETECTIVE ^1DAMAGE/DEAD^7 HAS TAKEN!"); + //30 damage points deal + Damage(frag_attacker, frag_attacker, frag_attacker, 300, DEATH_MIRRORDAMAGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + } + } + if (frag_attacker.ttt_status == TTT_STATUS_INNOCENT) + { + if (frag_target.ttt_status == TTT_STATUS_DETECTIVE) + { + PrintToChatAll("^7^2INNOCENT ^1DAMAGE/DEAD^7 HAS TAKEN!"); + //30 damage points deal + Damage(frag_attacker, frag_attacker, frag_attacker, 300, DEATH_MIRRORDAMAGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + } + } return true; } @@ -370,6 +460,7 @@ MUTATOR_HOOKFUNCTION(ttt, ClientDisconnect) MUTATOR_HOOKFUNCTION(ttt, MakePlayerObserver) { + // LegendGuard, here is where spectators shouldn't talk to any players to say the hints or who is who 21-10-2021 entity player = M_ARGV(0, entity); if (IS_PLAYER(player) && !IS_DEAD(player)) @@ -407,6 +498,7 @@ MUTATOR_HOOKFUNCTION(ttt, GiveFragsForKill, CBC_ORDER_FIRST) MUTATOR_HOOKFUNCTION(ttt, AddPlayerScore) { + //TODO: LegendGuard, try to add KARMA for score here if possible 21-02-2021 entity scorefield = M_ARGV(0, entity); if(scorefield == SP_KILLS || scorefield == SP_DEATHS || scorefield == SP_SUICIDES || scorefield == SP_DMG || scorefield == SP_DMGTAKEN) M_ARGV(1, float) = 0; // don't report that the player has killed or been killed, that would out them as a traitor! @@ -452,9 +544,12 @@ MUTATOR_HOOKFUNCTION(ttt, GetPlayerStatus) MUTATOR_HOOKFUNCTION(ttt, BotShouldAttack) { + //TODO: LegendGuard, make bots attack to innocents vs traitors, detectives must be on innocents team 21-02-2021 entity bot = M_ARGV(0, entity); entity targ = M_ARGV(1, entity); if(targ.ttt_status == bot.ttt_status) + { return true; + } } diff --git a/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh index d2bc4ff6e..08c483173 100644 --- a/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh +++ b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh @@ -37,8 +37,10 @@ REGISTER_GAMETYPE(TTT, NEW(TroubleinTerroristTown)); .int ttt_status; const int TTT_STATUS_INNOCENT = 1; const int TTT_STATUS_TRAITOR = 2; +const int TTT_STATUS_DETECTIVE = 3; // hardcoded player colors for ttt +const int TTT_COLOR_DETECTIVE = 221; // blue const int TTT_COLOR_INNOCENT = 51; // green const int TTT_COLOR_TRAITOR = 68; // red #endif diff --git a/qcsrc/common/notifications/all.inc b/qcsrc/common/notifications/all.inc index 0e4bb7157..c871b5387 100644 --- a/qcsrc/common/notifications/all.inc +++ b/qcsrc/common/notifications/all.inc @@ -774,10 +774,12 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_CENTER_NOTIF(TIMEOUT_BEGINNING, N_ENABLE, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") MSG_CENTER_NOTIF(TIMEOUT_ENDING, N_ENABLE, 0, 1, "", CPID_TIMEIN, "1 f1", _("^F4Timeout ends in ^COUNT"), "") //LegendGuard adds MSG_CENTER_NOTIF for TTT 20-02-2021 - MSG_CENTER_NOTIF(TTT_TRAITOR, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^K1traitor^BG! Kill all the innocents without raising suspicion!")), "") + MSG_CENTER_NOTIF(TTT_TRAITOR, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^K1Traitor^BG! Kill all the innocents without raising suspicion!")), "") MSG_CENTER_NOTIF(TTT_TRAITOR_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^K1Traitors^BG win the round"), "") - MSG_CENTER_NOTIF(TTT_INNOCENT, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^F1innocent^BG! Try to find out who is/are traitor(s) and survive until time is up!")), "") + MSG_CENTER_NOTIF(TTT_INNOCENT, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^F1Innocent^BG! Try to find out who is/are traitors and survive until time is up!")), "") MSG_CENTER_NOTIF(TTT_INNOCENT_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^F1Innocents^BG win the round"), "") + MSG_CENTER_NOTIF(TTT_DETECTIVE, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^4Detective^BG! Find out who is/are traitors and protect the innocents!")), "") + //TODO: MAKE DETECTIVE WORD BLUE LegendGuard MSG_CENTER_NOTIF(JOIN_PREVENT_MINIGAME, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^K1Cannot join given minigame session!"), "" ) diff --git a/qcsrc/common/scores.qh b/qcsrc/common/scores.qh index 84d992ac8..a520dba5e 100644 --- a/qcsrc/common/scores.qh +++ b/qcsrc/common/scores.qh @@ -88,7 +88,7 @@ REGISTER_SP(ONS_CAPS); REGISTER_SP(TTT_RESISTS); //LegendGuard adds REGISTER_SP for TTT 20-02-2021 //Innocents as number of suvivals REGISTER_SP(TTT_HUNTS); //Traitors as number of hunts - +//REGISTER_SP(TTT_KARMA); //LegendGuard adds REGISTER_SP for TTT Karma points 21-02-2021 #endif -- 2.39.2