Jump to content


Photo

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

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

  • Please log in to reply
1486 replies to this topic

#1401 OFFLINE   Sterben_TOP

Sterben_TOP

    Рядовой

  • Пользователи
  • 1 posts

Posted 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]";
            };

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


Edited by Sterben_TOP, 04 March 2019 - 00:02.

  • 0

#1402 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 04 March 2019 - 18:56

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


  • 0

#1403 OFFLINE   TopDen

TopDen

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

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

Posted 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 posts
  • Откуда:РФ

Posted 05 March 2019 - 18:23

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

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

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


Edited by SteelRat, 05 March 2019 - 18:27.

  • 0

#1405 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 05 March 2019 - 18:35

ЗЫ

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


  • 0

#1406 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 05 March 2019 - 19:12

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

#1407 OFFLINE   TopDen

TopDen

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

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

Posted 06 March 2019 - 02:53

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

 

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


  • 0

#1408 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 06 March 2019 - 18:16

 

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

 

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

 

 

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

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

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


Edited by SteelRat, 06 March 2019 - 18:19.

  • 0

#1409 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 06 March 2019 - 18:27

ЗЫ

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

 

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


Edited by SteelRat, 06 March 2019 - 18:29.

  • 0

#1410 OFFLINE   TopDen

TopDen

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

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

Posted 17 March 2019 - 01:05

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


  • 0

#1411 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 17 March 2019 - 01:23

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


  • 1

#1412 OFFLINE   TopDen

TopDen

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

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

Posted 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 posts
  • Откуда:Кострома

Posted 17 March 2019 - 17:41

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

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

#1414 OFFLINE   TopDen

TopDen

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

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

Posted 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  будет беспилотный гранаиомет, то бот просто за него сядет, но "не в него"


Edited by TopDen, 17 March 2019 - 20:47.

  • 0

#1415 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 17 March 2019 - 21:59

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

 

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

createVehicleCrew _obj;

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

 

ЗЫ

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

 

ЗЫ2

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

 

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

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

 

ЗЫ_3

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

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


Edited by SteelRat, 17 March 2019 - 22:13.

  • 0

#1416 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 17 March 2019 - 22:34


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

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

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

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


  • 0

#1417 OFFLINE   JaProCar

JaProCar

    Рядовой

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

Posted 25 June 2019 - 21:18

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

#1418 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 24 July 2019 - 23:19

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

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

_crew = [];

_crew = crew _plane;

 

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

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

 

{

_x = ваш юнит:

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

}froreach-_crew


Edited by lopster102, 24 July 2019 - 23:23.

  • 0

#1419 OFFLINE   dos130

dos130

    Рядовой

  • Пользователи
  • 17 posts
  • Откуда:Murmansk

Posted 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 posts
  • Откуда:Донецк

Posted 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




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