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


Фотография

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

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

#1401 OFFLINE   Sterben_TOP

Sterben_TOP

    Рядовой

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

Отправлено 04 March 2019 - 00:01

class open
            {
				displayNameDefault = "<img image='\A3\Ui_f\data\IGUI\Cfg\Actions\open_door_ca.paa' size='2.5' />";
                displayName = "$STR_Open_germo_door";
				priority = 0.4;
                position = "pos_door";
                radius = 6;
                onlyForplayer = "false";
                condition = "this animationPhase ""door2_01"" < 0.5; this animationPhase ""door2_02"" < 0.5";
                statement = "this animate [""door2_01"",1.95]; this animate [""Vault_door2_02"",-4.5]";
            };
            class close
            {
				displayNameDefault = "<img image='\A3\Ui_f\data\IGUI\Cfg\Actions\open_door_ca.paa' size='2.5' />";
                displayName = "$STR_Close_germo_door";
				priority = 0.4;
                position = "pos_door";
                radius = 6;
                onlyForplayer = "false";
                condition = "this animationPhase ""door2_02"" > 0.5; this animationPhase ""door2_01"" < 0.5";
                statement = "this animate [""door2_02"",0]; this animate [""Vault_door2_01"",0]";
            };

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


Сообщение отредактировал Sterben_TOP: 04 March 2019 - 00:02

  • 0

#1402 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 04 March 2019 - 18:56

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


  • 0

#1403 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 04 March 2019 - 19:19

zlt_lockInvSlots = {
    waitUntil {!(isNull (findDisplay 602))};
    while {!(isNull (findDisplay 602))} do {
		// Какой смысл вызывать код в данном цикле каждую 1 тысячную секунды.
		// Данная функция вызывается только когда игрок открывает инвентарь, и завершает работу по закрытии инвентаря.
		// Код в цикле достаточно вызвать один раз, что бы блокировать контроли.
		// И по факту, можно завершать работу функции не дожидаясь закрытия инвентаря.
       ctrlEnable [6331, false];  
       ctrlEnable [6381, false]; // vest
       ctrlEnable [6240, false]; // headgear
       sleep 0.001;
    };   
};  

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

 

А вы можете написать этот хендлер, чтобы мы пользовались правильным вариантом?


  • 0

#1404 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 05 March 2019 - 18:23

zlt_lockInvSlots = {
    waitUntil {!(isNull (findDisplay 602))};
    ctrlEnable [6331, false];  
    ctrlEnable [6381, false]; // vest
    ctrlEnable [6240, false]; // headgear  
};  

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

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


Сообщение отредактировал SteelRat: 05 March 2019 - 18:27

  • 0

#1405 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 05 March 2019 - 18:35

ЗЫ

Вообще, по мне, подобные вещи желательно реализовывать на уровне конфига самого дисплея инвентаря, добавлением обработчиков событий контролам инвентаря.


  • 0

#1406 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 05 March 2019 - 19:12

SteelRat, если униформа/разгрузка/рюкзак уже есть, то только перетаскиванием, через ПКМ он будет пытаться внутрь контейнера засунуть
  • 0

#1407 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 06 March 2019 - 02:53

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

 

Работает, спасибо. Форма и броник переносится кликом мышки на тело игрока, но скрипт возвращает твою "первоначальную" форму и броник на тебя обратно.


  • 0

#1408 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 06 March 2019 - 18:16

 

Форма и броник переносится кликом мышки на тело игрока, но скрипт возвращает твою "первоначальную" форму и броник на тебя обратно.

 

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

 

 

но скрипт возвращает твою "первоначальную" форму и броник на тебя обратно.

Это эффект работы второй функции которая вызывается каждые 1.5 сек.

По сути этот код, как я и предлагал выше, было бы разумно, и красивее, оформить как хандлер, игрок что то подобрал, вызывается данная функция, то есть, нет смысла её крутить постоянно.


Сообщение отредактировал SteelRat: 06 March 2019 - 18:19

  • 0

#1409 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 06 March 2019 - 18:27

ЗЫ

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

 

Это во всяком случае оставит игроку нормальную возможность взаимодействовать с инвентарём.


Сообщение отредактировал SteelRat: 06 March 2019 - 18:29

  • 0

#1410 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 17 March 2019 - 01:05

еще вопрос. Подскажите пожалуйста, кто в курсе.  В ванилки есть автоматические "беспилотные" статические пулеметы. Как сделать его при появлении на карте активным? (типа уже с ИИ). Если взять простой статичный пулемет, то все понятно. MoveIn все решает. а как быть с этими "беспилотниками"?


  • 0

#1411 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 17 March 2019 - 01:23

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


  • 1

#1412 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 17 March 2019 - 17:36

SteelRat,

 

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

    _obj = ["B_GMG_01_A_F",_center,[-18.875,-17.875,6.25],_rotation,225] call _fnc_createObject;
    createVehicleCrew _obj; 

команда createVehicleCrew  заполняет его. как задать ему сторону? т к у красных нет такой статики по дефолту , хотел поменять ему просто принадлежность к стороне. Как применить сюда команду side  подскажите. В миссии сторона противника называется переменной (если я правильно называю)  A3E_VAR_Side_Opfor


  • 0

#1413 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 March 2019 - 17:41

как задать ему сторону?

Самому создать юнитов и посадить их
  • 0

#1414 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 17 March 2019 - 20:43

тогда

 

 

как задать ему сторону?

Самому создать юнитов и посадить их

 

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

 

вот так в миссии создается ручной статичный гранатомет с ботом и с привязкой к стороне

	_gun = selectRandom _staticWeaponClasses;
	_obj = [_gun,_center,[3.75,-1.625,0],_rotation,90] call _fnc_createObject;
	[_obj,A3E_VAR_Side_Opfor] spawn A3E_fnc_AddStaticGunner;

если в этом списке _staticWeaponClasses  будет беспилотный гранаиомет, то бот просто за него сядет, но "не в него"


Сообщение отредактировал TopDen: 17 March 2019 - 20:47

  • 0

#1415 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 17 March 2019 - 21:59

Создать руками класс не видимого бота, нужной стороны, и посадить его, в турель. Найти класс ганера можете в конфиге самого беспилотника.

 

Именно от туда эта команда

createVehicleCrew _obj;

и берёт того кого сажать по местам.

 

ЗЫ

Для всех сторон есть классы не видимых ботов.

 

ЗЫ2

Для большей ясности

 

если в этом списке _staticWeaponClasses  будет беспилотный гранаиомет, то бот просто за него сядет, но "не в него"

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

 

ЗЫ_3

Поехали дальше.

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


Сообщение отредактировал SteelRat: 17 March 2019 - 22:13

  • 0

#1416 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 17 March 2019 - 22:34


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

Можно выдать умение

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

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


  • 0

#1417 OFFLINE   JaProCar

JaProCar

    Рядовой

  • Пользователи
  • 3 сообщений
  • Откуда:Мухосранск
  • Отряд:Призраки

Отправлено 25 June 2019 - 21:18

Уважаемые скриптеры можете дать скрипт на загрузку/выгрузку транспорта из самолёта ботами. Пожалуйста!
  • 0

#1418 OFFLINE   lopster102

lopster102

    Ст.сержант

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

Отправлено 24 July 2019 - 23:19

Уважаемые скриптеры можете дать скрипт на загрузку/выгрузку транспорта из самолёта ботами. Пожалуйста!

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

_crew = [];

_crew = crew _plane;

 

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

можно простой фор_ич использовать

 

{

_x = ваш юнит:

_x сделайте что нибудь с ним 

}froreach-_crew


Сообщение отредактировал lopster102: 24 July 2019 - 23:23

  • 0

#1419 OFFLINE   dos130

dos130

    Рядовой

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

Отправлено 12 August 2019 - 00:36

Вызываю дисплей
500 cutRsc ["TestDisp","PLAIN"];
_ui = uiNameSpace getVariable "TestDisp";
_text = _ui displayCtrl 3604;
_icon = _ui displayCtrl 3605;

Как его потом удалить или спрятать? 


  • 0

#1420 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 August 2019 - 02:15

dos130,
 

500 cutRsc ["TestDisp","PLAIN"];
_ui = uiNameSpace getVariable "TestDisp";
_text = _ui displayCtrl 3604;
_icon = _ui displayCtrl 3605;
_ui closeDisplay 1; 

  • 1




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