$DONT_OVERWRITE_NAV = true;
$BOOL_JS_HTTP_REQUEST = true;
require_once('common.php');
$section = $session['user']['chat_section'];
$check_newday = true;
function check_section(){
global $section, $session;
if( $section == '' ){
if( (int)$session['user']['acctid'] ){
$res = db_fetch_assoc(db_query('SELECT chat_section FROM accounts WHERE acctid='.((int)$session['user']['acctid']).' LIMIT 1'));
if( $res['section']=='' ){
jslib_http_command('/mb Sie befinden sich in keiner gültigen Section!');
}
else{
$section = $session['user']['chat_section'] = $res['section'];
session_write_close();
}
}
else{
jslib_http_command('/mb Sie befinden sich in keiner gültigen Section!');
}
}
}
$command = false;
//wenn chat, dann section checken
if(strpos('chat_',$_GET['op']) !== false){
check_section();
}
switch( $_GET['op'] ){
//CHAT
case 'chat_add':
if( $session['user']['activated'] == USER_ACTIVATED_MUTE ){
jslib_http_command('/exec document.getElementById("chat_write").style.display = "none"; MessageBox.show("`4Du wurdest geknebelt und darfst nichts mehr schreiben!"); g_chat.reload();');
}
$commentary = trim($_POST['txt']);
$flags = (int)$_POST['flags'];
$multi = (int)$_POST['multi'];
$multi_sum = (int)$_POST['multi_sum'];
$add_id = (int)$session['user']['acctid'];
if( $multi_sum == jslib_multi_sum($add_id, $multi) ){
$add_id = $multi;
}
else{
if(LOCAL_TESTSERVER == false)
{
jslib_http_command('/exec MessageBox.show("`4Fehler! Falsche Prüfsumme übermittelt!"); g_chat.reload();');
}
}
// Codierung durch escape auf Client-Seite rückgängig machen
$commentary = preg_replace('/%u([0-9A-F]{4})/','$1;',$commentary);
$commentary = html_entity_decode($commentary);
// Doppelte Leerzeichen durch eins ersetzen
$commentary = preg_replace('/[\s]{2,}/',' ',$commentary);
// Zu lange Worte umbrechen
if(strlen($commentary) > 40) {
// talion: für knappen spezielle behandlung erforderlich. Nicht sehr schön!
// Wörterumbruch sollte zmd. in diesem Fall vllt. auch auf Clientseite erfolgen
if($flags & COMMENTARY_DISCIPLE) {
$from = strpos($commentary,'}}');
if($from > 0) {
$process = substr($commentary,$from,getsetting('chat_post_len_max',7000)-$from);
$commentary = substr($commentary,0,$from).preg_replace('/([\S]{20,39})([\S]{20,39})/','$1 $2',$process);
}
}
else {
$commentary = preg_replace('/([\S]{20,39})([\S]{20,39})/','$1 $2',$commentary);
$commentary = substr($commentary,0,getsetting('chat_post_len_max',7000));
}
}
if(!empty($commentary)){
//geschriebenes einfügen
insertcommentary( $add_id, $commentary, $section, $_GET['su'], 1, $flags );
//Zufallskommentare
if( e_rand(1,2) == 1 && $rcomment_sections[$section] ) {
$weather_id = (int)getsetting('weather',1);
$time = gametime();
$hour = (int)date('H',$time);
$month = get_gamedate_part('m');
$section_inside = $rcomment_sections_inside[$section];
$section_public = $rcomment_sections_public[$section];
$random = e_rand(1,250);
$sql = 'SELECT comment,gap,id,chance FROM random_commentary WHERE
(section="'.$section.'" OR
section="" '
.($section_inside ? ' OR (section = "all_inside")' : ' OR (section = "all_outside")')
.($section_public ? ' OR (section = "all_public")' : ' OR (section = "all_private")').
') AND (chance > '.((int)$random).') AND
(weather = '.$weather_id.' OR weather=0) AND
(month_min <= '.$month.' AND month_max >= '.$month.') AND
(hour_min <= '.$hour.' AND hour_max >= '.$hour.') AND
(rldate = CURDATE() OR rldate = "0000-00-00")
ORDER BY RAND()';
$res = db_query($sql);
if( db_num_rows($res) ) {
$history = unserialize(getsetting('rcomhistory',''));
while( $c = db_fetch_assoc($res) ) {
$last = false;
// Keine "Doppelposts", gap bestimmt die Anzahl anderer Zufallsposts dazwischen
if(is_array($history[$section])) {
$start_count = sizeof($history[$section])-1;
$max_count = max($start_count - $c['gap'],-1);
for($i = $start_count; $i > $max_count; $i--) {
if($history[$section][$i] == $c['id']){
$last=true;
}
}
$i = 0;
}
if($last == false) {
insertcommentary(1,$c['comment'],$section);
$history[$section][] = $c['id'];
savesetting('rcomhistory',serialize($history));
//jslib_http_command('/mb section: '.$section.':'.$c['comment']);
break;
}
} // END while
db_free_result($res);
}
}
// Stats + RP-Belohnung
$int_len = strlen($commentary);
$arr_change = array( 'comments'=>'comments+1','commentlength'=>'commentlength+'.$int_len );
if(getsetting('rpdon_dpcomment','0') && $int_len >= getsetting('rpdon_minlen',100)) {
$arr_sections = explode(',',getsetting('rpdon_sections','village'));
if(in_array($section,$arr_sections)) {
$arr_change['comments_rp'] = 'comments_rp+1';
}
}
user_set_stats( $arr_change, $add_id );
//sectionspecial
if( $_GET['s']==1 && is_file('./chat_specials/'.$section.'.php') ){
require_once('./chat_specials/'.$section.'.php');
}
$str_back = 'reload';
$command = true;
}
// Wenn wir uns dem Timeout nähern: Mal updaten
// laston_back wird in user_load gesetzt und enthält den Wert des letzten lastons
if($session['lasthit'] - strtotime($session['laston_back']) > getsetting('LOGINTIMEOUT',900) * 0.5) {
user_update(
array
(
'laston'=>array('sql'=>true,'value'=>'NOW()'),
),
$session['user']['acctid']
);
}
break;
case 'chat_page':
$int_id = (int)$_GET['id'];
$bool_direction = (bool)$_GET['d'];
$int_count = (int)$_GET['count'];
$int_count = min($int_count,100);
$int_count = max($int_count,0);
$str_where = 'WHERE section = "'.$section.'"
'.($bool_direction
? ' AND commentid>'.$int_id
: ' AND commentid<'.$int_id
).'
AND deleted_by = 0 '.
($session['disable_npc_comment'] ? 'AND self=1' : '').'
ORDER BY commentid DESC';
if($bool_direction) {
$arr_tmp = db_fetch_assoc(db_query('SELECT COUNT(*) AS c FROM commentary '.$str_where));
$int_c = $arr_tmp['c'];
}
else {
$int_c = 1;
}
if($int_c) {
// AEI interessiert uns nur, wenn wir auch das Recht haben, Bio-HTML zu sperren
$bool_lockhtml = $access_control->su_check(access_control::SU_RIGHT_LOCKHTML);
$sql = 'SELECT commentary.commentid,
commentary.comment,
commentary.flags,'
.($session['user']['prefs']['timestamps']? 'commentary.postdate,':'')
.($session['disable_npc_comment'] && $only_rpg ? 'commentary.self,' :'')
.'accounts.name,
accounts.login,
accounts.acctid,
accounts.loggedin,
accounts.location,
accounts.laston,
accounts.superuser,
accounts.imprisoned,
accounts.activated,
accounts.expedition
'.($bool_lockhtml ? ',aei.html_locked' : '').'
FROM commentary
INNER JOIN accounts
ON accounts.acctid = commentary.author
'.($bool_lockhtml ? ' INNER JOIN account_extra_info aei ON accounts.acctid=aei.acctid ' : '').'
'.$str_where.'
LIMIT 0,'.$int_count;
$res = db_query($sql);
$int_c = db_num_rows($res);
$li = 0;
while( ($cm = db_fetch_assoc( $res )) ){
$li = $cm['commentid'];
//
'.(has_avatar( $cm['acctid'] ) ? '1' : '0').'
$str_back = '
'.$cm['commentid'].'
'.$cm['acctid'].'
'.jslib_getmenuuserconfnum( $cm, $cm ).'
'
.($session['user']['prefs']['timestamps']? '': '').
''.$str_back;
}
if( $li ){
if($bool_direction) {
$session['chat']['lastid'] = $li;
}
else {
$session['chat']['startid'] = $li;
}
}
}
header('Content-Type: text/xml; charset:utf-8');
$str_back = '
'.($bool_direction ? '1' : '0').'
'.$int_id.'
'.$int_count.'
'.$int_c.'
'.$str_back.'
';
//if($bool_direction) {
session_write_close();
// Wenn wir uns dem Timeout nähern: Mal updaten
// laston_back wird in user_load gesetzt und enthält den Wert des letzten lastons
if($session['lasthit'] - strtotime($session['laston_back']) > getsetting('LOGINTIMEOUT',900) * 0.5) {
user_update(
array
(
'laston'=>array('sql'=>true,'value'=>'NOW()'),
),
$session['user']['acctid']
);
}
//}
break;
case 'chat_logout':
$session['user']['loggedin'] = false;
saveuser();
$str_back = 'timeout';
$command = true;
//$session['user']['acctid'] = 0;
session_write_close();
break;
case 'chat_comperpage':
$int_commentlimit = (int)$_GET['v'];
$int_commentlimit = min($int_commentlimit,75);
$int_commentlimit = max($int_commentlimit,5);
if($int_commentlimit > 0 && !empty($section)) {
$session['user']['prefs']['commentlimit'][$section] = $int_commentlimit;
}
saveuser();
break;
case 'chat_init':
$command = true;
$str_back = '/exec g_conf = '.jslib_getchatparams().';';
break;
case 'chat_nonrp':
$session['disable_npc_comment'] = $session['disable_npc_comment'] ? false : true;
session_write_close();
break;
case 'switch_chatstatus':
$session['user']['chat_status'] = (int)$_GET['status'];
user_update(
array
(
'chat_status'=>(int)$_GET['status'],
),
$session['user']['acctid']
);
session_write_close();
break;
//PLUMI Switch
case 'switch_plu_mi':
if( !is_array($session['user']['plu_mi']) ){
$session['user']['plu_mi'] = array();
}
$session['user']['plu_mi'][ $_POST['field'] ] = $session['user']['plu_mi'][ $_POST['field'] ] ? 0 : 1;
user_update(
array
(
'plu_mi'=>$session['user']['plu_mi'],
),
$session['user']['acctid']
);
session_write_close();
break;
// AJAX-Suche
case 'search':
$command = true;
// Präfix für JS-Elemente
$str_prefix = $_GET['prefix'];
// Art der Suche
$str_what = $_GET['what'];
// Eingabe
$str_search_in = stripslashes($_POST['search']);
// Suchstring erstellen
$str_search = str_create_search_string($str_search_in);
// Fallunterscheidung nach Art der Suche
switch($str_what) {
case 'account':
$sql = 'SELECT acctid,name,login FROM accounts WHERE name LIKE "'.$str_search.'" ORDER BY (login="'.addslashes($str_search_in).'") DESC, name ASC';
$res = db_query($sql);
$int_found = db_num_rows($res);
if($int_found == 0) {
$str_back = '/exec MessageBox.show("Leider konnte kein Bürger mit diesem Namen gefunden werden.");';
}
else {
$str_back = '/exec var sel = document.getElementById("'.$str_prefix.'search_sel");var o = null;';
if ($int_found > 50) {
$str_back .= 'MessageBox.show("Es wurden über 50 Bürger mit einem ähnlichen Namen gefunden. Nur die ersten 50 werden angezeigt.");';
}
// Select-Liste erstellen
$int_counter = 0;
while($arr_a = db_fetch_assoc($res)) {
if(++$int_counter > 50) break;
$str_back .= "o = new Option('".addslashes(strip_appoencode($arr_a['name'],3))."',".$arr_a['acctid'].");sel.options[sel.options.length] = o;";
}
$str_back .= ''.$str_prefix.'search_switch(false);';
}
db_free_result($res);
break;
}
break;
case 'OOL_load':
header('Content-Type: text/xml; charset:utf-8');
$str_back = '';
$sql = 'SELECT name, acctid, chat_status, login, expedition, imprisoned, activated FROM accounts WHERE chat_section="'.$session['user']['chat_section'].'" AND
'.user_get_online().' AND
'.($session['user']['superuser'] ? '' : 'chat_status <> '.((int)CHAT_STATUS_INVISIBLE).' AND ').
'acctid<>'.$session['user']['acctid'].' ORDER BY dragonkills DESC';
$res = db_query($sql);
while($row = db_fetch_assoc($res)){
$str_back .= '
'.$row['acctid'].'
'.jslib_getmenuuserconfnum( $row, $row ).'
'.$row['chat_status'].'
';
}
$str_back .= '';
break;
case 'switch_bit':
user_update(
array
(
$_GET['bn']=>(int)user_setConfBit($_GET['bit'], UBIT_SWITCH, $session['user'][$_GET['bn']]),
),
$session['user']['acctid']
);
session_write_close();
break;
case 'kbase_get':
require_once LIB_PATH.'kbase.lib.php';
$row = kbase_get_entry( intval($_GET['id']) );
header('Content-Type: text/xml; charset:utf-8');
$str_back = '';
$str_back .= '';
$str_back .= '';
break;
case 'kbase_add':
require_once LIB_PATH.'kbase.lib.php';
kbase_increase_entrycounter( intval($_GET['id']) );
break;
case 'kbase_auto_search':
require_once LIB_PATH.'kbase.lib.php';
$post = strtolower($_POST['post']);
//$command = true;
$res = db_query('SELECT * FROM '.KBASE_TABLE.'');
$arr = array();
$sorting = array();
while( ($r = db_fetch_assoc($res)) ){
$in = 0;
for($i=0;$i<5;++$i){
if( !empty($r['kw_'.$i]) && strstr($post, $r['kw_'.$i]) ){
$in++;
}
}
if( $in ){
$my_arr = array('in'=>$in,'id'=>$r['id'], 'question'=>$r['question'], 'answer'=>$r['answer'],
'plumi'=>plu_mi('kb_auto_search_result_'.$r['id'],0,false),
'plumi_id'=>plu_mi_unique_id('kb_auto_search_result_'.$r['id']));
array_push($arr, $my_arr);
array_push($sorting,$in);
}
}
reset($arr);
array_multisort($sorting, SORT_DESC|SORT_NUMERIC, $arr);
reset($arr);
header('Content-Type: text/xml; charset:utf-8');
$str_back = arrayToXML($arr, 'item', 'root', true);
break;
case 'map_save_settings':
$sql = 'UPDATE account_map SET
name="'.addslashes(strip_appoencode($_POST['name'],3)).'",
nachname="'.addslashes(strip_appoencode($_POST['nachname'],3)).'",
kontakt="'.addslashes(strip_appoencode($_POST['kontakt'],3)).'",
umkreis='.intval($_POST['umkreis']).',
alert_user='.intval($_POST['alert_user']).',
alert_event='.intval($_POST['alert_event']).',
sex='.intval($_POST['sex']).'
WHERE acctid='.intval($session['user']['acctid']);
db_query($sql);
$check_newday = false;
$command = true;
$str_back='/mb Erfolg!';
break;
case 'map_set_pos':
$lat = floatval($_POST['lat']);
$lng = floatval($_POST['lng']);
$sql = 'UPDATE account_map SET
lat="'.$lat.'",
lng="'.$lng.'"
WHERE acctid='.intval($session['user']['acctid']);
db_query($sql);
if( $lat != 0.0 && $lng != 0.0 ){
if( !isset($session['umap_lastsave']) || (time()-$session['umap_lastsave'] > 600) ){
$sql = 'SELECT acctid, umkreis FROM account_map
WHERE acctid<>'.intval($session['user']['acctid']).'
AND alert_user=1 AND gm_calc_distance(lat, lng, "'.$lat.'", "'.$lng.'")<=umkreis';
$res= db_query($sql);
for(;($u = db_fetch_assoc($res));){
$body = '`t'.$session['user']['name'].'`t hat '.($session['user']['sex'] ? 'ihren' : 'seinen').' Standpunkt auf der Spielerkarte hinzugefügt.';
if( $u['umkreis'] != 999999 ){
$body .= '`n'.($session['user']['sex'] ? 'Sie' : 'Er').' wohnt in deinem angegebenen Umkreis von '.$u['umkreis'].'km.';
}
systemmail($u['acctid'], '`yNeuer Benutzer in deinem Umkreis', $body);
$session['umap_lastsave'] = time();
}
}
}
$check_newday = false;
$command = true;
$str_back='/mb Erfolg!';
break;
case 'map_delete_user':
db_squeryf('DELETE FROM account_map WHERE acctid=%d',$session['user']['acctid']);
$check_newday = false;
$command = true;
$str_back='/go usermap.php';
break;
case 'map_23':
$users = getsetting('usermap_23','');
$save = true;
if( !empty($users) ){
$users= explode(',',$users);
if( !is_array($users) ){
$users = array($users);
}
if( !in_array($session['user']['login'],$users) ){
array_push($users, $session['user']['login']);
reset($users);
sort($users, SORT_STRING);
}
else{
$save = false;
}
}
else{
$users = array($session['user']['login']);
}
$str = implode(',',$users);
if( $save ){
savesetting('usermap_23',$str);
}
$check_newday = false;
$command = true;
$str_back='/exec g_GMSetTool.m_23="'.str_replace(',',', ',$str).'";';
break;
case 'collect':
if( md5(getsetting('collect_special_section', '').getsetting('collect_special_lastklick', 0)) ==
$_GET['collect'] ){
$sections = getsetting('collect_special_rnd_sections', '');
$sections = explode(',', $sections);
savesetting('collect_special_lastklick', time());
savesetting('collect_special_section', $sections[array_rand($sections)]);
db_query('UPDATE account_stats SET collect_special=collect_special+1 WHERE acctid='.((int)$session['user']['acctid']));
$str_back = 'Juhu! Du schnappst es dir.';
}
else{
$str_back = 'Da war wohl jemand schneller als du!';
}
$command = true;
$str_back = '/mb '.$str_back;
break;
case 'su_jump':
//Recht überprüfen
if($access_control->su_check(access_control::SU_RIGHT_QUICKNAV) == false)
{
jslib_http_text_output('error',JSLIB_HTTP_TEXT);
}
$arr_path = explode("?",$_GET['su_jump_file']);
$arr_path_info = pathinfo($arr_path[0]);
$str_file = ($arr_path_info['dirname'] != '.'?$arr_path_info['dirname'].'/':'').$arr_path_info['basename'];
if(file_exists($str_file) == true)
{
$str_file .= ($arr_path[1] != ''?'?'.$arr_path[1]:'');
$command = true;
addnav('',$str_file);
$str_back = '/go '.$str_file;
saveuser();
}
else
{
jslib_http_text_output('error',JSLIB_HTTP_TEXT);
}
break;
}
if( $check_newday && is_new_day() )
{
//jslib_http_command('/mb '.$session['user']['restorepage']);
// führt in der badnav.php zum Aufruf von checkday()
// (und rettet uns vor dem Reload-Bug) (hab mal den tipfehler entfert sonst wird das nichts)
$session['user']['output'] .= '';
$session['debug'] .= 'newday in httpreq';
$session['allowednavs']=array();
addnav('','newday.php');
saveuser();
jslib_http_command('newday');
}
if( $command || empty($str_back) )
{
jslib_http_command($str_back);
}
else
{
echo $str_back;
}
exit;
?>