Manual Устанавливаем префиксы в чат с сайта

zhorzh78

Администратор
При помощи плагина GameCMS API можно загрузить с сайта и установить в чат игрока определенный префикс.

Префикс указывается в профиле игрока на сайте.
Префикс хранится в поле prefix таблицы users в базе данных сайта. Ни в какие там файлы ini префикс не записывается и из него не загружается!
Префикс доступен только зарегистрированным пользователям, указавшим SteamID в своем Профиле
Настройка веб-части:

1. Создаем на сайте услугу:
2017-08-17_12-24-04.png

JavaScript:
function edit_user_prefix(){
    var token = $('#token').val();
    var user_prefix = $('#user_prefix').val();
    user_prefix = encodeURIComponent(user_prefix);
    $.ajax({
        type: "POST",
        url: "../ajax/actions_a.php",
        data: "phpaction=1&token="+token+"&edit_user_prefix=1&user_prefix="+user_prefix,

        success: function(html) {
            $("#edit_user_prefix_result").empty();
            $("#edit_user_prefix_result").append(html);
        }
    });
}
function admin_change_prefix(id)
{
    NProgress.start();
    var token=$('#token').val();
    var user_prefix=$('#user_prefix').val();
    $.ajax(
    {
        type:"POST",
        url:"../ajax/actions_z.php",
        data:"phpaction=1&admin_change_user_prefix=1&token="+token+"&id="+id+"&user_prefix="+user_prefix,
        dataType:"json",
        success:function(result)
        {
            if(result.status==1){
                NProgress.done();
                setTimeout(show_ok,500);
            }
            else{
                NProgress.done();
                setTimeout(show_error,500);
                if(result.data!=''|| result.data!=undefined){
                    alert(result.data);
                }
            }
        }
    });
}

JavaScript:
function admin_change_prefix(id){
    NProgress.start();

    var prefix = $('#user_prefix').val();
    change_value2("users","prefix",prefix,id);
    NProgress.done();
    setTimeout(show_ok, 500);
}

PHP:
if (isset($_POST['edit_user_prefix'])) {
    $user_prefix = check($_POST['user_prefix'],null);

    if (mb_strlen($user_prefix, 'UTF-8') > 16) {
        exit('<span class="glyphicon glyphicon-remove"></span> Префикс должен состоять не более чем из 16 символов.');
    }

    $STH = $pdo->query("SELECT id,login FROM users WHERE prefix='$user_prefix' LIMIT 1"); $STH->setFetchMode(PDO::FETCH_OBJ);
    $row = $STH->fetch();
    if (!empty($row->id) and !empty($row->prefix)) {
        exit('<p class="text-danger">Введеный Вами префикс занят пользователем <a href="../profile?id='.$row->id.'" target="_blank">'.$row->login.'</a></p>');
    }

    $STH = $pdo->prepare("UPDATE users SET prefix=:user_prefix WHERE id='$_SESSION[id]' LIMIT 1");
    $STH->execute(array(':user_prefix' => $user_prefix));

    write_log("Префикс изменен на ".$user_prefix." | actions_a.php");
    exit('<span class="glyphicon glyphicon-ok"></span> Ваш префикс изменен!');
}

PHP:
if (isset($_POST['admin_change_user_prefix']) and (is_worthy("f") or is_admin())) {
    $id = check($_POST['id'], "int");
    $user_prefix = check($_POST['user_prefix'],null);
    $user_prefix = str_replace(array('/', '\\'), '', $user_prefix);

    if (empty($id)) {
        exit(json_encode(array('status' => '2', 'data' => 'Не указан id пользователя')));
    }

    if (mb_strlen($_POST['user_prefix'], 'UTF-8') > 32) {
        exit(json_encode(array('status' => '2', 'data' => 'Префикс должен состоять не более чем из 32 символов')));
    }

    $STH = $pdo->query("SELECT id,login FROM users WHERE prefix='$user_prefix' LIMIT 1"); $STH->setFetchMode(PDO::FETCH_OBJ);
    $row = $STH->fetch();
    if (!empty($row->id)) {
        exit(json_encode(array('status' => '2', 'data' => 'Введеный Вами префикс занят пользователем '.$row->login)));
    }

    $STH = $pdo->prepare("UPDATE users SET prefix=:user_prefix WHERE id='$id' LIMIT 1");
    $STH->execute(array(':user_prefix' => $user_prefix));

    exit(json_encode(array('status' => '1')));
}

PHP:
<!--под блоком (например шаблона flat)-->
<b>Ник на сервере</b>
<input type="text" class="form-control" id="user_nick" maxlength="30" autocomplete="off" value="{nick}" placeholder="Введите свой ник">
<button class="f-r btn2 mt-10" type="button" onclick="edit_user_nick();">Изменить</button>
<div class="f-l mt-10" id="edit_user_nick_result"></div><br><br>

<!--добавляем со своими классами стилей!!!-->
<b>Префикс в чате сервера</b>
<input type="text" class="form-control" id="user_prefix" maxlength="16" autocomplete="off" value="<?echo $user->prefix?>" placeholder="Укажите префикс">
<button class="f-r btn2 mt-10" type="button" onclick="edit_user_prefix();">Изменить</button>
<div class="f-l mt-10" id="edit_user_prefix_result"></div><br><br>

PHP:
<!--под блоком (например шаблона flat)-->
<b>Steam ID</b>
<div class="input-group">
    <span class="input-group-btn">
        <button class="btn btn-default" type="button" onclick="admin_change_steam_id({id});">Изменить</button>
    </span>
    <input type="text" class="form-control" id="user_steam_id" maxlength="32" autocomplete="off" value="{steam_id}">
</div>
<br>
<!--добавляем со своими классами стилей!!!-->
<b>Префикс в серверном чате</b>
<div class="input-group">
    <span class="input-group-btn">
        <button class="btn btn-default" type="button" onclick="admin_change_prefix({id});">Изменить</button>
    </span>
    <input type="text" class="form-control" id="user_prefix" maxlength="16" autocomplete="off" value="<?echo $profile->prefix?>">
</div>
<br>


Настройка плагинов:

Плагин Chat Manager. Автор: Mistrick
C++:
public OnAPISendChatPrefix(player, prefix[], type)
{
    if(g_sPlayerPrefix[player][0] || type != 1)
        return;

    if(prefix[0] && cmsapi_get_user_services(player, "", "_nick_prefix", 0))
    {
        formatex(g_sPlayerPrefix[player], charsmax(g_sPlayerPrefix[]), "^1[^4%s^1]", prefix);
        g_bCustomPrefix[player] = true;
    }
}

Плагин Lite Translit. Автор: neygomon
C++:
public OnAPISendChatPrefix(id, prefix[], type)
{
    if(g_szPrefix[id][0] || type != 1)
        return PLUGIN_HANDLED

    if(prefix[0] && prefix[0] != '0' && cmsapi_get_user_services(id, "", "_nick_prefix", 0))
        return formatex(g_szPrefix[id], charsmax(g_szPrefix[]), "^1[^4%s^1]", prefix);

    return g_szPrefix[id][0] = 0;
}
 
Последнее редактирование:

olman

Пользователь
И когда будет исправление? когда можно будет по мануалу все попробовать установить? у меня префиксы от мистирика стоят их в блокноте потом удалять?
 

zhorzh78

Администратор
А что такое означает? добавляем со своими классами стилей ? у меня шаблон Ghost что за стили
Открываешь шаблон, смотришь на предыдущие поля, делаешь так же, заменив значение поля.
 

Алекс

Участник
сделал вроде все по инструкции, но впрофиле когда пытаешься сменить префикс, не сохраняется что бы не написал, а при попытке смены ника выдает вот это. Что я сделал не так? И еще вопрос, в файлах ajax добавлять в самый конец код из выше? или в начало? И про файл actions тот же вопросПосмотреть вложение 129
 

Алекс

Участник
Вот то что выше исправил, перенес в конец все в трех файлах, "И еще вопрос, в файлах ajax добавлять в самый конец код из выше? или в начало? И про файл actions тот же "
Но попрежнему префикс не сохраняется, когда нажимаешь изменить ник то пишет " Ваш ник изменен!" Когда префикс, ничего не пишет, и при перезаходе на стр, он не сохраняется вообщем, я везде вроде все проверил, подскажите что не так?
 

zhorzh78

Администратор
@Алекс, В ajax файлах местоположение не важно. В *php- тоже не важно, но если пишете в конце, то перед закрывающим тегом ?>
Заходите в профиль, ставите префикс, сохраняете.
 

Алекс

Участник
"но если пишете в конце, то перед закрывающим тегом ?>" Сделал перед ним, теперь при попытке сохранить префикс выдает следущее
{"status":"2"}

Скрин к сожалению сайт почему то не принимает
 
Сверху