Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
123new

DayZ Standalone v0.62.142963 Server Files + рабочий респавн персонажа и лута

Рекомендованные сообщения

BorizzK не вижу таких вызовов, что странно:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte

123new 

Да

Точно

Ща порыл историю правок и вспомнил!

Это я тренькался с вызовами enscript в конце апреля

А потом забил

 

+Сегодня

Разобрался с некоторыми недочетами в своих скриптах обработки смерти

Сегодня перевыложу

 

+ придумал как еще с пользой можно использовать enscript на сервере (спасибо за наводку Мизеву)

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK ждем) заодно может сам чему обучусь на твоих примерах))

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обнаружил

При респавне (не через выход и последующий вход когда окружение пользователя полностью убивается) на стороне клиента камера да же убитая через camdestroy не всегда убивается корректно и после респавна иногда создается некорректно привязываясь к убийце-обьекту из предыдущей сессии или получая изначально некорректные координаты...

Потому в процедуре респавна добавил камера = objNull;

Теперь вроде почти все ОК.

Осталось оттестировать миссию с нормальным количеством игроков и разобраться с init_CustomPlayerMonitor.sqf

Состояние ванкунсии оно отрабатывает, а вот выход из него - странно, но про выход в лог не пишет, хотя команда на это есть...

 

Немного обновленный вариант для тестирования...

https://drive.google.com/open?id=137qFg9J7GQtf9Z6EwBle3GSJsJpjKkWB

 

 

про enscript  идея такая

накатать процедуру которая в цикле с задержкой или по событию читает текстовый файл (с кодом)из папки  загнав его в переменную sqf (или минуя sqf)

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

мы получаем возможность мутить много интересного!!!

именно так (по словам знающих) реализовано меню админа на 420gaming через меню компаса и книги в инвентаре

Все наверное видели это меню от DaOne на ragezone (ютьюбе). Кодом он гад не делится (((

 

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

 

Но над реализацией придется помучаться...

 

 

 

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обновил миссию, исправив некоторые глюки с камерой (глюки кстати из-за несовершенства движка)

Вроде все работает как задумано

 

https://drive.google.com/open?id=1UpMPMbnS8yHkRJy_7Jhbb9oU1-YOIdEV

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Миссия с последним вариантом камер

Все глюки с камерами о которых Вы не знаете итп исправлены и тп

 

https://drive.google.com/open?id=1YIM7aSaaLNp5NxBpLptFiyn_XCg5EO0f

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сегодня немного допилил тестовый код заменяющий barain_player_client.fsm (работает на стороне клиента!)

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

Посмотреть что к чему

Сегодня немного подкручу и выложу с миссией

 

код для ознакомления

 

//BY BORIZZ.K (s-platoon.ru)

private ["_id","_agent","_timeid"];

_id = _this select 0;
_agent = _this select 1;
_timeid = serverTime;

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init start. Time: %4",_timeid,_agent,_id,serverTime];

[_id,_timeid] spawnForClient {

	_id = _this select 0;
	_timeid = _this select 1;
	
	diag_log format [" CLIENT DIAG: %1:",_timeid];
	diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init. Time: %4",_timeid,player,_id,serverTime];

	// BEGIN: КОД ИНИЦИАЛИЗАЦИИ заменяющий  brain_player_client.fsm
	
	//INIT:
	DZ_Brightness = 1;
	DZ_Contrast = 1;
	DZ_dynamicBlur = 0;
	DZ_colorSat = 1;
	keyholded = 0;
	keypresscounter = 0;
	keyup = true;
	strugglecount=20;
	//INIT:
	
	//DONE:
	"effectDazed" addPublicVariableEventHandler
	{
		call dayz_bulletHit;
		effectDazed = false;
	};
	"actionRestrained"  addPublicVariableEventHandler
	{
		[(_this select 1)] call event_playerRestrained;
	};	
	"makeNote" addPublicVariableEventHandler
	{
		notepen = (_this select 1) select 0;
		notepaper = (_this select 1) select 1;
		callFunction ["EnfWriteNote", notepaper, notepen];
	};
	"displayNote" addPublicVariableEventHandler
	{
		callFunction ["EnfReadNote", (_this select 1)];
	};
	"myNotifiers" addPublicVariableEventHandler {};

	_vm = player spawn
	{
		while {alive _this} do
		{
			_this call rainCheck;
			sleep 1;
		};
	};
	
	// END: КОД ИНИЦИАЛИЗАЦИИ заменяющий  brain_player_client.fsm

	//DONE:
	CustomPlayerMonitor = [_id,_timeid,player] spawn {

		_id = _this select 0;
		_timeid = _this select 1;
		_body = _this select 2;
		_brokenFree = true;
		player setCaptive false;
		player setVariable ["restrainedwith",0];
		_player_CBS = false;

		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor start work. Time: %4",_timeid,player,_id,serverTime];

		//NORMAL STATE:
		while {alive player} do
		{
			// BEGIN: КОД ОБРАБОТКИ СОСТОЯНИЙ ЗАМЕНЯЮЩИЙ brain_player_client.fsm
			
			//sync character
			if (isMultiplayer) then
			{
				_attachments = itemsInInventory (player itemInSlot "shoulder");
				_attachmentsStr = [];
				{
					_attachmentsStr set [count _attachmentsStr,typeOf _x];
				} forEach _attachments;
				profileNamespace setVariable ["lastAttachments",_attachmentsStr];
			};

			//Health
			_health = player getVariable["health",5000];
			_blood =  player getVariable["blood",5000];
			player call rainCheck;

			if ((player itemInSlot "headgear") isKindOf "Cover_BurlapSack") then 
			{
				if (!_player_CBS) then {
					setEVUser -5;
					1 fadeMusic 0.4;
					1 fadeSound 0.4;
					1 fadeSpeech 0.4;
					1 fadeRadio 0.4;
					_player_CBS = true;
				};
			}
			else
			{
				if (_player_CBS) then {
					setEVUser 0;
					1 fadeMusic 1;
					1 fadeSound 1;
					1 fadeSpeech 1;
					1 fadeRadio 1;
					_player_CBS = false;
				};
			};
			
			//UNCONSCIOUS:
			if (lifeState player == "UNCONSCIOUS") then 
			{
				titleText ["You are unconscious","PLAIN",10e10];
				player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
				player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
				diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player in unconscious state. Time: %4",_timeid,player,_id,serverTime];
				while {lifeState player == "UNCONSCIOUS"} do
				{
					titleText ["You are unconscious","PLAIN",10e10];
					sleep 1;
				};
				titleText ["","PLAIN",10e10];
				if (alive player) then {
					titleText ["You are come out from unconscious","PLAIN",10e10];
					player setVariable ["unconscious",false]; //TEST // see event_playerKilled.sqf
					player setVariable ["isUnconscious",false]; //TEST // see event_playerKilled.sqf
					diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player come out from unconscious state. Time: %4",_timeid,player,_id,serverTime];
				};
			};
			//UNCONSCIOUS:

			//CAPTIVE: / RESTRAINED:
			if (captive player) then 
			{
				TitleText ["I am restrained","PLAIN",1];
				player setVariable ["restrainedwith",1];
				msg_break =
				{
					TitleText ["I am breaking out","PLAIN",0.25];
				};
				struggle_keyAction1 = player addEventHandler ["AnimDone","if((captive player))then{_type = _this select 1;if((_type == 'PneRestrainHands_gettingFree2' or _type == 'pknlrestrainhands_loop2') && keyup) then{call msg_break;keypresscounter = keypresscounter+1;keyup=false;};if((_type == 'PneRestrainHands_gettingFree' or _type == 'pknlrestrainhands_loop') && !(keyup))then{call msg_break;keypresscounter = keypresscounter+1;keyup=true;};};"];
				_brokenFree = false;
				strugglecount = 20;
							
				while {captive player} do
				{
					TitleText ["I am restrained","PLAIN",1];
					if (lifeState player == "UNCONSCIOUS") exitWith 
					{
						player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
						player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
					};
					if (keypresscounter > strugglecount) exitWith
					{
						player setCaptive false;
						player setVariable ["restrainedwith",0];
						_brokenFree = true;
					};
					sleep 1;
				};
				
				if !(captive player) then {
					TitleText ["I am no longer restrained", "PLAIN",1];
					keypresscounter=0;
					player playAction "cancelAction";
					actionReleased = player;
					publicVariableServer 'actionReleased';
					_brokenFree = true;
					player setCaptive false;
					player setVariable ["restrainedwith",0];
				};
			};
			//CAPTIVE: / RESTRAINED:

			// END: КОД  ОБРАБОТКИ СОСТОЯНИЙ ЗАМЕНЯЮЩИЙ brain_player_client.fsm 

			sleep DZ_TICK;
		};
		
		if !(alive player) then 
		{
			titleText ["You are dead","BLACK FADED",10e10];
			diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player died. Time: %4",_timeid,player,_id,serverTime];
		};
		
		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor end work. Time: %4",_timeid,player,_id,serverTime];
	};
};

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init finish. Time: %4",_timeid,_agent,_id,serverTime];

Есть еще над чем поработать но в целом работает как надо на первый взгляд...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сори не не по теме не слежу за DayZ. Но оригинальные серверных файлов все по прежнему нету в доступе ? Только аренда готового сервера у разработчик ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
27 минут назад, DimitriPokki сказал:

Сори не не по теме не слежу за DayZ. Но оригинальные серверных файлов все по прежнему нету в доступе ? Только аренда готового сервера у разработчик ?

Именно дейз, или СА?

Оригинальных вроде нет, ни того ни другого.

А так уже 100 лет как и то и другое де-факто есть)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima Да именно DayZ SA потому что говорили еще до старта первой альфы что они никогда мол сервера не выкатят в доступ и ток аренда у них, вот и стало интересно есть файлы слитые какие либо или что.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

DimitriPokki слитые есть, в разделе этого форума по DayZ Standalone как раз таковые и выложены. Официальных релизов таковых не было и не будет минимум до выхода 0.63 на стабильную ветку

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

123new Спасибо затестю на локалку интересно чего наворотили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, DimitriPokki сказал:

123new Спасибо затестю на локалку интересно чего наворотили.

да ниче не натворили собсно. - а3 теже яйца только в профиль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima Ну хотя в принципе ожидаемо по тому состоянию игры в стиме одни тест версии. Покупал игру еще по пред заказу до выхода но видимо зря сколько лет прошло и толку мало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Финальный вариант замены brain_player_client.fsm который по команде с сервера вызывается на клиенте из клиентских файлов.

Требовалось убрать затемнения экрана при смерти, ванкунсии итп, для создания анимированных экранов с камерой, а все эти обработки содержатся в brain_player_client.fsm на стороне клиента.

Поскольку внести изменения в вызываемый на клиенте brain_player_client.fsm не представляется возможным, то пришлось изобретать замену. Да и для моддинга это пригодится. Можно отключить пар из пасти игрока и тд ип.

 

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

 

 Подключение

1. В MPMissions\dayz_Auto.ChernarusPlus\scripts\compiles.sqf в самом низу добавляем

init_CustomPlayerMonitor = compile preprocessFileLineNumbers "scripts\custom\init_CustomPlayerMonitor.sqf";

2. В MPMissions\dayz_Auto.ChernarusPlus\scripts\init\init_newBody.sqf

вместо

[_id] spawnForClient compile "player execFSM '\dz\modulesDayZ\fsm\brain_player_client.fsm'";

прописываем это

[_id,_agent] call init_CustomPlayerMonitor;

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

 

Собственно код init_CustomPlayerMonitor.sqf

//BY BORIZZ.K (s-platoon.ru)
//V4

private ["_id","_agent","_timeid"];

_id = _this select 0;
_agent = _this select 1;
_timeid = serverTime;

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init start. Time: %4",_timeid,_agent,_id,serverTime];

[_id,_timeid] spawnForClient {

	//terminate CustomPlayerMonitor;

	_id = _this select 0;
	_timeid = _this select 1;
	
	diag_log format [" CLIENT DIAG: %1:",_timeid];
	diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init. Time: %4",_timeid,player,_id,serverTime];

	// BEGIN: Init code replacement brain_player_client.fsm
	
	//INIT:
	DZ_Brightness = 1;
	DZ_Contrast = 1;
	DZ_dynamicBlur = 0;
	DZ_colorSat = 1;
	keyholded = 0;
	keypresscounter = 0;
	keyup = true;
	strugglecount=20;
	//INIT END.
	
	//DONE:
	"effectDazed" addPublicVariableEventHandler
	{
		call dayz_bulletHit;
		effectDazed = false;
	};
	"actionRestrained"  addPublicVariableEventHandler
	{
		[(_this select 1)] call event_playerRestrained;
	};	
	"makeNote" addPublicVariableEventHandler
	{
		notepen = (_this select 1) select 0;
		notepaper = (_this select 1) select 1;
		callFunction ["EnfWriteNote", notepaper, notepen];
	};
	"displayNote" addPublicVariableEventHandler
	{
		callFunction ["EnfReadNote", (_this select 1)];
	};
	"myNotifiers" addPublicVariableEventHandler {};

	_vm = player spawn
	{
		while {alive _this} do
		{
			_this call rainCheck;
			sleep 1;
		};
	};
	//DONE END.
	
	// END: Init code replacement brain_player_client.fsm

	//NORMAL STATE:
	CustomPlayerMonitor = [_id,_timeid,player] spawn {

		_id = _this select 0;
		_timeid = _this select 1;
		_body = _this select 2;
		_brokenFree = true;
		player setCaptive false;
		player setVariable ["restrainedwith",0];
		_player_CBS = false;
		
		_updatePPEffects = {
			//Update PP effects 
			//The effect of reducing health in case of injury, loss of blood, health, etc. (loss of color, blur, etc). Disconnect if you do not need to. Called below.
			//Health
			_body = _this;
			_health = player getVariable["health",5000];
			_blood =  player getVariable["blood",5000];
			DZ_colorSat = ((_blood/5000));
			DZ_dynamicBlur = ((1 - (_health/5000)) * 8);
			if (ppEffectCommitted "DynamicBlur") then
			{
				"DynamicBlur" ppEffectAdjust [DZ_dynamicBlur];
				"DynamicBlur" ppEffectCommit 0;
			};
			"ColorCorrections" ppEffectAdjust [DZ_Brightness, DZ_Contrast, 0, [1, 1, 1,0], [1, 1, 1, DZ_colorSat], [0.3, 0.59, 0.11, 0.0]];
			"ColorCorrections" ppEffectCommit 0;
		};

		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor start work. Time: %4",_timeid,player,_id,serverTime];

		//NORMAL STATE:
		while {alive player} do
		{
			// BEGIN: Сode replacement brain_player_client.fsm
			
			//sync character
			if (isMultiplayer) then
			{
				_attachments = itemsInInventory (player itemInSlot "shoulder");
				_attachmentsStr = [];
				{
					_attachmentsStr set [count _attachmentsStr,typeOf _x];
				} forEach _attachments;
				profileNamespace setVariable ["lastAttachments",_attachmentsStr];
			};
			
			player call rainCheck;
			player call _updatePPEffects;
			
			//Burlapsack
			if ((player itemInSlot "headgear") isKindOf "Cover_BurlapSack") then 
			{
				//Put on the head: dark screen,muffled sounds
				if (!_player_CBS) then {
					setEVUser -5;
					1 fadeMusic 0.4;
					1 fadeSound 0.4;
					1 fadeSpeech 0.4;
					1 fadeRadio 0.4;
					_player_CBS = true;
				};
			}
			else
			{
				//Removed from head: normal screen and sounds
				if (_player_CBS) then {
					setEVUser 0;
					1 fadeMusic 1;
					1 fadeSound 1;
					1 fadeSpeech 1;
					1 fadeRadio 1;
					_player_CBS = false;
				};
			};
			
			//UNCONSCIOUS:
			if (lifeState player == "UNCONSCIOUS") then 
			{
				titleText ["You are unconscious","PLAIN",10e10];
				player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
				player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
				diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player in unconscious state. Time: %4",_timeid,player,_id,serverTime];
				while {lifeState player == "UNCONSCIOUS"} do
				{
					titleText ["You are unconscious","PLAIN",10e10];
					sleep 1;
					player call _updatePPEffects;
				};
				titleText ["","PLAIN",10e10];
				if (alive player) then {
					titleText ["You are come out from unconscious","PLAIN",10e10];
					player setVariable ["unconscious",false]; //TEST // see event_playerKilled.sqf
					player setVariable ["isUnconscious",false]; //TEST // see event_playerKilled.sqf
					diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player come out from unconscious state. Time: %4",_timeid,player,_id,serverTime];
				};
			};
			//UNCONSCIOUS:

			//CAPTIVE: / RESTRAINED:
			if (captive player) then 
			{
				TitleText ["I am restrained","PLAIN",1];
				player setVariable ["restrainedwith",1];
				msg_break =
				{
					TitleText ["I am breaking out","PLAIN",0.25];
				};
				struggle_keyAction1 = player addEventHandler ["AnimDone","if((captive player))then{_type = _this select 1;if((_type == 'PneRestrainHands_gettingFree2' or _type == 'pknlrestrainhands_loop2') && keyup) then{call msg_break;keypresscounter = keypresscounter+1;keyup=false;};if((_type == 'PneRestrainHands_gettingFree' or _type == 'pknlrestrainhands_loop') && !(keyup))then{call msg_break;keypresscounter = keypresscounter+1;keyup=true;};};"];
				_brokenFree = false;
				strugglecount = 20;
							
				while {captive player} do
				{
					TitleText ["I am restrained","PLAIN",1];
					if (lifeState player == "UNCONSCIOUS") exitWith 
					{
						player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
						player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
					};
					if (keypresscounter > strugglecount) exitWith {};
					sleep 1;
					player call _updatePPEffects;
				};
				
				if ((keypresscounter > strugglecount) or !(captive player)) then 
				{
					TitleText ["I am no longer restrained", "PLAIN",1];
					keypresscounter=0;
					player playAction "cancelAction";
					actionReleased = player;
					publicVariableServer 'actionReleased';
					_brokenFree = true;
					player setCaptive false;
					player setVariable ["restrainedwith",0];
				};
			};
			//CAPTIVE: / RESTRAINED:

			// END: Сode replacement brain_player_client.fsm 

			sleep DZ_TICK;
		};
		
		if !(alive player) then 
		{
			titleText ["You are dead","BLACK FADED",10e10];
			diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player died. Time: %4",_timeid,player,_id,serverTime];
		};
		
		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor end work. Time: %4",_timeid,player,_id,serverTime];
	};
};

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init finish. Time: %4",_timeid,_agent,_id,serverTime];

diag_log в теле spawnForClient можно смело убирать - он там для диагностики

 

Доработанный код (в предыдущем забыл добавить пар изо рта) + вынес его, а так же проверку/обработку мешка на голове в отдельные процедуры.

 

//BY BORIZZ.K (s-platoon.ru)
//V4

private ["_id","_agent","_timeid"];

_id = _this select 0;
_agent = _this select 1;
_timeid = serverTime;

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init start. Time: %4",_timeid,_agent,_id,serverTime];

[_id,_timeid] spawnForClient {

	//terminate CustomPlayerMonitor;

	_id = _this select 0;
	_timeid = _this select 1;
	
	diag_log format [" CLIENT DIAG: %1:",_timeid];
	diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init. Time: %4",_timeid,player,_id,serverTime];

	// BEGIN: Init code replacement brain_player_client.fsm
	
	//INIT:
	DZ_Brightness = 1;
	DZ_Contrast = 1;
	DZ_dynamicBlur = 0;
	DZ_colorSat = 1;
	keyholded = 0;
	keypresscounter = 0;
	keyup = true;
	strugglecount=20;
	//INIT END.
	
	//DONE:
	"effectDazed" addPublicVariableEventHandler
	{
		call dayz_bulletHit;
		effectDazed = false;
	};
	"actionRestrained"  addPublicVariableEventHandler
	{
		[(_this select 1)] call event_playerRestrained;
	};	
	"makeNote" addPublicVariableEventHandler
	{
		notepen = (_this select 1) select 0;
		notepaper = (_this select 1) select 1;
		callFunction ["EnfWriteNote", notepaper, notepen];
	};
	"displayNote" addPublicVariableEventHandler
	{
		callFunction ["EnfReadNote", (_this select 1)];
	};
	"myNotifiers" addPublicVariableEventHandler {};

	_vm = player spawn
	{
		while {alive _this} do
		{
			_this call rainCheck;
			sleep 1;
		};
	};
	//DONE END.
	
	// END: Init code replacement brain_player_client.fsm

	//NORMAL STATE:
	CustomPlayerMonitor = [_id,_timeid,player] spawn {

		_id = _this select 0;
		_timeid = _this select 1;
		_body = _this select 2;
		_brokenFree = true;
		player setCaptive false;
		player setVariable ["restrainedwith",0];
		_player_CBS = false;
		player_CBS = false;
		
		_updatePPEffects = {
			//Update PP effects 
			//The effect of reducing health in case of injury, loss of blood, health, etc. (loss of color, blur, etc). Disconnect if you do not need to. Called below.
			//Health
			_body = _this;
			_health = player getVariable["health",5000];
			_blood =  player getVariable["blood",5000];
			DZ_colorSat = ((_blood/5000));
			DZ_dynamicBlur = ((1 - (_health/5000)) * 8);
			if (ppEffectCommitted "DynamicBlur") then
			{
				"DynamicBlur" ppEffectAdjust [DZ_dynamicBlur];
				"DynamicBlur" ppEffectCommit 0;
			};
			"ColorCorrections" ppEffectAdjust [DZ_Brightness, DZ_Contrast, 0, [1, 1, 1,0], [1, 1, 1, DZ_colorSat], [0.3, 0.59, 0.11, 0.0]];
			"ColorCorrections" ppEffectCommit 0;
		};
		
		_breathingParticle = {
			_body = _this;
			_breathingParticleSource = player getVariable ["breathingParticleSource",objNull];
			if (airTemperature < DZ_DEW_POINT) then
			{
				if (isNull _breathingParticleSource) then
				{
					player call effect_createBreathFog;
				};
			}
			else
			{
				if (!isNull _breathingParticleSource) then
				{
					deleteVehicle _breathingParticleSource;
					player setVariable ["breathingParticleSource",objNull];
				};
			};
		};

		_burlapSackCheck = {
			if ((player itemInSlot "headgear") isKindOf "Cover_BurlapSack") then 
			{
				//Put on the head: dark screen,muffled sounds
				if (!player_CBS) then {
					setEVUser -5;
					1 fadeMusic 0.4;
					1 fadeSound 0.4;
					1 fadeSpeech 0.4;
					1 fadeRadio 0.4;
					player_CBS = true;
				};
			}
			else
			{
				//Removed from head: normal screen and sounds
				if (player_CBS) then {
					setEVUser 0;
					1 fadeMusic 1;
					1 fadeSound 1;
					1 fadeSpeech 1;
					1 fadeRadio 1;
					player_CBS = false;
				};
			};

		};

		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor start work. Time: %4",_timeid,player,_id,serverTime];

		//NORMAL STATE:
		while {alive player} do
		{
			// BEGIN: Сode replacement brain_player_client.fsm
			
			//sync character
			if (isMultiplayer) then
			{
				_attachments = itemsInInventory (player itemInSlot "shoulder");
				_attachmentsStr = [];
				{
					_attachmentsStr set [count _attachmentsStr,typeOf _x];
				} forEach _attachments;
				profileNamespace setVariable ["lastAttachments",_attachmentsStr];
			};
			
			player call rainCheck;
			player call _updatePPEffects;
			
			//Burlapsack
			/*
			if ((player itemInSlot "headgear") isKindOf "Cover_BurlapSack") then 
			{
				//Put on the head: dark screen,muffled sounds
				if (!_player_CBS) then {
					setEVUser -5;
					1 fadeMusic 0.4;
					1 fadeSound 0.4;
					1 fadeSpeech 0.4;
					1 fadeRadio 0.4;
					_player_CBS = true;
				};
			}
			else
			{
				//Removed from head: normal screen and sounds
				if (_player_CBS) then {
					setEVUser 0;
					1 fadeMusic 1;
					1 fadeSound 1;
					1 fadeSpeech 1;
					1 fadeRadio 1;
					_player_CBS = false;
				};
			};
			*/
			player call _burlapSackCheck;
			player call _breathingParticle;
			
			//UNCONSCIOUS:
			if (lifeState player == "UNCONSCIOUS") then 
			{
				titleText ["You are unconscious","PLAIN",10e10];
				player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
				player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
				diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player in unconscious state. Time: %4",_timeid,player,_id,serverTime];
				while {lifeState player == "UNCONSCIOUS"} do
				{
					titleText ["You are unconscious","PLAIN",10e10];
					sleep 1;
					player call _updatePPEffects;
				};
				titleText ["","PLAIN",10e10];
				if (alive player) then {
					titleText ["You are come out from unconscious","PLAIN",10e10];
					player setVariable ["unconscious",false]; //TEST // see event_playerKilled.sqf
					player setVariable ["isUnconscious",false]; //TEST // see event_playerKilled.sqf
					diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player come out from unconscious state. Time: %4",_timeid,player,_id,serverTime];
				};
			};
			//UNCONSCIOUS:

			//CAPTIVE: / RESTRAINED:
			if (captive player) then 
			{
				TitleText ["I am restrained","PLAIN",1];
				player setVariable ["restrainedwith",1];
				msg_break =
				{
					TitleText ["I am breaking out","PLAIN",0.25];
				};
				struggle_keyAction1 = player addEventHandler ["AnimDone","if((captive player))then{_type = _this select 1;if((_type == 'PneRestrainHands_gettingFree2' or _type == 'pknlrestrainhands_loop2') && keyup) then{call msg_break;keypresscounter = keypresscounter+1;keyup=false;};if((_type == 'PneRestrainHands_gettingFree' or _type == 'pknlrestrainhands_loop') && !(keyup))then{call msg_break;keypresscounter = keypresscounter+1;keyup=true;};};"];
				_brokenFree = false;
				strugglecount = 20;
							
				while {captive player} do
				{
					TitleText ["I am restrained","PLAIN",1];
					if (lifeState player == "UNCONSCIOUS") exitWith 
					{
						player setVariable ["unconscious",true]; //TEST // see event_playerKilled.sqf
						player setVariable ["isUnconscious",true]; //TEST // see event_playerKilled.sqf
					};
					if (keypresscounter > strugglecount) exitWith {};
					sleep 1;
					player call rainCheck;
					player call _updatePPEffects;
					player call _burlapSackCheck;
					player call _breathingParticle;
				};
				
				if ((keypresscounter > strugglecount) or !(captive player)) then 
				{
					TitleText ["I am no longer restrained", "PLAIN",1];
					keypresscounter=0;
					player playAction "cancelAction";
					actionReleased = player;
					publicVariableServer 'actionReleased';
					_brokenFree = true;
					player setCaptive false;
					player setVariable ["restrainedwith",0];
				};
			};
			//CAPTIVE: / RESTRAINED:

			// END: Сode replacement brain_player_client.fsm 

			sleep DZ_TICK;
		};
		
		if !(alive player) then 
		{
			titleText ["You are dead","BLACK FADED",10e10];
			diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Player died. Time: %4",_timeid,player,_id,serverTime];
		};
		
		diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor end work. Time: %4",_timeid,player,_id,serverTime];
	};
};

diag_log format [" CLIENT DIAG: %1: PLAYER MONITOR: AGENT: %2. ID: %3. Client side custom player monitor init finish. Time: %4",_timeid,_agent,_id,serverTime];

_burlapSackCheck - проверка мешка на бошке и обработка состояния

_breathingParticle - пар изо рта

rainCheck - стандартная процедура проверки на состояние промокания и тп

_updatePPEffects - в зависимости от состояния здоровья/крови меняется цветность/мутность экрана

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

DimitriPokki Ну зато, они разыгрывали 500.000 евро за какие то модельки в аддоне.

Тупо просрали пол ляма евро, на моддинг) И отдали его какому то парняге, который добавил им техники)))

Вместо этого наняли был человек 6-8 скриптеров и пару моделеров, с зп 2к евро в месяц, этой суммы хватило бы на зп на 2 года.

За 2 года при таком сотрудничестве выпустили бы замечательный продукт, если конечно работали бы с ними плотно.

Даже с форумов бы взяли нормальных скриптеров и моделеров.....

А так богемия из преальф никогда и не выползала. Да думаю и не выползет никогда.

СА вообще имхо мертвая игра. Амбиций гора, а реальность - за 3 года абсолютный ноль, кое как плавности то добились от персонажа, чудо просто учитывая, что изначально графан на одном и том же двиге был хуже, чем в их же собственном параллельном продукте(я про А3).

А теперь еще добавили какой то энскрипт основанный на Си. АПИ к которому судя по всему появится эдак к 2025 году. Нах он нужен - а хз... исходники то закрыты до сих пор.

К 2025 лет за 7 мб и измениться что то, будет не Альфа, а ПреПреБета)))))))))0 Никому уже нах не усравшаяся.

 

P.S. Оффтоп конечно, но, тем то по СА.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NoNameUltima Ну теперь все понятно с ними что и куда. Ну А3 хотя бы на плаву кое как по онлайну а это забытая всеми богом игра которая выросла на слуху лишь. Хотя А3 начали историю тоже не без греха выпустив урезаную версию без компании на старте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тут как-то спрашивал - как получить agent (обьект) игрока зная только его id

 

Оказывается просто 

Есть такая функция в dayz sqf - playerOn

Вобщем (playerOn _id) возвращает агента (обьект)

 

Небольшое отступление

При вызовах SQF из Enforce через executeSQF (для 0.62 актуально, для 0.63 уже нет) есть ограничения

1 Передать обьект не получится

2 Передать строку содержащую :: не получится

3 Передать строку содержащую текст в обрамлении нескольких [] типа [A]BBB[CD] не получится

Все вызовет ошибку и код передан не будет, но и краша не будет

Потому нежелательно передавать в executeSQF имена игроков, тк они могут содержать порой и неск [] итп и это вызовет ошибку

Посему нужно передавать ID и там в коде уже выполнять запрос на обьект персонажа (playerOn _id) и тд итп

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А есть  еще общесерверный массив playerBodies который содержит в себе всех персонажей

 

Например playerBodies set [count playerBodies,_agent]; - записывает в него нового агента последним элементом

 

Может быть иногда полезным

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пишу скрипт лечения игрока

Кто какие переменные окружения агента отвечающие за здоровье знает, прошу выкладывать сюда

 

Так же никак не могу понять где нарыть результат действия

Перебинтовки

Применения физраствора, эпенифрина и тп

Если кто подскажет, буду признателен

 

Пока сам ищу...

 

Разобрался с параметрами

Лечится отлично

Но не гаснут нотиферы - bleedeng, sprained ankle итп

После лечения нужно перезайти и тогда все норм

 

Изучаю дальше

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK от имени сервера исполняешь, вместо _x указывается agent игрока
 

_x setHitPointDamage ["HitLegs",0];

значение 0 или 1
и ноги чинятся либо ломаются.

А по поводу кровотека:

bleedingsources и bleedingLevel в synchronizeVariable погляди, есть такое подозрение, что с этим связано, что-то типа уровня кровотека и статуса кровотека для modifers персонажа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

123new 

Это я знаю

Написал уже все

Все лечится ок

Анимацию кровотечения то же останавливаю

Но

Как заставить убраться эвент bleedeng или sick с экрана я еще не понял

Не пропадают и все тут

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BorizzK с modifers и modstates поиграйся попробуй, насколько помню именно там задавались эти параметры. Они же в сейв записываются у игрока. Сломанные ноги у меня вроде бы убирались.

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

123new 

Я тож в этом напрвалении рыл

Затем разбинарил пару бинарников из pbo

Нашел CfgModifiers.hpp

Посмотрел как устроены вызовы

И усе сделал

Ну и здоровье не просто на максимум, а на супермаксимум ))

 

Последние 3 строчки делают индикаторы на максимум

			_player setDamage 0;
			_player setHitPointDamage ["HitHands",0];
			_player setHitPointDamage ["HitBody",0];
			_player setHitPointDamage ["HitHead",0];
			_player setHitPointDamage ["HitFeet",0];
			_player setHitPointDamage ["HitLegs",0];

			_player setVariable ["health",5000];
			_player setVariable ["blood",5000];
			_player setVariable ["energy",20000];
			_player setVariable ["water",5000];
			_player setVariable ["stomach",1500];
			_player setVariable ["diet",1];
			_player setVariable ["vomit",0];
			_player setVariable ["bodytemperature",36.55];
			_player setVariable ["heatComfort",15]; //default 15 // 0
			_player setVariable ["wet",0];
			_player setVariable ["musclecramp",0];
			_player setVariable ["totalHeatIsolation",50]; //default 50?
			
			_player setVariable ["bleedingLevel",0];
			_player setVariable ["bleedingsources","[]"];

			_player setVariable ["exposure",0];
			
			_player setVariable ["falldamage",false];
			_player setVariable ["unconscious",false];
			_player setVariable ["penalties",0];
	
			_player call tick_modifiers;	
			_player call tick_states;		
			_player call tick_environment;
			_player call fnc_sendNotifiersToEnfusion;
			
			_player setVariable ["modifiers",["HitLegs","Healing","HighWater","HighEnergy","FeelingCold"]];
			_player setVariable ["modstates",[[[0],0,-1],[[3],-1,-1],[[1],-1,-1],[[1],-1,-1],[[0],-1,-1]]];
			_player setVariable ["myNotifiers",["","",["energized",[1,1,1,1]],["hydrated",[1,1,1,1]],"",["healthy",[1,1,1,1]]]];

 

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Troy1
      Всем привет. пишу мод и столкнулся с проблемой в реализации.
      Суть: Пытаюсь сделать проверку, если игрок стоит прям у окна или у дверного проёма он должен получать урон.
      Делал вот так.
      int wallHits = 0; float d = 2.2; // Дистанция до стены. Если стена дальше — считаем, что там окно или проем. // 8 направлений "снежинкой" для проверки стен вокруг игрока // Используем Vector(x, y, z) для точности ref array<vector> checkDirs = { Vector(d,0,0), Vector(-d,0,0), Vector(0,0,d), Vector(0,0,-d), Vector(d,0,d), Vector(-d,0,-d), Vector(d,0,-d), Vector(-d,0,d) }; foreach (vector dir : checkDirs) { // Пускаем горизонтальные лучи от позиции игрока (from) if (DayZPhysics.RayCastBullet(from, from + dir, collisionLayerMask, this, hitObject, hitPosition, hitNormal, hitFraction)) { // ПРОВЕРКА: Это должна быть вертикальная стена (Y нормали < 0.5) // Чтобы не засчитать низкий потолок за стену if (Math.AbsFloat(hitNormal[1]) < 0.5) { wallHits++; } } } // УСЛОВИЕ БЕЗОПАСНОСТИ: // В комнате wallHits будет 6-8. У окна или в проеме — 1-4. if (wallHits < 5) { hasSafeCeiling = false; // Слишком открытое пространство (окно/дверь) } Пытался менять дистанции, но всё ровно не как не хочет работать.
      Что я делаю не так, или я вообще делаю не то?
      Мне нужно проверять игрока, в укрытии он или нет.
      С высотой я разобрался, а вот с боковыми лучами у меня траблы и не во всех помещениях работает как нужно.
      В некоторых помещениях вообще не работает, удаляешь строки проверки, начинает работать и то по высоте.
      Просто забегаешь по навес и игрок под защитой, так не должно быть.
      Помогите пожалуйста  решить задачу.
    • Автор: Troy1
      Всем привет. Суть в чём, пишу мод на событие и когда происходит событие, параллельно должна меняться скорость ветра, не могу понять как заставить скрипт управлять силой ветра. Понижать силу ветра получилось сделать, а вот повышать не как. Только после перезагрузки сервера сила ветра задаётся в нужном значение.
      Как сделать, что бы по вызову функции менялась сила ветра в большую или в меньшую сторону?
      protected void SetWind(float wind, float time) { if (!g_Game) return; Weather m_Weather = g_Game.GetWeather(); if (!m_Weather) return; m_Weather.SetWindMaximumSpeed(wind); m_Weather.SetWind(Vector(1/Math.Sqrt(3), 1/Math.Sqrt(3), 1/Math.Sqrt(3)) * wind); m_Weather.SetWindSpeed(wind); m_Weather.SetWindFunctionParams(1.0, 1.0, -1); } Это скрипт на понижение силы ветра.
      Работает понижение силы ветра в том случае, если до этого сила ветра была выше.
      Пример:
      Изначально на сервере сила ветра = 20 m/s А нужно понизить до 10 m/s
      Только в этом случае сработает скрипт который я приложил выше.
      Помогите пожалуйста решить этот вопрос.
      За ранние благодарю.
    • Автор: Troy1
      Пока ждал помощи, решил вопрос!
      Тема закрыта!!!
    • Автор: magliner
      Привет ! Ну вот моя история с вопросом в конце.. Я фанат Дэйз ванилы черноруси, заколебало сидеть на бездушных серверах со слабой админкой и терять лут от софтеров, решил создать под свои скромные запросы около ванильный сервер.. Нашел хорошего исполнителя, быстро и четко запустили отладили и ВОТ я имею СВОЙ сервер.. клас! вечер восторга и изучения
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.