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


Фотография

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


Лучший Ответ 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

#41 OFFLINE   Schatten

Schatten

    Капитан

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

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

(format ["Crack and Load %1", _i]) remoteExec ["hint", 0];

  • 1

#42 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 27 October 2015 - 22:56

 Дилема с remoteaction.  Если так

nout1action1 = this addaction ["Crack and Send",{timer = execVM "timer.sqf"}, 0, 99 ,false ,false,"", "playerside == east"];

то

[nout1, nout1Action1] remoteExec ["removeaction"];

Все прекрасно работает

А если так

nout1action1 = [this, ["Crack and Send",{timer = execVM "timer.sqf"}, 0, 99 ,false ,false,"", "playerside == east"]] remoteExec ["addAction"];

то

[nout1, nout1Action1] remoteExec ["removeaction"];

действие добавляется, но не удаляется. Что не так? 


  • 0

#43 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 27 October 2015 - 23:26

Cast, remoteExec возвращает не индекс действия, а индекс для JIP-сообщения
  • 0

#44 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 28 October 2015 - 08:53

Cast, remoteExec возвращает не индекс действия, а индекс для JIP-сообщения

Наверное это может мне помочь, но я не знаю как... Можешь подробнее?


  • 0

#45 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 28 October 2015 - 09:42

Cast, а чего тут поподробнее? remoteExec никогда не вернет тебе результат выполнения вызываемой функции
  • 0

#46 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 28 October 2015 - 10:12

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

 

Ты имеешь в виду что RemoteExec вообще в данной ситуации не подходит? Или надо записать как то по другому?


  • 0

#47 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 28 October 2015 - 10:27

nout1 remoteExec ["addCrackNSendAction"];

addCrackNSendAction:

_this setVariable [
	"actionId",
	_this addaction ["Crack and Send",{timer = execVM "timer.sqf"}, 0, 99 ,false ,false,"", "playerside == east"]
];
nout1 remoteExec ["removeCrackNSendAction"];

removeCrackNSendAction:

_this removeAction (_this getVariable ["actionId", -1]);
_this setVariable ["actionId", nil];

Принцип работы: с сервера у игроков будут запускаться сценарии addCrackNSendAction и removeCrackNSendAction; в первом сценарии объекту будет добавляться действие, а его ID будет запоминаться в объекте; во втором сценарии ID действия будет извлекаться из объекта, удаляться действие с этим ID и сам ID.


  • 1

#48 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 29 October 2015 - 22:43

Я пробовал понять как это сделать. Три страницы исписано и я не разобрался.

Простая задача и такой гигантский гемор, спасибо БИСам/


  • 0

#49 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 29 October 2015 - 22:58

mickeymen, что непонятно? Вроде суть я изложил здесь.


  • 0

#50 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 30 October 2015 - 08:42

Я пробовал понять как это сделать. Три страницы исписано и я не разобрался.

Простая задача и такой гигантский гемор, спасибо БИСам/

 

А что конкретно? Не считая добавления\удаления глобальных действий все работает у меня. Может смогу помочь


  • 0

#51 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 30 October 2015 - 11:29

что непонятно?

 

 

В этой теме лучший ответ содержит следующую информацию:

 

 

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

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

Т.е. к чему добавить предоставленный скриптовый блок? Было бы прекрасным увидеть эти скрипты в теме Скрипты/завершенные в цельном виде и с одним описанием;)

 


  • 0

#52 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 30 October 2015 - 12:18

 

http://arma3.ru/foru...-pr/#entry56510. в принципе в лучшем ответе он и есть полностью, я скопировал то, что писал на первой странице и в тот же файл дописал. 


Сообщение отредактировал Cast: 30 October 2015 - 12:31

  • 0

#53 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 30 October 2015 - 13:38

mickeymen, никто не пишет куда надо вписывать код потому, что его можно вписывать почти куда угодно
  • 0

#54 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 30 October 2015 - 21:25

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

 [this, ["Crack and Send",{timer = execVM "timer.sqf"},"playerside == west"]] remoteExec ["addaction"];
 [this, ["STOP","timer_stop.sqf", "playerside == east"]] remoteExec ["addaction"]; 

в timer.sqf простой скрипт отсчета времени. Работает у всех

sending = 120;

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

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

SendComplete = true;

в timer_stop.sqf 

terminate timer;
"Canceled" remoteExec ["hint"];

В редакторе все работает как нужно, а вот в сети не срабатывает terminate timer;, хинт появляется, но таймер продолжает работать. В чем ошибка?


  • 0

#55 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 30 October 2015 - 22:03

Во-первых, ты, похоже, пытаешься остановить таймер, который был активирован другим персонажем, но сценарий timer_stop.sqf запускается у тебя, а переменная timer существует на компе того, кто активировал таймер.

Во-вторых, если действия добавляются в редакторе, то их не надо добавлять с помощью remoteExec, поскольку они и так у всех добавятся.


Сообщение отредактировал Schatten: 30 October 2015 - 22:07

  • 0

#56 OFFLINE   Cast

Cast

    Ефрейтор

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

Отправлено 31 October 2015 - 01:31

Во-первых, ты, похоже, пытаешься остановить таймер, который был активирован другим персонажем, но сценарий timer_stop.sqf запускается у тебя, а переменная timer существует на компе того, кто активировал таймер.

 

publicVariable timer; пробовал запихать и в файл сценария и в действие, не работает ( больше идей нет. На БИС вики очень скудная информация по этой теме

 

или например такое:

SendComplete = true;
publicVariable "SendComplete";

Условия финала:

waitUntil {SendComplete};if (PlayerSide == east &&SendComplete )
                         then
                                       {"loser" call bis_fnc_endmission;};
If (playerSide == west && SendComplete)
                         then
                                       {"end1" call bis_fnc_endmission;};

Не сработало ни у синих, ни у красных((

 


Сообщение отредактировал Cast: 31 October 2015 - 01:45

  • 0

#57 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 31 October 2015 - 12:18

По-моему, тут лучше всего сделать так, чтобы таймер "крутился" на сервере. Т. е. в сценарии timer.sqf отправляется запрос серверу на активацию таймера, сервер получает этот запрос и активирует таймер. С сервера же выполняется и глобальный hint. При деактивации таймера в timer_stop.sqf серверу отправляется запрос на остановку таймера.


Сообщение отредактировал Schatten: 31 October 2015 - 12:18

  • 0

#58 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 31 October 2015 - 13:26


mickeymen, никто не пишет куда надо вписывать код потому, что его можно вписывать почти куда угодно
Я не спрашиваю куда надо вписать. Я спросил к чему дописать.  8)

 


Написано дописываем, но к чему именно не ясно. Т.е. к чему добавить предоставленный скриптовый блок?

  • 0

#59 OFFLINE   евгений373

евгений373

    Ефрейтор

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

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

а откуда появилось - "doc.sqf"

 


  • 0




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