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


Фотография

Как сделать берущиеся предметы (ноуты, доки и пр.)?


Лучший Ответ Cast , 25 October 2015 - 11:55

Продолжаем наш урок (начало на первой странице)! Теперь разберемся с выпадением папки.

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

  Дописываем в следующий файл:

 

VzyatDoki.sqf

playerItems pushBack "Land_File_research_F";
player playmoveNow "AmovPercMstpSrasWrflDnon_AinvPercMstpSrasWrflDnon_Putdown";
sleep 1;
deleteVehicle (_this select 0);
player addEventHandler ["killed", {_this exec "dropdoki.sqf"}];      /// создаем событие, которое активируется, в случае гибели того,
                                                                     /// кто подбирает папку. Сам сценарий события в файле "dropdoki.sqf"
If (playerSide == east) then 
{hint "Move to escape point";
Thief = _this select 1;      ///этой строкой мы даем имя новому носителю папки. Это имя пригодится для активации триггера
                           ///При использовании команды addEventHandler в обработчик события поступает
                          ///  массив из двух элементов: _this select 0 - объект жертвы и _this select 1 - объект убийцы.
};

dropDoki.sqf

playerItems = PlayerItems - ["Land_File_research_F"];                              ///вычитаем папку из массива
doki = createVehicle ["Land_File_research_F", _this select 0, [], 0, "none"  ];    ///создаем папку возле поверженного ее носителя

doki addaction ["Take it", "doc.sqf"];

doki_hint = true;                           ///Глобальные хинты. Подробнее http://www.flashpoint.ru/threads.
publicVariable "doki_hint";

И триггер концовки.

 

В условиях

Thief in thisList

Активация: концовка или что угодно на усмотрение

 

Отдельная благодарность отдельному товарищу за напутсвия и подсказки)

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


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

#21 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 24 October 2015 - 14:56

dos622, в конце присутствие пустого оператора ";" не обязательно
  • 0

#22 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 October 2015 - 20:38

К урокам про массивы, не много урока "Родная речь")

 

 

чтобы папка выпадывала

 

что либо может, только, выпадать!


  • 0

#23 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 24 October 2015 - 20:46

К урокам про массивы, не много урока "Родная речь")

 

 

Может все таки сосредоточимся на массивах?)))


  • 0

#24 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 October 2015 - 20:55

 

К урокам про массивы, не много урока "Родная речь")

 

 

Может все таки сосредоточимся на массивах?)))

 

Сосредоточенность настойчиво требует взаимопонимания применительно к обсуждаемому действу! Вот!!!)


  • 0

#25 OFFLINE   dos622

dos622

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

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

Отправлено 24 October 2015 - 22:39

vlad333000,

век живи, век учись:) не знал:) 


  • 0

#26 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 11:55   Лучший Ответ

Продолжаем наш урок (начало на первой странице)! Теперь разберемся с выпадением папки.

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

  Дописываем в следующий файл:

 

VzyatDoki.sqf

playerItems pushBack "Land_File_research_F";
player playmoveNow "AmovPercMstpSrasWrflDnon_AinvPercMstpSrasWrflDnon_Putdown";
sleep 1;
deleteVehicle (_this select 0);
player addEventHandler ["killed", {_this exec "dropdoki.sqf"}];      /// создаем событие, которое активируется, в случае гибели того,
                                                                     /// кто подбирает папку. Сам сценарий события в файле "dropdoki.sqf"
If (playerSide == east) then 
{hint "Move to escape point";
Thief = _this select 1;      ///этой строкой мы даем имя новому носителю папки. Это имя пригодится для активации триггера
                           ///При использовании команды addEventHandler в обработчик события поступает
                          ///  массив из двух элементов: _this select 0 - объект жертвы и _this select 1 - объект убийцы.
};

dropDoki.sqf

playerItems = PlayerItems - ["Land_File_research_F"];                              ///вычитаем папку из массива
doki = createVehicle ["Land_File_research_F", _this select 0, [], 0, "none"  ];    ///создаем папку возле поверженного ее носителя

doki addaction ["Take it", "doc.sqf"];

doki_hint = true;                           ///Глобальные хинты. Подробнее http://www.flashpoint.ru/threads.
publicVariable "doki_hint";

И триггер концовки.

 

В условиях

Thief in thisList

Активация: концовка или что угодно на усмотрение

 

Отдельная благодарность отдельному товарищу за напутсвия и подсказки)


Сообщение отредактировал Cast: 25 October 2015 - 11:59

  • 0

#27 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 October 2015 - 13:00

Cast, усложним задачу (МП):
1. Что будет если носитель папки выйдет с сервера/крашнется игра?
Скрытый текст

2. Что будет если носитель папки зайдет в зону триггера?
Скрытый текст

  • 0

#28 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 October 2015 - 13:07

UPD:
3. Что будет, если носитель папки умрет?
Скрытый текст

  • 0

#29 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 13:58

усложним задачу (МП):

Я то думал тут помогают)

 

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

2. Тут надо было уточнить. У меня заход носителя в триггер активирует DokiStolen = true, а не саму концовку

3. А тут я совсем не понял. Я же добавляю AddEvent Handler тому, кто ее поднимает ==> она и выпадать должна всегда. В чем ошибка?


  • 0

#30 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 October 2015 - 14:32

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


Б) Со стороны сервера смотреть за тем, жив ли носитель (Если в настройках миссии отключен ИИ, то при выходе игрок умирает)
2. Триггер сработает только у носителя - т к только у него присваивается значение переменной, у остальных триггер так и будет искать кого-то другого в триггере (Условие триггеров проверяется локально и эффект локален)
3.

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

- Effect is local - Только там где вызвана команда, только там и будет существовать действие - т е папочка будет. но подобрать ее сможет только тот, кто и нес ее до этого
  • 0

#31 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 October 2015 - 14:35

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

Добавляем обработчик

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

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

3. А тут я совсем не понял. Я же добавляю AddEvent Handler тому, кто ее поднимает ==> она и выпадать должна всегда. В чем ошибка?

Лучше всем игрокам добавлять обработчик события Killed, в котором проверять, есть ли у игрока доки, и, если есть, создавать их рядом с трупом.

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


  • 1

#32 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 16:28

 

Лучше всем игрокам добавлять обработчик события Killed, в котором проверять, есть ли у игрока доки, и, если есть, создавать их рядом с трупом.

 

 

И снова тот же вопрос: как сделать, чтобы массив PlayerItems принадлежал кому то одному?


2. Триггер сработает только у носителя - т к только у него присваивается значение переменной, у остальных триггер так и будет искать кого-то другого в триггере (Условие триггеров проверяется локально и эффект локален)
3.

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

- Effect is local - Только там где вызвана команда, только там и будет существовать действие - т е папочка будет. но подобрать ее сможет только тот, кто и нес ее до этого

 

PublicVariable?


  • 0

#33 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 October 2015 - 16:35

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

- современное творение БИСов для МП
  • 0

#34 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 October 2015 - 17:02

 

Лучше всем игрокам добавлять обработчик события Killed, в котором проверять, есть ли у игрока доки, и, если есть, создавать их рядом с трупом.

И снова тот же вопрос: как сделать, чтобы массив PlayerItems принадлежал кому то одному?

 

Зачем одному? Этот массив будет создан у каждого игрока. Кто подберёт доки, у того они и занесутся в этот массив.
Как я понял, в этой миссии подбирать можно только доки. Если это так, то можно вместо массива использовать булеву переменную, например, hasDocs.
 

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

- современное творение БИСов для МП

Какой ещё прошлый век?! Способ выбирается от обстановки, но в данном случае я согласен - уместнее использовать remoteExec.


  • 1

#35 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 18:47

Зачем одному? Этот массив будет создан у каждого игрока. Кто подберёт доки, у того они и занесутся в этот массив.

 

Еще попытка. В начале миссии они уже есть у одного игрока. Вот как написать, что именно у него они есть в массиве, а у других нет?

Я добавил ему в инит 

this addEventHandler ["killed", {_this exec "dropdoki.sqf"}];

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


  • 0

#36 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 October 2015 - 20:03

Что-то я запутался...
Как я понял, миссия заключается в том, что нужно спереть команде игроков у ИИ-игроков доки и доставить их куда-то.
Создаём файл initPlayerLocal.sqf, в котором объявляем переменную playerItems и "вешаем" игроку обработчик события Killed. В обработчике события проверяем, есть ли у игрока доки, и, если есть, то создаём их рядом с трупом и запускаем добавление им действия "Взять" у ВСЕХ игроков.

Этот файл исполнится у КАЖДОГО подключившегося игрока.
Создаём файл initServer.sqf, в котором инициализируем ИИ-игроков (добавляем им обработчик события Killed, аналогичный вышеприведённому) и добавляем обработчик события HandleDisconnect. В обработчике событий проверяем у отключающегося игрока, есть ли у него доки, и, если есть, создаём их в координатах до отключения и запускаем добавление им действия "Взять" у ВСЕХ игроков.


Сообщение отредактировал Schatten: 25 October 2015 - 20:06

  • 1

#37 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 20:15

Что-то я запутался...
Как я понял, миссия заключается в том, что нужно спереть команде игроков у ИИ-игроков доки и доставить их куда-то.
Создаём файл initPlayerLocal.sqf, в котором объявляем переменную playerItems и "вешаем" игроку обработчик события Killed. В обработчике события проверяем, есть ли у игрока доки, и, если есть, то создаём их рядом с трупом и запускаем добавление им действия "Взять" у ВСЕХ игроков.

Этот файл исполнится у КАЖДОГО подключившегося игрока.
Создаём файл initServer.sqf, в котором инициализируем ИИ-игроков (добавляем им обработчик события Killed, аналогичный вышеприведённому) и добавляем обработчик события HandleDisconnect. В обработчике событий проверяем у отключающегося игрока, есть ли у него доки, и, если есть, создаём их в координатах до отключения и запускаем добавление им действия "Взять" у ВСЕХ игроков.

 

Миссия без ИИ вообще. Две команды. Одна несет один экземпляр документов у командира например. А вторая должна убить командира и взять папку

 

В обработчике события проверяем, есть ли у игрока доки, и, если есть, то создаём их рядом с трупом

 

 

Как проверить я это не могу понять... 

if ("Land_File_research_F" in PlayerItems)

Так же не пойдет?

И что надо написать командиру в инит, чтобы папка занеслась именно в его массив? Если всем вписать  

this addEventHandler ["killed", {_this exec "dropdoki.sqf"}];

то каждый убитый порождает папку возле себя. Потому что надо проверить в его ли массиве она содержится. if ("Land_File_research_F" in PlayerItems) .... этого будет достаточно? А то мне сейчас не с кем проверить (


Сообщение отредактировал Cast: 25 October 2015 - 20:21

  • 0

#38 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 October 2015 - 20:26

 

В обработчике события проверяем, есть ли у игрока доки, и, если есть, то создаём их рядом с трупом

Как проверить я это не могу понять... 
if ("Land_File_research_F" in PlayerItems)
Так же не пойдет?

 

Как раз таки пойдёт.
 

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

PlayerItems = ["Land_File_research_F"];

Если всем вписать  

this addEventHandler ["killed", {_this exec "dropdoki.sqf"}];
то каждый убитый порождает папку возле себя. Потому что надо проверить в его ли массиве она содержится.

 

Конечно, надо проверять.
 

if ("Land_File_research_F" in PlayerItems) .... этого будет достаточно?

Да.


  • 1

#39 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 25 October 2015 - 20:36

 

 

В обработчике события проверяем, есть ли у игрока доки, и, если есть, то создаём их рядом с трупом

Как проверить я это не могу понять... 
if ("Land_File_research_F" in PlayerItems)
Так же не пойдет?

 

Как раз таки пойдёт.
 

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


  • 0

#40 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 26 October 2015 - 19:35

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

- современное творение БИСов для МП

TimerA = 60;

for "_i" from timerA to 0 step -1 do {
uiSleep 1;

["Crack and Load %1", _i] remoteExec ["hint format"];
};

Если написать HINT без FORMAT. То показывает, но само собой без секунд. а как записать, чтобы секнды тоже были? не могу найти примера нигде (


  • 0




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