PDA

Просмотр полной версии : [Вопрос] Несколько вопросов по pawn



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

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



new MayorPick[2]; // То есть пикап входа и выхода


Я читал разные форумы, и как люди говорят 1 переменная занимает 4 байта памяти.

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



new Pickups[80]; // Тут будут все пикапы входов и выходов со всех интерьеров


Будет ли нагрузка на сервер или такая скажем небольшая оптимизация в плане памяти?)

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

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


OnPlayerPickupDynamicPickup

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

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


И 2 вопрос. Видел команды со стандартным процессором и другие системы, где используют как и

if(пошла функция)...


И else if(пошла функция)...

Пробовал удалять else, компилируется без ошибок, работает все тоже прекрасно. Тогда смысл использования
else

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

ziggi
16.09.2017, 09:52
Всем привет, я новенький в 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 выполнится вне зависимости от результата проверки выше.

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

Вот тут по подробнее можно?



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;
}

DeimoS
16.09.2017, 11:23
Вот тут по подробнее можно?




Это понятно, просто встречал такой код, допустим приведу пример такой.

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;
}

Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй

Dorian
16.09.2017, 12:15
Этот код выполняет идентичные действия, но по разному. И в разных ситуациях требуется либо первый, либо второй вариант. В этом случае нет чёткого "Вот так правильно": как по ситуации требуется, так и используй

Понятно, всем спасибо за ответы! Тема закрыта!

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 уже не принципиально

DeimoS
16.09.2017, 13:31
Но вообще лучше явно прерывать выполнение кода там, где оно должно прерываться.
Не потому что так оптимизированнее (разницы между "if/else if" и return для машины не будет никакого) для сервера, а потому что так код становится более наглядным, ибо ты сразу видишь, что конкретное условие с конкретным кодом прерывает конкретное действие, и тебе не нужно будет пролистывать кучу кода, дабы удостовериться, что больше ничего выполнятся не будет. Главное с пониманием прерывать действия, а не просто расставлять return абы куда.

Как я понимаю, ответ получен (если нет, напиши в личку и открою тему).
Закрыто.