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

    Статус
    Оффлайн
    Регистрация
    15.05.2016
    Сообщений
    34
    Репутация:
    0 ±

    Облегчение кода

    Добрый день. Подскажите пожалуйста как можно тут облегчить код, избавиться от не нужного.
    Желательно с пояснением.
    Заранее огромное спасибо!
    PHP код:
    stock CheckRegistration(playerid)
    {
        new 
    password[31],email[50],refer[24];

        
    format(passwordsizeof(password), "%s"PlayerRegInfo[playerid][Password]);
        
    format(emailsizeof(email), "%s"PlayerRegInfo[playerid][Email]);
        
    format(refersizeof(refer), "%s"PlayerRegInfo[playerid][Ref]);

        new 
    skin PlayerRegInfo[playerid][Skin];
        new 
    race PlayerRegInfo[playerid][Rassa];
        new 
    gender PlayerRegInfo[playerid][Gender];

        new 
    check_race[25],check_gender[20];
        switch(
    gender)
        {
        case 
    1format(check_gendersizeof(check_gender), "{4582A1}Мужской");
        case 
    2format(check_gendersizeof(check_gender), "{4582A1}Женский");
        default: 
    format(check_gendersizeof(check_gender), "{AA3333}Не выбран");
        }
        switch(
    race)
        {
        case 
    1format(check_racesizeof(check_race), "{4582A1}Афроамереканец");
        case 
    2format(check_racesizeof(check_race), "{4582A1}Европеец");
        case 
    3format(check_racesizeof(check_race), "{4582A1}Азиат");
        default: 
    format(check_racesizeof(check_race), "{AA3333}Не выбрана");
        }


        static const 
    password_line[] = "{FFFFFF}Пароль: %s%s\n{FFFFFF}";
        static const 
    email_line[] = "%sПочта: %s%s\n{FFFFFF}";
        static const 
    refferal_line[] = "%sРеферал: %s%s\n{FFFFFF}";
        static const 
    sex_line[] = "%sПол: %s%s\n{FFFFFF}";
        static const 
    national_line[] = "%sНациональность: %s%s\n{FFFFFF}";
        static const 
    appearance_line[] = "%sВнешность: %s\n{FFFFFF}";
        static const 
    nextreg_line[] = "%s{4582A1}Продолжить регистрацию\n";
        static const 
    next1reg_line[] = "%s{AA3333}Продолжить регистрацию\n";

        new 
    reg_str[-sizeof(password_line) + (-2+MAX_PLAYER_NAME) + (-2+31) +
                    
    sizeof(email_line) + (-2+50) +
                    
    sizeof(refferal_line) - + (MAX_PLAYER_NAME*2) +
                    
    sizeof(sex_line) + (-2+20) +
                    
    sizeof(national_line) + (-2+25)+
                    
    sizeof(appearance_line) + (-+15) +
                    
    sizeof(nextreg_line) + sizeof(next1reg_line) -+
                    (
    8*6)];

        
    format::reg_str(password_line, (strlen(password) > 1) ? ("{4582A1}") : ("{AA3333}"),(strlen(password) > 1) ? (password) : ("Не задан"));
        
    format::reg_str(email_line, (strlen(email) > 1) ? ("{4582A1}") : ("{AA3333}"),(strlen(email) > 1) ? (email) : ("Не задан"));
        
    format::reg_str(refferal_line, (strlen(refer) > 1) ? ("{4582A1}") : ("{AA3333}"),(strlen(refer) > 1) ? (refer) : ("Не задан"));
        
    format::reg_str(sex_line, (strlen(check_gender) > 1) ? ("{4582A1}") : ("{AA3333}"),(strlen(check_gender) > 1) ? (check_gender) : ("Не Выбран"));
        
    format::reg_str(national_line, (check_race) ? ("{4582A1}") : ("{AA3333}"),(strlen(check_race) > 1) ? (check_race) : ("Не Выбрана"));
        
    format::reg_str(appearance_line, (skin) ? ("{4582A1}Выбрана") : ("{AA3333}"));

        if(
    strlen(password) > && strlen(email) > && gender && race && skinformat(reg_strsizeof(reg_str), nextreg_line);
        else 
    format(reg_strsizeof(reg_str), next1reg_line);

        
    ShowPlayerDialog(playeridDIALOG_REGISTERDIALOG_STYLE_LIST"{FFFFFF}Регистрация на {AA3333}"NAME_SERVER"",reg_str"Далее""Отмена");
        return 
    true;

    Последний раз редактировалось #Johnson; 09.04.2018 в 00:16.

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

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Ну, можно выиграть процессорное время, все формат заменить на strcat.
    И зачем такой подсчет в переменной? Нельзя выбрать самый большой массив с самым большим кол-во символов и его использовать для всех?
    В целом тут можно ничего и не упрощать, если это и так хорошо работает.
    И еще можно увеличить читабельность, вынести текст который в "switch" в массив, и по нему работать.
    Последний раз редактировалось Long-; 06.04.2018 в 21:58.

  3. Пользователь сказал cпасибо:
    #Johnson (09.04.2018)
  4. #3
    Аватар для pawnoholic
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.01.2018
    Сообщений
    128
    Репутация:
    15 ±
    Упрл?
    PHP код:
    new reg_str[-sizeof(password_line) + (-2+MAX_PLAYER_NAME) + (-2+31) + 
        
    sizeof(email_line) + (-2+50) + 
        
    sizeof(refferal_line) - + (MAX_PLAYER_NAME*2) + 
        
    sizeof(sex_line) + (-2+20) + 
        
    sizeof(national_line) + (-2+25)+ 
        
    sizeof(appearance_line) + (-+15) + 
        
    sizeof(nextreg_line) + sizeof(next1reg_line) -
        (
    8*6)]; 

  5. #4
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Код (Pastebin)

    На работоспособность не проверял, писал на быструю руку. Но думаю лучше, чем код выше.
    Последний раз редактировалось Geebrox; 07.04.2018 в 00:36.

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

    Статус
    Оффлайн
    Регистрация
    15.05.2016
    Сообщений
    34
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Код (Pastebin)

    На работоспособность не проверял, писал на быструю руку. Но думаю лучше, чем код выше.
    PHP код:
    c:\Users\Nuttz\Desktop\NewProject\pawno\include\sscanf2.inc(270) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\pawno\include\sscanf2.inc(270) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\pawno\include\sscanf2.inc(330) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\pawno\include\sscanf2.inc(330) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(248) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(501) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(757) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(775) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(802) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(820) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(911) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1000) : предупреждение 219переменная "string" уже объявлена в более глобальной зоне видимости
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1311) : ошибка 008должно быть постоянным выражениемпринят ноль
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1326) : ошибка 017необъявленный символ "COLOR_BLUE"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1326) : неправильная табуляция
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1326) : предупреждение 215выражение не имеет эффекта
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1326) -- (1327) : ошибка 017необъявленный символ "COLOR_BLUE"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1327) -- (1328) : предупреждение 215выражение не имеет эффекта
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1328) : ошибка 001ожидался токен ";"но найден "}"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1328) : фатальная ошибка 107слишком много ошибок на одной строке
    Компиляция остановлена
    .
    Pawn compiler 3.2.3664              Copyright (c1997-2017ITB CompuPhase
    Ошибок
    :5. 
    P.S. Все проверки поставил перед энуминатором (в начале мода, где у меня все #define)
    1.Тут ошибки как скобка не закрыта
    PHP код:
    static const gender_info[][] =
        {
            
    COLOR_RED   "Не выбран",
            
    COLOR_BLUE  "Мужской",
            
    COLOR_BLUE  "Женский"
        
    };
     
        static const 
    race_info[][] =
        {
            
    COLOR_RED   "Не выбрана",
            
    COLOR_BLUE  "Афроамереканец",
            
    COLOR_BLUE  "Европеец",
            
    COLOR_BLUE  "Азиат"
        
    }; 
    2.
    PHP код:
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1311) : ошибка 008должно быть постоянным выражениемпринят ноль 
    PHP код:
    password[MAX_PLAYER_PASSWORD]   = PlayerRegInfo[playerid][Password], 
    3.
    PHP код:
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : ошибка 001ожидался токен "-string end-"но найден "-identifier-"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : неправильная табуляция
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : предупреждение 215выражение не имеет эффекта
    c
    :\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : ошибка 001ожидался токен ";"но найден "-integer value-"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : ошибка 001ожидался токен "-string end-"но найден "-identifier-"
    c:\Users\Nuttz\Desktop\NewProject\gamemodes\new.pwn(1344) : фатальная ошибка 107слишком много ошибок на одной строке 
    PHP код:
    static const string_content[] =
            
    COLOR_WHITE     "Пароль: %s%s\n\
            "
    COLOR_WHITE    "Почта: %s%s\n\
            "
    COLOR_WHITE    "Реферал: %s%s\n\
            "
    COLOR_WHITE    "Пол: %s\n\
            "
    COLOR_WHITE    "Национальность: %s\n\
                            %sПродолжить регистрацию\n"

    Последний раз редактировалось #Johnson; 07.04.2018 в 16:23.

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Прошу прощения, был вечер, был сонным + написал же: "На работоспособность не проверял".
    Обновил код: Pastebin

  9. Пользователь сказал cпасибо:
    #Johnson (09.04.2018)
  10. #7
    Аватар для #Johnson
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.05.2016
    Сообщений
    34
    Репутация:
    0 ±
    Всем спасибо, проблема решена, модераторы, закройте пожалуйста тему.

 

 

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

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

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

Ваши права

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