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


Фотография

Скрипт сохранения снаряжения.


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

#1 OFFLINE   Kraisston

Kraisston

    Ефрейтор

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

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

Здравствуйте уважаемые форумчане. Ситуация следующая мне нужен скрипт сохранения снаряжения в двух вариантах.

1 - Игрок подходит в ящикам, ящик является арсеналом. Когда игрок выбрал снаряжение и выходит из арсенала то появляется надпись о том что его снаряжение сохранилось и после смерти или воскрешения всё снаряжение остаётся таким же как его выбрал игрок в арсенале.

2 - Игрок выбирает снаряжение в арсенале и выходит из него смотря на ящик можно выбрать - сохранить снаряжение и и после смерти или воскрешения всё снаряжение остаётся таким же как его выбрал игрок в арсенале.

 

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

 


  • 0

#2 OFFLINE   dos622

dos622

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

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

Отправлено 01 August 2016 - 12:26

поиск по форуму тебе поможет.

 

https://arma3.ru/for...irovka-iunitov/


  • 0

#3 OFFLINE   Teflon

Teflon

    Мл.сержант

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

Отправлено 01 August 2016 - 12:33

вот проще, просто вбиваешь в initPlayerLocal.sqf

//[missionnamespace,"arsenalClosed",[displaynull,uinamespace getvariable ["BIS_fnc_arsenal_toggleSpace",false]]] call bis_fnc_callscriptedeventhandler;
[missionnamespace, "arsenalClosed",
{
	// Save inventory for loading after respawn
	[player, [missionnamespace, "VirtualInventory"]] call BIS_fnc_saveInventory;
}] call BIS_fnc_addScriptedEventHandler;

// On respawn
player addEventHandler ["Respawn",
{
	private ["_player", "_body"];
	_player	= _this select 0;
	_body	= _this select 1;

	if !(_player getVariable ["BIS_revive_incapacitated", false]) then
	{
		private ["_side", "_loadoutType", "_hasVirtualArsenal"];
		_side			= side group _player;
		_loadoutType 		= _player getVariable ["BIS_hvt_loadoutType", _body getVariable ["BIS_hvt_loadoutType", "Rifleman"]];
		_hasVirtualArsenal	= count (missionnamespace getvariable ["bis_fnc_saveInventory_data", []]) > 0;
		
		if ([missionnamespace, "VirtualInventory"] call BIS_fnc_inventoryExists) then
		{
			[_player, [missionnamespace, "VirtualInventory"]] call bis_fnc_loadInventory;
		}
	};
}];

  • 0

#4 OFFLINE   Kraisston

Kraisston

    Ефрейтор

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

Отправлено 01 August 2016 - 12:49

Хороший скрипт. Однако при возрождении на многие оружия из RHS CUP происходит сброс прицела.


Сообщение отредактировал Kraisston: 01 August 2016 - 13:04

  • 0

#5 OFFLINE   Teflon

Teflon

    Мл.сержант

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

Отправлено 01 August 2016 - 13:09

Хороший скрипт. Однако при возрождении на многие оружия из RHS CUP происходит сброс прицела.

не замечал такого, думаю это не критично


  • 0

#6 OFFLINE   Kraisston

Kraisston

    Ефрейтор

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

Отправлено 01 August 2016 - 13:23

 

Хороший скрипт. Однако при возрождении на многие оружия из RHS CUP происходит сброс прицела.

не замечал такого, думаю это не критично

 

Согласен. Спасибо большое за скрипт. Ты упростил мне жизнь :)


  • 0

#7 OFFLINE   Teflon

Teflon

    Мл.сержант

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

Отправлено 01 August 2016 - 13:28

Согласен. Спасибо большое за скрипт. Ты упростил мне жизнь :)

Сам когда то искал, чего пропадать найденому))


  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 01 August 2016 - 23:38

 

вот проще, просто вбиваешь в initPlayerLocal.sqf

//[missionnamespace,"arsenalClosed",[displaynull,uinamespace getvariable ["BIS_fnc_arsenal_toggleSpace",false]]] call bis_fnc_callscriptedeventhandler;
[missionnamespace, "arsenalClosed",
{
	// Save inventory for loading after respawn
	[player, [missionnamespace, "VirtualInventory"]] call BIS_fnc_saveInventory;
}] call BIS_fnc_addScriptedEventHandler;

// On respawn
player addEventHandler ["Respawn",
{
	private ["_player", "_body"];
	_player	= _this select 0;
	_body	= _this select 1;

	if !(_player getVariable ["BIS_revive_incapacitated", false]) then
	{
		private ["_side", "_loadoutType", "_hasVirtualArsenal"];
		_side			= side group _player;
		_loadoutType 		= _player getVariable ["BIS_hvt_loadoutType", _body getVariable ["BIS_hvt_loadoutType", "Rifleman"]];
		_hasVirtualArsenal	= count (missionnamespace getvariable ["bis_fnc_saveInventory_data", []]) > 0;
		
		if ([missionnamespace, "VirtualInventory"] call BIS_fnc_inventoryExists) then
		{
			[_player, [missionnamespace, "VirtualInventory"]] call bis_fnc_loadInventory;
		}
	};
}];

 

Вот ещё проще

// Save arsenal loadout
[	
	missionnamespace, 
	"arsenalClosed",
	{
		VirtualInventoryLoadout = getUnitLoadout player;
	}
] call BIS_fnc_addScriptedEventHandler;

// On respawn
player addEventHandler ["Respawn",
{
	private ["_player"];
	_player	= _this select 0;

	if !(_player getVariable ["BIS_revive_incapacitated", false]) then {
		if !(isNil "VirtualInventoryLoadout") then {
			_player setUnitLoadout VirtualInventoryLoadout;
		};
	};
}];

  • 1

#9 OFFLINE   kustarnik4

kustarnik4

    Рядовой

  • Пользователи (ВсВт-З)
  • 13 сообщений
  • Откуда:Днипро (Днепропетровск)
  • Отряд:МПУ

Отправлено 12 August 2016 - 15:11

вот проще, просто вбиваешь в initPlayerLocal.sqf

//[missionnamespace,"arsenalClosed",[displaynull,uinamespace getvariable ["BIS_fnc_arsenal_toggleSpace",false]]] call bis_fnc_callscriptedeventhandler;
[missionnamespace, "arsenalClosed",
{
	// Save inventory for loading after respawn
	[player, [missionnamespace, "VirtualInventory"]] call BIS_fnc_saveInventory;
}] call BIS_fnc_addScriptedEventHandler;

// On respawn
player addEventHandler ["Respawn",
{
	private ["_player", "_body"];
	_player	= _this select 0;
	_body	= _this select 1;

	if !(_player getVariable ["BIS_revive_incapacitated", false]) then
	{
		private ["_side", "_loadoutType", "_hasVirtualArsenal"];
		_side			= side group _player;
		_loadoutType 		= _player getVariable ["BIS_hvt_loadoutType", _body getVariable ["BIS_hvt_loadoutType", "Rifleman"]];
		_hasVirtualArsenal	= count (missionnamespace getvariable ["bis_fnc_saveInventory_data", []]) > 0;
		
		if ([missionnamespace, "VirtualInventory"] call BIS_fnc_inventoryExists) then
		{
			[_player, [missionnamespace, "VirtualInventory"]] call bis_fnc_loadInventory;
		}
	};
}];


А как сделать что бы не заглядывая в арсенал, сохранялся тот который был до смерти?

Сообщение отредактировал kustarnik4: 12 August 2016 - 15:11

  • 0

#10 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 12 August 2016 - 16:11

А как сделать что бы не заглядывая в арсенал, сохранялся тот который был до смерти?

Нужно при смерти сохранить инвентарь:

player addEventHandler ["Killed", {[player, [missionNamespace, "VirtualInventory"]] call BIS_fnc_saveInventory; true}];

А вообще, есть команды

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

и

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

.


  • 0

#11 OFFLINE   kustarnik4

kustarnik4

    Рядовой

  • Пользователи (ВсВт-З)
  • 13 сообщений
  • Откуда:Днипро (Днепропетровск)
  • Отряд:МПУ

Отправлено 12 August 2016 - 16:15

А как сделать что бы не заглядывая в арсенал, сохранялся тот который был до смерти?

Нужно при смерти сохранить инвентарь:
player addEventHandler ["Killed", {[player, [missionNamespace, "VirtualInventory"]] call BIS_fnc_saveInventory; true}];
А вообще, есть команды

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

и

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

.


В инициализации прописать в отдельности к каждому юниту или это можно сделать в initPlayerLocal.sqf
  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 12 August 2016 - 16:20

В инициализации прописать в отдельности к каждому юниту или это можно сделать в initPlayerLocal.sqf

initPlayerLocal.sqf исполняется у каждого игрока, поэтому, если код вписать в этот файл, то обработчик события будет добавлен у каждого игрока. Поэтому - в initPlayerLocal.sqf.
  • 0

#13 OFFLINE   kustarnik4

kustarnik4

    Рядовой

  • Пользователи (ВсВт-З)
  • 13 сообщений
  • Откуда:Днипро (Днепропетровск)
  • Отряд:МПУ

Отправлено 12 August 2016 - 18:43

 

В инициализации прописать в отдельности к каждому юниту или это можно сделать в initPlayerLocal.sqf

initPlayerLocal.sqf исполняется у каждого игрока, поэтому, если код вписать в этот файл, то обработчик события будет добавлен у каждого игрока. Поэтому - в initPlayerLocal.sqf.

 

Сохранение у игроков не происходит, может что то я не так делаю?:nsUADdantOg.jpg


  • 0

#14 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 12 August 2016 - 19:29

Сохранение у игроков не происходит, может что то я не так делаю?:nsUADdantOg.jpg

Конечно, вы сохраняете инвентарь в переменную _loadout и тут же его восстанавливаете, а вам надо сохранить при смерти и восстановить при респе:

player addEventHandler ["Killed", {loadout = getUnitLoadout player; true}];
player addEventHandler ["Respawn", {player setUnitLoadout loadout; loadout = nil; true}];

Для кого приводились эти примеры: https://arma3.ru/for...iia/#entry67531 и https://arma3.ru/for...iia/#entry67866 ?


  • 1

#15 OFFLINE   kustarnik4

kustarnik4

    Рядовой

  • Пользователи (ВсВт-З)
  • 13 сообщений
  • Откуда:Днипро (Днепропетровск)
  • Отряд:МПУ

Отправлено 14 August 2016 - 11:24

Огромное спасибо!!! Все идеально работает  :yahoo: . До меня дошло  :)


  • 0

#16 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 14 August 2016 - 18:41

Для инфы.

Этот хандлер

player addEventHandler ["Respawn", {player setUnitLoadout loadout; loadout = nil; true}];

так же срабатывает, в МР, при первом спавне персонажа, то есть когда игрок присоединяется к игре, этот нюанс нужно иметь в виду.

 

Я точно помню что дело обстоит именно так при типе респавна "Base".


  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 14 August 2016 - 19:02

Этот хандлер

player addEventHandler ["Respawn", {player setUnitLoadout loadout; loadout = nil; true}];
так же срабатывает, в МР, при первом спавне персонажа, то есть когда игрок присоединяется к игре, этот нюанс нужно иметь в виду.

 

player addEventHandler ["Respawn", {if (!(isNil "loadout")) then {player setUnitLoadout loadout; loadout = nil;}; true}];

  • 1

#18 OFFLINE   Bl2ck_Dog

Bl2ck_Dog

    Рядовой

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

Отправлено 29 November 2016 - 00:53

Доброго времени суток, коллеги. Я с похожей проблемой: пытаюсь сделать простейший скрипт, который сохранял был снаряжения в предалах миссии: т.е. не только после респа, но и после дисконнекта.

 

 

Что пока имею:

 

Загрузка в onPlayerRespawn.sqf

//Load or Give Standard Loadout////////////////////////////////////////////////////////////////////
WaitUntil{(!isNull player) && ((getPlayerUID player) != "")};

if !(isNil {missionNamespace getVariable format ["%1_loadout",getPlayerUID player]}) then {
player setUnitLoadout (missionNamespace getVariable format ["%1_loadout",getPlayerUID player]);
} else {
0 = [player] call compile preprocessFileLineNumbers "scripts\loadouts.sqf";
missionNamespace setVariable [format ["%1_loadout",getPlayerUID player],getUnitLoadout player];
};

Сохранение в onPlayerKilled.sqf

//Save Loadout/////////////////////////////////////////////////////////////////////////////////////
missionNamespace setVariable [format ["%1_loadout",getPlayerUID player],getUnitLoadout player];

Собственно, работает нормально, кроме загрузки после дисконнекта.

Шарил по форумам, нашел хинт про задержку перед запросом ID, т.к. без нее скрипт срабатывал раньше, чем подгружался ID. Однако, не помогло... Где-то, похоже, сильно туплю с локальностью переменной.


Сообщение отредактировал Bl2ck_Dog: 29 November 2016 - 00:54

  • 0

#19 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 29 November 2016 - 02:03

кроме загрузки после дисконнекта

Естественно, missionNamespace ведь после подключения пустое. Используй

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

.


  • 0

#20 OFFLINE   Bl2ck_Dog

Bl2ck_Dog

    Рядовой

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

Отправлено 30 November 2016 - 01:39

Спасибо, работает.


  • 0




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