Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±

    Несколько вопросов (AFK, авторизация)

    Здравствуйте. Не так давно я создавал тему с интересующими меня вопросами по программированию, за развёрнутые ответы я очень благодарен Вашему модератору с ником Deimos. В той теме я задавал вопросы о проблемах или по функциям, с которыми мне пришлось столкнуться по мере написания кода. Так вот, сейчас у меня появилось ещё два вопроса, которые касаются системы AFK и системы авторизации.
    1. Система AFK.
    Будет ли нормальной следующая система AFK (вроде как работает на сервере):
    - В enum с информацией об игроке добавил следующее:
    PHP код:
    pAFK
    - В OnPlayerUpdate вставил следующее:
    PHP код:
    pinfo[playerid][pAFK] = 0
    - В таймер обновления аккаунта (он же сток, который вызывается таймером (вроде так сказал )) добавил следующий код:
    PHP код:
    if(pinfo[i][pAFK] >= 3)
    {
    format(stringsizeof(string), "AFK: %s"TimeConvert(pinfo[i][pAFK));
    SetPlayerChatBubble(istringздесь цвет10.03000);
    pinfo[i][pAFK] ++; 
    И сам TimeConvert, который я нашёл в интернете:
    PHP код:
    stock TimeConvert(time)
    {
        new 
    hour 0minute 0second 0string[30];
        
    hour floatround(time/3600);
        
    minute floatround((time/60) - (hour*60));
        
    second floatround(time - ((hour*3600) + (minute*60)));
        if(
    hour 0)
        {
            
    format(stringsizeof(string), "%d:%02d:%02d"hourminutesecond);
        }
        else
        {
            
    format(stringsizeof(string), "%d:%02d"minutesecond);
        }
        return 
    string;

    На сервере всё это "дело" работает, но вдруг я где-то допустил ошибку или где-то не вставил что-то.
    P.S. В сток обнуления информации об игроке после выхода из игры также добавил это.
    2. Система авторизации и регистрации.
    Когда вы заходите на сервер, вводите свои данные, то Вам предлагает выбрать внешность своему персонажу. Если вы выходите из игры во время выбора внешности, то при следующем входе у вас будет скин с 0 id, то есть CJ. Как можно исправить данную проблему?
    Я пробовал сделать следующее:
    В OnPlayerSpawn вставлял
    PHP код:
    if(!pinfo[playerid][skin]
    {
    //здесь сток выбора скина

    но... но... это не совсем помогало (из-за SetSpawnInfo при авторизации, чтобы убрать кнопочки Spawn, >> и <<), потому что когда вылазило окошко регистрации и авторизации, меня сразу перекидывало в интерьер выбора внешности.
    !Будет ли правильным решением вставить в базу данных id скина по умолчанию, вместо 0, чтобы избежать данной проблемы? Или как-то изменить SetSpawnInfo? Потому что скин в SetSpawnInfo выбирается из базы данных :)
    Последний раз редактировалось PawnoNoob; 19.04.2016 в 00:02.

  2. #2
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    при регистрации запиши переменную статуса регистрации (0 не выбрал, 1 выбрал) например в pReg. Она будет в значении 0. После выбора скина ставь 1. При логине сверяешь, если 0 - отправляется в раздевалку, если 1 - отправляется в игру.

  3. Пользователь сказал cпасибо:
    PawnoNoob (19.04.2016)
  4. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну если код выглядит так:
    PHP код:
    if(pinfo[i][pAFK] >= 3)
    {
    format(stringsizeof(string), "AFK: %s"TimeConvert(pinfo[i][pAFK));
    SetPlayerChatBubble(istringздесь цвет10.03000);
    pinfo[i][pAFK] ++; 
    То он не будет работать, ибо прибавление единицы к pAFK должно находится за условием if(pinfo[i][pAFK] >= 3). То бишь
    PHP код:
    if(pinfo[i][pAFK] >= 3)
    {
        
    format(stringsizeof(string), "AFK: %s"TimeConvert(pinfo[i][pAFK));
        
    SetPlayerChatBubble(istringздесь цвет10.03000);
    }
    pinfo[i][pAFK] ++; 
    Хотя, думаю, это просто опечатка, но лучше перестрахуюсь :)
    В остальном система нормальная.

    Ну а по поводу второго вопроса - попробуй использовать ForceClassSelection вместо вызова стока с выбором скина. Тебе надо прогонять все действия, которые ты делаешь при регистрации, только без самой регистрации.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    PawnoNoob (19.04.2016)
  6. #4
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну если код выглядит так:
    PHP код:
    if(pinfo[i][pAFK] >= 3)
    {
    format(stringsizeof(string), "AFK: %s"TimeConvert(pinfo[i][pAFK));
    SetPlayerChatBubble(istringздесь цвет10.03000);
    pinfo[i][pAFK] ++; 
    То он не будет работать, ибо прибавление единицы к pAFK должно находится за условием if(pinfo[i][pAFK] >= 3). То бишь
    PHP код:
    if(pinfo[i][pAFK] >= 3)
    {
        
    format(stringsizeof(string), "AFK: %s"TimeConvert(pinfo[i][pAFK));
        
    SetPlayerChatBubble(istringздесь цвет10.03000);
    }
    pinfo[i][pAFK] ++; 
    Хотя, думаю, это просто опечатка, но лучше перестрахуюсь :)
    В остальном система нормальная.

    Ну а по поводу второго вопроса - попробуй использовать ForceClassSelection вместо вызова стока с выбором скина. Тебе надо прогонять все действия, которые ты делаешь при регистрации, только без самой регистрации.
    Сама система вроде работает, и сеунды идут, потом пишет минуты (1:20 например), но я опечатался немного, забыл посавить скобку, а Вы сделали это за меня :). (я не копирую из своего кода, потому что иногда лень открывать, так как он находится далеко , только конверт этот достал из кода)
    Вот насчёт самой системы регистрации, вариант с установлением id любого скина не "прокатит"? А вот вариант пользователя TheMallard?
    Последний раз редактировалось PawnoNoob; 19.04.2016 в 10:51.

  7. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Сама система вроде работает, и сеунды идут, потом пишет минуты (1:20 например), но я опечатался немного, забыл посавить скобку, а Вы сделали это за меня :). (я не копирую из своего кода, потому что иногда лень открывать, так как он находится далеко , только конверт этот достал из кода)
    Вот насчёт самой системы регистрации, вариант с установлением id любого скина не "прокатит"? А вот вариант пользователя TheMallard?
    Вариант TheMallard будет работать, но всё равно работоспособность зависит именно от кода регистрации. Да и зачем создавать дополнительную переменную, которая будет показывать, выбрал ли игрок скин или нет, если это и так можно понять по тому, какой скин у игрока сохранён? Ведь при выходе в момент выбора скина сохраняется нулевой ID, как я понимаю. А его у игрока быть не может. Вот от этого и можно отталкиваться, что я и предлагал
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. Пользователь сказал cпасибо:
    PawnoNoob (19.04.2016)
  9. #6
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    А вот если я, например, в структуре базы данных (в строке, поле (не знаю, как правильно) :D) установлю по умолчанию, например, 230 id скина (бомж в капюшоне), то нормально ли будет такая система и не будет ли устанавливаться 0 id после выхода при выборе внешности?
    Если нет, то как вообще используется ForceClassSelection?

    И сразу задам ещё два вопроса, которые только-только пришли мне в голову. Как я уже говорил, у меня при авторизации и регистрации стоит SetSpawnInfo:
    PHP код:
    SetSpawnInfo(playerid255пинфо[плеерид][скин], 0001.0, -1, -1, -1, -1, -1, -1);
    SpawnPlayer(playerid); 
    И получается так, что он при авторизации/регистрации становится прямо на спавне, координаты которого указаны в OnPlayerSpawn. Нужно ли менять значения позиции X, Y и Z? Или нежелательно?

    И ещё один вопрос, который снова же касается format. Одну ячейку для нуль-символа нужно выделять только для string
    PHP код:
    format(stringsizeof(string).......... 
    или для всех переменных, которые используются в нём?
    Например: в команде /allplayers (!для примера) будет показываться следующая информация: авторизован ли игрок, АФК ли игрок.
    PHP код:
    new afk[13], auth[22], string[47+MAX_PLAYER_NAME];
    foreach(new 
    iPlayer)
    {
    if(
    p.log[i] == trueauth "{цвет}Авторизован"// 8+11 = 19
    else auth "{цвет}Не авторизован"// 8+14 = 22
    if(pinfo[i][afk] >= 3afk "{цвет}[afk]"// 8 + 5 = 13
    format(stringsizeof(string), "%s[%i] | %s | %s"pinfo[i][imya], iauthafk); // 46 + макс. значение ника + 1 нуль-символ.
    sendclientmessage(playeridstring)

    Команда чисто для примера, никакого смысла она не несёт. Так вот, сами вопросы:
    - Для new afk, auth нужно ли добавлять одну ячейку для нуль-символа?
    - В string нужно указывать длину afk и auth?

    Ещё один вопрос относительно кнопочек Spawn, << и >>. Недавно, просматривая Wiki SA:MP, нашёл такой интересный паблик под названием "OnPlayerRequestSpawn". Можно ли использовать данный паблик, чтобы отключить функционал этих кнопок или чтобы вообще кикнуло при нажатии на эту кнопочку. Или же всё-таки лучше использовать SetSpawnInfo?
    SetSpawnInfo у меня вызывает некоторые трудности с написанием одной системы.

    И ещё один вопрос, который касается командного процессора. Любой игрок, который зашёл на сервер, мог использовать команды и спокойно делать что-либо, решил я как-то это всё дело поправить. Очень давно сталкивался с такой фишкой, как проверка на авторизацию в каждой команде, но я решил копнуть глубже и наткнулся на сообщение от официального разработчика (Daniel Cortez), а именно паблика OnPlayerReceived. Вставил я туда некоторые значения и теперь команды не работают до того, как игрок не авторизовался, всё ли так я сделал?
    PHP код:
    if(проверка на авторизацию == false || проверка на АФК >= 3) return 0
    И ещё один вопрос, который касается диалоговых окон. Вот у меня есть система регистрации, авторизации и тому подобные диалоги. Например, если игрок нажимает на клавишу Esc во время авторизации, то его кикает. Нужно ли прописывать return 1; после кика или же нет?
    PHP код:
    if(!response)
    {
    k(playerid"вы были кикнуты"); // для примера.

    И вот сам "k"
    PHP код:
    stock k(playeridtext[])
    {
        
    SendClientMessage(playeridredtext);
        
    SetTimerEx("timer"1000false"i"playerid);
        return 
    1;

    По поводу кодировки в базе данных также появился вопрос. Я не понимаю, в чем отличие между кодировкой, например, cp1251_general_cs, cp1251_general_ci и cp1251_bin. Какую лучше выбрать для базы данных? Раньше я выбирал cp1251_bin, а вот сейчас, если честно, не знаю...
    Последний раз редактировалось PawnoNoob; 25.04.2016 в 23:31. Причина: добавление вопросов :D

 

 

Информация о теме

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •