Урок #2
В этом уроке я расскажу:
1) Как правильно использовать switchи case
2) Как правильно использовать циклы
3) Все о SetPVarInt
1. Все о switch и case
Многие где то прочли что лучше всего вместо обычных проверок:
лучше использовать:
Код
switch(var)
{
case 0:
}
Однако, здравствуйте! Это не всегда так!
___________________________________________________________________________________
1. Этот кодКод
switch(var)
{
case 40,80,150,160,230,420: return 1;
}
Быстрее чем:
Код
if ( var == 40 || var == 80 || var == 150 || var == 160 || var == 230 || var == 420 ) return 1;
___________________________________________________________________________________
2. Этот код
Код
switch(var)
{
case 1..100,200..400,500..1000: return 1;
}
Медленнее чем:
Код
if ( var >= 1 && var <= 100 || var >= 200 && var <= 400 || var >= 500 && var <= 1000) return 1;
___________________________________________________________________________________
3. Этот код
Код
if ( var == 40 ) return 1;
Одинков с:
Код
switch(var)
{
case 40: return 1;
}
___________________________________________________________________________________
2. Как правильно использовать циклы
Код
for(переменные(обычно 1); условие цикла; операция с переменной)
{
//инструкции
}
Это цикл for именно о нем мы будем говорить! Так же есть циклы (while) (switch..case) и т.д
Допустим нам нужно в чат 10 раз вывести слово samp-ru.org
Код
for(new i; i<11; i++) SendClientMessage(playerid,-1,"samp-ru.org");
Условие выполняется пока i < 11
И самое главное
Допустим у нас играет 100 человек и мы ищем игрока который едет в инфернусе чтобы написать ему "Привет!"
Код
for(new i; i<100; i++)
{
if(GetVehicleModel(GetPlayerVehicleID(i)) == 411)
{
SendClientMessage(playerid,-1,"Привет!");
return 1;// Вот тут внимательнее! Вот тут цикл прерывается!
}
}
return 1; - цикл прервется при нахождении первого игрока с инфернусом!
Если return 1; убрать, то он выведет это всем игрокам с инфернусом!
2. Все о SetPVarInt
SetPVarInt очень удобен если мы используем данную переменную не только в моде а допустим еще и в каком-либо FS
В отличии от массивов их создавать не нужно!
Пример вставим в мод в паблик OnPlayerConnect:
Код
SetPVarInt(playerid,"Azaza",1); //установим Пвару с названием Azaza значение 1
В любой FS в паблик OnPlayerSpawn
Код
if(GetPVarInt(playerid,"Azaza")==1) SendClientMessage(playerid,-1,"В моде вам выдали Azaza 1");
С массивами такой фокус не пройдет!
SetPVarInt работает медленнее чем обычный массив new azaza[MAX_PLAYERS];
Поэтому если вам не нужны такие фокусы с передачи информации из Мода в FS и обратно, лучше их не использовать!