2013-02-01 20:45:22 +00:00
// DisplayName = CombatCon
//--- GAME RULES BEGIN ---
// Make a base or use map bases.
// Defend your base.
// Destroy the enemy base.
// Team killing and suicide penalties.
//--- GAME RULES END ---
// CombatCon Game
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Notes are all done by Blnukem. These are to help you know what's what when
// editing this gametype. (The notes are not completed, so don't edit anything)
//------------------------------------------------------------------------------
// NOTICE:
// This rather huge file will be cleaned and remade in a later version of ACCM.
// So for all you file moderators out there, have fun tweaking this gametype.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Now to get rid of the overpowered weapons.
$InvBanList [ CombatCon , " M4 " ] = 1 ;
$InvBanList [ CombatCon , " RailGun " ] = 1 ;
$InvBanList [ CombatCon , " NapalmMortar " ] = 1 ;
$InvBanList [ CombatCon , " Flamer " ] = 1 ;
$InvBanList [ CombatCon , " FlamerAmmoPack " ] = 1 ;
$InvBanList [ CombatCon , " ELFBarrelPack " ] = 1 ;
//------------------------------------------------------------------------------
// Easy huh? Also as another reminder, the weapons above were removed by popular
// demand of the ACCM users and the Devs. The weapons are just too ovepowered
// for PVP style gameplay.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Lets begin the Gametype code... Shall we?
//------------------------------------------------------------------------------
// NOTICE:
// Any notes below this point were not done by Blnukem. So it's advised you
// don't try editing anything below this point. Or you'll mess the Gametype up.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function CombatConGame :: initGameVars ( % game )
{
if ( isDemo ())
{
% game . SCORE_PER_SUICIDE = - 10 ;
% game . SCORE_PER_TEAMKILL = - 10 ;
% game . SCORE_PER_DEATH = 0 ;
% game . SCORE_PER_KILL = 10 ;
% game . SCORE_PER_GEN_DESTROY = 8 ;
% game . SCORE_PER_TURRET_KILL = 5 ;
% game . SCORE_PER_GEN_DEFEND = 5 ;
% game . SCORE_PER_GEN_REPAIR = 2 ;
% game . RADIUS_GEN_DEFENSE = 20 ; //meters
% game . fadeTimeMS = 2000 ;
% game . notifyMineDist = 7.5 ;
% game . stalemate = false ;
% game . stalemateObjsVisible = false ;
% game . stalemateTimeMS = 60000 ;
% game . stalemateFreqMS = 15000 ;
% game . stalemateDurationMS = 6000 ;
}
if ( ! isDemo () )
{
% game . SCORE_PER_SUICIDE = - 10 ;
% game . SCORE_PER_TEAMKILL = - 10 ;
% game . SCORE_PER_DEATH = 0 ;
% game . SCORE_PER_KILL = 10 ;
% game . SCORE_PER_HEADSHOT = 2 ;
% game . SCORE_PER_TURRET_KILL = 10 ;
% game . SCORE_PER_TURRET_KILL_AUTO = 0 ;
% game . SCORE_PER_GEN_DEFEND = 5 ;
% game . SCORE_PER_DESTROY_GEN = 10 ;
% game . SCORE_PER_DESTROY_SENSOR = 4 ;
% game . SCORE_PER_DESTROY_TURRET = 5 ;
% game . SCORE_PER_DESTROY_ISTATION = 2 ;
% game . SCORE_PER_DESTROY_VSTATION = 5 ;
% game . SCORE_PER_DESTROY_SOLAR = 5 ;
% game . SCORE_PER_DESTROY_SENTRY = 4 ;
% game . SCORE_PER_DESTROY_DEP_SENSOR = 1 ;
% game . SCORE_PER_DESTROY_DEP_INV = 2 ;
% game . SCORE_PER_DESTROY_DEP_TUR = 3 ;
% game . SCORE_PER_DESTROY_SHRIKE = 5 ;
% game . SCORE_PER_DESTROY_STRIKEFIGHTER = 5 ;
% game . SCORE_PER_DESTROY_HELICOPTER = 5 ;
% game . SCORE_PER_DESTROY_AWACS = 7 ;
% game . SCORE_PER_DESTROY_BOMBER = 7 ;
% game . SCORE_PER_DESTROY_GUNSHIP = 10 ;
% game . SCORE_PER_DESTROY_HEAVYHELICOPTER = 10 ;
% game . SCORE_PER_DESTROY_TRANSPORT = 10 ;
% game . SCORE_PER_DESTROY_WILDCAT = 2 ;
% game . SCORE_PER_DESTROY_TANK = 5 ;
% game . SCORE_PER_DESTROY_HEAVYTANK = 5 ;
% game . SCORE_PER_DESTROY_CGTANK = 5 ;
% game . SCORE_PER_DESTROY_FFTRANSPORT = 5 ;
% game . SCORE_PER_DESTROY_ARTILLERY = 10 ;
% game . SCORE_PER_DESTROY_MPB = 10 ;
% game . SCORE_PER_DESTROY_TRANSBOAT = 4 ;
% game . SCORE_PER_DESTROY_SUB = 10 ;
% game . SCORE_PER_DESTROY_BOAT = 15 ;
% game . SCORE_PER_PASSENGER = 3 ;
% game . SCORE_PER_REPAIR_GEN = 8 ;
% game . SCORE_PER_REPAIR_SENSOR = 1 ;
% game . SCORE_PER_REPAIR_TURRET = 4 ;
% game . SCORE_PER_REPAIR_ISTATION = 2 ;
% game . SCORE_PER_REPAIR_VSTATION = 4 ;
% game . SCORE_PER_REPAIR_SOLAR = 4 ;
% game . SCORE_PER_REPAIR_SENTRY = 2 ;
% game . SCORE_PER_REPAIR_DEP_TUR = 3 ;
% game . SCORE_PER_REPAIR_DEP_INV = 2 ;
% game . FLAG_RETURN_DELAY = 45 * 1000 ;
% game . TIME_CONSIDERED_FLAGCARRIER_THREAT = 3 * 1000 ;
% game . RADIUS_GEN_DEFENSE = 20 ;
% game . RADIUS_FLAG_DEFENSE = 20 ;
% game . TOUCH_DELAY_MS = 20000 ;
% game . fadeTimeMS = 2000 ;
% game . notifyMineDist = 7.5 ;
% game . stalemate = false ;
% game . stalemateObjsVisible = false ;
% game . stalemateTimeMS = 60000 ;
% game . stalemateFreqMS = 15000 ;
% game . stalemateDurationMS = 6000 ;
}
}
package CombatConGame {
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Now Seriously... STOP EDITING!!!
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function ShapeBaseData :: onDestroyed ( % data , % obj )
{
% scorer = % obj . lastDamagedBy ;
if ( ! isObject ( % scorer ))
return ;
if ( ( % scorer . getType () & $TypeMasks :: GameBaseObjectType ) &&
% scorer . getDataBlock () . catagory $ = " Vehicles " )
{
// ---------------------------------------------
// z0dd - ZOD, 6/18/02. %name was never defined.
% name = % scorer . getDatablock () . getName ();
if ( % name $ = " BomberFlyer " || % name $ = " AssaultVehicle " )
% gunnerNode = 1 ;
else
% gunnerNode = 0 ;
if ( % scorer . getMountNodeObject ( % gunnerNode ))
{
% destroyer = % scorer . getMountNodeObject ( % gunnerNode ) . client ;
% scorer = % destroyer ;
% damagingTeam = % scorer . team ;
}
}
else if ( % scorer . getClassName () $ = " Turret " )
{
if ( % scorer . getControllingClient ())
{
//manned turret
% destroyer = % scorer . getControllingClient ();
% scorer = % destroyer ;
% damagingTeam = % scorer . team ;
}
else return ; //unmanned turret
}
if ( !% damagingTeam )
% damagingTeam = % scorer . team ;
if ( % damagingTeam == % obj . team )
{
//error("team objects dont score");
return ;
}
if ( % obj . soiledByEnemyRepair )
{
//error(%obj SPC "was once repiared by an enemy. No destruction points.");
return ;
}
% objType = % obj . getDataBlock () . getName ();
if ( % objType $ = " GeneratorLarge " )
{
% score = game . awardScoreGenDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " SensorLargePulse " || % objType $ = " SensorMediumPulse " )
{
% score = game . awardScoreSensorDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " TurretBaseLarge " )
{
% score = game . awardScoreTurretDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " StationInventory " )
{
% score = game . awardScoreInvDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " StationVehicle " )
{
% score = game . awardScoreVehicleStationDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " SolarPanel " )
{
% score = game . awardScoreSolarDestroy ( % scorer );
game . shareScore ( % score , % score );
}
else if ( % objType $ = " SentryTurret " )
{
% score = game . awardScoreSentryDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " DeployedMotionSensor " || % objType $ = " DeployedPulseSensor " )
{
% score = game . awardScoreDepSensorDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " TurretDeployedWallIndoor " || % objType $ = " TurretDeployedFloorIndoor " ||
% objType $ = " TurretDeployedCeilingIndoor " || % objType $ = " TurretDeployedOutdoor " )
{
% score = game . awardScoreDepTurretDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
else if ( % objType $ = " DeployedStationInventory " )
{
% score = game . awardScoreDepStationDestroy ( % scorer );
game . shareScore ( % scorer , % score );
}
}
function ShapeBaseData :: onDisabled ( % data , % obj )
{
% obj . wasDisabled = true ;
Parent :: onDisabled ( % data , % obj );
}
function RepairGunImage :: onRepair ( % this , % obj , % slot )
{
Parent :: onRepair ( % this , % obj , % slot );
% target = % obj . repairing ;
if ( % target && % target . team != % obj . team )
{
//error("Enemy stuff("@%obj@") is being repaired (by "@%target@")");
% target . soiledByEnemyRepair = true ;
}
}
function CombatConGame :: timeLimitReached ( % game )
{
logEcho ( " game over (timelimit) " );
% game . gameOver ();
cycleMissions ();
}
function CombatConGame :: scoreLimitReached ( % game )
{
logEcho ( " game over (scorelimit) " );
% game . gameOver ();
cycleMissions ();
}
function CombatConGame :: gameOver ( % game )
{
//call the default
DefaultGame :: gameOver ( % game );
//send the winner message
% winner = " " ;
if ( $teamScore [ 1 ] > $teamScore [ 2 ])
% winner = % game . getTeamName ( 1 );
else if ( $teamScore [ 2 ] > $teamScore [ 1 ])
% winner = % game . getTeamName ( 2 );
if ( % winner $ = 'Storm' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.stowins.wav " );
else if ( % winner $ = 'Inferno' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.infwins.wav " );
else if ( % winner $ = 'Starwolf' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.swwin.wav " );
else if ( % winner $ = 'Blood Eagle' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.bewin.wav " );
else if ( % winner $ = 'Diamond Sword' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.dswin.wav " );
else if ( % winner $ = 'Phoenix' )
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.pxwin.wav " );
else
messageAll ( 'MsgGameOver' , " Match has ended.~wvoice/announcer/ann.gameover.wav " );
messageAll ( 'MsgClearObjHud' , " " );
for ( % i = 0 ; % i < ClientGroup . getCount (); % i ++ )
{
% client = ClientGroup . getObject ( % i );
% game . resetScore ( % client );
}
for ( % j = 1 ; % j <= % game . numTeams ; % j ++ )
$TeamScore [ % j ] = 0 ;
}
function CombatConGame :: onClientDamaged ( % game , % clVictim , % clAttacker , % damageType , % implement , % damageLoc )
{
if ( % clVictim . headshot && % damageType == $DamageType :: Laser && % clVictim . team != % clAttacker . team )
{
% clAttacker . scoreHeadshot ++ ;
if ( % game . SCORE_PER_HEADSHOT != 0 )
{
messageClient ( % clAttacker , 'msgHeadshot' , '\c0You received a %1 point bonus for a successful headshot.' , % game . SCORE_PER_HEADSHOT );
}
% game . recalcScore ( % clAttacker );
}
//the DefaultGame will set some vars
DefaultGame :: onClientDamaged ( % game , % clVictim , % clAttacker , % damageType , % implement , % damageLoc );
//if victim is carrying a flag and is not on the attackers team, mark the attacker as a threat for x seconds(for scoring purposes)
if (( % clVictim . holdingFlag ! $ = " " ) && ( % clVictim . team != % clAttacker . team ))
{
% clAttacker . dmgdFlagCarrier = true ;
cancel ( % clAttacker . threatTimer ); //restart timer
% clAttacker . threatTimer = schedule ( % game . TIME_CONSIDERED_FLAGCARRIER_THREAT , % clAttacker . dmgdFlagCarrier = false );
}
}
////////////////////////////////////////////////////////////////////////////////////////
function CombatConGame :: clientMissionDropReady ( % game , % client )
{
messageClient ( % client , 'MsgClientReady' , " " , % game . class );
% game . resetScore ( % client );
for ( % i = 1 ; % i <= % game . numTeams ; % i ++ )
{
$Teams [ % i ] . score = 0 ;
messageClient ( % client , 'MsgCombatConAddTeam' , " " , % i , % game . getTeamName ( % i ), $flagStatus [ % i ], $TeamScore [ % i ]);
}
//%game.populateTeamRankArray(%client);
//messageClient(%client, 'MsgYourRankIs', "", -1);
messageClient ( % client , 'MsgMissionDropInfo' , '\c0You are in mission %1 (%2).' , $MissionDisplayName , $MissionTypeDisplayName , $ServerName );
DefaultGame :: clientMissionDropReady ( % game , % client );
}
function CombatConGame :: assignClientTeam ( % game , % client , % respawn )
{
DefaultGame :: assignClientTeam ( % game , % client , % respawn );
// if player's team is not on top of objective hud, switch lines
messageClient ( % client , 'MsgCheckTeamLines' , " " , % client . team );
}
function CombatConGame :: 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 . escortAssists * % game . SCORE_PER_ESCORT_ASSIST +
% cl . teamKills * % game . SCORE_PER_TEAMKILL +
% cl . scoreHeadshot * % game . SCORE_PER_HEADSHOT +
% cl . flagCaps * % game . SCORE_PER_PLYR_FLAG_CAP +
% cl . flagGrabs * % game . SCORE_PER_PLYR_FLAG_TOUCH +
% cl . genDestroys * % game . SCORE_PER_DESTROY_GEN +
% cl . sensorDestroys * % game . SCORE_PER_DESTROY_SENSOR +
% cl . turretDestroys * % game . SCORE_PER_DESTROY_TURRET +
% cl . iStationDestroys * % game . SCORE_PER_DESTROY_ISTATION +
% cl . vstationDestroys * % game . SCORE_PER_DESTROY_VSTATION +
% cl . solarDestroys * % game . SCORE_PER_DESTROY_SOLAR +
% cl . sentryDestroys * % game . SCORE_PER_DESTROY_SENTRY +
% cl . depSensorDestroys * % game . SCORE_PER_DESTROY_DEP_SENSOR +
% cl . depTurretDestroys * % game . SCORE_PER_DESTROY_DEP_TUR +
% cl . depStationDestroys * % game . SCORE_PER_DESTROY_DEP_INV +
% cl . vehicleScore + % cl . vehicleBonus ;
% cl . defenseScore = % cl . genDefends * % game . SCORE_PER_GEN_DEFEND +
% cl . flagDefends * % game . SCORE_PER_FLAG_DEFEND +
% cl . carrierKills * % game . SCORE_PER_CARRIER_KILL +
% cl . escortAssists * % game . SCORE_PER_ESCORT_ASSIST +
% cl . turretKills * % game . SCORE_PER_TURRET_KILL_AUTO +
% cl . mannedturretKills * % game . SCORE_PER_TURRET_KILL +
% cl . genRepairs * % game . SCORE_PER_REPAIR_GEN +
% cl . SensorRepairs * % game . SCORE_PER_REPAIR_SENSOR +
% cl . TurretRepairs * % game . SCORE_PER_REPAIR_TURRET +
% cl . StationRepairs * % game . SCORE_PER_REPAIR_ISTATION +
% cl . VStationRepairs * % game . SCORE_PER_REPAIR_VSTATION +
% cl . solarRepairs * % game . SCORE_PER_REPAIR_SOLAR +
% cl . sentryRepairs * % game . SCORE_PER_REPAIR_SENTRY +
% cl . depInvRepairs * % game . SCORE_PER_REPAIR_DEP_INV +
% cl . depTurretRepairs * % game . SCORE_PER_REPAIR_DEP_TUR +
% cl . returnPts ;
}
if ( isDemo () )
{
% cl . offenseScore = % killPoints +
% cl . flagDefends * % game . SCORE_PER_FLAG_DEFEND +
% cl . suicides * % game . SCORE_PER_SUICIDE + //-1
% cl . escortAssists * % game . SCORE_PER_ESCORT_ASSIST + // 1
% cl . teamKills * % game . SCORE_PER_TEAMKILL + // -1
% cl . flagCaps * % game . SCORE_PER_PLYR_FLAG_CAP + // 3
% cl . genDestroys * % game . SCORE_PER_GEN_DESTROY ; // 2
% cl . defenseScore = % cl . genDefends * % game . SCORE_PER_GEN_DEFEND + // 1
% cl . carrierKills * % game . SCORE_PER_CARRIER_KILL + // 1
% cl . escortAssists * % game . SCORE_PER_ESCORT_ASSIST + // 1
% cl . turretKills * % game . SCORE_PER_TURRET_KILL + // 1
% cl . flagReturns * % game . SCORE_PER_FLAG_RETURN + // 1
% cl . genRepairs * % game . SCORE_PER_GEN_REPAIR ; // 1
}
% cl . score = mFloor ( % cl . offenseScore + % cl . defenseScore + ( % cl . zkills * $zombie :: killpoints ));
% game . recalcTeamRanks ( % cl );
}
function CombatConGame :: updateKillScores ( % game , % clVictim , % clKiller , % damageType , % implement )
{
// is this a vehicle kill rather than a player kill
// console error message suppression
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 )) //check for turretkill before awarded a non client points for a kill
% game . awardScoreTurretKill ( % clVictim , % implement );
else if ( % game . testKill ( % clVictim , % clKiller )) //verify victim was an enemy
{
% value = % game . awardScoreKill ( % clKiller );
% game . shareScore ( % clKiller , % value );
% game . awardScoreDeath ( % clVictim );
if ( % game . testGenDefend ( % clVictim , % clKiller ))
% game . awardScoreGenDefend ( % clKiller );
if ( % game . testCarrierKill ( % clVictim , % clKiller ))
% game . awardScoreCarrierKill ( % clKiller );
else
{
if ( % game . testFlagDefend ( % clVictim , % clKiller ))
% game . awardScoreFlagDefend ( % clKiller );
}
if ( % game . testEscortAssist ( % clVictim , % clKiller ))
% game . awardScoreEscortAssist ( % clKiller );
}
else
{
if ( % game . testSuicide ( % clVictim , % clKiller , % damageType )) //otherwise test for suicide
{
% game . awardScoreSuicide ( % clVictim );
}
else
{
if ( % game . testTeamKill ( % clVictim , % clKiller )) //otherwise test for a teamkill
% game . awardScoreTeamKill ( % clVictim , % clKiller );
}
}
}
function CombatConGame :: testGenDefend ( % game , % victimID , % killerID )
{
InitContainerRadiusSearch ( % victimID . plyrPointOfDeath , % game . RADIUS_GEN_DEFENSE , $TypeMasks :: StaticShapeObjectType );
% objID = containerSearchNext ();
while ( % objID != 0 )
{
% objType = % objID . getDataBlock () . ClassName ;
if (( % objType $ = " generator " ) && ( % objID . team == % killerID . team ))
return true ; //found a killer's generator within required radius of victim's death
else
% objID = containerSearchNext ();
}
return false ; //didn't find a qualifying gen within required radius of victim's point of death
}
function CombatConGame :: testCarrierKill ( % game , % victimID , % killerID )
{
% flag = % victimID . plyrDiedHoldingFlag ;
return (( % flag ! $ = " " ) && ( % flag . team == % killerID . team ));
}
function CombatConGame :: testEscortAssist ( % game , % victimID , % killerID )
{
return ( % victimID . dmgdFlagCarrier );
}
function CombatConGame :: testValidRepair ( % game , % obj )
{
if ( !% obj . wasDisabled )
{
//error(%obj SPC "was never disabled");
return false ;
}
else if ( % obj . lastDamagedByTeam == % obj . team )
{
//error(%obj SPC "was last damaged by a friendly");
return false ;
}
else if ( % obj . team != % obj . repairedBy . team )
{
//error(%obj SPC "was repaired by an enemy");
return false ;
}
else
{
if ( % obj . soiledByEnemyRepair )
% obj . soiledByEnemyRepair = false ;
return true ;
}
}
function CombatConGame :: resetDontScoreTimer ( % game , % team )
{
$dontScoreTimer [ % team ] = false ;
}
// Asset Destruction scoring
function CombatConGame :: awardScoreGenDestroy ( % game , % cl )
{
% cl . genDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_GEN != 0 )
{
messageClient ( % cl , 'msgGenDes' , '\c0You received a %1 point bonus for destroying an enemy generator.' , % game . SCORE_PER_DESTROY_GEN );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_GEN ;
}
function CombatConGame :: awardScoreSensorDestroy ( % game , % cl )
{
% cl . sensorDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_SENSOR != 0 )
{
messageClient ( % cl , 'msgSensorDes' , '\c0You received a %1 point bonus for destroying an enemy sensor.' , % game . SCORE_PER_DESTROY_SENSOR );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_SENSOR ;
}
function CombatConGame :: awardScoreTurretDestroy ( % game , % cl )
{
% cl . turretDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_TURRET != 0 )
{
messageClient ( % cl , 'msgTurretDes' , '\c0You received a %1 point bonus for destroying an enemy turret.' , % game . SCORE_PER_DESTROY_TURRET );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_TURRET ;
}
function CombatConGame :: awardScoreInvDestroy ( % game , % cl )
{
% cl . IStationDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_ISTATION != 0 )
{
messageClient ( % cl , 'msgInvDes' , '\c0You received a %1 point bonus for destroying an enemy inventory station.' , % game . SCORE_PER_DESTROY_ISTATION );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_ISTATION ;
}
function CombatConGame :: awardScoreVehicleStationDestroy ( % game , % cl )
{
% cl . VStationDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_VSTATION != 0 )
{
messageClient ( % cl , 'msgVSDes' , '\c0You received a %1 point bonus for destroying an enemy vehicle station.' , % game . SCORE_PER_DESTROY_VSTATION );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_VSTATION ;
}
function CombatConGame :: awardScoreSolarDestroy ( % game , % cl )
{
% cl . SolarDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_SOLAR != 0 )
{
messageClient ( % cl , 'msgSolarDes' , '\c0You received a %1 point bonus for destroying an enemy solar panel.' , % game . SCORE_PER_DESTROY_SOLAR );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_SOLAR ;
}
function CombatConGame :: awardScoreSentryDestroy ( % game , % cl )
{
% cl . sentryDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_SENTRY != 0 )
{
messageClient ( % cl , 'msgSentryDes' , '\c0You received a %1 point bonus for destroying an enemy sentry turret.' , % game . SCORE_PER_DESTROY_SENTRY );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_SENTRY ;
}
function CombatConGame :: awardScoreDepSensorDestroy ( % game , % cl )
{
% cl . depSensorDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_DEP_SENSOR != 0 )
{
messageClient ( % cl , 'msgDepSensorDes' , '\c0You received a %1 point bonus for destroying an enemy deployable.' , % game . SCORE_PER_DESTROY_DEP_SENSOR );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_DEP_SENSOR ;
}
function CombatConGame :: awardScoreDepTurretDestroy ( % game , % cl )
{
% cl . depTurretDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_DEP_TUR != 0 )
{
messageClient ( % cl , 'msgDepTurDes' , '\c0You received a %1 point bonus for destroying an enemy deployed turret.' , % game . SCORE_PER_DESTROY_DEP_TUR );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_DEP_TUR ;
}
function CombatConGame :: awardScoreDepStationDestroy ( % game , % cl )
{
% cl . depStationDestroys ++ ;
if ( % game . SCORE_PER_DESTROY_DEP_INV != 0 )
{
messageClient ( % cl , 'msgDepInvDes' , '\c0You received a %1 point bonus for destroying an enemy deployed station.' , % game . SCORE_PER_DESTROY_DEP_INV );
//messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_DESTROY_DEP_INV ;
}
function CombatConGame :: awardScoreGenDefend ( % game , % killerID )
{
% killerID . genDefends ++ ;
if ( % game . SCORE_PER_GEN_DEFEND != 0 )
{
messageClient ( % killerID , 'msgGenDef' , '\c0You received a %1 point bonus for defending a generator.' , % game . SCORE_PER_GEN_DEFEND );
//messageTeamExcept(%killerID, 'msgGenDef', '\c0Teammate %1 received a %2 point bonus for defending a generator.', %killerID.name, %game.SCORE_PER_GEN_DEFEND);
}
% game . recalcScore ( % cl );
return % game . SCORE_PER_GEN_DEFEND ;
}
function CombatConGame :: awardScoreCarrierKill ( % game , % killerID )
{
% killerID . carrierKills ++ ;
if ( % game . SCORE_PER_CARRIER_KILL != 0 )
{
messageClient ( % killerID , 'msgCarKill' , '\c0You received a %1 point bonus for stopping the enemy flag carrier!' , % game . SCORE_PER_CARRIER_KILL );
//messageTeamExcept(%killerID, 'msgCarKill', '\c0Teammate %1 received a %2 point bonus for stopping the enemy flag carrier!', %killerID.name, %game.SCORE_PER_CARRIER_KILL);
}
% game . recalcScore ( % killerID );
return % game . SCORE_PER_CARRIER_KILL ;
}
function CombatConGame :: awardScoreFlagDefend ( % game , % killerID )
{
% killerID . flagDefends ++ ;
if ( % game . SCORE_PER_FLAG_DEFEND != 0 )
{
messageClient ( % killerID , 'msgFlagDef' , '\c0You received a %1 point bonus for defending your flag!' , % game . SCORE_PER_FLAG_DEFEND );
//messageTeamExcept(%killerID, 'msgFlagDef', '\c0Teammate %1 received a %2 point bonus for defending your flag!', %killerID.name, %game.SCORE_PER_FLAG_DEFEND);
}
% game . recalcScore ( % killerID );
return % game . SCORE_PER_FLAG_DEFEND ;
}
function CombatConGame :: awardScoreEscortAssist ( % game , % killerID )
{
% killerID . escortAssists ++ ;
if ( % game . SCORE_PER_ESCORT_ASSIST != 0 )
{
messageClient ( % killerID , 'msgEscAsst' , '\c0You received a %1 point bonus for protecting the flag carrier!' , % game . SCORE_PER_ESCORT_ASSIST );
//messageTeamExcept(%killerID, 'msgEscAsst', '\c0Teammate %1 received a %2 point bonus for protecting the flag carrier!', %killerID.name, %game.SCORE_PER_ESCORT_ASSIST);
}
% game . recalcScore ( % killerID );
return % game . SCORE_PER_ESCORT_ASSIST ;
}
function CombatConGame :: resetScore ( % game , % client )
{
% client . offenseScore = 0 ;
% client . kills = 0 ;
% client . deaths = 0 ;
% client . suicides = 0 ;
% client . escortAssists = 0 ;
% client . teamKills = 0 ;
% client . flagCaps = 0 ;
% client . flagGrabs = 0 ;
% client . genDestroys = 0 ;
% client . sensorDestroys = 0 ;
% client . turretDestroys = 0 ;
% client . iStationDestroys = 0 ;
% client . vstationDestroys = 0 ;
% client . solarDestroys = 0 ;
% client . sentryDestroys = 0 ;
% client . depSensorDestroys = 0 ;
% client . depTurretDestroys = 0 ;
% client . depStationDestroys = 0 ;
% client . vehicleScore = 0 ;
% client . vehicleBonus = 0 ;
% client . flagDefends = 0 ;
% client . defenseScore = 0 ;
% client . genDefends = 0 ;
% client . carrierKills = 0 ;
% client . escortAssists = 0 ;
% client . turretKills = 0 ;
% client . mannedTurretKills = 0 ;
% client . flagReturns = 0 ;
% client . genRepairs = 0 ;
% client . SensorRepairs = 0 ;
% client . TurretRepairs = 0 ;
% client . StationRepairs = 0 ;
% client . VStationRepairs = 0 ;
% client . solarRepairs = 0 ;
% client . sentryRepairs = 0 ;
% client . depInvRepairs = 0 ;
% client . depTurretRepairs = 0 ;
% client . returnPts = 0 ;
% client . score = 0 ;
}
function CombatConGame :: objectRepaired ( % game , % obj , % objName )
{
% item = % obj . getDataBlock () . getName ();
switch $ ( % item )
{
case generatorLarge :
% game . genOnRepaired ( % obj , % objName );
case sensorMediumPulse :
% game . sensorOnRepaired ( % obj , % objName );
case sensorLargePulse :
% game . sensorOnRepaired ( % obj , % objName );
case stationInventory :
% game . stationOnRepaired ( % obj , % objName );
case turretBaseLarge :
% game . turretOnRepaired ( % obj , % objName );
case stationVehicle :
% game . vStationOnRepaired ( % obj , % objName );
case solarPanel :
% game . solarPanelOnRepaired ( % obj , % objName );
case sentryTurret :
% game . sentryTurretOnRepaired ( % obj , % objName );
case TurretDeployedWallIndoor :
% game . depTurretOnRepaired ( % obj , % objName );
case TurretDeployedFloorIndoor :
% game . depTurretOnRepaired ( % obj , % objName );
case TurretDeployedCeilingIndoor :
% game . depTurretOnRepaired ( % obj , % objName );
case TurretDeployedOutdoor :
% game . depTurretOnRepaired ( % obj , % objName );
}
% obj . wasDisabled = false ;
}
function CombatConGame :: genOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgGenRepaired' , '\c0%1 repaired the %2 Generator!' , % repairman . name , % obj . nameTag );
% game . awardScoreGenRepair ( % obj . repairedBy );
}
}
function CombatConGame :: stationOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgStationRepaired' , '\c0%1 repaired the %2 Inventory Station!' , % repairman . name , % obj . nameTag );
% game . awardScoreStationRepair ( % obj . repairedBy );
}
}
function CombatConGame :: sensorOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgSensorRepaired' , '\c0%1 repaired the %2 Pulse Sensor!' , % repairman . name , % obj . nameTag );
% game . awardScoreSensorRepair ( % obj . repairedBy );
}
}
function CombatConGame :: turretOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgTurretRepaired' , '\c0%1 repaired the %2 Turret!' , % repairman . name , % obj . nameTag );
% game . awardScoreTurretRepair ( % obj . repairedBy );
}
}
function CombatConGame :: vStationOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgvstationRepaired' , '\c0%1 repaired the Vehicle Station!' , % repairman . name );
% game . awardScoreVStationRepair ( % obj . repairedBy );
}
}
function CombatConGame :: solarPanelOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgsolarRepaired' , '\c0%1 repaired the %2 Solar Panel!' , % repairman . name , % obj . nameTag );
% game . awardScoreSolarRepair ( % obj . repairedBy );
}
}
function CombatConGame :: sentryTurretOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
teamRepairMessage ( % repairman , 'msgsentryTurretRepaired' , '\c0%1 repaired the %2 Sentry Turret!' , % repairman . name , % obj . nameTag );
% game . awardScoreSentryRepair ( % obj . repairedBy );
}
}
function CombatConGame :: depTurretOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
% game . awardScoreDepTurretRepair ( % obj . repairedBy );
}
}
function CombatConGame :: depInvOnRepaired ( % game , % obj , % objName )
{
if ( % game . testValidRepair ( % obj ))
{
% repairman = % obj . repairedBy ;
% game . awardScoreDepInvRepair ( % obj . repairedBy );
}
}
function CombatConGame :: 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 CombatConGame :: awardScoreStationRepair ( % game , % cl )
{
% cl . stationRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_ISTATION != 0 )
{
messageClient ( % cl , 'msgIStationRep' , '\c0You received a %1 point bonus for repairing a inventory station.' , % game . SCORE_PER_REPAIR_ISTATION );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreSensorRepair ( % game , % cl )
{
% cl . sensorRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_SENSOR != 0 )
{
messageClient ( % cl , 'msgSensorRep' , '\c0You received a %1 point bonus for repairing a sensor.' , % game . SCORE_PER_REPAIR_SENSOR );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreTurretRepair ( % game , % cl )
{
% cl . TurretRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_TURRET != 0 )
{
messageClient ( % cl , 'msgTurretRep' , '\c0You received a %1 point bonus for repairing a base turret.' , % game . SCORE_PER_REPAIR_TURRET );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreVStationRepair ( % game , % cl )
{
% cl . VStationRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_VSTATION != 0 )
{
messageClient ( % cl , 'msgVStationRep' , '\c0You received a %1 point bonus for repairing a vehicle station.' , % game . SCORE_PER_REPAIR_VSTATION );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreSolarRepair ( % game , % cl )
{
% cl . solarRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_SOLAR != 0 )
{
messageClient ( % cl , 'msgsolarRep' , '\c0You received a %1 point bonus for repairing a solar panel.' , % game . SCORE_PER_REPAIR_SOLAR );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreSentryRepair ( % game , % cl )
{
% cl . sentryRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_SENTRY != 0 )
{
messageClient ( % cl , 'msgSentryRep' , '\c0You received a %1 point bonus for repairing a sentry turret.' , % game . SCORE_PER_REPAIR_SENTRY );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreDepTurretRepair ( % game , % cl )
{
% cl . depTurretRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_DEP_TUR != 0 )
{
messageClient ( % cl , 'msgDepTurretRep' , '\c0You received a %1 point bonus for repairing a deployed turret.' , % game . SCORE_PER_REPAIR_DEP_TUR );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: awardScoreDepInvRepair ( % game , % cl )
{
% cl . depInvRepairs ++ ;
if ( % game . SCORE_PER_REPAIR_DEP_INV != 0 )
{
messageClient ( % cl , 'msgDepInvRep' , '\c0You received a %1 point bonus for repairing a deployed station.' , % game . SCORE_PER_REPAIR_DEP_INV );
}
% game . recalcScore ( % cl );
}
function CombatConGame :: enterMissionArea ( % game , % playerData , % player )
{
% player . client . outOfBounds = false ;
messageClient ( % player . client , 'EnterMissionArea' , '\c1You are back in the mission area. ~wvoice/Announcer/ANN.ib.wav' );
cancel ( % player . alertThread );
}
function CombatConGame :: leaveMissionArea ( % game , % playerData , % player )
{
if ( % player . getState () $ = " Dead " )
return ;
% player . client . outOfBounds = true ;
messageClient ( % player . client , 'LeaveMissionArea' , '\c1You have left the mission area. Return or be killed. ~wvoice/Announcer/ANN.oob.wav' );
% player . alertThread = % game . schedule ( 10 , " DMAlertPlayer " , 3 , % player );
}
function CombatConGame :: DMAlertPlayer ( % game , % count , % player )
{
if ( % count > 1 )
% player . alertThread = % game . schedule ( 1000 , " DMAlertPlayer " , % count - 1 , % player );
else
% player . alertThread = % game . schedule ( 5000 , " MissionAreaDamage " , % player );
}
function CombatConGame :: MissionAreaDamage ( % game , % player )
{
if ( % player . getState () ! $ = " Dead " ) {
% player . setDamageFlash ( 1.5 );
% prevHurt = % player . getDamageLevel ();
% player . scriptkill ( $DamageType :: OutOfBounds );
% player . alertThread = % game . schedule ( 1000 , " MissionAreaDamage " , % player );
}
}
function CombatConGame :: vehicleDestroyed ( % game , % vehicle , % destroyer ){
% data = % vehicle . getDataBlock ();
% vehicleType = getTaggedString ( % data . targetTypeTag );
if ( % vehicleType ! $ = " MPB " )
% vehicleType = strlwr ( % vehicleType );
% enemyTeam = ( % destroyer . team == 1 ) ? 2 : 1 ;
% scorer = 0 ;
% multiplier = 3 ;
% shouldshare = 0 ;
% passengers = 0 ;
for ( % i = 0 ; % i < % data . numMountPoints ; % i ++ )
if ( % vehicle . getMountNodeObject ( % i ))
% passengers ++ ;
if ( % destroyer . client ){
% destroyer = % destroyer . client ;
% scorer = % destroyer ;
if ( % vehicle . lastDamageType == $DamageType :: Mine )
% multiplier = 1 ;
}
else if ( % destroyer . getClassName () $ = " Turret " ){
if ( % destroyer . getControllingClient ()){
% destroyer = % destroyer . getControllingClient ();
% scorer = % destroyer ;
if ( % destroyer . vehicleMounted ){
if ( % destroyer . vehicleMounted . getMountNodeObject ( 0 )){
% driver = % destroyer . vehicleMounted . getMountNodeObject ( 0 );
% sharer = % driver . client ;
% shouldshare = 1 ;
}
% multiplier = 2 ;
}
}
else {
% destroyerName = " A turret " ;
% multiplier = 0 ;
}
}
else if ( % destroyer . getDataBlock () . catagory $ = " Vehicles " ){
if ( % destroyer . getMountNodeObject ( 0 )){
% destroyer = % destroyer . getMountNodeObject ( 0 ) . client ;
% scorer = % destroyer ;
}
% multiplier = 2 ;
}
else
return ;
if ( % destroyerName $ = " " )
% destroyerName = % destroyer . name ;
if ( % vehicle . team == % destroyer . team ){
% pref = ( % vehicleType $ = " Assault Tank " ) ? " an " : " a " ;
messageAll ( 'msgVehicleTeamDestroy' , '\c0%1 TEAMKILLED %3 %2!' , % destroyerName , % vehicleType , % pref );
}
2013-03-31 16:54:31 +00:00
else if ( % destroyerName ! $ = " " ) {
2013-02-01 20:45:22 +00:00
messageTeamExcept ( % destroyer , 'msgVehicleDestroy' , '\c0%1 destroyed an enemy %2.' , % destroyerName , % vehicleType );
messageTeam ( % enemyTeam , 'msgVehicleDestroy' , '\c0%1 destroyed your team\'s %2.' , % destroyerName , % vehicleType );
if ( % scorer ){
% value = % game . awardScoreVehicleDestroyed ( % scorer , % vehicleType , % multiplier , % passengers );
if ( % shouldshare == 1 )
% game . awardScoreVehicleDestroyed ( % sharer , % vehicleType , ( % multiplier / 2 ), % passengers );
% game . shareScore ( % value );
}
}
}
function CombatConGame :: awardScoreVehicleDestroyed ( % game , % client , % vehicleType , % mult , % passengers )
{
if ( isDemo ())
return 0 ;
if ( % vehicleType $ = " Interceptor " )
% base = % game . SCORE_PER_DESTROY_SHRIKE ;
else if ( % vehicleType $ = " Fighter " )
% base = % game . SCORE_PER_DESTROY_STRIKEFIGHTER ;
else if ( % vehicleType $ = " Assault Chopper " )
% base = % game . SCORE_PER_DESTROY_HELICOPTER ;
else if ( % vehicleType $ = " AWACS " )
% base = % game . SCORE_PER_DESTROY_AWACS ;
else if ( % vehicleType $ = " Bomber " )
% base = % game . SCORE_PER_DESTROY_BOMBER ;
else if ( % vehicleType $ = " Gunship " )
% base = % game . SCORE_PER_DESTROY_GUNSHIP ;
else if ( % vehicleType $ = " Transport Chopper " )
% base = % game . SCORE_PER_DESTROY_HEAVYHELICOPTER ;
else if ( % vehicleType $ = " Heavy Transport " )
% base = % game . SCORE_PER_DESTROY_TRANSPORT ;
else if ( % vehicleType $ = " Grav Cycle " )
% base = % game . SCORE_PER_DESTROY_WILDCAT ;
else if ( % vehicleType $ = " Light Tank " )
% base = % game . SCORE_PER_DESTROY_TANK ;
else if ( % vehicleType $ = " Assault Tank " )
% base = % game . SCORE_PER_DESTROY_HEAVYTANK ;
else if ( % vehicleType $ = " chaingun tank " )
% base = % game . SCORE_PER_DESTROY_CGTANK ;
else if ( % vehicleType $ = " APC " )
% base = % game . SCORE_PER_DESTROY_FFTRANSPORT ;
else if ( % vehicleType $ = " Heavy Artillery " )
% base = % game . SCORE_PER_DESTROY_ARTILLERY ;
else if ( % vehicleType $ = " MPB " )
% base = % game . SCORE_PER_DESTROY_MPB ;
else if ( % vehicleType $ = " Boat " )
% base = % game . SCORE_PER_DESTROY_TRANSBOAT ;
else if ( % vehicleType $ = " Submarine " )
% base = % game . SCORE_PER_DESTROY_SUB ;
else if ( % vehicleType $ = " GunBoat " )
% base = % game . SCORE_PER_DESTROY_BOAT ;
% total = ( % base * % mult ) + ( % passengers * % game . SCORE_PER_PASSENGER );
% client . vehicleScore += % total ;
messageClient ( % client , 'msgVehicleScore' , '\c0You received a %1 point bonus for destroying an enemy %2.' , % total , % vehicleType );
% game . recalcScore ( % client );
return % total ;
}
function CombatConGame :: shareScore ( % game , % client , % amount )
{
if ( isDemo ())
return 0 ;
//error("share score of"SPC %amount SPC "from client:" SPC %client);
// all of the player in the bomber and tank share the points
// gained from any of the others
% vehicle = % client . vehicleMounted ;
if ( !% vehicle )
return 0 ;
% vehicleType = getTaggedString ( % vehicle . getDataBlock () . targetTypeTag );
if ( % vehicleType $ = " Bomber " || % vehicleType $ = " Assault Tank " )
{
for ( % i = 0 ; % i < % vehicle . getDataBlock () . numMountPoints ; % i ++ )
{
% occupant = % vehicle . getMountNodeObject ( % i );
if ( % occupant )
{
% occCl = % occupant . client ;
if ( % occCl != % client && % occCl . team == % client . team )
{
// the vehicle has a valid teammate at this node
// share the score with them
% occCl . vehicleBonus += % amount ;
% game . recalcScore ( % occCl );
}
}
}
}
}
function CombatConGame :: awardScoreTurretKill ( % game , % victimID , % implement )
{
if (( % killer = % implement . getControllingClient ()) != 0 ) //award whoever might be controlling the turret
{
if ( % killer == % victimID )
% game . awardScoreSuicide ( % victimID );
else if ( % killer . team == % victimID . team ) //player controlling a turret killed a teammate
{
% killer . teamKills ++ ;
% game . awardScoreTurretTeamKill ( % victimID , % killer );
% game . awardScoreDeath ( % victimID );
}
else
{
% killer . mannedturretKills ++ ;
% game . recalcScore ( % killer );
% game . awardScoreDeath ( % victimID );
}
}
else if (( % killer = % implement . owner ) != 0 ) //if it isn't controlled, award score to whoever deployed it
{
if ( % killer . team == % victimID . team )
{
% game . awardScoreDeath ( % victimID );
}
else
{
% killer . turretKills ++ ;
% game . recalcScore ( % killer );
% game . awardScoreDeath ( % victimID );
}
}
//default is, no one was controlling it, no one owned it. No score given.
}
function CombatConGame :: testKill ( % game , % victimID , % killerID )
{
return (( % killerID != 0 ) && ( % victimID . team != % killerID . team ));
}
function CombatConGame :: awardScoreKill ( % game , % killerID )
{
% killerID . kills ++ ;
% game . recalcScore ( % killerID );
return % game . SCORE_PER_KILL ;
}
};