zkb-points - PHP Online
Form of PHP Sandbox
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
Enter Your PHP code here for testing/debugging in the Online PHP Sandbox. As in the usual PHP files, you can also add HTML, but do not forget to add the tag <?php
in the places where the PHP script should be executed.
Result of php executing
Full code of zkb-points.php
- <?php
- // Set DEBUG=true in zkb-points.go to print out the necessary data structures
- // run it here https://wtools.io/php-sandbox/bIOo
- $killmail = json_decode('{"attackers":[{"character_id":96850177,"corporation_id":1000181,"damage_done":4390,"faction_id":500004,"final_blow":true,"security_status":-2.7,"ship_type_id":73796,"weapon_type_id":3178}],"killmail_id":106052948,"killmail_time":"2023-01-13T22:27:40Z","solar_system_id":30003837,"victim":{"character_id":2117587567,"corporation_id":1000169,"damage_taken":4390,"items":[{"flag":5,"item_type_id":12618,"quantity_dropped":250,"singleton":0},{"flag":94,"item_type_id":33892,"quantity_destroyed":1,"singleton":0},{"flag":27,"item_type_id":23009,"quantity_destroyed":28,"singleton":0},{"flag":13,"item_type_id":10190,"quantity_dropped":1,"singleton":0},{"flag":14,"item_type_id":2048,"quantity_dropped":1,"singleton":0},{"flag":11,"item_type_id":33076,"quantity_dropped":1,"singleton":0},{"flag":28,"item_type_id":23009,"quantity_dropped":28,"singleton":0},{"flag":92,"item_type_id":33892,"quantity_destroyed":1,"singleton":0},{"flag":5,"item_type_id":12620,"quantity_destroyed":250,"singleton":0},{"flag":29,"item_type_id":4471,"quantity_destroyed":1,"singleton":0},{"flag":11,"item_type_id":28668,"quantity_destroyed":6,"singleton":0},{"flag":27,"item_type_id":3074,"quantity_destroyed":1,"singleton":0},{"flag":12,"item_type_id":1236,"quantity_destroyed":1,"singleton":0},{"flag":21,"item_type_id":438,"quantity_dropped":1,"singleton":0},{"flag":19,"item_type_id":527,"quantity_dropped":1,"singleton":0},{"flag":28,"item_type_id":3074,"quantity_destroyed":1,"singleton":0},{"flag":93,"item_type_id":33892,"quantity_destroyed":1,"singleton":0},{"flag":20,"item_type_id":448,"quantity_destroyed":1,"singleton":0},{"flag":87,"item_type_id":2456,"quantity_destroyed":2,"singleton":0},{"flag":5,"item_type_id":23009,"quantity_destroyed":650,"singleton":0},{"flag":5,"item_type_id":23019,"quantity_destroyed":466,"singleton":0}],"position":{"x":330675010117.81995,"y":-99715637062.42049,"z":-156409520215.90182},"ship_type_id":17841},"zkb":{"locationID":40242853,"hash":"5724ddbb8580b65062f4bc365f9df44398c053d7","fittedValue":29191310.05,"droppedValue":4506906.28,"destroyedValue":26067214.44,"totalValue":30574120.71,"points":22,"npc":false,"solo":true,"awox":false,"esi":"https://esi.evetech.net/latest/killmails/106052948/5724ddbb8580b65062f4bc365f9df44398c053d7/","url":"https://zkillboard.com/kill/106052948/"}}', true);
- $rigSizes = array(17841=>1,73796=>1);
- $categories = array(17841=>0,73796=>0,12618=>0,33892=>0,23009=>0,10190=>0,2048=>0,33076=>0,23009=>0,33892=>0,12620=>0,4471=>2118,28668=>0,3074=>0,1236=>0,438=>23,527=>11,3074=>0,33892=>0,448=>2,2456=>0,23009=>0,23019=>0);
- $itemFlagNames = array('_'=>0,23009=>'High Slots',10190=>'Low Slots',2048=>'Low Slots',33076=>'Low Slots',23009=>'High Slots',4471=>'High Slots',28668=>'Low Slots',3074=>'High Slots',1236=>'Low Slots',438=>'Mid Slots',527=>'Mid Slots',3074=>'High Slots',448=>'Mid Slots');
- $metaLevels = array('_'=>0,12618=>5,33892=>0,23009=>0,10190=>5,2048=>5,33076=>0,23009=>0,33892=>0,12620=>5,4471=>0,28668=>0,3074=>0,1236=>5,438=>0,527=>0,3074=>0,33892=>0,448=>0,2456=>5,23009=>0,23019=>0);
- $canHeat = array('_'=>0,12618=>false,33892=>false,23009=>false,10190=>false,2048=>false,33076=>true,23009=>false,33892=>false,12620=>false,4471=>true,28668=>false,3074=>true,1236=>false,438=>true,527=>true,3074=>true,33892=>false,448=>true,2456=>false,23009=>false,23019=>false);
- $groupIds = array('_'=>0,12618=>373,33892=>773,23009=>85,10190=>302,2048=>60,33076=>1199,23009=>85,33892=>773,12620=>373,4471=>71,28668=>916,3074=>74,1236=>764,438=>46,527=>65,3074=>74,33892=>773,448=>52,2456=>100,23009=>85,23019=>85,73796=>420);
- function getPoints() {
- global $killmail, $rigSizes, $categories, $itemFlagNames, $metaLevels, $canHeat, $groupIds;
- $victim = $killmail['victim'];
- $shipTypeID = $victim['ship_type_id'];
- $items = $victim['items'];
- $rigSize = $rigSizes[$shipTypeID];
- $killID = $killmail['killmail_id'];
- $dangerFactor = 0;
- $basePoints = pow(5, $rigSize);
- $points = $basePoints;
- foreach ((array) $items as $item) {
- $typeID = $item['item_type_id'];
- $categoryID = $categories[$typeID];
- $flagName = array_key_exists($typeID, $itemFlagNames) ? $itemFlagNames[$typeID] : 'no';
- if (($flagName == "Low Slots" || $flagName == "Mid Slots" || $flagName == "High Slots" || $flagName == 'SubSystems') || ($killID < 23970577 && $item['flag'] == 0) ) {
- $qty = @$item['quantity_destroyed'] + @$item['quantity_dropped'];
- $metaLevel = $metaLevels[$typeID];
- $meta = 1 + floor($metaLevel / 2);
- $heatDamage = $canHeat[$typeID];
- $dangerFactor += ((bool) $heatDamage) * $qty * $meta; // offensive/defensive modules overloading are good for pvp
- $dangerFactor += ($groupIds[$typeID] == 645) * $qty * $meta; // drone damange multipliers
- $dangerFactor -= ($groupIds[$typeID] == 54) * $qty * $meta; // Mining ships don't earn as many points
- }
- }
- echo "Points before dangerFactor($dangerFactor) - $points\n";
- $points += $dangerFactor;
- $points *= max(0.01, min(1, $dangerFactor / 4));
- echo "Points = $points, dangerFactor = $dangerFactor\n";
- // Divide by number of ships on killmail
- $numAttackers = sizeof($killmail['attackers']);
- $involvedPenalty = max(1, $numAttackers * max(1, $numAttackers / 2));
- $points = $points / $involvedPenalty;
- echo "Points = $points, numAttackers=$numAttackers, involvedPenalty=$involvedPenalty\n";
- // Apply a bonus/penalty from -50% to 20% depending on average size of attacking ships
- // For example: Smaller ships blowing up bigger ships get a bonus
- // or bigger ships blowing up smaller ships get a penalty
- $size = 0;
- $hasChar = false;
- foreach ((array) $killmail['attackers'] as $attacker) {
- $hasChar |= @$attacker['character_id'] > 0;
- $shipTypeID = @$attacker['ship_type_id'];
- $categoryID = $categories[@$attacker['ship_type_id']];
- if ($categoryID == 65) return 1; // Structure on your mail, only 1 point
- $aInfo['rigSize'] = $rigSizes[$shipTypeID];
- $groupId = $groupIds[$shipTypeID];
- $size += pow(5, (($groupId != 29) ? $rigSizes[$shipTypeID] : $rigSizes[$shipTypeID] + 1));
- }
- if ($hasChar == false) return 1;
- $avg = max(1, $size / $numAttackers);
- $modifier = min(1.2, max(0.5, $basePoints / $avg));
- $points = (int) floor($points * $modifier);
- return max(1, $points);
- }
- $totalPoints = getPoints();
- $zkbPoints = $killmail['zkb']['points'];
- echo "Final Points = $totalPoints, ZKB points = $zkbPoints";