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

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

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

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

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

И еще нужна помощь по классам

Есть класс

 

class LogClass
{
	private FileHandle File;
	
	void LogClass()
	{
		Print("::: [LogClass] ::: Init :::");
	}

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

	void Save(string FileName, string String)
	{
		private int year, month, day, hour, minute, second;
		Print("::: [LogClass]: Save: " + FileName);
		if (!FileExist(FileName))
		{
			File = OpenFile(FileName,FileMode.WRITE);
		}
		else
		{
			File = OpenFile(FileName, FileMode.APPEND);
		}
		if ( File == 0 )
		{
			Print("::: [LogClass]: Can not write FileName: " + FileName);
			Print("::: [LogClass]: May be disk error, file write protected, file busy or FileMode.WRITE disabled (need to specify option -scrAllowFileWrite in server run parameters for enable FileMode.WRITE.");
			return;
		}

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

	void Rotate(string FileName, int FileNum)
	{
		Print("::: [LogClass]: Rotate: " + FileName);
		if (!FileExist(FileName))
		{
			Print("::: [LogClass]: Rotate: FileName not exists: " + FileName);
			return;
		}
		else
		{
			for ( int i = FileNum; i > 0; i-- )
			{
				Print("::: [LogClass]: Rotate: FileName: " + FileName + "." + i);
				if (FileExist(FileName + "." + i))
				{
					Print("::: [LogClass]: Rotate: DeleteFile: " + FileName + "." + i);
					DeleteFile(FileName + "." + i);
				}
				if (FileExist(FileName + "." + (i - 1)))
				{
					Print("::: [LogClass]: Rotate: CopyFile: " + FileName + "." + (i - 1) + " => " + FileName + "." + i);
					CopyFile(FileName + "." + (i - 1), FileName + "." + i);
				}
			}
			CopyFile(FileName, FileName + ".0");
			DeleteFile(FileName);
		}
	}
	
	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;
	}
}

Мне нужно им пользоваться функциями из него в нескольких местах

в PlayerBase.c в функциях в классе PlayerBase

в init.c в функция в классе миссии

Вопрос как?

 

В PlayerBase.c

#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\LogClass\\LogClass.c"
Далее в классе

ref LogClass Log = new LogClass();

ну и в функциях

Log.Save{"путь-имя", данные);

 

Но после последнего обновления 0.63.149.525

В init.c

#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\_MOD\\LogClass\\LogClass.c"

приводит к ошибке - Multiple declaration of class "LogClass"

 

Can't compile mission init script'!

$CurrentDir://mpmissions//dayzOffline.chernarusplus//_MOD//LogClass//LogClass.c(1): Multiple declaration of class 'LogClass'

 

До этого обновления все было норм

Как быть?

 

 

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


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

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

  • 0

BorizzK интегрируй в scripts в 3_Game\Game.c как include
и уже просто как экземпляры класса используй в нужных местах свой класс. т.е. мы объявили класс для сервера в одном месте еще до инициализации классов playerbase и т.п., и там уэе заведомо известный класс используем. В миссии соответственно также не надо его уже через include добавлять.

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


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



  • 0

123new Добаляю в playerbase.c или в game.c и потом в init.c (внутри класса или функции include не работает больше)

и все

пипец

multiple declaration

 

а если только в init.c, то класс доступен только там и нигде более

 

кроме того

если в playerbase.c в классе
ref LogClass Log = new LogClass();

то если я в init.c то же самое сделаю

снова multiple declaration

 

а если LogClass Log1 = new LogClass();

тогда работает но как Log1.блаблабла

 

до крайнего обновления такого не было

 

ироды

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


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

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

Это как с переменной. Не объявив переменную внутри класса ты не можешь к ней обратиться. И объявить 2 раза ее ты там тоже не можешь.

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

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


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

123new Я вообще честно не догоняю до конца эти все классы и тп
А еще не понимаю смысла в них

Ладно для написания системного кросс-платформенного кода я могу понять смысл, но для скриптинга...

Да и работало все до крайего обновления

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

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


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

BorizzK ну вот смотри. Распакуй scripts.pbo чистый, помести в корень сервера. Добавь в параметры запуска сервера:

-FilePatching

открой

scripts\3_Game\game.c


и добавь, например, такое вверху файла

 #include "MyFNC.c"

И создай в корне папки scripts файл MyFNC.c с содержимым:

void MyFncRun()
{
	Print("TEST FNC RUNNED!");
}

Теперь во всех файлах и классах, что прогружается сервером после файла

scripts\3_Game\game.c

т.е. в том числе и в миссии сервера мы можем просто вызвать функцию

MyFncRun()

и объявлять ее уже нигде не нужно.

Аналогично будет и с тем, что ты хочешь сделать.

Надеюсь, логика понятна?

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


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

123new Это я в курсе
но я хочу в итоге отказаться вообще от распаковки scripts...

 

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


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

BorizzK сделай все модом тогда. Правда даже в таком случае от редактирования scripts оригинального не откажешься, так как константы переменных только так редактятся

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: DarkShy
      Приветствую! 
      Купил  мод. При подписи ошибок не возникает, если его одного использовать - все ок, но если добавить еще один мод в addons, то при входе клиента на сервер вываливается ошибка, что мол подписи не совпадают.
      Ключ один использовал, ключ в "ключах" лежит. 
      "Клиентский PBO не является частью сервера. Убедитесь, что мод установлен правильно, и вы не добавили новых PBO. Попробуйте восстановить мод через средство запуска."
    • Автор: mrDante
      Всем привет,первая Тема от меня..
      вопрос заключается в следующем,как отключить постройки статичные колонок с водой чистой(условно)?
      а зачем!?
      ну такова задумка,по сценарию...что бы игроки на PVE кипятили воду сами..
      в mpmissions я все cfg*****.xml комментировал имена и позиции, с ними, как положено <!--***-->..все map********.xml пересмотрел,перепроверил..
      стоят моды : @AdvancedBanking;@Airdrop-Upgraded;@CF;@Code Lock;@CJ187-Cars;@CJ187-MoreCrashsites;@GraveCross;@KillFeed;@MedicalAttentionUpdated-DepHelper-Vanilla;@MedicalAttentionUpdated-Core;@MedicalAttentionUpdated;@LessLessAnimalMeat;@No-Vehicle-Damage;@PartyMe;@ToxicZone;@Trader;@TraderFix_v2;@VanillaPlusPlusMap;@VPPAdminTools....
      но они всё равно на карте имеются...то есть,я на сервере их вижу и могу с ними контактировать...
      куда рыть?
      спасибо...
      P.S.
      прошу не угарать,надо мной,я не профи-скриптер,самоучка,которому пригорело ставить свой Сервер для народа...
      спасибо!
    • Автор: Pinya
      Добрейшего времени суток товарищи. Намечается полноценный ПРОЕКТ с некоторым числом серверов и блаблабла, это никому не интересно. Дело в том, что в процессе реализации возникли "небольшие" трудности. Прошу помочь тех, кто реально занимался proxmox, в курсе матчасти Linux'а или тех кто уже сталкивался с этим.

      Суть проблемы:
      Имеется Proxmox для виртуализации машинок. Discord bot'a, Windows Server для запуска серверов DayZ и т.д. Дело в том, что запуская .bat на виртуалке, сервер просто не ищется в списке лаунчера, но если поменять DMZ на адрес этой машины - всё работает, но теряется удаленный доступ к Proxmox (об этом позже).

      Вот что нужно знать понимания ситуации в будущем:
      IP адреса следующие:
      Роутер (Шлюз) - 145.254
      Proxmox - 145.250
      Windows Server (Dayz) - 145.245 - VM
      DMZ настроен на - 250

      Что имеем в итоге:
      Выставив в роутере DMZ на 245 - Можно запускать сервак любой игры с любым портом и он будет виден по внешнему (белому) IP. НО доступ к вебморде proxmox'а - не будет, т.к. пакетики идут на 245.
      Костыль: Сделать RDP на 245 и через него гулять на 250 - не годится!

      Далее выставив DMZ на 250 - Сервер любой игры доступен НЕ будет! НО доступ к вебморде proxmox'a - появится. Однако если вручную прокинуть порт того же Minecraft (самое простое что нашёл, простите) через rinetd - то он работает. с DayZ такое не прокатывает.

      В интернете пишут про правила iptables и firewall, но ничего из этого не помогло. DayZ использует зачастую рандомные порты по udp и создавать здоровенный список правил в rinetd - это минус к отклику сервера а также безопасности.

      Может кто сталкивался с любым поднятием сервера на Linux и в курсе этой темы - подскажите как решали. Неделя отчаянной работы уже заставляет краем глаза посматривать на кошелёк чтобы это сделал хоть кто-то более шарящий в этом деле, но желательно всё же объяснил. Заранее спасибо всем кто откликнется - жду всех на обсуждение. В случае успеха можно будет написать статейку по настройке на форум.
    • Автор: Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
    • Автор: akklin
      Привет. 
      Я сделал несколько
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Наш выбор

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

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

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