shape1
shape2
shape3
shape4
shape7
shape8

Увольнение при покидании места работы


Статус
Закрыто для дальнейших ответов.

LeonYT

Освоившийся
Пользователь
04.09.2016
56
15
0
25
Приветствую пользователей портала, на некоторых проектах видел такую систему: если вы отбегаете слишком далеко от места своей работы - вас автоматически увольняет. Такая штука сделана для работ для новичков. В некоторых модах видел очень нерациональный вариант реализации системы на таймерах. На самом деле всё проще

Использовать будем плагин streamer.

В начале мода

new workzone; //создаём глобальную переменную, которая будет хранить номер зоны стримера (areaid)
//В дальнейшем поймёте для чего она нужна

Затем в OnGameModeInit создаём так называемую dynamic area

//В данном случае мы будем использовать функцию CreateDynamicCircle, она как мне кажется является самой удобной, давайте разберём её аргументы
/*CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1);
Float:x, Float:y - координаты середины круга (зоны) по осям X и Y
Float:size - диаметр круга (этой динамической зоны)
Прошу обратить внимание, что мы указываем именно диаметр, а не радиус. Это значит от наших координат до края круга будет половина указанной величины
worldid - ид виртуального мира, в котором будет находится данная зона
interiorid - ид интерьера, в котором будет находится данная зона
playerid - id игрока (если мы хотим создать зону для какого-либо конкретного игрока)*/

//Теперь создадим саму зону. Мы приравниваем созданную нами ранее переменную к функции создания зоны (в переменной теперь будет храниться areaid)
workzone = CreateDynamicCircle(координата x, координата y, Диаметр, ид вирт. мира, ид интерьера, прикреплённый ид);

//Готовый код выглядит так:
workzone = CreateDynamicCircle(10.0, 20.0, 100.0, 0, 0, -1);
/*Данный код означает, что на координатах x: 10.0 ; y: 20.0 мы создали зону (Area), диаметр которой равен 100.0
Зона будет создана в 0 виртуальном мире (дефолт) и 0 ид интерьера (дефолт) для всех игроков (playerid = -1)*/

Затем в моде ищем OnPlayerLeaveDynamicArea, если такого паблика нет, то создаём его. (готовый код ниже)

public OnPlayerLeaveDynamicArea(playerid, areaid) //паблик, срабатывающий при выходе из динамических зон (Area)
{
if(areaid == workzone) //проверяем, если areaid является заранее созданной нами зоной, то выполняем код
{
if(/*проверка на то, работаем ли мы на данный момент*/)
{
//увольняем игрока
}
}
}

Таким образом без использования ежесекундных таймеров и других несуразных вещей мы реализовали данную систему.
Кстати, эти самые динамические зоны можно использовать повсеместно, к тому же есть огромное разнообразие вариантов формы зоны на карте (круг, цилиндр, куб и т.д.)

 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.