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

Реклама


 
IP:176.32.36.96:7777 Ha6op adm,liderov + bonuse.

**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 26 из 26 ПерваяПервая ... 16242526
Показано с 251 по 259 из 259
  1. #251
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,121
    Репутация:
    1254 ±
    Так:

    PHP код:
    forward ShowCharList(playerid);
    public 
    ShowCharList(playerid)
    {
        new 
    chars[3][MAX_PLAYER_NAME];
        
    cache_get_value_name(0"CharName"chars[0], MAX_PLAYER_NAME);
        new 
    query_string[6+MAX_PLAYER_NAME 3];
        
    format(query_stringsizeof(query_string), "%s"chars[0]);
        
    ShowPlayerDialog(playeriddSelChar, LIST, "Выбор персонажа"query_string"Выбрать""Инфо");
        return 
    1;
    }

    forward UploadPlayerAccount(playerid);
    public 
    UploadPlayerAccount(playerid)
    {
        
    cache_get_value_name_int(0"ID"pInfo[playerid][pID]);
        
    SendClientMessage(playeridCOLOR_GREEN"Вы успешно авторизировались! Выберите персонажа...");
        new 
    query_string[128];
        
    format(query_stringsizeof(query_string), "SELECT `CharName` FROM `Characters` WHERE `ID` = '%d'"pInfo[playerid][pID]);
        
    mysql_tquery(mysql_connect_IDquery_string"ShowCharList""i"playerid);
        return 
    1;

    И если не будет работать, сделай так и скинь логи после попытки войти:
      Открыть/закрыть
    PHP код:
    forward ShowCharList(playerid);
    public 
    ShowCharList(playerid)
    {
        print(
    "ShowCharList 1");
        new 
    chars[3][MAX_PLAYER_NAME];
        
    cache_get_value_name(0"CharName"chars[0], MAX_PLAYER_NAME);
        print(
    "ShowCharList 2");
        new 
    query_string[6+MAX_PLAYER_NAME 3];
        
    format(query_stringsizeof(query_string), "%s"chars[0]);
        
    ShowPlayerDialog(playeriddSelChar, LIST, "Выбор персонажа"query_string"Выбрать""Инфо");
        print(
    "ShowCharList 3\n\n");
        return 
    1;
    }

    forward UploadPlayerAccount(playerid);
    public 
    UploadPlayerAccount(playerid)
    {
        print(
    "\n\nUploadPlayerAccount 1");
        
    cache_get_value_name_int(0"ID"pInfo[playerid][pID]);
        print(
    "UploadPlayerAccount 2");
        
    SendClientMessage(playeridCOLOR_GREEN"Вы успешно авторизировались! Выберите персонажа...");
        new 
    query_string[128];
        
    format(query_stringsizeof(query_string), "SELECT `CharName` FROM `Characters` WHERE `ID` = '%d'"pInfo[playerid][pID]);
        print(
    query_string);
        
    mysql_tquery(mysql_connect_IDquery_string"ShowCharList""i"playerid);
        print(
    "UploadPlayerAccount 3");
        return 
    1;

    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  2. Пользователь сказал cпасибо:
    Outsider (09.03.2017)
  3. #252
    Аватар для Outsider
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.03.2017
    Сообщений
    8
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так:
    Спасибо большое.
    Но, блин, я не понимаю, почему у меня не работало? Я даже отличий в коде не нашел.

  4. #253
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,121
    Репутация:
    1254 ±
    Цитата Сообщение от Outsider Посмотреть сообщение
    Спасибо большое.
    Но, блин, я не понимаю, почему у меня не работало? Я даже отличий в коде не нашел.
    Твой код:
    PHP код:
        new chars[3];
        
    cache_get_value_name(0"CharName"chars[0], 24); 
    Мой код:
    PHP код:
        new chars[3][MAX_PLAYER_NAME];
        
    cache_get_value_name(0"CharName"chars[0], MAX_PLAYER_NAME); 
    Сейчас подчищу статью от бессмысленных сообщений. Не пугайтесь, если что-то пропадёт
    Последний раз редактировалось DeimoS; 09.03.2017 в 19:36.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Outsider (10.03.2017)
  6. #254
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    256
    Репутация:
    23 ±
    PHP код:
    if(!strlen(inputtext)) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить регистрацию не введя пароль!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
            else if(
    strlen(inputtext) < 4) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
            else if(
    strlen(inputtext) > 30) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    Не значительно, но может лучше так?

    PHP код:
    if (!(<= strlen(inputtext) <= 30))
        return 
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    Последний раз редактировалось m1n1vv; 18.03.2017 в 12:17.

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

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,121
    Репутация:
    1254 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    if(!strlen(inputtext)) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить регистрацию не введя пароль!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
            else if(
    strlen(inputtext) < 4) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
            else if(
    strlen(inputtext) > 30) return ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    Не значительно, но может лучше так?

    PHP код:
    if (!(<= strlen(inputtext) <= 30))
        return 
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    А что, тащемта, изменилось, кроме уменьшения числа строк? Как по мне, лучше дать игроку конкретную информацию по тому, что он сделал не так, а не что-то обобщённое, что заставит его додумывать самостоятельно.
    Если ты о сокращении числа вызовов strlen, то проще уж сделать так:
    PHP код:
    new input_size strlen(inputtext);
    if(
    input_size 4)
        return 
    ShowPlayerDialog(playerid"dRegister"DIALOG_STYLE_INPUT"{FF8A00} {FFFFFF}Регистрация""{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход");
    else if(
    input_size MAX_PLAYER_PASSWORD)
        return 
    ShowPlayerDialog(playerid"dRegister"DIALOG_STYLE_INPUT"{FF8A00} {FFFFFF}Регистрация""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  8. #256
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    256
    Репутация:
    23 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А что, тащемта, изменилось, кроме уменьшения числа строк? Как по мне, лучше дать игроку конкретную информацию по тому, что он сделал не так, а не что-то обобщённое, что заставит его додумывать самостоятельно.
    Если ты о сокращении числа вызовов strlen, то проще уж сделать так:
    PHP код:
    new input_size strlen(inputtext);
    if(
    input_size 4)
        return 
    ShowPlayerDialog(playerid"dRegister"DIALOG_STYLE_INPUT"{FF8A00} {FFFFFF}Регистрация""{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход");
    else if(
    input_size MAX_PLAYER_PASSWORD)
        return 
    ShowPlayerDialog(playerid"dRegister"DIALOG_STYLE_INPUT"{FF8A00} {FFFFFF}Регистрация""{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).""Регистрация""Выход"); 
    А вместо for использовать while?

  9. #257
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,121
    Репутация:
    1254 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А вместо for использовать while?



    Цитата Сообщение от DeimoS Посмотреть сообщение
    А что, тащемта, изменилось
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  10. #258
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    256
    Репутация:
    23 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение

    PHP код:
    case dRegister

        if (!
    response
        { 
            
    ShowPlayerDialog(playeriddKickMessageDIALOG_STYLE_MSGBOX, !"Оповещение", !"{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от регистрации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", !"Выход"""); 
            return 
    Kick(playerid); 
        } 

        new
            
    len strlen(inputtext),
            
    is;

        if (!(
    <= len <= 30))
            return 
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT, !"Регистрация нового пользователя", !"{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, 0-9).", !"Регистрация", !"Выход"); 

        while ((
    inputtext[i++]) != '\0')
        { 
            switch (
    s
            { 
                case 
    '0'..'9''a'..'z''A'..'Z'
                    continue; 
                default: 
                    return 
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT, !"Регистрация нового пользователя", !"{FF0000}Ошибка: {FFFFFF}Пароль содержит запрещённые символы!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, 0-9).", !"Регистрация", !"Выход"); 
            } 
        } 

        
    strcat((pInfo[playerid][pPassword][0] = EOSpInfo[playerid][pPassword]), inputtext);
        return 
    CreateNewAccount(playeridpInfo[playerid][pPassword]);

    Правда можно еще больше упростить. Только ради stack.

      Открыть/закрыть
    PHP код:
    case dRegister

        if (!
    response
        { 
            
    ShowPlayerDialog(playeriddKickMessageDIALOG_STYLE_MSGBOX, !"Оповещение", !"{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от регистрации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", !"Выход"""); 
            return 
    Kick(playerid); 
        } 

        new
            
    len strlen(inputtext),
            
    war,
            
    is;

        if (!(
    <= len <= 30))
            
    war 1;

        while ((
    inputtext[i++]) != '\0')
        { 
            switch (
    s
            { 
                case 
    '0'..'9','a'..'z''A'..'Z'
                    continue; 
                default: 
                {
                    
    war 1;
                    break;
                }
            }
        }

        if (
    war)
            return 
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT, !"Регистрация нового пользователя", !"{FF0000}Ошибка: {FFFFFF}Пароль содержит запрещённые символы!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, 0-9).", !"Регистрация", !"Выход"); 

        
    strcat((pInfo[playerid][pPassword][0] = EOSpInfo[playerid][pPassword]), inputtext);
        return 
    CreateNewAccount(playeridpInfo[playerid][pPassword]);

    Последний раз редактировалось m1n1vv; 18.03.2017 в 13:36.

  11. #259
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,121
    Репутация:
    1254 ±
    Не заботишься ты о своих игроках однако :)
    Пара сэкономленных байт не сделают никакой погоды. А вот если игроку будет даваться полная информация о том, что он делает не так - игрок будет тебе благодарен (но это не точно).

    Вообще можно очень много чего переписать и сократить (например, узнавать ID строки в таблице после создания аккаунта гораздо эстетичнее через однопоточный запрос)
     то бишь
    PHP код:
    new query_string[66+MAX_PLAYER_NAME-4+30]; 
    format(query_stringsizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%s', '%s')"pInfo[playerid][pName], password); 
    mysql_query(mysql_connect_IDquery_string); 
    pInfo[playerid][pID] = cache_insert_id(mysql_connect_ID); 

    но это всё не так важно, ибо первостепенная задача этой статьи - рассказать о принципах создания рабочей системы аккаунтов, а не дать готовый код.
    Да и редактировать статью довольно проблематично, ибо из-за объёмов и обилия различных "тэгов" для оформления, форум очень неохотно желает сохранять любые изменения в статье (приходится по нескольку десятков раз повторять процедуру сохранения (да и любого другого варианта просмотра результата, а-ля "предварительный просмотр"), которая длится по несколько минут, что довольно неудобно с учётом того, что любые изменения статьи должны вписываться в общее оформление).

    И да, вариант с while - очередная попытка гнаться за миллисекундами. Я бы не сказал, что это плохо, но в формате статьи это будет лишним, ибо придётся объяснять как всё работает, что лишь забьёт головы читателей. Сам я использую while в данной ситуации, но в статье об этом не вижу смысла упоминать, ибо профита на деле мало
    Последний раз редактировалось DeimoS; 18.03.2017 в 13:58.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

 

 
Страница 26 из 26 ПерваяПервая ... 16242526

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

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

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

Ваши права

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