query("SET NAMES ? ",$database['db_encoding']); $adb->setErrorHandler("databaseErrorHandler"); $char = Char::initialization($guid, $adb); $char->test->Guid('ajax'); $char->test->Afk(); $lang = $char->getLang(); $char_db = $char->getChar('char_db', 'login', 'city', 'room', 'chat_shut', 'chat_filter', 'chat_sys', 'chat_update'); ArrToVar($char_db); $do = getVar('do', '', 2); switch ($do) { /*Talk*/ case 'sendmessage': $h = getVar('h'); $commands = $adb->selectCol("SELECT `name` FROM `server_commands`;"); $command = false; if ((!$h && !is_numeric($h)) || $chat_shut) returnAjax('none'); $color = $char->getChar('char_info', 'color'); if ($h[0] == '/') { foreach ($commands as $num => $name) { if (utf8_substr($h, 0, utf8_strlen($name)) == $name && $char->chat->executeCommand($name, $h)) returnAjax('complete'); } } $h = str_replace("\n", "", $h); $to = split(']', str_replace(array('to [', 'private ['), "]", $h)); if (isset($to[1])) { $h = preg_replace("/private \[$to[1]/", "private [", $h, 1); $to = str_replace(", ", ",", $to[1]); } else $to = ''; if (utf8_substr($h, 0, 4) == 'to [') $class = 'to'; else if (utf8_substr($h, 0, 9) == 'private [') $class = 'private'; else $class = 'all'; $char->setChar('char_db', array('afk' => 0)); if ($adb->query("INSERT INTO `city_chat` (`sender`, `to`, `room`, `msg`, `class`, `date_stamp`, `city`) VALUES (?s, ?s, ?s, ?s, ?s, ?d, ?s)", $login ,$to ,$room ,"$h" ,$class ,time() ,$city)) returnAjax('complete'); else returnAjax('error'); break; /*Users*/ case 'refreshusers': $room_online = $adb->selectCell("SELECT COUNT(*) FROM `online` WHERE `city` = ?s and `room` = ?s", $city ,$room); $room_name = $char->city->getRoom($room, $city, 'name'); $user_list = "$room_name ($room_online)
"; $rows = $adb->select("SELECT `guid`, `last_time` FROM `online` WHERE `city` = ?s and `room` = ?s ORDER by `login_display`", $city ,$room); foreach ($rows as $online) { if ($char->test->Online($online['guid'])) $user_list .= $char->getLogin('online', $online['guid']); } returnAjax($user_list); break; /*Msg*/ case 'refreshmessage': $char->setChar('char_db', array('last_time' => time())); $char->setChar('online', array('last_time' => time())); $go = getVar('go'); $send = ""; $last_t = (checks('last_t')) ?$_SESSION['last_t'] :0; $last_m = (checks('last_m')) ?$_SESSION['last_m'] :0; if (!$last_t || $go) $last_m = $_SESSION['last_m'] = ($adb->selectCell("SELECT MAX(`id`) FROM `city_chat` WHERE `room` = ?s and `city` = ?s", $room ,$city)) - 5; $rows = $adb->select("SELECT `msg`, `sender`, `to`, `class`, `date_stamp`, `id` FROM `city_chat` WHERE `id` > ?d and `room` = ?s and `city` = ?s", $last_m ,$room ,$city); foreach ($rows as $message) { list($msg, $sender, $to, $class, $_SESSION['last_t'], $_SESSION['last_m']) = array_values($message); $date = (bcsub(time(), $_SESSION['last_t']) <= 86400) ?date('H:i', $_SESSION['last_t']) :date('d.m.y H:i', $_SESSION['last_t']); $sender2 = str_replace(" ", "%20", $sender); $to2 = str_replace(" ", "%20", $to); $smiles = split(':', $msg); if ($class == 'private') { $sent = ''; $names = split(',', $to); foreach ($names as $key => $name) { $name_link = ($name == $login) ?str_replace(" ", "%20", $sender) :str_replace(" ", "%20", $name); $name_title = ($name == $login) ?$sender :$name; if ($sent != '') $sent .= ', '; $sent .= "$name"; } $msg = preg_replace("/private \[\]/", "private [$sent]", $msg, 1); } $msg = preg_replace("/private \[/", "private [", $msg, 1); $i = 0; foreach ($smiles as $key => $value) { if (file_exists("img/smiles/$value.gif") && $i < 3) { $msg = preg_replace("/\:$value\:/", "", $msg, 1); $i++; } else if ($i >= 3) break; } $msg_full = " [$sender] $msg
"; switch ($class) { case 'all': if (!$chat_filter) $send .= "$date$msg_full"; break; case 'emotion': if (!$chat_filter) $send .= "$date $sender $msg
"; break; case 'to': if ($to == $login || $sender == $login) $send .= "$date$msg_full"; else if (ereg(",", $to)) { $characters = explode (',', $to); foreach ($characters as $key => $value) { if ($value == $login) $send .= "$date$msg_full"; } } else if (!$chat_filter) $send .= "$date$msg_full"; break; case 'private': if ($to != $login && $sender == $login) $send .= "$date$msg_full"; else if ($to == $login || $sender == $login) $send .= "$date$msg_full"; else if (ereg(",", $to)) { $characters = explode (',', $to); foreach ($characters as $key => $value) { if ($value == $login) $send .= "$date$msg_full"; } } break; case 'sys': if ($to == $login && $chat_sys) $send .= "$date Внимание! $msg
"; break; } } returnAjax($send, $chat_update); break; case 'change_button': $but = getVar('but'); $val = getVar('val'); switch ($but) { default: $val = ($val == 'false' || $val === 0) ?0 :1; break; case 'slow': $val = ($val == 'false' || $val === 0) ?10 :60; $but = 'update'; break; } $char->setChar('char_db', array('chat_'.$but => $val)); returnAjax('complete'); break; } ?>