<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bf2tech.uturista.pt/index.php?action=history&amp;feed=atom&amp;title=Scripts%3AThreatAndWorth</id>
	<title>Scripts:ThreatAndWorth - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://bf2tech.uturista.pt/index.php?action=history&amp;feed=atom&amp;title=Scripts%3AThreatAndWorth"/>
	<link rel="alternate" type="text/html" href="https://bf2tech.uturista.pt/index.php?title=Scripts:ThreatAndWorth&amp;action=history"/>
	<updated>2026-08-06T01:15:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://bf2tech.uturista.pt/index.php?title=Scripts:ThreatAndWorth&amp;diff=119&amp;oldid=prev</id>
		<title>Pireax: Created page with &quot;__TOC__ == Description  ==  ; Module : &lt;code&gt;ThreatAndWorth.py&lt;/code&gt; ; Author : SHAnders ; Version : 1.01  Server side only admin script or mod addon, you deside the usage!...&quot;</title>
		<link rel="alternate" type="text/html" href="https://bf2tech.uturista.pt/index.php?title=Scripts:ThreatAndWorth&amp;diff=119&amp;oldid=prev"/>
		<updated>2018-06-22T15:33:40Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__TOC__ == Description  ==  ; Module : &amp;lt;code&amp;gt;ThreatAndWorth.py&amp;lt;/code&amp;gt; ; Author : SHAnders ; Version : 1.01  Server side only admin script or mod addon, you deside the usage!...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
== Description  ==&lt;br /&gt;
&lt;br /&gt;
; Module&lt;br /&gt;
: &amp;lt;code&amp;gt;ThreatAndWorth.py&amp;lt;/code&amp;gt;&lt;br /&gt;
; Author&lt;br /&gt;
: SHAnders&lt;br /&gt;
; Version&lt;br /&gt;
: 1.01&lt;br /&gt;
&lt;br /&gt;
Server side only admin script or mod addon, you deside the usage!&lt;br /&gt;
&lt;br /&gt;
== Features  ==&lt;br /&gt;
&lt;br /&gt;
=== Worth  ===&lt;br /&gt;
&lt;br /&gt;
This script will reward player kills based upon a worth schema. Each players will be assigned a &amp;#039;worth&amp;#039; when they get killed or kill. If victim worth &amp;gt; attacker worth, the attacker is assigned a bonus. Worth is calculated by vehicle, and players position within it plus an addition if player is squadleader or commander, snipers are worth only to other snipers.&lt;br /&gt;
&lt;br /&gt;
=== Threat  ===&lt;br /&gt;
&lt;br /&gt;
This script implements threat rating. The lower the attacker threat raking and the higher the victim threat rating, the higher the bonus and vice versa. Threat rating is based uppon a calculation of a player kills, deaths and scores compared to the average player in the game. Threat rating can be disabled by setting: &amp;lt;code&amp;gt;USE_THREAT_RATING = False&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Survival  ===&lt;br /&gt;
&lt;br /&gt;
At the end of the game players will be rewarded upon their survival rating. The more enemies you kill and the less you get killed, the higher the bonus.&lt;br /&gt;
&lt;br /&gt;
Survivalrating can be disabled by setting : &amp;lt;code&amp;gt;USE_SURVIVAL_RATING = False&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commander  ===&lt;br /&gt;
&lt;br /&gt;
To please a few people out there it is now possible to disable the commander in this script.&lt;br /&gt;
&lt;br /&gt;
Commander can be disabled by setting: &amp;lt;code&amp;gt;DISABLE_COMMANDER = True&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation  ==&lt;br /&gt;
&lt;br /&gt;
Installation as Admin script -- not a mod, adds scoring changes to all games on server:&lt;br /&gt;
&lt;br /&gt;
# Save this script as &amp;lt;code&amp;gt;ThreatAndWorth.py&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;admin/standard_admin&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
# Add the lines &amp;lt;code&amp;gt;import ThreatAndWorth&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ThreatAndWorth.init()&amp;lt;/code&amp;gt; to the file &amp;lt;code&amp;gt;admin/standard_admin/__init__.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Installation as Mod addon -- adds scoring changes only to your mod:&lt;br /&gt;
&lt;br /&gt;
# Save this script as &amp;lt;code&amp;gt;ThreatAndWorth.py&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;mods/&amp;lt;mod_lib&amp;gt;/python/game&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
# Add the lines &amp;lt;code&amp;gt;import ThreatAndWorth&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ThreatAndWorth.init()&amp;lt;/code&amp;gt; to the file &amp;lt;code&amp;gt;mods/&amp;lt;mod_lib&amp;gt;/python/game/__init__.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== TODO:  ==&lt;br /&gt;
&lt;br /&gt;
; Team score&lt;br /&gt;
: Additional points for actions made within 30-50 feet of a commander/squadleader attack/defend/fix/blowup/asembly order&lt;br /&gt;
&lt;br /&gt;
== Thanks To  ==&lt;br /&gt;
&lt;br /&gt;
Battlefield.no for inspiration from their pingkick.py script &lt;br /&gt;
&lt;br /&gt;
== The Code  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # ------------------------------------------------------------------------&lt;br /&gt;
# Module: ThreatAndWorth.py&lt;br /&gt;
# Author: SHAnders&lt;br /&gt;
#&lt;br /&gt;
# Version 1.01&lt;br /&gt;
# Changes&lt;br /&gt;
# 1.0 -&amp;gt; 1.01&lt;br /&gt;
#    Updated the messagetimer to only start once&lt;br /&gt;
#&lt;br /&gt;
# Description:&lt;br /&gt;
#   Server side only admin script or mod addon, you deside the usage !&lt;br /&gt;
#&lt;br /&gt;
#   This script will reward player kills based uppon a worthschema&lt;br /&gt;
#   Each players will be assigned a &amp;#039;worth&amp;#039; when they get killed or kill&lt;br /&gt;
#   If victim worth &amp;gt; attacker worth, the attacker is assigned a bonus.&lt;br /&gt;
#   Worth is calculated by vehicle, and players position within it plus&lt;br /&gt;
#   an addition if player is squadleader or commander, snipers are worth only to other snipers.&lt;br /&gt;
#&lt;br /&gt;
#   This script implement threat rating. The lower the attacker threat raking&lt;br /&gt;
#   and the higher the victim threat rating, the higher the bonus and vice versa.&lt;br /&gt;
#   Threat rating is based uppon a calculation of a player kills, deaths &amp;amp; scores&lt;br /&gt;
#   compared to the average player in the game.&lt;br /&gt;
#&lt;br /&gt;
#   At the end of the game players will be rewarded uppon their survival rating.&lt;br /&gt;
#   The more enemies you kill and the less you get killed, the higher the bonus.&lt;br /&gt;
#&lt;br /&gt;
#   To please a few people out there it is now posible to disable the commander in this script.&lt;br /&gt;
#&lt;br /&gt;
#   The scoring system provided by ThreatAndWorth refines the idear and system&lt;br /&gt;
#   implemted by the earlier scoringBonuses v1.0&lt;br /&gt;
#   ThreatAndWorth therfor replaces the scoringBonuses script.&lt;br /&gt;
#&lt;br /&gt;
# Requirements:&lt;br /&gt;
#   None.&lt;br /&gt;
#&lt;br /&gt;
# Installation as Admin script -- Not a mod, adds scoring changes to all games on server:&lt;br /&gt;
#   1: Save this script as &amp;#039;ThreatAndWorth.py&amp;#039; in your &amp;lt;bf2&amp;gt;/admin/standard_admin directory.&lt;br /&gt;
#   2: Add the lines &amp;#039;import ThreatAndWorth&amp;#039; and &amp;#039;ThreatAndWorth.init()&amp;#039; to the file&lt;br /&gt;
#      &amp;#039;&amp;lt;bf2&amp;gt;/admin/standard_admin/__init__.py&amp;#039;.&lt;br /&gt;
#&lt;br /&gt;
# Installation as Mod addon -- adds scoring changes only to your mod:&lt;br /&gt;
#   1: Save this script as &amp;#039;ThreatAndWorth.py&amp;#039; in your &amp;lt;bf2&amp;gt;/mods/&amp;lt;mod_lib&amp;gt;/python/game directory.&lt;br /&gt;
#   2: Add the lines &amp;#039;import ThreatAndWorth&amp;#039; and &amp;#039;ThreatAndWorth.init()&amp;#039; to the file&lt;br /&gt;
#      &amp;#039;&amp;lt;bf2&amp;gt;/mods/&amp;lt;mod_lib&amp;gt;/python/game/__init__.py&amp;#039;.&lt;br /&gt;
#&lt;br /&gt;
# TODO:&lt;br /&gt;
#   Team score:&lt;br /&gt;
#     Additional points for actions made within 30-50 feet of a commander/squadleader&lt;br /&gt;
#     attack/defend/fix/blowup/asembly order&lt;br /&gt;
#&lt;br /&gt;
# Thanks to:&lt;br /&gt;
#   Battlefield.no for inspiration from their pingkick.py script&lt;br /&gt;
#&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import host&lt;br /&gt;
import bf2&lt;br /&gt;
from bf2.stats.constants import *&lt;br /&gt;
from bf2 import g_debug&lt;br /&gt;
from bf2.stats.stats import onGameStatusChanged&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Constants&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
WORTHSCHEMA = { VEHICLE_TYPE_ARMOR : [ 6, 3, 1, 1, 1, 1, 1, 1 ],&lt;br /&gt;
        VEHICLE_TYPE_AVIATOR : [ 8, 3, 1, 1, 1, 1, 1, 1 ],&lt;br /&gt;
        VEHICLE_TYPE_AIRDEFENSE    : [ 1 ],&lt;br /&gt;
        VEHICLE_TYPE_HELICOPTER    : [ 6, 3, 3, 1, 1, 1, 1, 1 ],&lt;br /&gt;
        VEHICLE_TYPE_TRANSPORT    : [ 3, 3, 1, 1, 1, 1, 1, 1 ],&lt;br /&gt;
        VEHICLE_TYPE_ARTILLERY    : [ 1 ],&lt;br /&gt;
        VEHICLE_TYPE_GRNDDEFENSE : [ 1 ],&lt;br /&gt;
        VEHICLE_TYPE_PARACHUTE : [ 1 ],&lt;br /&gt;
        VEHICLE_TYPE_SOLDIER : [ 0 ] } # index 0 is allways used for victim, 0-7 are all used for attacker&lt;br /&gt;
&lt;br /&gt;
# Aditional worth, only the greatest applies&lt;br /&gt;
VICTIM_SNIPER = 2             # Only applies when attacker is sniper&lt;br /&gt;
VICTIM_SQUADLEADER = 4        # Killing a squadleader in a jet gives good points, But why would he/she be there anyway ... squad members cant spawn there?&lt;br /&gt;
VICTIM_COMMANDER = 6          # Killing a commander in a jet gives good points, But why would he/she be there anyway ... should he/she not bee doing something else?&lt;br /&gt;
&lt;br /&gt;
DEFAULT_VICTIM_WORTH = 1      # Victim will allways be worth this + whats in the WORTHSCHEMA&lt;br /&gt;
USE_THREAT_RATING = True      # Low threat rated players get more points for kills on higher threat rated players [True, False]&lt;br /&gt;
PUBLIC_SCORES = 1             # Score earnings will be made public to the following: [0 = None, 1 = Team, 2 = All]&lt;br /&gt;
USE_SURVIVAL_RATING = True    # At end game players with high survivalrating will be rewarded with (SurvivalRating * (kills - deaths) / restraint) [True, False]&lt;br /&gt;
SURVIVAL_RATING_RESTRAINT = 3 # The higher the number, the lower the bonus (without it the bonus can get very high) [1..*]&lt;br /&gt;
DISABLE_COMMANDER = False     # Not all like the commander, setting this to True will disable this posibility  [True, False]&lt;br /&gt;
&lt;br /&gt;
WELCOME_MSG = &amp;quot;Server is using ThreatAndWorth script v1.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Variables&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
MsgTimer = None # Welcome msg Timer&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Init&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def init():&lt;br /&gt;
   host.unregisterGameStatusHandler(onGameStatusChanged) # We need to unregister this to change endscores&lt;br /&gt;
   host.registerGameStatusHandler(onGameStatusChangedThreatAndWorth)&lt;br /&gt;
   host.registerGameStatusHandler(onGameStatusChanged) # We need to register it again after our own handler to make the game work :)&lt;br /&gt;
   MsgTimer = bf2.Timer(onMsgTimer,10,1)&lt;br /&gt;
   if g_debug: print &amp;quot;ThreatAndWort init&amp;quot;&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# onGameStatusChangedThreatAndWorth&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def onGameStatusChangedThreatAndWorth(status):&lt;br /&gt;
   if status == bf2.GameStatus.Playing:&lt;br /&gt;
      host.registerHandler(&amp;#039;PlayerKilled&amp;#039;, onPlayerKilled)&lt;br /&gt;
      if DISABLE_COMMANDER:&lt;br /&gt;
         host.sh_setEnableCommander(0)&lt;br /&gt;
&lt;br /&gt;
   elif status == bf2.GameStatus.EndGame:&lt;br /&gt;
      if USE_SURVIVAL_RATING:&lt;br /&gt;
         CalculateSurvivalRatingBonus()&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# onPlayerKilled&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def onPlayerKilled(victim, attacker, weapon, assists, object):&lt;br /&gt;
   victimVehicle = victim.getVehicle()&lt;br /&gt;
  &lt;br /&gt;
   # killed by remote controlled vehicle, no score awarded in this game&lt;br /&gt;
   if victimVehicle and victimVehicle.getIsRemoteControlled():&lt;br /&gt;
      pass&lt;br /&gt;
     &lt;br /&gt;
   # no attacker, killed by object&lt;br /&gt;
   elif attacker == None:&lt;br /&gt;
      pass&lt;br /&gt;
     &lt;br /&gt;
   # killed by self&lt;br /&gt;
   elif attacker == victim:&lt;br /&gt;
      pass&lt;br /&gt;
     &lt;br /&gt;
   # killed by own team&lt;br /&gt;
   elif attacker.getTeam() == victim.getTeam():&lt;br /&gt;
      pass&lt;br /&gt;
&lt;br /&gt;
   # killed by enemy&lt;br /&gt;
   else:&lt;br /&gt;
      CalculateThreatAndWorth(attacker, victim)&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# addBonus&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def addBonus(player, points):&lt;br /&gt;
   # commander doesnt get bonus for regular actions, only for pure commander tasks.&lt;br /&gt;
   if not player.isCommander():&lt;br /&gt;
      player.score.score += points&lt;br /&gt;
     &lt;br /&gt;
   # commander score&lt;br /&gt;
   commander = bf2.playerManager.getCommander(player.getTeam())&lt;br /&gt;
   if commander != None and commander.isValid() and player != commander and points &amp;gt; 0:&lt;br /&gt;
      preScore = commander.score.score&lt;br /&gt;
      numPlayers = bf2.playerManager.getNumberOfAlivePlayersInTeam(commander.getTeam())&lt;br /&gt;
      if numPlayers &amp;gt; 0:&lt;br /&gt;
         commander.score.score += float(points) / numPlayers&lt;br /&gt;
         scoreGotten = commander.score.score - preScore&lt;br /&gt;
         if scoreGotten &amp;gt; 0:&lt;br /&gt;
            commander.score.cmdScore += scoreGotten&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Callback function for timer, that delays a message at round start:&lt;br /&gt;
# I hope the fellows at Battlefield.no dont mind me using this !&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def onMsgTimer(data):&lt;br /&gt;
   global msgtimer&lt;br /&gt;
   sendMsgAll( WELCOME_MSG )&lt;br /&gt;
   msgtimer.destroy()&lt;br /&gt;
   msgtimer = None&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Send message to all on server&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def sendMsgAll(msg):&lt;br /&gt;
   host.rcon_invoke(&amp;quot;game.sayAll \&amp;quot;&amp;quot; + str(msg) + &amp;quot;\&amp;quot;&amp;quot;)&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Send message to all on a team&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def sendMsgTeam(msg, team):&lt;br /&gt;
   host.rcon_invoke(&amp;quot;game.sayTeam &amp;quot; + str(team) + &amp;quot; \&amp;quot;&amp;quot; + str(msg) + &amp;quot;\&amp;quot;&amp;quot;)&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Calculate survival endgame points&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def CalculateSurvivalRatingBonus():&lt;br /&gt;
   playerArgs = bf2.playerManager.getPlayers()&lt;br /&gt;
   for p in playerArgs:&lt;br /&gt;
      survivalRating = GetPlayerSurvivalRating(p)&lt;br /&gt;
      if survivalRating &amp;gt; 0:&lt;br /&gt;
         points = round((p.score.kills - p.score.deaths) * survivalRating / SURVIVAL_RATING_RESTRAINT, 0)&lt;br /&gt;
         addBonus(p, int(points))&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Get a players survival rating&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def GetPlayerSurvivalRating( player ):&lt;br /&gt;
   kills = float(player.score.kills + 1)&lt;br /&gt;
   deaths = float(player.score.deaths + 1)&lt;br /&gt;
   survivalRating = kills / deaths&lt;br /&gt;
   return round(survivalRating, 2)&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Calculate threat and worth points&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def CalculateThreatAndWorth(attacker, victim):&lt;br /&gt;
   victimVehicle = victim.getVehicle()&lt;br /&gt;
   victimRootVehicle = getRootParent(victimVehicle)&lt;br /&gt;
   attackerVehicle = attacker.getVehicle()&lt;br /&gt;
   attackerRootVehicle = getRootParent(attackerVehicle)&lt;br /&gt;
&lt;br /&gt;
   points = 0&lt;br /&gt;
&lt;br /&gt;
   attackerWorth = GetPlayerWorth( attacker )&lt;br /&gt;
   victimWorth = GetPlayerWorth( victim ) + GetAdditionalVictimWorth(attacker, victim)&lt;br /&gt;
&lt;br /&gt;
   tmpPoints = victimWorth - attackerWorth&lt;br /&gt;
   if tmpPoints &amp;gt; 0:&lt;br /&gt;
      if USE_THREAT_RATING:&lt;br /&gt;
         attackerThreatRating = GetPlayerThreatRating( attacker )&lt;br /&gt;
         victimThreatRating = GetPlayerThreatRating( victim )&lt;br /&gt;
         threatRatingFactor = round((victimThreatRating / attackerThreatRating),3)&lt;br /&gt;
         if threatRatingFactor &amp;lt; 0.125:&lt;br /&gt;
            threatRatingFactor = 0&lt;br /&gt;
         if threatRatingFactor &amp;lt; 0.25:&lt;br /&gt;
            threatRatingFactor = 0.125&lt;br /&gt;
         elif threatRatingFactor &amp;lt; 0.5:&lt;br /&gt;
            threatRatingFactor = 0.25&lt;br /&gt;
         elif threatRatingFactor &amp;lt; 0.75:&lt;br /&gt;
            threatRatingFactor = 0.5&lt;br /&gt;
         elif threatRatingFactor &amp;lt; 1.5:&lt;br /&gt;
            threatRatingFactor = 1&lt;br /&gt;
         elif threatRatingFactor &amp;lt; 2:&lt;br /&gt;
            threatRatingFactor = 1.5&lt;br /&gt;
         else:&lt;br /&gt;
            threatRatingFactor = 2&lt;br /&gt;
         tmpPoints = int(round( threatRatingFactor * tmpPoints,0))&lt;br /&gt;
      points = tmpPoints&lt;br /&gt;
      if points &amp;gt; 0:&lt;br /&gt;
         addBonus(attacker, points)&lt;br /&gt;
         if PUBLIC_SCORES == 2:&lt;br /&gt;
            sendMsgAll( attacker.getName() + &amp;quot; earn points: &amp;quot; + str(points))&lt;br /&gt;
         elif PUBLIC_SCORES == 1:&lt;br /&gt;
            sendMsgTeam( attacker.getName() + &amp;quot; earn points: &amp;quot; + str(points), attacker.getTeam())&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Calculate additional victim worth&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def GetAdditionalVictimWorth(attacker, victim):&lt;br /&gt;
   attackerKitType = getKitType(attacker.getKit().templateName)&lt;br /&gt;
   attackerVehicle = attacker.getVehicle()&lt;br /&gt;
   attackerVehicleType = getVehicleType(attackerVehicle.templateName)&lt;br /&gt;
&lt;br /&gt;
   victimKitType = getKitType(victim.getKit().templateName)&lt;br /&gt;
   victimVehicle = victim.getVehicle()&lt;br /&gt;
   victimVehicleType = getVehicleType(victimVehicle.templateName)&lt;br /&gt;
&lt;br /&gt;
   attackerTeamMsg = &amp;quot;&amp;quot;&lt;br /&gt;
   victimTeamMsg = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   worth = DEFAULT_VICTIM_WORTH&lt;br /&gt;
&lt;br /&gt;
   # SNIPER&lt;br /&gt;
   if attackerVehicleType == VEHICLE_TYPE_SOLDIER:&lt;br /&gt;
      if victimVehicleType == VEHICLE_TYPE_SOLDIER:&lt;br /&gt;
         if attackerKitType == KIT_TYPE_SNIPER and victimKitType == KIT_TYPE_SNIPER:&lt;br /&gt;
            worth += VICTIM_SNIPER&lt;br /&gt;
            attackerTeamMsg = attacker.getName() + &amp;quot; has eliminated enemy sniper&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   # SQUADLEADER&lt;br /&gt;
   if victim.isSquadLeader():&lt;br /&gt;
      worth += VICTIM_SQUADLEADER&lt;br /&gt;
      attackerTeamMsg = attacker.getName() + &amp;quot; has eliminated a enemy squadleader &amp;quot; + victim.getName()&lt;br /&gt;
&lt;br /&gt;
   # COMMANDER&lt;br /&gt;
   if victim.isCommander():&lt;br /&gt;
      worth += VICTIM_COMMANDER&lt;br /&gt;
      attackerTeamMsg = attacker.getName() + &amp;quot; has eliminated enemy commander &amp;quot; + victim.getName()&lt;br /&gt;
      victimTeamMsg = &amp;quot;You commander has been eliminated&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   if attackerTeamMsg != &amp;quot;&amp;quot;:&lt;br /&gt;
      sendMsgTeam(attackerTeamMsg, attacker.getTeam())&lt;br /&gt;
&lt;br /&gt;
   if victimTeamMsg != &amp;quot;&amp;quot;:&lt;br /&gt;
      sendMsgTeam(victimTeamMsg, victim.getTeam())&lt;br /&gt;
&lt;br /&gt;
   return worth&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Calculate a players worth&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def GetPlayerWorth( player ):&lt;br /&gt;
   worth = -1&lt;br /&gt;
   vehicle = player.getVehicle()&lt;br /&gt;
   rootVehicle = getRootParent(vehicle)&lt;br /&gt;
   vehicleType = getVehicleType(rootVehicle.templateName)&lt;br /&gt;
   args = WORTHSCHEMA[vehicleType]&lt;br /&gt;
   index = GetPlayerIndexInVehicle( player, rootVehicle )&lt;br /&gt;
   if index &amp;gt; -1:&lt;br /&gt;
      worth = args[index]&lt;br /&gt;
   return worth&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Get a players index inside a vehicle&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def GetPlayerIndexInVehicle( player, vehicle ):&lt;br /&gt;
   # This dosn&amp;#039;t work on dead player/vehicles ... it allways return 0&lt;br /&gt;
&lt;br /&gt;
   playerArgs = vehicle.getOccupyingPlayers()&lt;br /&gt;
   index = -1&lt;br /&gt;
   found = False&lt;br /&gt;
   while index &amp;lt; len(playerArgs) and not found:&lt;br /&gt;
      index += 1&lt;br /&gt;
      if playerArgs[index] == player:&lt;br /&gt;
         found = True        &lt;br /&gt;
   return index&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
# Get a players threat rating&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
def GetPlayerThreatRating( player ):&lt;br /&gt;
   score = 0&lt;br /&gt;
   kills = 0&lt;br /&gt;
   deaths = 0&lt;br /&gt;
   playerArgs = bf2.playerManager.getPlayers()&lt;br /&gt;
   for p in playerArgs:&lt;br /&gt;
      score += p.score.score&lt;br /&gt;
      kills += p.score.kills&lt;br /&gt;
      deaths += p.score.deaths&lt;br /&gt;
&lt;br /&gt;
   avgScore = float(score)/len(playerArgs)&lt;br /&gt;
   avgKills = float(kills)/len(playerArgs)&lt;br /&gt;
   avgDeaths = float(deaths)/len(playerArgs)&lt;br /&gt;
&lt;br /&gt;
   if player.score.score &amp;lt;= 0:&lt;br /&gt;
      scoreFactor = 1/avgScore&lt;br /&gt;
   else:&lt;br /&gt;
      scoreFactor = float(player.score.score)/avgScore&lt;br /&gt;
&lt;br /&gt;
   if player.score.kills &amp;lt;= 0:&lt;br /&gt;
      killsFactor = 1/avgKills&lt;br /&gt;
   else:&lt;br /&gt;
      killsFactor = float(player.score.kills)/avgKills&lt;br /&gt;
&lt;br /&gt;
   if player.score.deaths &amp;lt;= 0:&lt;br /&gt;
      deathsFactor = avgDeaths/1&lt;br /&gt;
   else:&lt;br /&gt;
      deathsFactor = avgDeaths/float(player.score.deaths)&lt;br /&gt;
&lt;br /&gt;
   threatRating = round(killsFactor * deathsFactor * scoreFactor,3)&lt;br /&gt;
&lt;br /&gt;
   return threatRating&lt;br /&gt;
# ------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pireax</name></author>
	</entry>
</feed>