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

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

    Несколько вопросов по pawn

    Всем привет, я новенький в pawn - скриптинге. Не так давно начал. У меня появилось несколько вопросов по поводу программирования pawn.

    1. Все знают, что когда нам нужно сделать вход допустим в мэрию, мы создаём переменную. Допустим:

    PHP код:
    new MayorPick[2]; // То есть пикап входа и выхода 
    Я читал разные форумы, и как люди говорят 1 переменная занимает 4 байта памяти.

    Так вот, а что если допустим сделать вот так:

    PHP код:
    new Pickups[80]; // Тут будут все пикапы входов и выходов со всех интерьеров 
    Будет ли нагрузка на сервер или такая скажем небольшая оптимизация в плане памяти?)

    Конечно что же есть минус в моей идеи. Если мы захотим удалить или поменять интерьер, то просто заколебаемся искать его.

    Но допустим модом заниматься буду только я и по координатам все проверять, ну или же так, где в паблике

    PHP код:
    OnPlayerPickupDynamicPickup 
    Просто комментировать везде.

    Можно ли так использовать?


    И 2 вопрос. Видел команды со стандартным процессором и другие системы, где используют как и
    PHP код:
    if(пошла функция)... 
    PHP код:
    И else if(пошла функция)... 
    Пробовал удалять else, компилируется без ошибок, работает все тоже прекрасно. Тогда смысл использования
    PHP код:
    else 
    Я знаю что else - в переводе с английского - это или, а if - это если. По моему тут разницы нету. Думаю else нужно использовать только в некоторых случаях, допустим в том же паблике
    PHP код:
    OnDialogResponse 
    Там где проверка на кнопки.

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Dorian Посмотреть сообщение
    Всем привет, я новенький в pawn - скриптинге. Не так давно начал. У меня появилось несколько вопросов по поводу программирования pawn.

    1. Все знают, что когда нам нужно сделать вход допустим в мэрию, мы создаём переменную. Допустим:

    PHP код:
    new MayorPick[2]; // То есть пикап входа и выхода 
    Я читал разные форумы, и как люди говорят 1 переменная занимает 4 байта памяти.

    Так вот, а что если допустим сделать вот так:

    PHP код:
    new Pickups[80]; // Тут будут все пикапы входов и выходов со всех интерьеров 
    Будет ли нагрузка на сервер или такая скажем небольшая оптимизация в плане памяти?)

    Конечно что же есть минус в моей идеи. Если мы захотим удалить или поменять интерьер, то просто заколебаемся искать его.

    Но допустим модом заниматься буду только я и по координатам все проверять, ну или же так, где в паблике

    PHP код:
    OnPlayerPickupDynamicPickup 
    Просто комментировать везде.

    Можно ли так использовать?
    В плане памяти оптимизации не будет никакой. А систему входов/выходов в интерьеры не обязательно реализовывать таким образом. Я думаю, что многим для добавления нового входа/выхода достаточно лишь добавить новый элемент в массив, без дополнительных телодвижений.

    Цитата Сообщение от Dorian Посмотреть сообщение
    И 2 вопрос. Видел команды со стандартным процессором и другие системы, где используют как и
    PHP код:
    if(пошла функция)... 
    PHP код:
    И else if(пошла функция)... 
    Пробовал удалять else, компилируется без ошибок, работает все тоже прекрасно. Тогда смысл использования
    PHP код:
    else 
    Я знаю что else - в переводе с английского - это или, а if - это если. По моему тут разницы нету. Думаю else нужно использовать только в некоторых случаях, допустим в том же паблике
    PHP код:
    OnDialogResponse 
    Там где проверка на кнопки.
    else - это иначе. Что означает, что блок кода после этого оператора выполнится только в том случае, если не выполнился блок if выше.
    Если ты напишешь код так:
    PHP код:
    if (== && == 3) {}
    else if (
    == 1) {} 
    То проверка c == 1 выполнится только в том случае, если a не равно 5 или b не равно 3.

    А если ты напишешь код так:
    PHP код:
    if (== && == 3) {}
    if (
    == 1) {} 
    То проверка c == 1 выполнится вне зависимости от результата проверки выше.
    Последний раз редактировалось ziggi; 16.09.2017 в 09:56.

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

    Статус
    Оффлайн
    Регистрация
    14.09.2017
    Сообщений
    3
    Репутация:
    0 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    В плане памяти оптимизации не будет никакой. А систему входов/выходов в интерьеры не обязательно реализовывать таким образом. Я думаю, что многим для добавления нового входа/выхода достаточно лишь добавить новый элемент в массив, без дополнительных телодвижений.
    Вот тут по подробнее можно?


    Цитата Сообщение от ziggi Посмотреть сообщение
    else - это иначе. Что означает, что блок кода после этого оператора выполнится только в том случае, если не выполнился блок if выше.
    Если ты напишешь код так:
    PHP код:
    if (== && == 3) {}
    else if (
    == 1) {} 
    То проверка c == 1 выполнится только в том случае, если a не равно 5 или b не равно 3.

    А если ты напишешь код так:
    PHP код:
    if (== && == 3) {}
    if (
    == 1) {} 
    То проверка c == 1 выполнится вне зависимости от результата проверки выше.
    Это понятно, просто встречал такой код, допустим приведу пример такой.
    PHP код:
      else if(!strcmp(cmdtext"/test"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /test");
            return 
    1;
        }
        else if(!
    strcmp(cmdtext"/help"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /help");
            return 
    1;
        } 
    Разве вот это правильно? По моему достаточно использовать вот такой вариант:

    PHP код:
        if(!strcmp(cmdtext"/test"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /test");
            return 
    1;
        }
        if(!
    strcmp(cmdtext"/help"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /help");
            return 
    1;
        } 

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

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




    Это понятно, просто встречал такой код, допустим приведу пример такой.
    PHP код:
      else if(!strcmp(cmdtext"/test"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /test");
            return 
    1;
        }
        else if(!
    strcmp(cmdtext"/help"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /help");
            return 
    1;
        } 
    Разве вот это правильно? По моему достаточно использовать вот такой вариант:

    PHP код:
        if(!strcmp(cmdtext"/test"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /test");
            return 
    1;
        }
        if(!
    strcmp(cmdtext"/help"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /help");
            return 
    1;
        } 
    Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    14.09.2017
    Сообщений
    3
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй
    Понятно, всем спасибо за ответы! Тема закрыта!

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Dorian Посмотреть сообщение
    Разве вот это правильно? По моему достаточно использовать вот такой вариант:

    PHP код:
        if(!strcmp(cmdtext"/test"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /test");
            return 
    1;
        }
        if(!
    strcmp(cmdtext"/help"true))
        {
            
    SendClientMessage(playerid, -1"Вы использовали команду /help");
            return 
    1;
        } 
    На самом деле если бы в командах не стояло "return 1;" (что обрывает весь остальной код в этом паблике после нахождения и выполнения нужной команды), то else if было бы использовать просто необходимо, чтобы после нахождения одной команды все остальные уже не проверялись. А так, только из-за собственных прерываний внутри команд использовать else if уже не принципиально
    Последний раз редактировалось Nexius_Tailer; 16.09.2017 в 12:40.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  9. Пользователь сказал cпасибо:
    Dorian (16.09.2017)
  10. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Но вообще лучше явно прерывать выполнение кода там, где оно должно прерываться.
    Не потому что так оптимизированнее (разницы между "if/else if" и return для машины не будет никакого) для сервера, а потому что так код становится более наглядным, ибо ты сразу видишь, что конкретное условие с конкретным кодом прерывает конкретное действие, и тебе не нужно будет пролистывать кучу кода, дабы удостовериться, что больше ничего выполнятся не будет. Главное с пониманием прерывать действия, а не просто расставлять return абы куда.

    Как я понимаю, ответ получен (если нет, напиши в личку и открою тему).
    Закрыто.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Dorian (16.09.2017)
 

 

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

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

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

Ваши права

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