* @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 .= '
| Platz |
Name |
Wert |
';
// 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 .' |
'.$s['name'] .'`0 |
'.$str_grafbar.' `b'.$s['val'].'`b |
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Platz |
Name |
Wert |
';
// 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 .' |
'.$s['name'] .'`0 |
`b'.$s['anzahl'].'`b |
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Platz |
Section |
Anzahl |
Durch. Länge |
';
$str_out_time .= '
| Platz |
Stunde |
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.' | '
.''.$c['section'].' | '
.''.$c['a'].' | '
.''.$c['length'].' | '
.' ';
$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.' | '
.''.$c['hour'].' Uhr - '.$c['hour_until'].' Uhr | '
.''.$c['a'].' | '
.''.$c['length'].' | '
.' ';
$int_counter++;
}
$str_out_sec .= ' ';
$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 .= '
| Platz |
Skin |
Anzahl |
';
// 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 .' |
'.$name .'`0 |
'.$str_grafbar.' `b'.$val.'`b |
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Platz |
Skin |
Anzahl |
';
// 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 .' |
'.$name .'`0 |
'.$str_grafbar.' `b'.$val.'`b |
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Option |
Anzahl |
';
// Inhalt
foreach($arr_disp_prefs as $key=>$val)
{
$val = number_format($val);
$bgclass=$bgclass=='trdark'?'trlight':'trdark';
$str_out .= '
| '.$key.' |
`b'.$val.'`b |
';
}
$str_out .= '
';
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 .= '
| Platz |
Rasse |
Anzahl |
Dur.schn. DK |
Dur.schn. Komment. |
Dur.schn. Kommentlänge. |
';
// Inhalt
$str_class = 'trlight';
$int_counter = 1;
while($m = db_fetch_assoc($res)) {
$m['a'] = number_format($m['a']);
$str_out .= ''
.'| '.$int_counter.' | '
.''.$m['race'].'`0 | '
.''.$m['a'].' | '
.''.$m['dk'].' | '
.''.$m['com'].' | '
.''.$m['comlen'].' | '
.'
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Platz |
Fertigkeit |
Anzahl |
';
// Inhalt
$str_class = 'trlight';
$int_counter = 1;
while($m = db_fetch_assoc($res)) {
$str_out .= ''
.'| '.$int_counter.' | '
.''.$m['specname'].' | '
.''.$m['anzahl'].' | '
.'
';
$int_counter++;
}
$str_out .= '
';
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 .= '
| Platz |
Tier |
Anzahl |
Durchschn. DK |
';
// Inhalt
$str_class = 'trlight';
$int_counter = 1;
while($m = db_fetch_assoc($res)) {
$m['a'] = number_format($m['a']);
$str_out .= ''
.'| '.$int_counter.' | '
.''.$m['name'].'`0 | '
.''.$m['a'].' | '
.''.$m['dk'].' | '
.'
';
$int_counter++;
}
$str_out .= '
';
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('
| DKs |
Level |
Anzahl abs./ % |
Gold ges./durchschn. |
Gems ges./durchschn. |
LP durchschn. |
Angriff durchschn. |
Def durchschn. |
Alter durchschn. |
',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('| `b'.$dk.' DKs`b | Alle |
'.$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'].' |
'
,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('| - | '.$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);
$class = ($class == 'trlight'?'trdark':'trlight');
}
}
output('
',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 .= '
| Platz |
Name |
Anzahl |
DKs |
';
$str_out_hp .= '
| Platz |
Name |
Anzahl |
LP-Grenze (Diff.) |
DKs |
';
$str_out_charm .= '
| Platz |
Name |
Anzahl |
DKs |
';
$str_out_wk .= '
| Platz |
Name |
Anzahl |
';
$str_out_wk2 .= '
| Platz |
Name |
DKs |
WK |
';
// 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.' | '
.''.$c['name'].' | '
.'Σ:'.$c['gemssum'].'`n`(('.$c['gems'].')`0 | '
.''.$c['dragonkills'].' | '
.' ';
$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 .= '
| |
Gems total: |
'.$c['gemstotal'].' |
| |
Users: |
'.$c['usercount'].' |
| |
Durchschnitt: |
'.$c['average'].' |
';
$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.' | '
.''.$c['name'].' | '
.''.$c['maxhitpoints'].' | '
.''.$c['maxlp'].' ('.($c['diff'] < 0 ? '`$' : '`@').$c['diff'].')`0 | '
.''.$c['dragonkills'].' | '
.' ';
$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.' | '
.''.$c['name'].' | '
.''.$c['charm'].' | '
.''.$c['dragonkills'].' | '
.' ';
$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.' | '
.''.$key.' | '
.''.$val.' | '
.' ';
$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.='
| '.$i.' |
'.$arr_users[$key]['login'].': |
'.$arr_users[$key]['dragonkills'].' |
'.$arr_users[$key]['ff'].' (1:'.$val.') |
';
}
$str_out_gem .= ' ';
$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| ".date("Y-m-d",strtotime("$odate -$x days"))." | 0 | $cumul | ";
}
// if ($j%7==0) $class=($class=="trlight"?"trdark":"trlight");
// $j++;
$class=(date("W",strtotime($row['d']))%2?"trlight":"trdark");
$cumul+=$row['c'];
$output.="| {$row['d']} | {$row['c']} | $cumul |
";
$odate = $row['d'];
}
$output.="
";
break;
case 'topref':
stats_nav();
output("`n`%`bTop Referers:`b`0`n
| Name |
Referrals |
");
$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
`@".$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);
}
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 .= '| Name | Anzahl | ';
while( ($m = db_fetch_assoc($magic)) ){
$class =( $class == 'trdark' ? 'trlight' : 'trdark');
$str_out .= '| `&'.$m['tpl_name'].'`0 | '.$m['cnt'].' | ';
}
$str_out .= '
|
';
//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 = '`c `c |
';
$i=1;
foreach($g_brochart as $chart){
$str_out .= '`c `c | ';
if(++$i%2){
$str_out .= '
';
}
}
$str_out .= '
';
output($str_out);
break;
// TEMP
case 'exp_kaserne':
stats_nav();
$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) |
';
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 .= '| '.$i.'. DK, Lvl '.$j.' | ';
$str_out .= ''.$int_rec.' | ';
$str_out .= ''.$int_req.' | ';
$str_out .= ''.$int_rec_alt.' | ';
$str_out .= ''.($int_rec_neu1 >= $int_rec_alt ? '`@' : '`$').$int_rec_neu1.'`0 | ';
$str_out .= ''.($int_rec_neu2 >= $int_rec_alt ? '`@' : '`$').$int_rec_neu2.'`0 | ';
$str_out .= '
';
}
$str_out .= '
|
';
}
output($str_out.'
');
break;
// Hm..
default:
output('Was hast du denn HIER verloren?! Op: '.$op);
addnav('Zurück',$str_filename . '');
break;
}
page_footer();
?>