Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Циклы и использование их в моде

Статус
В этой теме нельзя размещать новые ответы.

Vaise

Умник
Здравствуйте, сегодня я вам расскажу что такое цикл, и для чего его используют.​

[hr][/hr]
- Цикл (лат. cyclus от др.-греч. κύκλος — окружность)
То есть, от слова "Окружность" становиться ясно, что это действие которое проходит от начала до конца по чему либо и выполняет какие либо определенные действия.

[hr][/hr]
Циклы помогают оптимизировать мод (что повышает его быстроту действия путем уменьшения количества строк). ​
[hr][/hr]
Немного дополнительной информации о циклах pawn:
- Циклы в Pawn бывают четырех видов: while, for и do..while
- Каждый круг цикла по скрипту называется итерацией.

- Инкремент (Пример: i++)- добавление к числу единицы.
- Декремент (Пример: i--) - вычитание из числа единицы.


* Число которое увеличиваться/уменьшается в нашем случае может браться например из переменной
i (new i = 0;) которая равна нулю.


[hr][/hr]
Внешнее строение цикла и его обозначения:
PHP:
while(условие) 
{ 
                             << Тут находиться выполняемый скрипт (иминуеться как "Тело цикла") 
}
Например у каждого в Role-Play если запуск очистки чата Samp
Он выглядит так:
PHP:
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, ""); 
SendClientMessage(playerid,0xFFFFFFAA, "");
И так далее (более 50 таких строк)

Мы можем сделать тоже самое действие только с использование цикла который называется "while"

PHP:
new d; // задаем переменную 
while(d++<50) // Указываем, сколько цикл должен проходить по функции до его завершения (в нашем 50 раз) 
{ 
                           SendClientMessage(playerid, 0xFFFFFFFF, ""); // Функция которая должна выполняться 
}
С помощью этих пяти строчек мы избавились от 50 строк одного и того же!

И так с помощью цикла мы упростили себе работу, а так же еще оптимизировали мод.

Внешнее строение цикла и его обозначения:
PHP:
for (переменная, условие, увеличение(инкремент)) 
} 
                             << Условия цикла (Тело цикла) 
}
Цикл "For" почти точно такой же как и "While" отличается он только тем, что он начинается с объявления переменной. После переменной идет условие, а затем инкремент.

Пример использования:
PHP:
for(new i = 0; i < MAX_PLAYERS; i++) 
{ 
                             SendClientMessage(playerid,0xFFFFFFAA,"Поздравляю вы один из тех, кто был кикнут с сервера"); 
                             Kick(i); 
}
Разберём этот пример по частям:
PHP:
for(new i = 0; i < MAX_PLAYERS; i++) - Тут мы создаем переменную "i" и приравниваем её к нулю, затем создаем условие и задаем действие(инкремент).
PHP:
{ 
SendClientMessage(playerid,0xFFFFFFAA,"Поздравляю вы один из тех, кто был кикнут с сервера"); 
Kick(i); - Здесь условие выполняемого цикла 
}
Данный цикл который я привел в пример, проходит по всем игрокам которые в данные момент на сервере и выполняет действие которое указанно в теле цикла (то есть выдача сообщения игроку и отключение его от сервера)
Согласитесь, одним циклом меньше чем за секунду кикнуть весь сервер, чем выкидывать (кикать) каждого игрока отдельно.

Личное мнение:
- Данный цикл скорее служит не для оптимизации мода, а для выполнения какой ни будь команды.
На пример обычная команда /members состоит из такого цикла, который в данные момент времени по условию (телу цикла) которое мы поставим проверяет (отбирает) игроков на то что он состоит в данной фракции и выводит его в список сотрудников.

Внешнее строение цикла и его обозначения:
PHP:
do 
{ 
                           << Что должен выполнять цикл (тело цикла) 
} 
while(условие);
Цикл "Do..while" похож на цикл "While" но у него есть небольшое отличие в том, что сначала выполняются инструкции которые мы ему задали, а только после этого проверяется условие.

Пример использования:
PHP:
new i; 
do 
{ 
                   format(string, sizeof(string), "Выводимое число: %d",i++); 
                   SendClientMessage(playerid,0xFFFFFFAA,string); 
} 
while(i < 10);
- Разберём этот пример по частям:
PHP:
new i; // Задаем переменную (можно её приравнять new i = 0; или оставить как есть) 
do 
{ 
format(string, sizeof(string), "Выводимое число: %d",i++); // Создаем задание которое должен выполнить цикл. 
SendClientMessage(playerid,0xFFFFFFAA,string); 
} 
while(i < 10); // Проверка условия которое определит будет ли тело цикла еще раз выполняться.
- Функции данного цикла:
Данный цикл выводит игроку цифры по порядку в чат.
Если переменная i равна нулю, то будет выводиться 0,1,2,3,4,5,6,7,9,10
Если она не равна,то первое число которое выведет цикл в чат игроку будет такое чему сейчас равна переменная i, а остальные по условию. Если первое число больше 10 то дальше цикл не будет выполняться, так как это нарушает наше условие while(i < 10);

[hr][/hr]
Автор данного Урока: olegfake
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу