Здравствуйте! Как можно сделать проверку на существование объекта (Желательно без использования триггера)?
Пример: Игрок подходит к транспорту и нажимает на действие "Выгрузить боеприпасы", возле него спавнится ящик с припасами. При повторном нажатии на это действие высвечивается надпись, что ящик с данного транспорта уже выгружен.
Пробовал через alive и isNull , но выдаёт ошибку.
Проверка на существование объекта
Лучший Ответ Schatten , 02 November 2020 - 14:12
Dispite, косяк твоего кода в том , что
isNull _BoxAmmoExport
всегда будет возвращать true, потому что после выполнения кода локальные переменные удаляются.
Тебе нужно сохранять, создан ящик или нет, в глобальной переменной, а ещё лучше -- в объекте, на который добавлено действие:
params ["_object"]; if (!(_object getVariable ["boxAmmoCreated", false])) then { "Land_PlasticCase_01_medium_gray_F" createVehicleLocal position player; _object setVariable ["boxAmmoCreated", true]; } else {hint format ["Ящик припасов уже выгружен"]};
P. S.
Команда format не нужна. Также советую сохранить содержимое SpawnBox.sqf в переменную.
#1 OFFLINE
Отправлено 01 November 2020 - 17:15
#3 OFFLINE
Отправлено 02 November 2020 - 12:28
Schatten, Сам скрипт
if (isNull _BoxAmmoExport) then { _BoxAmmoExport = "Land_PlasticCase_01_medium_gray_F" createVehicleLocal position player } else {hint format ["Ящик припасов уже выгружен"]};
Действие добавлено через инициализацию
this addAction ["Export Ammo", "ExecVM 'SpawnBox.sqf'"];
#4 OFFLINE
Отправлено 02 November 2020 - 14:12 Лучший Ответ
Dispite, косяк твоего кода в том , что
isNull _BoxAmmoExport
всегда будет возвращать true, потому что после выполнения кода локальные переменные удаляются.
Тебе нужно сохранять, создан ящик или нет, в глобальной переменной, а ещё лучше -- в объекте, на который добавлено действие:
params ["_object"]; if (!(_object getVariable ["boxAmmoCreated", false])) then { "Land_PlasticCase_01_medium_gray_F" createVehicleLocal position player; _object setVariable ["boxAmmoCreated", true]; } else {hint format ["Ящик припасов уже выгружен"]};
P. S.
Команда format не нужна. Также советую сохранить содержимое SpawnBox.sqf в переменную.
#6 OFFLINE
Отправлено 02 November 2020 - 15:29
Немного переделал код, т.к не понимал почему не работает.
/////AmmoBox _object = AmmoBox; _bool = _object getVariable "boxAmmoCreated"; if (!(_bool)) then { "Land_PlasticCase_01_medium_gray_F" createVehicleLocal position player; _object setVariable ["boxAmmoCreated", true]; } else {hint format ["Ящик припасов уже выгружен"]};
#8 OFFLINE
Отправлено 03 November 2020 - 07:50
Schatten,Появилась проблема в том, что я не могу получить значение через
_this getVariable
Я присваиваю значение через инициализацию, и через действие вызываю скрипт
[this] ExecVM "SpawnBox.sqf"
Но указывая объект через
_object = _this
Значение получить не удаётся. Я проверял тип передаваемой переменной (_this), она типа object. Так же не удаётся даже удалить объект ссылаясь на (_this), приходится прописывать через имя объекта
Сообщение отредактировал Dispite: 03 November 2020 - 09:10