доброго всем дня.Идея такова-стоит стол,подходишь к нему и появляется действие открыть карту.Как такое воплотатить в жизнь ? ну или хотя бы как триггером открыть карту и закрыть?
Лучший Ответ евгений373 , 05 July 2018 - 15:04
Перейти к сообщению
Не проверял, вероятно где то может и ошибся.
Так же совсем забыл, экшен спавнит код или вызывает методом call, по этому добавлен спавн кода.
this addAction ["Изучить карту", { _this spawn { params ["_target", "_caller", "_actionId", "_arguments"]; private _isMap = ((assignedItems _caller) find "ItemMap") > -1; if (!_isMap) then { _isMap = ((items _caller) find "ItemMap") > -1; if (_isMap) then { _caller assignItem "ItemMap"; } else { _caller addItem "ItemMap"; _caller assignItem "ItemMap"; }; }; openMap true; if (_isMap) exitWith {}; waitUntil { !shownMap }; _caller unassignItem "ItemMap"; _caller removeItem "ItemMap"; }; }];работает но карту добавляет в инвентарь
Отправлено 01 July 2018 - 10:24
доброго всем дня.Идея такова-стоит стол,подходишь к нему и появляется действие открыть карту.Как такое воплотатить в жизнь ? ну или хотя бы как триггером открыть карту и закрыть?
Отправлено 01 July 2018 - 12:31
евгений373, в поле Init стенда или карты вставь этот код:
this addAction ["Открыть карту", {openMap true;}];
Сообщение отредактировал Schatten: 01 July 2018 - 12:35
Отправлено 04 July 2018 - 20:12
евгений373, в поле Init стенда или карты вставь этот код:
this addAction ["Открыть карту", {openMap true;}];спасибо но проблемма,дело в том что карты в инвентаре если нет то этим скриптом она неоткрывается
триггером пришлось добавлять а при выходе из него удалять карту)))ненравится мне такое решение))
Сообщение отредактировал евгений373: 04 July 2018 - 21:00
Отправлено 04 July 2018 - 20:21
ну так если в инвентаре перса нет карты, добавьте в код вызываемый экшеном проверку, если карты нет, то добавить карту в инвентарь. Так же, при необходимости можно построить алгоритм так, что если при вызове экшена у перса нет карты, то карта добавляется, а при закрытии карты карта удаляется, и если на момент вызова экшена у перса была карта, то после закрытия карта не удаляется.
Сообщение отредактировал SteelRat: 04 July 2018 - 20:22
Отправлено 04 July 2018 - 20:55
Не проверял, вероятно где то может и ошибся.
Так же совсем забыл, экшен спавнит код или вызывает методом call, по этому добавлен спавн кода.
this addAction ["Изучить карту", { _this spawn { params ["_target", "_caller", "_actionId", "_arguments"]; private _isMap = ((assignedItems _caller) find "ItemMap") > -1; if (!_isMap) then { _isMap = ((items _caller) find "ItemMap") > -1; if (_isMap) then { _caller assignItem "ItemMap"; } else { _caller addItem "ItemMap"; _caller assignItem "ItemMap"; }; }; openMap true; if (_isMap) exitWith {}; waitUntil { !shownMap }; _caller unassignItem "ItemMap"; _caller removeItem "ItemMap"; }; }];
Сообщение отредактировал SteelRat: 04 July 2018 - 21:00
Отправлено 04 July 2018 - 21:16
триггером пришлось добавлять а при выходе из него удалять карту)))ненравится мне такое решение))
Вас впереди ожидает много того что вам не очень понравится, это арма)
ЗЫ
Ну по поводу нравится или нет.
Как пример решения давайте посмотрим на такое.
геймплей армы, в плане посмотреть в карту завязан на наличие в инвентаре перса собственно самого предмета в который нужно смотреть, логично, тут спорить смысла нет.
Но например если требуется в игровом процессе посмотреть на какой либо стенд с картой. И отсутствие карты в инвентаре как бы доставляет проблем при решении. Но это не проблема, пример выше.
Но кому то он кажется мало приемлемым. Но приемлемость познаётся в сравнении.
Как вариант ещё одно, оригинальное решение. Кому то будет проще, и приемлемее, например взять а нарисовать карту, например Алтиса, в 4к разрешении, повесить эту текстуру на стенд, а потом сидеть и рисовать алгоритм которым игрок будет водить свою камеру по этой текстуре? Вряд ли прикольно, во всяком случае для того кто это будет писать).
По этому, решение добавить и после удалить карту, после приведённого примера выше, уже выглядит вполне себе применимо и привлекательно.
Сообщение отредактировал SteelRat: 04 July 2018 - 21:37
Отправлено 04 July 2018 - 22:02
_hasMap = "ItemMap" in ((assignedItems _caller) + (items _caller));
Я бы настоятельно рекомендовал вам, Сударь, всегда, но по возможности, избегать подобных строк.
При данном решении, всегда, производится далеко не оптимизированный процесс сложения двух массивов, а перед этим получение этих самих массивов, и в заключении такой же далеко мало оптимизированный поиск в массиве. То есть в одной строке куча жёстких для процессора операций над массивами.
И согласитесь, при разных вероятных вариантах, это как правило будет излишним.
Я бы настоятельно рекомендовал вам в ваших решениях, не обламываться), и всё таки, строить алгоритмы с расстановкой приоритетов, согласно, так скажем вероятностям.
Вероятность того что у перса окажется в слоте карта, достаточно высока, значит стоит проверить этот слот первым, и при верном утверждении исключаем дальнейшие переборы, и не нужные уже операции.
Следующей вероятностью рассматривается что у перса, вероятно, карта может быть, но не прилинкована, проверяем. Если верно линкуем.
И последнее утверждение, перс бомж, надо поддержать такого).
Так же, даже банальные IFы не настолько безобидны как могут показаться, и требуют к себе далеко не одного такта процессора.
Одним словом, сэкономил тут копейку, там десять, на выходе глядишь и сотка набежит).
Сообщение отредактировал SteelRat: 04 July 2018 - 22:03
Отправлено 04 July 2018 - 22:16
SteelRat, всё это, конечно же, понятно. Просто я за не столько оптимальность, сколько за некий баланс оптимальности и наглядности, а мой вариант, как мне кажется, всё-таки более наглядный, даже если и медленнее.
P. S.
Вот ещё пара вариантов:
_hasMap = ("ItemMap" in (assignedItems _caller)) or {"ItemMap" in (items _caller)}; _hasMap = (((assignedItems _caller) findIf {_x == "ItemMap"}) >= 0) or {((items _caller) findIf {_x == "ItemMap"}) >= 0};
Но я бы остановился на первоначальном, ну или на втором. Третий, по идее, самый быстрый из предложенных мной, но выглядит громоздко.
Отправлено 04 July 2018 - 22:22
Тут как говорится, всегда поиск золотой середины, но для данного конкретного решения, я всё таки бы развёл проверки по развилкам)
Отправлено 04 July 2018 - 23:29
Планировщик отвечает за код действий, так что spawn получается лишнимТак же совсем забыл, экшен спавнит код или вызывает методом call
Я бы вообще не проверял бы наличие карты не в специальном слоте - нету в спец слоте, добавили через linkItem и убрали через unlinkItem, карта внутри контейнеров ни как не затронута и все быстро и простоя всё таки бы развёл проверки по развилкам
Сообщение отредактировал vlad333000: 04 July 2018 - 23:41
Отправлено 05 July 2018 - 00:24
Я бы вообще не проверял бы наличие карты не в специальном слоте - нету в спец слоте, добавили через linkItem и убрали через unlinkItem, карта внутри контейнеров ни как не затронута и все быстро и просто
Золотая середина.
Отправлено 05 July 2018 - 14:46
триггером пришлось добавлять а при выходе из него удалять карту)))ненравится мне такое решение))
Вас впереди ожидает много того что вам не очень понравится, это арма)
ЗЫ
Ну по поводу нравится или нет.
Как пример решения давайте посмотрим на такое.
геймплей армы, в плане посмотреть в карту завязан на наличие в инвентаре перса собственно самого предмета в который нужно смотреть, логично, тут спорить смысла нет.
Но например если требуется в игровом процессе посмотреть на какой либо стенд с картой. И отсутствие карты в инвентаре как бы доставляет проблем при решении. Но это не проблема, пример выше.
Но кому то он кажется мало приемлемым. Но приемлемость познаётся в сравнении.
Как вариант ещё одно, оригинальное решение. Кому то будет проще, и приемлемее, например взять а нарисовать карту, например Алтиса, в 4к разрешении, повесить эту текстуру на стенд, а потом сидеть и рисовать алгоритм которым игрок будет водить свою камеру по этой текстуре? Вряд ли прикольно, во всяком случае для того кто это будет писать).
По этому, решение добавить и после удалить карту, после приведённого примера выше, уже выглядит вполне себе применимо и привлекательно.
да как бы я привык к капризам движка армы,еще со второй армы.Просто ситуация миссии такова что бы карта была только у командира взвода и зам командира,а рядовым если карту давать то уже начнутся всякие инициативы которые почти всегда несут за собой тяжкие последствия .А так карту можно смотреть но только около стола,так хоть как то игрокам придется маленько память включать,да и ценность карты сразу возрастает в разы.В общем вот и воплощаю в жизнь свою идею)))
Отправлено 05 July 2018 - 15:04 Лучший Ответ
Не проверял, вероятно где то может и ошибся.
Так же совсем забыл, экшен спавнит код или вызывает методом call, по этому добавлен спавн кода.
this addAction ["Изучить карту", { _this spawn { params ["_target", "_caller", "_actionId", "_arguments"]; private _isMap = ((assignedItems _caller) find "ItemMap") > -1; if (!_isMap) then { _isMap = ((items _caller) find "ItemMap") > -1; if (_isMap) then { _caller assignItem "ItemMap"; } else { _caller addItem "ItemMap"; _caller assignItem "ItemMap"; }; }; openMap true; if (_isMap) exitWith {}; waitUntil { !shownMap }; _caller unassignItem "ItemMap"; _caller removeItem "ItemMap"; }; }];работает но карту добавляет в инвентарь
Сообщение отредактировал евгений373: 05 July 2018 - 15:17
Отправлено 05 July 2018 - 15:13
евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.
Отправлено 05 July 2018 - 15:20
евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.
да согласен,поторопился я с выводами....(((сижу думаю триггер на место ставить
не ну тригом тоже нормально....2 на 2 кружок сделал,вышел с трига и карта пропала из инвентаря,морока только что всем у кого карты нету имена давать надо
евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.
а можно сделать чтоб недобавляла?
Отправлено 05 July 2018 - 15:25
Спасибо,но к сожалению скрипт добавляет карту юниту.евгений373, мой вариант:
Кроме того, это было сделано для обхода этого:
спасибо но проблемма,дело в том что карты в инвентаре если нет то этим скриптом она неоткрываетсяевгений373, в поле Init стенда или карты вставь этот код:
this addAction ["Открыть карту", {openMap true;}];
сижу думаю триггер на место ставить
Зачем?! В сценарии уже предусмотрено добавление и удаление карты! Причём это будет происходить при активации действия (то есть только тогда, когда нужно), а не от того, зашёл игрок в зону действия триггера или вышел.
а можно сделать чтоб недобавляла?
А карту как открывать у тех, у кого её нету?
Сообщение отредактировал Schatten: 05 July 2018 - 15:27
Отправлено 05 July 2018 - 20:08
По сути, можно вызвать сам дисплей карты, а для этого сам итем карты естественно не нужен. Но тут нужны более глубокие познания.
По идее Влад предложил вообще самый кошерный вариант, проверить слот с картой, и если нет добавить карту в слот, а при закрытии удалить.
Мне во всём этом странно другое, что за фобия у топик мейкера по поводу добавления карты в слот, при её отсутствии, предложен, не один алгоритм, который удалит карту у перса, если она ему не положена по рангу.
Сообщение отредактировал SteelRat: 05 July 2018 - 20:15