Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
123new

Триггеры с газом[1.0][By NoNameUltima]

Рекомендованные сообщения

Принуждение после отрыва чеки сработало прекрасно. Спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SinSin таймер инициируй и по нему вызывай функцию проверки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, grehoff сказал:

SinSin таймер инициируй и по нему вызывай функцию проверки

Я понимаю, что должен быть таймер, но пока опыта недостаточно. Учусь, ковыряя чужой код и код игры :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SinSin знакомая фигня =)

ну например так:

float m_respawnG = 1;

 

ref Timer m_RespawnGTimer;

 

m_RespawnGTimer = new Timer( CALL_CATEGORY_SYSTEM );    
m_RespawnGTimer.Run( m_respawnG*60, this, "вызов_функции_проверки", NULL, true);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

grehoff ну зачем

у меня по таймеру проверяются игроки на наличие в той или иной зоне

и там же я проверяю гранатки

делать отдельный таймер для этого? смысл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK так я просто пример таймера привёл.

а вообще да, ты прав. у меня сделано так же. проверка игрока в зоне и там же проверка на дым от гранаты.

мало ли где он хочет дыма напустить, не обязательно же в зоне какой-то =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, BorizzK сказал:

grehoff ну зачем

у меня по таймеру проверяются игроки на наличие в той или иной зоне

и там же я проверяю гранатки

делать отдельный таймер для этого? смысл?

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

 

То есть сам спаун, разделение на территории, активация в случае приближения игрока и т.д. уже реализовал, но не разобрался пока, как спаунить их разрозненно во времени, а не одним махом.

Изменено пользователем SinSin (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, BorizzK сказал:

у меня по таймеру проверяются игроки на наличие в той или иной зоне

у игрока есть свой класс. нафига там какой то таймер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima по моему опыту и измерениям нагрузки на серв, оптимально отдельный класс и таймер, нежели на каждого игрока навешивать проверки

При онлайне 30+ это особенно заметно

А при 60+ так ваще

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK

Никаких там нагрузок нет.

Грамотно вписать в ОнФрейм проверку, и все.

ОнФрейм в любом случае крутится на объекте.

Ну если ты конечно в каждом кадре втупую будешь проверку вписывать, и зон у тебя 100500 то может ибудет некая нагрузка. Хотя ито врядли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima а с этого момента можно по подробнее? пример какой-нибудь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima

Все просто

 

27 зон на сервере

несколько сейф, радиация, газ, био и минные поля

+ неск аномальных зон - ну это в процессе проектирования

причем реализована проверка приближения к зонам и удаления от них и связанные с этим рандомные динамические события неподалеку от игроков

 

все реализовано через 1 класс и 1 таймер в нем - класс цепляется к миссии и инитится через конструктор класса

ну те ни модов ни чего не надо от слова совсем

те просто инклюдим файл и создаем экземпляр класса

все настройки,а их дохрена, четаются из файла

 

все то же самое реализованное через онфрейм в классе игроков, хоть и с задержкой c расчетом GetTickTime (разница во времени) жрало при 30+ юзверях больше памяти - причем были и скачки и просадки + лишних 10% процессорного времени периодически

 

вариант который работает сейчас вооообще на производительность на стороне сервера не влияет - ну вот совсем - ну бывает 1% лишний скушает

 

вобщем работает не трогай

 

и работает вполне себе зашибись

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Приветствую, очень нужна ваша помощь, по поводу задымления зараженных зон, я немного не догоняю как это сделать, не могли бы вы скинуть пример с подробным описанием  что и как на определенных координатах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK Тут за производительность никто и не говорит.

Но ты не забывай, что работая в фреймах объекта, таймер работает стабильно, а ты крутишь циклом зоны, а на обработку проверок внутри зоны тоже как бЭ время затрачивается, в итоге, цикл настроен у тебя на итерацию раз в 5с(я к примеру цифру взял), и тут варианты -

1. Цикл не будет корректно отрабатывать раз в 5с, т.к. время затрачиваемое на сам цикл превышает данную задержку.

2. (тут еще хуже), - таймер будет запускать обработчик даже если предыдущий не завершил работу. т.е. идет итерация цикла, и она не закончилась в течении 5с, но таймеру похеру, он должен делать вызов процедуры раз в 5с, он еще одну запускает. - Это решается, частично добавлением в класс булевой переменной, которая через return выходит из процедуры, если та занята.

т.е.

if (work) return;

work = true;

code

work = false;

 

Так что тут как бЭ хз -

Если ты уверен, что твой цикл успевает отработать, жрет не много, зон не 100500, проверки внутри цикла не напряжные, то это возможно будет и быстрее работать на 0.000000000001мс)))))) но возникает вопрос, о корректности и велосипедах...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В ‎22‎.‎06‎.‎2019 в 07:26, Dony сказал:

PJIIOxa добавляю модовские противогазы, не работает!

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 6

а вы правильный класснейм ппротивогаза вводите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima напрягает создавать кол-во экземпляров по кол-ву игроков

 

и с чего ты взял что во фреймах работает типа быстрее чем вообще в шедулере по таймеру?

сами фреймы в шедулере же и отрабатываются

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

mrKrabs так вроде писали же как это сделать

заставнить дымшашку ниже земли

откастить в класс дымшашки

дымшашка.unpin()

все

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, BorizzK сказал:

напрягает создавать кол-во экземпляров по кол-ву игроков

чего создавать? Накой хрен их создавать по кол-ву игроков?

Открыл класс PlayerBase и добавил в ОнФрейм вызов обработчика зоны.

 

1 час назад, BorizzK сказал:

и с чего ты взял что во фреймах работает типа быстрее

 

1 час назад, NoNameUltima сказал:

Тут за производительность никто и не говорит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima я и так то же делал

Но опять же, каждый фрейм шарашить нафиг не надо

Пропуски вызова делал проверяя тики

Теж ойца ток вид сбоку

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK я бы не просил помощи если б понял что и куда, написано, но мне не понятно, дайте готовый рабочий пример и я отблагодарю деревянными)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

mrKrabs рабочий вариант зон?

В теме про enscript есть

Была еще тема

Найду дам ссылку

Либо ждите вторника, 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK Кстати чистое любопытство -

1. Шашки горят Х времени(дымят)

2. Радиус дыма у них весьма ограничен.

Отсюда, лично у меня 2 вопроса:

1. Если радиус газовой зоны достаочно большой(ну пусть будет 100м - диаметр 200, - что достаточно много...), - как ты шашки будешь разбрасывать внутри окружности?))

2. Когда они закончат гореть - ты новые собираешься спавниить?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 21.07.2019 в 10:44, mrKrabs сказал:

NoNameUltima хз, еще не решил

подумай на тему фпс игрока после того, как решишь прошлую задачку ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: 123new
      Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/
      Все благодарности за этот скрипт непосредственно автору скрипта, не мне!
       
      В данной теме, расскажу как сделать зараженные газом области на карте.
      Автор: NoNameUltima
      1. Открываем на сервере файл: missionServer.c
      2. После строки:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.UpdatePlayersStats, 30000, true); Добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true); *10000 - Время в мс(10 секунд). С такой частотой будет наноситься урон в данной области.
      После строки:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.UpdatePlayersStats); Добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER); Ищем строку:
      void UpdatePlayersStats() Вставляем ВЫШЕ нее, следующий код:
      void GAS_ZONE_TRIGGER() { /* GAS_ZONE_TRIGGER Автор: NoNameUltima skype: hf-trade */ // Зараженные зоны TVectorArray gas_points = {"13249 0 3962", "6389 0 2683", "6612 0 2561"}; // Массив намордников TStringArray gas_masks = {"GasMask", "GP5GasMask"}; // Радиус зон int radius = 350; // Наносимый урон float damage_value = 10; ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); PlayerBase player; vector position_player; int x; bool isGasMask; int attCount; int attIdx; EntityAI attachment; ItemBase item; string className; float damage_player; for (int i = 0; i < players.Count(); i++) { Class.CastTo(player, players.Get(i)); position_player = player.GetPosition(); for (x = 0; x < gas_points.Count(); x++) { if ( (vector.Distance(position_player, gas_points.Get(x))) < radius ) { isGasMask = false; attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { attachment = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( attachment.IsItemBase() ) { item = Class.Cast(attachment); className = item.GetType(); if ( gas_masks.Find(className) >= 0 ) { //Print ("Намордник найден!"); isGasMask = true; break; } } } if (isGasMask == false) { //Print ("Намордник не найден!"); damage_player = player.GetHealth("GlobalHealth", "Health"); player.SetHealth("GlobalHealth", "Health", damage_player - damage_value); } } } } } P.S.
      1. Так же можно изменить формат массива, и сделать зоны с разным радиусом
      2. Можно при желании добавить вывод оповещения, в зараженных зонах.
      *Скрипт предоставлен мной, в обрезанном виде намерено - остальное на Ваш вкус и цвет
      Изменено 4 октября пользователем NoNameUltima
       
      Добавлено от 123new:
      Файл missionServer.c располагается в {папка сервера}\scripts\5_Mission\MissionServer\missionServer.c
      Если у вас нет папки scripts в папке с сервером игры, откройте папку dta, распакуйте папку scripts из pbo-файла scripts.pbo и переместите в папку с сервером.
      Чтобы папка считывалась сервером, необходимо добавить параметр запуска сервера '-FilePatching'.
      P.S. Гайд не проверялся на актуальной версии серверной части игры со steam!
    • Автор: NotMeyson404
      Создал триггер в редакторе, что бы при заходе в область триггера играла музыка (Проверил в редакторе все работате на ура), сохранил как положено, закинул все файлы на сервер arma 3 epoch, и не работает ничего, пол дня провозился....подскажите как быть?
       
      class Item130
      {
      dataType="Trigger";
      position[]={7850.2622,17.753777,11198.521};
      angle=4.7678905;
      class Attributes
      {
      onActivation="1 fadeMusic 1; playMusic ""sidr11"";";
      onDeactivation="1 fadeMusic 0;";
      sizeA=3;
      sizeB=7;
      sizeC=4;
      repeatable=1;
      activationBy="ANY";
      isRectangle=1;
      isServerOnly=1;
      };
      id=40;
      type="EmptyDetectorArea10x10";
      atlOffset=-0.052999496;
      };
      class Item131
      {
      dataType="Trigger";
      position[]={7853.6118,17.391575,11197.52};
      angle=4.6931028;
      class Attributes
      {
      onActivation="playSound ""sidr22"";";
      onDeactivation="playSound ""sidr33"";";
      sizeA=2;
      sizeB=2;
      sizeC=4;
      repeatable=1;
      activationBy="ANY";
      isRectangle=1;
      isServerOnly=1;
      };
      id=41;
      type="EmptyDetectorArea10x10";
      atlOffset=0.1210022;
      };
    • Автор: exploadead
      Привет всем! Арма 1.58 Эпоч 0380 Пытаюсь перенести триггеры с 1.56 армы на 1.58....   Вот например такая конструкция по удалению ботов из зоны успешно работала на 1.56:   class Sensors { items=1; class Item0 { position[]={13325,0,14515}; a=200; b=200; activationBy="GUER"; repeating=1; interruptable=1; age="UNKNOWN"; expActiv="{deleteVehicle _x} forEach thisList;"; class Effects { }; }; };    
      Но в 1.58 появился новый общий для всего класс class Entities. Уже пробовал вот так:      
      class Entities { items=1; class Item1 { dataType="Trigger"; position[]={13325,0,14515}; class Attributes { name="delbot"; onActivation="{deleteVehicle _x} forEach thisList;"; sizeA=200; sizeB=200; repeatable=1; interruptable=1; activationBy="GUER"; }; id=210; type="EmptyDetector"; }; };    
      Но не сработало((... пробовал то же самое прямо в редакторе сделать... на 1.56 получалось... на 1.58 не пашет((
    • Автор: Mac2706
      Создал Триггер на определённых координатах, который должен вызывать скрипт, но когда захожу в триггер ничего не происходит.Триггер динамический :
       
       
      Я подозреваю, что это происходит, потому что скрипт исполняется только на стороне клиента и не передаёт данные на сервер Danger.Sqf
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.