Иконка ресурса

Player Registration + Player preferences 1.9.0

Нет прав для скачивания
Сообщения
672
Реакции
242
Помог
11 раз(а)
Limbooc добавил(а) новый ресурс:

Player Registration + Player preferences - Плагин для регистрации игроков на сервер с сохранением данных

Плагин позволяет регистрировать игрока на сервер с помощью логин и пароля

Достоинство;
Поддержка два модуля .GameCMS - выдергивает данные с форума и Внутренне хранилище ( для тех у кого нет GameCMS форум)
Автологин и перепривязка стим айди

Посмотреть вложение 35463Посмотреть вложение 35464Посмотреть вложение 35465
Посмотреть вложение 35466
Посмотреть вложение 35467
Узнать больше об этом ресурсе...
 
Сообщения
889
Реакции
149
Помог
25 раз(а)
Наконец то дождался регистрацию. Спасибо. Есть какая то апишка?
 
Сообщения
458
Реакции
263
Помог
9 раз(а)
Зачем было лепить два плагина в один, если у одного из них есть апи? Или вы так понимаете, что плагин сохранения преференсов надо как подложку юзать?
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
@ImmortalAmxx,пока релизная версия
14 Янв 2023
@ufame,мне сам ПП понравился, я не стал менять апи, и да логика авторизация там совсем другие
14 Янв 2023
кидайте предложение,плагин в стадии тестирование
 
Сообщения
889
Реакции
149
Помог
25 раз(а)
Как вариант для разрабов:
Добавить апишку по типу форвардов/нативов.
Форвард, который будет вызываться в момент авторизации с результатом (пароль верный / не верный).
натив, который проверяет, зареган ли игрок.
натив, который проверяет, залогинился ли игрок.
 
Сообщения
1,030
Реакции
826
Помог
10 раз(а)
Сразу оговорюсь, это не придирки
Код:
stock re_mysql_escape_string(output[], len)
{
    //while(replace(szBuffer, charsmax(szBuffer), "#", "")) {}
    while(replace(output, len, "\", "")) {}
    while(replace(output, len, "'", "")) {}
    while(replace(output, len, "^"", "")) {}
}
есть для этого replace_string который заменит все вхождения

ReverseString возможно удобнее будет заменить на хор-обмен, если я правильно понял для чего у тебя оно юзается
Код:
stock reverseString(string[]) {
    for (new i = 0, len = strlen(string) - 1; i < len; i++, len--) {
        string[i] ^= string[len];
        string[len] ^= string[i];
        string[i] ^= string[len];
    }
}
так же бегло просмотрел код, могу ошибаться, но у тебя в SQL_IGNORE нету никаких проверок, а при этом ты отправляешь апдейт при ней? То есть если я зайду и тут же выйду, не успев получить свежие данные из за задержки в бд, то при выходе мои данные могут обнулиться? Если я это правильно понял, то перед любым апдейтом тебе по идеи надо проверять, получил ли игрока вообще актуальные данные и если да, только после этого отсылать разные апдейты, это касается когда бд вовсе может быть не доступна
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
так же бегло просмотрел код, могу ошибаться, но у тебя в SQL_IGNORE нету никаких проверок, а при этом ты отправляешь апдейт при ней? То есть если я зайду и тут же выйду, не успев получить свежие данные из за задержки в бд, то при выходе мои данные могут обнулиться? Если я это правильно понял, то перед любым апдейтом тебе по идеи надо проверять, получил ли игрока вообще актуальные данные и если да, только после этого отсылать разные апдейты, это касается когда бд вовсе может быть не доступна
так это в любом случая лучше синхронного запроса, я отправляю команду SQL_IGNORE без ожидание кэллбака, так что мне без разницы что будет дальше ведь он делает запрос на UPDATE, сразу обновляет БД без каких либо проверок


тут минимум больше 5 секунд нужно чтобы игрок мог пере подключиться, с учетом того что нужно вести логин и пароль, так что это маловероятно

Сразу оговорюсь, это не придирки
Код:
stock re_mysql_escape_string(output[], len)
{
    //while(replace(szBuffer, charsmax(szBuffer), "#", "")) {}
    while(replace(output, len, "\", "")) {}
    while(replace(output, len, "'", "")) {}
    while(replace(output, len, "^"", "")) {}
}
есть для этого replace_string который заменит все вхождения

ReverseString возможно удобнее будет заменить на хор-обмен, если я правильно понял для чего у тебя оно юзается
Код:
stock reverseString(string[]) {
    for (new i = 0, len = strlen(string) - 1; i < len; i++, len--) {
        string[i] ^= string[len];
        string[len] ^= string[i];
        string[i] ^= string[len];
    }
}
Приму к сведению, но особы разницы нет, если только re_mysql_escape_string
 
Последнее редактирование:
Сообщения
1,030
Реакции
826
Помог
10 раз(а)
Limbooc, я и не говорю про синхронность, можешь отправлять и без ожидания коллбэка, я в целом говорю не отправлять запрос на апдейт если игрок не получил данные, то есть коннект - селект - если получил данные то хранить true далее типа if true то update

так что это маловероятно
тебе кажется, поверь, я очень часто с таким сталкивался )
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
Javekson, я теперь понял, что ты имел ввиду) ок принято,добавлю
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
Тестовый плагин на сохранение денег;
Код:
#include <amxmodx>
#include <reapi>
#include <player_preferences>

new g_iUserMoney[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("PP Money Save", "0.1", "Limbooc");
    RegisterHookChain( RG_CBasePlayer_AddAccount, "@CBasePlayer__AddAccount_Pre", false );

}
//Игрок вышел с системы, все запросы уже отправлены!!! обнуляем переменные
public player_logout(const pId)
{
    g_iUserMoney[pId] = 0;
    rg_add_account(pId, g_iUserMoney[pId], AS_SET);
}
//Игрок вошел в систему? подгружаем данные
public player_loaded(const pId)
{
    g_iUserMoney[pId] = pp_get_number(pId, "money");
    rg_add_account(pId, g_iUserMoney[pId], AS_SET);
}
//Ловим изменение денег
@CBasePlayer__AddAccount_Pre( pId, iAmount, RewardType: iType, bool: bTrackChange )
{
    if(pp_is_player_joined(pId))
    {
        g_iUserMoney[pId] = get_member(pId, m_iAccount) + iAmount;
        pp_set_number(pId, "money", g_iUserMoney[pId]);
    }
}
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
Не рекомендую сохранять все данные в момент выхода игрока т.е. player_logout(const id), потому что это форвард вызывается в конце функции logout_user

Обновляете свои данные по факту
 
Сообщения
889
Реакции
149
Помог
25 раз(а)
Limbooc, в конце раунда сохранять нормальным решением будет?
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
ImmortalAmxx, из разряда "и так сойдёт" да.
Более надёжный вариант - сохранять данные при каких-то определённых событиях, которые сопровождаются изменением хранимых в БД данных. Но опять же всё это условность, ведь если данные изменяются в PreThink'e каком-нибудь, то разумеется, что не стоит слать несколько десятков раз в секунду запросы в БД. Короче, нет какой-то единой инструкции для всего этого дела. Нужно включать голову.
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
bizon, запрос в БД обращается только один раз, это при входе игрока и при дисконекте а также при выхода из учетки, данные храниться в Trie
15 Янв 2023
@ImmortalAmxx,да можешь при условии что игрок зашел в учетку
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Limbooc, при смене карты, во время вызова client_disconnected, когда на потоке много запросов, сталкивался с частными случаями (например, всеми нелюбимая майарена), когда мускул просто скипает запросы, пришедшие от плагина, и ничего не сохраняется.
Поэтому и говорю о ненадёжности такого метода в некоторых частных случаях.
 
Сообщения
672
Реакции
242
Помог
11 раз(а)
@bizon,ятебя понял, добавлю метод сохранение (disconnect or round end or raund start)
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу