Просмотр полной версии : [Вопрос] Несколько вопросов по pawn
Всем привет, я новенький в pawn - скриптинге. Не так давно начал. У меня появилось несколько вопросов по поводу программирования pawn.
1. Все знают, что когда нам нужно сделать вход допустим в мэрию, мы создаём переменную. Допустим:
new MayorPick[2]; // То есть пикап входа и выхода
Я читал разные форумы, и как люди говорят 1 переменная занимает 4 байта памяти.
Так вот, а что если допустим сделать вот так:
new Pickups[80]; // Тут будут все пикапы входов и выходов со всех интерьеров
Будет ли нагрузка на сервер или такая скажем небольшая оптимизация в плане памяти?)
Конечно что же есть минус в моей идеи. Если мы захотим удалить или поменять интерьер, то просто заколебаемся искать его.
Но допустим модом заниматься буду только я и по координатам все проверять, ну или же так, где в паблике
OnPlayerPickupDynamicPickup
Просто комментировать везде.
Можно ли так использовать?
И 2 вопрос. Видел команды со стандартным процессором и другие системы, где используют как и
if(пошла функция)...
И else if(пошла функция)...
Пробовал удалять else, компилируется без ошибок, работает все тоже прекрасно. Тогда смысл использования
else
Я знаю что else - в переводе с английского - это или, а if - это если. По моему тут разницы нету. Думаю else нужно использовать только в некоторых случаях, допустим в том же паблике
OnDialogResponse
Там где проверка на кнопки.
Всем привет, я новенький в pawn - скриптинге. Не так давно начал. У меня появилось несколько вопросов по поводу программирования pawn.
1. Все знают, что когда нам нужно сделать вход допустим в мэрию, мы создаём переменную. Допустим:
new MayorPick[2]; // То есть пикап входа и выхода
Я читал разные форумы, и как люди говорят 1 переменная занимает 4 байта памяти.
Так вот, а что если допустим сделать вот так:
new Pickups[80]; // Тут будут все пикапы входов и выходов со всех интерьеров
Будет ли нагрузка на сервер или такая скажем небольшая оптимизация в плане памяти?)
Конечно что же есть минус в моей идеи. Если мы захотим удалить или поменять интерьер, то просто заколебаемся искать его.
Но допустим модом заниматься буду только я и по координатам все проверять, ну или же так, где в паблике
OnPlayerPickupDynamicPickup
Просто комментировать везде.
Можно ли так использовать?
В плане памяти оптимизации не будет никакой. А систему входов/выходов в интерьеры не обязательно реализовывать таким образом. Я думаю, что многим для добавления нового входа/выхода достаточно лишь добавить новый элемент в массив, без дополнительных телодвижений.
И 2 вопрос. Видел команды со стандартным процессором и другие системы, где используют как и
if(пошла функция)...
И else if(пошла функция)...
Пробовал удалять else, компилируется без ошибок, работает все тоже прекрасно. Тогда смысл использования
else
Я знаю что else - в переводе с английского - это или, а if - это если. По моему тут разницы нету. Думаю else нужно использовать только в некоторых случаях, допустим в том же паблике
OnDialogResponse
Там где проверка на кнопки.
else - это иначе. Что означает, что блок кода после этого оператора выполнится только в том случае, если не выполнился блок if выше.
Если ты напишешь код так:
if (a == 5 && b == 3) {}
else if (c == 1) {}
То проверка c == 1 выполнится только в том случае, если a не равно 5 или b не равно 3.
А если ты напишешь код так:
if (a == 5 && b == 3) {}
if (c == 1) {}
То проверка c == 1 выполнится вне зависимости от результата проверки выше.
В плане памяти оптимизации не будет никакой. А систему входов/выходов в интерьеры не обязательно реализовывать таким образом. Я думаю, что многим для добавления нового входа/выхода достаточно лишь добавить новый элемент в массив, без дополнительных телодвижений.
Вот тут по подробнее можно?
else - это иначе. Что означает, что блок кода после этого оператора выполнится только в том случае, если не выполнился блок if выше.
Если ты напишешь код так:
if (a == 5 && b == 3) {}
else if (c == 1) {}
То проверка c == 1 выполнится только в том случае, если a не равно 5 или b не равно 3.
А если ты напишешь код так:
if (a == 5 && b == 3) {}
if (c == 1) {}
То проверка c == 1 выполнится вне зависимости от результата проверки выше.
Это понятно, просто встречал такой код, допустим приведу пример такой.
else if(!strcmp(cmdtext, "/test", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /test");
return 1;
}
else if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /help");
return 1;
}
Разве вот это правильно? По моему достаточно использовать вот такой вариант:
if(!strcmp(cmdtext, "/test", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /test");
return 1;
}
if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /help");
return 1;
}
Вот тут по подробнее можно?
Это понятно, просто встречал такой код, допустим приведу пример такой.
else if(!strcmp(cmdtext, "/test", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /test");
return 1;
}
else if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /help");
return 1;
}
Разве вот это правильно? По моему достаточно использовать вот такой вариант:
if(!strcmp(cmdtext, "/test", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /test");
return 1;
}
if(!strcmp(cmdtext, "/help", true))
{
SendClientMessage(playerid, -1, "Вы использовали команду /help");
return 1;
}
Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй
Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй
Понятно, всем спасибо за ответы! Тема закрыта!
Nexius_Tailer
16.09.2017, 12:38
Разве вот это правильно? По моему достаточно использовать вот такой вариант:
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 уже не принципиально
Но вообще лучше явно прерывать выполнение кода там, где оно должно прерываться.
Не потому что так оптимизированнее (разницы между "if/else if" и return для машины не будет никакого) для сервера, а потому что так код становится более наглядным, ибо ты сразу видишь, что конкретное условие с конкретным кодом прерывает конкретное действие, и тебе не нужно будет пролистывать кучу кода, дабы удостовериться, что больше ничего выполнятся не будет. Главное с пониманием прерывать действия, а не просто расставлять return абы куда.
Как я понимаю, ответ получен (если нет, напиши в личку и открою тему).
Закрыто.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot