|
|
Модератор форума: СМЕРШ |
Форум РЕДАКТОР - ArmA 1 Основное Изучение RscDisplayGear с целью кастомизации |
Изучение RscDisplayGear с целью кастомизации |
› Пятница
› 01.05.2009
› 14:44
› Сообщение #
Цель -- закостомайзить вид и поведение RscDisplayGear. Т.е. изменить вид и возможно добавить всякие ГПР-лайк "карманы", рюкзаки (как в асе) и т.д.
Возможные решения. 1) Подменять своим диалогом, те, оригинальный закрывать, создавать свой, работу имитировать скриптами. Проблема: невозможно точно определить ящик с которым идет работа. 2) Расширять описание диалога RscDisplayGear в конфиге, патчить его аддоном. Обвешивать это дело скриптами (в дополнение к нативной функциональности) Делимся различными примерами исследования RscDisplayGear, идеями и т.д. В аттаче миссия которая на живом RscDisplayGear отключает контрол вывода описания оружия. Вместо него (в качестве эксперимента) выводит hint с описанием которое берется из конфига. Прикрепления:
RscDisplayGear..rar
(1.5 Kb)
|
› Пятница
› 01.05.2009
› 22:48
› Сообщение #
Вопрос довольно объёмный, будем изобретать обходной маневр по частям.
с стандартным диалогом сделать чтото сложно (ели только конфиг переписать) поэтому будем делать свой. Этап первый: избавиться от стандартного диалога. Определить ящик. Создаём массив начального наполнения ящика, можно несколько для каждого свой _Heap = [["AK74",10],["AKS74PSO",10],["G36A",10],["RPG7V",10],["PK",10], Заполняем ящики предворительно дав им имена (так проще) {_x setVariable ["Heap_Box",_Heap]} forEach [Wb0,Wb1,Wb2,Wb3] Теперь запускаем цикл который будет дожидаться пока вы незаглянете в Бокс, While {true} do { Тут главный элемент , переменная "Heap_Box" . одно имя для всех ящиков значительно упрощает скрипт. Прикрепления:
Deffa.Intro.rar
(1.2 Kb)
Сообщение отредактировал Slon - Пятница, 01.05.2009, 23:08
|
› Воскресенье
› 03.05.2009
› 04:46
› Сообщение #
Покопал я внутренности асе. Ребята юзают именно вариант 2). И к слову "прокси-бот-забиральщик оружия" (про которого в аське говорил) тоже используется.
Перекидывание оружия из ящика в юнита и обратно -- нативное (то есть это делает сама игра). В рюкзак предметы можно класть только из юнита, именно по причине невозможности определить ящик с которым идет работа (очевидно что это не всегда самый ближний ящик). Некоторые решения убили, но оправданием авторам может служить то что иногда это единственное возможное решение. Например юнит с которым идет работа (это не всегда сам игрок, но также и его подчиненные) определяется парсингом текста на окошке, типа "Снаряжение: (4 Джон Маккейн)". Вот этот Маккейн ищется среди подчиненных игрока. Соответственно если воевать отрядом Васей Пупиных то рюкзаками они пользоваться не смогут. Я еще не докопал как хранятся предметы в рюкзаке. Но судя потому что полуотстрелянные магазины в рюкзак не кладутся, это не бот и не ящик. @Slon |
› Воскресенье
› 03.05.2009
› 11:30
› Сообщение #
Вопрос много сложней чем показалось в начале.
Притом что содержимое ящиков, техники, магазинов системе известны, получить эту информацию невозможно. Дублировать работу системы наверно нет смысла. Что касается "Рюкзака", то он работает с дополнительным скриптом который полностью доступен. Нечто похожее я использовал для пушек D30 & M119 чтобы сделать два типа снарядов. |
› Воскресенье
› 03.05.2009
› 15:49
› Сообщение #
Quote Для того чтобы хранить частично отстреленые магазины - информацию о колве патронов сохранять для используемого магазина при каждом выстреле и придётся вешать на каждого бота массив (магазины,% использования) Ок, допустим, но как добавить полуотстрелянный магазин юниту? Вопчем проверка на количество патронов в магазине, происходит так: Вопчем изврат тот еще. и все это плохо совместимо с другими аддонами. Сообщение отредактировал Denisko-Redisko - Воскресенье, 03.05.2009, 16:06
|
› Воскресенье
› 03.05.2009
› 17:57
› Сообщение #
Способ сделать магазин неполным есть, но это кошмарный способ.
есть такая команда _Ob setVehicleAmmo _nm _Ob - объект, _nm - %заполнения (0 до 1) Действует сразу на все магазины объекта. Придётся делать так - удалить все магазины (запомнить) , применить команду setVehicleAmmo, вернуть всё назад. О_как. Вобщем бред, но ничего больше в голову неидёт. |
› Понедельник
› 01.06.2009
› 17:13
› Сообщение #
вопчем как ни старался, а способа вычислить бота юзающего в данный момент окно RscDisplayGear не нашел. Сделал аналогично асе. тобишь парсингом текста на окошке. Парсинг текста не привязан к конкретному стрингтейблу как в асе, то есть хотя бы в чем-то понадежнее. Аттаченный примерчик чуть меняет вывод инфы об оружии, добавляя в него большую картинку выбранного предмета. Ну, по большому счету, это демо техники работы с RscDisplayGear, прока от него пока мало.
Прикрепления:
RscDisplayGearC.rar
(2.5 Kb)
Сообщение отредактировал Denisko-Redisko - Понедельник, 01.06.2009, 17:14
|
› Пятница
› 07.08.2009
› 16:02
› Сообщение #
После некоторого перерыва общения с редактором армы, почесал репку еще раз.
Собственно, все это мне надо ради некоего рпг-стайл геймплея (а ля Ксенус или Сталкер). И по большому счету синглплеерного. А раз есть возможность в режиме кампании получать содержимое любого ящика (объекта с классами TransportMagazines и TransportWeapons), то может действительно: 1) прочитать с окна юнита который юзает ящик. 2) закрыть родной RscDisplayGear. 4) найти ближайшие объекты с ненулевыми transportMaxMagazines и transportMaxWeapons, а также трупы. 3) открыть свой дисплей. Ведь по большому счету, до того как игрок увидел содержимое ящика, можно подсунуть ему любой ближайший (ну с учетом того куда смотрит юнит, если он игрок). Если это подчиненный бот то можно показать содержимое нескольких ближайших ящиков, (естно в отдельных соответствующих листбоксах), то есть играть будет удобнее. Сразу открываются куча вкусных возможностей: ЗЫ. ЗЗЫ. Вторую арму особо еще не глядел, но там в этом плане нисколько не лучше, команд читающих содержимое ящика вроде как не предвидится. ЗЗЗЫ. На всякий, пример того как можно прочитать содержимое ящика в режиме кампании я выкладывал тут: Сообщение отредактировал Denisko-Redisko - Пятница, 07.08.2009, 16:20
|
› Пятница
› 07.08.2009
› 22:13
› Сообщение #
Для сетевой, чтобы у каждого игрока был свой набор оружия, нестал ставить ящик на карте
сделал локальный для каждого игрока Object = type createVehicleLocal position другие игроки его невидят и немогут повредить, наполнение полностью подконтрольно. |
› Вторник
› 15.12.2009
› 16:31
› Сообщение #
В арма2 появилась очень полезная команда gearSlotData. При указании не правильного контрола она вываливает арму2 в окна, но если контрол -- один из слотов оружия (магазинов/предметов), она вернет название этого оружия. То есть жуткий код определения что в каком слоте хранится больше не нужен:
Code private "_dspl"; disableSerialization; waitUntil { _dspl = findDisplay 106; ! isNull _dspl; }; _dspl closeDisplay 1; _gear = cursorTarget; createGearDialog [player, _gear]; waitUntil { _dspl = findDisplay 106; ! isNull _dspl; }; hint str _gear; _eh = str { _self = _this select 0; _weaponName = gearSlotData _self; _conf = configFile >> _confSection >> _weaponName; _name = getText(_conf >> "displayName"); _desc = getText(_conf >> "Library" >> "libTextDesc"); _image = getText(_conf >> "picture"); hint parseText format[ '<t size="1.3" align="center" shadow="true" shadowColor="#000000">%1</t><br /><img image="%2" size="6" align="center" /><br />%3<br />%4', _name, _image, _desc ]; }; // set eh on weapons slots { _dspl displayCtrl _x ctrlAddEventHandler ["ButtonClick", "_confSection = 'CfgWeapons'; call" + _eh]; } foreach [107, 108, 130, 131, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145]; // set eh on magazines slots for "_i" from 109 to 129 do { _dspl displayCtrl _i ctrlAddEventHandler ["ButtonClick", "_confSection = 'CfgMagazines'; call" + _eh]; }; Вообще думал что команда добавлена по просьбе асе, так как им это нужнее всего, но странно, новый асе продолжает использовать старую эвристику, а код в целом стал еще больше и непролазнее. |
| |||
| |||
Чат сайта |