Привет всем живым) Ищу скрипт\мод на возможность одному игроку (у которого нет карты) стоя рядом с другим игроком (у которого карта есть) смотреть карту от него. Может у кого-то есть что-то подобное? Спасибо.

скрипт просмотра карты

Best Answer nIkRon , 21 June 2019 - 21:54
1. Вы пытаетесь получить _x после выполнения вызова через spawn, там его попросту не может быть.
2. Что-бы получить данные в [] spawn {код}; их нужно вставить в массив перед "spawn" >> "[_player, _playerName] spawn {код};"
(findDisplay 46) displayAddEventHandler ["KeyDown",{ private _keyCode = _this select 1; if (_keyCode in (actionKeys "showMap") && { !("ItemMap" in (assignedItems player))}) exitWith { private _playersNearby = (getPosATL player) nearObjects ["Man",5]; private _result = false; private _playerWithMap = objNull; { if ((isPlayer _x) && { ("ItemMap" in (assignedItems _x)) }) exitWith {_result = true; _playerWithMap = _x;}; } forEach _playersNearby; if (_result) then { hint format ["Вы смотрите карту %1", (name _playerWithMap)]; [] spawn { player addItem "ItemMap"; player assignItem "ItemMap"; openMap true; waitUntil { !(visibleMap) }; player unassignItem "ItemMap"; player removeItem "ItemMap"; }; }; }; }];
Если вам нужно было что-бы работало только с игроками, то выше переделанный вариант, прошлый работал и с ботами.
Go to the full post
#1
OFFLINE
Posted 21 June 2019 - 03:05
#2
OFFLINE
Posted 21 June 2019 - 12:25
Edited by nIkRon, 21 June 2019 - 12:25.
#4
OFFLINE
Posted 21 June 2019 - 15:24
(findDisplay 46) displayAddEventHandler ["KeyDown",{ private _keyCode = _this select 1; if (_keyCode in (actionKeys "showMap")) exitWith { private _playersNearby = (getPosATL player) nearObjects ["Man",5]; private _result = false; { if ("ItemMap" in (assignedItems _x)) exitWith {_result = true}; } forEach _playersNearby; if (_result) then { [] spawn { player addItem "ItemMap"; player assignItem "ItemMap"; openMap true; waitUntil { !(visibleMap) }; player unassignItem "ItemMap"; player removeItem "ItemMap"; }; }; _result }; }];
#5
OFFLINE
Posted 21 June 2019 - 16:12
Спасибо. Есть нубский вопрос.
- в редакторе через дебаг-консоль работает. попытался запустить в init.sqf как скрипт [] execvm "map.sqf"; - не работает.
добавил строку while {true} do {ваш скрипт}; - работает и выключить карту можно только через esc и я так понимаю что проверка идет постоянно. Можно как-то его запускать "только в нужный момент"? Или как правильно запустить ваш скрипт?
2. карта удаляется у любого у кого она есть после ее открытия\закрытия.?? (а предполагалось что она удалиться у того, у кого ее и не было и кто ее смотрел от другого игрока)
Edited by TopDen, 21 June 2019 - 16:29.
#6
OFFLINE
Posted 21 June 2019 - 20:23
TopDen, 1. Вы исполняете его, когда 46 дисплей еще не загрузился, поэтому он и не работает, добавьте перед исполнением это:
waitUntil {sleep 0.5; !isNull (findDisplay 46)};
И лучше поместите не в init.sqf, а в скрипт где у вас происходит "загрузка" персонажа. Ну или на крайняк в initPlayerLocal.sqf
А этим действием: while {true} do {ваш скрипт}; вы запустили его ОВЕР много раз.
2. Да, не подумал об этом, вот исправление:
(findDisplay 46) displayAddEventHandler ["KeyDown",{ private _keyCode = _this select 1; if (_keyCode in (actionKeys "showMap") && { !("ItemMap" in (assignedItems player))}) exitWith { private _playersNearby = (getPosATL player) nearObjects ["Man",5]; private _result = false; { if ("ItemMap" in (assignedItems _x)) exitWith {_result = true}; } forEach _playersNearby; if (_result) then { [] spawn { player addItem "ItemMap"; player assignItem "ItemMap"; openMap true; waitUntil { !(visibleMap) }; player unassignItem "ItemMap"; player removeItem "ItemMap"; }; }; }; }];
Карта закрывается и через свою кнопку, проблем с этим нет(проверил). И что вы имеете ввиду "Можно как-то его запускать "только в нужный момент""
Если вы хотите запускать его допустим только когда игрок в триггере(просто к примеру), тогда делаете так:
mapEventHandler = скрипт; //Когда нужно включить
(findDisplay 46) displayRemoveEventHandler ["keyDown",mapEventHandler]; //Когда нужно выключить его
Edited by nIkRon, 21 June 2019 - 20:19.
#7
OFFLINE
Posted 21 June 2019 - 21:26
nIkRon, очень благодарен за помощь) все работает четко. последний маленький нубский вопрос. можно добавить сюда хинт в котором прописывалось имя "чью" карту смотришь? попытался так дописать, но дает ошибку. Не подскажите на будущее как верно это добавить?
if (_result) then { [] spawn { params ["_х"]; player addItem "ItemMap"; player assignItem "ItemMap"; openMap true; hint format ["Вы смотрите карту %1", name _х]; waitUntil { !(visibleMap) }; player unassignItem "ItemMap"; player removeItem "ItemMap"; }; };
#8
OFFLINE
Posted 21 June 2019 - 21:54 Best Answer
1. Вы пытаетесь получить _x после выполнения вызова через spawn, там его попросту не может быть.
2. Что-бы получить данные в [] spawn {код}; их нужно вставить в массив перед "spawn" >> "[_player, _playerName] spawn {код};"
(findDisplay 46) displayAddEventHandler ["KeyDown",{ private _keyCode = _this select 1; if (_keyCode in (actionKeys "showMap") && { !("ItemMap" in (assignedItems player))}) exitWith { private _playersNearby = (getPosATL player) nearObjects ["Man",5]; private _result = false; private _playerWithMap = objNull; { if ((isPlayer _x) && { ("ItemMap" in (assignedItems _x)) }) exitWith {_result = true; _playerWithMap = _x;}; } forEach _playersNearby; if (_result) then { hint format ["Вы смотрите карту %1", (name _playerWithMap)]; [] spawn { player addItem "ItemMap"; player assignItem "ItemMap"; openMap true; waitUntil { !(visibleMap) }; player unassignItem "ItemMap"; player removeItem "ItemMap"; }; }; }; }];
Если вам нужно было что-бы работало только с игроками, то выше переделанный вариант, прошлый работал и с ботами.
Edited by nIkRon, 21 June 2019 - 21:56.
#9
OFFLINE
Posted 25 August 2019 - 14:51
Здравствуйте добрые парни опять) возник наверно нубский вопрос, но не могу понять... вышенаписанный скрипт работает в дебаг-консоли если запустить локально.
а если в initplayerlocal.sqf пишу []execvm "myscript.sqf"; с вышеизложенным скриптом, то не работает. ни ошибок ни чего. В чем может быть проблема?
( и в init.sqf не работает, и в initserver.sqf тоже не работает)
#11
OFFLINE
Posted 25 August 2019 - 15:57
TopDen, https://arma3.ru/for...rty/#entry82554 вы ведь уже задавали этот вопрос, ответ был в первом пункте, нужно быть немножко внимательнее.