game/_incl_data/class/Chat.php
2023-10-16 16:12:16 +03:00

250 lines
17 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/** Types
* 1. all
* 2. to
* 5. system to?
* 6. system to
* 11. ???
*/
use Core\Db;
class Chat
{
private array $smilesWorld = [
'laugh' => [0 => 'смеется', 1 => 'посмеялся над [*%l*]'],
'fingal' => [0 => 'трет фингал', 1 => 'щупает фингал у [*%l*]'],
'eek' => [0 => 'ошарашен', 1 => 'ошарашен действиями [*%l*]'],
'smoke' => [0 => 'закуривает', 1 => 'предлагает [*%l*] пойти покурить'],
'hi' => [0 => 'приветствует всех вокруг', 1 => 'приветствует [*%l*]'],
'bye' => [0 => 'прощается со всеми и уходит', 1 => 'прощается с [*%l*]'],
'king' => [0 => 'коронует себя :-)', 1 => 'объявляет [*%l*] своим королем!'],
'king2' => [0 => 'коронует себя :-)', 1 => 'объявляет [*%l*] своей королевой!'],
'boks2' => [0 => 'вызывает всех на поединок', 1 => 'предлагает [*%l*] дружеский матч'],
'boks' => [0 => 'обещает побить любого, кто примет вызов!', 1 => 'намекает [*%l*] на поединок'],
'gent' => [0 => 'предлагает считать себя благородным сэром', 1 => 'считает [*%l*] джельтельменом'],
'lady' => [0 => 'предлагает считать себя благородной леди', 1 => 'считает, что [*%l*] настоящая Леди'],
'tongue' => [0 => 'показывает окружающим язык', 1 => 'показывает язык [*%l*]'],
'smil' => [0 => 'болтает без умолку', 1 => 'считает, что [*%l*] говорит откровенную ерунду!'],
'ponder' => [0 => 'кое-что усиленно обдумывает', 1 => 'обещает обмозговать предложение [*%l*]'],
'bow' => [0 => 'сохраняя достоинство, кивает окружающим', 1 => 'сохраняя достоинство кивает [*%l*]'],
'angel' => [0 => 'считает себя Ангелом', 1 => 'считает [*%l*] своим Ангелом'],
'angel2' => [0 => 'грезит об Ангелах', 1 => 'думает что [*%l*] Ангел'],
'hello' => [0 => 'желает здравствовать окружающим', 1 => 'желает здравствовать [*%l*]'],
'dont' => [0 => 'рекомендует окружающим не делать этого', 1 => 'рекомендует [*%l*] не делать этого'],
'idea' => [0 => 'озарен свежей идеей!', 1 => 'предлагает [*%l*] обсудить пару идей'],
'mol' => [0 => 'преклоняется перед окружающими', 1 => 'преклоняется перед [*%l*]'],
'super' => [0 => 'считает, что мир хорош, все дамы - Леди, а Солнце - шар дающий свет!', 1 => 'фанатеет от [*%l*]'],
'beer' => [0 => 'вспоминает про припрятаный в заначке эликсир...', 1 => 'готов поделиться с [*%l*] припрятанным эликсиром!'],
'drink' => [0 => 'считает, что пора пить различные эликсиры', 1 => 'предлагает [*%l*] пойти пропустить по стаканчику эликсира'],
'baby' => [0 => 'изображает малыша', 1 => ' считает, что [*%l*] еще мал и неопытен для обоснованной критики'],
'tongue2' => [0 => ' показывает всяким врединам язык', 1 => 'показывает [*%l*] язык, проявляя недовольство'],
'sword' => [0 => 'готов сразиться в честном поединке', 1 => 'вызывает [*%l*] на честный поединок!'],
'agree' => [0 => 'пожимает руку собеседникам', 1 => 'пожимает руку [*%l*]'],
'loveya' => [0 => 'преисполнен чувства любви', 1 => 'преисполнен чувства любви к [*%l*]'],
'kiss' => [0 => 'целует всех', 1 => 'целует [*%l*]'],
'kiss2' => [0 => 'хочет нежно поцеловать кого-то...', 1 => 'нежно целует [*%l*]'],
'kiss3' => [0 => 'кое-кого целует...', 1 => 'нежно целует [*%l*]'],
'kiss4' => [0 => 'кое-кого целует...', 1 => 'хочет уединиться с [*%l*] и целоваться...'],
'rose' => [0 => 'хочет кому-то подарить розу, но стесняется...', 1 => 'дарит [*%l*] ароматную розу...'],
'love' => [0 => 'думает только о любви...', 1 => 'думает, что [loginfrom] + [*%l*]= любовь!'],
'love2' => [0 => 'мечтает о свадьбе...', 1 => 'мечтает о свадьбе с [*%l*]'],
'confused' => [0 => 'в недоумении...', 1 => 'недоумевает от [*%l*]'],
'yes' => [0 => 'кивает в знак согласия', 1 => 'кивает [*%l*] в знак согласия'],
'no' => [0 => 'мотает головой в знак протеста', 1 => 'мотает головой [*%l*] в знак протеста'],
'shuffle' => [0 => 'в смущении от таких обстоятельств', 1 => 'в смущении от [*%l*]'],
'nono' => [0 => 'выражает категорическое несогласие!', 1 => 'выражает категорическое несогласение с [*%l*]'],
'maniac' => [0 => 'знает точно наперед - сегодня кто-нибудь умрет...', 1 => 'считает, что [*%l*] пора бы уже стать жертвой маньяка...'],
'privet' => [0 => 'почтительно приветствует окружающих', 1 => 'почтительно приветствует [*%l*]'],
'ok' => [0 => 'считает, что это замечательная идея', 1 => 'считает, что [*%l*] движется в правильном направлении'],
'ninja' => [0 => 'угрожает окружающим тайным мастерством!', 1 => 'угрожает [*%l*] мастерством древних'],
'pif' => [0 => 'ищет подходящую мишень', 1 => 'думает, что сложно промахнуться по [*%l*]'],
'smash' => [0 => 'собирается крушить и ломать', 1 => 'хочет сломать пару-тройку костей у [*%l*]'],
'alien' => [0 => 'считает, что мир захватили мутанты!', 1 => ' считает, что [*%l*] еще тот мутант!'],
'pirate' => [0 => 'подумывает, кого бы ограбить!...', 1 => 'считает, что лучшей жертвы чем [*%l*], не найти!'],
'gun' => [0 => 'хочет повысить кое-кому уровень железа в организме... :gun:', 1 => 'считает, что у [*%l*] маловато железа в организме! :gun:'],
'trup' => [0 => 'падает замертво', 1 => 'считает, что [*%l*], живет слишком долго, и пора бы это исправить!'],
'mdr' => [0 => 'считает, что у него есть отличный способ решения разногласий... :mdr:', 1 => 'предлагает [*%l*] культурно отдохнуть :mdr:'],
'sneeze' => [0 => 'громко чихает', 1 => 'чихает на [*%l*], обрызгивая его слюнями с ног до головы!'],
'mad' => [0 => 'просто в бешенстве!!!', 1 => 'в бешенстве от [*%l*]!!!'],
'friday' => [0 => 'культурно отдыхает...', 1 => 'предлагает [*%l*] культурно отдохнуть'],
'cry' => [0 => 'безудержно рыдает', 1 => 'рыдает на плече у [*%l*]'],
'grust' => [0 => 'грустит...', 1 => 'грустит о [*%l*]'],
'rupor' => [0 => 'пытается докричаться до окружающих', 1 => 'пытается докричаться до [*%l*]'],
'fie' => [0 => 'умоляет: НЕТ, только не ЭТО!!!', 1 => 'умоляет [*%l*] о пощаде!'],
'nnn' => [0 => 'ничего не видит, не слышит, и никому не скажет...', 1 => 'ничего не видел, не слышал и не помнит о [*%l*]'],
'row' => [0 => 'находится в бешенстве и ищет с кем бы пообщаться...', 1 => 'собирается выяснить отношения с [*%l*]'],
'red' => [0 => 'смущаясь краснеет...', 1 => 'краснеет от [*%l*]'],
'lick' => [0 => 'облизнулся, в предвкушении', 1 => 'облизывается при виде [*%l*]'],
'help' => [0 => 'нуждается в срочной помощи!', 1 => 'просит помощи у [*%l*]'],
'wink' => [0 => 'подмигивает окружающим', 1 => 'подмигивает [*%l*]'],
'jeer' => [0 => 'посмеивается над ситуацией...', 1 => 'посмеивается над [*%l*]'],
'tease' => [0 => 'дразнится', 1 => 'дразнит [*%l*]'],
'nunu' => [0 => 'недоволен окружающими...', 1 => 'недоволен [*%l*]'],
'inv' => [0 => 'хочет найти свои зубы...', 1 => 'жалуется [*%l*] на трудности жизни инвалида...'],
'duel' => [0 => 'собирается проткнуть кое-кого...', 1 => 'вызывает [*%l*] на дуэль!'],
'susel' => [0 => 'Напевая: &quot;эээххх ухнеееемм, да ещеее ууухнеем..&quot; высматривает в толпе подходящий пондер...', 1 => 'предлагает [*%l*] отхватить прямо по пондеру!'],
'nun' => [0 => 'угрожает окружающим палочками для риса', 1 => 'показывает [*%l*] как надо пользоваться палочками для риса'],
'kruger' => [0 => 'ненавязчиво объясняет окружающим кого тут надо бояться :kruger:', 1 => 'демонстрирует [*%l*] нестриженные когти'],
'flowers' => [0 => 'учится выхватывать букет Ромашек-21 из-за спины одним движением', 1 => 'целует [*%l*] и дарит букет ромашек'],
'horse' => [0 => 'патрулирует границы Бойцовского Клуба', 1 => 'предлагает [*%l*] порубать всех врагов в капусту! :horse:'],
'hug' => [0 => 'готов обнять всех в комнате!', 1 => 'крепко обнимает [*%l*]'],
'str' => [0 => 'в ужасе покрывается ледяным потом!', 1 => 'в ужасе прячется от [*%l*]'],
'alch' => [0 => 'напоминает окружающим о вечных ценностях :alch:', 1 => 'предлагает [*%l*] приобщиться к вечным ценностям :alch:'],
'pal' => [0 => ' напоминает, что из под робы выпирает крест, а не что-то там! :-)', 1 => 'требует от [*%l*] предъявить документы в развернутом виде!'],
'mag' => [0 => 'читает заклинания. Вслух. По слогам.', 1 => 'произносит страшное колдунство на [*%l*]'],
'sniper' => [0 => 'изображает из себя Вильгельма Теля', 1 => 'предлагает [*%l*] поиграть в Вильгельма Теля'],
'fuck' => [0 => 'повторяет позы камасутры', 1 => 'предлагает [*%l*] повторить позы камасутры вместе'],
'rotate' => [0 => 'катается от смеха по полу', 1 => 'катается по полу от смеха над [*%l*]'],
];
public static function getLastMessageId(): int
{
return (int)Db::getValue('select max(id) from chat');
}
public static function setCurrentTimeById(int $messageId): void
{
Db::sql('update chat set time = unix_timestamp() where id = ?)', [$messageId]);
}
public static function setCurrentTimeAndIdById(int $messageId, int $newMessageId): void
{
Db::sql('update chat set time = unix_timestamp(), id = ? where id = ?', [$newMessageId, $messageId]);
}
public function expworld($txt, $vl): string
{
$words = explode(' ', $txt);
$i = -1;
while ($i < count($words)) {
$i++;
if (isset($words[$i]) && strlen($words[$i]) > $vl) {
$words[$i] = substr($words[$i], 0, $vl) . ' ' . substr($words[$i], $vl);
$i = 0;
$txt = implode(' ', $words);
$words = explode(' ', $txt);
}
}
return implode(' ', $words);
}
public function smileText($text, $tol, $room)
{
$retxt = '';
$j = 0;
$txt = str_replace('/', '&frasl;', $text) . ' ';
if (preg_match("/&frasl;(.*?) /", $txt, $retxt) && isset($this->smilesWorld[$retxt[1]])) {
if ($tol == '') {
$tol = str_replace('&frasl;' . $retxt[1] . ' ', '', $txt);
$tol = trim($tol, ' ');
}
if ($tol == '') {
$txt = $this->smilesWorld[$retxt[1]][0];
} else {
$mbl = Db::getValue('select id from users where room = ? and online > unix_timestamp() - 520 and login = ?', [$room, $tol]);
if ($mbl) {
$txt = '' . $this->smilesWorld[$retxt[1]][1];
$txt = str_replace('[*%l*]', '[login:' . $tol . ']', $txt);
} else {
$txt = 'USER IS FALSE';
}
}
$j = 1;
}
if ($j == 1) {
$text = $txt;
} else {
$text = false;
}
return $text;
}
public function sendsys($text, $to = '', $color = '#933'): void
{
if (!$text) {
return;
}
Db::sql('insert into chat (new, text, time, type, color, `to`) values (1,?,unix_timestamp(),6,?,?)', [
trim($text), $color, $to,
]);
}
public function debug($text, $isLegacyErrorMessage = false): void
{
if ($isLegacyErrorMessage) {
$text = 'core' . date('#d.m.Y %H:i:s:') . "<b>$text</b>";
}
Db::sql('insert into chat (new, text, time, type, color, `to`, login) values (1,?,unix_timestamp(),3,?,?,?)', [
trim($text), 'crimson', 'Merlin', 'debugger',
]);
}
public function sendMsg(ChatMessage $chatMessage): void
{
$q = 'insert into chat(
new,
sound,
color,
city,
room,
login,
`to`,
text,
time,
type,
spam,
invis,
da,
`delete`,
molch,
typeTime,
dn,
frv
) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
$args = [
1,
$chatMessage->getSound(),
$chatMessage->getColor(),
$chatMessage->getCity(),
$chatMessage->getRoom(),
$chatMessage->getLogin(),
$chatMessage->getTo(),
$chatMessage->getText(),
$chatMessage->getTime(),
$chatMessage->getType(),
$chatMessage->getSpam(),
$chatMessage->getInvis(),
$chatMessage->getDa(),
$chatMessage->getDelete(),
$chatMessage->getMolch(),
$chatMessage->getTypeTime(),
$chatMessage->getDn(),
$chatMessage->getFireworks(),
];
Db::sql($q, $args);
}
/** Какая-то заумная выборка что отображать в чат.
* @param int $messageId
* @param string $login
* @return array
*/
public function getMessages(int $messageId, string $login): array
{
$query = "select * from chat
where
new = 1 and
(id > ? or spam > 0 or (time < 0 and time > -unix_timestamp() and (`to` = '' or `to` = ?))) and
(time > unix_timestamp() - 360 or time > unix_timestamp() - 120 or (time = -1 and (`to` = ? or type = 8)) or time < -1 and time > -unix_timestamp() and (`to` = ? or type = 8 or `to` = ''))
order by id";
return Db::getRows($query, [$messageId, $login, $login, $login]);
}
}