Jump to content


Photo

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

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

  • Please log in to reply
1486 replies to this topic

#1161 OFFLINE   probel

probel

    Рядовой

  • Пользователи
  • 3 posts
  • Откуда:горячий ключ

Posted 26 February 2018 - 03:55

Здравия всем! как обозначить группу, что бы поставить вэйпойнт на ее позицию? 


  • 0

#1162 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 26 February 2018 - 04:07

Обозначать надо юнита из группы, так как группа это не объект, а список объектов
Потом, когда обозначили юнита считываете с него координаты командой getpos
И ставите на эти координаты вейпоинт

Edited by ReXcOr, 26 February 2018 - 04:08.

  • 0

#1163 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 26 February 2018 - 09:44

Где то была создана группа

_side    =    "WEST";
_group    =    createGroup _side;

....
Если есть необходимость обращаться к группе, или ее юнитам, группу надо сохранить куда то(можно с доп параметрами)

_groupID    =    ....;    //    Создаем ИД группы - как дело десятое
GROUPS set [(count GROUPS), [_group, _groupID]];

....
Где то был создан юнит

_unit    =    _group createUnit [_side, [0,0,0], [], 1, "NONE"];

....
Где юнит был добавлен в группу

[_unit] joinSilent _group;

....
Ищем группу которая нам необходима

_findID    =    ...;//ИД который нам нужен
{
    if ( _findID == (_x select 1) ) exitWith
        {_group    =    (_x select 0);};
} forEach GROUPS;
if !(isNil _group) then
    {
        _units    =    units _group;
        {
            _pos    =    getPos _x;
            //    Отмечаем позишн каждого юнита на карте(можно только лидера, или только первого юнита... в общем дальше на свое усмотрение)
        } forEach _units;
    };

Edited by NoNameUltima, 26 February 2018 - 09:46.

  • 0

#1164 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 26 February 2018 - 17:46

 

так как группа это не объект, а список объектов

 

Не верное утверждение, таки объект.

0 = 0 spawn {
	sleep 3;
	systemChat "Group player set variable ...";
	(group player) setVariable ["GroupVar_0", "Group variable 0"];
	systemChat format ["Result: %1", (group player) getVariable ["GroupVar_0", "NONE"]];
};

Attached File  screenday_01.jpg   12.15KB   0 downloads


  • 0

#1165 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 26 February 2018 - 18:45

Вот это поворот)))
Но на счёт можно ли дернуть с неё координаты я не уверен, хотя после вашей демонстрации, у меня такое ощущение, что может и координаты она имеет)))
  • 0

#1166 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 26 February 2018 - 20:19


таки объект

Да не совсем.


дернуть с неё координаты

Конечно нет.

То что для групп есть базовый класс и используется ООП, не означает, что методы и свойства будут такие же как у объекта - игрок, или подобных.


  • 0

#1167 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 26 February 2018 - 20:43

 


таки объект

Да не совсем.

 

 


дернуть с неё координаты

Конечно нет.

То что для групп есть базовый класс и используется ООП, не означает, что методы и свойства будут такие же как у объекта - игрок, или подобных.

 

Это не отменяет того что это объект, пусть и своего типа, и тем не менее объект. И собственно кто говорил что объект типа group то же самое что объект типа player?

Ни хто!!!

 

ЗЫ

По факту выходит так, и не только в арме, но и в других движках, масса игровых объектов, разных типов, наследуют от некого одного базового класса-объекта именуемого, например Object, или GameObject, как вариант. Так что группа, это объект, который хранит в себе некий набор данных и методов, к которым вы обращаетесь через интерфейс скриптовых команд.


Edited by SteelRat, 26 February 2018 - 20:48.

  • 0

#1168 OFFLINE   probel

probel

    Рядовой

  • Пользователи
  • 3 posts
  • Откуда:горячий ключ

Posted 26 February 2018 - 23:37

Моя тема возникла из следующего сценария: _spawn_mob = ["marker_0" ,"marker_2", "marker_3", "marker_4", "marker_5", "marker_6", "marker_7", "marker_8"]  call BIS_fnc_selectRandom; _pl = createGroup resistance; _tr = createGroup resistance; _merc = createGroup resistance;  "I_MU_mercs_M_F" createUnit [getmarkerPos _spawn_mob, _pl, "addSwitchableUnit this"]; _her01 = group civ_0 createUnit ["I_MU_mercs_helipilot_F", getMarkerPos _spawn_mob, [], 5, "FORM"]; [_her01] join _tr; _her02 = group civ_0 createUnit ["I_MU_mercs_sniper_F", getMarkerPos _spawn_mob, [], 5, "FORM"]; [_her02] join _tr; _mob = createVehicle["MU_MERC_HummingBird", getMarkerPos _spawn_mob, [], 5, "fly"]; _mob setpos [getpos _mob select 0, getpos _mob select 1, (getpos _mob select 2) + 200]; _her01 moveindriver _mob; _her02 moveincargo _mob; {_x assignasCargo _mob} forEach units _pl; {_x moveInCargo _mob} forEach units _pl;  _mob_wp = _tr addWaypoint [getPos ????, 150]; _mob_wp setWaypointType "TR UNLOAD"; _mob_wp setWaypointSpeed "FULL"; _mob_wp setWaypointBehaviour "COMBAT"; _mob_wp01 = _tr addWaypoint[getPos _spawn_mob, 5]; _mob_wp01 setWaypointType "MOVE"; _mob_wp01 setWaypointSpeed "FULL"; _mob_wp01 setWaypointBehaviour "COMBAT"; . Вертолет (_mob) наемников появляется на краю карты , группа(_tr) -пилот и снайпер, должны доставить бойца (pl) к месту дислокации группы (_merc). Где то когда то видел вариант в одну строчку, где создавалась некая переменная на позицию группы. Это экшен блок fcm/ Сечас буду аналайзить вышеприведенное.


  • 0

#1169 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 26 February 2018 - 23:44

probel, выделение кода в блок кода? Переходы на новую строчку? Нет?

Где то когда то видел вариант в одну строчку, где создавалась некая переменная на позицию группы

Ну самый простой способ - лидер группы:
getPos leader myGroup;

  • 0

#1170 OFFLINE   probel

probel

    Рядовой

  • Пользователи
  • 3 posts
  • Откуда:горячий ключ

Posted 27 February 2018 - 01:14

probel, выделение кода в блок кода? Переходы на новую строчку? Нет?

Где то когда то видел вариант в одну строчку, где создавалась некая переменная на позицию группы

Ну самый простой способ - лидер группы:
getPos leader myGroup;

да, видимо это оптимально


  • 0

#1171 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 27 February 2018 - 13:26


Ну самый простой способ - лидер группы

А если лидера нет?)


  • 0

#1172 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 27 February 2018 - 13:36

NoNameUltima, ну а че давайте пойдем дальше: а если нету группы? а если какой-то другой скрипт переопределил переменную? а если арма самоудалилась? ...
В таких сценариях подразумевается, что пока это используется - это будет существовать
  • 0

#1173 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 27 February 2018 - 15:35

Оооррррр)))))
  • 0

#1174 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 27 February 2018 - 16:56

 


Ну самый простой способ - лидер группы

А если лидера нет?)

 

 

Стыдно признаться)

А разве такое возможно? Если есть группа, то есть лидер, даже если вы сами его не назначали. Простой пример, если в процессе миссии погибает лидер группы, движок автоматически назначает лидером самого звёзного и скилового.

Или я несведущь в этом плане?


  • 0

#1175 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 27 February 2018 - 19:08


ну а че давайте пойдем дальше

Да это то понятно, что за своими скриптами и следить надо. Но в данном случае - имхо правильней взять первого юнита в группе(хз что там могло быть с лидером).

А вообще, как то так:

if !(isNil _group) then
    {
        _leader    =    (leader _group);
        if !(isNil "_leader") then
            {
                if ( _leader != ObjNull ) then
                    {
                        if ( alive _leader ) then
                            {_pos    =    (getPos _leader);};
                    };
            };
        if (isNil "_pos") then
            {
                _units    =    units _group;
                if ( (count _units) > 0 ) then
                    {
                        {
                            if (alive _x) then
                                {_pos    =    (getPos _x);};
                            if !(isNil "_pos") exitWith {};
                        } forEach _units;
                    };
            };
    };
if !(isNil "_pos") then
    {
        //    Ставим маркер на позицию группы
    };

Edited by NoNameUltima, 27 February 2018 - 19:10.

  • 0

#1176 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 27 February 2018 - 19:14


А разве такое возможно?

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


Edited by NoNameUltima, 27 February 2018 - 19:15.

  • 0

#1177 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 27 February 2018 - 21:31

 

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

 

 

Я не много не о том.

Я про то, что  пока в группе есть хоть одно тело, в группе будет лидер.

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


Edited by SteelRat, 27 February 2018 - 21:42.

  • 0

#1178 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 28 February 2018 - 03:13

NoNameUltima, извините за вопрос, но вы понимаете что вы написали? (Про код)
Зачем проверка локальной переменной на nil сразу после ее инициализации 100% не nil значением?
Где инициализация локальной переменной _group?
Вы зачем сравниваете objNull операторами ==/!=? Вы знаете особенности значений nil и null?
Зачем проверка массива через count когда forEach знает что такое пустой массив?
alive objNull == false - проверка на isNull перед этим не имеет смысла
Вы знаете что такое область видимости?
-_- ... Лучше подредактируйте тот пост, что бы новички не видели его и не ломали часами голову почему не работает


Да. Если все в группе мертвы(группа будет пустой)

Я вам открою секрет у любой группы есть лидер, даже если он мертв, вся группа мертва или еще что-нибудь с ней стряслось. А если группа была удалена, то "лидер" эквивалентен objNull, а с objNull все команды нормально работают и их поведение однозначно определено

Edited by vlad333000, 28 February 2018 - 03:30.

  • 1

#1179 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 28 February 2018 - 03:36


Где инициализация локальной переменной _group?

тут

https://arma3.ru/for...ptingu/?p=79002


Зачем проверка локальной переменной на nil сразу после ее инициализации 100% не nil значением?

Если группа пустая - переменной не будет. - Будет nil

Если лидера нет будет - objNull


Зачем проверка массива через count когда forEach знает что такое пустой массив?

да. это лишнее...



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

 

попробуй сделать такой финт -

_side    =    "WEST";
_group    =    createGroup _side;

а потом попробуй найди лидера у данной группы.


  • 0

#1180 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 28 February 2018 - 03:53

попробуй сделать такой финт -

_side    =    "WEST";
_group    =    createGroup _side;
а потом попробуй найди лидера у данной группы.
А теперь нажали на

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

и сказали строчку на которой вы нашли синтаксис команды соответствующий:
<group> = createGroup <string>;

p
Если группа пустая - переменной не будет. - Будет nil
Если лидера нет будет - objNull

Пусстаня группа эквивалентно grpNull не эквивалентно nil
У вас хоть одна команда сломалась при использовании null (не nil) в качестве операнда? (null это лишь особая форма объекта, но вполне себе работающая)
  • 0




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