yTka

[Dayz 0.63] Считывание координат перса и запись в текстовик

Вопрос

Народ,подскажите по скрипту на 63

Нужно чтобы с периодичностью в минуту записывало в текстовый файл UID игрока на сервере и его координаты.

Может знает как это воплотить ?

Спасибо.

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


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

16 ответов на этот вопрос

yTka в init добавить

static void WriteFile(string file_name, string text)
{
	private FileHandle fhandle;
	if ( !FileExist(file_name) )
	{
		fhandle	=	OpenFile(file_name, FileMode.WRITE);
	}
	else
	{
		fhandle	=	OpenFile(file_name, FileMode.APPEND);
	}
	if ( fhandle == 0 )
	{
		Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + fName);
		Print("[#Ultima]: [Журналы]: [Запись]: " + fLine);
		return;
	}
	FPrintln(fhandle, text);
	CloseFile(fhandle);
}

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	for ( int i = 0; i < players.Count(); ++i )
	{
		player_test = players.Get(i);
		if( player_test )
		{
			PlayerIdentity p_identity = player_test.GetIdentity();
			string coord_pl = player_test.GetPosition().ToString();
			string Name_P = p_identity.GetName();
			string UID_P = p_identity.GetPlainId();
			WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
		} 
	}
}

и в конце void main()

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(WritePlayersInfo, 10000, true); 

где 10000 - 10 секунд

Не тестил, но должно работать

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

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


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


23 часа назад, 123new сказал:

yTka в init добавить

static void WriteFile(string file_name, string text)
{
	private FileHandle fhandle;
	if ( !FileExist(file_name) )
	{
		fhandle	=	OpenFile(file_name, FileMode.WRITE);
	}
	else
	{
		fhandle	=	OpenFile(file_name, FileMode.APPEND);
	}
	if ( fhandle == 0 )
	{
		Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + fName);
		Print("[#Ultima]: [Журналы]: [Запись]: " + fLine);
		return;
	}
	FPrintln(fhandle, text);
	CloseFile(fhandle);
}

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	for ( int i = 0; i < players.Count(); ++i )
	{
		player_test = players.Get(i);
		if( player_test )
		{
			PlayerIdentity p_identity = player_test.GetIdentity();
			string coord_pl = player_test.GetPosition().ToString();
			string Name_P = p_identity.GetName();
			string UID_P = p_identity.GetPlainId();
			WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
		} 
	}
}

и в конце void main()

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(WritePlayersInfo, 10000, true); 

где 10000 - 10 секунд

Не тестил, но должно работать

23 часа назад, 123new сказал:

yTka в init добавить

static void WriteFile(string file_name, string text)
{
	private FileHandle fhandle;
	if ( !FileExist(file_name) )
	{
		fhandle	=	OpenFile(file_name, FileMode.WRITE);
	}
	else
	{
		fhandle	=	OpenFile(file_name, FileMode.APPEND);
	}
	if ( fhandle == 0 )
	{
		Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + fName);
		Print("[#Ultima]: [Журналы]: [Запись]: " + fLine);
		return;
	}
	FPrintln(fhandle, text);
	CloseFile(fhandle);
}

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	for ( int i = 0; i < players.Count(); ++i )
	{
		player_test = players.Get(i);
		if( player_test )
		{
			PlayerIdentity p_identity = player_test.GetIdentity();
			string coord_pl = player_test.GetPosition().ToString();
			string Name_P = p_identity.GetName();
			string UID_P = p_identity.GetPlainId();
			WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
		} 
	}
}

и в конце void main()

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(WritePlayersInfo, 10000, true); 

где 10000 - 10 секунд

Не тестил, но должно работать

 

Ошибка:

Cant find variable 'fLine'

 

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

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

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


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

yTka 

static void WriteFile(string file_name, string text)
{
	private FileHandle fhandle;
	if ( !FileExist(file_name) )
	{
		fhandle	=	OpenFile(file_name, FileMode.WRITE);
	}
	else
	{
		fhandle	=	OpenFile(file_name, FileMode.APPEND);
	}
	if ( fhandle == 0 )
	{
		Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + file_name);
		Print("[#Ultima]: [Журналы]: [Запись]: " + text);
		return;
	}
	FPrintln(fhandle, text);
	CloseFile(fhandle);
}

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	for ( int i = 0; i < players.Count(); ++i )
	{
		player_test = players.Get(i);
		if( player_test )
		{
			PlayerIdentity p_identity = player_test.GetIdentity();
			string coord_pl = player_test.GetPosition().ToString();
			string Name_P = p_identity.GetName();
			string UID_P = p_identity.GetPlainId();
			WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
		} 
	}
}

 

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


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

123new Спасибо огромное ) Все работает,а есть вариант чтобы он  строку с данными  каждого игрока  переписывал а не список делал с координатами ?

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


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

yTka 

static void WriteFile(string file_name, string text)
{
	private FileHandle fhandle;
	if ( !FileExist(file_name) )
	{
		fhandle	=	OpenFile(file_name, FileMode.WRITE);
	}
	else
	{
		fhandle	=	OpenFile(file_name, FileMode.APPEND);
	}
	if ( fhandle == 0 )
	{
		Print("[#Ultima]: [Журналы]: Не удалось открыть файл для записи: " + file_name);
		Print("[#Ultima]: [Журналы]: [Запись]: " + text);
		return;
	}
	FPrintln(fhandle, text);
	CloseFile(fhandle);
}

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	for ( int i = 0; i < players.Count(); ++i )
	{
		player_test = players.Get(i);
		if( player_test )
		{
			PlayerIdentity p_identity = player_test.GetIdentity();
			string coord_pl = player_test.GetPosition().ToString();
			string Name_P = p_identity.GetName();
			string UID_P = p_identity.GetPlainId();
			WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
		} 
	}
}

 

если без добавление в конец файла я так думаю:

 

if ( !FileExist(file_name) ) { fhandle = OpenFile(file_name, FileMode.WRITE); } else { fhandle = OpenFile(file_name, FileMode.APPEND); }

 

убрать условие и оставить только  fhandle = OpenFile(file_name, FileMode.WRITE);

 

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

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


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

yTka перед

for ( int i = 0; i < players.Count(); ++i )

добавь

if ( FileExist("$profile:PlayersLogFile.txt") )
{
	DeleteFile("$profile:PlayersLogFile.txt");
}

И перед записью данных о всех игроках файл будет очищаться.
А еще желательно добавить проверку на количество игроков, чтобы примерно так получилось:
 

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	if (players.Count() > 0)
	{
		if ( FileExist("$profile:PlayersLogFile.txt") )
          {
              DeleteFile("$profile:PlayersLogFile.txt");
          }
		for ( int i = 0; i < players.Count(); ++i )
		{
			player_test = players.Get(i);
			if( player_test )
			{
				PlayerIdentity p_identity = player_test.GetIdentity();
				string coord_pl = player_test.GetPosition().ToString();
				string Name_P = p_identity.GetName();
				string UID_P = p_identity.GetPlainId();
				WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
			} 
		}
	}
}

 

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

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


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

yTka перед

for ( int i = 0; i < players.Count(); ++i )

добавь

if ( FileExist("$profile:PlayersLogFile.txt") )
{
	DeleteFile("$profile:PlayersLogFile.txt");
}

И перед записью данных о всех игроках файл будет очищаться.
А еще желательно добавить проверку на количество игроков, чтобы примерно так получилось:
 

static void WritePlayersInfo()
{
	array<Man> players = new array<Man>; Man player; Man player_test; 
	GetGame().GetPlayers( players );
	if (players.Count() > 0)
	{
		if ( FileExist("$profile:PlayersLogFile.txt") )
          {
              DeleteFile("$profile:PlayersLogFile.txt");
          }
		for ( int i = 0; i < players.Count(); ++i )
		{
			player_test = players.Get(i);
			if( player_test )
			{
				PlayerIdentity p_identity = player_test.GetIdentity();
				string coord_pl = player_test.GetPosition().ToString();
				string Name_P = p_identity.GetName();
				string UID_P = p_identity.GetPlainId();
				WriteFile("$profile:PlayersLogFile.txt", "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl);
			} 
		}
	}
}

 

вот интересно а что нет такой функции на авто создание файла?

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


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

123new Спасибо,всё чётко работает !

ага))

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

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


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

BorizzK В стиме вроде валяется.

нет ее в стиме))

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


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

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

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

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

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


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

Войти

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


Войти сейчас