Итак, что именно считает скрипт по ссылке выше. Считает он относительную экономическую эффективность войск друг относительно друга.
По просьбам трудящихся будем рассматривать два курса обмена ресурсов: внутрирасовый (4:2:1 для терран, выражение в металле; 0.(6):4:1 для ксерджей, выражение в минералах) и средневзвешенный для обеих рас (2.9:2.7:1, выражение в металле). Для расчёта взвешенного курса предположим, что терраны и ксерджи добывают ресурсы в объёмах, пропорциональных своей численности. При соотношении количества игроков 2:1 мы получаем среднюю скорость добычи ресурсов на игрока ({4:2:1}*2+{0.(6):4:1}*1)/(2+1) ≈ {2.9:2.7:1}.
Для наглядности, все цены переведём в газ.
E(X, Y) - Разрушительность: количество ресурсов, уничтожаемое единицей X в бою против единиц Y
, отнесённое к стоимости единицы X. Чем она выше, тем лучше единица X справляется с единицами Y.
V(X, Y) - Уязвимость: количество ресурсов, теряемое единицей X в бою против единиц Y
, отнесённое к стоимости единицы Y. Уязвимость, по сути, та же разрушительность, но рассматриваемая с другой стороны. Чем выше уязвимость, тем хуже рассматриваемой единице в стычке с противниками типа Y.
V(X, Y) = E(Y, X).
• если сила выстрела D(X) больше, чем сумма брони и щита цели, то E(X, Y) = C(X)*R(X, Y)/C(Y), где C — стоимость единицы, R(X, Y) — скорострел X по Y;
¤ создаются два флота равной стоимости из N(X) единиц типа X и N(Y) единиц типа Y;
¤ рассчитывается поглощение залпа щитом: S(Y)*min(H(X), N(Y)) - в ситуации, когда число выстрелов меньше, чем число противников, максимальное количество единиц, чей щит поглощает урон, равно числу выстрелов;
¤ разрушительность рассчитывается как отношение общего урона к общей броне противника: E(X, Y) = (D(X)*H(X)-S(Y)*min(H(X), N(Y)))/(N(Y)*A(Y)).
<?php
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$Units = array(
201 => array( 'name' => "Викинг", 'metal' => 1500, 'mineral' => 500, 'vespen' => 50, 'damage' => 37, 'shield' => 20, 'race' => 0 ),
204 => array( 'name' => "Истребитель", 'metal' => 3000, 'mineral' => 1000, 'vespen' => 0, 'damage' => 50, 'shield' => 10, 'race' => 0 ),
205 => array( 'name' => "Стелс", 'metal' => 6000, 'mineral' => 4000, 'vespen' => 0, 'damage' => 150.0, 'shield' => 25, 'race' => 0 ),
206 => array( 'name' => "Крейсер", 'metal' => 20000, 'mineral' => 7000, 'vespen' => 2000, 'damage' => 400, 'shield' => 50, 'race' => 0 ),
207 => array( 'name' => "Линкор", 'metal' => 45000, 'mineral' => 15000, 'vespen' => 0, 'damage' => 1000, 'shield' => 200, 'race' => 0 ),
211 => array( 'name' => "Бомбардировщик", 'metal' => 50000, 'mineral' => 25000, 'vespen' => 15000, 'damage' => 1000, 'shield' => 500, 'race' => 0 ),
213 => array( 'name' => "Уничтожитель", 'metal' => 60000, 'mineral' => 50000, 'vespen' => 15000, 'damage' => 2000, 'shield' => 500, 'race' => 0 ),
214 => array( 'name' => "Звезда Смерти", 'metal' => 5000000, 'mineral' => 4000000, 'vespen' => 1000000, 'damage' => 200000, 'shield' => 50000, 'race' => 0 ),
2140 => array( 'name' => "Звезда Смерти (+Разрушитель)", 'metal' => 5000000, 'mineral' => 4000000, 'vespen' => 1000000, 'damage' => 200000, 'shield' => 50000, 'race' => 0, 'double_build' => 1 ),
215 => array( 'name' => "Линейный крейсер", 'metal' => 30000, 'mineral' => 40000, 'vespen' => 15000, 'damage' => 700, 'shield' => 400, 'race' => 0 ),
216 => array( 'name' => "Сверхновая Звезда", 'metal' => 20000000, 'mineral' => 15000000, 'vespen' => 5000000, 'damage' => 800000, 'shield' => 500000, 'race' => 0 ),
217 => array( 'name' => "Космический Странник", 'metal' => 7000000, 'mineral' => 4000000, 'vespen' => 4000000, 'damage' => 180000, 'shield' => 25000, 'race' => 0 ),
// 218 => array( 'name' => "Джаггернаут", 'metal' => 0, 'mineral' => 0, 'vespen' => 0, 'damage' => 0, 'shield' => 0, 'race' => 0 )
219 => array( 'name' => "Джовиан", 'metal' => 80000000, 'mineral' => 20000000, 'vespen' => 75000000, 'damage' => 5000000, 'shield' => 2000000, 'race' => 0 ),
222 => array( 'name' => "Научное судно", 'metal' => 10000, 'mineral' => 35000, 'vespen' => 20000, 'damage' => 75, 'shield' => 1000, 'race' => 0 ),
234 => array( 'name' => "Плеть", 'metal' => 50, 'mineral' => 750, 'vespen' => 1800, 'damage' => 1000, 'shield' => 0, 'race' => 1, 'double_build' => 1 ),
235 => array( 'name' => "Упячка", 'metal' => 0, 'mineral' => 3400, 'vespen' => 0, 'damage' => 90, 'shield' => 20, 'race' => 1 ),
236 => array( 'name' => "Муталиск", 'metal' => 1000, 'mineral' => 16000, 'vespen' => 500, 'damage' => 220, 'shield' => 20, 'race' => 1 ),
238 => array( 'name' => "Дредлиск", 'metal' => 5600, 'mineral' => 24400, 'vespen' => 800, 'damage' => 300, 'shield' => 30, 'race' => 1 ),
239 => array( 'name' => "Добытчик", 'metal' => 400, 'mineral' => 3400, 'vespen' => 0, 'damage' => 40, 'shield' => 5, 'race' => 1 ),
241 => array( 'name' => "Страж", 'metal' => 5000, 'mineral' => 45000, 'vespen' => 10000, 'damage' => 1400, 'shield' => 400, 'race' => 1 ),
243 => array( 'name' => "Пожиратель", 'metal' => 20000, 'mineral' => 70000, 'vespen' => 30000, 'damage' => 5000, 'shield' => 900, 'race' => 1, 'ignore_shield' => 1 ),
244 => array( 'name' => "Лекс", 'metal' => 1000000, 'mineral' => 9000000, 'vespen' => 1000000, 'damage' => 100000, 'shield' => 0, 'race' => 1 ),
245 => array( 'name' => "Панкор", 'metal' => 400000, 'mineral' => 600000, 'vespen' => 150000, 'damage' => 125, 'shield' => 3000, 'race' => 1 )
);
$Units[201]["RF"] = array( );
$Units[204]["RF"] = array( );
$Units[205]["RF"] = array( );
$Units[206]["RF"] = array( 204 => 6, 240 => 5, 242 => 5, 401 => 10 );
$Units[207]["RF"] = array( 234 => 50, 237 => 10 );
$Units[211]["RF"] = array( 237 => 50, 401 => 20, 402 => 20, 403 => 3, 405 => 3, 431 => 20, 432 => 10, 435 => 10 );
$Units[213]["RF"] = array( 201 => 10, 204 => 10, 232 => 10, 234 => 10, 235 => 10, 237 => 100, 239 => 10, 240 => 20, 242 => 20, 401 => 10, 402 => 10, 431 => 10 );
$Units[214]["RF"] = array( 201 => 400, 204 => 200, 205 => 100, 206 => 33, 207 => 30, 211 => 25, 213 => 5, 215 => 15, 222 => 25, 232 => 300, 234 => 300, 235 => 250, 236 => 36, 237 => 1000, 238 => 28, 239 => 200, 240 => 500, 241 => 20, 242 => 250, 243 => 4, 248 => 200, 250 => 200, 401 => 200, 402 => 200, 403 => 100, 404 => 50, 405 => 100, 431 => 250, 432 => 125, 433 => 80, 435 => 125 );
$Units[2140]["RF"] = array( 201 => 400, 204 => 200, 205 => 100, 206 => 33, 207 => 30, 211 => 25, 213 => 5, 215 => 15, 222 => 25, 232 => 300, 234 => 300, 235 => 250, 236 => 36, 237 => 1000, 238 => 28, 239 => 200, 240 => 500, 241 => 20, 242 => 250, 243 => 4, 248 => 200, 250 => 200, 401 => 200, 402 => 200, 403 => 100, 404 => 50, 405 => 100, 431 => 250, 432 => 125, 433 => 80, 435 => 125 );
$Units[215]["RF"] = array( 205 => 4, 206 => 4, 207 => 7, 236 => 5, 238 => 5, 240 => 5, 242 => 5 );
$Units[216]["RF"] = array( 201 => 1000, 204 => 750, 205 => 330, 206 => 120, 207 => 100, 211 => 70, 213 => 16, 215 => 35, 222 => 80, 232 => 1000, 234 => 2000, 235 => 750, 236 => 150, 237 => 2000, 238 => 135, 239 => 750, 240 => 2000, 241 => 50, 242 => 1500, 243 => 12, 245 => 2, 248 => 500, 250 => 400, 401 => 500, 402 => 500, 403 => 200, 404 => 100, 405 => 200, 406 => 2, 431 => 600, 432 => 350, 433 => 250, 435 => 400, 436 => 5 );
$Units[217]["RF"] = array( 201 => 100, 204 => 100, 205 => 25, 206 => 12, 207 => 12, 211 => 12, 213 => 4, 215 => 5, 222 => 12, 232 => 300, 234 => 300, 235 => 300, 236 => 12, 237 => 150, 238 => 10, 239 => 200, 240 => 600, 241 => 25, 242 => 350, 243 => 12, 248 => 32, 250 => 39, 401 => 80, 402 => 50, 403 => 40, 404 => 15, 405 => 30, 431 => 156, 432 => 45, 433 => 15, 435 => 32, 436 => 2 );
//$Units[218]["RF"] = array( );
$Units[219]["RF"] = array( 201 => 2500, 204 => 600, 205 => 400, 206 => 100, 207 => 90, 211 => 65, 213 => 20, 215 => 46, 222 => 70, 232 => 600, 234 => 3000, 235 => 400, 236 => 150, 237 => 1400, 238 => 136, 239 => 1300, 240 => 750, 241 => 30, 242 => 450, 243 => 20, 245 => 2, 248 => 500, 250 => 600, 401 => 333, 402 => 310, 403 => 83, 404 => 20, 405 => 200, 406 => 3, 431 => 666, 432 => 175, 433 => 76, 435 => 140, 436 => 50 );
$Units[222]["RF"] = array( );
//$Units[232]["RF"] = array( );
$Units[234]["RF"] = array( );
$Units[235]["RF"] = array( 237 => 5 );
$Units[236]["RF"] = array( 201 => 10, 211 => 3, 213 => 2, 214 => 5, 2140 => 5, 216 => 5, 234 => 3, 243 => 2, 244 => 5, 248 => 4 );
//$Units[237]["RF"] = array( );
$Units[238]["RF"] = array( 206 => 5, 207 => 4, 211 => 4, 213 => 2, 215 => 2, 218 => 3, 222 => 4, 243 => 2 );
$Units[239]["RF"] = array( );
//$Units[240]["RF"] = array( );
$Units[241]["RF"] = array( 201 => 25, 237 => 50, 240 => 10, 242 => 10, 401 => 25, 402 => 25, 403 => 10, 404 => 4, 405 => 10, 431 => 20, 432 => 5, 433 => 5, 435 => 5 );
//$Units[242]["RF"] = array( );
$Units[243]["RF"] = array( 201 => 5, 204 => 5, 232 => 50, 234 => 200, 235 => 50, 237 => 50, 240 => 50, 242 => 50 );
$Units[244]["RF"] = array( 201 => 200, 204 => 200, 205 => 20, 206 => 20, 207 => 10, 211 => 10, 213 => 5, 215 => 5, 222 => 10, 232 => 150, 234 => 500, 235 => 500, 236 => 20, 237 => 500, 238 => 20, 239 => 100, 240 => 100, 241 => 5, 242 => 100, 243 => 5, 248 => 20, 250 => 30, 401 => 500, 402 => 500, 403 => 100, 404 => 25, 405 => 100, 431 => 500, 432 => 100, 433 => 100, 435 => 100 );
$Units[245]["RF"] = array( 201 => 150, 204 => 150, 205 => 250, 206 => 120, 207 => 140, 211 => 180, 213 => 180, 214 => 200, 2140 => 200, 215 => 140, 216 => 200, 217 => 100, 218 => 140, 219 => 100, 222 => 180, 232 => 200, 234 => 150, 235 => 150, 236 => 120, 237 => 200, 238 => 140, 239 => 145, 240 => 300, 241 => 180, 242 => 200, 243 => 180, 244 => 200, 245 => 180, 248 => 200, 250 => 140, 401 => 120, 402 => 120, 403 => 120, 404 => 100, 405 => 100, 406 => 50, 407 => 50, 408 => 50, 409 => 50, 410 => 50, 431 => 102, 432 => 120, 433 => 100, 434 => 80, 435 => 100, 436 => 50 );
//$Units[248]["RF"] = array( );
//$Units[250]["RF"] = array( );
/*$Units[401]["RF"] = array( );
$Units[402]["RF"] = array( );
$Units[403]["RF"] = array( 232 => 5, 234 => 5, 235 => 5 );
$Units[404]["RF"] = array( 206 => 3, 207 => 3, 236 => 3, 238 => 3, 240 => 10 );
$Units[405]["RF"] = array( );
$Units[406]["RF"] = array( 240 => 10 );
$Units[407]["RF"] = array( );
$Units[408]["RF"] = array( );
$Units[409]["RF"] = array( );
$Units[410]["RF"] = array( 201 => 250, 204 => 125, 205 => 50, 206 => 19, 207 => 9, 211 => 7, 213 => 5, 214 => 2, 2140 => 2, 215 => 7, 216 => 7, 217 => 8, 218 => 4, 219 => 21, 222 => 12, 232 => 200, 234 => 625, 235 => 150, 236 => 30, 238 => 17, 239 => 125, 240 => 180, 241 => 10, 242 => 125, 243 => 6, 244 => 2, 245 => 3, 248 => 20, 250 => 20 );
$Units[431]["RF"] = array( );
$Units[432]["RF"] = array( );
$Units[433]["RF"] = array( );
$Units[434]["RF"] = array( 201 => 75, 204 => 50, 205 => 25, 222 => 6, 232 => 50, 234 => 300, 235 => 40, 239 => 60, 240 => 100, 242 => 60, 250 => 15 );
$Units[435]["RF"] = array( );
$Units[436]["RF"] = array( 201 => 28, 204 => 36, 205 => 28, 206 => 16, 222 => 15, 232 => 45, 234 => 39, 235 => 35, 236 => 22, 239 => 32, 240 => 48, 242 => 54, 245 => 33, 250 => 20 );*/
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$SelectedUnit = (isset($_REQUEST['unit'])&&Cost($_REQUEST['unit']))?$_REQUEST['unit']:201;
$BaseDestruct = isset($_REQUEST['thresh_base'])?$_REQUEST['thresh_base']:0.1;
$TraitThreshold = isset($_REQUEST['thresh_norm'])?$_REQUEST['thresh_norm']:0.3;
$LimitThreshold = isset($_REQUEST['thresh_limit'])?$_REQUEST['thresh_limit']:0.8;
$RawFlag = isset($_REQUEST['raw_flag'])?$_REQUEST['raw_flag']:0;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Cost($ID)
{
global $Units;
if(array_key_exists($ID, $Units))
$Unit = $Units[$ID];
else
return 0.0;
if($Units[$ID]['race'] == 0)
return round(($Units[$ID]['metal'] + 2*$Units[$ID]['mineral'] + 4*$Units[$ID]['vespen'])/($Units[$ID]['double_build']?2.0:1.0)/40, 0)*10;
else if($Units[$ID]['race'] == 1)
return round((6*$Units[$ID]['metal'] + $Units[$ID]['mineral'] + 4*$Units[$ID]['vespen'])/($Units[$ID]['double_build']?2.0:1.0)/40, 0)*10;
else
return 0.0;
}
function CostW($ID)
{
global $Units;
if(array_key_exists($ID, $Units))
$Unit = $Units[$ID];
else
return 0.0;
return round(($Units[$ID]['metal'] + 2.9/2.7*$Units[$ID]['mineral'] + 2.9*$Units[$ID]['vespen'])/($Units[$ID]['double_build']?2.0:1.0)/29, 0)*10;
}
function Armor($ID)
{
global $Units;
if(array_key_exists($ID, $Units))
$Unit = $Units[$ID];
else
return 0;
return ($Units[$ID]['metal'] + $Units[$ID]['mineral'])/10;
}
function Destructiveness($ID, $EnemyID, $Raw)
{
global $Units;
if(Cost($ID) && Cost($EnemyID))
{
$Unit = $Units[$ID];
$Enemy = $Units[$EnemyID];
}
else
return 0;
if($Unit['damage'] >= ($Enemy['armor']+$Enemy['shield']))
$D = Cost($EnemyID)/Cost($ID)*($Raw?1:RF($ID, $EnemyID));
else
{
$N_Units = 42e8/Cost($ID);
$N_Enemies = 42e8/Cost($EnemyID);
$N_Shots = $N_Units*($Raw?1:RF($ID, $EnemyID));
$N_Shields = min($N_Enemies, $N_Shots);
$Damage = $N_Shots*$Unit['damage'] - $N_Shields*$Enemy['shield']*($Unit['ignore_shield']?0:1);
$D = $Damage/($Enemy['armor']*$N_Enemies);
}
if($D < 0)
$D = 0;
return $D;
}
function Vulnerability($ID, $EnemyID, $Raw)
{
return Destructiveness($EnemyID, $ID, $Raw);
}
function DestructivenessW($ID, $EnemyID, $Raw)
{
global $Units;
if(CostW($ID) && CostW($EnemyID))
{
$Unit = $Units[$ID];
$Enemy = $Units[$EnemyID];
}
else
return 0;
if($Unit['damage'] >= ($Enemy['armor']+$Enemy['shield']))
$D = CostW($EnemyID)/CostW($ID)*($Raw?1:RF($ID, $EnemyID));
else
{
$N_Units = 42e8/CostW($ID);
$N_Enemies = 42e8/CostW($EnemyID);
$N_Shots = $N_Units*($Raw?1:RF($ID, $EnemyID));
$N_Shields = min($N_Enemies, $N_Shots);
$Damage = $N_Shots*$Unit['damage'] - $N_Shields*$Enemy['shield']*($Unit['ignore_shield']?0:1);
$D = $Damage/($Enemy['armor']*$N_Enemies);
}
if($D < 0)
$D = 0;
return $D;
}
function VulnerabilityW($ID, $EnemyID, $Raw)
{
return DestructivenessW($EnemyID, $ID, $Raw);
}
function RF($ID, $EnemyID)
{
global $Units;
if(array_key_exists('RF', $Units[$ID]))
if(array_key_exists($EnemyID, $Units[$ID]['RF']))
return $Units[$ID]['RF'][$EnemyID];
else
return 1;
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>Fleet Oracle (web version)</title>
<link href="fleet_oracle.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<pre>
<?php
foreach ($Units as $k => $v)
{
$Units[$k]['armor'] = Armor($k);
if($Units[$k]['race'] == 1)
$Units[$k]['shield'] += $Units[$k]['armor']/10;
}
//print_r($Units);
?>
</pre>
<div class="InputForm">
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="get">
<select name="unit" size="1">
<?php
foreach ($Units as $k => $v)
echo "<option value=\\"$k\\"".(($k==$SelectedUnit)?" selected=\\"selected\\"":"").">{$v['name']}</option>";
?>
</select><br />
Пороги: <input type="text" name="thresh_base" value="<?=$BaseDestruct ?>" /> <span class="ValueNorm">норма</span> <input type="text" name="thresh_norm" value="<?=$TraitThreshold ?>" /> <span class="ValueTrait">особенность</span> <input type="text" name="thresh_limit" value="<?=$LimitThreshold ?>" /> <span class="ValueLimit">предел</span><br>
<input type="checkbox" name="raw_flag" <?=$RawFlag?"checked=\\"checked\\"":"" ?>/> Отключить коррекцию скорострелом
<br><input type="submit" value="Рассчитать"/>
</form>
</div>
<div class="OutputTable">
<?php
if($SelectedUnit)
{
echo "<br/ ><center><table border=\\"1\\"><tr><td>Противник</td><td>Gas Cost</td><td>Разрушительность</td><td>Уязвимость</td><td>Weighted Gas Cost</td><td>Разрушительность</td><td>Уязвимость</td><td>Распространённость</td></tr>";
foreach ($Units as $k => $v)
{
$Dest = round(Destructiveness($SelectedUnit, $k, $RawFlag), 3);
$DestHighlight = $Dest?"ValueNorm":"ValueLimit";
if($Dest > 0 && $TraitThreshold > 0 && ($Dest > $TraitThreshold || $Dest < ($BaseDestruct*$BaseDestruct)/$TraitThreshold) )
$DestHighlight = "ValueTrait";
if($Dest > 0 && $LimitThreshold > 0 && ($Dest > $LimitThreshold || $Dest < ($BaseDestruct*$BaseDestruct)/$LimitThreshold) )
$DestHighlight = "ValueLimit";
$Vuln = round(Vulnerability($SelectedUnit, $k, $RawFlag), 3);
$VulnHighlight = $Vuln?"ValueNorm":"ValueLimit";
if($Vuln > 0 && $TraitThreshold > 0 && ($Vuln > $TraitThreshold || $Vuln < ($BaseDestruct*$BaseDestruct)/$TraitThreshold) )
$VulnHighlight = "ValueTrait";
if($Vuln > 0 && $LimitThreshold > 0 && ($Vuln > $LimitThreshold || $Vuln < ($BaseDestruct*$BaseDestruct)/$LimitThreshold) )
$VulnHighlight = "ValueLimit";
$DestW = round(DestructivenessW($SelectedUnit, $k, $RawFlag), 3);
$DestHighlightW = $DestW?"ValueNorm":"ValueLimit";
if($DestW > 0 && $TraitThreshold > 0 && ($DestW > $TraitThreshold || $DestW < ($BaseDestruct*$BaseDestruct)/$TraitThreshold) )
$DestHighlightW = "ValueTrait";
if($DestW > 0 && $LimitThreshold > 0 && ($DestW > $LimitThreshold || $DestW < ($BaseDestruct*$BaseDestruct)/$LimitThreshold) )
$DestHighlightW = "ValueLimit";
$VulnW = round(VulnerabilityW($SelectedUnit, $k, $RawFlag), 3);
$VulnHighlightW = $VulnW?"ValueNorm":"ValueLimit";
if($VulnW > 0 && $TraitThreshold > 0 && ($VulnW > $TraitThreshold || $VulnW < ($BaseDestruct*$BaseDestruct)/$TraitThreshold) )
$VulnHighlightW = "ValueTrait";
if($VulnW > 0 && $LimitThreshold > 0 && ($VulnW > $LimitThreshold || $VulnW < ($BaseDestruct*$BaseDestruct)/$LimitThreshold) )
$VulnHighlightW = "ValueLimit";
if(Cost($k)) $Num = round(1e6/Cost($k), 2);
else $Num = 0;
echo "<tr><td>{$v['name']}</td><td>".Cost($k)."</td><td><span class=\\"$DestHighlight\\">$Dest</span></td><td><span class=\\"$VulnHighlight\\">$Vuln</span></td><td>".CostW($k)."</td><td><span class=\\"$DestHighlightW\\">$DestW</span></td><td><span class=\\"$VulnHighlightW\\">$VulnW</span></td><td>$Num</td></tr>";
}
echo "</table></center>";
}
?>
</div>
</body>
</html>
Пользоваться скриптом несложно. Выберите единицу X из выпадающего списка, укажите «пороги» эффективности и, при необходимости, режим расчёта без скорострелов, затем нажмите кнопку «Рассчитать».
Значения порогов не влияют на расчёт, а лишь визуально выделяют значения, выходящие за рамки разумного.