// DisplayName = Infection //--- GAME RULES BEGIN --- // Build a Base or use Map bases. // Defend your territory from the horde of undead. // Either contain or destroy the Zombie infection. // -25 points per team kill. // -10 points per death or suicide. //--- GAME RULES END --- // Get Rid of those Underpowered weapons. $InvBanList[Infection, "KriegRifle"] = 1; $InvBanList[Infection, "PBC"] = 1; // Infection Game function InfectionGame::initGameVars(%game) { %game.SCORE_PER_SUICIDE = -10; %game.SCORE_PER_TEAMKILL = -25; %game.SCORE_PER_DEATH = -10; %game.SCORE_PER_KILL = 0; } package InfectionGame { function InfectionGame::timeLimitReached(%game) { logEcho("game over (timelimit)"); %game.gameOver(); cycleMissions(); } function InfectionGame::scoreLimitReached(%game) { logEcho("game over (scorelimit)"); %game.gameOver(); cycleMissions(); } function InfectionGame::gameOver(%game) { DefaultGame::gameOver(%game); messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); cancel(%game.timeThread); messageAll('MsgClearObjHud', ""); for(%i = 0; %i < ClientGroup.getCount(); %i ++) { %client = ClientGroup.getObject(%i); %game.resetScore(%client); } } function InfectionGame::clientMissionDropReady(%game, %client) { messageClient(%client, 'MsgClientReady',"", %game.class); %game.resetScore(%client); for(%i = 1; %i <= %game.numTeams; %i++) { $Teams[%i].score = 0; messageClient(%client, 'MsgInfectionAddTeam', "", %i, %game.getTeamName(%i), $flagStatus[%i], $TeamScore[%i]); } messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); DefaultGame::clientMissionDropReady(%game, %client); } function InfectionGame::assignClientTeam(%game, %client, %respawn) { DefaultGame::assignClientTeam(%game, %client, %respawn); messageClient(%client, 'MsgCheckTeamLines', "", %client.team); } function InfectionGame::recalcScore(%game, %cl) { %killValue = %cl.kills * %game.SCORE_PER_KILL; %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; if (%killValue - %deathValue == 0) %killPoints = 0; else %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); if(!isDemo()) { %cl.offenseScore = %killPoints + %cl.suicides * %game.SCORE_PER_SUICIDE + %cl.teamKills * %game.SCORE_PER_TEAMKILL + %cl.vehicleScore + %cl.vehicleBonus; %cl.defenseScore = %cl.genRepairs * %game.SCORE_PER_REPAIR_GEN + %cl.returnPts; } %cl.score = mFloor(%cl.offenseScore + %cl.defenseScore + (%cl.zkills * $zombie::killpoints)); %game.recalcTeamRanks(%cl); } function InfectionGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) { if( isObject( %implement ) ) { if( %implement.getDataBlock().getName() $= "AssaultPlasmaTurret" || %implement.getDataBlock().getName() $= "BomberTurret" ) // gunner %clKiller = %implement.vehicleMounted.getMountNodeObject(1).client; else if(%implement.getDataBlock().catagory $= "Vehicles") // pilot %clKiller = %implement.getMountNodeObject(0).client; } if(%game.testTurretKill(%implement)) %game.awardScoreTurretKill(%clVictim, %implement); else if (%game.testKill(%clVictim, %clKiller)) { %value = %game.awardScoreKill(%clKiller); %game.shareScore(%clKiller, %value); %game.awardScoreDeath(%clVictim); if (%game.testEscortAssist(%clVictim, %clKiller)) %game.awardScoreEscortAssist(%clKiller); } else { if (%game.testSuicide(%clVictim, %clKiller, %damageType)) { %game.awardScoreSuicide(%clVictim); } else { if (%game.testTeamKill(%clVictim, %clKiller)) %game.awardScoreTeamKill(%clVictim, %clKiller); } } } function InfectionGame::resetDontScoreTimer(%game, %team) { $dontScoreTimer[%team] = false; } function InfectionGame::resetScore(%game, %client) { %client.offenseScore = 0; %client.kills = 0; %client.deaths = 0; %client.suicides = 0; %client.teamKills = 0; %client.vehicleScore = 0; %client.vehicleBonus = 0; %client.defenseScore = 0; %client.genRepairs = 0; %client.returnPts = 0; %client.score = 0; } function InfectionGame::objectRepaired(%game, %obj, %objName) { %item = %obj.getDataBlock().getName(); switch$ (%item) { case generatorLarge : %game.genOnRepaired(%obj, %objName); case sensorMediumPulse : } %obj.wasDisabled = false; } function InfectionGame::genOnRepaired(%game, %obj, %objName) { if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; %game.awardScoreGenRepair(%obj.repairedBy); } } function InfectionGame::awardScoreGenRepair(%game, %cl) { %cl.genRepairs++; if (%game.SCORE_PER_REPAIR_GEN != 0) { messageClient(%cl, 'msgGenRep', '\c0You received a %1 point bonus for repairing a generator.', %game.SCORE_PER_REPAIR_GEN); } %game.recalcScore(%cl); } function InfectionGame::enterMissionArea(%game, %playerData, %player) { if(%player.getState() $= "Dead") return; %player.client.outOfBounds = false; messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); } function InfectionGame::leaveMissionArea(%game, %playerData, %player) { if(%player.getState() $= "Dead") return; %player.client.outOfBounds = true; messageClient(%player.client, 'MsgLeaveMissionArea', '\c1You have left the mission area.~wfx/misc/warning_beep.wav'); logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); } function InfectionGame::testKill(%game, %victimID, %killerID) { return ((%killerID !=0) && (%victimID.team != %killerID.team)); } function InfectionGame::awardScoreKill(%game, %killerID) { %killerID.kills++; %game.recalcScore(%killerID); return %game.SCORE_PER_KILL; } };