Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для phpadmin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±

    Оптимизирован и правильный код? Если можно то какие вариант ещё есть ?

    PHP код:
    if(response)
        {
            switch(
    dialogid)
            {
                case 
    969:
                {
                    if(!
    strlen(inputtext))
                    {
                        
    spd(playerid,969,dsi,"Введите сумму","Пополнение счета IT сообщества (пустая строка)","Скрыть","Выход");
                    }
                    
    #define dengi strval(inputtext)
                    
    if(dengi || dengi 1000000)
                    {
                        
    scm(playerid,-1,"Нельзя пополнить счет меньше 1 и больше 1000000 вирт");
                        
    spd(playerid,969,dsi,"Введите сумму","Пополнение счета IT сообщества","Скрыть","Выход");
                        return 
    true;
                    }
                    if(
    s_player[playerid][pDollar] < dengi) return scm(playerid,-1,"У вас нет столько денег");
                    
    s_player[playerid][pDollar] -= dengi;
                    
    s_internet[idollar] += dengi;
                    
    SavePlayer();
                    return 
    true;
                    
    #undef dengi
                
    }
            }
        } 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    #define dengi strval(inputtext) 
    Что это? Зачем?
    Переменная создаётся не только для того, чтоб код был более опрятный, но и для того, чтоб по 100 раз не вызывать одну и ту же функцию. С макросом же функция всё равно будет вызываться каждый раз.

    И что это за коверканье стандартных функций? Что за "spd", "scm"? Самому же потом будет неудобно работать с таким кодом, если вдруг решишь сделать поиск по названию функции (будут совпадения с названиями других переменных/функций), не говоря уже о том, что ты этим убиваешь совместимость с чужим кодом. Куда вы так спешите, что вам лень написать полное название функции? Не нужно быдлокодить

    ID диалогов в виде чисел - тоже такая себе идея. Заведи enum под диалоги и прописывай их там в виде членов перечисления. Так и обезопасишь себя от повтора ID, и найти нужный диалог будет проще.


    И вот это что ещё такое?
    PHP код:
    if(response
        { 
            switch(
    dialogid
            { 
    Ты разделяешь код кнопок диалога по разным switch? Самому потом удобно будет выискивать код одного диалога по двум разным участкам OnDialogResponse?

    Вот эту проверку лучше перенести в начало диалога
    PHP код:
    if(s_player[playerid][pDollar] < dengi) return scm(playerid,-1,"У вас нет столько денег"); 
    Ибо какой смысл проводить все те махинации с "dengi", если всё упирается в количество денег у игрока?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Daniel_Cortez (16.06.2017)
  4. #3
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Оптимизировать с помощью макросов - самый эффективный способ (сарказм)

    Впрочем, я посоветовал бы вам создать новую переменную, в которую необходимо занести возвращаемое значение функции strval, а не "оптимизировать" это дело макросом. Можно ещё передавать строки с помощью оператора "!" перед кавычками, однако из-за непонятных мне функций, это будет очень сомнительно; поскольку это могут быть функции-обработчики, которые выполняют дополнительный код при каждом вызове, либо же это могут макро-функции, которые просто сокращают названия функций. Поэтому в следующий раз, если вы используете макро-функции, то лучше уточнить их функцию.

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

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    Можете описать правильный код? по вашему мнению. А то я не понимаю. Мне дефайн ундев чем заменить new?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от phpadmin Посмотреть сообщение
    Можете описать правильный код? по вашему мнению. А то я не понимаю. Мне дефайн ундев чем заменить new?
    Тебе же его уже описали. Даже два человека. Нужно лишь чуть-чуть подумать и осмыслить написанное
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от phpadmin Посмотреть сообщение
    Можете описать правильный код? по вашему мнению. А то я не понимаю. Мне дефайн ундев чем заменить new?
    Абсолютно верно. Директива define и undef - части препроцессора, определяющие новый макрос (undef - удаляет макрос), значение которого будет подставлена при компиляции. В вашем случае это множество обращений к функции strval. Если же использовать оператор new, то вам не нужно будет множество раз вызывать одну и ту же функцию, для одного и того же результата, поскольку возвращаемое значение уже будет хранится в этой переменной.
    PHP код:
    new money strval(inputtext); 

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

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    Теперь я это написав ко всем new, мне потом всего лишь надо использовать "money" когда угодно? и всё? именно в в инпуттекстах?

    - - - Updated - - -

    Сори за мои знания павно мизерное. Просто стало интересно что-то мутить.

    - - - Updated - - -

    Или ты имеешь виду использовать по такому типу?
    PHP код:
    case 0..73:
                        if(
    s_player[playerid][pBox]>0)
                        {
                            new 
    String[250];
                            
    s_player[playerid][pBox] -=1;
                            
    format(Stringsizeof(String), "%s {FFFFFF}Вы открыли элитную коробку (осталось: %d .шт)\n\n",String,s_player[playerid][pBox]);
                            new 
    rand Vaper[random(sizeof Vaper)];
                            new 
    patr Vaper1[random(sizeof Vaper1)];
                            
    GivePlayerWeapon(playerid,rand,patr);
                            
    format(Stringsizeof(String), "%s {FFFFFF}Оружие: {CC8DEC}%s\n",String,gname(rand));
                            new 
    skin Spinner[random(sizeof Spinner)];
                            
    SetPlayerSkin(playerid,skin);
                            
    format(String,sizeof(String), "%s {FFFFFF}Временная одежда: (id одежды: {708DEB}%d{FFFFFF})\n",String,skin);
                            new 
    dollar Gibby[random(sizeof Gibby)];
                            
    s_player[playerid][pDollar]+=dollar;
                            
    format(String,sizeof(String), "%s {FFFFFF}Бонусные доллары: {79D26D}%d$\n",String,dollar);
                            
    spd(playerid,9903,dsm,"{FFFFFF}Elite BOX",String,"Закрыть","");
                        } 
    - - - Updated - - -

    Если что код не кривой тут так стал

    - - - Updated - - -

    Вот так?

    PHP код:
    case 969:
                {
                    new 
    dengi strval(inputtext);
                    if(
    s_player[playerid][pDollar] < dengi) return scm(playerid,-1,"У вас нет столько денег");
                    if(!
    strlen(inputtext))
                    {
                        
    spd(playerid,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
                        На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");
                    }
                    if(
    dengi || dengi 1000000)
                    {
                        
    scm(playerid,-1,"Сумма неверная, повторите попытку!");
                        
    spd(playerid,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
                        На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");
                        return 
    true;
                    }
                    if(
    s_player[playerid][pDollar] < dengi) return scm(playerid,-1,"У вас нет столько денег");
                    
    s_player[playerid][pDollar] += dengi;
                    
    s_internet[idollar] -= dengi;
                    
    SavePlayer();
                    return 
    true
    Последний раз редактировалось phpadmin; 16.06.2017 в 18:30.

  9. #8
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Да. Я очень настоятельно рекомендую вам прочитать как можно больше документации по данному ЯП. Более того, вы можете прочитать статьи на этом форуме.

  10. Пользователь сказал cпасибо:
    Seregamil (16.06.2017)
  11. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от phpadmin Посмотреть сообщение
    scm
    Почему бы не продолжить оптимизацию?

    Можно оптимизировать названия некоторых функций, операторов и переменных:
    PHP код:
    strval -> sv
    strlen 
    -> sl
    s_player 
    -> s_p
    s_internet 
    -> s_i
    SavePlayer 
    -> SP
    playerid 
    -> p
    pDollar 
    -> pD
    idollar 
    -> id
    inputtext 
    -> i
    return -> 
    Код получается более короткий, а, значит, более понятный и оптимизированный:
    PHP код:
    case 969:
                {
                    
    #define r return
                    #define p playerid
                    #define pD pDollar
                    #define id idollar
                    #define t true
                    
    new sv(i);
                    if(
    s_p[p][pD] < dr scm(p,-1,"У вас нет столько денег");
                    if(!
    sl(i))
                    {
                        
    spd(p,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
                        На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");
                    }
                    if(
    || 1000000)
                    {
                        
    scm(p,-1,"Сумма неверная, повторите попытку!");
                        
    spd(p,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
                        На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");
                        
    r t;
                    }
                    if(
    s_p[p][pD] < dr scm(p,-1,"У вас нет столько денег");
                    
    s_p[p][pD] += d;
                    
    s_i[id] -= d;
                    
    SP();
                    
    r t
    Но ещё можно оптимизировать, убрав ненужные пробелы и отступы:
    PHP код:
    case 969: {
    #define r return
    #define p playerid
    #define pD pDollar
    #define id idollar
    #define t true
    new d=sv(i);if(s_p[p][pD]<d)r scm(p,-1,"У вас нет столько денег");
    if(!
    sl(i)){spd(p,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
    На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");}
    if(
    d<1||d>1000000){scm(p,-1,"Сумма неверная, повторите попытку!");spd(p,969,dsi,"Доступ активирован","Вы активировали подключение к федеральном хранилищу банка HG\n\
    На вывод денег стоит лимит. С оторожностью выводите деньги!"
    ,"Ввести","Выход");r t;}
    if(
    s_p[p][pD]<d)r scm(p,-1,"У вас нет столько денег");s_p[p][pD]+=d;s_i[id]-=d;SP();r t
    P.S. Если кто не понял - это "шутка"...

  12. 6 пользователя(ей) сказали cпасибо:
    admln (26.06.2017) dch1hff1 (16.06.2017) Igoreshka (27.06.2017) Nexius_Tailer (16.06.2017) Seregamil (16.06.2017) Web (17.06.2017)
  13. #10
    Аватар для phpadmin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.05.2017
    Сообщений
    103
    Репутация:
    1 ±
    Сарказм принят)
    Лучше скажи функцию что бы в виртуальном мире нельзя было использовать кнопки.
    Типа
    PHP код:
    if (newkeys == KEY_WALK)
        {
            if(
    IsPlayerInRangeOfPoint(playerid,0.9,1542.6599,-1362.4591,329.4587))
            {
                 if(
    s_player[playerid][pLic] == 1)
                 {
                       new 
    string[500];
                     
    strins(string,"{FFFFFF}Голодные коробки\t{FFFFFF}Наименование\t{FFFFFF}Количество призов\t{FFFFFF}Цена\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry BOX»\t{FFFFFF}Разное\t{FFFFFF}1 приз\t{79D26D}250$\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry BOX»\t{FFFFFF}Стандарт\t{FFFFFF}1 приз\t{79D26D}600$\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry BOX»\t{73E8FF}Ice(ледяной)\t{FFFFFF}2 приза\t{79D26D}1100$\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry BOX»\t{FFBB5C}Elite(элитное)\t{FFFFFF}3 приза\t{D8945F}30€\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry Music»\t{FFFFFF}Своя музыка\t{FFFFFF}Нет приза\t{D8945F}5€\n",strlen(string));
                     
    strins(string,"{BCBCBC}«Hungry Code»\t{FFFFFF}Code\t{FFFFFF}Нет приза\t{79D26D}Free\n",strlen(string));
                    
    spd(playerid,777,dls,"{1CD91F}H{FFFFFF}ungry {1CD91F}G{FFFFFF}ames BOX",string,"Открыть","Закрыть");
                }
                else
                {
                    
    spd(playerid,776,dsm,"{1CD91F}H{FFFFFF}ungry {1CD91F}G{FFFFFF}ames BOX","\t\n\n{FFFFFF}Автомат с коробками Вам недоступен.\t\n\
                    Причина: вы не приняли условия лицензионного соглашения\n\n"
    ,"Закрыть","");
                }
            } 
    Какая функция нужна или как сделать что бы этот раздел работал например в виртуальном мире определенном?

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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