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


Фотография

Проверка снаряжения по белому списку


Лучший Ответ dos622 , 12 July 2016 - 09:40

можно.

Я делал примерно так:

{
if !(_x in _b) then {

_num= _a find _x; //ищем элемент в нутри массива а
_a deleteAt _num; //удаляем элемент из массива

//если нужно заменить то:
_a set [_num,"MyBigGun"];

};

} forEach _a;

отцов сильно прошу не пинать, рано, сплю еще:)

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


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

#21 OFFLINE   wolf2285

wolf2285

    Ефрейтор

  • Пользователи
  • 85 сообщений

Отправлено 19 July 2016 - 15:06

ну, вообще решение конечно через то самое место, но...

можно попробывать так:

взят Id игрока, и присвоить ему масив шмота по дефолту, допустим так:

_uid = getPlayerUID player;
_saved_loadouts_x = profileNamespace getVariable "bis_fnc_saveInventory_data";
_inv=[_uid,_saved_loadouts_x];

и работать с переменной _inv она будет уникальна для каждого игрока.

Далее, чтобы данные инвентаря сохранялись для каждого игрока отдельно, их нужно куда то сохранять. логично будет сохранения делать на сервере.

Создаем на сервере глобальную переменную:

 

if (isServer) then {
MegaInvData=[];
};
if (isServer) then {
ServerSaveInvPlayer={
_inv= _this select 0;
MegaInvData pushBack _int;
//забыл тут проверку нужно воткнуть, нет ли уже UID игрока внутри массива, если нет то пушбак, если есть то заменить старый.
};

"SaveInvPlayer" addPublicVariableEventHandler {(_this select 1) call ServerSaveInvPlayer};
};

if (!isDedicated) then {
SaveInvPlayer= [_inv];
publicVariableServer "SaveInvPlayer";
};

ну и запилить тоже самое только для загрузки инвентаря игроку. соответственно сделать проверку, есть ли его уид в "MegaInvData". если нет, то новый инвентарь, если есть то брать из MegaInvData.

 

Э.. кажется, меня кудато не туда понесло :)) забейте :))

Совет конечно ценный и тоже пригодится.Но вы немного не поняли про что я тут говорю.В миссии есть виртуальный арсенал с тем вооружением которое я разрешил.В моем случае допустим оружие из РХС.Но люди могут и загрузить там сохраненное снаряжение.И из сохранения загружают например крутую ванильную снайперскую винтовку с тепловизором.Я это исправляю забираю эту крутую пушку и даю вместо нее замечательный советский имба ган  АКМ.Либо они выбирают сами из того что есть в арсенале.

_saved_loadouts_x = profileNamespace getVariable "bis_fnc_saveInventory_data";

вот это как раз и есть уже сохраненное в виртуальном арсенале снаряжение которое я и пытаюсь отредактировать когда игрок пытается загрузить сохранененное снаряжение.


Сообщение отредактировал wolf2285: 19 July 2016 - 15:12

  • 0

#22 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 19 July 2016 - 17:56

Я вот что подумал.

Это большое упущение арсенального функционала, отсутствие фильтрации по чёрному списку.

Можно по париться, и переделать функцию арсенала. Главная задача найти ту ключевую точку куда воткнуть проверку на валидность загружаемых классов в арсенал.

И главное что бы это не принесло негативных эффектов.


Сообщение отредактировал SteelRat: 19 July 2016 - 17:57

  • 0

#23 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 19 July 2016 - 18:04

ну, вообще решение конечно через то самое место, но...

можно попробывать так:

взят Id игрока, и присвоить ему масив шмота по дефолту, допустим так:

_uid = getPlayerUID player;
_saved_loadouts_x = profileNamespace getVariable "bis_fnc_saveInventory_data";
_inv=[_uid,_saved_loadouts_x];

и работать с переменной _inv она будет уникальна для каждого игрока.

Далее, чтобы данные инвентаря сохранялись для каждого игрока отдельно, их нужно куда то сохранять. логично будет сохранения делать на сервере.

Создаем на сервере глобальную переменную:

 

 

По сути, коллега, первые посты с примерами в этой теме

https://arma3.ru/for...unitov/?p=24921

почти отражают ваши идеи)

Только дефолтные данные берутся не из профиля, а из запиленного для этих целей конфига.


  • 0

#24 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 19 July 2016 - 18:57

SteelRat, Да коллега, я помню ту тему:) Хотел ее тоже, дать автору на изучение. но у него немножко по другому:)

Вообще моей целью, было подтолкнуть автора к созданию более гибкой системы инвентаря, и в тоже время более удобной для игроков. А вся эта тема с арсеналом, мне очень сильно не нравиться, еще со времен ее внедрения, т.к. красиво, но криво:)


  • 0

#25 OFFLINE   wolf2285

wolf2285

    Ефрейтор

  • Пользователи
  • 85 сообщений

Отправлено 19 July 2016 - 21:23

Принудительную экипировку можно и в редакторе изначально поставить.либо поставить просто ящики с оружием.у каждого есть свои любимые игрушки.В миссии  часто приходится перевооружаться в зависимости от задачи.уничтожении наземной техники ,воздушной или зачистка пехоты.У кого то есть уже сохраненные на все комплекты под разные нужды.Здесь реализовано то что можно выбрать и загрузить нужный индивидуальный комплект во время респавна.Я смотрел данную тему.Просто не хочется чтобы люди тратили время на переснаряжение вручную и играли с тем что нравится,конечно из того что разрешено в арсенале.Если нравится снайпером то пожалуйста свд бери.Как то и игра веселее идет.А то заходишь на сервер вроде народ есть но некоторые подгрузили снайперку крупнокалиберную с тепловизором и сидят с километра стреляют и как будто один играешь.Конфиги можно написать и настроить в редакторе во вкладке атрибуты возрождение с выбором снаряжения .Поэтому я и замутил эту тему чтобы оставить все удобства и в то же время не нарушить баланс.


  • 0

#26 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 19 July 2016 - 22:48

SteelRat, там есть кусок кода, который проходит по всем классам конфига, выбирает из них "видимые" и сортирует в большой массив по параметру simulation, туда вполне можно вставить

Так же уже такой функционал в нем есть (Отчасти) - позволяет создать "белый" список предметов, вот только как - хз


Сообщение отредактировал vlad333000: 19 July 2016 - 22:49

  • 0

#27 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 20 July 2016 - 10:36

Принудительную экипировку можно и в редакторе изначально поставить.либо поставить просто ящики с оружием.у каждого есть свои любимые игрушки.В миссии  часто приходится перевооружаться в зависимости от задачи.уничтожении наземной техники ,воздушной или зачистка пехоты.У кого то есть уже сохраненные на все комплекты под разные нужды.Здесь реализовано то что можно выбрать и загрузить нужный индивидуальный комплект во время респавна.Я смотрел данную тему.Просто не хочется чтобы люди тратили время на переснаряжение вручную и играли с тем что нравится,конечно из того что разрешено в арсенале.Если нравится снайпером то пожалуйста свд бери.Как то и игра веселее идет.А то заходишь на сервер вроде народ есть но некоторые подгрузили снайперку крупнокалиберную с тепловизором и сидят с километра стреляют и как будто один играешь.Конфиги можно написать и настроить в редакторе во вкладке атрибуты возрождение с выбором снаряжения .Поэтому я и замутил эту тему чтобы оставить все удобства и в то же время не нарушить баланс.

в моем варианте:

1. люди не будут тратить время после респа. им автоматом оденется то что у них было при смерти.

2. ты также спокойно реализовываешь свой белый список, можно его вообще циклом повесить на игрока, с проверкой раз в минуту, даже если игрок во время игры без арсенала подменит пушку, она удалится и поставится то что ты укажешь. также данные об инвентаре игроков будут хранится до перезагрузки сервера. В любой момент игрок может зайти и выйти, при этом сохраняя инвентарь.


  • 0

#28 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 July 2016 - 16:22

SteelRat, там есть кусок кода, который проходит по всем классам конфига, выбирает из них "видимые" и сортирует в большой массив по параметру simulation, туда вполне можно вставить

Так же уже такой функционал в нем есть (Отчасти) - позволяет создать "белый" список предметов, вот только как - хз

 

 

Так же уже такой функционал в нем есть (Отчасти) - позволяет создать "белый" список предметов, вот только как - хз

Я потратил около часа лазия по функции, в попытке понять, есть ли возможность при вызове арсенала передать белый или чёрный список, но так и не встретил даже намёка на это.

 

Для перса можно задать только параметр, выводить все классы снаряжения или вывести только то, чем экипирован игрок.

 

Для виртуальных амобоксов, так же передаётся параметр загрузить ящик всеми классами, если задать этот параметр в false, то виртуальный амобокс вообще не создаётся, то есть даже экшен "арсенал" отсутствует.

 

Можете дать номера строк где намёк на это

 

Так же уже такой функционал в нем есть (Отчасти) - позволяет создать "белый"


  • 0

#29 OFFLINE   Sa-Matra

Sa-Matra

    Ефрейтор

  • Пользователи
  • 97 сообщений

Отправлено 20 July 2016 - 17:27

Собственный список разрешенного снаряжения создается через BIS_fnc_addVirtual*Cargo команды, вот например так:

	
	[missionNamespace, [
		"arifle_MXM_khk_F",
		"srifle_DMR_06_camo_F",
		"Laserdesignator_02_ghex_F"
	]] call BIS_fnc_addVirtualWeaponCargo;

	[missionNamespace, [
		"optic_Arco_ghex_F",
		"H_HelmetSpecO_blk",
		"U_C_man_sport_2_F",
		"V_TacVest_blk_POLICE",
		"NVGogglesB_gry_F"
	]] call BIS_fnc_addVirtualItemCargo;

	[missionNamespace, [
		"B_Bergen_tna_F"
	]] call BIS_fnc_addVirtualBackpackCargo;

потом открывается арсенал командой


	 ["Open", false] call BIS_fnc_arsenal;

Если нужно особое снаряжение вешать на отдельный ящик или технику, где есть арсенал то вместо missionNamespace надо вписать объект с арсеналом, тогда ему установятся эти шмотки как доступные.
  • 1

#30 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 July 2016 - 18:01

Ну вот, Господа! Давайте дружно поблагодарим

Sa-Matra
photo-850.png?_r=1436454665
 
Вот и изящное решение!

  • 0

#31 OFFLINE   wolf2285

wolf2285

    Ефрейтор

  • Пользователи
  • 85 сообщений

Отправлено 20 July 2016 - 19:20

Собственный список разрешенного снаряжения создается через BIS_fnc_addVirtual*Cargo команды, вот например так:
 

	
	[missionNamespace, [
		"arifle_MXM_khk_F",
		"srifle_DMR_06_camo_F",
		"Laserdesignator_02_ghex_F"
	]] call BIS_fnc_addVirtualWeaponCargo;

	[missionNamespace, [
		"optic_Arco_ghex_F",
		"H_HelmetSpecO_blk",
		"U_C_man_sport_2_F",
		"V_TacVest_blk_POLICE",
		"NVGogglesB_gry_F"
	]] call BIS_fnc_addVirtualItemCargo;

	[missionNamespace, [
		"B_Bergen_tna_F"
	]] call BIS_fnc_addVirtualBackpackCargo;

потом открывается арсенал командой


	 ["Open", false] call BIS_fnc_arsenal;

Если нужно особое снаряжение вешать на отдельный ящик или технику, где есть арсенал то вместо missionNamespace надо вписать объект с арсеналом, тогда ему установятся эти шмотки как доступные.

 

Насчет этой фичи я в курсе.Это используется.В самом арсенале только то оружие которое нужно.Вопрос про уже сохраненное снаряжение.Эти сохранения выводятся в GUI с помощью 

_saved_loadouts_x = profileNamespace getVariable "bis_fnc_saveInventory_data";

вопрос и состоит в том чтобы отредактировать массив _saved_loadouts_x прежде чем он попадает в GUI.Все работает как и задумано.Но после редактирования полученного массива вот таким образом 

w2_black_weap = [список запрещенного оружия];
_saved_loadouts_x = profileNamespace getVariable "bis_fnc_saveInventory_data";
_result = count _saved_loadouts_x;
_res2=_result/2;
    
_select=-1;
_select_u=-1;
_select_r=-1;

hint "оружие";
for "_i" from 1 to _res2 do {
    _select = _select + 2;

    {
        if (_x in w2_black_weap) then {
            _num = ((_saved_loadouts_x select _select) select 6) find _x;
            ((_saved_loadouts_x select _select) select 6) set [_num, "rhs_weap_akms"];
        };
    } forEach ((_saved_loadouts_x select _select) select 6);
};

//uniform
hint "униформа";
for "_i" from 1 to _res2 do {
    _select_u = _select_u + 2;

    {
        if (_x in w2_black_weap) then {
            _num2= ((_saved_loadouts_x select _select_u) select 0) find _x;
            ((_saved_loadouts_x select _select_u) select 0) set [_num2, "rhs_uniform_vdv_flora"];
        };
    } forEach ((_saved_loadouts_x select _select_u) select 0);

};

//###################RPG###################################
hint "рпг";
for "_i" from 1 to _res2 do {
    _select_r=_select_r+2;

    {
        if (_x in w2_black_weap) then {
            _num_rpg= ((_saved_loadouts_x select _select_r) select 7) find _x;
            ((_saved_loadouts_x select _select_r) select 7) set [_num_rpg,"rhs_weap_rpg7"];
        };
    } forEach ((_saved_loadouts_x select _select_r) select 7);

};
 

 

 перезаписываются и сохранения и в самом арсенале.То есть если у человека в арсенале 20 сохраненных наборов для разных серверов.После открытия этого гуи все сохранения перепишутся.Все ванильное оружие во всех сохранениях заменяется на то что я прописал.В моем случае на калаши и рпг.Ну и форма из рхс.И то что он сохранял на ванильных серверах он этими сохранениями уже не сможет воспользоваться.

Прикрепленные файлы


Сообщение отредактировал wolf2285: 20 July 2016 - 19:31

  • 0

#32 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 July 2016 - 20:18

 

перезаписываются и сохранения и в самом арсенале.

 

Ну как бы уже озвучивалось, что до тех пор пока вы не вызвали команду

saveProfileNamespace;

файл профиля остаётся в неизменном виде.

Из чего следует, что изменения будут действительны только для текущей сессии.

 

Только остаётся вопрос, достаточно ли будет сделать рестарт миссии, что бы получить оригинальные данные из профиля, или придётся рестартить саму арму.


Сообщение отредактировал SteelRat: 20 July 2016 - 20:22

  • 0

#33 OFFLINE   Sa-Matra

Sa-Matra

    Ефрейтор

  • Пользователи
  • 97 сообщений

Отправлено 20 July 2016 - 20:24

_saved_loadouts_x = +(profileNamespace getVariable "bis_fnc_saveInventory_data");

  • 0

#34 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 July 2016 - 21:04

SteelRat, профиль загружается только при запуске игры/смены профиля в настройках, а сохраняется при штатном выходе или вызове той команды, которую вы написали
  • 0

#35 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 July 2016 - 21:06

_saved_loadouts_x = +(profileNamespace getVariable "bis_fnc_saveInventory_data");

а я себе всю башку поломал пытаясь вспомнить как это делается)


SteelRat, профиль загружается только при запуске игры/смены профиля в настройках, а сохраняется при штатном выходе или вызове той команды, которую вы написали

А вот что автоматом сохраняется при выходе я упустил)


  • 0

#36 OFFLINE   wolf2285

wolf2285

    Ефрейтор

  • Пользователи
  • 85 сообщений

Отправлено 20 July 2016 - 21:12

 

 

перезаписываются и сохранения и в самом арсенале.

 

Ну как бы уже озвучивалось, что до тех пор пока вы не вызвали команду

saveProfileNamespace;

файл профиля остаётся в неизменном виде.

Из чего следует, что изменения будут действительны только для текущей сессии.

 

Только остаётся вопрос, достаточно ли будет сделать рестарт миссии, что бы получить оригинальные данные из профиля, или придётся рестартить саму арму.

 

даже рестарт компа не восстанавливает))).пока писал этот код не один раз пришлось удалять .vars.Arma3Profile .Ломался арсенал.Не те данные не туда встали и в арсенале при при нажатии сохранить или загрузить выскакивала ошибка.Я после рестарта армы проверял в Виртуальном арсенале в главном окне армы в разделе обучение.Там все тоже перезаписано было.То есть изменялось глобально.


 

_saved_loadouts_x = +(profileNamespace getVariable "bis_fnc_saveInventory_data");

а я себе всю башку поломал пытаясь вспомнить как это делается)


SteelRat, профиль загружается только при запуске игры/смены профиля в настройках, а сохраняется при штатном выходе или вызове той команды, которую вы написали

А вот что автоматом сохраняется при выходе я упустил)

 

Разгадка кроется в мелочах))


  • 0

#37 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 21 July 2016 - 02:01

https://arma3.ru/for...unitov/?p=67225


  • 0




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