Sign in to follow this
Followers
0

1 post in this topic
Create an account or sign in to comment
You need to be a member in order to leave a comment
Sign in to follow this
Followers
0
-
Recently Browsing 0 members
No registered users viewing this page.
-
Similar Content
-
By DEST
ДИНАМИЧЕСКИЕ ЗОНЫ (streamer плагин)
ОБЩЕЕ ОПИСАНИЕ:
Как я заметил, многие интересуются, как создать действие для игрока в какой-либо определенной точке карты. Например, как выдать игроку бутылку пива автоматически при заходе в клуб? Конечно, можно это сделать, создав секундный таймер и выполнять действия там, но как по мне, динамические зоны справятся с этим лучше.
ТРЕБОВАНИЯ:
Для работы необходимо:
1) Плагин streamer.
2) Инклуд streamer.
Желательно иметь актуальную версию плагина и инклуда, хотя это не обязательно.
ТЕХНИЧЕСКОЕ ОПИСАНИЕ РАБОТЫ:
Принцип работы данных зон прост: когда игрок заходит в зону, которая создается кстати, в виде геометрических фигур (об этом позже) для него срабатывает коллбэк - OnPlayerEnterDynamicArea. После того, как игрок покидает динамическую зону для него срабатывает другой коллбэк - OnPlayerLeaveDynamicArea. В оба эти коллбэка поступают одинаковые аргументы - playerid, areaid. Где playerid - ид игрока, который вошел / покинул зону, а areaid - ид самой зоны.
ТИПЫ СОЗДАВАЕМЫХ ЗОН:
1) Круг. Для создания данной зоны потребуются X и Y координата центра круга, а также радиус создаваемой зоны.
2) Прямоугольник. Для создания данной зоны, необходимо иметь координаты противоположных углов, образующих прямоугольник.
3) Сфера. Для данной зоны требуются X, Y, Z координаты центра сферы и ее размер (радиус).
4) Куб. Точно также как и прямоугольник, только потребуются еще и Z координаты противоположных углов. Рисунок не требуется.
Пример использования:
new zone_army; public OnGameModeInit(playerid) { zone_army = zone51 = CreateDynamicCube(-13.0555,1702.1824, 15.0,405.9110, 2071.6646, 850.0); return 1; } public OnPlayerEnterDynamicArea(playerid, areaid) { if(areaid == zone_army) SendClientMessage(playerid,-1,"Покиньте охряняемую зону. Иначе будет открыт огонь."); return 1; } public OnPlayerLeaveDynamicArea(playerid, areaid) { if(areaid == zone_army) SendClientMessage(playerid,-1,"Благодарим за понимание."); return 1; } Пример взят с сайта forum-pawno.ru.
СВЯЗАННЫЕ ФУНКЦИИ:
DestroyDynamicArea(areaid); - уничтожение динамической зоны. IsValidDynamicArea(areaid); - проверка за существование динамической зоны с данным ID. TogglePlayerDynamicArea(playerid, areaid, toggle); - скрытие динамической зоны для игрока. TogglePlayerAllDynamicAreas(playerid, toggle); - скрытие всех динамических зон для игрока. IsPlayerInDynamicArea(playerid, areaid); - проверка на нахождение игрока в динамической зоне с определенным ID. AttachDynamicAreaToPlayer(areaid, playerid); - прикрепление динамической зоны с определенным ID к игроку. AttachDynamicAreaToVehicle(areaid, vehicleid); - прикрепление динамической зоны с определенным ID к машине. DestroyAllDynamicAreas(); - уничтожение всех динамических зон. CountDynamicAreas(); - подсчет количества динамических зон. Внимание! К игрокам и машинам можно прикрепить только зоны с типом круг и сфера.
На этом все!
Благодарности:
Благодарность выражается следующим веб-ресурсам:
forum-pawno.ru
forum.sa-mp.com
Автор: @DEST.
-
By Guest stibs
Всем привет!
Сегодня я вам поведаю про такую прекрасную штуку как тернарный оператор. В принципе, тернарный оператор это такая же конструкция как и конструкция if/else.
Конструкция оператора.
условие ? правда : ложь
Пример использования.
Например, на конструкции if/else одно выражение может выглядеть вот так:
if (z > y) { x = 5; } else { x = 3; } А вот так это будет выглядеть с использованием тернарного оператора:
x = (z > y) ? (5) : (3);
-
By Aurum
Здравствуйте.
Решил рассказать про виды диалоговых окон.
Начнем.
Диалоги бывают 4-ех видов, это..
DIALOG_STYLE_MSGBOX DIALOG_STYLE_INPUT DIALOG_STYLE_LIST DIALOG_STYLE_PASSWORD
Разберемся, что к чему.
Первый вид диалога - DIALOG_STYLE_MSGBOX.
Его действие - Показывает сообщение игроку. Пример: Правила сервера.
Код диалога:
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Тут название", "Тут текст", "Кнопка1", "Кнопка2");
Второй вид диалога - DIALOG_STYLE_INPUT
Его действие - Показывает сообщение игроку + есть поле для ввода информации. Пример: Ввод email при регистрации на РП сервере.
Код диалога:
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Тут название","Тут ваш текст","Кнопка1","Кнопка2");
Третий вид диалога - DIALOG_STYLE_LIST
Его действие - Показывает игроку список. ( Диалог со списком ). Пример такого диалога - Команда /mn и тому подобное.
Код диалога:
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST, "Тут название", "Пункт 1\nПункт 2", "Кнопка1", "Кнопка2");
Четвертый и последний вид диалога - DIALOG_STYLE_PASSWORD
Его действие - Диалог с инфрмацией и полем для ввода, где введенные символы будут заменены на звездочки ( Поле для ввода пароля ).
Код диалога:
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_PASSWORD, "Тут название", "Тут текст(можете написать 'Введите пароль')", "Кнопка1", "Кнопка2");
На этом все
-
By turpal098
Здравствуйте.
У меня вопрос как сделать так чтобы объявление было не так часто у меня на сервере объявление каждый 30 секунд как изменить это? заранее спасибо.
-
By Sleash
Всем привет!
Я хотел бы рассказать о такой незаменимой вещи как цикл for. мне кажется что тут ему уделили сало места, просто закинули в тему операторов и уделили ему +-5 строчек.
Поскольку циклы - непростая вещь я хотел бы посветить этому небольшой урок.
Итак, давайте рассмотрим пример самого цикла:
for(new i; i < MAX_VALUES; i++) { // code ... } Теперь разберём каждое действие:
1. new i;
Тут думаю всё понятно, создаётся переменная, так же можно её сразу прировнять к чему-то: for(new i = 10; ...)
2. i < MAX_VALUES
Тут уже стоит условие выполнения, и пока оно будет верно - цикл будет выполняться, по сути каждый раз цикл проверяет данное условие
Так же можно поставить другие операторы, но в основном используются < ИЛИ >
3. i++
Тут уже выполняется действие каждый раз, когда условие верное.
Кстати говоря как только условие перестанет выполняться окончательно (условие перестанет быть верным), то дальше пойдёт ниже написанный код.
ВАЖНО: return закроет цикл досрочно
То есть:
for(new i = 0; i < 8; i++) { print("%d",i)); } // В этом случае нам выведет числа от 0-я до 8-и for(new i = 0; i < 8; i++) { print("%d",i)); return true; } // А в этом выведет только 0, по-скольку return завершает цикл после первого его прохождения Так же в цикле for можно заимствовать различные из языка C++:
continue - пропуск данного значения.
break - полный выход из цикло (почти идентично return)
Сейчас объясню:
for(new i = 0; i < 8; i++) { if(i == 5) continue; // если i равна 5-и, то пропускаем printf("%d",i); } // Данный цикл выведет все числа от 0 до 8 КРОМЕ 5 for(new i = 0; i < 8; i++); { if(i == 5) break; // если i равна 5-и, то завершеем printf("%d",i); } // А данный цикл выведет все числа от 0 до 4-х, так как на 5-и мы вышли из цикла А теперь главное отличие break от return:
break - просто выкидывает из цикла.
return - выкидывает из цикла и возвращает значение.
К примеру вы пишите stock или public с циклом, который должен вернуть ДА или НЕТ, тот тут уже лучше использовать return true или false, в зависимости от условий и т.д.
И напоследок хочу сказать, что есть 2 вида использования цикла: инкремент и декремент.
Инкремент это перебор значений, последовательно их увеличивая, по сути все разобранные нами примеры сделаны при помощи инкремента.
Декремент же перебирает значения, последовательно их уменьшая, то есть при перечислении игроков проверка будет идти, допустим, от 1000-го до 0-го ID. пример декремента:
for(new i = MAX_PLAYERS; i >= 0; --i) { // code ... } На этом мне хотелось бы закончить свой урок, если кому помог - пожалуйста, но если же кому не понятно - я помогу подробнее разобраться.
-