* @version DS-E V/2 */ $str_filename = basename(__FILE__); require_once('common.php'); $access_control->su_check(access_control::SU_RIGHT_STATS,true); $arr_stats = array( 'onlinetime'=>array('name'=>'Onlinezeit','field'=>'onlinetime','desc'=>'Unermüdlich, einfach unermüdlich!') ,'mailsent'=>array('name'=>'Mails ausgehend','field'=>'mailsent','desc'=>'Die fleißigsten Mailschreiber:') ,'mailrec'=>array('name'=>'Mails eingehend','field'=>'mailreceived','desc'=>'Diese Spieler empfangen die meisten Mails:') ,'comments'=>array('name'=>'Kommentare','field'=>'comments','desc'=>'Die aktivsten Schreiberlinge:') ,'comments_rp'=>array('name'=>'RP-Kommentare aktuell','field'=>'comments_rp','desc'=>'Aktuelle Anwärter auf Rollenspiel-Belohnung:') ,'comments_rp_ges'=>array('name'=>'RP-Kommentare gesamt','field'=>'comments_rp_ges','desc'=>'Spieler mit meisten abgerechneten RP-Posts:') ,'commentlength1'=>array('name'=>'Kommentarlänge I','field'=>'ROUND(commentlength / comments)','desc'=>'Diese Spieler schreiben die längsten Kommentare (Durchschnittszeichenzahl):') ,'commentlength2'=>array('name'=>'Kommentarlänge II','field'=>'commentlength','desc'=>'Diese Spieler schreiben die längsten Kommentare (Gesamtzeichenzahl):') ,'pvpkilled'=>array('name'=>'PvP-Tode','field'=>'pvpkilled','desc'=>'Beliebteste Opfer unter den PvPlern:') ,'pvpkills'=>array('name'=>'PvP-Kills','field'=>'pvpkills','desc'=>'Spieler mit den meisten siegreichen, aktiven PvP-Kämpfen:') ,'turns_not_used'=>array('name'=>'Rundenverbrauch','field'=>'turns_not_used','desc'=>'Diese Spieler lassen die meisten Waldkämpfe ungenutzt verstreichen:') ,'petitions'=>array('name'=>'Anfragenschreiber','field'=>'petitions','desc'=>'Diese Spieler haben die meisten Anfragen geschrieben:') ); function stats_nav () { global $arr_stats,$str_filename, $access_control; if($access_control->su_check(access_control::SU_RIGHT_DEV)) { addnav('Aktionen'); addnav('`$Reset`0',$str_filename.'?op=reset',false,false,false,false); } addnav('Statistiken'); foreach($arr_stats as $what=>$stat) { addnav($stat['name'], $str_filename . '?op=showstats&what='.$what ); } addnav('Kommentarverteilung', $str_filename . '?op=comment' ); addnav('Loginverteilung', $str_filename . '?op=logins' ); addnav('Skins', $str_filename . '?op=skins' ); addnav('Skins (Popup)', $str_filename . '?op=skins_popup'); addnav('Spieleinstellungen', $str_filename . '?op=prefs' ); addnav('Rassen', $str_filename . '?op=races' ); addnav('Fertigkeiten', $str_filename . '?op=specialty' ); addnav('Stalltiere', $str_filename . '?op=mounts' ); addnav('Stalltier-Besitzer', $str_filename . '?op=mountusr'); addnav('Adressbuch-Einträge', $str_filename . '?op=addr' ); addnav('Versch. Accountinfos', $str_filename . '?op=accountinfo' ); addnav('Aufstellungen zu Werten', $str_filename . '?op=stats_ext' ); addnav('Push-Werte',$str_filename . '?op=push'); addnav('Letzter Login', $str_filename . '?op=lastlogin' ); addnav('Top-Referer', $str_filename . '?op=topref' ); addnav('Runen', $str_filename . '?op=runes' ); addnav('Browserverteilung', $str_filename . '?op=browser' ); addnav('EXP in Kaserne',$str_filename.'?op=exp_kaserne'); } function sort_browser_cb( $a, $b ){ return $a['count'] < $b['count']; } page_header('Statistisches & Interessantes aus '.getsetting('townname','Atrahor')); output('`c`b`&Statistik`0`b`c`n'); // Grundnavi erstellen addnav('Zurück'); grotto_nav(); // END Grundnavi erstellen // Evtl. Fehler / Erfolgsmeldungen anzeigen if($session['message'] != '') { output('`n`b'.$session['message'].'`b`n`n'); $session['message'] = ''; } // END Evtl. Fehler / Erfolgsmeldungen anzeigen output('`^Das statistische Amt '.getsetting('townname','Atrahor').'s zeichnet seit `b'.date('d. m. Y H:i:s',strtotime(getsetting('stats_start','2006-04-08 23:23:23')) ).'`b die folgenden Daten auf:`n`0'); // MAIN SWITCH $op = ($_REQUEST['op'] ? $_REQUEST['op'] : ''); switch($op) { // Standardansicht case '': output('`^Bitte wählen.'); stats_nav(); break; // Statistiken anzeigen case 'showstats': stats_nav(); $str_what = $_GET['what']; $int_amount = (int)$_GET['amount']; $int_amount = ($int_amount == 0 ? 25 : $int_amount); $bool_orderrev = (bool)$_GET['orderrev']; $str_out = ''; if(!isset($arr_stats[$str_what])) { output('`$Eine solche Statistik gibt es nicht!'); page_footer(); exit; } // Ausgewählte Stat $arr_stat = $arr_stats[$str_what]; // Seiten-Nav $count_sql = 'SELECT COUNT(*) AS c FROM account_stats'; $arr_page_res = page_nav($str_filename.'?op=showstats&what='.$str_what,$count_sql,100); // Statistik abrufen $sql = 'SELECT a.name,a.login,a.acctid, '.$arr_stat['field'].' AS val FROM accounts a LEFT JOIN account_stats a_s USING (acctid) ORDER BY val '.($bool_orderrev ? 'ASC' : 'DESC').' LIMIT '.$arr_page_res['limit']; $res = db_query($sql); // Gesamtanzahl abrufen $sql = 'SELECT SUM('.$arr_stat['field'].') AS val_ges FROM account_stats a_s'; $arr_sum = db_fetch_assoc(db_query($sql)); $int_sum = max($arr_sum['val_ges'],1); // Introtext $str_out .= '`&'.$arr_stat['desc'].'`n`n'; $str_out .= 'Gesamt: '.number_format($int_sum).'`0`n`n'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = $arr_page_res['from'] + 1; while($s = db_fetch_assoc($res)) { $str_grafbar = grafbar(100, $s['val'] / $int_sum, 400,20,'user'.$s['acctid']); // Sonderformatierungen if($str_what == 'onlinetime') { $str_days = floor($s['val'] / 86400); $s['val'] %= 86400; $str_hours = floor($s['val'] / 3600); $s['val'] %= 3600; $str_mins = floor($s['val'] / 60); $s['val'] %= 60; $s['val'] = $str_days.' Tage, '.$str_hours.' Stunden, '.$str_mins.' Minuten'; } else { $s['val'] = number_format($s['val']); } $str_out .= ''; $int_counter++; } $str_out .= '
Platz Name Wert
'.$int_counter .' '.$s['name'] .'`0 '.$str_grafbar.' `b'.$s['val'].'`b
'; output($str_out,true); break; case 'addr': stats_nav(); $int_amount = (int)$_GET['amount']; $int_amount = ($int_amount == 0 ? 25 : $int_amount); $bool_orderrev = (bool)$_GET['orderrev']; $str_out = ''; // Statistik abrufen $sql = 'SELECT COUNT(player) AS anzahl, a.name FROM yom_adressbuch LEFT JOIN accounts a ON a.acctid=player GROUP BY player ORDER BY anzahl '.($bool_orderrev ? 'ASC' : 'DESC').' LIMIT '.$int_amount; $res = db_query($sql); // Gesamtanzahl abrufen $sql = 'SELECT COUNT(player) AS val_ges FROM yom_adressbuch'; $arr_sum = db_fetch_assoc(db_query($sql)); $int_sum = $arr_sum['val_ges']; // Introtext $str_out .= '`&Diese Spieler tauchen am häufigsten in den Adressbüchern auf:`n`n'; $str_out .= 'Gesamt: '.number_format($int_sum).'`n`n`0'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; while($s = db_fetch_assoc($res)) { $str_grafbar = grafbar($int_sum, $s['anzahl'], 300,20); $s['anzahl'] = number_format($s['anzahl']); $str_out .= ''; $int_counter++; } $str_out .= '
Platz Name Wert
'.$int_counter .' '.$s['name'] .'`0 `b'.$s['anzahl'].'`b
'; output($str_out,true); addnav('Ergebnisse'); addnav('Zeige 25',$str_filename.'?op=addr&amount=25'); addnav('Zeige 50',$str_filename.'?op=addr&amount=50'); addnav('Zeige 75',$str_filename.'?op=addr&amount=75'); addnav('Zeige 100',$str_filename.'?op=addr&amount=100'); break; case 'comment': stats_nav(); $str_out = ''; // Introtext $str_out .= '`&Gegenwärtige Kommentar-Verteilung`0`n`n
`bKommentar-Sections (Top 50):`b`n`n'; // Tabelle $str_out_sec .= ''; $str_out_time .= '
Platz Section Anzahl Durch. Länge
'; // Inhalt $str_class = 'trlight'; $int_counter = 1; // Statistik abrufen: Toplist der Kommentarsections $sql = 'SELECT COUNT(*) AS a, section, ROUND(AVG(LENGTH(comment))) AS length FROM commentary c GROUP BY section ORDER BY a DESC LIMIT 50'; $res = db_query($sql); // Sections while($c = db_fetch_assoc($res)) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $c['a'] = number_format($c['a']); $str_out_sec .= '' .'' .'' .'' .'' .''; $int_counter++; } $int_counter = 1; // Statistik abrufen: Toplist der Zeiten $sql = 'SELECT COUNT(*) AS a, DATE_FORMAT(postdate,"%H") AS hour, ROUND(AVG(LENGTH(comment))) AS length FROM commentary c GROUP BY hour ORDER BY a DESC'; $res = db_query($sql); // Zeiten while($c = db_fetch_assoc($res)) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $c['a'] = number_format($c['a']); $c['hour_until'] = ($c['hour'] == 23 ? 0 : $c['hour'] + 1); $str_out_time .= '' .'' .'' .'' .'' .''; $int_counter++; } $str_out_sec .= '
Platz Stunde Anzahl Durch. Länge
'.$int_counter.''.$c['section'].''.$c['a'].''.$c['length'].'
'.$int_counter.''.$c['hour'].' Uhr - '.$c['hour_until'].' Uhr'.$c['a'].''.$c['length'].'
'; $str_out_time .= '
'; $str_out .= $str_out_sec.'   `bKommentar-Zeiten:`b`n`n '.$str_out_time.''; output($str_out,true); break; case 'logins': stats_nav(); $str_out = ''; // Inhalt $int_counter = 1; // Statistik abrufen: Toplist der Zeiten $sql = 'SELECT COUNT(*) AS a, DATE_FORMAT(date,"%H") AS hour FROM debuglog d WHERE id <> "" GROUP BY hour ORDER BY a DESC'; $res = db_query($sql); $gchart_data = array(); $gchart_sum = 0; $gchart_label= array(); // Zeiten while($c = db_fetch_assoc($res)) { $c['hour_until'] = ($c['hour'] == 23 ? 0 : $c['hour'] + 1); $gchart_data[] = $c['a']; $gchart_sum += $c['a']; $gchart_label[] = $c['hour'].'+Uhr+-+'.$c['hour_until'].'+Uhr'; } $gchart_perc = array(); foreach($gchart_data as $d){ $gchart_perc[] = number_format(($d/$gchart_sum)*100, 2, '.', ''); } $g_chart = 'http://chart.apis.google.com/chart?chs=600x300&cht=p' //Gradient .'&chf=bg,lg,90,76A4FB,0.5,ffffff,0' //Überschrift .'&chtt=Gegenwaertige+Login-Verteilung&chts=000000,20' //Prozente: .'&chd=t:'.implode(',', $gchart_perc) //Beschriftung .'&chl='.implode('|', $gchart_label); output('`c`c'); break; case 'skins': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT a.prefs,acctid FROM accounts a'; $res = db_query($sql); $arr_skins = array(); $int_sum = 0; while($s = db_fetch_assoc($res)) { $arr_prefs = unserialize($s['prefs']); $arr_skins[$arr_prefs['template']]++; $int_sum++; //if($arr_prefs['template']=='warcraft') $wuser.=','.$s['acctid']; } //output($wuser); arsort($arr_skins); // Introtext $str_out .= '`&'.$arr_stat['desc'].'`n`n'; $str_out .= 'Gesamt: '.number_format($int_sum).'`0`n`n'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; foreach($arr_skins as $name=>$val) { $name = (!empty($name) ? $name : 'Unbekannt'); $str_grafbar = grafbar($int_sum, $val, 300,20); $val = number_format($val); $str_out .= ''; $int_counter++; } $str_out .= '
Platz Skin Anzahl
'.$int_counter .' '.$name .'`0 '.$str_grafbar.' `b'.$val.'`b
'; output($str_out,true); break; case 'skins_popup': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT a.prefs FROM accounts a'; $res = db_query($sql); $arr_skins = array(); $int_sum = 0; while($s = db_fetch_assoc($res)) { $arr_prefs = unserialize($s['prefs']); if (!$arr_prefs['template_pop']) $arr_prefs['template_pop'] = 'Standard'; $arr_skins[$arr_prefs['template_pop']]++; $int_sum++; } arsort($arr_skins); // Introtext $str_out .= '`&'.$arr_stat['desc'].'`n`n'; $str_out .= 'Gesamt: '.number_format($int_sum).'`0`n`n'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; foreach($arr_skins as $name=>$val) { $name = (!empty($name) ? $name : 'Unbekannt'); $str_grafbar = grafbar($int_sum, $val, 300,20); $val = number_format($val); $str_out .= ''; $int_counter++; } $str_out .= '
Platz Skin Anzahl
'.$int_counter .' '.$name .'`0 '.$str_grafbar.' `b'.$val.'`b
'; output($str_out,true); break; case 'prefs': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT a.prefs FROM accounts a'; $res = db_query($sql); $arr_prefs = array(); $int_sum = 0; $int_preview = 0; $int_wih_off = 0; $int_mail_igm = 0; $int_mail_sm = 0; $int_dirtyemail = 0; $int_img_off = 0; $int_sound_off = 0; $int_colors_off = 0; $int_chat_min = getsetting('chat_window_minsize',350); $int_tutorial_off = 0; $int_minimail_on = 0; $int_new_mail = 0; $arr_colors = array(); while($s = db_fetch_assoc($res)) { $arr_prefs = unserialize($s['prefs']); $int_preview += ($arr_prefs['preview'] ? 1 : 0); $int_wih_off += $arr_prefs['hide_who_is_here'] ? 1 : 0; $int_mail_igm += ($arr_prefs['emailonmail'] ? 1 : 0); $int_mail_sm += ($arr_prefs['systemmail'] ? 1 : 0); $int_dirtyemail += ($arr_prefs['dirtyemail'] ? 1 : 0); $int_minimail_on += ($arr_prefs['minimail'] ? 1 : 0); $int_img_off += ($arr_prefs['noimg'] ? 1 : 0); $int_sound_off += ($arr_prefs['nosounds'] ? 1 : 0); $int_colors_off += ($arr_prefs['nocolors'] ? 1 : 0); $int_taxfrombank += ($arr_prefs['taxfrombank'] ? 1 : 0); $int_tutorial_off += ($arr_prefs['tutorial_disabled'] ? 1 : 0); $int_new_mail += ($arr_prefs['mail_new'] ? 1 : 0); $int_sum++; } $arr_disp_prefs=array( 'Chatvorschau?'=>$int_preview, '"Wer ist hier?" deaktiviert'=>$int_wih_off, 'EMail bei neuen Brieftauben?'=>$int_mail_igm, 'EMail bei neuen Sysnachrichten?'=>$int_mail_sm, 'Kein Wortfilter in Brieftauben?'=>$int_dirtyemail, 'Minimail an?'=>$int_minimail_on, 'Navibilder aus?'=>$int_img_off, 'Sounds aus?'=>$int_sound_off, 'Farben aus?'=>$int_colors_off, 'Steuern per Bankeinzug?'=>$int_taxfrombank, 'Tutorial aus?'=>$int_tutorial_off, 'Neue Mail' => $int_new_mail ); // Introtext $str_out .= '`&Einstellungen der Spieler:`n`n'; $str_out .= 'Gesamt: '.number_format($int_sum).'`0`n`n'; // Tabelle $str_out .= ''; // Inhalt foreach($arr_disp_prefs as $key=>$val) { $val = number_format($val); $bgclass=$bgclass=='trdark'?'trlight':'trdark'; $str_out .= ''; } $str_out .= '
Option Anzahl
'.$key.' `b'.$val.'`b
'; output($str_out,true); break; case 'races': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT COUNT(*) AS a, ROUND(AVG(dragonkills)) AS dk, ROUND(AVG(comments)) AS com, ROUND(AVG(commentlength/comments)) AS comlen, r.colname AS race FROM accounts a LEFT JOIN account_stats USING(acctid) LEFT JOIN races r ON r.id = a.race GROUP BY race ORDER BY a DESC'; $res = db_query($sql); // Introtext $str_out .= '`&Rassen-Verteilung`n`n`0'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; while($m = db_fetch_assoc($res)) { $m['a'] = number_format($m['a']); $str_out .= '' .'' .'' .'' .'' .'' .'' .''; $int_counter++; } $str_out .= '
Platz Rasse Anzahl Dur.schn. DK Dur.schn. Komment. Dur.schn. Kommentlänge.
'.$int_counter.''.$m['race'].'`0'.$m['a'].''.$m['dk'].''.$m['com'].''.$m['comlen'].'
'; output($str_out,true); break; case 'specialty': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT specialty.specname, count(*) AS anzahl FROM accounts JOIN specialty ON (accounts.specialty = specialty.specid) GROUP BY specialty.specid ORDER BY anzahl DESC'; $res = db_query($sql); // Introtext $str_out .= '`&Fertigkeiten-Verteilung`n`n`0'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; while($m = db_fetch_assoc($res)) { $str_out .= '' .'' .'' .'' .''; $int_counter++; } $str_out .= '
Platz Fertigkeit Anzahl
'.$int_counter.''.$m['specname'].''.$m['anzahl'].'
'; output($str_out,true); break; case 'mounts': stats_nav(); $str_out = ''; // Statistik abrufen $sql = 'SELECT COUNT(*) AS a, IF(mountname<>"",mountname,"Keines") AS name, ROUND(AVG(dragonkills)) AS dk FROM accounts a LEFT JOIN mounts ON hashorse=mountid GROUP BY hashorse ORDER BY a DESC'; $res = db_query($sql); // Introtext $str_out .= '`&Stalltier-Verteilung`n`n`0'; // Tabelle $str_out .= ''; // Inhalt $str_class = 'trlight'; $int_counter = 1; while($m = db_fetch_assoc($res)) { $m['a'] = number_format($m['a']); $str_out .= '' .'' .'' .'' .'' .''; $int_counter++; } $str_out .= '
Platz Tier Anzahl Durchschn. DK
'.$int_counter.''.$m['name'].'`0'.$m['a'].''.$m['dk'].'
'; output($str_out,true); break; // Beginn Modifikation von Fossla case 'mountusr': stats_nav(); $str_out = ''; $sql = 'SELECT mountid, mountname FROM mounts ORDER BY mountid ASC'; $res = db_query($sql); $str_out .= '`&Stalltier-Besitzersuche`n`n`0'; addnav('', $str_filename . '?op=mountusr'); $str_out .= '
'; output($str_out,true); // Teil 2: if($_POST['mount_nr'] != 0) { $str_out = ''; $su_tiernr = $_POST['mount_nr']; $sql2 = 'SELECT mountname FROM mounts WHERE mountid=' . $su_tiernr . ''; $su_tierusr = db_fetch_assoc(db_query($sql2)); $su_tierusr = $su_tierusr['mountname']; //Besitzer von Tier Nr.: $su_tiernr auslesen $sql = 'SELECT acctid, name FROM accounts WHERE hashorse=' . $su_tiernr . ' ORDER BY acctid ASC'; $res = db_query($sql); $str_out .= '`n`bBesitzer von ' . $su_tierusr . ':`b`n'; while($m = db_fetch_assoc($res)) { $str_out .= '`n' . $m['name'] . ''; } output($str_out,true); } break; // Ende Modifikation von Fossla case 'stats_ext': stats_nav(); output('Erweiterte Statistiken:`n`n'); $sql = 'SELECT dragonkills,gold,goldinbank,gems,maxhitpoints,attack,defence,level,age FROM accounts ORDER by dragonkills ASC, level ASC'; $res = db_query($sql); $accounts_number = db_num_rows($res); $dks_ges = 0; $gold_ges = 0; $gems_ges = 0; while($a = db_fetch_assoc($res)) { if($a['dragonkills'] == 0) {$k = '0';} elseif($a['dragonkills'] > 0 && $a['dragonkills'] < 5) {$k = '1 - 5';} elseif($a['dragonkills'] >= 5 && $a['dragonkills'] < 10) {$k = '5 - 9';} elseif($a['dragonkills'] >= 10 && $a['dragonkills'] < 20) {$k = '10 - 19';} elseif($a['dragonkills'] >= 20 && $a['dragonkills'] < 40) {$k = '20 - 39';} elseif($a['dragonkills'] >= 40 && $a['dragonkills'] < 70) {$k = '40 - 69';} elseif($a['dragonkills'] >= 70 && $a['dragonkills'] < 100) {$k = '70 - 99';} elseif($a['dragonkills'] >= 100) {$k = '100 - x';} $data[$k]['dkdata']['gold'] += $a['gold'] + $a['goldinbank']; $data[$k]['dkdata']['gems'] += $a['gems']; $data[$k]['dkdata']['maxhitpoints'] += $a['maxhitpoints']; $data[$k]['dkdata']['attack'] += $a['attack']; $data[$k]['dkdata']['defence'] += $a['defence']; $data[$k]['dkdata']['age'] += $a['age']; $data[$k]['dkdata']['counter']++; if($a['level'] == 1) {$lk = '1';} elseif($a['level'] == 2) {$lk = '2';} elseif($a['level'] >= 3 && $a['level'] < 5) {$lk = '3 - 4';} elseif($a['level'] >= 5 && $a['level'] < 7) {$lk = '5 - 6';} elseif($a['level'] >= 7 && $a['level'] < 11) {$lk = '7 - 10';} elseif($a['level'] >= 11 && $a['level'] < 15) {$lk = '11 - 14';} elseif($a['level'] == 15) {$lk = '15';} $data[$k]['levels'][$lk]['gold'] += $a['gold'] + $a['goldinbank']; $data[$k]['levels'][$lk]['gems'] += $a['gems']; $data[$k]['levels'][$lk]['maxhitpoints'] += $a['maxhitpoints']; $data[$k]['levels'][$lk]['attack'] += $a['attack']; $data[$k]['levels'][$lk]['defence'] += $a['defence']; $data[$k]['levels'][$lk]['age'] += $a['age']; $data[$k]['levels'][$lk]['counter']++; $dks_ges += $a['dragonkills']; $gold_ges += $a['gold']; $gems_ges += $a['gems']; } output('',true); $class = 'trlight'; foreach($data as $dk => $info) { $info['dkdata']['gold_avg'] = round($info['dkdata']['gold'] / $info['dkdata']['counter']); $info['dkdata']['gems_avg'] = round($info['dkdata']['gems'] / $info['dkdata']['counter']); $info['dkdata']['maxhitpoints_avg'] = round($info['dkdata']['maxhitpoints'] / $info['dkdata']['counter']); $info['dkdata']['defence_avg'] = round($info['dkdata']['defence'] / $info['dkdata']['counter']); $info['dkdata']['attack_avg'] = round($info['dkdata']['attack'] / $info['dkdata']['counter']); $info['dkdata']['age_avg'] = round($info['dkdata']['age'] / $info['dkdata']['counter']); $info['dkdata']['num_rel'] = round(($info['dkdata']['counter'] / $accounts_number) * 100); output('' ,true); ksort($info['levels'],SORT_NUMERIC); foreach($info['levels'] as $lvl => $i) { $i['gold_avg'] = round($i['gold'] / $i['counter']); $i['gems_avg'] = round($i['gems'] / $i['counter']); $i['maxhitpoints_avg'] = round($i['maxhitpoints'] / $i['counter']); $i['defence_avg'] = round($i['defence'] / $i['counter']); $i['attack_avg'] = round($i['attack'] / $i['counter']); $i['age_avg'] = round($i['age'] / $i['counter']); $i['num_rel'] = round( ($i['counter'] / $accounts_number) * 100); output('' ,true); $class = ($class == 'trlight'?'trdark':'trlight'); } } output('
DKs Level Anzahl abs./ % Gold ges./durchschn. Gems ges./durchschn. LP durchschn. Angriff durchschn. Def durchschn. Alter durchschn.
`b'.$dk.' DKs`bAlle '.$info['dkdata']['counter'].' / '.$info['dkdata']['num_rel'].' % '.$info['dkdata']['gold'].' / '.$info['dkdata']['gold_avg'].' '.$info['dkdata']['gems'].' / '.$info['dkdata']['gems_avg'].' '.$info['dkdata']['maxhitpoints_avg'].' '.$info['dkdata']['attack_avg'].' '.$info['dkdata']['defence_avg'].' '.$info['dkdata']['age_avg'].'
- '.$lvl.' '.$i['counter'].' / '.$i['num_rel'].' % '.$i['gold'].' / '.$i['gold_avg'].' '.$i['gems'].' / '.$i['gems_avg'].' '.$i['maxhitpoints_avg'].' '.$i['attack_avg'].' '.$i['defence_avg'].' '.$i['age_avg'].'
',true); break; case 'push': stats_nav(); $str_out = ''; // Introtext $str_out .= '`&Kritische Statussymbol-Werte:`0`n`n
`bEdelsteine (Top 50):`b`n`n'; // Tabelle $str_out_gem .= ''; $str_out_hp .= '
Platz Name Anzahl DKs
'; $str_out_charm .= '
Platz Name Anzahl LP-Grenze (Diff.) DKs
'; $str_out_wk .= '
Platz Name Anzahl DKs
'; $str_out_wk2 .= '
Platz Name Anzahl
'; // Inhalt $str_class = 'trlight'; $int_counter = 1; // Statistik abrufen: Edelsteine $sql = 'SELECT name,acctid,gems,gems + gemsinbank AS gemssum,dragonkills FROM accounts ORDER BY gemssum DESC LIMIT 50'; $res = db_query($sql); // Edelsteine while($c = db_fetch_assoc($res)) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $c['gems'] = number_format($c['gems']); $c['gemssum'] = number_format($c['gemssum']); $str_out_gem .= '' .'' .'' .'' .'' .''; $int_counter++; } //Edelsteine Gesamtzahl $sql='SELECT sum(gems) + sum(gemsinbank) AS gemstotal, count(acctid) AS usercount, avg(gems + gemsinbank) AS average FROM accounts'; $c=db_fetch_assoc(db_query($sql)); $c['gemstotal'] = number_format($c['gemstotal']); $c['average'] = number_format($c['average']); $c['usercount'] = number_format($c['usercount']); $str_out_gem .= ''; $int_counter = 1; // Statistik abrufen: LP $sql = 'SELECT name,acctid,maxhitpoints,dragonkills,level,dragonpoints FROM accounts ORDER BY maxhitpoints DESC LIMIT 50'; $res = db_query($sql); // LP while($c = db_fetch_assoc($res)) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $c['maxlp'] = get_max_hp($c); $c['diff'] = number_format($c['maxlp'] - $c['maxhitpoints']); $c['maxhitpoints'] = number_format($c['maxhitpoints']); $c['maxlp'] = number_format($c['maxlp']); $str_out_hp .= '' .'' .'' .'' .'' .'' .''; $int_counter++; } $int_counter = 1; // Statistik abrufen: Charme $sql = 'SELECT name,acctid,charm,dragonkills FROM accounts ORDER BY charm DESC LIMIT 50'; $res = db_query($sql); // Charme while($c = db_fetch_assoc($res)) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $c['charm'] = number_format($c['charm']); $str_out_charm .= '' .'' .'' .'' .'' .''; $int_counter++; } $int_counter = 1; // Statistik abrufen: Waldkämpfe $sql = 'SELECT name,acctid,turns,dragonkills, dragonpoints FROM accounts'; $res = db_query($sql); // Waldkämpfe $arr_users = array(); while($c = db_fetch_assoc($res)) { $arr_dragonpoints = unserialize($c['dragonpoints']); $int_wk = 0; if(!is_array($arr_dragonpoints)) { continue; } foreach ($arr_dragonpoints as $str_dragonpoint) { if($str_dragonpoint == 'ff') { $int_wk++; } } $arr_users[$c['name']] = $int_wk; } asort($arr_users); $arr_users = array_reverse($arr_users); $arr_users = array_slice($arr_users,0,50); foreach($arr_users as $key=>$val) { $str_class = ($str_class == 'trlight' ? 'trdark' : 'trlight'); $str_out_wk .= '' .'' .'' .'' .''; $int_counter++; } //Waldkämpfe nach der 1/3-Regelung $sql='SELECT acctid,login,dragonkills,dragonpoints FROM accounts WHERE dragonkills>50'; $res=db_query($sql); while($row=db_fetch_assoc($res)) { $ff=substr_count($row['dragonpoints'],'ff'); if($ff>=($row['dragonkills']/3.1)) { $row['ff']=$ff; if($row['dragonkills']<60) { $row['login']='`2'.$row['login'].'`0'; } $arr_users[$row['acctid']]=$row; $arr_values[$row['acctid']]=round($row['dragonkills']/$ff,2); } } asort($arr_values); foreach($arr_values as $key=>$val) { $i++; $str_out_wk2.=''; } $str_out_gem .= '
Platz Name DKs WK
'.$int_counter.''.$c['name'].'Σ:'.$c['gemssum'].'`n`(('.$c['gems'].')`0'.$c['dragonkills'].'
  Gems total: '.$c['gemstotal'].'
  Users: '.$c['usercount'].'
  Durchschnitt: '.$c['average'].'
'.$int_counter.''.$c['name'].''.$c['maxhitpoints'].''.$c['maxlp'].' ('.($c['diff'] < 0 ? '`$' : '`@').$c['diff'].')`0'.$c['dragonkills'].'
'.$int_counter.''.$c['name'].''.$c['charm'].''.$c['dragonkills'].'
'.$int_counter.''.$key.''.$val.'
'.$i.' '.$arr_users[$key]['login'].': '.$arr_users[$key]['dragonkills'].' '.$arr_users[$key]['ff'].'   (1:'.$val.')
'; $str_out_hp .= '
'; $str_out_charm .= ''; $str_out_wk .= ''; $str_out_wk2 .= ''; $str_out .= $str_out_gem.'   `bLebenspunkte (Top 50):`b`n`n '.$str_out_hp.' `bCharmepunkte (Top 50):`b`n`n '.$str_out_charm.'   `bWaldkämpfe (Top 50):`b`n`n '.$str_out_wk.' `bWaldkämpfe`b (>60DK <1:3):`n`n '.$str_out_wk2.'   `b `b`n`n '.$str_out_whatever.' '; output($str_out,true); break; case 'lastlogin': stats_nav(); $sql = "SELECT count(*) AS c, substring(laston,1,10) AS d FROM accounts GROUP BY d DESC ORDER BY d DESC"; $result = db_query($sql); output("`n`%`bDatum des letzten Logins:`b"); $output.=""; $class="trlight"; $odate=date("Y-m-d"); $j=0; for ($i=0;$i"; } // if ($j%7==0) $class=($class=="trlight"?"trdark":"trlight"); // $j++; $class=(date("W",strtotime($row['d']))%2?"trlight":"trdark"); $cumul+=$row['c']; $output.=""; $odate = $row['d']; } $output.="
0$cumul
{$row['d']}{$row['c']}$cumul
"; break; case 'topref': stats_nav(); output("`n`%`bTop Referers:`b`0`n "); $sql = "SELECT count(*) AS c, acct.acctid,acct.name AS referer FROM account_extra_info aei INNER JOIN accounts AS acct ON acct.acctid = aei.referer WHERE aei.referer>0 GROUP BY aei.referer DESC ORDER BY c DESC"; $result = db_query($sql); for ($i=0;$i ",true); } output("
Name Referrals
`@".$row['referer']."`0 `^".$row['c'].":`0 "); $sql = "SELECT name,refererawarded FROM accounts LEFT JOIN account_extra_info USING(acctid) WHERE referer = ${row['acctid']} ORDER BY accounts.acctid ASC"; $res2 = db_query($sql); for ($j = 0; $j < db_num_rows($res2); $j++) { $r = db_fetch_assoc($res2); output(($r['refererawarded']?"`&":"`$") . $r['name'] . "`0"); if ($j != db_num_rows($res2)-1) output(","); } output("
",true); break; case 'accountinfo': stats_nav(); $sql = "SELECT count(*) AS a FROM accounts"; $result = db_query($sql); $row = db_fetch_assoc($result); output("`b`%Für existierende Accounts:`0`b`n"); output("`@Accounts insgesamt: `^".number_format($row['a'])."`n"); /* output("`@Treffer insgesamt: `^".number_format($row['c'])."`n"); output("`@Seitengenerierungszeit insgesamt: `^".dhms($row['t'])."`n"); output("`@Seitengenerierungsgröße insgesamt: `^".number_format($row['s'])."b`n"); output("`@Durchschnittliche Seitengenerierungszeit: `^".dhms($row['t']/$row['c'],true)."`n"); output("`@Durchschnittliche Seitengröße: `^".number_format($row['s']/$row['c'])."`n");*/ break; case 'reset': if($_GET['act'] == 'ok') { $sql = 'UPDATE account_stats SET logintime=0, onlinetime=0, comments=0, pvpkilled=0, pvpkills=0, mailsent=0, mailreceived=0, turns_not_used=0, commentlength=0'; db_query($sql); if(!db_error(LINK)) { $session['message'] = '`@Statistiken erfolgreich zurückgesetzt!'; savesetting('stats_start',date('Y-m-d H:i:s')); systemlog('Setzte die Statistiken zurück',$session['user']['acctid']); } else { $session['message'] = '`$Fehler bei Zurücksetzen!'; } redirect($str_filename); } else { output('`$`bBist du dir sicher, die bisher gesammelten Daten verwerfen und die Erhebung neu beginnen zu wollen?`b`&'); addnav('Nein, zurück',$str_filename); addnav('Ja, Reset!',$str_filename.'?op=reset&act=ok'); } break; case 'runes': require_once(LIB_PATH.'runes.lib.php'); stats_nav(); $res = db_query('SELECT rei.name, rei.seltenheit, (SELECT COUNT(*) FROM '.ITEMS_TABLE.' i WHERE i.tpl_id = rei.tpl_id) AS icount, (SELECT COUNT(*) FROM '.ITEMS_TABLE.' i WHERE i.tpl_id = "'.RUNE_DUMMY_TPL.'" AND i.value2=rei.id) AS uicount FROM '.RUNE_EI_TABLE.' rei'); $str_out .= '
`cMagiegegenstände`c
'; $summe = 0; $gchart_names = array(); $gchart_ident = array(); $gchart_uident = array(); $gchart_max = 0; $gchart_label = ''; $gchart_rarity = array( array('sehr+oft', 50), array('oft', 100), array('durchschnittlich', 170), array('selten', 233), array('sehr+selten', 255) ); $rar_id = 0; $i=0; while( ($rune = db_fetch_assoc($res)) ){ $ident = $rune['icount']; //item_count('tpl_id="'.$rune['tpl_id'].'"'); $unident = $rune['uicount']; //item_count('tpl_id="'.RUNE_DUMMY_TPL.'" AND value2='.$rune['id']); if( $rune['seltenheit'] > $gchart_rarity[$rar_id][1] ){ ++$rar_id; } if( $gchart_rarity[$rar_id][0]!==false ){ $gchart_names[] = ''; $gchart_ident[] = 0; $gchart_uident[] = 0; $gchart_label .= sprintf('%st%s,000000,0,%d,11', ($i?'|':''), $gchart_rarity[$rar_id][0], $i++); $gchart_rarity[$rar_id][0] = false; } $gchart_names[] = $rune['name']; $gchart_ident[] = $ident; $gchart_uident[] = $unident; $gchart_label .= sprintf('%stI:+%d+U:+%d+G:+%d,000000,%d,%d,11', ($i?'|':''),$ident, $unident, $ident+$unident, ($unident ? 1 : 0),$i++); $gchart_max = max($gchart_max, $ident+$unident); $summe += $ident+$unident; } $r_count = getsetting('runes_count_newday',0); $magic = db_query('SELECT tpl.tpl_name, COUNT( i.tpl_id ) AS cnt FROM `items_tpl` tpl JOIN items i ON i.tpl_id = tpl.tpl_id WHERE tpl.tpl_id IN ('.RUNE_MAGIC_STUFF.') GROUP BY tpl.tpl_id'); $str_out .= ''; while( ($m = db_fetch_assoc($magic)) ){ $class =( $class == 'trdark' ? 'trlight' : 'trdark'); $str_out .= ''; } $str_out .= '
NameAnzahl
`&'.$m['tpl_name'].'`0'.$m['cnt'].'
'; //google chart $gchart_max += 1000; $gchart_names = array_reverse($gchart_names); $gchart_names = implode('|',$gchart_names); $gchart_ident = implode(',',$gchart_ident); $gchart_uident = implode(',',$gchart_uident); $g_chart = 'http://chart.apis.google.com/chart?cht=bhs&chs=600x500' //URL, typ, maße //Skalierung Bar-Farben Bar-Höhe Beschriftungsachse .'&chds=0,'.$gchart_max.'&chco=3d79e9,ffa0a0&chbh=10&chxt=y' //Gradient .'&chf=bg,lg,90,76A4FB,0.5,ffffff,0' //Titelfarbe,size Titel .'&chts=000000,12&chtt=Runenstatistik|' //Gesamt .'Gesamt:+'.$summe.'+%28%2B'.($summe-$r_count).'%29|' .'Gestern:+'.$r_count.'+%28%2B'.getsetting('runes_count_diff',0).'%29' // Daten Ident Unident .'&chd=t:'.$gchart_ident.'|'.$gchart_uident // Runennamen beschriftung .'&chxl=0:|'.$gchart_names // Bar-Beschriftung .'&chm='.$gchart_label; //output($g_chart); output('`c'.$str_out); output('
`c'); break; case 'browser': stats_nav(); $qry = 'SELECT browser, browser_version, COUNT(*) as cnt FROM account_stats GROUP BY browser, browser_version'; $res = db_query( $qry ); $browser = array(); $lastb = ''; $lasti = -1; //$count = 0; $max = 0; while( ($b = db_fetch_assoc( $res )) ){ if( $lastb != $b['browser'] ){ $lastb = $b['browser']; $lasti++; array_push($browser,array('count'=>$b['cnt'], 'name'=>$b['browser'], 'versions'=> array( array('count'=>$b['cnt'], 'v'=>$b['browser_version']) ) )); $max += $b['cnt']; } else{ array_push($browser[$lasti]['versions'], array('count'=>$b['cnt'], 'v'=>$b['browser_version'] )); $browser[$lasti]['count'] += $b['cnt']; $max += $b['cnt']; } } uasort( $browser, 'sort_browser_cb' ); reset($browser); require_once(LIB_PATH.'browser.lib.php'); $gchart_data = array(); $gchart_label= array(); // Browser $str_out = ''; foreach( $browser as $b ){ $perc = number_format(($b['count']/$max)*100, 2, '.', ''); $gchart_label[] = browser_longname($b['name']).'+'.$perc.'%25'; $gchart_perc[] = $perc; asort($b['versions'], SORT_NUMERIC ); reset($b['versions']); $gbrochart_label = array(); $gbrochart_perc = array(); foreach( $b['versions'] as $v ){ $perc = number_format(($v['count']/$b['count'])*100, 2, '.', ''); $gbrochart_label[] = 'Ver. '.$v['v'].'+'.$perc.'%25'; $gbrochart_perc[] = $perc; } $g_brochart[] = 'http://chart.apis.google.com/chart?chs=400x200&cht=p' //Gradient .'&chf=bg,s,76A4FB' //Überschrift .'&chtt='.browser_longname($b['name']).'&chts=000000,20' //Prozente: .'&chd=t:'.implode(',', $gbrochart_perc) //Beschriftung .'&chl='.implode('|', $gbrochart_label); } $g_chart = 'http://chart.apis.google.com/chart?chs=400x200&cht=p' //Gradient .'&chf=bg,s,76A4FB' //Überschrift .'&chtt=Browser-Verteilung&chts=000000,20' //Prozente: .'&chd=t:'.implode(',', $gchart_perc) //Beschriftung .'&chl='.implode('|', $gchart_label); $str_out = '
'; $i=1; foreach($g_brochart as $chart){ $str_out .= ''; if(++$i%2){ $str_out .= ''; } } $str_out .= '
`c`c
`c`c
'; output($str_out); break; // TEMP case 'exp_kaserne': stats_nav(); $str_out .= ''; for($i=10;$i<=300;$i+=50) { for($j=1;$j<15;$j+=2) { $int_rec = get_exp_required($j-1,$i); $int_req = get_exp_required($j,$i); $int_rec_alt = round($int_rec*0.1); $int_rec_neu1 = round(max($int_req - $int_rec,0) * 0.3); $int_rec_neu2 = round(max($int_req - $int_rec,0) * 0.4); $str_out .= ''; $str_out .= ''; $str_out .= ''; $str_out .= ''; $str_out .= ''; $str_out .= ''; $str_out .= ''; $str_out .= ''; } $str_out .= ''; } output($str_out.'
DK & Level EXP zu Beginn des Levels Benötigte EXP für nächsten Level Kaserne (10% von EP) Neue Formel (30% der benötigten EXP) Neue Formel II (40% der benötigten EXP)
'.$i.'. DK, Lvl '.$j.''.$int_rec.''.$int_req.''.$int_rec_alt.''.($int_rec_neu1 >= $int_rec_alt ? '`@' : '`$').$int_rec_neu1.'`0'.($int_rec_neu2 >= $int_rec_alt ? '`@' : '`$').$int_rec_neu2.'`0

'); break; // Hm.. default: output('Was hast du denn HIER verloren?! Op: '.$op); addnav('Zurück',$str_filename . ''); break; } page_footer(); ?>