Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    184
    Репутация:
    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
    Сообщений
    204
    Репутация:
    38 ±
    при регистрации запиши переменную статуса регистрации (0 не выбрал, 1 выбрал) например в pReg. Она будет в значении 0. После выбора скина ставь 1. При логине сверяешь, если 0 - отправляется в раздевалку, если 1 - отправляется в игру.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Ну если код выглядит так:
    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 вместо вызова стока с выбором скина. Тебе надо прогонять все действия, которые ты делаешь при регистрации, только без самой регистрации.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    184
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Сама система вроде работает, и сеунды идут, потом пишет минуты (1:20 например), но я опечатался немного, забыл посавить скобку, а Вы сделали это за меня :). (я не копирую из своего кода, потому что иногда лень открывать, так как он находится далеко , только конверт этот достал из кода)
    Вот насчёт самой системы регистрации, вариант с установлением id любого скина не "прокатит"? А вот вариант пользователя TheMallard?
    Вариант TheMallard будет работать, но всё равно работоспособность зависит именно от кода регистрации. Да и зачем создавать дополнительную переменную, которая будет показывать, выбрал ли игрок скин или нет, если это и так можно понять по тому, какой скин у игрока сохранён? Ведь при выходе в момент выбора скина сохраняется нулевой ID, как я понимаю. А его у игрока быть не может. Вот от этого и можно отталкиваться, что я и предлагал
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    184
    Репутация:
    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)

Ваши права

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