function server_update_points($server) { global $no_ranking_clusters; mysql_select_db(dbname($server)); file_put('data/calc-stat.dat', 'Berechnung von Server $server ...'); ignore_user_abort(0); $clusters = array(); // Alle Datensätze zurcksetzen, // damit es bei herrenlosen PCs keine falschen Anzeigen gibt: #db_query('UPDATE pcs SET owner_name=\'\', owner_points=0, owner_cluster=0, owner_cluster_code=\'\';'); $current = 0; $u_result = db_query('SELECT * FROM users'); $total = mysql_num_rows($u_result); while ($user = mysql_fetch_assoc($u_result)) { $current++; $upoints = 0; if ($current % 100 == 0) { file_put('data/calc-stat.dat', 'Berechnung von Server ' . $server . ' ... ' . $current . ' / ' . $total); } $pc_result = db_query('SELECT * FROM pcs WHERE owner=\'' . mysql_escape_string($user['id']) . '\';'); $pc_cnt = mysql_num_rows($pc_result); while ($pc = mysql_fetch_assoc($pc_result)) { processupgrades($pc); $pcpoints = getpcpoints($pc, 'bydata'); db_query('UPDATE pcs SET points=\'' . mysql_escape_string($pcpoints) . '\' WHERE id=\'' . mysql_escape_string($pc['id']) . '\';'); $upoints += $pcpoints; } #reset($pcs); #foreach($pcs As $pcid): #$sql='UPDATE pcs SET owner_points=$upoints,owner_name=\''.mysql_escape_string($user['name']).'\' '; #$cluster=getcluster($user['cluster']); #if($cluster!==false) { # $sql.=',owner_cluster='.mysql_escape_string($cluster['id']).', owner_cluster_code=\''.mysql_escape_string($cluster['code']).'\' '; #} #$sql.='WHERE id=\''.mysql_escape_string($pcid).'\''; #db_query($sql); #endforeach; $c = $user['cluster']; if ($c != '' && $c != 0) { #$r=db_query('SELECT id FROM clusters WHERE id=\''.mysql_escape_string($c).'\' LIMIT 1'); #if(mysql_num_rows($r)>0) { $clusters['c' . $c]['points'] += $upoints; $clusters['c' . $c]['members'] += 1; $clusters['c' . $c]['pcs'] += $pc_cnt; #} } if (is_noranKINGuser($user['id']) == false && $user['id'] != 6249 && $user['id'] != 19061) { $rank[$user['id'] . ';' . $user['name'] . ';' . $user['cluster']] = $upoints; } else { db_query('UPDATE users SET points=\'' . mysql_escape_string($upoints) . '\',rank=\'0\' WHERE id=\'' . mysql_escape_string($user['id']) . '\';'); } } #$pcinfo=gettableinfo('pcs',dbname($server)); #file_put('data/_server'.$server.'/pc-count.dat', $pcinfo['Rows']); file_put('data/_server' . $server . '/user-count.dat', mysql_num_rows($u_result)); ignore_user_abort(0); file_put('data/calc-stat.dat', 'Berechnung von Server ' . $server . ' ... Berechnung abgeschlossen: Schreiben in DB ...'); arsort($rank); db_query('TRUNCATE TABLE rank_users'); # Tabelle leeren #$platz=0; while (list($dat, $points) = each($rank)) { #$platz++; $dat = explode(';', $dat); $dat[2] = (int) $dat[2]; db_query('INSERT INTO rank_users VALUES(0, ' . mysql_escape_string($dat[0]) . ', \'' . mysql_escape_string($dat[1]) . '\', ' . mysql_escape_string($points) . ', ' . mysql_escape_string($dat[2]) . ');'); db_query('UPDATE users SET points=' . mysql_escape_string($points) . ', rank=' . mysql_insert_id() . ' WHERE id=' . mysql_escape_string($dat[0]) . ' LIMIT 1;'); } #file_put('data/_server'.$server.'/rank-user-count.dat', count($rank)); db_query('TRUNCATE TABLE rank_clusters'); # Tabelle leeren unset($b); settype($b, 'array'); while (list($bez, $val) = each($clusters)) { $b[$bez] = $clusters[$bez]['points']; } arsort($b); unset($c); settype($c, 'array'); while (list($bez, $val) = each($b)) { $c[$bez]['points'] = $val; $c[$bez]['pcs'] = $clusters[$bez]['pcs']; $c[$bez]['members'] = $clusters[$bez]['members']; } while (list($bez, $dat) = each($c)) { $bez = substr($bez, 1); $av_p = round($dat['points'] / $dat['members'], 2); $av_pcs = round($dat['pcs'] / $dat['members'], 2); // SUCCESS RATE CALCULATION START $cluster = getcluster($bez); $total = $cluster['srate_total_cnt']; $scnt = $cluster['srate_success_cnt']; $ncnt = $cluster['srate_noticed_cnt']; if ($total > 0) { $psucceeded = $scnt * 100 / $total; $pnoticed = $ncnt * 100 / $total; // Erfolg ist gut und zählt 75% // Bemerkt ist schlecht (deshalb 100-$pnoticed) und zählt 25% $srate = $psucceeded * 0.75 + (100 - $pnoticed) * 0.25; } else { $srate = 0; } // SUCCESS RATE CALCULATION END if ($bez != $no_ranking_clusters) { db_query('INSERT INTO rank_clusters VALUES(0,\'' . mysql_escape_string($bez) . '\',\'' . mysql_escape_string($dat['members']) . '\',\'' . mysql_escape_string($dat['points']) . '\',\'' . mysql_escape_string($av_p) . '\',\'' . mysql_escape_string($dat['pcs']) . '\',\'' . mysql_escape_string($av_pcs) . '\',\'' . mysql_escape_string($srate) . '\');'); } db_query('UPDATE clusters SET points=\'' . mysql_escape_string($dat['points']) . '\',rank=\'' . mysql_insert_id() . '\' WHERE id=\'' . mysql_escape_string($bez) . '\' LIMIT 1;'); } file_put('data/calc-stat.dat', 'Gleich fertig!!!'); cleardir('data/_server' . $server . '/usrimgs'); }
function processupgrades(&$pc, $savepc = true) { //----------------- PROCRESS UPGRADES ------------------- global $bucks; $pcid = $pc['id']; # h4ck # Upgrade-Vorgänge verarbeiten $r = db_query('SELECT * FROM `upgrades` WHERE `pc`=\'' . mysql_escape_string($pcid) . '\' AND `end`<=\'' . time() . '\' ORDER BY `start` ASC;'); $cnt = @mysql_num_rows($r); if ($cnt > 0) { $sql = 'UPDATE `pcs` SET '; $sql2 = 'DELETE FROM `upgrades` WHERE id IN('; $i = 0; while ($data = mysql_fetch_assoc($r)) { #print_r($data); $item = $data['item']; if (isavailb($item, $pc) == true) { $newlv = itemnextlevel($item, $pc[$item]); $pc[$item] = $newlv; $sql .= ' `' . mysql_escape_string($item) . '`=\'' . mysql_escape_string($newlv) . '\''; $sql2 .= $data['id']; if ($i < $cnt - 1) { $sql .= ', '; $sql2 .= ', '; } } $i++; } $sql = $sql . ' WHERE `id`=\'' . mysql_escape_string($pc['id']) . '\' LIMIT 1;'; $sql2 .= ');'; if ($savepc && strlen($sql) > strlen('UPDATE `pcs` SET WHERE `id`=\'1\' LIMIT 1;')) { db_query($sql); } if (strlen($sql2) > strlen('DELETE FROM `upgrades` WHERE id IN();')) { db_query($sql2); } } # Geld updaten: if ($pc['lmupd'] + 60 <= time()) { $plus = (int) round(get_gdph($pc) * ((time() - $pc['lmupd']) / 3600), 0); $pc['credits'] += $plus; $max = getmaxbb($pc); if ($pc['credits'] > $max) { $c = getcluster($usr['cluster']); if ($c !== false) { $credits = $c['money'] + ($pc['credits'] - $max); db_query('UPDATE clusters SET money=' . mysql_escape_string($credits) . ' WHERE id=\'' . mysql_escape_string($usr['cluster']) . '\''); } $pc['credits'] = $max; } db_query('UPDATE pcs SET credits=\'' . mysql_escape_string($pc['credits']) . '\', lmupd=\'' . time() . '\' WHERE id=\'' . mysql_escape_string($pcid) . '\''); } $bucks = number_format($pc['credits'], 0, ',', '.'); }