Работает ли этот инклюд с чем-то, кроме игроков? (То есть, можно ли перебирать кого-то кроме них?)
И существует ли разница в написании его аргументов?
Видел следующие варианты:
Код:foreach(new i:Player) foreach(Player, i)
Работает ли этот инклюд с чем-то, кроме игроков? (То есть, можно ли перебирать кого-то кроме них?)
И существует ли разница в написании его аргументов?
Видел следующие варианты:
Код:foreach(new i:Player) foreach(Player, i)
Да, можно. Вот те итераторы, которые можно найти в последней версии, их можно разделить на 2 группы:
Основные:
- Player, Bot - все "живые" игроки и NPC соответственно.
- Character - объединяет в себе всех игроков из Player и Bot.
- Vehicle - транспорт.
- Actor - актёры (отдельно от NPC, т.к. не занимают слот игрока).
Дополнительные:
- PlayerPlayersStream - игроки, находящиеся в зоне стрима (видимости) тех или иных игроков.
- PlayerVehiclesStream - транспорт в зоне стрима игроков.
- VehiclePlayersStream - игроки в зоне стрима транспорта.
- PlayerActorsStream - актёры в зоне стрима игроков.
- ActorPlayersStream - игроки в зоне стрима актёров.
- PlayerInVehicle - игроки, находящиеся в транспорте.
Итераторы из основной группы активированы по умолчанию и если они не используются в скрипте, то это будет попросту лишняя трата ресурсов и есть смысл их отключить. К примеру, отключить итератор "Character" можно так:
#define FOREACH_I_Character 0 #include <foreach>
Другое дело - итераторы из дополнительной группы, они по умолчанию отключены, чтобы не создавать много лишней нагрузки. Чтобы их использовать, следует явным образом активировать их перед подключением инклуда:
#define FOREACH_I_PlayerPlayersStream 1 // Да, нам нужен итератор PlayerPlayersStream
Мало того, в этой группе не просто итераторы, а массивы итераторов. Например, перебор всех игроков, находящихся в зоне стрима одного игрока, происходит следующим образом:
foreach (new i:PlayerPlayersStream[playerid]) { // ... }
Второй вариант - устаревший синтаксис, с которым переменная-счётчик "i" объявляется и существует только внутри цикла. Поддерживается в последних версиях инклуда foreach для совместимости со старым кодом, но рано или поздно эту поддержку могут и выпилить.
Первый вариант - новый, более похожий на стандартный синтаксис Pawn, с ним переменную "i" можно объявить вне цикла, дабы использовать в нескольких циклах одновременно (ибо, внезапно, объявление отдельных переменных на каждый цикл - лишний код, причём как исходный, так и скомпилированный бинарный).
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Димарио (15.07.2019)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)