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

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

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

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

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

[DayZ 0.63] Сообщения о смертях игроков в чат

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

Автор скрипта: http://s-platoon.ru/profile/14721-borizzk/

Все благодарности за этот скрипт непосредственно автору скрипта, не мне!

 

И так, установка:

1. Первым делом нам необходим чистый стандартный сервер DayZ (без модов, поскольку моды могу приводить к неработоспособности частей гайда). Установить его можно по инструкции, например, так:

Замечу сразу, гайд сделан для версии игры 0.63.149525
2. Заходим в папку 'DTA' и распаковываем с 'PBO-MANAGER' архив 'scripts.pbo', получив папку 'scripts'.

3. Перемещаем папку 'scripts с' папки 'DTA' в корень папки сервера

4. Переходим по следующему пути:

scripts\4_World\Entities\ManBase\PlayerBase.c

и открываем файл.

В самом его начале после кода

class PlayerBase extends ManBase
{

добавляем код

	// BY BORIZZ.K, s-platoon.ru (ThX Mizev, NoNameUltima, 123New and DaOne)
	//MY ---
	//PLAYER DEATH with MESSAGES START //MY
	int killscore = 0; // usage p_killer.killscore = p_killer.killscore + 1; // for kills count in EEKilled function. //p_killer must be PlayerBase - use p_killer = PlayerBase.Cast(killer) //See EEKilled function
	int diescore = 0; // usage Player.diescore = Player.diescore + 1; // for death count in EEKilled function. //Player must be playerbase
	
	void Message_PlayerKilled(Object player_obj, Object killer)
	{
		//MY ---
		PlayerBase  p_Killer   = NULL; // Killer
		PlayerBase   Player     =  player_obj; // Killed player
		PlayerIdentity Player_Identity  = Player.GetIdentity(); //Killed player Identity
		string   Player_Name   = Player_Identity.GetName(); //Killed player name
		string    p_UID     =  Player_Identity.GetPlainId(); // Killed player UID
		bool    enableSaveKills  =  true; // enable/disable save kill count to profile/file by Killer UID
		bool    enableSaveDies  =  true; // enable/disable save death count to profile/file by Player UID
		if ( GetGame().ServerConfigGetInt("enableSaveKills") == 0 ) //place parameter enableSaveKills = 0; for disable SaveKills to server profile
		{	
			enableSaveKills  =  false;
		}
		
		if ( GetGame().ServerConfigGetInt("enableSaveDies") == 0 )//place parameter enableSaveDies = 0; for disable SaveDies to server profile
		{
			enableSaveDies  =  false;
		}
		string   deathMsg   = "";
		string   deathMsgDist  = "";
		string   deathMsgKillScore =  "";
		string    DebugMessage;
		Print("::: EEKilled: Debug: Input: killer " + killer.ToString() + " => Class: " + killer.GetType() + ", Player " + Player.ToString() + " => Class: " + Player.GetType()); //DEBUG
		//Phase #1
		if ( killer.IsMan() )
		{
			if ( killer.IsKindOf("SurvivorBase") )
			{ 
				p_Killer = PlayerBase.Cast(killer);
				DebugMessage = "killer.IsMan(): killer.IsKindOf('SurvivorBase'): killer " + p_Killer.ToString() + " kill player " + Player.ToString(); //DEBUG
			}
		}
		else
		{
			if ( killer.IsItemBase() )
			{
				ItemBase bitem = ItemBase.Cast(killer);
				p_Killer = PlayerBase.Cast(bitem.GetHierarchyRootPlayer());
				DebugMessage = "killer.IsItemBase(): killer " + p_Killer.ToString() + " => " + bitem.ToString() + " kill player " + Player.ToString(); //DEBUG
			}
			else
			{
				DebugMessage = "killer " + killer.ToString() + " kill player " + Player.ToString(); //DEBUG
			}
		} 
		Print("::: EEKilled Debug: " + DebugMessage); //DEBUG

		//Phase #2
		if (p_Killer)
		{
			if (Player == p_Killer)
			{
				deathMsg = Player_Name + " committed suicide.";
			}
			else
			{
				PlayerIdentity Killer_Identity = p_Killer.GetIdentity();
				string killer_name    = Killer_Identity.GetName();
				string k_UID      =  Killer_Identity.GetPlainId(); //Get killer UID
				vector position_killer   = p_Killer.GetPosition();
				vector position_player   =  Player.GetPosition();
				int dist      = vector.Distance(position_player, position_killer);      
				EntityAI itemInHands   = p_Killer.GetHumanInventory().GetEntityInHands();
				if (enableSaveKills)
				{
					string strkillscore;
					g_Game.GetProfileString("killscore"+k_UID,strkillscore);
					if (strkillscore)
					{
						Print("::: EEKilled Debug: LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG
						p_Killer.killscore = strkillscore.ToInt();
					}
				}
				p_Killer.killscore = p_Killer.killscore + 1; //You must declare a variable: int KillScore = 0; in PlayerBase class
				if (enableSaveKills)
				{
					g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
					g_Game.SaveProfile();
					Print("::: EEKilled Debug: SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
				}

				if ( itemInHands.IsItemBase() )
				{
					ItemBase item  = ItemBase.Cast(itemInHands);
					string className = item.GetType();
					deathMsg   = killer_name + " kill: " + Player_Name;
					deathMsgDist        =   " from a distance: " + dist.ToString() + "m by " + className;
					deathMsgKillScore = killer_name + " kills: " + p_Killer.killscore.ToString();
				}
				else
				{
					deathMsg         = killer_name + " kill: " + Player_Name;
					deathMsgDist        = " from a distance: " + dist.ToString() + "m.";
					deathMsgKillScore = killer_name + " kills: " + p_Killer.killscore.ToString();			 
				}
			}
		}
		else
		{
			if ( killer.IsKindOf("AnimalBase") )
			{
				deathMsg = Player_Name + " killed by animal.";
			} 
			else 
			{
				if ( killer.IsKindOf("ZombieBase") )
				{
					deathMsg = Player_Name + " killed by zombie."; 
				}
				else
				{
					deathMsg = Player_Name + " died for an unknown reason.";
				}
			}
		}

		//Phase #3
		GetGame().ChatPlayer(5, deathMsg);
		Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsg); //DEBUG
		if (deathMsgDist)
		{
			GetGame().ChatPlayer(5, deathMsgDist);
			Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsgDist); //DEBUG
		}
		if (deathMsgKillScore)
		{
			GetGame().ChatPlayer(5, deathMsgKillScore);
			Print("::: EEKilled Debug: killer: " + killer.ToString () + " ::: " + deathMsgKillScore); //DEBUG
		}

		if (enableSaveDies)
		{
			string strdiescore;
			g_Game.GetProfileString("diescore"+p_UID,strdiescore);
			if (strdiescore)
			{
				Print("::: EEKilled Debug: Load Die's: Player: " + Player_Name + ", loaded diescore: " + strdiescore); //DEBUG
				Player.diescore = strdiescore.ToInt();
			}
		}
		Player.diescore = Player.diescore + 1;
		if (enableSaveDies)
		{
			g_Game.SetProfileString("diescore"+p_UID,Player.diescore.ToString());
			g_Game.SaveProfile();
			Print("::: EEKilled Debug: SaveDeath: Player: " + Player_Name + ", diescore: " + diescore.ToString()); //DEBUG
		}
		//MY ---
		
		if( GetHumanInventory().GetEntityInHands() )
		{
			if( CanDropEntity(player_obj) )
			{
				if( !IsRestrained() )
				{
					GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ServerDropEntity,1000,false,( GetHumanInventory().GetEntityInHands()));
				}
			}

		}
	}

 затем находим функцию

override void EEKilled( Object killer )
	{

и перед строкой

Print("EEKilled, you have died");

добавляем

Message_PlayerKilled(this, killer);

4. В параметры запуска сервера добавляем:

-FilePatching

5. В 'config-файл' сервера (тот файл где название сервера) добавляем:

enableSaveKills = 1; // Включение сохранения счетчика убийств по игрокам
enableSaveDies = 1; // Включение сохранения счетчика смертей по игрокам

где 1 - включено, 0 - выключено

 

6. Сохраняем, запускаем сервер и радуемся. Сообщения о смертях игроков будут у вас как в чате, так и в script.log.


Где хранятся счетчики убийств и смертей? Ответ:

Они хранятся в profile сервера игры. Т.е. после 1-го запуска создаются 2 файла (как у клиента игры в документах windows в папку dayz) в файлах с расширениями ".vars.DayZProfile" и ".DayZProfile". При удалении этих файлов счетчики сбросятся!

 

ВАЖНО:

Скажу сразу, добавить систему кастомного логирования вместо базового можно, но добавлять ее вам прийдется до иницилизации данного файла playerbase.c, поскольку уже в  playerbase.c вы будете вызывать функцию, которая должна быть заранее определена и известна серверу!

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

 

P.S. Данная тема является копией утраченной темы на нашем форуме, восстановлена по просьбам 'трудящихся'. Надеюсь, она вам поможет.

 

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

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


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





123new яж писал в теме этой. не работает у меня. 

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


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

123new яж писал в теме этой. не работает у меня. 

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

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


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

123new что может мешать?
Например папка script лежит в корне с сервером для бесконечно стамины.
Возможно что там мешает файл PlayersBase.c ?

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


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

aspec7878 возможно не подключен скрипт, возможно файл не читается сервером, возможно -filepatching, указанный в теме, отсутствует в параметрах запуска сервера

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


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

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

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

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


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

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

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


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

Alex39 Обычный шрифт. Делай свой, да подрубай.

Не обычный шрифт, он в картинке, с такими не работал, как исправить не знаю

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


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

пройди по ссылке dta\gui\fonts\system.edds   и попробуй, у меня пока не получается

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


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

Там вся папка fonts они скомпилили не верно, вот и прут крякозябры, надо все файлы переделывать

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


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

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

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

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


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

они скомпилили не верно

_) мда)

шрифты не компилят как бЭ)

Выше скинули утилиту. - Их именно что рисуют. - Как нарисовали, так и есть. Берешь в руки виндовую утилиту для создания системных шрифтов и вперед, если нужна кириллица и UTF8 - смотри как там(кириллицу никто не обязался вставлять в шрифт), и загоняешь ее в TGA

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


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

_) мда)

шрифты не компилят как бЭ)

Выше скинули утилиту. - Их именно что рисуют. - Как нарисовали, так и есть. Берешь в руки виндовую утилиту для создания системных шрифтов и вперед, если нужна кириллица и UTF8 - смотри как там(кириллицу никто не обязался вставлять в шрифт), и загоняешь ее в TGA

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

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


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

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

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

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


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

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

У меня с английским проблема, но попробовать можно

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


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

У меня с английским проблема, но попробовать можно

переводчик в помощь, понимают

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


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

переводчик в помощь, понимают

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

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


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

И в добавок, я сервер не держу, если кому и надо то буду делать отдельно, за шуршание в кормане

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


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

Alex39 Во 1. Это не проблема.) Им с большой колокольни до каких то языков акромя ENG. Во 2. Правки такого рода, - добавление UTF8, локализаций, и т.п. вносятся после релиза, на стабильной игре, + после процесса адаптации и оптимизации. А в игре релиз только "какбЭ" был. И думаю им не до расширения шрифтов. В 3. Возможно им такой шрифт нужен)

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

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


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

Alex39 Во 1. Это не проблема.) Им с большой колокольни до каких то языков акромя ENG. Во 2. Правки такого рода, - добавление UTF8, локализаций, и т.п. вносятся после релиза, на стабильной игре, + после процесса адаптации и оптимизации. А в игре релиз только "какбЭ" был. И думаю им не до расширения шрифтов. В 3. Возможно им такой шрифт нужен)

Вот и я такого мнения

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


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

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

вот пока все так думают, исправления точно не прийдут ;)

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


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

Ребят, подскажите пожалуйста. Я на серваке распаковываю файл scripts.pbo, перемещаю получившуюся папку в корень папки сервера, в параметрах запуска в батнике прописываю -filePatching, но когда захожу с клиента в игру, то меня всё равно выкидывает из игры со следующим сообщением: Error Client contains PBO which is not part of server data: dta\scripts.pbo

 

Сам себе отвечу, вдруг кто-то с такой же проблемой столкнётся. Оказывается, параметр правильный filePathing, а filePatching - неправильный.

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 123new
      В данной теме я распишу возможность создания серверного мода для сервера на собственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.04.152050.
       
      Темы к ознакомлению, связанные с данным материалом:
      https://s-platoon.ru/topic/8701-enscript-uchimsya-osnovam-skriptinga/
      https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/
       
      Нам понадобятся:
      1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
      До версии 1.04 параметра servermod у сервера игры не существовало!!!
      2. Программа 'PBO manager' с состава инструментария армы из сети: https://www.armaholic.com/page.php?id=16369
      Зеркало: https://yadi.sk/d/_gmzoNSDpNJTt
      Еще зеркало:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. Скрипты для упаковки в наш мод, сформированные и подготовленные нами вручную. Как - смотрите тему
      4. Notepad++ https://notepad-plus-plus.org/download
      P.S. Вместо 'PBO manager' можно использовать DayZ Tools, но как им пользоваться разбираемся сами 😉
       
      И так, приступим:
      1. Предположим, что у нас имеется свой некий набор
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Подробнее о создании скриптов для своих целей - читайте вот эту тему!
      2. Создаем папку с нашим модом. Для примера, это будет папка '@My_Server_Mod'. В созданной нами папке создаем папку 'Addons', а в ней папку 'My_Server_Mod'.
      3. Помещаем содержимое распакованного архива в папку 'My_Server_Mod'. Должно получиться так:

      4. В папке 'My_Server_Mod' создаем файлик 'config.cpp' и заполняем его следующими данными (советую использовать Notepad++ для этого):
      class CfgPatches // требуется обязательно { class My_Server_Mod // требуется обязательно, совпадает с именем мода { units[]={}; // may be not worked weapons[]={}; // may be not worked requiredVersion=0.1; // may be not worked requiredAddons[]={}; /* requiredAddons[]= { "DZ_Data", // Перечисляем требуемые и используемые модом аддоны (pbo-файлы игры и модов по их внутренним скриптовым именам) }; */ }; }; class CfgMods // // требуется обязательно, совпадает с именем мода { // https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation class My_Server_Mod { dir = "My_Server_Mod"; // Имя папки мода, совпадает с именем мода picture = ""; // Картинка в описании мода action = ""; // Ссылка, например вот так: action = "https://dayz.com/"; hideName = 1; // Не уверен, что этот параметр работает hidePicture = 1; // Не уверен, что этот параметр работает name = "My_Server_Mod"; // Имя мода (а также его внутреннее скриптовое имя) logoSmall = "Mods/TestMod/modlogosmall.tga"; // значок рядом с именем мода, если описание не развернуто logo = "Mods/TestMod/modlogo.tga"; // логотип под меню игры logoOver = "Mods/TestMod/modlogohover.tga"; // при наведении курсора мыши на логотип tooltip = "tooltip"; // подсказка при наведении курсора мыши overview = "My Server Mod"; // Описание credits = "123new"; // credits author = "123new"; // author authorID = "0"; // author steam ID version = "1.0"; // version extra = 0; // Не уверен, что этот параметр работает type = "mod"; // требуется обязательно, остается неизменным // inputs = "mods\testmod\inputs\my_new_inputs.xml"; // необязательно, при использовании пользовательских inputs dependencies[]={"Core","GameLib","Game","World","Mission"}; // необязательно, если необходимо установить зависимость класса class defs { class engineScriptModule { value=""; // если значение пустое, используется функция ввода по умолчанию files[]={"My_Server_Mod/scripts/1_Core"}; // вы можете добавить любое количество файлов или каталогов, и они будут скомпилированы вместе с оригинальными скриптами игрового модуля }; class gameLibScriptModule { value=""; files[]={"My_Server_Mod/scripts/2_GameLib"}; }; class gameScriptModule { //value="CreateGameMod"; // когда значение заполнено, имя функции ввода модуля скрипта по умолчанию перезаписывается им value = ""; files[]={"My_Server_Mod/scripts/3_Game"}; }; class worldScriptModule { value=""; files[]={"My_Server_Mod/scripts/4_World"}; }; class missionScriptModule { value=""; files[]={"My_Server_Mod/scripts/5_Mission"}; }; }; // Если какой-то из разделов скриптинга вам не нужен и вы не сибираетесь его паковать, сотрите необходимый блок с ним выше и в массиве dependencies }; }; Пояснения в файле оставил. Файл готовый:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Как видите, в 'deffs' названия классов и путей соответствуют родным из 'scripts.pbo', но с допиской имени мода. Имя мода в данном случае и есть идентификатор для обращения к своему моду извне. А в 'dependencies' перечисляются используемые классы оригинальных скриптов без дописки номера секции. Количество используемых 'dependencies' и блоков 'deffs' должно быть идентично.
      Пояснения есть также и в официальной документации от разработчика: https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation
      5. Запаковываем нашу папку 'My_Server_Mod' в pbo-файл 'My_Server_Mod.pbo' через 'PBO manager', как на скриншоте ниже:

      Можно использовать и другие способы запаковки, если знаете их или привычны вам.
      6. Добавляем в параметры запуска сервера параметр:
      "-servermod=@My_Server_Mod;" -FilePatching 7. Радуемся, наш серверный
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      P.S. Создавать bikey файл для мода и bisign подписи для него не требуется, иначе это может привести к неработоспособности серверной модификации (возможно, недоработка сервера игры разработчиком)
       
      Отмечу сразу, что данный способ подходит для модификации и переписывания оригинальных классов скриптов сервера от разработчиков и модификации чужих модов с помощью моддинга, применяется исключительно на стороне сервера игры и клиент игры не затрагивает. Распространять такой мод игрокам НЕ НУЖНО!
      Изменение оригинальных скриптов, для которых не предусмотрена операция 'modded class' в движке игры, а также классов и функций, которые защищены языком и движком игры от такого рода действий через серверные моды не получится. Если вы столкнулись с этим, вам проще распаковать scripts.pbo и поместить папку scripts в корень сервера игры, добавить в параметры запуска сервера параметр -FilePatching и изменять напрямую в папке необходимые вам файлы.Запаковывать назад в pbo папку и размещать в dta в таком случае не нужно!
       
      P.P.S. Процедура создания своего собственного клиент-серверного мода на основе скриптов работает таким же образом. В случае создания такого мода, файл 'config.cpp' может быть для стандартного мода более разнообразным, а также после требуется обязательная подпись такого мода в bisign и создание bikey файлов. Более подробно это освещать требуется отдельно!
    • Автор: 123new
      В данной теме я распишу мой вариант установки сейвзоны, работающий на момент публикации статьи на версии сервера игры 1.06.152885.
       
      Установка
      1. Открываем 'init.c' в  'MpMissions' вашей.
      2. Вверху файла добавляем 1 строкой:
      #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c" Где 'dayzoffline.chernarusplus' - имя папки с активной 'MpMissions' вашей.
      Т.е. для карты Livonia 'dayzoffline.chernarusplus'  надо вручную заменить на 'dayzOffline.enoch'
      Пример:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3.Создаем папку 'Scripts' в корне 'MpMissions' вашей, а в ней создаем файл с именем 'safezone.c' следующего содержания:
      /* Author: Sania(ZoS) (aka 123new) Project: S-platoon.ru Install: 1. Create a 'Scripts' directory in your active mpmissions 2. Plase this filename (safezone.c) in 'Scripts' 3. Add in init.c this line: #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c" Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server 4. Configure a next settings */ class SafeZone_PlugIn { protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false) protected float SAFEZONE_time_repeat_checking = 10; //In seconds ref static TStringArray SAFEZONE_LOACTIONS = {"15145.1 32.9793 13919.0", "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone) protected static float SAFEZONE_RADIUS = 100; //In meter protected static string SAFEZONE_ENTRY_MESSAGE = "Welcome to The SafeZone! Godmode ENABLED!"; protected static string SAFEZONE_EXIT_MESSAGE = "You Have Left The SafeZone! Godmode DISABLED!"; void OnInit() { if(Activate_SafeZone_PlugIn) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); } } static void RunCheckStart() { private array<Man> players = new array<Man>; GetGame().GetPlayers( players ); if (SAFEZONE_LOACTIONS.Count() > 0) { if (players.Count() > 0) { foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS) { if( players.Count() > 0 ) { foreach(Man player: players) { if(player) { private PlayerBase player_casted = PlayerBase.Cast(player); CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector()); } } } } } } } static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION) { private float SAFEZONE_distance; private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER; SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64 private vector SAFEZONE_pos_player = player.GetPosition(); private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION); private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString(); SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED); if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "true") //Already in zone { GetGame().SetProfileString(name_mesage_profile,"true"); player.SetAllowDamage(false); //GodMode On return; } else { GetGame().SetProfileString(name_mesage_profile,"true"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); player.SetAllowDamage(false); //GodMode On SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player); } } else { //Player Outside of Zone if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone { SAFEZONE_ZoneCheck = ""; GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck); if (SAFEZONE_ZoneCheck == "false") { GetGame().SetProfileString(name_mesage_profile,"false"); return; } else { if (SAFEZONE_ZoneCheck != "") { GetGame().SetProfileString(name_mesage_profile,"false"); Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString()); player.SetAllowDamage(true); //GodMode Off SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player); } else { GetGame().SetProfileString(name_mesage_profile,"false"); return; } } } } } static vector CorrectToGroundPosY(vector pos) { private float pos_x = pos[0]; private float pos_z = pos[2]; private float pos_y = GetGame().SurfaceY(pos_x, pos_z); private vector tmp_pos = Vector(pos_x, pos_y, pos_z); return tmp_pos; } static void SendPersonalMessage(string message, PlayerBase casted_player) { Man player; Class.CastTo(player, casted_player); if(( player ) && (message != "")) { Param1<string> m_GlobalMessage = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); } } } /* class SafeZone_Config //test config for json { vector SAFEZONE_LOACTION = "15145.1 32.9793 13919.0"; //Map coords (position of the safe zone) float SAFEZONE_RADIUS = 100.0; //In meter string SAFEZONE_ENTRY_MESSAGE = "Welcome to The SafeZone! Godmode ENABLED!"; string SAFEZONE_EXIT_MESSAGE = "You Have Left The SafeZone! Godmode DISABLED!";\ } */ ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn(); modded class CustomMission { override void OnInit () { super.OnInit(); SafeZone.OnInit(); } } Ну или скачиваем его отсюда в готовом виде:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Здесь:
       'SAFEZONE_LOACTIONS' - координаты точкек центра сейвзоны, можно указать несколько.
      'SAFEZONE_RADIUS' - радиус от указанного центра севзоны, на котором действует защита
      'ENTRY_MESSAGE' - сообщение о входе в зону (не рекоммендуется указывать русский язык, может не отображаться)
      'EXIT_MESSAGE' - сообщение о выходе из зоны (не рекоммендуется указывать русский язык, может не отображаться)
      'SAFEZONE_time_repeat_checking' - время повтора проверки наличия игроков в зонах, в секундах
      'Activate_SafeZone_PlugIn' - активация плагина скрипта, true - ключен, false - выключен
      4. Запускаем сервер и проверяем.
       
      Для совсем ленивых готовая миссия сервера с настроенной сейвзоной для патча игры 1.06 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
      Гайд обновлен: 31.01.2020
       
       
    • Автор: 123new
      За основу взята наработка автора скрипта: http://s-platoon.ru/profile/14721-borizzk/
      И немного доработана по своим соображениям.
      Использование мода клиенту игры НЕ ТРЕБУЕТСЯ!!!
       
      И так, установка:
      1. Первым делом нам необходим чистый стандартный сервер DayZ (без модов, поскольку моды могу приводить к неработоспособности частей гайда). Установить его можно по инструкции, например, так:
      2. Добавляем в папку сервера игры мод из архива:
      3. Добавляем в параметры запуска сервера:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      -Filepatching "-servermod=@KillFeed_ServerMod" Если ваш сервер уже имеет серверные моды, просто добавьте папку с модом в список используемых сервером модов.
      ВАЖНО: не добавляйте данный мод в параметр запуска сервера -mod=, иначе это может стать проблемой заходи игроков с параметрами verifysignatures=2; equalmodrequired=1;
      4. В 'config-файле' сервера (там где названием сервера и прочие настройки) добавляем настройки для мода:
      //KillFeed_mod KillFeed_enableSaveKills = 1; // Включение сохранения счетчика убийств по игрокам KillFeed_enableSaveDies = 1; // Включение сохранения счетчика смертей по игрокам KillFeed_enableCustomTimeLog = 1; // Включение записи модом 'Кастомных' логов смертей игроков KillFeed_enableDefaultLog = 1; // Включение записи сервером стандартных логов сервера в scripts.log KillFeed_enableDebugLog = 1; // Включение записи сервером отладочных логов сервера в scripts.log (работает при KillFeed_enableDefaultLog = 1) KillFeed_enableMessages = 1; // Включение отправки сообщений в чат сервера о смертях игроков Пояснения к настройкам, как видите, имеются.
      Напомню, активный профиль сервера обозначается параметром '-profiles={имя папки или путь до папки}'
      Например, при указании:
      -profiles=Instance_1 папка профиля сервера будет выглядеть вот так:
      5. Запускаем сервер, умираем от зомби и радуемся. Сообщения о смертях игроков будут в чате у других игроков (если в настройках игры они не отключены), так и в script.log.

      Где хранятся счетчики убийств и смертей? Ответ:
      Они хранятся в profile сервера игры. Т.е. после 1-го запуска создаются 2 файла (как у клиента игры в документах windows в папку dayz) в файлах с расширениями ".vars.DayZProfile" и ".DayZProfile". При удалении этих файлов счетчики сбросятся!
       
      P.S. Чтобы увидеть сообщения в чате, нужно быть 2-м игрокам на сервере, и умереть одному из двух. тот, кто умирает, сообщения с чата не видит!!!
       
    • Автор: fedotovyasha
      Хочу немного изменить сообщения перед отправкой клиенту
  • Наш выбор

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

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

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