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

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

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

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

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

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

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

PJIIOxa спасибо большое, а урон по противогазу не наносится? или тут так, купил одел, и забыл про радиацию?

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


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





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

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

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


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

SinSin визуальных эффектов нет в dayz

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


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

123new я в своих зонах заражонки с газом задымил зелено-желтым газком - он такой там по округе стелится

ниче сложного

и никаких клиентских модов

я еще вроде придумал как звуки со стороны сервера на клиенте вызывать
 

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

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

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

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


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

BorizzK не просвятишь в подробности ? на счёт дыма и звуков

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

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


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

grehoff со звуками пока небольшой затык

если в предыдущем патче у меня кой-чего получалось то сейчас нет

 

 

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


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

BorizzK а с дымом ? открыл Particle.c, но пока как-то без идей.. а реализовать хочется :)

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


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

grehoff партикли тут не при чем совершенно - партикли ток на клиенте

тут все просто

спавним на стороне сервера дымовые шашки ниже уровня земли - метров 5
ну и включаем

 

EntityAI Effect = EntityAI.Cast(GetGame().CreateObject( "класснеймдымовойшашки", "1000 2 1000" )); //Создаем обьект шашки
SmokeGrenadeBase smokegrenade = NULL; //инициализируем переменную класса SmokeGrenadeBase (дымовой шашки)
smokegrenade = SmokeGrenadeBase.Cast(Effect); //апкастим созданный обьект в класс дамовой шашки
if (smokegrenade) smokegrenade.Unpin(); //если все успешно прошло включаем гранату
smokegrenade.SetSynchDirty(); //вызываем принудительную синхру этой шашки с клиентами / хотя и без этого работает

усе - пошел дым - и игроки это у видят

на и что бы дым не заканчивался в процессе проверок зон я проверяю гранату на предмет состояния и если она потухла - делаю переспавн
if (smokegrenade)
    if (smokegrenade.GetSmokeGrenadeState() == ESmokeGrenadeState.NO_SMOKE)
	{
  	 //граната не дымит вызываем респавн
	 smokegrenadeю.SetHealth(0);
	 smokegrenade.Delete(); //Удаляем - но она не всегда удаляется, однако она пропадет сама со временем
	}
  //граната исчезла вызываем респавн
}

Немного изменил про проверку и респавн

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

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


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

BorizzK очередное спасибо огромное, пойду пробовать! :)

и главное - как его растянуть по локации ?

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

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


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

grehoff ну расставить по разным координатам - сохзранив обьекты в массив обьявленный в классе

и проверять

 

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


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

BorizzK хорошо хоть спросил. а то пошёл бы ветер запускать или двигать точки "спауна" =) по крайней мере первая мысль была такая

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


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

grehoff партикли тут не при чем совершенно - партикли ток на клиенте

тут все просто

спавним на стороне сервера дымовые шашки ниже уровня земли - метров 5
ну и включаем

 


EntityAI Effect = EntityAI.Cast(GetGame().CreateObject( "класснеймдымовойшашки", "1000 2 1000" )); //Создаем обьект шашки
SmokeGrenadeBase smokegrenade = NULL; //инициализируем переменную класса SmokeGrenadeBase (дымовой шашки)
smokegrenade = SmokeGrenadeBase.Cast(Effect); //апкастим созданный обьект в класс дамовой шашки
if (smokegrenade) smokegrenade.Unpin(); //если все успешно прошло включаем гранату
smokegrenade.SetSynchDirty(); //вызываем принудительную синхру этой шашки с клиентами / хотя и без этого работает

усе - пошел дым - и игроки это у видят

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

if (smokegrenade.GetSmokeGrenadeState() == ESmokeGrenadeState.NO_SMOKE)
{
   //вызываем респавн
}

 

Подскажите, пожалуйста, куда это прописывать?

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


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

grehoff партикли тут не при чем совершенно - партикли ток на клиенте

тут все просто

спавним на стороне сервера дымовые шашки ниже уровня земли - метров 5
ну и включаем

 


EntityAI Effect = EntityAI.Cast(GetGame().CreateObject( "класснеймдымовойшашки", "1000 2 1000" )); //Создаем обьект шашки
SmokeGrenadeBase smokegrenade = NULL; //инициализируем переменную класса SmokeGrenadeBase (дымовой шашки)
smokegrenade = SmokeGrenadeBase.Cast(Effect); //апкастим созданный обьект в класс дамовой шашки
if (smokegrenade) smokegrenade.Unpin(); //если все успешно прошло включаем гранату
smokegrenade.SetSynchDirty(); //вызываем принудительную синхру этой шашки с клиентами / хотя и без этого работает

усе - пошел дым - и игроки это у видят

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

if (smokegrenade.GetSmokeGrenadeState() == ESmokeGrenadeState.NO_SMOKE)
{
   //вызываем респавн
}

 

Все в целом получилось, однако

---------------------------
Compile error
---------------------------
Can't compile mission init script'!

$CurrentDir://mpmissions//dayz.chernarusplus//plugins//hazard_zones.c(258): Undefined function 'GetSmokeGrenadeState'

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

Хотя возникла другая проблема - гранаты попросту деспаунятся, как только у них заканчивается заряд, и, вероятно, поэтому GetSmokeGrenadeState и undefined.

 

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

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


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

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

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


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

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

В целом все получилось,но гранаты совершенно отказываются отправляться под землю, стоят торчком на земле.

 

...
vector smoke_position;
smokeGrenadeObject.PlaceOnSurface();
smoke_position = smokeGrenadeObject.GetPosition();
smoke_position[1] = smoke_position[1] - 60;
smokeGrenadeObject.SetPosition(smoke_position);
smoke_position = smokeGrenadeObject.GetPosition();
...

 

Хоть дебаг и говорит, что высота успешно изменена.

SCRIPT       : M18SmokeGrenade_Yellow<6f722720> (1): 1) placeonsurface: <2135.000000, 92.866005, 3400.000000>
SCRIPT       : M18SmokeGrenade_Yellow<6f722720> (1): 2) смещаем вниз: <2135.000000, 32.866005, 3400.000000>
SCRIPT       : M18SmokeGrenade_Yellow<6f722720> (1): 3) проверяем: <2135.000000, 32.866005, 3400.000000>

 

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

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


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

SinSin 

Зачем это?

 

vector smoke_position;
smokeGrenadeObject.PlaceOnSurface();
smoke_position = smokeGrenadeObject.GetPosition();
smoke_position[1] = smoke_position[1] - 60;
smokeGrenadeObject.SetPosition(smoke_position);
smoke_position = smokeGrenadeObject.GetPosition();

 

Вот так

 

vector smoke_position = "1000 0 1000";
smoke_position[1] = GetGame().SurfaceY(smoke_position[0],smoke_position[2]) - 6;
Object smokeGrenadeObject = GetGame().CreateObject("граната", smoke_position);
if (smokeGrenadeObject)
{
	SmokeGrenade grenade = SmokeGrenade.Cast(smokeGrenadeObject);
	grenade.UnPin();
}

 

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

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


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

SinSin я вчера с той же проблемой столкнулся. перед синхронизацией - пихай их под землю насильно SetPosition'ом

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


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

grehoff SetPosition'ом уже после всего и никаких SetOrientation - может всплыть

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


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

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

но когда добавил перед синхронизацией затакливание под землю - не всплывали. даже цикл без выхода сделал и наблюдал картину респауна минут 20, как он каждые 5 секунд создавал-удалял дым..

ни разу на земле не оказалась

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

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


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

Я дико извиняюсь, но что вы называете синхронизацией? Cast()? Я пока не до конца понимаю, что эта функция делает :)

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


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

SinSin крайние строки - это пример, который дал BorizzK , а по середине - как у меня получилось затолкать её под землю.
а по координатам выше там про SurfaceY - 5

 

if ( smokegrenade ) smokegrenade.Unpin(); //если все успешно прошло включаем гранату
smokegrenade.SetPosition(coord);
smokegrenade.SetSynchDirty(); //вызываем принудительную синхру этой шашки с клиентами / хотя и без этого работает

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


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

SinSin крайние строки - это пример, который дал BorizzK , а по середине - как у меня получилось затолкать её под землю.
а по координатам выше там про SurfaceY - 5

 

if ( smokegrenade ) smokegrenade.Unpin(); //если все успешно прошло включаем гранату
smokegrenade.SetPosition(coord);
smokegrenade.SetSynchDirty(); //вызываем принудительную синхру этой шашки с клиентами / хотя и без этого работает

 

Единственное, там

if (smokeGrenadeObject)
{
	SmokeGrenade grenade = SmokeGrenade.Cast(smokeGrenadeObject);
	grenade.UnPin();
}

 

Поэтому возникает вопрос: после объявления grenade и отрывания ей чеки мы уже манипулируем ею или продолжаем работать с smokeGrenadeObject? У вас везде smokegrenade.

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

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


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

SinSin Cast() это каст из класса в класс

grenade.SetSynchDirty();

 

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

 

 

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


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

SinSin можно и так и так работать

но вне лучше проверять обьект (он должен быть обьявлен в классе что бы быть доступным всем функциям класс)

а в самих функция а для манипуирования функциями непосредственно гранаты апкастим в класс гранаты

что бы вызвать например функцию UnPin - этой функции в классе обьекта нет, а в классе гранаты есть

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 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, в противном случае мы будем считать, что вы согласны с этим.