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


Фотография

Вопрос по назначению объекта


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

#1 OFFLINE   Индеец

Индеец

    Рядовой

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

Отправлено 28 April 2019 - 00:58

Как определить, что объект принадлежит к субкатегории "Артиллерия" в редакторе?


  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 28 April 2019 - 03:22

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


  • 0

#3 OFFLINE   Индеец

Индеец

    Рядовой

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

Отправлено 28 April 2019 - 21:47

Наваял:

private _cfgOriginal = 
"(
        (getNumber (_x >> 'scope') >= 2) 
        AND 
        (getText (_x >> 'editorSubcategory') isEqualTo 'EdSubcat_Artillery') 
)" 
configClasses (configFile >> "CfgVehicles");
 
private _vehicleOriginal = [];
{_vehicleOriginal pushBack configName _x} forEach _cfgOriginal;
 
// Возвращает все типы объектов артиллерии оригинальной Армы.
Как быть с модами? Кто подскажет?

  • 0

#4 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 28 April 2019 - 23:44

Индеец, для кода используйте кнопку "<>"

Как быть с модами? Кто подскажет?

Да никак, подход индивидуальный к каждому моду, если мододел не стал изобретать велосипед, то ваш код и на его объекты сработает, из рекомендаций:
Добавить через ИЛИ проверку vehicleClass (Deprecated, но старые и некоторые новые моды до сих пор использует это)
Заменить isEqualTo для сравнения имен категорий на ==, потому что первый чувствителен к регистру символов (а вам не известно в каком регистре написал мододел для своих объектов)
 

private _vehicleOriginal = [];
{_vehicleOriginal pushBack configName _x} forEach _cfgOriginal;

Будьте проще:
_data = _data apply { configName _x; };

Сообщение отредактировал vlad333000: 28 April 2019 - 23:45

  • 0

#5 OFFLINE   Индеец

Индеец

    Рядовой

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

Отправлено 29 April 2019 - 02:12

Возможно ли как-то обыграть displayName?


  • 0

#6 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 29 April 2019 - 03:36

Индеец, только для категорий (Или вы собираетесь иметь список со всеми названиями любой возможной техники?)
1. Нужен перевод на все языки, поддерживаемые игрой (Игрок может включить любой язык; выделенный сервер и безголовые клиенты всегда по-умолчанию включают английский язык)
2. Возможно, придумать несколько вариации названия (Если таковые имеются в разных языках)

PS В теории еще можно посмотреть на иерархию классов и, если вся артиллерия наследует от одного/пары классов, то использовать это условие, но проверять мне не хочется

Сообщение отредактировал vlad333000: 29 April 2019 - 03:39

  • 0

#7 OFFLINE   Индеец

Индеец

    Рядовой

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

Отправлено 30 April 2019 - 18:41

vlad333000, проверять не нужно: объект типа "Zamak MRL" имеет класс "I_Truck_02_MRL_F", который является дочерним от "Car", а объект типа "2S9 Sochor" имеет класс "O_MBT_02_arty_F" - потомок "Tank".

     Как я понял (возможно ошибочно), принадлежность типа (класса) объекта к субкатегории "Артиллерия" в редакторе определяется в записи конфигурации объекта:

private _object = имя объекта; // объект
private _type = typeOf _object; // класс объекта
private _Subcategory = getText (configFile >> "CfgVehicles" >> _type >> "editorSubcategory"); // субкатегория объекта

Для субкатегории "Артиллерия" в оригинальной ArmA 3 принято значение "EdSubcat_Artillery". T.е. если в конфиге объекта значение субкатегории ("editorSubctegory") указано "EdSubcat_Artillery", то движок игры будет рассматривать этот объект как объект из раздела  "Артиллерия". И не важно к каком дереву иерархии принадлежит класс объекта. Название субкатегории в редакторе, вероятно, указывается в  displayName, которое наверное уже и переводится на основные языки для видимости во вкладке редактора.

    Что касается модов, то значение субкатегории ("editorSubctegory") указывается мододелом произвольно. Но, в тексте названия слово "artillery" как правило присутствует. Во всяком случае для RHS это - "rhs_EdSubcat_artillery".

    Другими словами, если в названии субкатегории убрать лишние знаки и каждое полученное слово облечь в строку и эти слова объединить в массив (все эти вещи можно вытворить командой splitString), то в полученном массиве можно отыскать строку "Artillery" или "artillery".

private _text = _Subcategory splitString "_"; 

Для "EdSubcat_Artillery" - результат: _text = ["EdSubcat","Artillery"].

Для "rhs_EdSubcat_artillery" - результат: _text = ["rhs","EdSubcat","artillery"].

   

    Ну а теперь:

private _logic = (("Artillery" in _text) OR ("artillery" in _text));

Вот это _logic  и есть ответ на вопрос "Принадлежит ли объект к субкатегории "Артиллерия"? ". 


  • 0

#8 OFFLINE   Индеец

Индеец

    Рядовой

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

Отправлено 02 May 2019 - 02:42

Кстати, есть вариант для определения назначения объекта в виде функции Object call BIS_fnc_objectType. 

Возвращает массив данных в виде: ["категория", "тип"]. Например:

private _obj = myBMP;
myBMP call BIS_fnc_objectType; // результат: ["Vehicle","TrackedAPC"]

Варианты:

 

Soldier (Солдат)

  • AT
  • Civilian
  • Diver
  • Infantry
  • Medic
  • MG
  • Officer
  • Pilot
  • Sniper
  • SpecialForces
  • UAVPilot

Vehicle (Техника)

  • Car                   (авто)
  • Helicopter        (вертолет)
  • Motorcycle       (мотоцикл)
  • Plane               (самолет)
  • Ship                 (корабль)
  • StaticWeapon  (статическое оружие)
  • Submarine       (субмарина)
  • TrackedAPC    (БМП)
  • Tank                 (танк)
  • WheeledAPC   (БТР)

Logic (Логика)

  • Logic
  • Module

 

Object (Объект)

  • Ammobox (ящик с патронами)
  • Animal      (животное)
  • Backpack (рюкзак)
  • Camera    (камера)
  • Church     (церковь)
  • Effect       (эффект)
  • Fire          (огонь)
  • Flag         (флаг)
  • Helipad
  • House      (дом)
  • Marker     (маркер)
  • Mine         (мина)
  • Parachute
  • Seagull
  • Sound       (звук)
  • Target       (цель)
  • Thing        (вещь)
  • Trigger      (триггер)
  • UnknownObject (неизвестный объект)
  • VASI
  • Wreck (руины)

Правда этот вариант не предусматривает типа артиллерия.

 

     Есть еще один вариант.

В оригинальной Арме (без модов) принадлежность объекта к к-л субкатегории указывается в названии класса.

Например: I_MRAP_03_F. 

При разложении названия с помощью splitString "_" получаем массив: ["I","MRAP","03","F"].

В этом массиве второй элемент (select 1) имеет вид "MRAP" (mine resistant ambush protected) - миноустойчивый засадозащищенный (дословно).

     Для ("B_APC_Wheeled_01_cannon_F"  splitString "_") select 1;  APC (armoured personnel carrier) - бронированный перевозчик персонала 

     Для ("B_MBT_01_arty_F"  splitString "_") select 1;  MBT (main battle tank) - основной боевой танк.

     Для ("I_Truck_02_MRL_F"  splitString "_") select 1; Truck - грузовик.

Т.е. (class splitString "_") select 1 - указывает на название базы техники (бывает select 2)

А вот select 3 указывает уже на башню: для  ("B_MBT_01_arty_F"  splitString "_") select 3; - это "arty" (артиллерия).         

Для ("B_MBT_01_mrls_F"  splitString "_") select 3; - это "mrls" (Multiple Launch Rocket System) - РСЗО.


  • 0




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