Здравствуйте! Можно ли изменить имя переменной?
Для примера:
boom = "Land_Pallet_MilBoxes_F" createVehicle position player;
Можно ли изменить boom до присвоения ей значения, чтобы созданные объекты имели разные VehicleVarName?
Лучший Ответ 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 "Ящик припасов уже выгружен"; };Перейти к сообщению
Отправлено 04 November 2020 - 09:31
Здравствуйте! Можно ли изменить имя переменной?
Для примера:
boom = "Land_Pallet_MilBoxes_F" createVehicle position player;
Можно ли изменить boom до присвоения ей значения, чтобы созданные объекты имели разные VehicleVarName?
Отправлено 04 November 2020 - 10:10
Есть
, но применятся после созданияОтправлено 04 November 2020 - 12:05
Можно ли изменить имя переменной?
Можно, например, с помощью
,call (compile "...");
Есть setVehicleVarName, но применятся после создания
Не только после -- первый пример это демонстрирует.
Отправлено 04 November 2020 - 14:47
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. Я не правильно меняю название переменной или не правильно её получаю?
Сообщение отредактировал Dispite: 04 November 2020 - 14:49
Отправлено 04 November 2020 - 15:00
Проверил через
_BoxAmmo = allVariables object select 0; hint str _BoxBuy;
Имя переменной присваивается в кавычках
Сообщение отредактировал Dispite: 04 November 2020 - 15:10
Отправлено 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;
Тоже без успешно
Сообщение отредактировал Dispite: 05 November 2020 - 10:32
Отправлено 05 November 2020 - 10:47
Можно пойти в обход и использовать способ, которым получали ссылку на объект через текст листбокса, но я не уверен что он будет хорошим
Отправлено 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; /// получаем ссылку на объект
Отправлено 05 November 2020 - 15:02
Dispite, что-то ты намудрил...
Что такое object? Зачем менять одну глобальную переменную (BoxAmmo) на другую (object)?
Кроме этого, можно написать так:
object setVariable [format ["%1_box", object], "Land_PlasticCase_01_small_gray_F" createVehicleLocal _pos];
и не использовать глобальную переменную BoxAmmo.
Отправлено 05 November 2020 - 16:14
Schatten, Я хотел сделать разгрузку амуниции (ящика) с транспорта. У каждого транспорта свой ящик, и чтобы взаимодействовать с определённым ящиком нужно было дать каждому разные "ссылки имена" (если я правильно выражаюсь)
Зачем менять одну глобальную переменную (BoxAmmo) на другую (object)?
Сообщение отредактировал Dispite: 05 November 2020 - 16:22
Отправлено 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 "Ящик припасов уже выгружен"; };
Сообщение отредактировал Schatten: 05 November 2020 - 16:59