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


Фотография

Удаление ботов с группы (и группы) после смерти игроков в ней


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

#1 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 02 September 2016 - 17:16

Доброго времени суток форумчане!

 

Я новичек в армаделе и тем более в скриптописании и хочу попросить у вас совета.

 

У меня есть определенная идея:

 

На карте есть дом, в доме стоят боты, которых можно взять к себе в группу,

например через addAction и [unit] Join (group player); По нажатию они

​все нормально присоединяются к твоей группе.

 

Если ботов убивают то срабатывает  addMPEventHandler - mpkilled

unit addMPEventHandler ["mpkilled", {Null = _this execVM "scripts\dead.sqf"; }];

который запускает скрипт, небольшой очистки за ботом к которому он был привязан.

Я сделал для каждого бота свой addMPEventHandler, возможно так не правильно,

но другого варианта на тот момент не нашел, работает же :)

 

Так же ботов можно просто отпустить через тот же addAction.

 

Но вот собственно в чем вопрос:

Предположим что 2 игрока и несколько ботов в одной группе,

игроков убили первее чем ботов, и теперь боты сами себе начальники.

 

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

Наверняка же как то можно сделать так чтобы: если ни одного игрока (живого) не останется в группе,

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

 

Я подозреваю что это тоже будет через addMPEventHandler какой нибудь который запустит скрипт например,

вот только что в этом скрипте будет остается загадка, для меня. Я что только не пробовал, видимо не все конечно,

но как то не получилось ничего.

 

Я сделал так:

добавил игроку addMPEventHandler - mpkilled

если игрока убивают то запускается скрипт примерно такого содержания:

(я всякие варианты пробовал, это просто для примера, в редакторе сработало

хоть и с ошибками в черном хинте EDENEditor, а вот в МР не робит)

mygroup = group this;
_squadleader = leader player;
_playergroup = group player;
if ((_playergroup == mygroup) and (player == _squadleader) and (player != _squadleader)) 
then { deleteVehicle myBot };

Ну то есть теоретически если игрок лидер группы и мертвый и нет других игроков в этой группе - то бот удаляется. 

 

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

и если их нет - то удалить всех оставшихся ботов в группе и удалить потом группу.

 

Буду очень признателен за любую помощь!

PS - Это мое первое обращение к гуру Армы, не пинайте сильно :)


Сообщение отредактировал _den_: 02 September 2016 - 17:17

  • 0

#2 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 02 September 2016 - 18:08

(player == _squadleader) and (player != _squadleader)

это как? имхо либо одно либо другое?


  • 0

#3 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 02 September 2016 - 18:11

(player == _squadleader) and (player != _squadleader)

это как? имхо либо одно либо другое?

 

Да я черт его знает :) Я только начинаю в этом ковыряться, наверняка все что я пробовал было не правильно раз не заработало)

 

Я думал что там имелось ввиду так: если _playergroup это моя группа и игрок это _squadleader и _squadleader мертв то:

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


Сообщение отредактировал _den_: 02 September 2016 - 18:18

  • 0

#4 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 02 September 2016 - 19:56

== означает равен

!= не равен

 

у тебя оба условия сразу и лидер группы и не лидер, так не бывает:)

проверка жив ли игрок выглядит так:

alive player

если жив, возвращает true, если мертв false

 

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

if !(alive player) then {твой код, который выполнится при условии что игрок мертв};

и еще вопрос, кто такой myBot?

 

попробуй так

player addEventHandler ["Killed", {
_group = leader this;
_unit = units _group;
deleteVehicle _unit;
deleteGroup _group;

}];

 
 


  • 0

#5 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 02 September 2016 - 20:01

== означает равен

!= не равен

 

у тебя оба условия сразу и лидер группы и не лидер, так не бывает :)

проверка жив ли игрок выглядит так:

alive player

если жив, возвращает true, если мертв false

 

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

if !(alive player) then {твой код, который выполнится при условии что игрок мертв};

и еще вопрос, кто такой myBot?

 

попробуй так

player addEventHandler ["Killed", {
_group = leader this;
_unit = units _group;
deleteVehicle _unit;
deleteGroup _group;

}];

 
 

Спасибо за совет, обязательно попробую, отпишусь тут :)

А MyBot это просто один бот который выступил в роли добровольца на опыты с удалением )


  • 0

#6 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 03 September 2016 - 09:15

== означает равен

!= не равен

 

у тебя оба условия сразу и лидер группы и не лидер, так не бывает :)

проверка жив ли игрок выглядит так:

alive player

если жив, возвращает true, если мертв false

 

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

if !(alive player) then {твой код, который выполнится при условии что игрок мертв};

и еще вопрос, кто такой myBot?

 

попробуй так

player addEventHandler ["Killed", {
_group = leader this;
_unit = units _group;
deleteVehicle _unit;
deleteGroup _group;

}];

 
 

Попробовал данный код, действительно работает - но только в редакторе...

и то с ошибкой в черном хинте, вот такая:

 

06756efad1005ae4732bd7bac85e9aef.jpg

 

Может это ничего существенного, незнаю  :sad:

 

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

то почему то ничего не срабатывает :sorry:  Игрок погибает а боты разбегаются кто куда.

 

PS - Не знаю важно ли это, я пробую в моде EXILE.

 

Я там закомментировал бинд тильды (~) в клиенте чтобы можно было отдавать приказы группе

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

Вот разобраться бы еще с удалением было бы вообще супер :)


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 03 September 2016 - 11:09

_den_, в самом коде, который вам написали куча ошибок
В init.sqf:
if (hasInterface) then
{
	player addEventHandler [
		"Killed",
		{
			if (({(isPlayer _x) && (alive _x)} count units group (_this select 0)) == 0) then
			{
				{
					deleteVehicle _x;
				} forEach (units group (_this select 0));
			};
		}
	];
};
PS Нужно лишь узнать какой у вас тип возрождения, т к при некоторых игрок сразу возраждается возвращаясь к себе в группу
UPD1: забыл что у нас есть мертвые игроки

Сообщение отредактировал vlad333000: 03 September 2016 - 11:36

  • 0

#8 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 03 September 2016 - 11:30

_den_, в самом коде, который вам написали куча ошибок
В init.sqf:

if (hasInterface) then
{
   player addEventHandler [
      "Killed",
      {
         if (({isPlayer _x} count units group (_this select 0)) == 0) then
         {
            {
               deleteVehicle _x;
            } forEach (units group (_this select 0));
         };
      }
   ];
};
PS Нужно лишь узнать какой у вас тип возрождения, т к при некоторых игрок сразу возраждается возвращаясь к себе в группу

 

vlad333000 - Я думаю что в этом моде (EXILE) именно такой способ.

 

Тк после смерти появляется экран выбора точки спавна и потом боты снова с тобой в группе.

Вот только командование кто-то из них принимает на себя и ты уже не можешь ими управлять...

Но это при условии что ты не дисконектишся от сервера. Если дисконектишся то они сами по себе.

 

У меня именно второй случай с дисконектом, тк использую php скрипт с оживлением

(чтобы вернуть персонажа таким каким он был до смерти, а не создавать нового без ничего)

И в этом случае более уместно чтобы боты удалились вообще с карты и потом их взять снова.

 

Спасибо вам большое за вашу помощь, пойду пробовать   :)


Сообщение отредактировал _den_: 03 September 2016 - 11:31

  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 03 September 2016 - 11:38

_den_, ну если вам это нужно, то это по другому нужно делать
  • 0

#10 OFFLINE   _den_

_den_

    Рядовой

  • Пользователи
  • 14 сообщений

Отправлено 03 September 2016 - 11:39

_den_, ну если вам это нужно, то это по другому нужно делать

А как, не подскажите?


  • 0

#11 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 03 September 2016 - 23:37

deleteVehicle _unit;

чет я затупил, удалять массив таким образом:))

 

как автор написал он это хочет в екселе реализовать, я подозреваю, что там уже есть EventHandler на killed.

 
 


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 08 September 2016 - 20:17

 

_den_, в самом коде, который вам написали куча ошибок
В init.sqf:

if (hasInterface) then
{
   player addEventHandler [
      "Killed",
      {
         if (({isPlayer _x} count units group (_this select 0)) == 0) then
         {
            {
               deleteVehicle _x;
            } forEach (units group (_this select 0));
         };
      }
   ];
};
PS Нужно лишь узнать какой у вас тип возрождения, т к при некоторых игрок сразу возраждается возвращаясь к себе в группу

 

vlad333000 - Я думаю что в этом моде (EXILE) именно такой способ.

 

Тк после смерти появляется экран выбора точки спавна и потом боты снова с тобой в группе.

Вот только командование кто-то из них принимает на себя и ты уже не можешь ими управлять...

Но это при условии что ты не дисконектишся от сервера. Если дисконектишся то они сами по себе.

 

У меня именно второй случай с дисконектом, тк использую php скрипт с оживлением

(чтобы вернуть персонажа таким каким он был до смерти, а не создавать нового без ничего)

И в этом случае более уместно чтобы боты удалились вообще с карты и потом их взять снова.

 

Спасибо вам большое за вашу помощь, пойду пробовать   :)

 

 

Есть простой волшебный способ вернуть лузеру с плохим интернетом его собственность без всяких танцев с бубнов PHP. А нужно всего то пометить ботов, ну, ни как коты в смысле). Ботам из группы игрока задаётся публичная переменная в которую записывается UID игрока, для тех кто не в БТРе, он уникален, UID в смысле. А также, при дисконекте, вызвать скрипт для ботов, естественно на сервере, ибо владельцем ботов станет сервер, который задаст некий тайминг, после которого боты будут уделены если игрок не вернётся.

 

Что это даёт?

После повторного захода игрока на сервер, сервер должен отдать во владение игроку его ботов, если они ещё на этом свете. Как вернуть? Ну так мы же пометили ботов, нужно подойти эдак к боту, и спросить

 

сервер - Чей халоп будешь?

халоп - его "123456785674965"

сервер - пшёл вон, к барину ...


  • 2




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