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

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

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

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

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

DAYZ enScript (вопросы, ответы)

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

BorizzK , я запутался!.. Я про вот этот Init:

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

void ZonesInit()

Это чего такое? 

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


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

VIRrusR 

void ZonesInit() - обьявление определение ФУНКЦИИ (без параметров) которую потом будем вызывать

{

 //тут код

}

 

вот так вызываем (и без параметров):

void ZonesInit();   - при вызове ; обязательны

 

void ZonesInit(int a, float b) - обьявление определение ФУНКЦИИ ( с параметрами)  которую потом будем вызывать

{

 //тут код

Print(a + b); //вывод в лог  суммы чисел a + b (числа процессор сам приведет в текст при выводе, для всего остального есть ToString())

}

 

а вот ее вызов

ZonesInit(1, 2);

 

В нашем же случае работы с зонами параметры не нужны

 

Ибо ZonesInit сама формирует параметры для других функций

 

Ну и в нашем случае - ты совсем не видишь что функция делает???

 

 

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

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


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

void ZonesClass() //Конструктор класса - одноименная классу функция - выполняется всякий раз при инициализации класса //Очень удобно - не нужно откуда-то вызывать например фунуцию ZonesInit (см ниже)

,но

1 час назад, BorizzK сказал:

ZonesInit(); //Будет вызвана при инициализации класса

Т.е. void ZonesClass() и ZonesInit() - суть одно и то же?

Всё, нафик!.. Проехали эту хрень. Тупо запоминаем, без понимания. "Нажми вторую левую кнопку в первом ряду, потом третб справа в пятом ряду, потом вон ту, которая большая красная..." :dry:

 

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

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


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

VIRrusR НЕТ!!!!

СМОТРИ  ВНУТРЬ

 

по порядку

 

class ZonesClass
{
 

Создали класс

 

если указать снаружи класса разумеется

 

ref ZonesClass Zones = new ZonesClass;

 

класс инициализируется и создатся ссылка на него и ВЫПОЛНЕТСЯ функция ZonesClass() внутри класса - У НЕЕ ИМЯ КАК У КЛАССА!!!!!!!!!!!!!

 

 void ZonesClass()
 {
  Print("::: SERVER: [ZonesClass]: Init.");
  ZonesInit();
 }
 

А уже она вызовет ZonesInit(); как видим -  вызов же внутри прописан - можно еще гору функций тудой прописать

или еще какую полезную работу

 

которая определена ниже

 

void ZonesInit()

 {
  Print("::: SERVER: [ZonesClass.c DEBUG]: ZonesInit(): BEGIN.");
  
  //Default params
  string    name;
  int    id          =  0;
  vector    pos         = vector.Zero;
  float    radius        = 0.0;
  int    type          =  0;
  TStringArray complect        = {};
  int    zonetype        =  ZoneType.BIO;
  string   zone_Message      =  "Вы в опасной зоне!";
  float   player_Damage_Coef     = 0;
  float   player_Health_Threshold_Symptoms = 50.0;
  int    player_Symptom      = SymptomIDs.SYMPTOM_COUGH; // Class SymptomIDs - variable SYMPTOM_COUGH (кашель) // = 1
  float   item_Damage_Coef     = 0.2;     
  float   item_Health_Threshold    = 40.0;
  

 

 

 

 

 

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

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


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

BorizzK , мне нужно всё ещё раз перечитать в листинге и переварить... Каша в голове. Я жутко туплю и не могу понять, чего я, собственно, не могу понять... 

 

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


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

BorizzK ,так! Забыли всю чушь, которой я забил целую страницу - сам себя заморочил, не поняв элементарного: ZonesClass() - это функция, а ZonesClass{} - это класс. Приношу извинения за тупость - сказывается отсутствие привычки к синтаксису, мало практики...

Твой скрипт с моими комментариями, проверь, пожалуйста, всё ли верно понято? И там в комментах несколько вопросов:

class Zone { 											//Создаём пользовательский класс. Это "root-класс" скрипта. Здесь задаются общие параметры для ВСЕХ зон. Остальное наследует отсюда.
	string			name;								//Имя или "название" зоны								
	int 			id;									//Номер-идентификатор зоны (см. enum ZoneType{}. Идентифицирует тип заражения (Хим/Био/Рад)
	vector 			pos;								//Координаты центра зоны заражения
	float 			radius;								//Радиус зоны заражения в метрах
	TStringArray	complect;							//Сет защитных средств. Далее будет определяться в массиве							
	int 			type;								//Переменная, в которую будем возвращать значение id, для конкретной зоны
	string 			message;							//Сообщение, выводимое игроку при входе в зону заражения (без защиты? в любом случае?)
	float 			player_Damage_Coef;					//Значение урона наносимого игроку в единицу времени (коэффициент) при отсутствии/повреждении сета защитных средств
	float 			player_Health_Threshold_Symptoms;	//Симптомы, вызываемые зоной заражения
	int				player_Symptom;						//Симптомы, которые будут применены к игроку, в случае нанесения урона зоной
	float 			item_Damage_Coef;					//Урон по предметам защиты (всем? в равной степени?) в единицу времени (коэффициент) 
	float 			item_Health_Threshold;				//Урон по средствам защиты, реально наносимый предметам из сета защитных средств по результатам проверок
}

ref array<ref Zone> ga_zones = new array<ref Zone>;		//Инициируем создание массива, описывающего параметры КОНКРЕТНЫХ зон.  (пока не понял - все зоны в одном массиве?)
enum ZoneType { //Это для удобства						//По сути, перечислитель переменных по порядку присваиваемых id,то есть тип зоны GAS - id 1, указать GAS, то же, что указать 1.
	SAFE = 1, 	//1
	GAS,  		//2
	RAD,  		//3
	BIO   		//4
}

ref ZonesClass Zones = new ZonesClass;					//Инициализация пользовательского класса ZonesClass(),с созданием указателя на этот класс - Zones
														//Зачем нам этот класс? Класс наследует параметры от Zone(),и определяет методы обработки параметров класса Zone()
class ZonesClass										//Создаём пользовательский класс ZonesClass
{
	private bool my_Zones_Debug 	= 	true;			//Объявляем переменные класса и присваиваем им исходные значения в данном случае - ???
	private bool my_BioZone_Debug	=	false;			//???
	private int zone_Check_Timer	=	12000;			//Устанавливаем значение счётчика ЧЕГО???
	
	void ZonesClass()									//Вызываем ФУНКЦИЮ ZonesClass()
	{
		Print("::: SERVER: [ZonesClass]: Init.");		//Логирование срабатывания функции ZoneClass ( что вернёт в лог? Значение просто значение true?)
		ZonesInit();									//ФУНКЦИЯ ZoneClass() вызывает функцию ZonesInit(),в которой присваиваются базовые значения переменных для ВСЕХ зон 
	}
	
	void ~ZonesClass()									//Деструктор функции ZoneClass(). Насколько я понял, служит для очистки содержимого функции. Переопределяем содержимое
														//функции ZonesClass(), дабы при каждом последующем обращении ZonesClass() вернула базовым переменным исходные значения?
	{														
		Print("::: SERVER: [ZonesClass]: UnInit.");		//Логирование "разборки" ZoneClass(). (то должно вернуть? Раз функция "разопределена", то не значения переменных? true?)
	}
	
	void ZonesInit()									//Вызываем функцию ZonesInit(), которая присваивает базовым переменным зон исходные (базовые) значения
	{
		Print("::: SERVER: [ZonesClass.c DEBUG]: ZonesInit(): BEGIN."); //Что должно вернуться в лог?
		
		//тело функции ZonesInit() - присваиваем базовые значения переменным, определяющим параметры зон. Верно ли что AddZone() - добавление экземпляра массива данных?
		string 			name;
		int 			id 									= 	0;
		vector 			pos									=	vector.Zero;
		float 			radius								=	0.0;
		int 			type 	 							= 	0;
		TStringArray	complect 							=	{};
		int				zonetype 							= 	ZoneType.BIO;
		string			zone_Message						= 	"Вы в зараженной зоне, Вам нужны химзащита и противогаз!";
		float			player_Damage_Coef					=	0;
		float			player_Health_Threshold_Symptoms	=	50.0;
		int				player_Symptom						=	SymptomIDs.SYMPTOM_COUGH; // Class SymptomIDs - variable SYMPTOM_COUGH (кашель) // = 1
		float			item_Damage_Coef					=	0.2;					
		float			item_Health_Threshold				=	40.0;
		
		name			= "Pavlovo";
		id 				= 1;
		pos 			= "2125 0 3400";
		radius 			= 200.0;
		/*
		Params:
		1  - zone name
		2  - zone id
		3  - zone center position
		4  - zone radius
		5  - items complect for check //for future
		6  - zone type //for future (see enum ZoneType)
		7  - zone message for player
		8  - damage coefficient for player
		9  - player start symptoms threshold
		10 - symptom for player in current zone
		11 - damage coefficient for items //for future
		12 - item health threshold for start damage player		
		*/
		AddZone(name, id, pos, radius, complect, zonetype, zone_Message, player_Damage_Coef, player_Health_Threshold_Symptoms, player_Symptom,  item_Damage_Coef, item_Health_Threshold);

Пока до определения базовых параметров переменных в функции ZonesInit(). 

Далее, насколько я понимаю, формируются массивы данных, для каждой зоны? Это то, что ты называешь "экземплярами". 

Если в приведённом выше куске, мной всё понято верно, дай пояснения по вопросам и давай уже переходить к работе с массивами и проверкам? :smile:

 

P.S. Эти долбанные тэги вставки могут как-то сохранять форматирование листинга? Я понимаю, что эти тэги Гениальны на букву "Г", а я дЭбил - так будьте так великодушны, поясните кто-нибудь убогому, как перенести листинг из NotePad++ в это Гэ-ниальное чудо-юдо, чтобы оно не размазало листинг на километр в ширину? Заранее благодарствую!

 

P.P.S.BorizzK , ещё раз благодарю за беспримерное терпение, проявляемое в общении с таким непроходимым тупицей, как я!

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

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


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

VIRrusR 

 

class Zone {            //Создаём пользовательский класс. Это "root-класс" скрипта. Здесь задаются общие параметры для ВСЕХ зон. Остальное наследует отсюда.

Это никакое не root class

Это просто класс

 

string   name; //и далее

Переменные в целом верно

у каждого созданного экземпляра переменные будут содержать свою информацию

 

ref array<ref Zone> ga_zones = new array<ref Zone>;  //Инициируем создание массива, описывающего параметры КОНКРЕТНЫХ зон.  (пока не понял - все зоны в одном массиве?)

Не совсем так

это указатель (ref) массив который в последствии будет хранить в каждом своем элементе указатель (ref) на каждый экземпляр класса Zone

И каждый экземпляр зоны будет содержать информацию о своей зоне

 

enum ZoneType {

верно - перечислитель

 

ref ZonesClass Zones = new ZonesClass;
//Инициализация пользовательского класса ZonesClass(),с созданием указателя на этот класс - Zones
//Зачем нам этот класс? Класс наследует параметры от Zone(),и определяет методы обработки параметров класса Zone()

Это инициализация и создание указателя Zones
Это не класс

Нет никакого наследования

Сервер читает эту строку

Создает указатель (через который кстати в последствии можно обращаться к функциям класса из других классов) и выполняя инициализацию класса выполняет код из одноименной классу функции внутри него  (void ZonesClass() корторая) - такая функция называется КОНСТРУКТОР

 

далее верно

 

void ~ZonesClass()  - да деструктор - но не очистка и приведение в исходное - что Вы там понапишете то и будет выполнено

по завершении работы сервера скажем надо сохранить что-то в файл или очистить что-то на карте

вызов этого кода можно поместить сюда

понятно что если завершить работу сервера принудительно то оно выполнено не будет

 

далее в целом верно

 

 

 

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


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

Меня сейчас еще один вопрос волнует

Как без вмешательства в класс PlayerBase и вообще в root scripts (и не трогая профиль сервера) привязать к каждому игроку вошедшему в зону переменную

вошел он в зону она стала true вышел она стала false

 

нагородить массив и туда игроков вошедших в зону собирать? и каждый раз его проверять и каждый раз переинициализировать?

 

чет как-то весь мозг сломал в поисках простого-красивого решения...

 

 

каждому входящему игроку вести свою базу в виде текстовика на его steam64id, например, в папке профиля, где построчно расписывать нужные параметры и сохранять.
А лучше даже не текстовика, а json-файла, как мододелы щас делают, и понятно, и функционально, и красиво. Тока вот с json я пока еще не работал моддингом.

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


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

123new Ненене - это

1 Нагрузка на дисковую систему

2 На память и процессор

 

я делал подобное

 

при 40+ игроков на сервере - нагрузка растет лавинообразно

 

идеально это переменная типа bool в классе PlayerBase

в итоге на сессию она у каждого живого перса своя - это просто тупо 1 бит = 0 false, 1 true - те не жрет ничего

1 байт на 8 пользователей

 

но это надо лезть в PlayerBase

 

наша же цель создать абсолютно автономный обрабочик в одном файле который бы просто подключался инклюдом и работал себе сам по себе на основе настроек которые он возьмет из файла

 

потому

можно внедрить массивчик типа PlayerBase в класс Zone и в него загонять юзверей кто в текущей зоне и проверять

вошел в зону

занес его тудой

во время итераций - если в зоне - проверяем

вышел вытер его там

 

или класс сделать отдельный для каждого игрока в зоне будет создаваться новый экземпляр

вошел - создался

во время итераций - если в зоне - проверяем

вышел - экземпляр грохаем (кстати как?)

 

вобщем надо думать

 

 

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


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

BorizzK тогда реально проще сделать массивчик, типа как у дамажных зон, и вгонять туда параметры, один из которых будет playerbase, ну и нужные данные. Но встает другой вопрос, а сохранять то с рестартом как будешь?

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


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

123new А зачем сохранять с рестартом?

При первом нахождении игрока в зоне и итерации функция проверки снова загонит туда игроков

 

нужно это что бы функция не слала сообщение с каждой итерацией

только 1 раз при входе и выходе

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


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

BorizzK ну а если статистика убийств там, дней выживания будет, например?

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


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

123new Это в профиле по UID

А тут нужно

вошел в зону и сообщение прилетело и что-то стало true и сообщение больше не прилетает

вышел - прилетело что вышел что-то стало false

 

вот и все

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


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

Это никакое не root class

Это просто класс

Да-да. Это я просто подчистить забыл. Взято в кавычки, ибо для себя - понять логику создания классов:

-- Zone{} - это как бы основа скрипта (описываем комнату: длина, ширина, высота - можем вычислять основное: периметр, площадь, объём)

-- ZonesClass{} - добавляем дополнительные параметры (размеры окон и дверей, расстояния от угла до двери и т.п.... Площадь каждой стены)

--ZonesInit() - присваиваем базовые значения всем объявленным переменным ("обнуляем" размеры перед началом вычислений)

:smile: Подсмотрел этот пример с комнатой где-то, когда по C# читал - здорово помогает понять, что и для чего создаётся в коде...

10 часов назад, BorizzK сказал:

Это инициализация и создание указателя Zones
Это не класс

Да, кажется понял. Это создание указателя ("ярлыка") на функцию ZonesClass(). Вызов этой функции по указателю Zones инициализирует класс ZonesClass{}, одновременно осуществляя даункаст переменных класса ZonesClass{}, которые у нас объявлены для использования только в пределах класса (private). Теперь-то правильно понимаю?

10 часов назад, BorizzK сказал:

у каждого созданного экземпляра переменные будут содержать свою информацию

Это как раз понятно! Мы их пока просто объявили и "обнулили" - присвоили базовые значения ДО начала проверок и вычислений.

Счётчик, если я правильно понимаю - частота проверок?

10 часов назад, VIRrusR сказал:

private bool my_Zones_Debug = true;

 private bool my_BioZone_Debug = false;

Назначение этих переменных пока не понял, (не дошёл до самих проверок). 

Подозреваю, что они содержат результат проверки на нахождение игрока в зоне? Для каждого типа? То есть будут ещё добавлены для Хим- и Рад-зон?

10 часов назад, BorizzK сказал:

это указатель (ref) массив который в последствии будет хранить в каждом своем элементе указатель (ref) на каждый экземпляр класса Zone

Это указатель на массив указателей?:joy:

Смысл, кажется понял: для каждой зоны создаётся свой массив данных с указателем на этот массив. Далее, указатели на массивы каждой зоны собираются в массив, обращаться к которому мы будем посредством указателя, определённого в

ref array<ref Zone> ga_zones = new array<ref Zone>;

Указатель, это как я понимаю ga_zones, верно?

Если теперь я не набедламил и не забордачил собственный мозг, то давай разберём формирование массивов? 

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

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


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

VIRrusR и опять не так

Ща доеду до компа прокомментирую

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


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

VIRrusR и опять не так

Да!..:veryangry: Или я непроходимо туп, внатури, э?

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


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

VIRrusR еще раз перечти что я выше прокомментировал и сравни со своим описанием

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


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

BorizzK , там уже столько "выше", что я не знаю, что именно читать! В чём я не прав конкретно? Опять с <ref> чего-то не так понимаю? Идентификатор Zones? Или хто?!

 

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


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

VIRrusR 

Перечитал твое

Тамо почтивсе верно

 

ZonesClass 

Будем считать основным классом для наших зон

 

Все действия по работе с зонами включая их инициализацию (создание и занесение в массив) итп осуществляются в нем

 

Инициализация вызывается в конструкторе  ZonesClass()

 

А вызывается ZonesInit

Который вызывает последовательно AddZones которая создает экземпляры класса Zone и пишет в них значения переменных, а потом записывает указатель на экземпляр в массив ga_zones

 

А в конце запускает вызов по таймеру...

Ну эт мы позже обсудим

 

Теперь нужно весь код сюда с твоими как ты понимаешь каментами

 

Во кстати

Доходчиво про конструкторы и деструкторы

 

https://ci-sharp.ru/Teaching/konstruktori-i-destruktori-C.html

 

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

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


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

BorizzK ,тьфу ты!..:relaxed:

То есть, я неверно про формирование массивов?..Ну так это мы ещё не рассматривали же! Тут я даже не ковырялся пока...

 

Главное - про "запускатор" (сиречь конструктор класса) я, наконец-то правильно понял? То есть мы создали указатель. Обращение к указателю равно обращению к функции. Вызов функции одноимённой классу через указатель инициализирует класс и даункастит т.е. позволяет использовать переменные класса в других классах.

item.ZoneGetHealth() - в любом классе, вернёт нам "здоровье" предмета, содержащегося в переменной item, объявленной в классе ZonesClass{} или нет?

Кстати, синтаксис - если в функции используем указатель, то точка перед GetHealth() не нужна?

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


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

VIRrusR 

Обращение не к указателю

Указатель указывает на класс!!!

Те обращаться к функциям и переменным класса из других классов!!!

Мы можем через указатель или через имя класса - класс же уже проинициализирован

 

Присвоить значение переменной классу

Указатель.переменная = значение

 

Вызвать функцию

Указатель.функция();

ИмяКласса.функуия();

 

Исключение

 

Если в классе есть функции или переменные обьявленные как private, получить к ним доступ извне нельзя

Но про жто чуть позже

 

 

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


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

:veryangry: За-дра-ло!!!

Да что ж я так туплю то?! Никак не могу это понять!

ref ZonesClass Zones = new ZonesClass;		//Создаём указатель класса Zones - указывает на класс ZonesClass{}

class ZonesClass				//Создаём пользовательский класс ZonesClass
{	
	void ZonesClass()			//Вызываем функцию одноимённую классу из тела этого класса без сохранения результата									
	{
		ZonesInit();			//Вызываем класс (на исполнение)
	}
}

Повыкидал всё из класса - для наглядности! 

-- Создали указатель Zones, указывающий на пользовательский класс ZonesClass{}

-- Создали пользовательский класс ZonesClass{}

-- Вызвали из тела класса ZonesClass{} одноимённую функцию ZonesClass() без сохранения результата (void) - инициализируем ("включаем") класс 

-- Вызываем (свежеинициализированный, в рот ему потные ноги, чтоб он *я матерился, запинайте меня* гадская завернулся в рог бараний!!!:veryangry:) класс на исполнение через указатель класса Zones - 

ZonesInit();  -, т.е. начинается обработка кода, содержащегося в теле класса ZonesClass{}

 

ZonesInit() - Это просто вызов класса на исполнение! "Иди и выполняй то, что прописано в классе, на который указывает Zones, т.е. в классе ZonesClass{}"

Тем самым весь этот штопаный "запускатор" (конструктор класса) как раз и "включает" (т.е. заставляет выполнить) пользовательский класс ZonesClass{}

 

BorizzK ,если ты щаз скажешь, что я опять неправильно понимаю, то я плюну на ССП, вечный бан и все нормы морали и этикета и выскажу прямым текстом и без купюр всё, что я думаю про EnScript, С-подобные языки и объектно-ориентированные языки программирования, да и программирование вообще!:veryangry::veryangry::veryangry:

 

 

 

 

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

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


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

ref ZonesClass Zones = new ZonesClass; - Инициализируем класс - и создаем указатель на класс

class ZonesClass //Создаём пользовательский класс ZonesClass
{
    void ZonesClass()  Ничего мы тут не вызываем - МЫ ОПРЕДЕЛЯЕМ!!! Это Конструктор! Он выполнится АВТОМАТИЧЕСКИ при инициализации класса!!!
   {
     ZonesInit(); //Вызываем ФУНКЦИЮ из этого же класса !!!!!!!!!!!!!!!!!!!!!!!!!! - она там ниже в классе обьявлена
   }
}

 

если в классе не обьявить КОНСТРУКТОР ручками как мы выше сделали - это за нас сделает движок (у себя внутри) но мы в него ничего добавить не можем

а тут мы обьявили его сами  и теперь можем в нем вызвать ZonesInit(); которая выполнит для нас полезную работу

можно и без нее - прям в конструкторе все сделать - но это не красиво

 

Запомни - void имяфункции() - ЭТО ОБЯВЛЕНИЕ ФУНКЦИИ!!!!

 

ZonesInit();  -, т.е. начинается обработка кода, содержащегося в теле ФУНКЦИИ ZonesInit()

 

 

Смотпри

 

class Имя

{

  void Имя

  {

    функция();

  }

  void функция()

  {

     код

  }

}

 

при инициализации класса вызовется одноименная классу функция расположенная в класса (эта функция конструктор) и она вызовет функцию.

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

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


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

ZonesInit() - Это просто вызов класса на исполнение!

Хватить бредить.

 

ZoneInit это процедура или функция, которой у тебя в классе НЕТ.

И что ты пытаешься вызвать совершенно не понятно.

С таким успехом можно написать

 

ZOneSuperPuperInit();

 

22 минуты назад, VIRrusR сказал:

//Вызываем функцию одноимённую классу из тела этого класса без сохранения результата

какую какую?

Без чего?

Какого результата?

Куда еще сохраняемого?

 

В контексте твоего класса, -

void ZonesClass()

void - процедура.

ZonesClass - имя данной процедуры.

т.к. имя процедуры, совпадает с именем самого класса, то данная процедура является конcтруктором класса. => при создании твоего класса, к примеру таким образом -

new ZonesClass();

сразу же будет выполнен код конструктора. Код внутри - void ZonesClass()

 

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 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
      Всем привет. Помогите пожалуйста со скриптом.
      Суть. Я пытаюсь сделать синхранизацию сервера с клиентом передавая c конфига время разделки животного.
      В родных скриптах есть class UATimeSpent с константами и там есть константа SKIN.
      Мне нужно её перезаписать на своё значение и мне выдаёт ошибку: Trying to modify write protected variable 'SKIN' в переводе на Русский Попытка изменить защищенную от записи переменную «SKIN».
      Функция скрипта: Когда игрок запускает клиент, идёт запрос на серверную часть и получает в ответ время разделки.
      Задача: Нужно перезаписать константу SKIN на новое значение и всё.
      Сам скрипт.
      class timeToComplete extends UATimeSpent { protected ref UATimeSpent m_UATimeSpent; void timeToComplete() { GetDayZGame().Event_OnRPC.Insert(OnRPC); CheckUATimeSpent(); } void ~timeToComplete() { GetDayZGame().Event_OnRPC.Remove(OnRPC); } void CheckUATimeSpent() { GetGame().RPCSingleParam(NULL, SOC_TIME_RPCs.SOC_GT, NULL, true); } void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) { if (rpc_type == SOC_TIME_RPCs.SOC_RT) { Param1<float> soc_srt; if (ctx.Read(soc_srt)) { if (soc_srt.param1!= 0) { m_UATimeSpent.SKIN = soc_srt.param1; Print("Пришёл ответ от сервера в m_UATimeSpent.SKIN - " + m_UATimeSpent.SKIN) } } } } };  
    • Автор: RedWoodGamer
      Ищу мододела который напишет мод на поиск предметов в ванильной фурнитуре с возможностью конфигурации лутабельных объектов и лута внутри них, а так-же КД на лутаемый объект (Простыми словами чтобы нельзя было лутать один и тот же объект двум игрокам одновременно, если один залутал, включается определённый таймер и второй игрок может залутать его через прошедшее время, либо же завязать это время на рестарт сервера.)
      Бюджет есть, оценивайте свою работу и предлагайте цену, кто не хочет в комментариях вот Discord : RedWood#6323
    • Автор: CubeIn
      Приветствую друзья, возникла неприятная ошибка.
      Подписал все ключи через DS Utils, вставил ключ в северную часть, но все равно при заходе на сервер пишет данную ошибку.
      Client contains PBO which is not part of server data
       
    • Автор: CubeIn
      Есть ли у кого ни будь шаблон или инструкция как создать свой шеврон?
      Нашел видео от Фидова, но ссылка на шаблон не действительна

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

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

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

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

Поддержка