class CustomTimeNotification
{
const private string logs_text_name = "[#CustomTimeNotification]";
void CustomTimeNotification()
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.NotifyTime, 1000, true);
}
void NotifyTime()
{
WriteLog(" NotifyTime Start!");
int year, month, day, hour, minute;
GetGame().GetWorld().GetDate(year, month, day, hour, minute);
WriteLog(" InGame Date: "+hour.ToString()+":"+minute.ToString()+" "+day.ToString()+"."+month.ToString()+"."+year.ToString());
if (hour == 6 || hour == 9 || hour == 12 || hour == 15 || hour == 18 || hour == 21 || hour == 0 || hour == 3)
{
string message = string.Format("Кажется... Сегодня %1-е %2. %3-го... Времени около %4 часов.", day, GetMonthName(month), year, hour);
WriteLog(" Message: "+message);
private array<Man> players = new array<Man>;
GetGame().GetPlayers( players );
int numbOfplayers = players.Count();
if( numbOfplayers > 0 )
{
foreach(Man player: players)
{
SendPersonalMessage(message, player);
}
//GetGame().ChatPlayer(message);
}
}
WriteLog("NotifyTime Finish!");
}
string GetMonthName(int month)
{
switch (month)
{
case 1: return "января";
case 2: return "февраля";
case 3: return "марта";
case 4: return "апреля";
case 5: return "мая";
case 6: return "июня";
case 7: return "июля";
case 8: return "августа";
case 9: return "сентября";
case 10: return "октября";
case 11: return "ноября";
case 12: return "декабря";
}
return "";
}
void SendPersonalMessage(string message, Man player)
{
WriteLog(" player="+player.ToString()+" Message: "+message);
if(( player ) && (message != ""))
{
Param1<string> m_GlobalMessage = new Param1<string>(message);
GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity());
WriteLog("[SendPersonalMessage][Sended] "+player.GetIdentity().GetName()+"("+player.GetIdentity().GetPlainId()+") Message: "+message);
}
}
void WriteLog(string text)
{
if (text != "")
{
WriteCorrectLog("[" + GetRealDay() + " - " + GetRealTime() + "] " + logs_text_name + " " + text);
}
}
private void WriteCorrectLog(string message)
{
PrintFormat("%1", message);
}
private string GetRealDay()
{
int year, month, day;
GetYearMonthDay(year, month, day);
string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2);
return date;
}
private string GetRealTime()
{
int hour, minute, second;
GetHourMinuteSecond(hour, minute, second);
string time = hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2);
return time;
}
};
modded class MissionServer
{
override void OnInit()
{
super.OnInit();
new CustomTimeNotification();
}
}
Проверяем script.log файлы сервера на логи при выполнении скрипта чтобы понимать тчо происходит, добавил несколько отладочных строк которые прямо таки будут срать в лог сервера.
Если будет строка с текстом "[SendPersonalMessage][Sended]" в логе, а у конктерного этого игрока текста на экране с чата нет то значит у него в настройках игры отображение чата отключено, т.к. эта комманда гарантированно отправляет в чат сообщение от имени сервера