Jump to content


Photo

Возможно ли изменить имя переменной


Best Answer Schatten , 05 November 2020 - 16:53

Object это объект, в который добавлено действие спавна ящика


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

Из этого следует, что машин много, поэтому object будет ссылаться на какую-то одну. Следовательно, в эту одну машину будут сохраняться состояния (выгружен или не выгружен) всех ящиков.
Решение -- использовать ссылки, которые уже передаются в сценарии:

params ["_holder"];

if (!(_holder getVariable ["ammoBoxCreated", false])) then {
    _ammoBox = "Land_PlasticCase_01_medium_gray_F" createVehicleLocal (position player);

    _ammoBox addAction ["Удалить", {
        params ["_ammoBox"];

        _holder = _ammoBox getVariable ["holder", objNull];

        deleteVehicle _ammoBox;

        if (!(isNull _holder)) then {
            _holder setVariable ["ammoBoxCreated", false];
        };
    }];
    _ammoBox setVariable ["holder", _holder];

    _holder setVariable ["ammoBoxCreated", true];
} else {
    hint "Ящик припасов уже выгружен";
};
Go to the full post


  • Please log in to reply
11 replies to this topic

#1 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 04 November 2020 - 09:31

Здравствуйте! Можно ли изменить имя переменной?

Для примера:
 

boom = "Land_Pallet_MilBoxes_F" createVehicle position player;

Можно ли изменить boom до присвоения ей значения, чтобы созданные объекты имели разные VehicleVarName?


  • 0

#2 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 04 November 2020 - 10:10

Есть

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

, но применятся после создания


  • 0

#3 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1844 posts

Posted 04 November 2020 - 12:05

Можно ли изменить имя переменной?

Можно, например, с помощью

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

,

call (compile "...");

Есть setVehicleVarName, но применятся после создания

Не только после -- первый пример это демонстрирует.


  • 0

#4 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 04 November 2020 - 14:47

Schatten

    NewObjectName = format ["%1_Box", object];
    BoxAmmo = "Land_PlasticCase_01_small_gray_F" createVehicleLocal _pos;
    BoxAmmo setVehicleVarName format ["%1", NewObjectName];
    BoxAmmo = nil;
    object setVariable [NewObjectName, objNull];

Чтобы при создании имя ящика было "уникальным" я его составляю из имени объекта, с которого вызвано действие + _Box.
Затем меняю название переменной и добавляю переменную в объект.
 

_BoxAmmo = allVariables object select 0;
_BoxAmmo addItemCargoGlobal [srifle_DMR_01_DMS_F, 10];

Но я получаю ошибку на addItemCargoGlobal. Я не правильно меняю название переменной или не правильно её получаю?


Edited by Dispite, 04 November 2020 - 14:49.

  • 0

#5 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 04 November 2020 - 15:00

Проверил через 

_BoxAmmo = allVariables object select 0; 
hint str _BoxBuy;

 Имя переменной присваивается в кавычках 


Edited by Dispite, 04 November 2020 - 15:10.

  • 0

#6 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 05 November 2020 - 10:30

Использовал SetVariable не правильно. Так же вместо allVariables нужно использовать - _BoxAmmo = object getVariable "BoxName";

 

BoxAmmo = "Land_PlasticCase_01_small_gray_F" createVehicleLocal _pos;
BoxAmmo setVehicleVarName format ["%1_box", object];
object setVariable ["BoxName", VehicleVarName BoxAmmo];
BoxAmmo = nil;

Но тут заключается проблема в том, что я изменяю только строковое представление объекта. Пытался сделать так
 

format ["%1_object"] = BoxAmmo
BoxAmmo = nil;

Тоже без успешно


Edited by Dispite, 05 November 2020 - 10:32.

  • 0

#7 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 05 November 2020 - 10:47

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

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


  • 0

#8 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 05 November 2020 - 11:00

Проблема решена. 

BoxAmmo = "Land_PlasticCase_01_small_gray_F" createVehicleLocal _pos;
BoxAmmo setVehicleVarName format ["%1_box", object];
object setVariable [VehicleVarName BoxAmmo, BoxAmmo]; //// присваиваем ссылку на объект 
BoxAmmo = nil;
_DataVariable = allVariables object select 0;
_BoxBuy = object getVariable _DataVariable; /// получаем ссылку на объект

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1844 posts

Posted 05 November 2020 - 15:02

Dispite, что-то ты намудрил...
Что такое object? Зачем менять одну глобальную переменную (BoxAmmo) на другую (object)?
Кроме этого, можно написать так:

object setVariable [format ["%1_box", object], "Land_PlasticCase_01_small_gray_F" createVehicleLocal _pos];

и не использовать глобальную переменную BoxAmmo.


  • 0

#10 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 05 November 2020 - 16:09

Schatten

Object это объект, в который добавлено действие спавна ящика


Что такое object?


  • 0

#11 OFFLINE   Dispite

Dispite

    Ефрейтор

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

Posted 05 November 2020 - 16:14

Schatten, Я хотел сделать разгрузку амуниции (ящика) с транспорта. У каждого транспорта свой ящик, и чтобы взаимодействовать с определённым ящиком нужно было дать каждому разные "ссылки имена" (если я правильно выражаюсь)
 


Зачем менять одну глобальную переменную (BoxAmmo) на другую (object)?


Мой уровень скриптописания не очень высок. Знаю как использовать команды, но с оптимизированием кода и правильностью использования (возможный синтаксис) пока не справляюсь

Edited by Dispite, 05 November 2020 - 16:22.

  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1844 posts

Posted 05 November 2020 - 16:53   Best Answer

Object это объект, в который добавлено действие спавна ящика


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

Из этого следует, что машин много, поэтому object будет ссылаться на какую-то одну. Следовательно, в эту одну машину будут сохраняться состояния (выгружен или не выгружен) всех ящиков.
Решение -- использовать ссылки, которые уже передаются в сценарии:

params ["_holder"];

if (!(_holder getVariable ["ammoBoxCreated", false])) then {
    _ammoBox = "Land_PlasticCase_01_medium_gray_F" createVehicleLocal (position player);

    _ammoBox addAction ["Удалить", {
        params ["_ammoBox"];

        _holder = _ammoBox getVariable ["holder", objNull];

        deleteVehicle _ammoBox;

        if (!(isNull _holder)) then {
            _holder setVariable ["ammoBoxCreated", false];
        };
    }];
    _ammoBox setVariable ["holder", _holder];

    _holder setVariable ["ammoBoxCreated", true];
} else {
    hint "Ящик припасов уже выгружен";
};

Edited by Schatten, 05 November 2020 - 16:59.

  • 1




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