float autocvar_g_mmm_karma_damagepunishmentdeal = 20; //LegendGuard sets Karma punishment damage setting if player kills an ally 28-03-2021
// Sleuth is a created team, this team is added inside Civilians team
-/*scoreboard.qc method
-void KarmaScore_GetField(entity pl, PlayerScoreField field)
-{
- if (field == SP_MMM_KARMA)
- float karmap = pl.(scores(SP_MMM_KARMA));
-}*/
-
void mmm_FakeTimeLimit(entity e, float t)
{
if(!IS_REAL_CLIENT(e))
return 1;
}
+void Karma_WarningCheck(entity it)
+{
+ float totalmeankarma = ((autocvar_g_mmm_max_karma_points + autocvar_g_mmm_min_karma_points + it.karmapoints) / 3);
+ if (it.karmapoints <= totalmeankarma)
+ {
+ Send_Notification(NOTIF_ONE_ONLY, it, MSG_INFO, INFO_MMM_KARMAWARNING);
+ //centerprint(it, strcat(BOLD_OPERATOR, "^1KARMA WARNING!\n^3Here, have the Rifle!"));
+ GiveWeapon(it, WEP_RIFLE.m_id, OP_PLUS, 1);
+ }
+}
+
void mmm_RoundStart()
{
allowed_to_spawn = boolean(warmup_stage);
FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it),
{
- float totalmeankarma = ((autocvar_g_mmm_max_karma_points + autocvar_g_mmm_min_karma_points + it.karmapoints) / 3);
karma_Control(it);
it.activekillerrole = false;
if(it.mmm_status == MMM_STATUS_CIVILIAN)
{
- if (it.karmapoints <= totalmeankarma)
- {
- centerprint(it, strcat(BOLD_OPERATOR, "^1KARMA WARNING!\n^3Here, have the Rifle!"));
- GiveWeapon(it, WEP_RIFLE.m_id, OP_PLUS, 1);
- }
+ Karma_WarningCheck(it);
//Gives Mine Layer weapon to the player
GiveWeapon(it, WEP_MINE_LAYER.m_id, OP_PLUS, 1);
Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_MMM_CIVILIAN);
}
else if(it.mmm_status == MMM_STATUS_MURDERER)
{
- if (it.karmapoints <= totalmeankarma)
- {
- centerprint(it, strcat(BOLD_OPERATOR, "^1KARMA WARNING!\n^3Here, have the Rifle!"));
- GiveWeapon(it, WEP_RIFLE.m_id, OP_PLUS, 1);
- }
+ Karma_WarningCheck(it);
//Gives Mine Layer weapon to the player
GiveWeapon(it, WEP_MINE_LAYER.m_id, OP_PLUS, 1);
Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_MMM_MURDERER);
}
else if(it.mmm_status == MMM_STATUS_SLEUTH)
{
- if (it.karmapoints <= totalmeankarma)
- {
- centerprint(it, strcat(BOLD_OPERATOR, "^1KARMA WARNING!\n^3Here, have the Rifle!"));
- GiveWeapon(it, WEP_RIFLE.m_id, OP_PLUS, 1);
- }
+ Karma_WarningCheck(it);
//Gives Shockwave and Mine Layer weapon to the player
GiveWeapon(it, WEP_SHOCKWAVE.m_id, OP_PLUS, 1);
GiveWeapon(it, WEP_MINE_LAYER.m_id, OP_PLUS, 1);
MUTATOR_HOOKFUNCTION(mmm, PlayerPreThink)
{
entity player = M_ARGV(0, entity);
-
+ int playercount = 0;
+ bool playercheck = false;
+
+ if (playercheck != true)
+ {
+ FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it),
+ {
+ ++playercount;
+ });
+ playercheck = true;
+ }
+
+ //if the murderer is still here around, then avoid illogical winning
+ if (playercheck == true)
+ {
+ FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it),
+ {
+ if (playercount == 3)
+ {
+ if (it.mmm_status == MMM_STATUS_SLEUTH)
+ it.mmm_status = MMM_STATUS_CIVILIAN;
+ }
+ });
+ }
+
if(IS_PLAYER(player) || player.caplayer)
{
if (player.karmaspectated != true)
//Karma points start
if (player.karmastarted != true)
{
+ CS(player).scorekeeper.(scores(SP_MMM_KARMA)) = 0; //full karma reset lol
player.karmapoints = autocvar_g_mmm_max_karma_points;
GameRules_scoring_add(player, MMM_KARMA, player.karmapoints);
player.karmastarted = true;
return true;
}
+//if server admin sets "sv_ready_restart_after_countdown 1", will avoid possible visual failure for karma in the scoreboard
+MUTATOR_HOOKFUNCTION(mmm, ReadLevelCvars)
+{
+ sv_ready_restart_after_countdown = 0;
+}
+
MUTATOR_HOOKFUNCTION(mmm, Bot_FixCount, CBC_ORDER_EXCLUSIVE)
{
FOREACH_CLIENT(IS_REAL_CLIENT(it), {