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

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

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

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
BorizzK

Сделать паузу между выводами сообщений в чат

Вопрос

Как бы в цикле сделать задержку 3-5 сек между выводами сообщений в чат

вывелось 2 строки

задержка 3 сек

вывелось еще 2 строки

снова задержка

 

Нужно для скана обьектов и вывода в чат обнаруженных

int radius = cData.ToInt();
array<Object> nearest_objects = new array<Object>;
array<CargoBase> proxy_cargos = new array<CargoBase>;
Object object;
string className;
if (radius > 0 && radius <= 120)
{
	GetGame().GetObjectsAtPosition(AdminPosition, radius, nearest_objects, proxy_cargos);
	for ( int chk = 0; chk < nearest_objects.Count(); chk++ )
	{
		object = nearest_objects.Get(chk);
		className = object.GetType();
		if (className)
		{
				string Msg1 = "Obj:" + chk + ":" + className;
		}
		else
		{
				Msg1 = "Obj:" + chk + ":" + object.ToString();
		}
		string Msg2 = "Pos:" + chk + ":" + object.GetPosition().ToString();
												
		Msgparam = new Param1<string>(Msg1); 
		Msgparam1 = new Param1<string>(Msg2); 
		GetGame().RPCSingleParam(playerAdmin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, playerAdmin.GetIdentity());
		GetGame().RPCSingleParam(playerAdmin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam1, true, playerAdmin.GetIdentity());
		Print("::: AdminMod.c ::: /check ::: " + Msg1);
		Print("::: AdminMod.c ::: /check ::: " + Msg2);
												
		//Тут бы придумать задержку, что бы между выводом в чат инфо по каждому обьекту проходило 2-3 сек...
  		//это не работает
		float wt0 = 0.00;
		while (wt0 < 36000 )
		{
			wt0 = wt0 + 0.01;
            
		}
											
	}
}

если их много то слишком быстро выводятся (((

 

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


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

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

Забронировать это рекламное место


  • 0

BorizzK а если слать инфу через

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater({имя функции}, {через сколько выполнить}, false); 

где будет вызываться отдельная функция, которая будет в чат сообщения писать?

Т.е. скажем первые 2 отправить через пол секунды, следующие 2 и до конца с временем +2 секунды?

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


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

123new Как раз пришел к этому
Как раз сейчас пишу функцию с контролем ее выполнения извне

Возможно интересная штука выходит

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 27.11.2018 в 11:08, BorizzK сказал:

Как бы в цикле сделать задержку 3-5 сек между выводами сообщений в чат

if ( (GetGame().GetTime() - cv_TimeStamp) > 3000 )

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


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

BorizzK Что тебя удивляет? Наличие событий OnEachFrame или OnUpdate ? Или религия не позволяет, создать свой класс, унаследоваться от другого, перекрыть событие подходящее, и внутри использовать счетчик в мс?

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


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

NoNameUltima его не удивляет, его пугает. Пугает неизвестность, того что должно быть дальше после этого условия. Вопрос был в том как сделать задержку отправки сообщений. Условия мы все умеем ставить, а вот саму задержку...

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


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

NoNameUltima Ты не умничай ))) Ты пальцем покажи :relaxed:
И класс бы не хотелось пока

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

 

 

 

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


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

BorizzK В данном случае, в принципе и calllater подойдет... Даже скорее я был не прав, что велосипед получится. - Если именно в чат с задержкой и одному игроку, то - да. Тупо класс, со строками, интервалом, и приватную переменную наращивать внутри выполняемой процедуры. И по переменной, выводить строки из массива.

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


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

NoNameUltima Что ток не делал
Любая задержка игнорится

 

Передаю массив с данными в функцию

 

Мне в цикле в выборке из массива надо задержку

Хрен

 

Идея...

 

Устроить ожидание в цикле по системным часам

GetHourMinuteSecond(hour, minute, second);

Получаем секунды

 

ну а дальше.. чет как-то

 

нужно забирать секунды в цикле

сравнивать и ... вобщем завтра ченить придумаю

 

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

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


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

BorizzK получить секунды и т.п. это все ерунда. Саму задержку по известным секундам как будешь делать то?

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


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

123new 

Я как то делал чтот такое на фортране для ес, тк там то же не было sleep итп

И секунды брал именно системные

Давно это было правда

Вобщем попробую

 

 

 

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


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

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

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


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

123new нет

Идея связана с циклом

На входе текущие секунды

И преобразование

А полезным действием внутрях будет какойнить Get...

Ща с тела

Вечером буду дежурить а цод, накатаю идейку

 

 

 

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

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


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

Не было времени

Попробовал втупую

 

	int sleep(int w_time)
	{
		int w_ticktime = GetGame().GetTickTime();
		int w_sleep = w_ticktime + w_time;
		while (w_ticktime <  w_sleep)
		{
			w_ticktime = GetGame().GetTickTime();
		}
		return w_ticktime;
	}

 

и в цикле после каждого сообщения вызываю

 

int w_time = sleep(5);

 

хрена лысого

 

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

 

а потом все сообщения скопом летят в чат

видно они в буфере накапливаются

 

идиотизьм тля

 

	int radius = cData.ToInt();
	array<Object> nearest_objects = new array<Object>;
	array<CargoBase> proxy_cargos = new array<CargoBase>;
	Object object;
	string className;
	if (radius > 0 && radius <= maxCheckRadius)
	{
		GetGame().GetObjectsAtPosition(AdminPosition, radius, nearest_objects, proxy_cargos); //ВНИМАНИЕ! БОЛЬШОЙ РАДИУС ГРУЗИТ СЕРВЕР!!!
		for ( int chk = 0; chk < nearest_objects.Count(); chk++ )
		{
			object = nearest_objects.Get(chk);
			className = object.GetType();
			if (className)
			{
				string Msg1 = "Obj:" + chk + ":" + className;
			}
			else
			{
				Msg1 = "Obj:" + chk + ":" + object.ToString();
			}
			string Msg2 = "Pos:" + chk + ":" + object.GetPosition().ToString();
			Msgparam = new Param1<string>(Msg1); 
			Msgparam1 = new Param1<string>(Msg2); 
			GetGame().RPCSingleParam(PlayerAdmin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, PlayerAdmin.GetIdentity());
			GetGame().RPCSingleParam(PlayerAdmin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam1, true, PlayerAdmin.GetIdentity());
			Print("::: AdminMod.c ::: /check ::: :" + GetGame().GetTickTime() + ": Msg1: " + Msg1);
			Print("::: AdminMod.c ::: /check ::: :" + GetGame().GetTickTime() + ": Msg2: " + Msg2);
			
			int w_time = sleep(5);
		}
		nearest_objects.Debug();
		proxy_cargos.Debug();
	}
	else
	{
		Msgparam = new Param1<string>("Parameter error!");
		GetGame().RPCSingleParam(PlayerAdmin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, PlayerAdmin.GetIdentity());
	}

 

 

 

 

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


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

идиотизьм тля

В чем идиотизм? Ты взял и в основном потоке, вместо нормальных пропусков по таймеру, сделал велосипед - т.к. sleep в основном потоке не допустим*с оговорками(а уж тем более как ни крути VCL потоке, пусть и 3D), а ты взял и добавил цикл, который не являясь по факту задержкой, не был проигнорирован движком(в арме той же тебе бы выдало not allow suspend in main thread). т.е. вместо нормального подхода попробовал использовать уязвимость движка. и подвесил его...

В итоге имеешь, то что имеешь - подвесив VCL (визуальную часть), ты потом удивляешься, а почему это у тебя все сообщения приходят скопом...

 

Все задержки зависят от конкретной задачи.

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

Банальщина -
 

class ChatMessage
	{
		private	string	cv_Message	=	"";
		private	int		cv_Interval	=	1;
		private	bool	cv_Repeat	=	false;
		
		void ChatMessage(v_Message, v_Interval, v_Repeat)
			{
				cv_Message	=	v_Message;
				cv_Interval	=	v_Interval;
				cv_Repeat	=	v_Repeat;
			}
			
		string Message()
			{ return cv_Message; }
			
		int Interval()
			{ return cv_Interval; }
			
		bool Repeat()
			{ return cv_Repeat; }
			
	}

class DelayChatMessage
	{
		private ref array<ref ChatMessage>	cv_ArrayChatMessage		=	new array<ref ChatMessage>;
		private		int						cv_Iterator				=	0;
		private		int						cv_I					=	0;
		
		void DelayChatMessage()
			{
				cv_ArrayChatMessage	=	new array<ref ChatMessage>;
				cv_Iterator			=	0;
				GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.Timer, 1000, true);
			}
			
		void ~DelayChatMessage()
			{
				GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.Timer);
			}
		
		void Timer()
			{
				for ( cv_I = cv_ArrayChatMessage.Count() - 1; cv_I >= 0; cv_I-- )
					{
						if ( cv_Iterator % cv_ArrayChatMessage[cv_I].Interval() == 0 )
							{
								Print( cv_ArrayChatMessage[cv_I].Message() );
								if ( !cv_ArrayChatMessage[cv_I].Repeat() )
									{ cv_ArrayChatMessage.Remove(v_I); }
							}
					}
				cv_Iterator++;
			}
			
		void AddMessage(string v_Message, int v_Interval, bool v_Repeat)
			{ cv_ArrayChatMessage.Insert( new ChatMessage(v_Message, v_Interval, v_Repeat) ); }

	}
	
ref DelayChatMessage cv_DelayChatMessage	=	new DelayChatMessage();
cv_DelayChatMessage.AddMessage("Тест1", 5, true);	//	Сообщение каждые 5с
cv_DelayChatMessage.AddMessage("Тест2", 15, false);	//	Сообщение через 15с, один раз

P.S. И тут менеджер сообщений имеет не совсем чОткую временную итерацию, т.к. время еще уходит на пробежку по массиву.

Хочешь большей четкости, заноси в класс сообщения - время добавления(время последнего вывода). Таймер поставь на обработку каждую 0.1с, и пробегаясь по массиву, сравнивай не итератор по модулю, а сохраненное время. И если отличие более чем задано в интервале - выводи сообщение, изменяй время в классе сообщения, - если установлен повтор, или попросту удаляй, если повтор не нужен.

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

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


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

Вариант со сравнением времени:

class ChatMessage
	{
		private	string	cv_Message		=	"";
		private	int		cv_Interval		=	1;
		private	int		cv_TimeStamp	=	GetGame().GetTime();
		private	bool	cv_Repeat		=	false;
		
		void ChatMessage(v_Message, v_Interval, v_Repeat)
			{
				cv_Message		=	v_Message;
				cv_Interval		=	v_Interval;
				cv_Repeat		=	v_Repeat;
			}
			
		string Message()
			{ return cv_Message; }
			
		int Interval()
			{ return cv_Interval; }
			
		int GetTimeStamp()
			{ return cv_TimeStamp; }
			
		void SetTimeStamp()
			{ cv_TimeStamp	=	GetGame().GetTime(); }
			
		bool Repeat()
			{ return cv_Repeat; }
			
		
			
	}

class DelayChatMessage
	{
		private ref array<ref ChatMessage>	cv_ArrayChatMessage		=	new array<ref ChatMessage>;
		private		int						cv_I					=	0;
		
		void DelayChatMessage()
			{
				cv_ArrayChatMessage	=	new array<ref ChatMessage>;
				cv_Iterator			=	0;
				GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.Timer, 100, true);
			}
			
		void ~DelayChatMessage()
			{
				GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.Timer);
			}
		
		void Timer()
			{
				cv_TimeStamp	=	GetGame().GetTime();
				for ( cv_I = cv_ArrayChatMessage.Count() - 1; cv_I >= 0; cv_I-- )
					{
						if ( (GetGame().GetTime() - cv_ArrayChatMessage[cv_I].GetTimeStamp()) > cv_ArrayChatMessage[cv_I].Interval() )
							{
								Print( cv_ArrayChatMessage[cv_I].Message() );
								if ( !cv_ArrayChatMessage[cv_I].Repeat() )
									{ cv_ArrayChatMessage.Remove(v_I); }
								else
									{ cv_ArrayChatMessage[cv_I].SetTimeStamp(); }
							}
					}
			}
			
		void AddMessage(string v_Message, int v_Interval, bool v_Repeat)
			{ cv_ArrayChatMessage.Insert( new ChatMessage(v_Message, v_Interval, v_Repeat) ); }

	}
	
ref DelayChatMessage cv_DelayChatMessage	=	new DelayChatMessage();
cv_DelayChatMessage.AddMessage("Тест1", 5, true);	//	Сообщение каждые 5с
cv_DelayChatMessage.AddMessage("Тест2", 15, false);	//	Сообщение через 15с, один раз

 

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


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

NoNameUltima это не то что мне нужно

Про арму

В вызванной через  spawn функции sleep работал прекрасно

 

Мне то нужно

Массив каждый раз разный по размеру и содержимому

От 1 обьекта до 100

Нужно В ЦИКЛЕ проходить массив и делать паузу между обработкой каждого элемента

Элементарно же

Но нет...

 

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

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


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

Вообще то sleep, моя функция

Штатной нет в природе

чо внатуре?) ну ок)

А это наверное мираж(регистрозависимость) -

Sleep( 0.01 );

 

11 минуту назад, BorizzK сказал:

В вызванной через  spawn

Ты через строку читаешь? spawn - не main thread

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

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


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

Sleep и sleep разные вещи, ты согласен?

Короче я понял о чем ты ведешь речь

 

Попробую подойти к решению твоим способом

 

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

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


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

BorizzK тупо:

void Send_Message_chat_after_time(string Message, int time)
{
	Print(GetRealDateTime() + " [Send_Message_Time_Wait] GETTED Message: '" + Message + "' time: '" + time.ToString() + "'");
	if ((Message != "") && (time > -1))
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(Send_Message_chat, (time * 1000), false,Message,5);
	}
}
void Send_Message_chat(string Message, int Channel)
{
	if (Message != "")
	{
		GetGame().ChatPlayer(Channel, Message);
		Print(GetRealDateTime() + " [Send_Message_Time_Wait] Send Message: '" + Message + "'");
	}
}

и добавление в нужном месте вызова:

Send_Message_chat_after_time("TEST STROKA", 10);

например, в конце функции Main в init.c

Результат после старта сервера:

SCRIPT       : 03.12.2018_11.11.09 [Send_Message_Time_Wait] GETTED Message: 'TEST STROKA' time: '10'
SCRIPT       : 03.12.2018_11.11.21 [Send_Message_Time_Wait] Send Message: 'TEST STROKA'

P.S. Функция 'GetRealDateTime()' у меня просто возвращает текущее время и дату в формате для логов.

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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

    • Автор: Miduznya
      Как сделать стартовый лут на сервере???
    • Автор: BorizzK
      Автор я
      На основе наработок комьюнити, на основе идей DaOne
       
      Мучайте
      P.S. Так же там есть доп функционал - для вызовов из класса миссии
      P.S.2. Инструкция (на англ) внутрях
       
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: Alex39
      Прописал скрипт, серверные сообщение, вроде как работают, но есть косяки, может кто подскажет в чем проблема,
      override void OnInit() { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(NumPlayersOnServer, 30000, true); // 30 seconds } void NumPlayersOnServer() { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); int numPlayers = players.Count(); for( int i=0; i < players.Count(); ++i ) { Man player = players.Get(i); if( player ) { string messPlayers = "Players on the server: " + numPlayers.ToString(); Param1<string> m_MessageParam = new Param1<string>(messPlayers); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); } } }
       
      Проблема пропадание трейдера, админ тулз из за этого скрипта
       
      override void OnInit() { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(NumPlayersOnServer, 30000, true); // 30 seconds }  
    • Автор: 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. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!
       
×
×
  • Создать...