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


Фотография

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

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

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

#1381 OFFLINE   Schatten

Schatten

    Лейтенант

  • Пользователи
  • 1184 сообщений
  • Откуда:Минск, Беларусь

Отправлено 18 January 2019 - 01:08

TopDen, нет такой команды.

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

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

.


Сообщение отредактировал Schatten: 18 January 2019 - 01:13

  • 0

#1382 OFFLINE   TopDen

TopDen

    Прапорщик

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

Отправлено 18 January 2019 - 02:35

Schatten, Да, это в курсе.  Просто мне почему-то казалось, что без вмешательства в конфиг можно было бы изменить объем скриптово. Значит я сам ошибся. В любом случае спасибо за ответы. Еще вопрос. есть скрипт
 

while {true} do {
  _allHCs = entities "HeadlessClient_F";
  _allHPs = allPlayers - _allHCs;
  {
    _playerInvToCheck = _x;
    if ((lifeState _x) == "INCAPACITATED") then {
      _playerItems = items _x;
      if ("Medikit" in _playerItems) then {
        [_playerInvToCheck, false] remoteExec ["setUnconscious", 0];
        [ "#rev", 1, _playerInvToCheck ] remoteExecCall ["BIS_fnc_reviveOnState", _playerInvToCheck];
        _playerInvToCheck switchMove "PlayerStand";
        _playerInvToCheck removeItem "Medikit";
        [_playerInvToCheck] remoteExec ["dc_fnc_revivePlayer", 2];
      };
    };
  } forEach _allHPs;
};

в момент ранения игрока он отправляется в "300" и тут же ревайвается благодаря наличию аптечки у него, которая потом удаляется. Проблемка: Если у игрока 2 аптечки или 3, то они удалятся все. Как подправить этот код, чтобы удалялась только одна аптечка?


Сообщение отредактировал TopDen: 18 January 2019 - 10:35

  • 0

#1383 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 18 January 2019 - 11:50

TopDen, не использовать while
  • 1

#1384 OFFLINE   Schatten

Schatten

    Лейтенант

  • Пользователи
  • 1184 сообщений
  • Откуда:Минск, Беларусь

Отправлено 18 January 2019 - 11:51

TopDen, поскольку используется команда removeItem, то удаляется одна аптечка. Удаляются все скорее всего из-за того, что life state юнита меняется не сразу, а к тому времени когда он поменяется, все аптечки будут удалены. Для решения надо или переделать этот код, или перенести оживление на сторону юнитов. Второй вариант мне нравится больше.


Сообщение отредактировал Schatten: 18 January 2019 - 11:51

  • 1

#1385 OFFLINE   TopDen

TopDen

    Прапорщик

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

Отправлено 24 January 2019 - 02:48

Еще нубский вопрос: например мне нужно убрать из рюкзака игрока три медпакета. я могу написать
player removeItemFromBackpack "FirstAidKit";

player removeItemFromBackpack "FirstAidKit";

player removeItemFromBackpack "FirstAidKit";

три раза и все работает. Думаю можно написать это по другому. Помогите с образцом, пожалуйста.


Сообщение отредактировал TopDen: 24 January 2019 - 02:56

  • 0

#1386 OFFLINE   Schatten

Schatten

    Лейтенант

  • Пользователи
  • 1184 сообщений
  • Откуда:Минск, Беларусь

Отправлено 24 January 2019 - 11:48

TopDen,

for "_i" from 1 to 3 do {
    player removeItemFromBackpack "FirstAidKit";
};

  • 1

#1387 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 24 January 2019 - 11:55

TopDen, Google >> циклы
  • 1

#1388 OFFLINE   TopDen

TopDen

    Прапорщик

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

Отправлено 01 February 2019 - 13:57

парни, подскажите пож-ста команду (если есть) как запретить работу снаряжения у убитого бота, чтобы нельзя было обыскать и снять с него снаряжение?


  • 0

#1389 OFFLINE   Schatten

Schatten

    Лейтенант

  • Пользователи
  • 1184 сообщений
  • Откуда:Минск, Беларусь

Отправлено 01 February 2019 - 15:13

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

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

 -- не поможет, если что-то взято в обход инвентаря.

Возможно, обработка события

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

является более лучшим решением.


Сообщение отредактировал Schatten: 01 February 2019 - 15:19

  • 0

#1390 OFFLINE   TopDen

TopDen

    Прапорщик

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

Отправлено 01 February 2019 - 18:11

Schatten, благодарю.


  • 0

#1391 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 01 February 2019 - 21:47

TopDen,
inGameUISetEventHandler [
    "Action",
    "
    params [""_target"", """", """", ""_action"", """", """", """", """", """", """", """"];
    
    if (_action in [""Gear"", ""Rearm"", ""TakeWeapon"", ""TakeMagazine"", ""TakeItem""]) then {
        if (((_target isKindOf ""Man"") && (!alive _target)) || (typeOf _target == ""WeaponHolderSimulated"")) then {
            true;
        } else {
            false;
        };
    } else {
        false;
    };
    "
];

player addEventHandler [
    "InventoryOpened",
    {
        params ["", "_container", ""];

        if (((_container isKindOf "Man") && (!alive _container)) || (typeOf _container == "WeaponHolderSimulated")) then {
            true;
        } else {
            false;
        };
    }
];
PS Но нужно учитывать работу модов, т. к. если эту штуку использует кто-то еще, то нужно будет объединять код.

Сообщение отредактировал vlad333000: 01 February 2019 - 22:01

  • 1

#1392 OFFLINE   Scully

Scully

    Рядовой

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

Отправлено 04 February 2019 - 00:28

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

while {primaryWeapon _unit == ""} do {
     _corp = (_unit nearObjects ["WeaponHolderSimulated", 50]) select 0;
     _corpContents = weaponCargo _corp;
     _Weapon = _corpContents select 0;
     _unit action ["TakeWeapon", _corp, _Weapon];

    sleep 1;
     _unit action ["rearm", _corp];
    sleep 3;
 };

Не работает, когда боту нечего подбирать, насколько я понял переменная _corp не создается и последующий код будет с ошибкой.  Т. е нужна проверка условия на "WeaponHolderSimulated", но я не знаю как это записать, подскажите пожалуйста нубасу как ее записать, если проблема в этом)

 


  • 0

#1393 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 04 February 2019 - 04:30

Scully, да вы сударь вообще не запаривались какими-либо проверками.
А что если рядом нет WeaponHolderSimulated? А что, если рядом есть только GroundWeaponHolder? А что, если выбранный вами контейнер не содержит оружия? А что, если выбранное ваше оружие не является основным?
Идем по порядку вопросов, заданных мной:
1.

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


2.

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

или использовать родительский класс объекта для поиска
3. Как и с первым ответом
4. Что-то посложнее, комбинируя проверку и второстепенного оружия
В добавок:
1. Насколько я помню, TaleWeapon и Rearm, срабатывают на любой дистанции. Вы же нехотите, что бы ваш бот взял винтовку, лежащую от него в 20 метрах? Поэтому "попросите" его подойти и только потом выполняйте действия.
2.

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


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

Сообщение отредактировал vlad333000: 04 February 2019 - 04:32

  • 0

#1394 OFFLINE   Scully

Scully

    Рядовой

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

Отправлено 04 February 2019 - 12:59

vlad333000,

Ага, поторопился, спасибо за разъяснение. сейчас немного запарился и записал так:

 

_hls2 = nearestObject [bot, "WeaponHolderSimulated"];


while {primaryWeapon bot == "" && handgunWeapon bot == "" } do {
   sleep 2;
   bot doMove (getPosATL _hls2); 
      waitUntil {bot distance _hls2 < 6};
           _box = (bot nearObjects ["WeaponHolderSimulated", 6]) select 0; 
          _boxContents = weaponCargo _box; 
          _weapon = _boxContents select 0; 
          bot action ["TakeWeapon", _box, _weapon];
	  sleep 2;
	  bot action ["rearm", _box];
   sleep 5;
}:

Все еще есть проблема с WeaponHolderSimulated

А что если рядом нет WeaponHolderSimulated? А что, если рядом есть только GroundWeaponHolder?

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


Сообщение отредактировал Scully: 04 February 2019 - 13:17

  • 0

#1395 OFFLINE   Scully

Scully

    Рядовой

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

Отправлено 04 February 2019 - 14:27

разобрался, с условием isNull вроде нормально теперь


  • 0




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