From be103ff0b2a5e0be65c0ec460b9d0d079813dbc1 Mon Sep 17 00:00:00 2001 From: ChocoTaco Date: Fri, 22 Mar 2019 17:03:20 -0400 Subject: [PATCH] Added killstreak bonus --- Classic/scripts/DMGame.cs | 169 +++++++++++++++++++++++++------------- 1 file changed, 110 insertions(+), 59 deletions(-) diff --git a/Classic/scripts/DMGame.cs b/Classic/scripts/DMGame.cs index aa7a59f..374dfe9 100644 --- a/Classic/scripts/DMGame.cs +++ b/Classic/scripts/DMGame.cs @@ -89,8 +89,9 @@ function DMGame::initGameVars(%game) %game.SCORE_PER_KILL = 1; %game.SCORE_PER_DEATH = -1; //was -1 %game.SCORE_PER_SUICIDE = -1; //was -1 - %game.SCORE_PER_MIDAIR = 0.2; // Added Chocotaco. From sctf - %game.SCORE_PER_BIGGAME = 1; // taking out a kill streak + %game.SCORE_PER_MIDAIR = 0.25; //Added Chocotaco. From sctf + %game.SCORE_PER_BONUS = 1; //taking out a kill streak + %game.SCORE_PER_KILLSTREAKBONUS = 0.5; //bonus for those who get a kill while waypointed } exec("scripts/aiDeathMatch.cs"); @@ -226,7 +227,7 @@ function DMGame::resetScore(%game, %client) %client.efficiency = 0.0; %client.suicides = 0; %client.scoreMidAir = 0; - %client.bigGame = 0; + %client.Bonus = 0; %client.killCounter = 0;// not a score thing but needs to be reset } @@ -241,87 +242,129 @@ function DMGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %imple DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); - if(%clVictim.isMarked && $DMGame::mode){ - if(%clVictim != %clKiller && %clKiller !$= ""){ - - //single bonus - if(%clVictim.killCounter < $DMGame::wpKillCountDoubleBonus) { - %clKiller.bigGame++; // stats rename to what ever - %clKiller.scorebigGame++; - messageAll('Msgding', '\c1%1 receives a bonus for ending %2\'s %3x kill streak.~wfx/misc/flag_lost.wav',%clKiller.name,%clVictim.name, %clVictim.killCounter); - } - //double bonus - else { - %clKiller.bigGame++; %clKiller.bigGame++; - %clKiller.scorebigGame++; %clKiller.scorebigGame++; - messageAll('Msgding', '\c1%1 receives a double bonus for ending %2\'s %3x kill streak.~wfx/misc/flag_lost.wav',%clKiller.name,%clVictim.name, %clVictim.killCounter); - } - Game.recalcScore(%clKiller); - } - for(%a = 0; %a < ClientGroup.getCount(); %a++) - { - %client = ClientGroup.getObject(%a); - if(%client != %clVictim){ - hideTargetWaypoint(%client,%clVictim); - } - } - %clVictim.isMarked = 0; + if($ProcessBonusActive) + schedule(300, 0, "ProcessBonusDM", %game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); + else + ProcessBonusDM(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); + +} + +function ProcessBonusDM(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc) +{ + $ProcessBonusActive = true; + + if(%clVictim.isMarked && $DMGame::mode) + { + if(%clVictim !$= %clKiller) + { + if(%clKiller $= "") + return; + + //single bonus + if(%clVictim.killCounter < $DMGame::wpKillCountDoubleBonus) + { + %clKiller.Bonus++; // stats rename to what ever + %clKiller.scoreBonus++; + + messageAll('Msgding', '\c1%1 receives a bonus for ending %2\'s %3x kill streak.~wfx/misc/flag_lost.wav',%clKiller.name,%clVictim.name, %clVictim.killCounter); + } + //double bonus + else + { + %clKiller.Bonus++; %clKiller.Bonus++; + %clKiller.scoreBonus++; %clKiller.scoreBonus++; + + messageAll('Msgding', '\c1%1 receives a double bonus for ending %2\'s %3x kill streak.~wfx/misc/flag_lost.wav',%clKiller.name,%clVictim.name, %clVictim.killCounter); + } + Game.recalcScore(%clKiller); + } + else if(%clVictim == %clKiller) + messageAll('Msgding', '\c1%1\'s %2x kill streak ended.', %clVictim.name, %clVictim.killCounter); + + for(%a = 0; %a < ClientGroup.getCount(); %a++) + { + %client = ClientGroup.getObject(%a); + if(%client != %clVictim) + { + hideTargetWaypoint(%client,%clVictim); + } + } + %clVictim.isMarked = 0; } - else if($DMGame::mode == 2){ - if(%game.lastGuy != %clKiller && %clVictim == %game.lastGuy){ - %clKiller.bigGame++; - messageClient(%clKiller, 'MsgPingWaypoint', '\c2Big Target Count %1.~wfx/misc/~wfx/misc/flag_lost.wav',%clKiller.bigGame); + else if($DMGame::mode == 2) + { + if(%game.lastGuy != %clKiller && %clVictim == %game.lastGuy) + { + %clKiller.Bonus++; + messageClient(%clKiller, 'MsgPingWaypoint', '\c1Bonus Target Count %1.~wfx/misc/~wfx/misc/flag_lost.wav',%clKiller.Bonus); } } %clKiller.killCounter++; %clVictim.killCounter = 0; - switch$($DMGame::mode){ + switch$($DMGame::mode) + { case 1: // player with the highest kill streak if they are above $DMGame::wpKillCount - %bigClient = 0; - for(%b = 0; %b < ClientGroup.getCount(); %b++){ + %bonusClient = 0; + for(%b = 0; %b < ClientGroup.getCount(); %b++) + { %cl = ClientGroup.getObject(%b); - if(%cl.killCounter >= $DMGame::wpKillCount && %cl.killCounter > %bigClient.killCounter && !%cl.isObserver){ - %bigClient = %cl;// we have a new + if(%cl.killCounter >= $DMGame::wpKillCount && %cl.killCounter > %bonusClient.killCounter && !%cl.isObserver) + { + %bonusClient = %cl;// we have a new } } - if(%bigClient != %game.lastGuy && %bigClient != 0){ - for(%i = 0; %i < ClientGroup.getCount(); %i++){ + if(%bonusClient !$= %game.lastGuy && %bonusClient !$= 0) + { + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { %cl = ClientGroup.getObject(%i); - messageClient(%cl, 'MsgPingWaypoint', '\c2%1 is on a kill streak.~wgui/vote_nopass.wav',%bigClient.name); + messageClient(%cl, 'MsgPingWaypoint', '\c1%1 is on a kill streak.~wgui/vote_nopass.wav',%bonusClient.name); hideTargetWaypoint(%cl,%game.lastGuy); - if(%cl != %bigClient){ - markTargetDM(%cl,%bigClient); + if(%cl != %bonusClient){ + markTargetDM(%cl,%bonusClient); } } %game.lastGuy.isMarked = 0; - %bigClient.isMarked = 1; - %game.lastGuy = %bigClient; + %bonusClient.isMarked = 1; + %game.lastGuy = %bonusClient; } + else if(%bonusClient == %game.lastGuy && %bonusClient !$= 0) + { //give waypointed player a kill bonus + %bonusClient.KillStreakBonus++; + %bonusClient.scoreKillStreakBonus++; + } case 2: // player with the highest score - %bigClient = 0; - for(%b = 0; %b < ClientGroup.getCount(); %b++){ + %bonusClient = 0; + for(%b = 0; %b < ClientGroup.getCount(); %b++) + { %cl = ClientGroup.getObject(%b); - if(%cl.score > %bigClient.score && !%cl.isObserver){ - %bigClient = %cl; + if(%cl.score > %bonusClient.score && !%cl.isObserver) + { + %bonusClient = %cl; } } - if(%bigClient != 0 && %game.lastGuy != %bigClient){ - for(%i = 0; %i < ClientGroup.getCount(); %i++){ + if(%bonusClient != 0 && %game.lastGuy != %bonusClient) + { + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { %cl = ClientGroup.getObject(%i); - //messageClient(%cl, 'MsgPingWaypoint', '\c2%1 now has the highest score.',%bigClient.name); - messageClient(%cl, 'MsgPingWaypoint', '\c2%1 now has the highest score.~wgui/vote_nopass.wav',%bigClient.name); + //messageClient(%cl, 'MsgPingWaypoint', '\c2%1 now has the highest score.',%bonusClient.name); + messageClient(%cl, 'MsgPingWaypoint', '\c1%1 now has the highest score.~wgui/vote_nopass.wav',%bonusClient.name); hideTargetWaypoint(%cl,%game.lastGuy); - if(%cl != %bigClient){ - markTargetDM(%cl,%bigClient); + if(%cl != %bonusClient) + { + markTargetDM(%cl,%bonusClient); } } - %game.lastGuy = %bigClient; + %game.lastGuy = %bonusClient; } } + + $ProcessBonusActive = false; } //function listDM(){// for debug //for(%a = 0; %a < ClientGroup.getCount(); %a++){ @@ -368,11 +411,14 @@ function DMGame::recalcScore(%game, %client) %killValue = %client.kills * %game.SCORE_PER_KILL; %deathValue = %client.deaths * %game.SCORE_PER_DEATH; %suicideValue = %client.suicides * %game.SCORE_PER_SUICIDE; - %bigGameValue = %client.bigGame * %game.SCORE_PER_BIGGAME; + %BonusValue = %client.Bonus * %game.SCORE_PER_BONUS; + %MidAirValue = %client.MidAir * %game.SCORE_PER_MIDAIR; + %KillStreakBonusValue = %client.KillStreakBonus * %game.SCORE_PER_KILLSTREAKBONUS; + if (%killValue - %deathValue == 0) %client.efficiency = %suicideValue; else - %client.efficiency = ((%killValue * %killValue) / (%killValue - (%deathValue + %suicideValue))) + %bigGameValue; + %client.efficiency = ((%killValue * %killValue) / (%killValue - (%deathValue + %suicideValue))) + (%BonusValue + %MidAirValue + %KillStreakBonusValue); %client.score = mFloatLength(%client.efficiency, 1); messageClient(%client, 'MsgYourScoreIs', "", %client.score); @@ -552,19 +598,24 @@ function DMGame::updateScoreHud(%game, %client, %tag) %clKills = mFloatLength( %cl.kills, 0 ); %clDeaths = mFloatLength( %cl.deaths + %cl.suicides, 0 ); + %clBonus = mFloor((%cl.Bonus * %game.SCORE_PER_BONUS) + (%cl.MidAir * %game.SCORE_PER_MIDAIR) + (%cl.KillStreakBonus * %game.SCORE_PER_KILLSTREAKBONUS )); %clStyle = %cl == %client ? "" : ""; + + //%BonusValue = %client.Bonus * %game.SCORE_PER_BONUS; + //%MidAirValue = %client.MidAir * %game.SCORE_PER_MIDAIR; + //%KillStreakBonusValue = %client.KillStreakBonus * %game.SCORE_PER_KILLSTREAKBONUS; //if the client is not an observer, send the message if (%client.team != 0) { // \%5\%1\%2\%3\tBG' messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3%4%6', - %cl.name, %clScore, %clKills, %clDeaths, %clStyle, %cl.bigGame); + %cl.name, %clScore, %clKills, %clDeaths, %clStyle, %clBonus); } //else for observers, create an anchor around the player name so they can be observed else { messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3%4%7', - %cl.name, %clScore, %clKills, %clDeaths, %clStyle, %cl,%cl.bigGame ); + %cl.name, %clScore, %clKills, %clDeaths, %clStyle, %cl, %clBonus); } }