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

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

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

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

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

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

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

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


Подготовка

Для начала нам понадобится подключить кастомный 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";

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

 

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

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


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





Скриншот позже докину

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


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

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

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

custom_kill_message_show

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

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


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

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

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


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

Спасибо что напомнил про фильтры

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


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, RedLink сказал:

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

Удалил уже.

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

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

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


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

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
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 элементе заменяем ники - обновляем данные.

 

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

 

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

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

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


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

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

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


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

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

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

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


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

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

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

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

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


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

Сделал это таким образом
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];

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, Sovest2 сказал:

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

wtf

 

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, NoNameUltima сказал:

wtf

 

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

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

 

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

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


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

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

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


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

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

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
В 02.09.2017 в 12:43, RedLink сказал:

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

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

custom_kill_message_show

 

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, RedLink сказал:

 

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
В 02.09.2017 в 09:46, Sovest2 сказал:

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


custom_kill_message_show

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

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

 

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

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

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

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


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

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

 

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

 

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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