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

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

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

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

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

DayZ 0.63 Класс для логов[перезалив]

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

Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/

Все благодарности за этот скрипт непосредственно автору скрипта, не мне!


 

Установка:

1. Описание: Создаем собственный класс, для сохранения логов.

Код класса:

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

2. Данный файл сохраняем под именем класса:

Ultima_Server_Class_Logs.c

И помещаем в папку:

....\DayZServer\scripts\5_Mission\mission

 

Пример использования:

*Для примера берем файл:

missionServer.c

В область переменных добавляем:

private    ref Ultima_Server_Class_Logs    Log = new Ultima_Server_Class_Logs();

И далее в любой процедуре, можем логгировать события.

К примеру так:

Log.SaveLog("$profile:MyLogFile.txt", "Записываем строку");

 

Добавлено от 123new:

Если у вас нет папки scripts в папке с сервером игры, откройте папку dta, распакуйте папку scripts из pbo-файла scripts.pbo и переместите в папку с сервером.

Чтобы папка считывалась сервером, необходимо добавить параметр запуска сервера '-FilePatching'.

Чтобы запись в файлы работала, необходимо добавить параметр запуска сервера '-scrAllowFileWrite'

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


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

Доработочка класса/скрипта от NoNameUltima

Сокращено название класса

Добавлена функция ротации логов (как в линухе) - Rotate(string File, int FileNum) 1й параметр имя путь-файла, второй кол-во копий

Перед строкой с текстом всегда прописывается текущая дата и время хоста на котором работает сервер

 

Код

class LogClass
{
	private FileHandle Handle;
	
	void LogClass()
	{
		Print("::: LogClass ::: Init :::");
	}

	void ~LogClass()
	{
		Print("::: LogClass ::: UnInit :::");
	}

	void Save(string File, string String)
	{
		private int year, month, day, hour, minute, second;
		Print("::: [LogClass]: Save: " + File);
		if (!FileExist(File))
		{
			Handle = OpenFile(File,FileMode.WRITE);
		}
		else
		{
			Handle = OpenFile(File, FileMode.APPEND);
		}
		if ( Handle == 0 )
		{
			Print("::: [LogClass]: Can not write file: " + File);
			return;
		}

		FPrintln(Handle, DataBase_GetDate() + "," + DataBase_GetTime() + " : " + String);
		CloseFile(Handle);
	}

	void Rotate(string File, int FileNum)
	{
		Print("::: [LogClass]: Rotate: " + File);
		if (!FileExist(File))
		{
			Print("::: [LogClass]: Rotate: File not exists: " + File);
			return;
		}
		else
		{
			for ( int i = FileNum; i > 0; i-- )
			{
				Print("::: [LogClass]: Rotate: File: " + File + "." + i);
				if (FileExist(File + "." + i))
				{
					Print("::: [LogClass]: Rotate: DeleteFile: " + File + "." + i);
					DeleteFile(File + "." + i);
				}
				if (FileExist(File + "." + (i - 1)))
				{
					Print("::: [LogClass]: Rotate: CopyFile: " + File + "." + (i - 1) + " => " + File + "." + i);
					CopyFile(File + "." + (i - 1), File + "." + i);
				}
			}
			CopyFile(File, File + ".0");
			DeleteFile(File);
		}
	}
	
	static string DataBase_GetDate()
	{
		int year, month, day;	
		GetYearMonthDay(year, month, day);
		string date = day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2);
		return date;
	}

	static string DataBase_GetTime()
	{
		int hour, minute, second;
		GetHourMinuteSecond(hour, minute, second);
		string time = hour.ToStringLen(2) + ":" + minute.ToStringLen(2) + ":" + second.ToStringLen(2);
		return time;
	}
};

 

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: Troy1
      Всем привет. пишу мод и столкнулся с проблемой в реализации.
      Суть: Пытаюсь сделать проверку, если игрок стоит прям у окна или у дверного проёма он должен получать урон.
      Делал вот так.
      int wallHits = 0; float d = 2.2; // Дистанция до стены. Если стена дальше — считаем, что там окно или проем. // 8 направлений "снежинкой" для проверки стен вокруг игрока // Используем Vector(x, y, z) для точности ref array<vector> checkDirs = { Vector(d,0,0), Vector(-d,0,0), Vector(0,0,d), Vector(0,0,-d), Vector(d,0,d), Vector(-d,0,-d), Vector(d,0,-d), Vector(-d,0,d) }; foreach (vector dir : checkDirs) { // Пускаем горизонтальные лучи от позиции игрока (from) if (DayZPhysics.RayCastBullet(from, from + dir, collisionLayerMask, this, hitObject, hitPosition, hitNormal, hitFraction)) { // ПРОВЕРКА: Это должна быть вертикальная стена (Y нормали < 0.5) // Чтобы не засчитать низкий потолок за стену if (Math.AbsFloat(hitNormal[1]) < 0.5) { wallHits++; } } } // УСЛОВИЕ БЕЗОПАСНОСТИ: // В комнате wallHits будет 6-8. У окна или в проеме — 1-4. if (wallHits < 5) { hasSafeCeiling = false; // Слишком открытое пространство (окно/дверь) } Пытался менять дистанции, но всё ровно не как не хочет работать.
      Что я делаю не так, или я вообще делаю не то?
      Мне нужно проверять игрока, в укрытии он или нет.
      С высотой я разобрался, а вот с боковыми лучами у меня траблы и не во всех помещениях работает как нужно.
      В некоторых помещениях вообще не работает, удаляешь строки проверки, начинает работать и то по высоте.
      Просто забегаешь по навес и игрок под защитой, так не должно быть.
      Помогите пожалуйста  решить задачу.
    • Автор: Troy1
      Всем привет. Суть в чём, пишу мод на событие и когда происходит событие, параллельно должна меняться скорость ветра, не могу понять как заставить скрипт управлять силой ветра. Понижать силу ветра получилось сделать, а вот повышать не как. Только после перезагрузки сервера сила ветра задаётся в нужном значение.
      Как сделать, что бы по вызову функции менялась сила ветра в большую или в меньшую сторону?
      protected void SetWind(float wind, float time) { if (!g_Game) return; Weather m_Weather = g_Game.GetWeather(); if (!m_Weather) return; m_Weather.SetWindMaximumSpeed(wind); m_Weather.SetWind(Vector(1/Math.Sqrt(3), 1/Math.Sqrt(3), 1/Math.Sqrt(3)) * wind); m_Weather.SetWindSpeed(wind); m_Weather.SetWindFunctionParams(1.0, 1.0, -1); } Это скрипт на понижение силы ветра.
      Работает понижение силы ветра в том случае, если до этого сила ветра была выше.
      Пример:
      Изначально на сервере сила ветра = 20 m/s А нужно понизить до 10 m/s
      Только в этом случае сработает скрипт который я приложил выше.
      Помогите пожалуйста решить этот вопрос.
      За ранние благодарю.
    • Автор: Troy1
      Пока ждал помощи, решил вопрос!
      Тема закрыта!!!
    • Автор: magliner
      Привет ! Ну вот моя история с вопросом в конце.. Я фанат Дэйз ванилы черноруси, заколебало сидеть на бездушных серверах со слабой админкой и терять лут от софтеров, решил создать под свои скромные запросы около ванильный сервер.. Нашел хорошего исполнителя, быстро и четко запустили отладили и ВОТ я имею СВОЙ сервер.. клас! вечер восторга и изучения
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: SemKa1407
      Ссылка на архив: https://disk.yandex.ru/d/WmYW5AcZozGSiA
      Инструкция, написанная на коленке, есть в архиве (для полных нулей).
  • Наш выбор

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

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

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

Поддержка