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

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

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

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

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

[1.0][KillFeed] Логи, сообщения о смерти, счетчик убийств игроков

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

Логи смертей пишет, но выводит на экран в игре иногда (на Livonia). Завтра еще раз проверю и напишу.

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


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



19 минут назад, IIICTAPbIuIII сказал:

Логи смертей пишет, но выводит на экран в игре иногда (на Livonia). Завтра еще раз проверю и напишу.

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

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


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

Извиняюсь, все работает (не работала другая версия с стима V3)

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


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

и вот еще, что не пытался скачать с темы качает архивы с размером 0 КБ

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


Ссылка на сообщение
Поделиться на других сайтах
:watchdog 
echo (%time%) %wat% started. 
start "Dayz_SA" /wait /affinity FF /high "DayZServer_x64.exe" -config=serverDZ.cfg -dologs -port=2402 "-mod=@CF;@VPPNotifications;@VPPAdminTools;@DayZ-Expansion-Chat;@PartyMe;@VanillaPlusPlusMap;@Trader;@TraderFix_v2;@Unlimited Stamina;@Base Furniture Mods 2.0;@BetterSuppressors;@Code Lock;@DisableBaseDestruction;@Mass'sManyItemOverhaul;@Cl0ud's Military Gear;@OP_BaseItems;@MosinScope;@MoreGuns;@LittleQuieter;@WeaponExpansion;@MunghardsItempack;@BuilderItems;@BuildAnywhere_v3" "-profiles=C:\Program Files (x86)\Steam\steamapps\common\DayZServer\profiles" -Filepatching "-servermod=@KillFeed_ServerMod" -BEpath=C:\Program Files (x86)\Steam\steamapps\common\DayZServer\battleye
echo (%time%) %wat% closed or crashed, restarting. 
goto watchdog
//maxPing= 200; // Максимальный пинг игрока, разрешённый на сервере 
//timeStampFormat = "Short"; // Формат временных отметок в .rpt файле (Full или Short) 
logAverageFps = 60; // Логирование среднего FPS сервера (параметр в секундах), требует активации параметра -dologs в параметрах запуска 
logMemory = 60; // Логирование использования памяти сервера (значение в секундах), требует активации параметра -dologs в параметрах запуска 
logPlayers = 60; // Логирование количества игроков на сервере (значение в секундах), требует активации параметра -dologs в параметрах запуска 
logFile = "server_console.log";// Сохраняет консоль сервера в файл в папке с другими логами 

//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; // Включение отправки сообщений в чат сервера о смертях игроков

 
class Missions
{
    class DayZ
    {
        template="dayzOffline.chernarusplus"; // Mission to load on server startup. <MissionName>.<TerrainName>
					      // Vanilla mission: dayzOffline.chernarusplus
					      // DLC mission: dayzOffline.enoch
    };
};

В сервер логах вообще тишина. И соответственно ничего не выводится (
Скрипты выводящие ОнЛайн и КастомСообщения работают ... по убийствам тишина

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


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

У меня все работает отлично, но все никак не могу чтоб кроме убийств еше + писало сколько игрок умер. тупо число 0 с места не двигается...

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


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

У меня все работает отлично, но все никак не могу чтоб кроме убийств еше + писало сколько игрок умер. тупо число 0 с места не двигается...

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

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


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

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

Не нашел как удалить сообщение с форума. Но разобрался. Оказывается я распаковал архив в папку и мод попал в "подпапку".... вытащил и заработало

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


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

Кто подскажет как сделать нормальные названия? - с какого оружия человек убил, а то сейчас например модовские пишет MSFC_AK_ALFA
"className" заменяю на "displayName" не помогает =)

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


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

"className" заменяю на "displayName" не помогает 😃

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

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


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

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

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


Нормальное отображение. я вот так прописываю :
 

p_Killer.killscore = p_Killer.killscore + 1; 
if (enableSaveKills)
{
	g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
	g_Game.SaveProfile();
	if ((enableDefaultLogs) && (enableDebugLogs))
	{
		Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
	}

if ( itemInHands.IsItemBase() )
{
	ItemBase item  = ItemBase.Cast(itemInHands);
	string displayName = item.GetType();
	deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
}
else
{
	deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
}

 

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


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

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


Нормальное отображение. я вот так прописываю :
 

p_Killer.killscore = p_Killer.killscore + 1; if (enableSaveKills) { g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString()); g_Game.SaveProfile(); if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG } if ( itemInHands.IsItemBase() ) { ItemBase item = ItemBase.Cast(itemInHands); string displayName = item.GetType(); deathMsg = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; } else { deathMsg = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; }


p_Killer.killscore = p_Killer.killscore + 1; 
if (enableSaveKills)
{
	g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
	g_Game.SaveProfile();
	if ((enableDefaultLogs) && (enableDebugLogs))
	{
		Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
	}

if ( itemInHands.IsItemBase() )
{
	ItemBase item  = ItemBase.Cast(itemInHands);
	string displayName = item.GetType();
	deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
}
else
{
	deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
}

 

item.GetType(); меняем на item.GetName();

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


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

@123new Все заменил но теперь он не пишет вообще оружие 
 

Player_Name   = Player_Identity.GetName();
p_UID     =  Player_Identity.GetPlainId(); 
p_pos = Player.GetPosition().ToString();
string   deathMsg   = "";
string   deathMsgDist  = "";
               string   deathMsgKillScore =  "";
string    DebugMessage;
if ((enableDefaultLogs) && (enableDebugLogs))
{
	Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG
}
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
}
} 
if ((enableDefaultLogs) && (enableDebugLogs))
{
	Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG

if (p_Killer)
{
if (Player == p_Killer)
{
	deathMsg = Player_Name + " Решает покончить с собой.";
	message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой.";
}
else
{
	PlayerIdentity Killer_Identity = p_Killer.GetIdentity();
	if (Killer_Identity)
{
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)
	{
		if ((enableDefaultLogs) && (enableDebugLogs))
		{
			Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG
		}
		p_Killer.killscore = strkillscore.ToInt();
	}
}
p_Killer.killscore = p_Killer.killscore + 1; 
if (enableSaveKills)
{
	g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
	g_Game.SaveProfile();
	if ((enableDefaultLogs) && (enableDebugLogs))
	{
		Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
}

if ( itemInHands.IsItemBase() )
{
	ItemBase item  = ItemBase.Cast(itemInHands);
	string displayName = item.GetName();
	deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
}
else
{
	deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
			}
		}
	}
}

 

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

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


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

@123new Все заменил но теперь он не пишет вообще оружие 
 

Player_Name = Player_Identity.GetName(); p_UID = Player_Identity.GetPlainId(); p_pos = Player.GetPosition().ToString(); string deathMsg = ""; string deathMsgDist = ""; string deathMsgKillScore = ""; string DebugMessage; if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG } 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 } } if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG if (p_Killer) { if (Player == p_Killer) { deathMsg = Player_Name + " Решает покончить с собой."; message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой."; } else { PlayerIdentity Killer_Identity = p_Killer.GetIdentity(); if (Killer_Identity) { 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) { if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG } p_Killer.killscore = strkillscore.ToInt(); } } p_Killer.killscore = p_Killer.killscore + 1; if (enableSaveKills) { g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString()); g_Game.SaveProfile(); if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG } if ( itemInHands.IsItemBase() ) { ItemBase item = ItemBase.Cast(itemInHands); string displayName = item.GetName(); deathMsg = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; } else { deathMsg = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; } } } }


Player_Name   = Player_Identity.GetName();
p_UID     =  Player_Identity.GetPlainId(); 
p_pos = Player.GetPosition().ToString();
string   deathMsg   = "";
string   deathMsgDist  = "";
               string   deathMsgKillScore =  "";
string    DebugMessage;
if ((enableDefaultLogs) && (enableDebugLogs))
{
	Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG
}
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
}
} 
if ((enableDefaultLogs) && (enableDebugLogs))
{
	Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG

if (p_Killer)
{
if (Player == p_Killer)
{
	deathMsg = Player_Name + " Решает покончить с собой.";
	message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой.";
}
else
{
	PlayerIdentity Killer_Identity = p_Killer.GetIdentity();
	if (Killer_Identity)
{
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)
	{
		if ((enableDefaultLogs) && (enableDebugLogs))
		{
			Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG
		}
		p_Killer.killscore = strkillscore.ToInt();
	}
}
p_Killer.killscore = p_Killer.killscore + 1; 
if (enableSaveKills)
{
	g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
	g_Game.SaveProfile();
	if ((enableDefaultLogs) && (enableDebugLogs))
	{
		Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
}

if ( itemInHands.IsItemBase() )
{
	ItemBase item  = ItemBase.Cast(itemInHands);
	string displayName = item.GetName();
	deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
}
else
{
	deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
	message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
			}
		}
	}
}

 

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

попробуй то ж самое, но вместо item.GetName(); воткни item.GetDisplayName();

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


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

Господа, подскажите, в версии 1.07 данный скрипт работает? Ничего не поменялось там?

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


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

@123new Привет. слушай вообщем DisplayName заработал, но проблема теперь другая)) пишет в кил фиде - Я убиваю с рук, а пишет якобы убил тем что держал последнее тот игрок кого убили)) типо если яблоко было то будет яблоком) или биноклем и тд. причем не я что держал последнее в руках а тот кого я убиваю с руки xD

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


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

Господа, подскажите, в версии 1.07 данный скрипт работает? Ничего не поменялось там?

Да все работает. настроить может каждый под себя

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


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

@123new Привет. слушай вообщем DisplayName заработал, но проблема теперь другая)) пишет в кил фиде - Я убиваю с рук, а пишет якобы убил тем что держал последнее тот игрок кого убили)) типо если яблоко было то будет яблоком) или биноклем и тд. причем не я что держал последнее в руках а тот кого я убиваю с руки xD

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

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


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

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

modded class PlayerBase
{
	//PLAYER DEATH with MESSAGES START
	// BY BORIZZ.K, s-platoon.ru (ThX Mizev, NoNameUltima, 123New and DaOne)
	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
	
	//Default settings
	string Dir_Location_CustomKil_Logs = "$profile:\\";  // Location Custom logs
	string DirName_Location_CustomKil_Logs = "KillLogs\\";  // Name directory for Custom logs
	string NameFile_Location_CustomKil_Logs = "KillFeedLog.txt"; // Name file for Custom logs
	string Name_Block_Logs_Default = "[KillFeed]";  // Detect info for script messages in script.log
	
	// Next is mod code!!!
	void Message_PlayerKilled(Object player_obj, Object killer)
	{
		string message_logs = "";
		PlayerBase  p_Killer   = NULL; // Killer
		PlayerBase   Player     =  NULL; // Killed player
		PlayerIdentity Player_Identity  = NULL; //Killed player Identity
		string   Player_Name   = ""; //Killed player name
		string    p_UID     =  ""; // Killed player UID
		string    p_pos     =  ""; // Killed player pos
		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
		bool    enableCustomLogs  =  true; // enable/disable writing custom logs in profile folder server
		bool    enableDefaultLogs  =  true; // enable/disable writing default logs server in scripts.log
		bool    enableDebugLogs  =  true; // enable/disable writing debug logs server in scripts.log (worked with enabled defaults logs)
		bool    enableMessages  =  true; // enable/disable messages in chat server about dieds players

// unworked after update game		int chat_channel_NuM = 5;   // Number chanel to send message in game chat (0-6)
		
		string date_time_log = KillFeed_GetDateTimeLog();
		if ( GetGame().ServerConfigGetInt("KillFeed_enableCustomTimeLog") == 0 ) //place parameter KillFeed_enableCustomTimeLog = 0; for disable writing a Custom logs
		{	
			enableCustomLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableDefaultLog") == 0 )   //place parameter KillFeed_enableDefaultLog = 0; for disable writing a default logs
		{	
			enableDefaultLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableDebugLog") == 0 ) //place parameter KillFeed_enableDebugLog = 0; for disable writing a debug logs
		{	
			enableDebugLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableMessages") == 0 )  //place parameter KillFeed_enableMessages = 0; for disable messages in chat server about fieds players
		{	
			enableMessages  =  false;
		}		
		if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveKills") == 0 ) //place parameter KillFeed_enableSaveKills = 0; for disable SaveKills to server profile
		{	
			enableSaveKills  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveDies") == 0 )//place parameter KillFeed_enableSaveDies = 0; for disable SaveDies to server profile
		{
			enableSaveDies  =  false;
		}
		
		if (player_obj)
		{
			Player = PlayerBase.Cast(player_obj);	
			if (Player)
			{
				Player_Identity  = Player.GetIdentity();
				if (Player_Identity)
				{				
					Player_Name   = Player_Identity.GetName();
					p_UID     =  Player_Identity.GetPlainId(); 
					p_pos = Player.GetPosition().ToString();
					string   deathMsg   = "";
					string   deathMsgDist  = "";
                    string   deathMsgKillScore =  "";
					string    DebugMessage;
					if ((enableDefaultLogs) && (enableDebugLogs))
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG
					}
					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
						}
					} 
					if ((enableDefaultLogs) && (enableDebugLogs))
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG
					}

					if (p_Killer)
					{
						if (Player == p_Killer)
						{
							deathMsg = Player_Name + " Решает покончить с собой.";
							message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой.";
						}
						else
						{
							PlayerIdentity Killer_Identity = p_Killer.GetIdentity();
							if (Killer_Identity)
							{
								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)
									{
										if ((enableDefaultLogs) && (enableDebugLogs))
										{
											Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG
										}
										p_Killer.killscore = strkillscore.ToInt();
									}
								}
								p_Killer.killscore = p_Killer.killscore + 1; 
								if (enableSaveKills)
								{
									g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
									g_Game.SaveProfile();
									if ((enableDefaultLogs) && (enableDebugLogs))
									{
										Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
									}
								}

								if ( itemInHands.IsItemBase() )
								{
									ItemBase item  = ItemBase.Cast(itemInHands);
									string displayName = item.GetDisplayName();
									deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
									message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
								}
								else
								{
									deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
									message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
								}
							}
						}
					}
					else
					{
						if ( killer.IsKindOf("AnimalBase") )
						{
							deathMsg = Player_Name + " Умирает от диких зверей.";
							message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от диких зверей.";
						} 
						else 
						{
							if ( killer.IsKindOf("ZombieBase") )
							{
								deathMsg = Player_Name + " Умирает от зомби."; 
								message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от зомби.";
							}
							else
							{
								deathMsg = Player_Name + " Умер по неизвестной причине.";
								message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умер по неизвестной причине.";
							}
						}
					}

					if (enableMessages)
					{
					//	GetGame().ChatPlayer(chat_channel_NuM, deathMsg);
						KillFeed_SendMessageToAllPlayers(deathMsg);
					}
					if (enableDefaultLogs)
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " " + message_logs); //DEBUG
					}
					if (deathMsgDist)
					{
						if (enableMessages)
						{
						//	GetGame().ChatPlayer(chat_channel_NuM, deathMsgDist);
							KillFeed_SendMessageToAllPlayers(deathMsgDist);
						}
					}
					if (deathMsgKillScore)
					{
						if (enableMessages)
						{
						//	GetGame().ChatPlayer(chat_channel_NuM, deathMsgKillScore);
							KillFeed_SendMessageToAllPlayers(deathMsgKillScore);
						}
					}
					if (enableCustomLogs)
					{
						string dir_logs_custom = Dir_Location_CustomKil_Logs + DirName_Location_CustomKil_Logs;
						KillFeed_WriteCustomLog(dir_logs_custom, NameFile_Location_CustomKil_Logs, message_logs,Name_Block_Logs_Default);
					}

					if (enableSaveDies)
					{
						string strdiescore;
						g_Game.GetProfileString("diescore"+p_UID,strdiescore);
						if (strdiescore)
						{
							if ((enableDefaultLogs) && (enableDebugLogs))
							{
								Print(date_time_log + " " + Name_Block_Logs_Default + " [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();
						if ((enableDefaultLogs) && (enableDebugLogs))
						{
							Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveDeath: Player: " + Player_Name + ", diescore: " + diescore.ToString()); //DEBUG
						}
					}
					
					if( GetHumanInventory().GetEntityInHands() )
					{
						EntityAI ObjItemPlayerInHands = EntityAI.Cast(player_obj);	
						if( CanDropEntity(ObjItemPlayerInHands) )
						{
							if( !IsRestrained() )
							{
								GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ServerDropEntity,1000,false,( GetHumanInventory().GetEntityInHands()));
							}
						}

					}
				}
			}
		}
	}
	
	void KillFeed_SendMessageToAllPlayers(string message) 
	{
		private array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		private int numbOfplayers = players.Count();
		
		if(( numbOfplayers > 0 ) && (message != ""))
		{
			foreach(Man player: players)
			{
				if(( player ) && (message != ""))
				{
					Param1<string> m_GlobalMessage = new Param1<string>(message); 
					GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
			//		Print(Name_Block_Logs_Default + " Sended to player " + player.GetIdentity().GetDisplayName() + " message: " + message);
				}
			}
		}		
	}
	
	static string KillFeed_GetDateTimeLog()
	{
		int year, month, day, hour, minute, second;
		GetYearMonthDay(year, month, day);
		GetHourMinuteSecond(hour, minute, second);
		string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2);
		return date;
	}

	static void KillFeed_WriteCustomLog(string dir_log_Location, string file_name, string text, string name_block)
	{
		private string date_time_log = KillFeed_GetDateTimeLog();
		private string file_log = dir_log_Location + file_name;	
		private string message_log = "[" + date_time_log + "]: " + text;	
		if ( !FileExist(dir_log_Location) )
		{
			MakeDirectory( dir_log_Location);
		}
		private FileHandle file;
		if ( !FileExist(file_log) )
		{
			file	=	OpenFile(file_log, FileMode.WRITE);
		}
		else
		{
			file	=	OpenFile(file_log, FileMode.APPEND);
		}
		if ( file == 0 )
		{
			Print(name_block + "[CustomLog]: Can't be opened filename for writing a new info: " + file_log);
			Print(name_block + "[CustomLog]: [Write information]: " + message_log);
			return;
		} else
		{
			FPrintln(file, message_log);
		}
		CloseFile(file);
	}

	override void EEKilled( Object killer )
	{
		Message_PlayerKilled(this, killer);		
		super.EEKilled( killer );
	}
}

 

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


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

modded class PlayerBase { //PLAYER DEATH with MESSAGES START // BY BORIZZ.K, s-platoon.ru (ThX Mizev, NoNameUltima, 123New and DaOne) 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 //Default settings string Dir_Location_CustomKil_Logs = "$profile:\\"; // Location Custom logs string DirName_Location_CustomKil_Logs = "KillLogs\\"; // Name directory for Custom logs string NameFile_Location_CustomKil_Logs = "KillFeedLog.txt"; // Name file for Custom logs string Name_Block_Logs_Default = "[KillFeed]"; // Detect info for script messages in script.log // Next is mod code!!! void Message_PlayerKilled(Object player_obj, Object killer) { string message_logs = ""; PlayerBase p_Killer = NULL; // Killer PlayerBase Player = NULL; // Killed player PlayerIdentity Player_Identity = NULL; //Killed player Identity string Player_Name = ""; //Killed player name string p_UID = ""; // Killed player UID string p_pos = ""; // Killed player pos 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 bool enableCustomLogs = true; // enable/disable writing custom logs in profile folder server bool enableDefaultLogs = true; // enable/disable writing default logs server in scripts.log bool enableDebugLogs = true; // enable/disable writing debug logs server in scripts.log (worked with enabled defaults logs) bool enableMessages = true; // enable/disable messages in chat server about dieds players // unworked after update game int chat_channel_NuM = 5; // Number chanel to send message in game chat (0-6) string date_time_log = KillFeed_GetDateTimeLog(); if ( GetGame().ServerConfigGetInt("KillFeed_enableCustomTimeLog") == 0 ) //place parameter KillFeed_enableCustomTimeLog = 0; for disable writing a Custom logs { enableCustomLogs = false; } if ( GetGame().ServerConfigGetInt("KillFeed_enableDefaultLog") == 0 ) //place parameter KillFeed_enableDefaultLog = 0; for disable writing a default logs { enableDefaultLogs = false; } if ( GetGame().ServerConfigGetInt("KillFeed_enableDebugLog") == 0 ) //place parameter KillFeed_enableDebugLog = 0; for disable writing a debug logs { enableDebugLogs = false; } if ( GetGame().ServerConfigGetInt("KillFeed_enableMessages") == 0 ) //place parameter KillFeed_enableMessages = 0; for disable messages in chat server about fieds players { enableMessages = false; } if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveKills") == 0 ) //place parameter KillFeed_enableSaveKills = 0; for disable SaveKills to server profile { enableSaveKills = false; } if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveDies") == 0 )//place parameter KillFeed_enableSaveDies = 0; for disable SaveDies to server profile { enableSaveDies = false; } if (player_obj) { Player = PlayerBase.Cast(player_obj); if (Player) { Player_Identity = Player.GetIdentity(); if (Player_Identity) { Player_Name = Player_Identity.GetName(); p_UID = Player_Identity.GetPlainId(); p_pos = Player.GetPosition().ToString(); string deathMsg = ""; string deathMsgDist = ""; string deathMsgKillScore = ""; string DebugMessage; if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG } 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 } } if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG } if (p_Killer) { if (Player == p_Killer) { deathMsg = Player_Name + " Решает покончить с собой."; message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой."; } else { PlayerIdentity Killer_Identity = p_Killer.GetIdentity(); if (Killer_Identity) { 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) { if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG } p_Killer.killscore = strkillscore.ToInt(); } } p_Killer.killscore = p_Killer.killscore + 1; if (enableSaveKills) { g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString()); g_Game.SaveProfile(); if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG } } if ( itemInHands.IsItemBase() ) { ItemBase item = ItemBase.Cast(itemInHands); string displayName = item.GetDisplayName(); deathMsg = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; } else { deathMsg = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м "; message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore; } } } } else { if ( killer.IsKindOf("AnimalBase") ) { deathMsg = Player_Name + " Умирает от диких зверей."; message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от диких зверей."; } else { if ( killer.IsKindOf("ZombieBase") ) { deathMsg = Player_Name + " Умирает от зомби."; message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от зомби."; } else { deathMsg = Player_Name + " Умер по неизвестной причине."; message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умер по неизвестной причине."; } } } if (enableMessages) { // GetGame().ChatPlayer(chat_channel_NuM, deathMsg); KillFeed_SendMessageToAllPlayers(deathMsg); } if (enableDefaultLogs) { Print(date_time_log + " " + Name_Block_Logs_Default + " " + message_logs); //DEBUG } if (deathMsgDist) { if (enableMessages) { // GetGame().ChatPlayer(chat_channel_NuM, deathMsgDist); KillFeed_SendMessageToAllPlayers(deathMsgDist); } } if (deathMsgKillScore) { if (enableMessages) { // GetGame().ChatPlayer(chat_channel_NuM, deathMsgKillScore); KillFeed_SendMessageToAllPlayers(deathMsgKillScore); } } if (enableCustomLogs) { string dir_logs_custom = Dir_Location_CustomKil_Logs + DirName_Location_CustomKil_Logs; KillFeed_WriteCustomLog(dir_logs_custom, NameFile_Location_CustomKil_Logs, message_logs,Name_Block_Logs_Default); } if (enableSaveDies) { string strdiescore; g_Game.GetProfileString("diescore"+p_UID,strdiescore); if (strdiescore) { if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [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(); if ((enableDefaultLogs) && (enableDebugLogs)) { Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveDeath: Player: " + Player_Name + ", diescore: " + diescore.ToString()); //DEBUG } } if( GetHumanInventory().GetEntityInHands() ) { EntityAI ObjItemPlayerInHands = EntityAI.Cast(player_obj); if( CanDropEntity(ObjItemPlayerInHands) ) { if( !IsRestrained() ) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ServerDropEntity,1000,false,( GetHumanInventory().GetEntityInHands())); } } } } } } } void KillFeed_SendMessageToAllPlayers(string message) { private array<Man> players = new array<Man>; GetGame().GetPlayers( players ); private int numbOfplayers = players.Count(); if(( numbOfplayers > 0 ) && (message != "")) { foreach(Man player: players) { if(( player ) && (message != "")) { Param1<string> m_GlobalMessage = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); // Print(Name_Block_Logs_Default + " Sended to player " + player.GetIdentity().GetDisplayName() + " message: " + message); } } } } static string KillFeed_GetDateTimeLog() { int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2); return date; } static void KillFeed_WriteCustomLog(string dir_log_Location, string file_name, string text, string name_block) { private string date_time_log = KillFeed_GetDateTimeLog(); private string file_log = dir_log_Location + file_name; private string message_log = "[" + date_time_log + "]: " + text; if ( !FileExist(dir_log_Location) ) { MakeDirectory( dir_log_Location); } private FileHandle file; if ( !FileExist(file_log) ) { file = OpenFile(file_log, FileMode.WRITE); } else { file = OpenFile(file_log, FileMode.APPEND); } if ( file == 0 ) { Print(name_block + "[CustomLog]: Can't be opened filename for writing a new info: " + file_log); Print(name_block + "[CustomLog]: [Write information]: " + message_log); return; } else { FPrintln(file, message_log); } CloseFile(file); } override void EEKilled( Object killer ) { Message_PlayerKilled(this, killer); super.EEKilled( killer ); } }


modded class PlayerBase
{
	//PLAYER DEATH with MESSAGES START
	// BY BORIZZ.K, s-platoon.ru (ThX Mizev, NoNameUltima, 123New and DaOne)
	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
	
	//Default settings
	string Dir_Location_CustomKil_Logs = "$profile:\\";  // Location Custom logs
	string DirName_Location_CustomKil_Logs = "KillLogs\\";  // Name directory for Custom logs
	string NameFile_Location_CustomKil_Logs = "KillFeedLog.txt"; // Name file for Custom logs
	string Name_Block_Logs_Default = "[KillFeed]";  // Detect info for script messages in script.log
	
	// Next is mod code!!!
	void Message_PlayerKilled(Object player_obj, Object killer)
	{
		string message_logs = "";
		PlayerBase  p_Killer   = NULL; // Killer
		PlayerBase   Player     =  NULL; // Killed player
		PlayerIdentity Player_Identity  = NULL; //Killed player Identity
		string   Player_Name   = ""; //Killed player name
		string    p_UID     =  ""; // Killed player UID
		string    p_pos     =  ""; // Killed player pos
		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
		bool    enableCustomLogs  =  true; // enable/disable writing custom logs in profile folder server
		bool    enableDefaultLogs  =  true; // enable/disable writing default logs server in scripts.log
		bool    enableDebugLogs  =  true; // enable/disable writing debug logs server in scripts.log (worked with enabled defaults logs)
		bool    enableMessages  =  true; // enable/disable messages in chat server about dieds players

// unworked after update game		int chat_channel_NuM = 5;   // Number chanel to send message in game chat (0-6)
		
		string date_time_log = KillFeed_GetDateTimeLog();
		if ( GetGame().ServerConfigGetInt("KillFeed_enableCustomTimeLog") == 0 ) //place parameter KillFeed_enableCustomTimeLog = 0; for disable writing a Custom logs
		{	
			enableCustomLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableDefaultLog") == 0 )   //place parameter KillFeed_enableDefaultLog = 0; for disable writing a default logs
		{	
			enableDefaultLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableDebugLog") == 0 ) //place parameter KillFeed_enableDebugLog = 0; for disable writing a debug logs
		{	
			enableDebugLogs  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableMessages") == 0 )  //place parameter KillFeed_enableMessages = 0; for disable messages in chat server about fieds players
		{	
			enableMessages  =  false;
		}		
		if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveKills") == 0 ) //place parameter KillFeed_enableSaveKills = 0; for disable SaveKills to server profile
		{	
			enableSaveKills  =  false;
		}
		if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveDies") == 0 )//place parameter KillFeed_enableSaveDies = 0; for disable SaveDies to server profile
		{
			enableSaveDies  =  false;
		}
		
		if (player_obj)
		{
			Player = PlayerBase.Cast(player_obj);	
			if (Player)
			{
				Player_Identity  = Player.GetIdentity();
				if (Player_Identity)
				{				
					Player_Name   = Player_Identity.GetName();
					p_UID     =  Player_Identity.GetPlainId(); 
					p_pos = Player.GetPosition().ToString();
					string   deathMsg   = "";
					string   deathMsgDist  = "";
                    string   deathMsgKillScore =  "";
					string    DebugMessage;
					if ((enableDefaultLogs) && (enableDebugLogs))
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] Input: killer " + killer.ToString() + " => Class: " + killer.GetName() + ", Player " + Player.ToString() + " => Class: " + Player.GetName()); //DEBUG
					}
					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
						}
					} 
					if ((enableDefaultLogs) && (enableDebugLogs))
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] " + DebugMessage); //DEBUG
					}

					if (p_Killer)
					{
						if (Player == p_Killer)
						{
							deathMsg = Player_Name + " Решает покончить с собой.";
							message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Решает покончить с собой.";
						}
						else
						{
							PlayerIdentity Killer_Identity = p_Killer.GetIdentity();
							if (Killer_Identity)
							{
								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)
									{
										if ((enableDefaultLogs) && (enableDebugLogs))
										{
											Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] LoadKills: Killer: " + killer_name + ", loaded killscore: " + strkillscore); //DEBUG
										}
										p_Killer.killscore = strkillscore.ToInt();
									}
								}
								p_Killer.killscore = p_Killer.killscore + 1; 
								if (enableSaveKills)
								{
									g_Game.SetProfileString("killscore"+k_UID,p_Killer.killscore.ToString());
									g_Game.SaveProfile();
									if ((enableDefaultLogs) && (enableDebugLogs))
									{
										Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveKills: Killer: " + killer_name + ", killscore: " + diescore.ToString()); //DEBUG
									}
								}

								if ( itemInHands.IsItemBase() )
								{
									ItemBase item  = ItemBase.Cast(itemInHands);
									string displayName = item.GetDisplayName();
									deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
									message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
								}
								else
								{
									deathMsg         = killer_name + " убивает " + Player_Name + " - " + dist.ToString() + "м ";
									message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;					
								}
							}
						}
					}
					else
					{
						if ( killer.IsKindOf("AnimalBase") )
						{
							deathMsg = Player_Name + " Умирает от диких зверей.";
							message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от диких зверей.";
						} 
						else 
						{
							if ( killer.IsKindOf("ZombieBase") )
							{
								deathMsg = Player_Name + " Умирает от зомби."; 
								message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умирает от зомби.";
							}
							else
							{
								deathMsg = Player_Name + " Умер по неизвестной причине.";
								message_logs = Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ") Умер по неизвестной причине.";
							}
						}
					}

					if (enableMessages)
					{
					//	GetGame().ChatPlayer(chat_channel_NuM, deathMsg);
						KillFeed_SendMessageToAllPlayers(deathMsg);
					}
					if (enableDefaultLogs)
					{
						Print(date_time_log + " " + Name_Block_Logs_Default + " " + message_logs); //DEBUG
					}
					if (deathMsgDist)
					{
						if (enableMessages)
						{
						//	GetGame().ChatPlayer(chat_channel_NuM, deathMsgDist);
							KillFeed_SendMessageToAllPlayers(deathMsgDist);
						}
					}
					if (deathMsgKillScore)
					{
						if (enableMessages)
						{
						//	GetGame().ChatPlayer(chat_channel_NuM, deathMsgKillScore);
							KillFeed_SendMessageToAllPlayers(deathMsgKillScore);
						}
					}
					if (enableCustomLogs)
					{
						string dir_logs_custom = Dir_Location_CustomKil_Logs + DirName_Location_CustomKil_Logs;
						KillFeed_WriteCustomLog(dir_logs_custom, NameFile_Location_CustomKil_Logs, message_logs,Name_Block_Logs_Default);
					}

					if (enableSaveDies)
					{
						string strdiescore;
						g_Game.GetProfileString("diescore"+p_UID,strdiescore);
						if (strdiescore)
						{
							if ((enableDefaultLogs) && (enableDebugLogs))
							{
								Print(date_time_log + " " + Name_Block_Logs_Default + " [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();
						if ((enableDefaultLogs) && (enableDebugLogs))
						{
							Print(date_time_log + " " + Name_Block_Logs_Default + " [Debug] SaveDeath: Player: " + Player_Name + ", diescore: " + diescore.ToString()); //DEBUG
						}
					}
					
					if( GetHumanInventory().GetEntityInHands() )
					{
						EntityAI ObjItemPlayerInHands = EntityAI.Cast(player_obj);	
						if( CanDropEntity(ObjItemPlayerInHands) )
						{
							if( !IsRestrained() )
							{
								GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ServerDropEntity,1000,false,( GetHumanInventory().GetEntityInHands()));
							}
						}

					}
				}
			}
		}
	}
	
	void KillFeed_SendMessageToAllPlayers(string message) 
	{
		private array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		private int numbOfplayers = players.Count();
		
		if(( numbOfplayers > 0 ) && (message != ""))
		{
			foreach(Man player: players)
			{
				if(( player ) && (message != ""))
				{
					Param1<string> m_GlobalMessage = new Param1<string>(message); 
					GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
			//		Print(Name_Block_Logs_Default + " Sended to player " + player.GetIdentity().GetDisplayName() + " message: " + message);
				}
			}
		}		
	}
	
	static string KillFeed_GetDateTimeLog()
	{
		int year, month, day, hour, minute, second;
		GetYearMonthDay(year, month, day);
		GetHourMinuteSecond(hour, minute, second);
		string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2);
		return date;
	}

	static void KillFeed_WriteCustomLog(string dir_log_Location, string file_name, string text, string name_block)
	{
		private string date_time_log = KillFeed_GetDateTimeLog();
		private string file_log = dir_log_Location + file_name;	
		private string message_log = "[" + date_time_log + "]: " + text;	
		if ( !FileExist(dir_log_Location) )
		{
			MakeDirectory( dir_log_Location);
		}
		private FileHandle file;
		if ( !FileExist(file_log) )
		{
			file	=	OpenFile(file_log, FileMode.WRITE);
		}
		else
		{
			file	=	OpenFile(file_log, FileMode.APPEND);
		}
		if ( file == 0 )
		{
			Print(name_block + "[CustomLog]: Can't be opened filename for writing a new info: " + file_log);
			Print(name_block + "[CustomLog]: [Write information]: " + message_log);
			return;
		} else
		{
			FPrintln(file, message_log);
		}
		CloseFile(file);
	}

	override void EEKilled( Object killer )
	{
		Message_PlayerKilled(this, killer);		
		super.EEKilled( killer );
	}
}

 

попробуй смени

if ( itemInHands.IsItemBase() )
								{
									ItemBase item  = ItemBase.Cast(itemInHands);
									string displayName = item.GetDisplayName();
									deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
									message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
								}

на

if ( itemInHands.IsItemBase() )
								{
									if (( itemInHands.IsWeapon()) || ( itemInHands.IsMeleeWeapon() ))
									{
										ItemBase item  = ItemBase.Cast(itemInHands);
										string displayName = item.GetDisplayName();
										deathMsg   = killer_name + " убивает " + Player_Name + " - " + displayName + " - " + dist.ToString() + "м ";
										message_logs = killer_name + "(steam64id=" + k_UID + ",pos=" + position_killer.ToString() + ") kill: " + Player_Name + "(steam64id=" + p_UID + ",pos=" + p_pos + ")" + deathMsgDist + ", " + deathMsgKillScore;
									}
								}

 

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


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

Проверил счетчик киллов, подтверждаю, на 1.07 всё прекраснейше работает.

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


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

@123new Братишка я поставил то что ты написал ) теперь просто вообще не показывает убийства с руки, но все остальное работает отлично. Не показывает только если убить голыми руками и в логах тоже ничего нет.
Если в руках любой предмет типо яблоко,ножик,бинт и тд то все показывает xD. Но думаю так тоже сойдет спасибо)

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


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

@123new Братишка я поставил то что ты написал ) теперь просто вообще не показывает убийства с руки, но все остальное работает отлично. Не показывает только если убить голыми руками и в логах тоже ничего нет.
Если в руках любой предмет типо яблоко,ножик,бинт и тд то все показывает xD. Но думаю так тоже сойдет спасибо)

ну так и должно быть))

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


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

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

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; // Включение отправки сообщений в чат сервера о смертях игроков

Поэтмоу я попробовал удалить это:

   if(Options_enableLoadNextOptionsFromProfileCFGServer)
        {
            if ( GetGame().ServerConfigGetInt("KillFeed_enableCustomTimeLog") == 0 ) //place parameter KillFeed_enableCustomTimeLog = 0; for disable writing a Custom logs
            {    
                enableCustomLogs  =  true;
            }
            if ( GetGame().ServerConfigGetInt("KillFeed_enableDefaultLog") == 0 )   //place parameter KillFeed_enableDefaultLog = 0; for disable writing a default logs
            {    
                enableDefaultLogs  =  true;
            }
            if ( GetGame().ServerConfigGetInt("KillFeed_enableDebugLog") == 0 ) //place parameter KillFeed_enableDebugLog = 0; for disable writing a debug logs
            {    
                enableDebugLogs  =  true;
            }
            if ( GetGame().ServerConfigGetInt("KillFeed_enableMessages") == 0 )  //place parameter KillFeed_enableMessages = 0; for disable messages in chat server about fieds players
            {    
                enableMessages  =  true;
            }        
            if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveKills") == 0 ) //place parameter KillFeed_enableSaveKills = 0; for disable SaveKills to server profile
            {    
                enableSaveKills  =  true;
            }
            if ( GetGame().ServerConfigGetInt("KillFeed_enableSaveDies") == 0 )//place parameter KillFeed_enableSaveDies = 0; for disable SaveDies to server profile
            {
                enableSaveDies  =  true;
            }
        } else
        {        
            enableSaveKills  =  Options_enableSaveKills; 
            enableSaveDies  =  Options_enableSaveDies; 
            enableCustomLogs  =  Options_enableCustomLogs; 
            enableDefaultLogs  =  Options_enableDefaultLogs; 
            enableDebugLogs  =  Options_enableDebugLogs; 
            enableMessages  =  Options_enableMessages; 
        }

  Но, к сожалению, скрипт не заработал...Dayz 1.07

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

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


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

      

Но, к сожалению, скрипт не заработал...Dayz 1.07

скрипт работает нормально

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: fedotovyasha
      Хочу немного изменить сообщения перед отправкой клиенту
    • Автор: BorizzK
      Как и обещал выкладываю код и небольшой гайд
       
      Собственно речь о функции загрузки UID и координат из файла в массив m_playersSpawnPoints класса миссии, который в последствии можно исполдьзовать в других функциях в классе миссии
       
      Отступление
      массив m_playersSpawnPoints это массив типа map
      В данном случае <string,string> где и индекс и значение текстовые строки
      индексом выступает записанный UID,  а значением координаты, которые перед использованием преобразуются из текста в vector c помощью функции ToVector()
      Но об этом позже
       
      Раздел 1. Подключение
       
      КОд функции:
      //Players personal spawn points (for new connected players) ref map<string,string> m_playersSpawnPoints = new map<string,string>; void LoadPlayersSpawnPoints() { /* Файл playersSpawnPoints.lst кладем в папку указанную в параметре запуска сервера -profiles= тогда путь будет "$Profile:" или если кладем в файл в mpmissions\dayzOffline.chernarusplus\_CONF путь будет "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_CONF\\" Путь меняется в переменной m_SettingsPath - "$Profile:" или "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_CONF\\" Можете указать свой путь, но он должен быть либо в $Profiles: либо в $CurrentDir:\\mpmissions\\dayzOffline.chernarusplus Формат файла: Steam UID в привычном виде 17 цифр Координаты Комментарий (через пробелы) Помните любая ошибка может привести к крашу сервера Не желательны пустые строки! Пример: 76562298156537008 1300 0 5600 Дима 76561998116927209 3000 0 3000 Вася из Новороссийска Про массив: ref map<string, string> m_playersSpawnPoints = new map<string, string>; m_playersSpawnPoints тут массив типа map, где каждый элемент массива состоит из 2х ячеек. 1. Индекс - тип string 2. Значение - тип string Пример работы с массивом типа map Запись в массив m_playersSpawnPoints.Insert("76562298156537008", "1300 0 5600"); //записываем первый элемент - индекс dayz, значение 10 m_playersSpawnPoints.Insert("76561998116927209", "3000 0 3000"); //записываем второй элемент - индекс dayzf, значение 17 Чтение из массива: Получаем значение 0го элемента string m = m_playersSpawnPoints.GetElement(0); // = "1300 0 5600" Получаем индекс 0го элемента string name = m_playersSpawnPoints.GetKey(0); / /= "76562298156537008" Получаем значение по индексу (в данном случае нас интерисует именно ЭТО) string n = m_playersSpawnPoints.Get("76561998116927209"); // = "3000 0 3000" //затем n переводим в вектор Usage in CreateCharacter function for change default spawn position: string PlayerUID = identity.GetPlainId(); if (PlayerUID) { if (m_playersSpawnPoints.Contains(PlayerUID) { pos = m_playersSpawnPoints.Get(PlayerUID).ToVector(); } } */ string FileName = "playersSpawnPoints.lst"; string m_SettingsPath = "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_CONF\\"; //Folder with config files - .ini or .lst // Or "$Profiles:\\" FileHandle file; string file_line; array<string> read_line; int linecount = 0; //Comments check bool skipline = false; bool skipblock = false; //Comments check file = OpenFile(m_SettingsPath + FileName, FileMode.READ); if (file != 0) { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read File: " + m_SettingsPath + FileName + " :::"); while (FGets(file, file_line) >= 0) { linecount++; //Comments check and skip if (file_line.IndexOfFrom(0,"//") == 0 || file_line.IndexOfFrom(0,"#") == 0 || file_line.IndexOfFrom(0," ") == 0 || file_line.Length() <= 0) { skipline = true; } else { skipline = false; } if (file_line.IndexOfFrom(0,"/*") == 0) { skipblock = true; } else if (file_line.IndexOfFrom(0,"*/") == 0) { skipblock = false; skipline = true; } //Comments check if (!skipline && !skipblock) { read_line = new array<string>; file_line.Split(" ",read_line); if (read_line.Count() >= 4) { if (read_line.Get(0).Length() == 17) { if (read_line.Get(1).ToFloat() > 0 && read_line.Get(3).ToFloat() > 0) { if (!m_playersSpawnPoints.Contains(read_line.Get(0))) { m_playersSpawnPoints.Insert(read_line.Get(0), read_line.Get(1) + " " + read_line.Get(2) + " " + read_line.Get(3)); // UID, Position Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read Line c" + linecount + " Add UID " + read_line.Get(0) + " spawnpoint: " + read_line.Get(1) + " " + read_line.Get(2) + " " + read_line.Get(3) + " to m_playersSpawnPoints"); } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read Line c" + linecount + " UID " + read_line.Get(0) + " duplicated, check file!"); } } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read Line c" + linecount + " Position error: '" + read_line.Get(1) + " " + read_line.Get(2) + " " + read_line.Get(3) + "' :::"); } } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read Line c" + linecount + " UID error: " + file_line + " :::"); } } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Read Line c" + linecount + " have errors: " + file_line + " :::"); } } } CloseFile(file); if (m_playersSpawnPoints.Count() > 0) { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Players personal spawn points count: " + m_playersSpawnPoints.Count() + " :::"); } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Players personal spawn points is not loaded! :::"); } } else { Print("::: Init.c ::: LoadPlayersSpawnPoints() ::: Error open file: " + m_SettingsPath + FileName + " :::"); } } Комментарии, а так же диагностические принты в лог не убираю сознательно
       
      ПОдключение и использование.
       
      Функцию размещаем в теле класса миссии в init.c или если она вынесена в другой файл (и файл подключени через #include) в том самом файле в теле класса миссии
       
      Вот как-то так:
       
      class CustomMission : MissionServer { //Тут разные функции и определение переменных класса... //Вот тут переопределенный штатно OnInit override void OnInit () { //тут его код ) //Тут определяем наш массив и функцию //Players personal spawn points (for new connected players) ref map<string,string> m_playersSpawnPoints = new map<string,string>; void LoadPlayersSpawnPoints() { //тут ее код } //Тут разные функции... }  
      Ну Вы поняли...
       
      Далее нам надо при запуске и инициализации сервера эту функцию выполнить
      Но прежде надо создать файл по нужному пути в котором будут UID'ы и координаты
      В данной редакции используется путь "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_CONF\\" и имя файла "playersSpawnPoints.lst"
      те в папке mpmissions\dayzOffline.chernarusplus нужно создать папку _CONF и поместить в нее этот файл
      Но вы можете это переделать как Вам больше нравится
       
      Формат файла:
       
      6561198156925007 2698.36 0 5989.59 USER
      6561198156924007 2698.36 0 5989.59 ВАСЯ
       
      6561198156923007 2698.36 0 5989.59 ПЕТЯ
      //Тут комментарий
      /*
      6561193356923001 3698.36 30 5189.59 ПЕТЯ
      */
       
      //Тут комментарий
      #Тут комментарий
       
      Первое поле - позиция - Это Steam UID (17 цифирь)
      2,3,4 поля позиции числа это координаты X Z Y (Z = высота) - если 0 система поставит перса на землю или ближайшую твердую поверхность под ним
      все что дальше игнорится
       
      Можно каментить строки с помощью // , #
      Можно каментить блоки
      /*
      */
       
      Если первый символ в строке пробел, все остальное то же игнорится
      Пустые строки то же игнорятся
       
      Если в строке с UID и координатами ошибка об этом напишет в лог с указанием номера строки
      Если UID дублируется об этом то же напишет в лог
       
      Ок
      Файл создали
       
      Теперь добавим вызов этой функции в тело функции OnInit в классе миссии (про нее речь шла Выше)
      Функция OnInit ВСЕГДА выполняется при запуске сервера
      Внутрь мы добавим вызов LoadPlayersSpawnPoints()
      В итоге при запуске сервера LoadPlayersSpawnPoints() выполнется и запишет в массив m_playersSpawnPoints UID'ы и координат
       
      Добавляем как-то так:
       
      override void OnInit() { //Тут может быть различный код //Тут вызов нашей функции //Load players personal spawn poins LoadPlayersSpawnPoints(); // => m_playersSpawnPoints // "UID", "Position" //Тут может быть различный код }  
      Запустили  сервер и увидели в логе что файл прочитался и все ок
      .... LoadPlayersSpawnPoints() ::: Players personal spawn points count: итд итп
      Или ошибки
      Если ошибки - читаем все еще раз и/или задаем вопросы в теме (НЕ В ЛИЧКЕ!!!) показывая что куда и как Вы прописали
       
      Отлично
      Тормозим в сервер
       
      Продолжение следует минут через 15
       
       
       
       
    • Автор: 123new
      В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления о количестве игроков.
       
      Нам понадобится:
      1. Сервер DayZ 1.0, сделанный по одному из гайдов:
      2. Notepad++
      3. Немножечко трезвого ума
       
      Приступим:
      1. Открываем Mpmissions - dayzOffline.chernarusplus - init.c
      2. В самом начале файла добавляем:
      #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\PlayersMessagesCount.c" Находим функцию
      void main() и перед ее закрывающей скобкой "}"добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(SendPlayersCount, CountPlayers_TIME_InfoPlayers_Repeat, true); 3. Помещаем в папку файл
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Либо создаем вручную этот файл с именем "PlayersMessagesCount.c" и заполняем его следующим текстом:
      int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000) string Message_Chat = "Online Players: "; void SendPlayersCount() { array<Man> players = new array<Man>; GetGame().GetPlayers( players ); int numbOfplayers = players.Count(); if( numbOfplayers > 0 ) { foreach(Man player: players) { CountPlayers_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player); } // GetGame().ChatPlayer(0,Message_Chat + numbOfplayers.ToString()); } } void CountPlayers_SendPersonalMessage(string message, Man 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()); } } 4. Настраиваем файл как нам нужно. Т.е. в строке
      int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000) указываем время повтора вывода сообщений в чат (поумолчанию стоит 2 минуты)
      и текст сообщений в переменной
      string Message_Chat = "Online Players: ";  
      P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
       
    • Автор: 123new
      В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления о количестве игроков.
       
      Нам понадобится:
      1. Сервер DayZ 0.63, сделанный по одному из гайдов:
      2. Notepad++
      3. Немножечко трезвого ума
       
      Приступим:
      1. Открываем Mpmissions - dayzOffline.chernarusplus - init.c
      2. В самом начале файла добавляем:
      #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\PlayersMessagesCount.c" И после строки
      weather.SetWindFunctionParams(0, 0, 0); добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(SendPlayersCount, TIME_InfoPlayers_Repeat, true); Пример:

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

      3. Помещаем в папку файл Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Либо создаем вручную этот файл с именем "PlayersMessagesCount.c" и заполняем его следующим текстом:
      int TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000) string Message_Chat = "Online Players: "; void SendPlayersCount() { array<Man> players = new array<Man>; GetGame().GetPlayers( players ); int numbOfplayers = players.Count(); if( numbOfplayers > 0 ) { GetGame().ChatPlayer(0,Message_Chat + numbOfplayers.ToString()); } } 4. Настраиваем файл как нам нужно. Т.е. в строке
      int TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000) указываем время повтора вывода сообщений в чат (поумолчанию стоит 2 минуты)
      и текст сообщений в переменной
      string Message_Chat = "Online Players: ";  
      P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
       
    • Автор: 123new
      Автор скрипта: 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. Данная тема является копией утраченной темы на нашем форуме, восстановлена по просьбам 'трудящихся'. Надеюсь, она вам поможет.
       
  • Наш выбор

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

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

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