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


Фотография

Проверка на существование объекта


Лучший Ответ 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 в переменную.

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


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

#1 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

Отправлено 01 November 2020 - 17:15

Здравствуйте! Как можно сделать проверку на существование объекта (Желательно без использования триггера)?
Пример: Игрок подходит к транспорту и нажимает на действие "Выгрузить боеприпасы", возле него спавнится ящик с припасами. При повторном нажатии на это действие высвечивается надпись, что ящик с данного транспорта уже выгружен. 

Пробовал через alive и isNull , но выдаёт ошибку. 


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 01 November 2020 - 17:31

Dispite, с помощью isNull. Но в твоём случае это вряд ли подойдёт, потому что используется нестандартное действие, и чтобы сделать то, что ты хочешь, нужно ковыряться в исходниках, с помощью которых добавляется это действие.


  • 0

#3 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

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

 


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

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


  • 0

#5 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

Отправлено 02 November 2020 - 14:49

Schatten, т.е сохранить в виде AmmoBox = {код}?


  • 0

#6 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

Отправлено 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 ["Ящик припасов уже выгружен"]};

  • 0

#7 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 02 November 2020 - 15:47

Schatten, т.е сохранить в виде AmmoBox = {код}?

SpawnBox = compileFinal (preprocessFileLineNumbers "SpawnBox.sqf");

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

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

.


  • 0

#8 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

Отправлено 03 November 2020 - 07:50

Schatten,Появилась проблема в том, что я не могу получить значение через 

_this getVariable 

Я присваиваю значение через инициализацию, и через действие вызываю скрипт 

[this] ExecVM "SpawnBox.sqf" 

Но указывая объект через 

_object = _this

Значение получить не удаётся. Я проверял тип передаваемой переменной (_this), она типа object. Так же не удаётся даже удалить объект ссылаясь на (_this), приходится прописывать через имя объекта


Сообщение отредактировал Dispite: 03 November 2020 - 09:10

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 03 November 2020 - 12:50

Dispite, действие добавляй так:

this addAction ["Export Ammo", "SpawnBox.sqf"]; 

и используй мой код для SpawnBox.sqf.


  • 1

#10 OFFLINE   Dispite

Dispite

    Ефрейтор

  • Пользователи
  • 94 сообщений
  • Откуда:Не помню

Отправлено 03 November 2020 - 13:40

Schatten, всё заработало, спасибо!


Сообщение отредактировал Dispite: 03 November 2020 - 13:45

  • 0




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