Jump to content


Photo

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

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

  • Please log in to reply
1486 replies to this topic

#1141 OFFLINE   TopDen

TopDen

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

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

Posted 01 February 2018 - 16:03

в одной миссии есть команда:

player addAction ["<img image='med.jpg'/><t size=""1.25"" color=""#ff0000"">" + "  Вылечиться" + "</t>", "_this call A3E_fnc_HealAtBuilding;", [], 9, false, true, "", "call at_fnc_checkHealAtBuilding"];

когда подходишь к определенной технике (которая указана в др команде) у игрока появляется меню "вылечиться" на расстоянии 1-2м образно от техники. Если я ставлю такую команду в инит бота "bot1":
 

bot1 addAction ["<img image='med.jpg'/><t size=""1.25"" color=""#ff0000"">" + "  Вылечиться" + "</t>", "_this call A3E_fnc_HealAtBuilding;"];

то любой игрок видит эту команду наведясь на данного бота на расстоянии 10-15м образно. Как правильно написать, чтобы другие игроки не видели эту команду от бота вообще, но сам бот мог ее видеть сам для себя (бот -игрок)? Вообщем чтобы данная команда "вылечиться" была только у конкретного игрока\бота.


Edited by TopDen, 01 February 2018 - 16:05.

  • 0

#1142 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 01 February 2018 - 16:09

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

) вставить условие:
_this isEqualTo _target

  • 0

#1143 OFFLINE   lopster102

lopster102

    Ст.сержант

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

Posted 01 February 2018 - 19:21

ты можешь тупо накидывать только со своего компа сам себе этот акшен чтобы другие не видели она локальная команда

 

смысл накидывать всем остальным этот акшен если они им не будут пользоваться все равно

 

или как Влад  писал выше вот так в условиях

_UnknownPlayer addAction ["<img image='med.jpg'/><t size=""1.25"" color=""#ff0000"">" + "  Вылечиться" + "</t>", "_this call A3E_fnc_HealAtBuilding;", [], 9, false, true, "", "player == _target"];

но это не имеет смысла так делать потому что она локальная команда


Edited by lopster102, 01 February 2018 - 19:32.

  • 0

#1144 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 02 February 2018 - 22:28

Странное утверждение, - разве deleteVehicle пораждает поток? - вроде нет.
А если нет, то этот код выполняется в основном потоке.

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

Я уже спрашивал по поводу тестов - как они проводились?
Это не риторические были вопросы.
Напомню:
1. Откуда инфа, что нагрузка на сеть при удалении объектов возрастает настолько, что может положить соединение? - Я же писал, что реально длинный массив - вполне может. Но мы же про реалии - радиус 300 - ну сколько там объектов?
2. В контексте данной задачи, не имеет смысл удалять по 1 объекту, каждый раз создавая поток. Эдак мы докатимся до того, что в любых циклах, будем юзать такую конструкцию => синхронизация игроков с БД, синхронизация техники с БД, ... да вообще любые циклы, по данному утверждению должны все делать через spawn и waitUntil - отсюда мое утверждение,

Ну и в довесок - нагрузка на сеть и так постоянная - передача координат игроков, векторов их направления, координаты лута валяющегося на земле, и многое другое - с чего вдруг, удаление объекта (передача пары байт - ИД объекта+ пара байт - команда - удалить)будет нагружать сеть больше чем передача координат?

По ссылке которую ты оставил, пример с 1000 объектов, и использование spawn\waitUntil - но нет примера альтернативы, например - с использованием банальной задержки скажем после каждого 50того объекта. И в рамках данной задачи, - указан раздиус 300 - там не то, что 1000 объектов, там сотней то не пахнет - зачем же в таком ключе спавнить и ждать по каждой мелочи?

А я уже ответил.
Там разве говорится, что удаление объекта будет нагружать сеть больше создания? Нет. А может там говорится, что в любом (ну или почти в любом) цикле нужно создавать поток? Тоже нет.
От себя могу добавить, что, когда был "молодым и неопытным", сталкивался с появлением красных цепочек при создании/удалении объектов пачками.
 

Ну раз ты конкретное число просишь -
Основываясь на написании многопоточных приложений(хоть опыт и не богатый) в C\Delphi - для потока требуется задержка, дабы не сожрать весь проц. Как показала практика, - задержка менее 0.001 не имеет смысла. Отсюда => Для любого потока, минимум 0.001.
Большая величина, зависит от конкретной задачи.

Короче, я так и не увидел смысла использовать "железную" (sleep/uiSleep) задержку вместо "адаптивной" (spawn/waitUntil). Всякие "если", "когда будет нужно", "не имеет смысла", "зависит от задачи"... Задача изменится и придётся подгонять весь код.
 

вот так в условиях

_UnknownPlayer addAction ["<img image='med.jpg'/><t size=""1.25"" color=""#ff0000"">" + "  Вылечиться" + "</t>", "_this call A3E_fnc_HealAtBuilding;", [], 9, false, true, "", "player == _target"];

Если не ошибаюсь, у ботов player не определена.


  • 0

#1145 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 03 February 2018 - 19:00


Если не ошибаюсь, у ботов player не определена.

Кстати интересно, а что будет в player у ботов, если их будет HC создавать...


  • 0

#1146 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 03 February 2018 - 20:38

NoNameUltima, HC заходит за слот, игроком будет объект этого слота
  • 0

#1147 OFFLINE   TopDen

TopDen

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

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

Posted 04 February 2018 - 00:36

Спасибо. попробовал. не получилось. может что-то не так сделал или это команда вообще не расчитана на бота. т е менюшка не появляется вообще(


Edited by TopDen, 04 February 2018 - 00:37.

  • 0

#1148 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 04 February 2018 - 02:23

 


Если не ошибаюсь, у ботов player не определена.

Кстати интересно, а что будет в player у ботов, если их будет HC создавать...

 

с большой долей вероятности

objNull

и не важно где, безголовый или сервер.


Спасибо. попробовал. не получилось. может что-то не так сделал или это команда вообще не расчитана на бота. т е менюшка не появляется вообще(

а как она будет появляться если бот не игрок? Не находите?

Какой смысл давать экшен боту, которым не будет управлять игрок, и прописывать в проверку экшена игрок ли это, где логика?


  • 0

#1149 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 04 February 2018 - 02:35

ЗЫ

 

но сам бот мог ее видеть сам для себя (бот -игрок)? Вообщем чтобы данная команда "вылечиться" была только у конкретного игрока\бота.

И постарайтесь правильно ставить вопросы.

Под ботом, обычно имеют ввиду тело которое не управляется игроком.

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

Ну так вот устоялось).


  • 0

#1150 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 04 February 2018 - 17:29

Ребят, я тут сталкнулся с проблемой, что на высоте 100м, у игрока принудительно включается анимация полёта «парашютиста»
И я что-то не могу найти как это выключить( подскажите пожалуйста, если кто знает.
Или хотя бы в какую сторону копать?)
  • 0

#1151 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

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

Posted 05 February 2018 - 00:35

ReXcOr, Ну так копни в сторону анимаций... - как минимум по аддонам поиском - мб скрипт какой в арме работает на авто смену анимашки - по ИД анимашки и попробуй поискать в файлах.


  • 0

#1152 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 05 February 2018 - 01:17

Ребят, я тут сталкнулся с проблемой, что на высоте 100м, у игрока принудительно включается анимация полёта «парашютиста»
И я что-то не могу найти как это выключить( подскажите пожалуйста, если кто знает.
Или хотя бы в какую сторону копать?)

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


  • 0

#1153 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 posts
  • Откуда:Севастополь

Posted 05 February 2018 - 02:48

такая же проблема с респом в воде и последующим переносом на тв поверхность (в а2) - я так пока и не решил проблему... анимация всегда возвращается при различных манипуляциях


  • 0

#1154 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 05 February 2018 - 09:54

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

Edited by ReXcOr, 05 February 2018 - 09:54.

  • 0

#1155 OFFLINE   SteelRat

SteelRat

    Полковник

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

Posted 05 February 2018 - 14:22

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

В данной ситуации можно попробовать ход конём, так сказать.

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

player switchMove "";

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

Так вот при таком раскладе инициализирующееся тело так же как у вас желало всегда парить над платформой, а не стоять на своих двоих.

Выше указанное лекарство лечило такое положение вещей.

 

Тоже самое применимо в той ситуации когда тело телепортируется с воды на твёрдую поверхность, после телепорта строка выше ставит тело на ноги.


  • 1

#1156 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

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

Posted 05 February 2018 - 15:02

 

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

В данной ситуации можно попробовать ход конём, так сказать.

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

player switchMove "";

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

Так вот при таком раскладе инициализирующееся тело так же как у вас желало всегда парить над платформой, а не стоять на своих двоих.

Выше указанное лекарство лечило такое положение вещей.

 

Тоже самое применимо в той ситуации когда тело телепортируется с воды на твёрдую поверхность, после телепорта строка выше ставит тело на ноги.

 

Ок, спасибо SteelRat, попробую так и сделать.


  • 0

#1157 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 posts
  • Откуда:Севастополь

Posted 05 February 2018 - 17:26

 

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

В данной ситуации можно попробовать ход конём, так сказать.

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

player switchMove "";

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

Так вот при таком раскладе инициализирующееся тело так же как у вас желало всегда парить над платформой, а не стоять на своих двоих.

Выше указанное лекарство лечило такое положение вещей.

 

Тоже самое применимо в той ситуации когда тело телепортируется с воды на твёрдую поверхность, после телепорта строка выше ставит тело на ноги.

 

не работает -  я уже много чего перепробовал (я про а2)


  • 0

#1158 OFFLINE   friendly

friendly

    Рядовой

  • Пользователи
  • 1 posts
  • Откуда:Москва

Posted 17 February 2018 - 21:50

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

 

Хочу сделать триггер, который при активации показывает всех скрытых юнитов определенной фракции (opfor), которые находятся в триггере, и скрывает, как только юниты покидают его территорию.

 

Что делал. Cоздал триггер – activation type – present.

on activation – {_x hideobject false} foreach thislist,

on deactivation – {_x hideobject true} foreach thislist.

 

Что в итоге – on activation работает, показывая скрытых юнитов на территории триггера, но не скрывает их, когда покидают его пределы.

Что я делаю не так?


  • 0

#1159 OFFLINE   lopster102

lopster102

    Ст.сержант

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

Posted 18 February 2018 - 22:45

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

 

Хочу сделать триггер, который при активации показывает всех скрытых юнитов определенной фракции (opfor), которые находятся в триггере, и скрывает, как только юниты покидают его территорию.

 

Что делал. Cоздал триггер – activation type – present.

on activation – {_x hideobject false} foreach thislist,

on deactivation – {_x hideobject true} foreach thislist.

 

Что в итоге – on activation работает, показывая скрытых юнитов на территории триггера, но не скрывает их, когда покидают его пределы.

Что я делаю не так?

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

попробуй просто вычленять через обычную функцию бисовскую

{_x hideobject false} foreach ([allunits,{side _x == west}]call bis_fnc_conditionalselect)

Edited by lopster102, 18 February 2018 - 22:49.

  • 0

#1160 OFFLINE   Schatten

Schatten

    Капитан

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

Posted 18 February 2018 - 23:53

Хочу сделать триггер, который при активации показывает всех скрытых юнитов определенной фракции (opfor), которые находятся в триггере, и скрывает, как только юниты покидают его территорию.
 
Что делал. Cоздал триггер – activation type – present.
on activation – {_x hideobject false} foreach thislist,
on deactivation – {_x hideobject true} foreach thislist.
 
Что в итоге – on activation работает, показывая скрытых юнитов на территории триггера, но не скрывает их, когда покидают его пределы.
Что я делаю не так?

Дело в том, что переменная thisList в поле "On deact." недоступна.
Чтобы решить проблему, надо чтобы триггер активировался при изменении thisList. Тогда при активации можно будет раскрыть объекты в thisList и скрыть те, которых уже нет в thisList.
Решение такое:
- Условие (активации):

!(thisList isEqualTo (thisTrigger getVariable ["prevList", []]))

- При активации:

{_x hideObject false;} forEach thisList;

call {
	_prevList = thisTrigger getVariable ["prevList", []];

	{hideObject _x;} forEach (_prevList - thisList);
};

thisTrigger setVariable ["prevList", +thisList];

 
 

изначально нужно определить кто видим а кто нет чтобы не показывать тех кто уже показан или скрывать кто уже скрыт

А ничего не случится, если скрывать скрытые и раскрывать раскрытые объекты.
 

и проще всего сделать это через обычный скриптик проще будет ошибки исправлять и редактировать в дальнейшем

Спорное утверждение.
 

и к тому же не понятно что у тебя там в массиве thislist мб там у тебя просто напросто не объекты а что то другое

Это зависит от настроек триггера, но в любом случае там будут объекты.
Например, если триггер активируется присутствием юнитов BLUFOR, то в thisList будут только юниты BLUFOR.
 

попробуй просто вычленять через обычную функцию бисовскую

{_x hideobject false} foreach ([allunits,{side _x == west}]call bis_fnc_conditionalselect)

Таким образом раскроются все юниты BLUFOR, вместо, во-первых, OPFOR, и во-вторых, тех юнитов OPFOR, которые находятся в пределах триггера.
Кроме этого, лучше вместо функции использовать команду

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

.


Edited by Schatten, 18 February 2018 - 23:58.

  • 0




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