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


Фотография

Вопросы по написанием скриптов


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

#1 OFFLINE   RocknRoll07

RocknRoll07

    Рядовой

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

Отправлено 11 November 2014 - 18:20

Здравствуйте, у меня пару вопрос по написанию скриптов:

 

1) Как написать скрипт по menu respawm (что бы можно было выбрать точки respawn). Ибо у меня есть две точки respawn и не могу выбрать ни одну из точек, после 5 секунд кидает авто-кастом на любую точку).

 

2) respawn для определенной единице техник (к примеру два джипа Willys и один катер, что бы после уничтожение они делали respawn в определенной точке).

 

3) Выборочный Respawn для отряда (допустим в отряде 10 человек, что бы 5 из 10  смогли сделать Respawn)

 

Заранее Спасибо!!


  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 11 November 2014 - 22:47

1

 

В Description.ext

respawnDialog = 0;

Show the scoreboard and respawn countdown timer for a player if he is killed with respawnType 3. Default is 1 (true).

 

Машинный перевод выдаёт как всегда бредятину, так что разбирайтесь

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


  • 0

#3 OFFLINE   RocknRoll07

RocknRoll07

    Рядовой

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

Отправлено 11 November 2014 - 23:30

1

 

В Description.ext

respawnDialog = 0;

Show the scoreboard and respawn countdown timer for a player if he is killed with respawnType 3. Default is 1 (true).

 

Машинный перевод выдаёт как всегда бредятину, так что разбирайтесь

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

 

Уважаемый, я прописал respawnDialog = 0; и все же меню выбора точек распауна, нет. После смерти сразу идет распаун на точку, а выбрать точку респауна так и не могу сделать.


Сообщение отредактировал RocknRoll07: 11 November 2014 - 23:33

  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 12 November 2014 - 17:09

А вам, Уважаемый, логика не подсказывает, что

respawnDialog = 0

это значит отключить диалог?

 

И ещё, Уважаемому, не повредит по эксперементировать с таким параметром

respawnDelay = 45;

да и с другими тоже, которые содержат в себе это страстно желанное

respawn

  • 0

#5 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 13:41

 

А вам, Уважаемый, логика не подсказывает, что

respawnDialog = 0

это значит отключить диалог?

 

И ещё, Уважаемому, не повредит по эксперементировать с таким параметром

respawnDelay = 45;

да и с другими тоже, которые содержат в себе это страстно желанное

respawn

Здравствуйте, у меня аналогичная проблема. respawnDialog = 1, но он никак не повлиял на возможность выбора точки респауна. Время появления в 45 секунд тоже не дало результатов. После смерти персонаж появляется рандомно на одной из точек респауна. Я думал, что может чего упустил, но не нашёл в Description'е(

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

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

respawn - тип возрождения;
respawnDelay - время задержки возрождения в секундах;
respawnVehicleDelay - время возрождения транспорта в секундах;
respawnDialog - Отображает таблицу счета и счетчик обратного действия до возрождения для игрока, если он был убит при respawn = 3. По умолчанию respawnDialog = 1;

Может я что не так понимаю? Объясните пожалуйста.
Заранее благодарю.


  • 0

#6 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 12 December 2014 - 13:50

Попробуйте дописать в description.ext

respawnTemplates[] = {"MenuPosition"};

  • 1

#7 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 14:08

 

Попробуйте дописать в description.ext

respawnTemplates[] = {"MenuPosition"};

Спасибо большое! Помогло. Появляется меню с выбором точки респауна. А не дадите ссылку, где можно почитать о том, как точку респауна привязать к группе или командиру группы?


  • 0

#8 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 12 December 2014 - 14:14

Про респавн все написано здесь: 

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

Можете попробовать сделать respawn = "GROUP"; или добавить точку респавна при помощи 

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

, указав в качестве аргумента <position> командира группы.


  • 0

#9 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 14:19

Про респавн все написано здесь: 

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

Можете попробовать сделать respawn = "GROUP"; или добавить точку респавна при помощи 

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

, указав в качестве аргумента <position> командира группы.

Благодарю. Буду изучать.


  • 0

#10 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 14:30

Про респавн все написано здесь: 

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

Можете попробовать сделать respawn = "GROUP"; или добавить точку респавна при помощи 

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

, указав в качестве аргумента <position> командира группы.

А нельзя прописать что-нибудь в духе _marker setPos (getPos _leader); ? Или так не делается?) Извините, просто я только начал во всём разбираться


  • 0

#11 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 12 December 2014 - 16:57

Тогда уж не setPos, а setMarkerPos. И придется это выполнять постоянно в цикле, чтобы маркер постоянно перемещался на позицию командира (attachTo на маркер не сработает). Не рекомендую, в общем (да и нет уверенности, что точка респавна сдвинется вслед за маркером, проверить сейчас не могу, к сожалению).


  • 0

#12 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 17:11

Тогда уж не setPos, а setMarkerPos. И придется это выполнять постоянно в цикле, чтобы маркер постоянно перемещался на позицию командира (attachTo на маркер не сработает). Не рекомендую, в общем (да и нет уверенности, что точка респавна сдвинется вслед за маркером, проверить сейчас не могу, к сожалению).

Хорошо, понял. Спасибо.
P.s. при установке respawn = "GROUP"; После смерти персонаж становится заместо одного из ботов. Фактически респауна нет. Когда заканчиваются боты, то миссия провалена). Остаётся поковырять [<target>,<position>] call BIS_fnc_addRespawnPosition;
Как я понимаю - это вызов функции? Но не пойму где её вызывать. Не в инициализации же? Или в триггере можно прописать в Активацию? АрмА сама поймёт, что координаты маркера надо постоянно вычислять в зависимости от положения командира группы?


  • 0

#13 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 12 December 2014 - 17:25

Маркер тут вообще не причем. Вызывать из инита, да. Допустим, юнит-командир у нас называется com1. Тогда пишете

if (isServer) then {comRespawn = [west, com1] call BIS_fnc_addRespawnPosition;};

(вместо west пишете нужную сторону, смотря за кого играете).

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


  • 1

#14 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 17:44

Маркер тут вообще не причем. Вызывать из инита, да. Допустим, юнит-командир у нас называется com1. Тогда пишете

if (isServer) then {comRespawn = [west, com1] call BIS_fnc_addRespawnPosition;};

(вместо west пишете нужную сторону, смотря за кого играете).

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

Спасибо. Работает. До этого я писал [east, (getPos aP)] call BIS_fnc_addRespawnPosition; но видимо компилятор воспринимает это как константу и положение точки не изменяется.
После смерти командира точка остаётся в том месте, где он помер. В мануалах есть записи о "onPlayerKilled.sqf" и "onPlayerRespawn.sqf". Значит если при смерти персонажа удалять точку, а при респе ставить, то должно сработать?


  • 0

#15 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 12 December 2014 - 20:11

Не разберусь как в "onPlayerKilled.sqf" и "onPlayerRespawn.sqf" сделать удаление и создание точки. Эти скрипты точно выполняются при смерти и возрождении соответственно.

Вот что в мануале:

onPlayerKilled.sqf

(first 2 params are the same as are passed into

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

event handler) [<oldUnit>,<killer>,<respawn>,<respawnDelay>]

Пишу player в скрипте:
player sideChat " I'm dead!";
И при смерите выводится всё, но операции с точками возрождения не хотят работать. Видимо как-то по особенному нужно прописывать?


Сообщение отредактировал Safkon: 12 December 2014 - 20:11

  • 0

#16 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 12 December 2014 - 20:38

Я бы сделал через эвент хэндлер:

if (isServer) then
{
  _eh = com1 addMPEventHandler ["MPRespawn",
                                 {
                                   if (isServer) then
                                   {
                                     comRespawn call BIS_fnc_removeRespawnPosition;
                                     com1 = _this select 0;
                                     comRespawn = [west, com1] call BIS_fnc_addRespawnPosition;
                                   };
                                 }
                               ];
};

Тогда каждый раз при респавне самого командира, переменной com1 будет присваиваться воскресший командир, а точка респавна пересоздаваться.

Вообще есть какие-то жалобы на вики, будто бы MPRespawn на сервере не выполняется. Но я сейчас проверял, вроде работает.

 

--- EDIT ---

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


Сообщение отредактировал hipp0cat: 12 December 2014 - 22:23

  • 0

#17 OFFLINE   Safkon

Safkon

    Рядовой

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

Отправлено 13 December 2014 - 00:44

Я бы сделал через эвент хэндлер:

if (isServer) then
{
  _eh = com1 addMPEventHandler ["MPRespawn",
                                 {
                                   if (isServer) then
                                   {
                                     comRespawn call BIS_fnc_removeRespawnPosition;
                                     com1 = _this select 0;
                                     comRespawn = [west, com1] call BIS_fnc_addRespawnPosition;
                                   };
                                 }
                               ];
};

Тогда каждый раз при респавне самого командира, переменной com1 будет присваиваться воскресший командир, а точка респавна пересоздаваться.

Вообще есть какие-то жалобы на вики, будто бы MPRespawn на сервере не выполняется. Но я сейчас проверял, вроде работает.

 

--- EDIT ---

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

Так... ну вроде разобрался. В "onPlayerRespawn.sqf" надо добавить строку myRsp = [east, player] call BIS_fnc_addRespawnPosition;
Это позволяет респаться рядом с игроком. Для того, что я хотел, этого хватило. Надо только переделать под командира группы.


  • 0

#18 OFFLINE   hipp0cat

hipp0cat

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Отряд:OSA

Отправлено 13 December 2014 - 01:06

Не все так просто. OnPlayerRespawn.sqf выполняется на компьютере каждого респящегося игрока. Если за командира играет бот, то при его респавне ничего не произойдет. Я пару часов голову ломаю, до сих пор не придумал нормальный способ это сделать, чтобы все нормально работало при любых условиях.

--- EDIT ---

Ничего толкового не придумал. Попробуйте так:

if (isServer) then
{
  _eh = com1 addMPEventHandler ["MPRespawn",
                                 {
                                     comRespawn call BIS_fnc_removeRespawnPosition;
                                     comRespawn = [east, (_this select 0)] call BIS_fnc_addRespawnPosition;
                                 }
                               ];
};

В принципе, то же самое, что и я выше писал, только без проверки на сервер внутри эвента. Проблема здесь в том, что это будет выполняться на компьютере каждого игрока, подключенного к серверу, то есть все игроки одновременно будут пересоздавать общую точку респа. Это потенциально может создать проблемы. Пытался сообразить, как этого избежать, но ничего в голову не идет. Также, вероятно, не заработает на не выделенном сервере с одним игроком-хостом, хотя я уже ни в чем не уверен.


Сообщение отредактировал hipp0cat: 13 December 2014 - 01:41

  • 0




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