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


Фотография

Просмотр карты


Лучший Ответ евгений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";
	};
}];

работает но карту добавляет в инвентарь

 

Перейти к сообщению


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

#1 OFFLINE   евгений373

евгений373

    Ефрейтор

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

Отправлено 01 July 2018 - 10:24

доброго всем дня.Идея такова-стоит стол,подходишь к нему и появляется действие открыть карту.Как такое воплотатить в жизнь ? ну или хотя бы как триггером открыть карту и закрыть?

 


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 01 July 2018 - 12:31

евгений373, в поле Init стенда или карты вставь этот код:

this addAction ["Открыть карту", {openMap true;}];

Сообщение отредактировал Schatten: 01 July 2018 - 12:35

  • 0

#3 OFFLINE   евгений373

евгений373

    Ефрейтор

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

Отправлено 04 July 2018 - 20:12

 

евгений373, в поле Init стенда или карты вставь этот код:

this addAction ["Открыть карту", {openMap true;}];

спасибо но проблемма,дело в том что карты в инвентаре если нет то этим скриптом она неоткрывается

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

 

 


Сообщение отредактировал евгений373: 04 July 2018 - 21:00

  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 July 2018 - 20:21

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


Сообщение отредактировал SteelRat: 04 July 2018 - 20:22

  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 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

  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 July 2018 - 21:16

 

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

Вас впереди ожидает много того что вам не очень понравится, это арма)

 

ЗЫ

Ну по поводу нравится или нет.

Как пример решения давайте посмотрим на такое.

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

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

Но кому то он кажется мало приемлемым. Но приемлемость познаётся в сравнении.

Как вариант ещё одно, оригинальное решение. Кому то будет проще, и приемлемее, например взять а нарисовать карту, например Алтиса, в 4к разрешении, повесить эту текстуру на стенд, а потом сидеть и рисовать алгоритм которым игрок будет водить свою камеру по этой текстуре? Вряд ли прикольно, во всяком случае для того кто это будет писать).

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


Сообщение отредактировал SteelRat: 04 July 2018 - 21:37

  • 0

#7 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 04 July 2018 - 21:44

евгений373, мой вариант:


  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 July 2018 - 22:02

_hasMap = "ItemMap" in ((assignedItems _caller) + (items _caller));

Я бы настоятельно рекомендовал вам, Сударь, всегда, но по возможности, избегать подобных строк.

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

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

 

Я бы настоятельно рекомендовал вам в ваших решениях, не обламываться), и всё таки, строить алгоритмы с расстановкой приоритетов, согласно, так скажем вероятностям.

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

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

И последнее утверждение, перс бомж, надо поддержать такого).

 

Так же, даже банальные IFы не настолько безобидны как могут показаться, и требуют к себе далеко не одного такта процессора.

 

Одним словом, сэкономил тут копейку, там десять, на выходе глядишь и сотка набежит).


Сообщение отредактировал SteelRat: 04 July 2018 - 22:03

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 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};

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


  • 0

#10 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 July 2018 - 22:22

Тут как говорится, всегда поиск золотой середины, но для данного конкретного решения, я всё таки бы развёл проверки по развилкам)


  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 04 July 2018 - 23:29

Так же совсем забыл, экшен спавнит код или вызывает методом call

Планировщик отвечает за код действий, так что spawn получается лишним

я всё таки бы развёл проверки по развилкам

Я бы вообще не проверял бы наличие карты не в специальном слоте - нету в спец слоте, добавили через linkItem и убрали через unlinkItem, карта внутри контейнеров ни как не затронута и все быстро и просто

Сообщение отредактировал vlad333000: 04 July 2018 - 23:41

  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 05 July 2018 - 00:24

 

Я бы вообще не проверял бы наличие карты не в специальном слоте - нету в спец слоте, добавили через linkItem и убрали через unlinkItem, карта внутри контейнеров ни как не затронута и все быстро и просто          

:good:

Золотая середина.


  • 0

#13 OFFLINE   евгений373

евгений373

    Ефрейтор

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

Отправлено 05 July 2018 - 14:46

 

 

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

Вас впереди ожидает много того что вам не очень понравится, это арма)

 

ЗЫ

Ну по поводу нравится или нет.

Как пример решения давайте посмотрим на такое.

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

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

Но кому то он кажется мало приемлемым. Но приемлемость познаётся в сравнении.

Как вариант ещё одно, оригинальное решение. Кому то будет проще, и приемлемее, например взять а нарисовать карту, например Алтиса, в 4к разрешении, повесить эту текстуру на стенд, а потом сидеть и рисовать алгоритм которым игрок будет водить свою камеру по этой текстуре? Вряд ли прикольно, во всяком случае для того кто это будет писать).

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

       

 

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


  • 0

#14 OFFLINE   евгений373

евгений373

    Ефрейтор

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

Отправлено 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

  • 0

#15 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 05 July 2018 - 15:13

евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.


  • 0

#16 OFFLINE   евгений373

евгений373

    Ефрейтор

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

Отправлено 05 July 2018 - 15:20

евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.

да согласен,поторопился я с выводами....(((сижу думаю триггер на место ставить


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


евгений373, вообще-то все предложенные здесь варианты добавляют юниту карту (если её у него нет) и удаляют, если она была добавлена.

а можно сделать чтоб недобавляла?


  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 05 July 2018 - 15:25

 

евгений373, мой вариант:

 

Спасибо,но к сожалению скрипт добавляет карту юниту.

 

Кроме того, это было сделано для обхода этого:

 

евгений373, в поле Init стенда или карты вставь этот код:

this addAction ["Открыть карту", {openMap true;}];
спасибо но проблемма,дело в том что карты в инвентаре если нет то этим скриптом она неоткрывается

 


сижу думаю триггер на место ставить

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

а можно сделать чтоб недобавляла?

А карту как открывать у тех, у кого её нету?


Сообщение отредактировал Schatten: 05 July 2018 - 15:27

  • 0

#18 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 05 July 2018 - 20:01

Schatten, ну без добавления можно обойтись, но тогда нужно знать GUI, только основная карта привязана к слоту карты в инвентаре, все остальные скриптовые карты работают без этого
  • 0

#19 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 05 July 2018 - 20:08

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

По идее Влад предложил вообще самый кошерный вариант, проверить слот с картой, и если нет добавить карту в слот, а при закрытии удалить.

 

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


Сообщение отредактировал SteelRat: 05 July 2018 - 20:15

  • 0




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