public function prepare()
 {
     global $schema, $settings;
     $this->template = "economy";
     $this->tab = 'item';
     $this->title = "State of the economy";
     $b = new backpack(false);
     $json = cache::read('item_stats.json');
     $item_stats = json_decode($json, true);
     $total_items = $item_stats['total_items'];
     $metal_index = $item_stats['total_metal'] / $item_stats['total_players'];
     $this->params['metal_index'] = $metal_index;
     krsort($this->params['effects']);
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
 }
 public function prepare()
 {
     global $schema, $settings;
     $this->template = "paints";
     $this->tab = 'item';
     $this->title = "Paint statistics";
     $sort_table = array('total' => 'painted', 'owned' => 'owned', 'used' => 'usage');
     $b = new backpack(false);
     $sortkey = 'painted';
     if ($this->request['sort'] && array_key_exists($this->request['sort'], $sort_table)) {
         $sortkey = $sort_table[$this->request['sort']];
         $this->params['sort'][$this->request['sort']] = 'selected';
     } else {
         $this->params['sort']['total'] = 'selected';
     }
     $item_stats = cache::Memcached()->get('item_stats');
     if ($item_stats === false) {
         $json = file_get_contents($settings['cache']['folder'] . 'item_stats.json');
         $item_stats = json_decode($json, true);
         cache::Memcached()->set('item_stats', $item_stats, time() + 60 * 15);
     }
     $total_paints = $item_stats['total_colors'];
     $total_items = $item_stats['total_items'];
     foreach ($item_stats['colors'] as $c => $p) {
         $id = get_paint_by_color($c);
         if (!$id) {
             continue;
         }
         //printf("Color: %s, id: %s <br />",$c, $id);
         $s = $item_stats['items'][$id];
         $si = $schema['items'][$id];
         $i = $b->get_item($si);
         $owned = $s['total'] / $item_stats['total_players'];
         //printf("Owned: %s, Total: %s<br>", $s['total'], $item_stats['total_players']);
         $paint = array('total' => $p, 'color' => $c, 'painted' => $p / $total_paints, 'owned' => ($s['total'] + $p) / $item_stats['total_players'], 'usage' => $p / ($s['total'] + $p));
         $key = (string) intval($paint[$sortkey] * 10000);
         while ($paints[$key] > 0) {
             $key++;
         }
         //printf("%s -> %s: %s<br />",$paint[$sortkey], $key, $i['name']);
         $paints[$key] = array_merge($paint, $i);
     }
     $this->params['paints'] = $paints;
     krsort($this->params['paints']);
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
 }
 public function prepare()
 {
     global $schema, $settings;
     $this->template = "effects";
     $this->tab = 'item';
     $this->title = "Effect statistics";
     $b = new backpack(false);
     $item_stats = cache::Memcached()->get('item_stats');
     if ($item_stats === false) {
         $json = file_get_contents($settings['cache']['folder'] . 'item_stats.json');
         $item_stats = json_decode($json, true);
         cache::Memcached()->set('item_stats', $item_stats, time() + 60 * 15);
     }
     $total_effects = $item_stats['total_effects'];
     $total_items = $item_stats['total_items'];
     foreach ($item_stats['effects'] as $c => $p) {
         $c = (int) $c;
         // I don't even
         //if($c && $c > 0)
         //{
         $name = int_to_effect($c);
         $class = 'rarity4';
         if ($c == 4) {
             $class = 'community';
         }
         if ($c == 2) {
             $class = 'developer';
         }
         $img = sprintf("%sxy78/%d.png", $settings['upload']['resized_ext']['effects'], $c);
         if (!file_exists($settings['upload']['folder']['effects'] . $c . '.png')) {
             $img = '/static/images/items/sized/xy78/unknown.png';
         }
         $i = $p;
         while ($effects[(string) $i]) {
             $i += 0.01;
         }
         $effects[(string) $i] = array('total' => $p / $total_effects, 'global' => $p / $total_items, 'players' => $p / $item_stats['total_players'], 'effect' => $c, 'image' => $img, 'name' => $name, 'tooltip' => sprintf('<h1 class="%s">%s</h1>', $class, $name), 'raw' => $p, 'sort' => $i);
         //}
     }
     $this->params['effects'] = $effects;
     krsort($this->params['effects']);
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
 }
 public function prepare()
 {
     global $schema, $settings;
     $this->template = "qualities";
     $this->tab = 'item';
     $this->title = "Quality statistics";
     $b = new backpack(false);
     $json = cache::read('item_stats.json');
     $item_stats = json_decode($json, true);
     $total_qualities = $item_stats['qualities_total'];
     $total_items = $item_stats['total_items'];
     $qualities = array();
     foreach ($item_stats['qualities'] as $c => $p) {
         $qualities[$p] = array('total' => $p / $total_items, 'quality' => $c, 'name' => quality_to_label(int_to_quality($c)), 'color' => quality_to_color(int_to_quality($c)), 'tooltip' => sprintf('<h1 class="%s">%s</h1>', int_to_quality($c), quality_to_label(int_to_quality($c))));
     }
     $this->params['qualities'] = $qualities;
     krsort($this->params['qualities']);
     //var_dump($this->params['qualities']);
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
 }
 public function prepare()
 {
     global $schema, $base_weapons, $slot_order, $settings;
     $this->template = "weapons";
     $this->tab = 'item';
     $this->title = 'Weapon statistics';
     $this->canonical = 'http://tf2stats.net/weapons/';
     $sort_table = array('owned' => 'owned', 'equipped' => 'equipped', 'own_equip' => 'owned_equipped_key');
     $b = new backpack(false);
     $sortkey = 'owned';
     if ($this->request['sort'] && array_key_exists($this->request['sort'], $sort_table)) {
         $sortkey = $sort_table[$this->request['sort']];
         $this->params['sort'][$this->request['sort']] = 'selected';
     } else {
         $this->params['sort']['owned'] = 'selected';
     }
     $item_stats = cache::Memcached()->get('item_stats');
     if ($item_stats === false) {
         $json = file_get_contents($settings['cache']['folder'] . 'item_stats.json');
         $item_stats = json_decode($json, true);
         cache::Memcached()->set('item_stats', $item_stats, time() + 60 * 15);
     }
     // First. build a class->slot->items[] array for our stats
     foreach ($item_stats['items'] as $defindex => $s) {
         // Skip tokens
         if ($defindex > 5000) {
             continue;
         }
         $si = $schema['items'][$defindex];
         if (in_array($si['item_slot'], array('primary', 'secondary', 'melee', 'pda', 'pda2'))) {
             $i = $b->get_item($si);
             $i['owned'] = $s['unique_total'] / $item_stats['total_players'];
             //if($i['owned'] > 1)
             //	$i['owned'] = 1;
             if (!empty($i['used_by_classes'])) {
                 foreach ($i['used_by_classes'] as $c) {
                     $ci = class_to_int($c);
                     $i['equipped'] = $s['equipped'][$ci] / $item_stats['total_players'];
                     $i['owned_equipped'] = $s['equipped'][$ci] / $s['unique_total'];
                     $i['owned_equipped_key'] = $i['owned_equipped'] * 1000;
                     $key = $i[$sortkey];
                     while ($weapons[$c][$si['item_slot']][(string) $key] > 0) {
                         $key += 0.001;
                     }
                     $weapons[$c][$si['item_slot']][(string) $key] = $i;
                     $weapon_totals[$c][$si['item_slot']] += $i['equipped'];
                 }
             }
         }
     }
     // Now go through and combine the cosmetics defined above, as well as determine
     // stats for the 'base' weapon since valve's solution is to leave the slot
     // blank if we're using one
     foreach ($base_weapons as $class => $slots) {
         foreach ($slots as $slot => $s) {
             $si = $schema['items'][$s['base']];
             $i = $b->get_item($si);
             //$i['owned'] = ($s['total'] / $item_stats['total_players']);
             //if($i['owned'] > 1)
             //	$i['owned'] = 1;
             //$i['equipped'] = ($s['total_equipped'] / $item_stats['total_players']);
             //$i['owned_equipped'] = ($s['total_equipped'] / $s['total']);
             $i['equipped'] = 1 - $weapon_totals[$class][$slot];
             $i['owned'] = 1;
             //echo $i['equipped'];
             if (!$s['add']) {
                 continue;
             }
             foreach ($s['add'] as $a) {
                 foreach ($weapons[$class] as $csl => $t) {
                     foreach ($weapons[$class][$csl] as $k => $w) {
                         if ($w['defindex'] == $a) {
                             $sl = $csl;
                             $other = $w;
                             $key = $k;
                             break;
                         }
                     }
                 }
                 $i['equipped'] += $other['equipped'];
                 // Fix that silly rounding error causing the
                 // pipe launcher to be used by 100.01%
                 if ($i['equipped'] > 1) {
                     $i['equipped'] = 1;
                 }
                 $weapons[$class][$sl][$key]['hide'] = true;
             }
             $i['owned_equipped'] = $i['equipped'];
             $i['owned_equipped_key'] = $i['owned_equipped'] * 1000;
             $key = $i[$sortkey];
             while ($weapons[$class][$slot][(string) $key]) {
                 $key += 0.001;
             }
             $weapons[$class][$slot][(string) $key] = $i;
             unset($key);
         }
     }
     // finally, sort the results
     // Instead of wasting time sorting arrays and subarrays we can just
     // reconstruct a new array in the order of the slot array above
     // and only sort the bits that really need it.
     foreach ($base_weapons as $class => $slots) {
         foreach ($slots as $slot => $info) {
             $out[$class][$slot] = $weapons[$class][$slot];
             krsort($out[$class][$slot]);
         }
     }
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
     $this->params['weapons'] = $out;
 }
 public function prepare()
 {
     global $schema, $settings;
     $this->template = "hats";
     $this->tab = 'item';
     $this->title = "Hat statistics";
     $this->canonical = 'http://tf2stats.net/hats/';
     $sort_table = array('owned' => 'unique_total', 'equipped' => 'total_equipped', 'own_equip' => 'owned_equipped');
     $b = new backpack(false);
     $sortkey = 'unique_total';
     if ($this->request['sort'] && array_key_exists($this->request['sort'], $sort_table)) {
         $sortkey = $sort_table[$this->request['sort']];
         $this->params['sort'][$this->request['sort']] = 'selected';
     } else {
         $this->params['sort']['owned'] = 'selected';
     }
     $item_stats = cache::Memcached()->get('item_stats');
     if ($item_stats === false) {
         $json = file_get_contents($settings['cache']['folder'] . 'item_stats.json');
         $item_stats = json_decode($json, true);
         cache::Memcached()->set('item_stats', $item_stats, time() + 60 * 15);
     }
     foreach ($item_stats['items'] as $defindex => $s) {
         $si = $schema['items'][$defindex];
         if ($si['item_slot'] == 'head') {
             $i = $b->get_item($si);
             $i['owned'] = $s['unique_total'] / $item_stats['total_players'];
             //if($i['owned'] > 1)
             //	$i['owned'] = 1;
             $i['equipped'] = $s['total_equipped'] / $item_stats['total_players'];
             $i['owned_equipped'] = $s['total_equipped'] / $s['total'];
             $s['owned_equipped'] = intval($s['total_equipped'] / $s['total'] * 1000);
             // Colors
             /*
             	arsort($s['colors']);
             	
             	foreach($s['colors'] as $c => $num)
             	{
             		$html = dechex($c);
             		if($html === '0')
             			continue;//$html = '914c3f';
             		$key = $num;
             		while($i['colors'][$key] > 0)
             			$key++;
             		$i['colors'][$key] = array('color' => $html, 'num' => ($num/$s['total_colored']));
             	}	
             */
             if (count($i['used_by_classes']['class']) < 1) {
                 for ($c = 1; $c < 10; $c++) {
                     $num = $s['equipped'][$c];
                     if ($s['total_equipped'] > 0) {
                         $i['classes'][] = array('class' => int_to_class($c), 'id' => $c, 'num' => $num / $s['total_equipped']);
                     }
                 }
             }
             $key = $s[$sortkey];
             while ($this->params['hats'][$key] > 0) {
                 $key++;
             }
             $this->params['hats'][$key] = $i;
         }
     }
     krsort($this->params['hats']);
     $this->params['profiles'] = $item_stats['total_players'];
     $this->params['time'] = cache::date('item_stats.json');
 }