Перейти к содержимому


Фотография

Выполнить команду в случае убийства юнита.


Лучший Ответ Kludge , 20 December 2015 - 02:29

давно все уже сделал через инициализацию  null = this execVM ""prison\kill.sqf""; ";

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 39

#1 OFFLINE   Kludge

Kludge

    Ефрейтор

  • Заблокированные
  • 94 сообщений

Отправлено 14 July 2015 - 04:10

Ребят нужна помощь.

 

Ситуация такая на карте стоит юнит,  конкретно любой подходит и убивает его, после его смерти с убийцей должно произойти следующее player setPos [*,*,*] тоесть поместить по определенным координатам (в тюрьму). Как это прописать в инициализации юнита? За ранее спасибо.


  • 0

#2 OFFLINE   Kludge

Kludge

    Ефрейтор

  • Заблокированные
  • 94 сообщений

Отправлено 14 July 2015 - 05:27

Все ребят сам написал :)

Мож кому пригодиться:

 

Имя юнита:

d6

 

Инициализация юнита: 

[this] exec "kill.sqs";

Сам скрипт kill.sqs:

d6 = _this select 0
@(!alive d6)
player setPos [8487.2188,25250.588,0];
hint parseText format["<t align='center' size='1.8' color='#3b4b2e'>ТЮРЕМНЫЙ ОСТРОВ</t><br/><t size='1.2' color='#3b4b2e'>¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯<br/>Вы направлены на тюремный остров за убийство члена дружественной группировки<br/>"];
exit

Сообщение отредактировал Kludge: 14 July 2015 - 05:35

  • 1

#3 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 14 July 2015 - 06:02

@(!alive d6)


Я смотрю вы очень сильно уверены, что данный юнит умрет от руки игрока. Вы не думали, что его может кто-угодно другой убить?
  • 0

#4 OFFLINE   Kludge

Kludge

    Ефрейтор

  • Заблокированные
  • 94 сообщений

Отправлено 14 July 2015 - 15:48

 

@(!alive d6)


Я смотрю вы очень сильно уверены, что данный юнит умрет от руки игрока. Вы не думали, что его может кто-угодно другой убить?

 

 

Он стопроцентно умрет от руки игрока, его расположение исключит другую возможность да и кроме игроков сажать за убийство данного юнита в тюрьму не кого не надо, но возникла проблема другая таких юнитов около 100 и я не как не могу задействовать скрипт таким образом чтоб за убийство любого юнита с строкой инициализации :

[this] exec "kill.sqs"; 

человека переносило по координатам.
 

В справочнике описан такой вариант но он не срабатывает :sorry:

_ARMY = _this select 0
@(!alive _ARMY)
player setPos [8487.2188,25250.588,0];
hint parseText format["<t align='center' size='1.8' color='#3b4b2e'>ТЮРЕМНЫЙ ОСТРОВ</t><br/><t size='1.2' color='#3b4b2e'>????????????????????????<br/>Вы направлены на тюремный остров за убийство члена дружественной группировки<br/>"];
exit

Сообщение отредактировал Kludge: 14 July 2015 - 15:48

  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 July 2015 - 18:39

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

 

В инит игрока

0 = this spawn {
	_unit = _this;
	waitUntil {sleep 0.1; rating _unit < 0};
	_unit setPos [8487.2188,25250.588,0];
	hint "Что за дела, нигер!? 5 лет строгого режима!";
};

  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 July 2015 - 20:34

А не лучше ли добавить обработчик события Killed на каждого юнита? Зачем эти "костыли" со spawn, waitUntil, sleep?


  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 15 July 2015 - 18:47

А не лучше ли добавить обработчик события Killed на каждого юнита? Зачем эти "костыли" со spawn, waitUntil, sleep?

Что дешевле? Один, скажем так, триггер, или куча подобных триггеров.

Каждый решает для себя сам!


Корректировка, применительно для данного случая

0 = this spawn {
	_unit = _this;
	
	waitUntil {
		sleep 0.1;
		if (rating _unit > 0) then {_unit addRating 0};
		rating _unit < 0
	};
	
	_unit setPos [8487.2188,25250.588,0];
	hint "Что за дела, нигер!? 5 лет строгого режима!";
};

  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 15 July 2015 - 18:53

ЗЫ

Вот это

события Killed на каждого юнита?

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

Зачем эти "костыли" со spawn, waitUntil, sleep?

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 16 July 2015 - 00:18

Очень сомневаюсь.

Выделенные команды всегда быстрее, поскольку сразу выполняются движком, в отличие от "костылей", которые сначала нужно интерпретировать. Для того, чтобы в этом убедиться, достаточно сравнить производительность функций, начинающихся с BIS_fnc_, и команд, предназначенных для их замены, - разница порой кратная.


  • 0

#10 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 16 July 2015 - 00:52

Очень сомневаюсь.

Выделенные команды всегда быстрее, поскольку сразу выполняются движком, в отличие от "костылей", которые сначала нужно интерпретировать. Для того, чтобы в этом убедиться, достаточно сравнить производительность функций, начинающихся с BIS_fnc_, и команд, предназначенных для их замены, - разница порой кратная.

 

Что дешевле? Один, скажем так, триггер, или куча подобных триггеров.

 


ЗЫ

Вы отчётливо понимаете что такое евант хандлер?


ЗЫ_2

 

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

И нужно отчётливо понимать что такое функция, и что такое скриптовая команда.


Сообщение отредактировал SteelRat: 16 July 2015 - 00:53

  • 0

#11 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 16 July 2015 - 01:34

 

Очень сомневаюсь.

Выделенные команды всегда быстрее, поскольку сразу выполняются движком, в отличие от "костылей", которые сначала нужно интерпретировать. Для того, чтобы в этом убедиться, достаточно сравнить производительность функций, начинающихся с BIS_fnc_, и команд, предназначенных для их замены, - разница порой кратная.

 

Что дешевле? Один, скажем так, триггер, или куча подобных триггеров.

 


ЗЫ

Вы отчётливо понимаете что такое евант хандлер?


ЗЫ_2

 

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

И нужно отчётливо понимать что такое функция, и что такое скриптовая команда.

 

Я всё понимаю.

 

Короче, ждём автора темы. Посмотрим, что он скажет, пояснит, выберет. А то мы тут спорим и, видимо, не понимаем всей полноты картины, что же нужно автору.

 

Кстати, ваш вариант может не подойти, поскольку рейтинг может упасть, если игрок, например, уничтожит гражданскую машину или машину, сторона которой совпадает со стороной игрока.


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 16 July 2015 - 19:02

 

Кстати, ваш вариант может не подойти, поскольку рейтинг может упасть, если игрок, например, уничтожит гражданскую машину или машину, сторона которой совпадает со стороной игрока.

 

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

 

 

Я всё понимаю.

 

Осмелюсь всё таки не много усомниться в этом.

 

Сначала о функциях и командах.

Сравнивать эти два понятия в плане производительности, идея сама по себе дикая!

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

 

Что получаем? Сравнивать пачку скриптовых команд с одной командой в скорости исполнения

 

идея сама по себе дикая!

 

Далее, ещё раз о скоростях, но уже по существу вопроса.

 

Вы считаете что дав ста ботам по евант хандлеру, дать боту по евант хандлеру) хохма прям), каламбур получился).

И так 100 ботов и сто евант хандлеров, к конкретной цифре не цепляемся, сколько там для кого значит много

_EHkilledIdx = _bot addEventHandler ["killed", {
	if (_this select 1 == player) then {
		// что там надо сделать с таким гадом?
	};
}];

Против одного проверочного цикла прикрученного к игроку

0 = this spawn {
	_unit = _this;
	
	waitUntil {
		sleep 0.1;
		if (rating _unit > 0) then {_unit addRating 0};
		rating _unit < 0
	};
	
	_unit setPos [8487.2188,25250.588,0];
	hint "Что за дела, нигер!? 5 лет строгого режима!";
};

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

 

Что представляют из себя эти два куска кода? У них есть одно важное объединяющее их определение, это триггеры.

 

Оба описанных варианта через некое кол-во времени производят проверку наступления некого события, после наступления этого события инициализируется к своему исполнению код определённый для данного события. Этим и выражается понятие ТРИГГЕР.

 

И вот мы подошли к самому главному.

Что дешевле для процессора? Один проверочный цикл на игроке, или 100 проверочных циклов на 100 ботах, которые будут крутится на ботах постоянно!

 

Что вам подсказывает логика? Господа!


  • 0

#13 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 16 July 2015 - 20:39

 

Сначала о функциях и командах.
Сравнивать эти два понятия в плане производительности, идея сама по себе дикая!

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

 

 

Что представляют из себя эти два куска кода? У них есть одно важное объединяющее их определение, это триггеры.

Их можно считать триггерами только из-за схожего принципа работы.
Код

[] spawn {
	waitUntil {...}

	...
};

не означает, что будет создан триггер. Гораздо рациональнее использовать триггер.

 

 

Что дешевле для процессора? Один проверочный цикл на игроке, или 100 проверочных циклов на 100 ботах, которые будут крутится на ботах постоянно!

Вот что я получил у себя:

Прикрепленный файл  01.png   50.58К   1 Количество загрузок: Прикрепленный файл  02.png   51.28К   0 Количество загрузок:

В первом случае я использовал своё решение. Во-втором - ваше. Судя по хронологии загрузки первого ядра, для первого случая средняя загрузка чуть ниже.


Сообщение отредактировал Schatten: 16 July 2015 - 23:55

  • 0

#14 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 16 July 2015 - 22:17

Schatten, ну начнем с того что это Арма с её немножко чокнутым движком, так что вот таким способом мерить бессмысленно. И потом: вам сложно было показать сколько ресурсов ушло именно на арму 3? Может во время способа тов. SteelRat у вас на компьютере какая-то программа решила пожрать еще немного ресурсов (Даже хоть на пару секунд), что и могло повлиять на итоговый результат!

Сообщение отредактировал vlad333000: 16 July 2015 - 22:18

  • 0

#15 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 16 July 2015 - 23:00

 

вам сложно было показать сколько ресурсов ушло именно на арму 3? Может во время способа тов. SteelRat у вас на компьютере какая-то программа решила пожрать еще немного ресурсов, что и могло повлиять на итоговый результат!

А по цифрам не видно что остальное почти не меняется?

 

 

это Арма с её немножко чокнутым движком, так что вот таким способом мерить бессмысленно

Согласен. Особенно это видно по загрузке ядер.

Выкладывайте свои измерения.

 

Короче, считаю, что обработка 100 обработчиков событий - ничего по сравнению с обработкой 100 юнитов.


  • 0

#16 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 16 July 2015 - 23:18

Короче, считаю, что обработка 100 обработчиков событий - ничего по сравнению с обработкой 100 юнитов.

А при чем тут это? Мы же сравниваем 100 eventHandler-ов и один типа "костыль" триггера

А по цифрам не видно что остальное почти не меняется?

А вы видите на них распределение загрузки ЦП по процессам?

Сообщение отредактировал vlad333000: 16 July 2015 - 23:22

  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 16 July 2015 - 23:54

 

А при чем тут это?

Как мне показалось, основную нагрузку создают юниты, а не навешанные на них обработчики событий.

 

 

А вы видите на них распределение загрузки ЦП по процессам?

Так пойдёт?

02.png
01.png

В первом случае я из консоли запускал на исполнение следующий код:

_group = createGroup civilian;

for "_i" from 1 to 100 do {
	_position = [[4000, 4000, 0], 0, 100, 1, 0, 0.5, 0] call BIS_fnc_findSafePos;

	[_group, _position] spawn {(_this select 0) createUnit ["C_man_1", _this select 1, [], 0, "NONE"]};
};

Кроме этого, в поле Init игрока я добавлял следующее:

null = this spawn {
	waitUntil {
		sleep 0.1;

		if ((rating _this) > 0) then {_this addRating 0};

		(rating _this) < 0
	};

	_this setPosATL [0, 0, 0];

	hint "Rating < 0!";
};

Во втором случае я из консоли запускал на исполнение следующий код:

_group = createGroup civilian;

for "_i" from 1 to 100 do {
    _position = [[4000, 4000, 0], 0, 100, 1, 0, 0.5, 0] call BIS_fnc_findSafePos;

    [_group, _position] spawn {
        _unit = (_this select 0) createUnit ["C_man_1", _this select 1, [], 0, "NONE"];

        _unit addEventHandler ["Killed", {hint "Is killed!"}];
    };
};

Прикрепленные файлы

  • Прикрепленный файл  01.png   404.64К   2 Количество загрузок:
  • Прикрепленный файл  02.png   408.35К   0 Количество загрузок:

Сообщение отредактировал Schatten: 17 July 2015 - 00:40

  • 0

#18 OFFLINE   Kludge

Kludge

    Ефрейтор

  • Заблокированные
  • 94 сообщений

Отправлено 17 July 2015 - 02:41

Ого вы тут загнались, народ поясняю подробно задача такая есть 4 типа юнитов сумарно 150 шт. :
Красные - У этих есть база и патрули, за убийство юнитов на базе не в патруле отправляем в тюрьму.
Синие - У этих тоже есть база и патрули, за убийство юнитов на базе не в патруле отправляем в тюрьму.
Независимые за убийство ничего не происходит
Гражданские за убийство ничего не происходит.

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


Сообщение отредактировал Kludge: 17 July 2015 - 03:25

  • 0

#19 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 17 July 2015 - 13:36

Kludge, с этого надо было и начинать!

Создайте по одному триггеру так, чтобы они "накрывали" базы. Настройте их на активацию силами BLUFOR и OPFOR соответственно. Настройте активацию, чтобы юнитам в пределах зоны действия триггера добавлялись обработчики событий Killed, в которых убивший бы наказывался, а за пределами эти обработчики бы удалялись.


Сообщение отредактировал Schatten: 17 July 2015 - 13:37

  • 0

#20 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 July 2015 - 01:57

Последняя реплика,

Как мне показалось, основную нагрузку создают юниты, а не навешанные на них обработчики событий.

 

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

Вы что хотели показать таким сравнением? Что мало кому ведомо сколько ресурсов процессора берёт AI армы, это не знает только ленивый.

Плюс вы сунули в спавн 100 ботов инициализирующий код, плюс ещё нагрузка, которая будет зависеть от объёма исполняемого кода.

 

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

 

Оптимизацией, видимо озабочены только особо одарённые. Им делать больше не чего!

 

А те кому 100 евант хандлеров не нагрузка, позже начинают высказывать мнения типа, движок г ... но, фризит и лагает!

С чего бы так?


Сообщение отредактировал SteelRat: 18 July 2015 - 01:58

  • 0




Яндекс.Метрика