Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • OPG PROJECT

    Группа ВК

    По-настоящему хороший сервер с уникальным модом! 
     Заходи к нам,тебе тут понравится!
  • 0
yTka

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

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

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

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

Спасибо.

Share this post


Link to post
Share on other sites

16 answers to this question

Recommended Posts

  • 0

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 секунд

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites



  • 0
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'

 

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

Edited by yTka (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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);
		} 
	}
}

 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0
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);

 

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

Share this post


Link to post
Share on other sites
  • 0

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);
			} 
		}
	}
}

 

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0
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);
			} 
		}
	}
}

 

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

Share this post


Link to post
Share on other sites
  • 0
1 час назад, yTka сказал:

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

ага))

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

Share this post


Link to post
Share on other sites
  • 0
4 часа назад, BorizzK сказал:

DAP Что за софтина на картинке?

SM

Share this post


Link to post
Share on other sites
  • 0
2 часа назад, NoNameUltima сказал:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.