PBG Community

Присоединяйтесь к PBG Community

Современный движок для серверов Counter-Strike 1.6: панель управления, магазин, статистика и модули — всё в одном месте. Регистрируйтесь, чтобы скачивать сборки, получать обновления и задавать вопросы разработчикам.

  • Движок и модули
  • Регулярные обновления
  • Поддержка сообщества
ChatCS

ChatCS 2.0

Нет прав для скачивания
Суть данного плагина в обмене сообщениями пользователей на сайте и сервере.


Установка и настройка состоит из серверной части и веб части:

1. Серверная часть:
1. Поместите файл chat_from_site.amxx в папку amxmodx/plugins/
2. Добавьте строку в amxmodx/configs/plugins.ini: chat_from_site.amxx.
3. Создайте chat.cfg по пути amxmodx/configs со следующими содержимыми настройками:
C++:
// Основные настройки чата
amx_chat_enabled 1           // Включить чат (1 - да, 0 - нет)
amx_chat_color 1             // Цветные сообщения
amx_chat_admin_only 0        // Только для админов
amx_chat_bot_only 0          // Только для ботов
amx_chat_prefix "[Сайт]"     // Префикс сообщений
amx_chat_block_site_only 0   // Блокировать "[Только сайт]"
amx_chat_log_errors 1        // Логировать ошибки

// Настройки подключения к БД
amx_db_host "localhost"      // Хост БД GAMECMS
amx_db_user "username"       // Пользователь БД
amx_db_pass "password"       // Пароль БД
amx_db_name "database"       // Имя БД

// Дополнительные настройки
amx_default_avatar "files/avatars/no_avatar.jpg"  // Аватар по умолчанию

4. Перезагрузите сервер и проверьте работоспособность командой amx_plugins, Если выдало running, плагин успешно установлен и работает.

1.2. Веб часть:
1. Перейдите на свой хостинг, где расположен сайт и открываете файл
chat_action.php (Предварительно сделав резервную копию этого файла)
2. Изменяете или дополняете данный файл в зависимости от ранее внесенных изменений в него этот код:
PHP:
<?php

include_once __DIR__ . '/../inc/start_lite.php';



$AjaxResponse = new AjaxResponse();



if(!isPostRequest() || !isRightToken()) {

    $AjaxResponse->status(false)->alert('Ошибка')->send();

}



// Функция для получения сообщений чата

function getChatMessages($pdo, $limit, $conf, $full_site_host) {

    $users_groups = get_groups($pdo);

    $tpl = new Template;

    $tpl->dir = '../templates/'.$conf->template.'/tpl/';



    $query = "SELECT chat.*,

              IF(chat.user_id = 0, '', users.login) as login,

              IF(chat.user_id = 0,

                 '{$full_site_host}files/avatars/no_avatar.jpg',

                 CONCAT('{$full_site_host}', users.avatar)) as avatar,

              IF(chat.user_id = 0, 0, users.rights) as rights

              FROM chat

              LEFT JOIN users ON chat.user_id = users.id

              ORDER BY chat.id DESC

              LIMIT " . $limit;



    $STH = $pdo->query($query);

    $STH->execute();

    return $STH->fetchAll();

}



if (isset($_POST['chat_first_messages']) || isset($_POST['chat_load_messages'])) {

    $limit = isset($_POST['chat_load_messages']) ? intval($_POST['load_val']) * 50 . ", 50" : "50";

    $row = getChatMessages($pdo, $limit, $conf, $full_site_host);

    $count = count($row);



    if ($count == 0) {

        exit('<p class="t-c">Сообщений нет</p>');

    }



    $users_groups = get_groups($pdo);

    $tpl = new Template;

    $tpl->dir = '../templates/'.$conf->template.'/tpl/';



    for ($i = $count-1; $i >= 0; $i--) {

        $date = expand_date($row[$i]['message_date'], 8);

        $tpl->load_template('elements/chat_message.tpl');

      

        // Устанавливаем данные для шаблона

        $tpl->set("{id}", $row[$i]['id']);

        $tpl->set("{user_id}", $row[$i]['user_id']);

        $tpl->set("{login}", $row[$i]['login'] ?: 'Игрок');

        $tpl->set("{avatar}", $row[$i]['avatar']);

        $tpl->set("{date_full}", $date['full']);

        $tpl->set("{date_short}", $date['short']);

      

        // Обработка текста сообщения

        $message_text = $row[$i]['message_text'];

        $is_site_only = (strpos($message_text, '[Только сайт]') !== false);

        if ($is_site_only) {

            $message_text = str_replace('[Только сайт]', '', $message_text);

        }

        $tpl->set("{text}", trim($message_text));

        $tpl->set("{is_site_only}", $is_site_only ? '1' : '0');

      

        // Группа пользователя

        $rights = $row[$i]['rights'] ?? 0;

        $tpl->set("{gp_name}", $users_groups[$rights]['name'] ?? 'Игрок');

        $tpl->set("{gp_color}", $users_groups[$rights]['color'] ?? '#999999');

        $tpl->set("{gp_rights}", $users_groups[$_SESSION['rights'] ?? 0]['rights'] ?? '');

      

        $tpl->compile('chat');

        $tpl->clear();

    }



    $tpl->show($tpl->result['chat']);

    $tpl->global_clear();

  

    if (isset($_POST['chat_first_messages'])) {

        exit('<script>$("#last_mess").val('.$row[0]['id'].');</script>');

    } elseif (isset($_POST['chat_load_messages']) && $count != 50) {

        exit('<script>$("#load_val").val(0);</script>');

    }

    exit();

}



if (isset($_POST['chat_send_message'])) {

    if (!is_auth()) {

        exit(json_encode(['status' => '2']));

    }



    $message_text = check($_POST['message_text'], null);

    if (empty($message_text)) {

        exit(json_encode(['status' => '2']));

    }



    include_once "../inc/protect.php";



    // Проверка прав пользователя

    $users_groups = get_groups($pdo);

    $user_rights = $_SESSION['rights'] ?? 0;

    $has_game_access = strpos($users_groups[$user_rights]['rights'] ?? '', 'k') !== false;



    if (!$has_game_access) {

        $message_text = '[Только сайт] ' . $message_text;

    }



    $message_text = find_img_mp3($message_text, $_SESSION['id']);

    $STH = $pdo->prepare("INSERT INTO `chat` (`user_id`,`message_text`,`message_date`)

                          VALUES (:user_id, :message_text, :message_date)");

  

    if ($STH->execute([

        ':user_id' => $_SESSION['id'],

        ':message_text' => $message_text,

        ':message_date' => date("Y-m-d H:i:s")

    ])) {

        up_online($pdo);

        exit(json_encode(['status' => '1']));

    }

  

    exit(json_encode(['status' => '2']));

}



if (isset($_POST['drop_img'])) {

    if (empty($_SESSION['id'])) {

        exit(json_encode(['status' => '2', 'data' => 'Авторизуйтесь, чтобы отправлять сообщения!']));

    }



    include_once "../inc/protect.php";



    // Проверка прав через users_groups

    $STH = $pdo->prepare("SELECT ug.rights FROM users u

                          LEFT JOIN users_groups ug ON u.rights = ug.id

                          WHERE u.id = :id LIMIT 1");

    $STH->setFetchMode(PDO::FETCH_OBJ);

    $STH->execute([':id' => $_SESSION['id']]);

    $row = $STH->fetch();



    if (strpos($row->rights ?? '', 'k') === false) {

        exit(json_encode(['status' => '2', 'data' => 'У вас нет прав для отправки сообщений в игру']));

    }



    if (empty($_FILES['file']['name'])) {

        exit(json_encode(['status' => '2', 'data' => 'Пустой файл']));

    }



    $path = 'files/filemanager/'.$_SESSION['id'].'/';

    $date = time();

    $message_text = '';



    // Создаем директории если их нет

    if (!file_exists($_SERVER["DOCUMENT_ROOT"].'/'.$path)) {

        mkdir($_SERVER["DOCUMENT_ROOT"].'/'.$path, 0777, true);

    }

    if (!file_exists($_SERVER["DOCUMENT_ROOT"].'/files/thumbs/'.$_SESSION['id'].'/')) {

        mkdir($_SERVER["DOCUMENT_ROOT"].'/files/thumbs/'.$_SESSION['id'].'/', 0777, true);

    }



    // Проверяем тип файла

    if (if_img($_FILES['file']['name']) || if_mp3($_FILES['file']['name'])) {

        $file_type = substr($_FILES['file']['name'], strrpos($_FILES['file']['name'], '.')+1);

        $source = $_FILES['file']['tmp_name'];

        $file = $path.$date.$_SESSION['id'].".".$file_type;

        $target = '../'.$file;

      

        if (!move_uploaded_file($source, $target)) {

            exit(json_encode(['status' => '2', 'data' => 'Ошибка загрузки файла!']));

        }

    } else {

        exit(json_encode(['status' => '2', 'data' => 'Файл должен являться изображением в формате JPG,GIF или PNG, либо аудиозаписью в формате MP3']));

    }



    // Формируем HTML для вставки в чат

    if (if_img($_FILES['file']['name'])) {

        $message_text = '<a href="'.$full_site_host.$file.'" class="thumbnail" data-lightbox="'.$_SESSION['id'].'"><img src="'.$full_site_host.$file.'" class="thumbnail-img"></a>';

    } elseif (if_mp3($_FILES['file']['name'])) {

        $message_text = '<audio src="'.$full_site_host.$file.'" controls="controls">Аудио файл: '.$full_site_host.$file.'</audio>';

    }



    // Сохраняем в базу

    $STH = $pdo->prepare("INSERT INTO `chat` (`user_id`,`message_text`,`message_date`)

                          VALUES (:user_id, :message_text, :message_date)");

  

    if ($STH->execute([

        ':user_id' => $_SESSION['id'],

        ':message_text' => $message_text,

        ':message_date' => date("Y-m-d H:i:s")

    ])) {

        up_online($pdo);

        exit(json_encode(['status' => '1']));

    }

  

    exit(json_encode(['status' => '2']));

}

?>

3. Переходите в следующий файл chat_message.tpl (Предварительно сделав резервную копию файла) изменяете:

PHP:
<div class="chat_message" id="message_id_{id}">
    {if("{user_id}" != "0")}
        <!-- Для зарегистрированных пользователей (сообщения с сайта) -->
        <a href="../profile?id={user_id}" title="{gp_name}">
            <img src="{avatar}?v={cache}" class="chat-avatar" alt="{login}">
        </a>
    {else}
        <!-- Для незарегистрированных (сообщения из игры) -->
        <span class="chat-avatar-container" title="Игрок">
            <img src="{avatar}?v={cache}" class="chat-avatar" alt="Игрок">
        </span>
    {/if}
  
    <div class="message">
        <div class="info">
            <div class="author" onclick="treatment('{login}');" title="{gp_name}" style="color: {gp_color}">{login}</div>
            <div class="date" tooltip="yes" data-placement="left" title="{date_full}">{date_short}</div>
          
            {if(strripos("{gp_rights}", "d") !== false)}
                <span onclick="dell_chat_message('{id}');" tooltip="yes" data-placement="left" title="Удалить" class="m-icon icon-trash dell_message"></span>
                <span id="edit_message_{id}" onclick="edit_chat_message('{id}', this);" tooltip="yes" data-placement="left" title="Редактировать" class="m-icon icon-pencil edit_message"></span>
            {/if}
        </div>
      
        <div id="message_text_{id}" class="with_code">
            {text}
        </div>
      
        {if(strripos("{gp_rights}", "d") !== false)}
            <textarea id="message_text_e_{id}" class="form-control disp-n">{text}</textarea>
        {/if}
    </div>
</div>
Автор
ALEX
Скачиваний
0
Просмотры
20
Первый выпуск
Обновление
Назад
Сверху