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; ?>