Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
Sovest2

[ГАЙД] Отображение ника убийцы и Изменение человечности за убийство Героя\Бандита

Recommended Posts

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


Подготовка

Для начала нам понадобится подключить кастомный player_death.sqf в compiles.sqf

Делается это следующим образом:
В compiles.sqf заменить строку 

player_death =				compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_death.sqf";

на

player_death =				compile preprocessFileLineNumbers "*ВАШ ПУТЬ*\player_death.sqf";

 

Если у вас стоит инфистар,то необходимо заменить строку в AH.sqf

_death = compile preprocessFileLineNumbers '\z\addons\dayz_code\compile\player_death.sqf';

на

_death = compile preprocessFileLineNumbers '*ВАШ ПУТЬ*\player_death.sqf';

 

В вашем кастомном player_death.sqf необходимо заменить 

_array = _this;
if (count _array > 0) then {
	_source = _array select 0;
	_method = _array select 1;
	if ((!isNull _source) && (_source != player)) then {
		_canHitFree = player getVariable ["freeTarget",false];
		_isBandit = (player getVariable["humanity",0]) <= -2000;
		_punishment = _canHitFree || _isBandit; //if u are bandit || start first - player will not recieve humanity drop
		_humanityHit = 0;
		if (!_punishment) then {
			//i'm "not guilty" - kill me && be punished
			_myKills = ((player getVariable ["humanKills",0]) / 30) * 1000;
			_humanityHit = -(2000 - _myKills);
			_kills = _source getVariable ["humanKills",0];
			_source setVariable ["humanKills",(_kills + 1),true];
			PVDZE_send = [_source,"Humanity",[_source,_humanityHit,300]];
			publicVariableServer "PVDZE_send";
		} else {
			//i'm "guilty" - kill me as bandit
			_killsV = _source getVariable ["banditKills",0];
			_source setVariable ["banditKills",(_killsV + 1),true];
		};
	};
	_body setVariable ["deathType",_method,true];
};

на

_array = _this;
if (count _array > 0) then {
	_source = _array select 0;
	_method = _array select 1;
	if ((!isNull _source) && (_source != player)) then {
	
		[player,_source]execVM "*ВАШ ПУТЬ*\humanityChange.sqf";
		[player,_source]execVM "*ВАШ ПУТЬ*\kill_msg_send.sqf";
		
	};
	_body setVariable ["deathType",_method,true];
};

Отображение ника убийцы(Kill message)

 

Создаем файл и закидываем в миссию файл kill_msg_send.sqf

С содержанием

private ["_victim","_killer","_vehicle","_weapon","_pic"];

_victim = _this select 0;
_killer = _this select 1;

_killerName = name _killer;
_victimName = name _victim;
		
_vehicle = typeOf (vehicle _killer);
_weapon = currentWeapon _killer;
		
if ((getText (configFile >> "CfgVehicles" >> _vehicle >> "vehicleClass")) in ["CarW","Car","CarD","Armored","Ship","Support","Air","ArmouredW","ArmouredD","SupportWoodland_ACR","AllVehicles"]) then {
	_pic = gettext(configFile >> 'CfgVehicles' >> _vehicle >> 'picture');
} else {
	_pic = gettext(configFile >> 'cfgWeapons' >> _weapon >> 'picture');
};
		
_kill_txt = format ["<t align='left' size='0.5'>%1 </t>",_victimName];
_kill_txt = _kill_txt + format ["<img size='1.0' align='left' image='%1'/>",_pic];
_kill_txt = _kill_txt + format ["<t align='left' size='0.5'> %1 </t>",_killerName];

PVDZE_send = [player,"kill_message",[_kill_txt]];
publicVariableServer "PVDZE_send";

 

Далее,нам необходимо отредактировать файл server_sendToClient.sqf ,которой находится в директории сервера

И добавить после

case "tagFriendly": {
		PVDZE_plr_FriendRQ = _arraytosend;
		_owner publicVariableClient "PVDZE_plr_FriendRQ";
	};

Это

case "kill_message": {
		custom_kill_message_show = _arraytosend;
		publicVariable "custom_kill_message_show";
	};

Теперь необходимо создать файл kill_msg_show.sqf в папке с вашей миссией

с содержимым

private ["_pos","_i"];
arr_kill = ["","","","","",""];

fnc_kill_message = {
	private ["_finaltxt"];
	_finaltxt = _this select 0;
	
	for[{_i = 0},{(_i<6)},{_i = _i +1}] do
	{
		if((arr_kill select _i) == "") then {
		arr_kill set [_i,_finaltxt];
		[_i] execVM "*ВАШ ПУТЬ*\kill_msg_delete.sqf";
		_i = count(arr_kill);
		};
	};
};
"custom_kill_message_show" addPublicVariableEventHandler {(_this select 1) call fnc_kill_message;};

while {true} do
{
	_pos = 0.01;
	_layout =  1001;
	{
		[_x,[safezoneX + 0.01 * safezoneW,2.0],[safezoneY + _pos * safezoneH,0.3],5,0.5,0,_layout] spawn BIS_fnc_dynamicText;
		_pos = _pos + 0.021;
		_layout = _layout + 1;
	} ForEach arr_kill;
	sleep 1;
};

Создать файл kill_msg_delete.sqf с 

private["_pos"];
_pos = _this select 0;
sleep 10;
arr_kill set [_pos,""];

 

И вставить в init.sqf после строки

_playerMonitor = 	[] execVM "custom\player_monitor.sqf";

строку

execVM "*ВАШ ПУТЬ*\kill_msg_show.sqf";

Осталось только добавить

custom_kill_message_show

В первую строку файла publicvariable.txt

 

Все,отображение ника убийцы готово!

 

 

Изменение человечности за убийство Бандита\Героя

создать файл humanityChange.sqf с содержимым

private ["_victim","_killer","_myKills","_humanity","_killerHumanity","_isKillerBandit","_isBandit","_humanityHit","_kills","_killerGunner"];

_victim = _this select 0;
_killer = _this select 1;

_humanity = _victim getVariable["humanity",0];
_killerHumanity = _killer getVariable["humanity",0];
_isKillerBandit = (_killerHumanity) < 0 ;
_isBandit = (_humanity) < 0;
_humanityHit = 0;
_myKills = 0;
_killerVehicle = vehicle _killer;
		
if(((!_isBandit) && _isKillerBandit) || (_isBandit && (!_isKillerBandit))) then
{
	_myKills = round((_humanity) / 10);
};
		
if(!_isBandit) then 
{	
	_myKills = (_myKills + 200);
	_kills = _killer getVariable ["humanKills",0];
	_killer setVariable ["humanKills",(_kills + 1),true];
}
else
{	
	_myKills = (_myKills - 200);
	_kills = _killer getVariable ["banditKills",0];
	_killer setVariable ["banditKills",(_kills + 1),true];
};
		
_killerGunner = gunner _killerVehicle;
if(!isNil"_sourceGunner") then
{
	_killer = _killerGunner;
};
			
_humanityHit = _myKills * (-1);
PVDZE_send = [_killer,"Humanity",[_killer,_humanityHit,300]];
publicVariableServer "PVDZE_send";

Изменение Человечности готово!

 

Плюсы Всего этого:
Отображение ника убийцы теперь работает всегда и корректно.(Если убивают с техники или с одного выстрела).

Share this post


Link to post
Share on other sites



а про фильтры батлая опять смотрю забыли...

за вот эту шляпу будет нещадно кикать игроков.

custom_kill_message_show

Edited by RedLink (see edit history)

Share this post


Link to post
Share on other sites

так же добавлю - PVDZE_send - старая переменная. в 1,0,6,х не работает, т.к. поменялась на PVDZ_send

Share this post


Link to post
Share on other sites
8 часов назад, RedLink сказал:

так же добавлю - PVDZE_send - старая переменная. в 1,0,6,х не работает, т.к. поменялась на PVDZ_send

А мог ты подсказать в какую сторону копать,чтобы сделать отображение убийств в виде списка (Как в кс и т.п.)?

Share this post


Link to post
Share on other sites
43 минуты назад, Sovest2 сказал:

А мог ты подсказать в какую сторону копать,чтобы сделать отображение убийств в виде списка (Как в кс и т.п.)?

для этого есть доски смерти на трейдах.

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

Share this post


Link to post
Share on other sites
Только что, RedLink сказал:

для этого есть доски смерти на трейдах.

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

Я имею ввиду сделать лист из 5 слотов.

Каждый раз,как кто-то умирает,то он добавляется в этот лист и как только слот освобождается,он выводит на экран сообщение.

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

Share this post


Link to post
Share on other sites
1 минуту назад, RedLink сказал:

немного не понимаю. покажи пример.

Удалил уже.

Но выгдялеть дожно как тот же показ убийств в КС (counter strike) и подобных играх.(Глянь любой видос с геймплеем той же кс)

Edited by Sovest2 (see edit history)

Share this post


Link to post
Share on other sites

Как пример отображение убийства в КС ГО

 

Share this post


Link to post
Share on other sites
13 минуты назад, Sovest2 сказал:

Удалил уже.

Но выгдялеть дожно как тот же показ убийств в КС (counter strike) и подобных играх.(Глянь любой видос с геймплеем той же кс)

 

31 минуту назад, Sovest2 сказал:

Я имею ввиду сделать лист из 5 слотов.

Каждый раз,как кто-то умирает,то он добавляется в этот лист и как только слот освобождается,он выводит на экран сообщение.

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

А что там может НЕ получиться?

 

Фиксированный массив, с 4 элементами(от 0)

Killers = [ [], [], [], [], [] ];

При убийстве, проверка, с 0 по 4 элемент.

Если при переборе, найден пустой элемент массива - добавляем туда, то что надо - к примеру ники игроков - 0 убитый, 1 убивший.

[ ["вася", "петя"], [], [], [], [] ];

.......

[ ["вася", "петя"], ["вася", "дима"], [], [], [] ];

 

Если все элементы уже заполнены(список полный):

1. Пузырьковое всплытие (сортировка массива) - где нижний элемент, заменяет верхний.

*4->3, 3->2, 2->1, 1->0

2. В 4 элементе заменяем ники - обновляем данные.

 

А вывод куда либо - это уже дело десятое.

 

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

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

Share this post


Link to post
Share on other sites

Знания есть.Просто делаю и делаю,правлю и правлю свой сервер. Уже мозг даже кипит )

Share this post


Link to post
Share on other sites

Ты имеешь ввиду чтобы старые (предыдущие) килы отображались как на видосе?

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

Share this post


Link to post
Share on other sites
38 минут назад, RedLink сказал:

Ты имеешь ввиду чтобы старые (предыдущие) килы отображались как на видосе?

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

Ну вот не хочу я проще,хочу красиво сделать. Только вот туплю пока что.

Share this post


Link to post
Share on other sites

Сделал это таким образом
kill_msg_show.sqf

arr_kill = [];

fnc_kill_message = {
	private ["_finaltxt"];
	_finaltxt = _this select 0;
	arr_kill = arr_kill + [_finaltxt];
	[_finaltxt] execVM "add\kill_msg_delete.sqf";
	
};
"custom_kill_message_show" addPublicVariableEventHandler {(_this select 1) call fnc_kill_message;}

while (1 == 1) do
{
	private ["_pos"];
	_pos = 0.01;
	{
		[_x,[safezoneX + 0.01 * safezoneW,2.0],[safezoneY + _pos * safezoneH,0.3],3,0.5] spawn BIS_fnc_dynamicText;
		_pos = _pos + 0.01;
	} ForEach arr_kill;
	sleep 1;
};

kill_msg_delete.sqf

private["_msg"];
_msg = _this select 0;
sleep 5;
arr_kill = arr_kill - [_msg];

 

Но не робит. Не отображает вообще.ошибок в логе нет

Share this post


Link to post
Share on other sites
17 часов назад, Sovest2 сказал:

"custom_kill_message_show" addPublicVariableEventHandler {(_this select 1) call fnc_kill_message;}

wtf

 

и где диагностика хоть 1 строка. где рпт с диагностикой...

что попадает в массив, когда, и т.п.

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
8 часов назад, NoNameUltima сказал:

wtf

 

и где диагностика хоть 1 строка. где рпт с диагностикой...

что попадает в массив, когда, и т.п.

 

Так ниже цикл идет со всем необходимым. Или я не правильно понимаю как в арме исполняется код?

Share this post


Link to post
Share on other sites

вывод в лог того чего сделано. к примеру при смерти присвоилось сообщение или нет. вывод этой переменной в лог сервера, чтобы понять отработалась команда или нет.

Share this post


Link to post
Share on other sites

Почти сделал.Осталось лишь пару штрихов

Share this post


Link to post
Share on other sites

Все,сделал. Внес изменения в главный пост

Share this post


Link to post
Share on other sites
В 02.09.2017 в 12:43, RedLink сказал:

а про фильтры батлая опять смотрю забыли...

за вот эту шляпу будет нещадно кикать игроков.

custom_kill_message_show

 

В 02.09.2017 в 12:44, RedLink сказал:

так же добавлю - PVDZE_send - старая переменная. в 1,0,6,х не работает, т.к. поменялась на PVDZ_send

Изменений в шапке не наблюдаю по этим пунктам.

Share this post


Link to post
Share on other sites
6 часов назад, RedLink сказал:

 

Изменений в шапке не наблюдаю по этим пунктам.

А я гайд делаю на 1.0.5.1 на 1.0.6 мне вообще по барабану.А вот про фильтры дописал

Share this post


Link to post
Share on other sites
В 02.09.2017 в 09:46, Sovest2 сказал:

Осталось только добавить


custom_kill_message_show

В первую строку файла publicvariable.txt

И снова неверно. Я к примеру это пойму. А вот некоторые нет.

 

22 минуты назад, Sovest2 сказал:

А я гайд делаю на 1.0.5.1 на 1.0.6 мне вообще по барабану.А вот про фильтры дописал

Да. Не обратил внимание в какой ветке создан гайд.

Share this post


Link to post
Share on other sites
Только что, RedLink сказал:

И снова неверно. Я к примеру это пойму. А вот некоторые нет.

 

Да. Не обратил внимание в какой ветке создан гайд.

 

Этим "некоторым" тогда уж лучше не создавать сервера... Ибо получается из этого УГ.

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

×
×
  • 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.