Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • OPG PROJECT

    Группа ВК

    По-настоящему хороший сервер с уникальным модом! 
     Заходи к нам,тебе тут понравится!
  • 0
Sign in to follow this  
ka3ant1p

усиление зомби

Всем привет полистав кучу разных форумов решил достать из dayz_code (мод епоч) файлы fn_damageHandler.sqf и fn_damageHandlerZ.sqf
fn_damageHandler.sqf отвечает за урон который наносится зомбаком
fn_damageHandlerZ.sqf отвечает за урон наносиый зомбаку
Дабы не создавать новый мод создал папочку fixes в миссиях и запихнул их туда и прописал к ним пути в кастомном compiles.sqf
выглядит он так:
 

fnc_usec_damageHandler =  compile preprocessFileLineNumbers "fixes\fn_damageHandler.sqf";
local_zombieDamage =    compile preprocessFileLineNumbers "fixes\fn_damageHandlerZ.sqf";

В fn_damageHandlerZ.sqf запихнул часть кода которая отвчает за то что зомбаку урон будет наносится в голову, то есть добавил строки в код а в самом коде ничего не изменял
А вот что бы поменять урон который наносят зомбаки пришлось править fn_damageHandler.sqf как следствие убийство только в голову работает, а вот урон от зомбарей нет.
Как я понимаю это связано с тем что основной файл compiles.sqf первоначально берет эти данные из dayz_code а во вторую уже из моего файла с миссией.
Собственно заключается вопрос в том как прикрутить зомбакам больший урон через миссии?

 

 

 

П.С. создавал темку http://s-platoon.ru/index.php?/topic/207-dayz-code-izmeneniia/ удалите там та же тема ток все закручено и непонятно

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0

С выше написанным разобрался все работает =)
Подскажите только вот такой момент, зомбарей получается усилить, но хотелось бы провести более тонкую настройку, кто умеет правильно читать скрипты расшифруйте какая строка тут че значит:
 

//PVP Damage
_scale = 200;
if (_damage > 0.4) then {
	if (_ammo != "zombie") then {
		_scale = _scale + 150;
	};
	if (_isHeadHit) then {
		_scale = _scale + 50;
	};
	if ((isPlayer _source) and !(player == _source)) then {
		_scale = _scale + 180;
		if (_isHeadHit) then {
			_scale = _scale + 150;
		};
	};
	switch (_type) do {
		case 1: {_scale = _scale + 120};
		case 2: {_scale = _scale + 120};
	};
	if (_unitIsPlayer) then {
		//Cause blood loss
		//Log Damage
		diag_log ("DAMAGE: player hit by " + typeOf _source + " in " + _hit + " with " + _ammo + " for " + str(_damage) + " scaled " + str(_damage * _scale));
		r_player_blood = r_player_blood - (_damage * _scale);
	};
};

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

 

if (_damage > 0.4) then {

значение 0.4 на 0.1  начали бить сильнее ток как то через раз все же, так что интересуют остальные строки и эта в частности.

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

Share this post


Link to post
Share on other sites



  • 0

Здесь нету шанса попадания.

Тут только увеличение дмг, в зависимости от того в какую часть тела попал.

И потеря крови.

Share this post


Link to post
Share on other sites
  • 0

Здесь нету шанса попадания.

Тут только увеличение дмг, в зависимости от того в какую часть тела попал.

И потеря крови.

 

Да это я сам то понял, читать умею, просто дело в том что когда значение верхнего _scale увеличиваешь у них в основном атаки остаются прежние и проскакивают так сказать криты, а вот при увеличении параметра  _scale =  _scale + 150 как раз поднимается ихняя атака при каждом ударе, вот как бы мне не понятно это тем более я предполагаю что _damage > 0.4 довольно важный параметр так как то что описано дальше действует в случае если _damage > 0.4 и как бы хотелось бы понять что оно значит, думал может найдутся знающие которые в коде проставят какой параметр за что отвечает.

А на счет процента промахов я хотел узнать где его найти в каком файле и по возможности в каком параметре т.к. очень долго получается если делать методом "тыка" т.к. параметров огромное множество и после изменения каждого нужно перезапускать сервер что бы понять на что оно влияет

Share this post


Link to post
Share on other sites
  • 0

дмг не может быть больше 1.

т.е. при ударе он идет от 0 и до 1.

Пропиши 0.001 вместо 0.4, и с любого удара даже слабого будет происходить усиление.

По поводу того, откуда он берется - смотри скрипт(у тебя тут не показано, откуда получает значение переменная _damage).

 

По поводу параметров...

Ну примерно так -

Если ударил НЕ зомби(т.е. - выстрел был или еще что то)

if (_ammo != "zombie") then {

 

Если удар пришелся в область головы

if (_isHeadHit) then {

 

Если источник нанесения удара - игрок. И (а так же) источник нанесения удара не сам игрок(т.е. не сам себя ударил).

if ((isPlayer _source) and !(player == _source)) then {

 

_type - тут надо смотреть откуда переменная получает значение. увеличиается она только если тип 1 или 2.

 

 

Ну а это и так понятно - если юнит по которому прошел дмг - игрок....

if (_unitIsPlayer) then {

Share this post


Link to post
Share on other sites
  • 0

дмг не может быть больше 1.

т.е. при ударе он идет от 0 и до 1.

Пропиши 0.001 вместо 0.4, и с любого удара даже слабого будет происходить усиление.

По поводу того, откуда он берется - смотри скрипт(у тебя тут не показано, откуда получает значение переменная _damage).

 

По поводу параметров...

Ну примерно так -

Если ударил НЕ зомби(т.е. - выстрел был или еще что то)

if (_ammo != "zombie") then {

 

Если удар пришелся в область головы

if (_isHeadHit) then {

 

Если источник нанесения удара - игрок. И (а так же) источник нанесения удара не сам игрок(т.е. не сам себя ударил).

if ((isPlayer _source) and !(player == _source)) then {

 

_type - тут надо смотреть откуда переменная получает значение. увеличиается она только если тип 1 или 2.

 

 

Ну а это и так понятно - если юнит по которому прошел дмг - игрок....

if (_unitIsPlayer) then {

как то смутно, выложу полный скрипт

 

scriptName "Functions\misc\fn_damageHandler.sqf";
/***********************************************************
	PROCESS DAMAGE TO A UNIT
	- Function
	- [unit, selectionName, damage, source, projectile] call fnc_usec_damageHandler;
************************************************************/
private ["_unit","_humanityHit","_myKills","_hit","_damage","_isPlayer","_unconscious","_wound","_isHit","_isInjured","_type","_hitPain","_isCardiac","_isHeadHit","_isMinor","_scale","_canHitFree","_rndPain","_rndInfection","_hitInfection","_lowBlood","_isPZombie","_source","_ammo","_unitIsPlayer","_isBandit"];
_unit = _this select 0;
_hit = _this select 1;
_damage = _this select 2;
_unconscious = _unit getVariable ["NORRN_unconscious", false];
_isPZombie = player isKindOf "PZombie_VB";
_source = _this select 3;
_ammo = _this select 4;
_type = [_damage,_ammo] call fnc_usec_damageType;

_isMinor = (_hit in USEC_MinorWounds);
_isHeadHit = (_hit == "head_hit");
//_evType = "";
//_recordable = false;
_isPlayer = (isPlayer _source);
_humanityHit = 0;
_myKills = 0;
_unitIsPlayer = _unit == player;

//Publish Damage
	//player sidechat format["Processed damage for %1",_unit];
	//USEC_SystemMessage = format["CLIENT: %1 damaged for %2 (in vehicle: %5)",_unit,_damage,_isMinor,_isHeadHit,_inVehicle];
	//PublicVariable "USEC_SystemMessage";

/*
if (_isPlayer) then {
	if (_damage > 0.1) then {
		dayz_canDisconnect = false;
		//["PVDZE_plr_DiscAdd",getPlayerUID player] call callRpcProcedure;
		PVDZE_plr_DiscAdd = getPlayerUID player;
		publicVariableServer "PVDZE_plr_DiscAdd";
				
		dayz_damageCounter = time;
		
		//Ensure Control is visible
		_display = uiNamespace getVariable 'DAYZ_GUI_display';
		_control = 	_display displayCtrl 1204;
		_control ctrlShow true;
	};
};
*/

if (_unitIsPlayer) then {
	if (_hit == "") then {
		if ((_source != player) and _isPlayer) then {
		//Enable aggressor Actions
			if (_source isKindOf "CAManBase") then {
				_source setVariable["startcombattimer",1];	
			};
			_canHitFree = 	player getVariable ["freeTarget",false];
			_isBandit = (player getVariable["humanity",0]) <= -5000;
			_isPZombie = player isKindOf "PZombie_VB";
			
			if (!_canHitFree and !_isBandit and !_isPZombie) then {
				//Process Morality Hit
				_myKills = 0 max (1 - (player getVariable ["humanKills",0]) / 5);
				_humanityHit = -100 * _myKills * _damage;

				//["PVDZE_plr_HumanityChange",[_source,_humanityHit,30]] call broadcastRpcCallAll;
				if (_humanityHit != 0) then {
					PVDZE_plr_HumanityChange = [_source,_humanityHit,30];
					publicVariable "PVDZE_plr_HumanityChange";
				};
			};
		};
	};
};

//PVP Damage
_scale = 200;
if (_damage > 0.4) then {
	if (_ammo != "zombie") then {
		_scale = _scale + 50;
	};
	if (_isHeadHit) then {
		_scale = _scale + 500;
	};
	if ((isPlayer _source) and !(player == _source)) then {
		_scale = _scale + 800;
		if (_isHeadHit) then {
			_scale = _scale + 500;
		};
	};
	switch (_type) do {
		case 1: {_scale = _scale + 200};
		case 2: {_scale = _scale + 200};
	};
	if (_unitIsPlayer) then {
		//Cause blood loss
		//Log Damage
		diag_log ("DAMAGE: player hit by " + typeOf _source + " in " + _hit + " with " + _ammo + " for " + str(_damage) + " scaled " + str(_damage * _scale));
		r_player_blood = r_player_blood - (_damage * _scale);
	};
};

//Record Damage to Minor parts (legs, arms)
if (_hit in USEC_MinorWounds) then {
	if (_ammo == "zombie") then {
		if (_hit == "legs") then {
			[_unit,_hit,(_damage / 6)] call object_processHit;
		} else {
			[_unit,_hit,(_damage / 4)] call object_processHit;
		};
	} else {
		[_unit,_hit,(_damage / 2)] call object_processHit;
	};
	if (_ammo == "") then {
		[_unit,_hit,_damage] call object_processHit;
	};
};


if (_unitIsPlayer) then {
//incombat
	_unit setVariable["startcombattimer", 1, false];	
};

if (_damage > 0.1) then {
	if (_unitIsPlayer) then {
		//shake the cam, frighten them!
		//player sidechat format["Processed bullet hit for %1 (should only be for me!)",_unit];
		1 call fnc_usec_bulletHit;
	};
	if (local _unit) then {
		_unit setVariable["medForceUpdate",true,true];
	};
};
if (_damage > 0.4) then {	//0.25
	/*
		BLEEDING
	*/		
	_wound = _hit call fnc_usec_damageGetWound;
	_isHit = _unit getVariable[_wound,false];
	if (_unitIsPlayer) then {	
		_rndPain = 		(random 10);
		_rndInfection = (random 500);
		_hitPain = 		(_rndPain < _damage);
		if ((_isHeadHit) or (_damage > 1.2 and _hitPain)) then {
			_hitPain = true;
		};
		_hitInfection = (_rndInfection < 1);
		//player sidechat format["HitPain: %1, HitInfection %2 (Damage: %3)",_rndPain,_rndInfection,_damage]; //r_player_infected
		if (_isHit) then {
			//Make hit worse
			if (_unitIsPlayer) then {
				r_player_blood = r_player_blood - 50;
			};
		};
		if (_hitInfection) then {
			//Set Infection if not already
			if (_unitIsPlayer and !_isPZombie) then {
				r_player_infected = true;
				player setVariable["USEC_infected",true,true];
			};
			
		};
		if (_hitPain) then {
			//Set Pain if not already
			if (_unitIsPlayer) then {
				r_player_inpain = true;
				player setVariable["USEC_inPain",true,true];
			};
		};
		if ((_damage > 1.5) and _isHeadHit) then {
			[_source,"shothead"] spawn player_death;
		};
	};
	if(!_isHit) then {
		
		if(!_isPZombie) then {
			//Create Wound
			_unit setVariable[_wound,true,true];
			[_unit,_wound,_hit] spawn fnc_usec_damageBleed;
			usecBleed = [_unit,_wound,_hit];
			publicVariable "usecBleed";

			//Set Injured if not already
			_isInjured = _unit getVariable["USEC_injured",false];
			if (!_isInjured) then {
				_unit setVariable["USEC_injured",true,true];
			if ((_unitIsPlayer) and (_ammo != "zombie")) then {
					dayz_sourceBleeding = _source;
				};
			};
			//Set ability to give blood
			_lowBlood = _unit getVariable["USEC_lowBlood",false];
			if (!_lowBlood) then {
				_unit setVariable["USEC_lowBlood",true,true];
			};
			if (_unitIsPlayer) then {
				r_player_injured = true;
			};
		};
	};
};
if (_type == 1) then {
	/*
		BALISTIC DAMAGE		
	*/		
	if ((_damage > 0.01) and (_unitIsPlayer)) then {
		//affect the player
		[20,45] call fnc_usec_pitchWhine; //Visual , Sound
	};
	if (_damage > 4) then {
		//serious ballistic damage
		if (_unitIsPlayer) then {
			[_source,"explosion"] spawn player_death;
		};
	} else {
		if (_damage > 2) then {
			_isCardiac = _unit getVariable["USEC_isCardiac",false];
			if (!_isCardiac) then {
				_unit setVariable["USEC_isCardiac",true,true];
				r_player_cardiac = true;
			};
		};
	};
};
if (_type == 2) then {
	/*
		HIGH CALIBRE
	*/
	if (_damage > 4) then {
		//serious ballistic damage
		if (_unitIsPlayer) then {
			[_source,"shotheavy"] spawn player_death;
		};
	} else {
		if (_damage > 2) then {
			_isCardiac = _unit getVariable["USEC_isCardiac",false];
			if (!_isCardiac) then {
				_unit setVariable["USEC_isCardiac",true,true];
				r_player_cardiac = true;
			};
		};
	};
};

if (!_unconscious and !_isMinor and ((_damage > 2) or ((_damage > 0.5) and _isHeadHit))) then {
	//set unconsious
	[_unit,_damage] call fnc_usec_damageUnconscious;
};

Share this post


Link to post
Share on other sites
  • 0
if (_ammo == "zombie") then {

 

дмг от зомби.

Как видишь, в  последствии - в скрипте, урон режется -

 

 

        if (_hit == "legs") then {
            [_unit,_hit,(_damage / 6)] call object_processHit;
        } else {
            [_unit,_hit,(_damage / 4)] call object_processHit;
        };

По ногам - урон делится на 6(урезается в 6 раз)

По остальным частям тела в 4 раза.

Share this post


Link to post
Share on other sites
  • 0

 

if (_ammo == "zombie") then {

 

дмг от зомби.

Как видишь, в  последствии - в скрипте, урон режется -

 

 

        if (_hit == "legs") then {
            [_unit,_hit,(_damage / 6)] call object_processHit;
        } else {
            [_unit,_hit,(_damage / 4)] call object_processHit;
        };

По ногам - урон делится на 6(урезается в 6 раз)

По остальным частям тела в 4 раза.

я ток не пойму откуда берется первоначальный урон?

Я так предполагал судя что смог понять из скрипта что дамаг исходный получается 200 и что в случае попадения в голову идет усиление +500 в случае попадения в ноги получается 200/6 остальные части тела 200/4. усиление как я понимаю происходит в случае если урон больше чем 200*0,4 то есть больше 80, тогда пускается кровотечение и происход усилени +50, если попал в голову то усиление +500, ну это как бы теоретически и скорее всего не совсем верно потому что по логике зомби попадает либо в ноги либо в голову либо в другие части тела тогда откуда берется значение 0.4, в смысле от какого урона? Т.к. если в ноги то урон 200/6=33 < 80 а если другие части тела кроме головы то 200/4=50 < 80 остается голова, какой тогда вообще смысл в строке там где стоит параметр 0,4?

В общем так ничего и не понял

Share this post


Link to post
Share on other sites
  • 0

о вроде понял, _scale = 200 это вообще как бы пвп урон
если урон наносит зомби то урон = 200 + 50
если попадение в голову то 200+50+500
если в ноги то (200+50)/6 или (200+50)/4
в другие части тела (200+50)/2
Если урон больше 40% от 200 то пускается кровотечение
Как то так наверное
 

Share this post


Link to post
Share on other sites
  • 0

нашел интересную статейку, судя по видео и сравнению скриптов очень много чего изменено, но к сожалению работа по всей видимости не доделана и осталась на стадии альфы, очень интересная наработка, возможно кто то сможет продолжить работу http://opendayz.net/threads/release-mmmyums-zed-changes-quantity-ai-spawning-permaloot-permazeds-more.12435/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.