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

    Статус
    Оффлайн
    Регистрация
    28.11.2015
    Адрес
    Moscow City
    Сообщений
    50
    Репутация:
    6 ±

    Оптимизация

    Всем привет
    Написал небольшой мод, хотел бы спросить у вас, неплоха ли оптимизация и читабелен ли код?
    Pastebin - Клик

    P.S. Спасибо DeimoS )
    Последний раз редактировалось Sarah; 13.02.2018 в 18:04.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Не в том месте пытаешься искать, что оптимизировать. Оптимизируй алгоритмы, ищи слабые места в моде с помощью профайлера
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. #3
    Аватар для Sarah
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.11.2015
    Адрес
    Moscow City
    Сообщений
    50
    Репутация:
    6 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не в том месте пытаешься искать, что оптимизировать. Оптимизируй алгоритмы, ищи слабые места в моде с помощью профайлера
    Ну а все же?)

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

    Статус
    Оффлайн
    Регистрация
    18.01.2018
    Сообщений
    128
    Репутация:
    15 ±
    Код не соответствует мировым стандартам, читаемость кода оставляет желать лучшего.

    1. Имена переменных должны быть записаны в смешанном регистре, начиная с нижнего.

    Не правильно:
    PHP код:
    new mysql_id
    Правильно:
    PHP код:
    new mysqlHandle
    2. Имена, представляющие типы, должны быть обязательно написаны в смешанном регистре, начиная с верхнего и значения перечислений должны быть записаны в верхнем регистре с нижним подчёркиванием в качестве разделителя.

    Не правильно:
    PHP код:
    enum player_info {
        
    ID,
        
    Name[MAX_PLAYER_NAME],
        
    Pass[24],
        
    Language// 1 - Russian, 2 - English
        
    Sex,
        
    Skin,
    };
    new 
    pInfo[MAX_PLAYERS][player_info]; 
    Правильно:

    PHP код:
    enum E_PLAYER_INFO
    {
        
    E_PLAYER_ID,
        
    E_PLAYER_NAME[MAX_PLAYER_NAME],
        
    E_PLAYER_PASS[24],
        
    E_PLAYER_LANGUAGE,
        
    E_PLAYER_SEX,
        
    E_PLAYER_SKIN,
    }
    new 
    PlayerInfo[MAX_PLAYERS][E_PLAYER_INFO]; 
    Есть еще и другие пункты, но для начала этого будет достаточно.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    Код не соответствует мировым стандартам
    Ну это слишком громко сказано :) Нет одного общего стандарта. Стандарты есть лишь у конкретных языков. И от языка к языку они варьируются, исходя из особенностей языков.
    Так же, например, есть такая штука, как "Венгерская нотация". А первый твой пункт описан вот тут и там же есть примеры того, как в разных языках используются разные вариации игр с регистром.

    Вот в этой теме отобраны адекватные среди наиболее распространённых вариантов оформления кода. И если уж чего-то придерживаться в SA-MP, то приближенного к той теме.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    28.11.2015
    Адрес
    Moscow City
    Сообщений
    50
    Репутация:
    6 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    Код не соответствует мировым стандартам, читаемость кода оставляет желать лучшего.

    1. Имена переменных должны быть записаны в смешанном регистре, начиная с нижнего.

    Не правильно:
    PHP код:
    new mysql_id
    Правильно:
    PHP код:
    new mysqlHandle
    2. Имена, представляющие типы, должны быть обязательно написаны в смешанном регистре, начиная с верхнего и значения перечислений должны быть записаны в верхнем регистре с нижним подчёркиванием в качестве разделителя.

    Не правильно:
    PHP код:
    enum player_info {
        
    ID,
        
    Name[MAX_PLAYER_NAME],
        
    Pass[24],
        
    Language// 1 - Russian, 2 - English
        
    Sex,
        
    Skin,
    };
    new 
    pInfo[MAX_PLAYERS][player_info]; 
    Правильно:

    PHP код:
    enum E_PLAYER_INFO
    {
        
    E_PLAYER_ID,
        
    E_PLAYER_NAME[MAX_PLAYER_NAME],
        
    E_PLAYER_PASS[24],
        
    E_PLAYER_LANGUAGE,
        
    E_PLAYER_SEX,
        
    E_PLAYER_SKIN,
    }
    new 
    PlayerInfo[MAX_PLAYERS][E_PLAYER_INFO]; 
    Есть еще и другие пункты, но для начала этого будет достаточно.
    Как по мне - это небольшой бред
    Все и так понятно, зачем что-то еще переделывать?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Касаемо просьбы автора.

    Первое, что бросилось в глаза - ошибки с вещественными аргументами (указание целых чисел там, где должно быть вещественное число)
    PHP код:
    SetPlayerPos(playerid005); 
    Это создаёт лишние вызовы функции float

    А вот такие конструкции
    PHP код:
    if(!strlen(inputtext) || strlen(inputtext) > 24) return Show_Register(playerid);
                
    strmid(pInfo[playerid][Pass], inputtext064255); 
    можно реализовать так
    PHP код:
    if(!(<= strlen(inputtext) <= 24)) return Show_Register(playerid);
                
    strmid(pInfo[playerid][Pass], inputtext064255); 
    Или же так:
    PHP код:
    new len strlen(inputtext);
    if(!
    len || len 24) return Show_Register(playerid);
                
    strmid(pInfo[playerid][Pass], inputtext064255); 
    Тем самым не заставляя сервер обращаться к одной и той же нативке для получения одной и той же информации.



    Вот эту конструкцию
    PHP код:
                switch(listitem) {
                    case 
    0pInfo[playerid][Language] = 1;
                    case 
    1pInfo[playerid][Language] = 2;
                } 
    Вполне можно заменить на такую строку:
    PHP код:
    pInfo[playerid][Language] = listitem+1


    Ну и вот, например, тут
    PHP код:
            case D_LOGIN: {
                if(!
    response) return Kick(playerid);
                new 
    query[44+24];
                if(!
    strlen(inputtext) || strlen(inputtext) > 24) return Show_Login(playerid);
                if(!
    strcmp(pInfo[playerid][Pass], inputtext)) {
                    
    mysql_format(mysql_idquerysizeof(query), "SELECT * FROM `accounts` WHERE `Pass`='%s'"inputtext);
                    
    mysql_function_query(mysql_idquerytrue"@_LoadAccount""i"playerid);
                } else {
                    
    SetPVarInt(playerid"WrongPass"GetPVarInt(playerid"WrongPass")+1);
                    
    SCM(playerid, -1"You have entered the wrong password many times, so they were kicked.");
                    
    Show_Login(playerid);
                    if(
    GetPVarInt(playerid"WrongPass") >= 3) return Kick(playerid);
                }
                return 
    true;
            } 
    ты объявляешь массив "new query[44+24];" до проверок, которые никак не связаны с этим массивом. То бишь, если игрок, например, не ввёл ничего в диалоговое окно и условие " if(!strlen(inputtext)" сработало, прервав дальнейшую обработку кода, этот массив всё равно будет инициализирован, на что потратится время. Достаточно переместить его за проверку и такого уже не будет (а в твоём случае его вообще стоит перенести в конкретное условие, в котором используется массив)

    PHP код:
            case D_LOGIN: {
                if(!
    response) return Kick(playerid);
                if(!
    strlen(inputtext) || strlen(inputtext) > 24) return Show_Login(playerid);
                if(!
    strcmp(pInfo[playerid][Pass], inputtext)) {
                    new 
    query[44+24];
                    
    mysql_format(mysql_idquerysizeof(query), "SELECT * FROM `accounts` WHERE `Pass`='%s'"inputtext);
                    
    mysql_function_query(mysql_idquerytrue"@_LoadAccount""i"playerid);
                } else {
                    
    SetPVarInt(playerid"WrongPass"GetPVarInt(playerid"WrongPass")+1);
                    
    SCM(playerid, -1"You have entered the wrong password many times, so they were kicked.");
                    
    Show_Login(playerid);
                    if(
    GetPVarInt(playerid"WrongPass") >= 3) return Kick(playerid);
                }
                return 
    true;
            } 

    Пока всё
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    28.11.2015
    Адрес
    Moscow City
    Сообщений
    50
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну это слишком громко сказано :) Нет одного общего стандарта. Стандарты есть лишь у конкретных языков. И от языка к языку они варьируются, исходя из особенностей языков.
    Так же, например, есть такая штука, как "Венгерская нотация". А первый твой пункт описан вот тут и там же есть примеры того, как в разных языках используются разные вариации игр с регистром.

    Вот в этой теме отобраны адекватные среди наиболее распространённых вариантов оформления кода. И если уж чего-то придерживаться в SA-MP, то приближенного к той теме.
    Спасибо за последнюю тему, почитаю )
    Можешь подсказать, где найти тему, в которой объясняется #defined #endif ну и так далее, совсем этого не понимаю

    UCP: Понял, исправлюсь )

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

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

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

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Sarah (13.02.2018)
  12. #10
    Аватар для Snegovik1337
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.01.2018
    Сообщений
    17
    Репутация:
    3 ±
    Вызывать регистрацию в OnPlayerConnect, не самый лучший вариант, версия 0.3DL даст о себе знать

    - - - Добавлено - - -

    Это
    PHP код:
            case D_REG_SEX: {
                if(!
    response) return Kick(playerid);
                new 
    rand;
                switch(
    listitem) {
                    case 
    0: {
                        
    pInfo[playerid][Sex] = 1;
                        
    rand random(sizeof(Random_Skin_Male));
                        
    pInfo[playerid][Skin] = Random_Skin_Male[rand];
                    }
                    case 
    1: {
                        
    pInfo[playerid][Sex] = 2;
                        
    rand random(sizeof(Random_Skin_Female));
                        
    pInfo[playerid][Skin] = Random_Skin_Female[rand];
                    }
                }
                
    CreateNewAccount(playerid);
                return 
    true;
            } 
    На
    PHP код:
            case D_REG_SEX: {
                if(!
    response) return Kick(playerid);
                
    pInfo[playerid][Sex] = listitem 1;
                
    pInfo[playerid][Skin] = (listitem == 0)?
                (
    Random_Skin_Male[random(sizeof(Random_Skin_Male))]):(Random_Skin_Female[random(sizeof(Random_Skin_Female))]);
                
    CreateNewAccount(playerid);
                return 
    true;
            } 

  13. Пользователь сказал cпасибо:
    Sarah (13.02.2018)
 

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

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

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

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

Ваши права

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