Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
Sign in to follow this  
Armor

Массив параметров

Всем привет, может кто подсказать как создать массив параметров и как к нему обращаться.
ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>> testArr = new array<ref Param4<string,ItemBase,ItemBase,ItemBase>>; - компилятор не кушает.
А обращаться я думаю надо так - testArr[idx].param1 = somestring; и тд, поправьте если я не прав.

Edited by Armor (see edit history)

Share this post


Link to post
Share on other sites

Recommended Posts

  • 1

Ща покажу

 

Вот класс - хранилка

 

class StoreCustomObject
{
	int 	m_ObjectId;
	string 	m_ObjectClassname;
	vector 	m_ObjectPostition;
	vector 	m_ObjectOrientation;
}


Вот мы  в рабочем классе создаем массив-ссылок на обьекты этого класса

 

class void MyClass()
{
	private ref array<ref StoreCustomObject> m_StoreCustomObjectsArray;
	private static ref StoreCustomObject m_StoreCustomObject;

	void MyClass() //Это конструктор!
    {

    	m_StoreCustomObjectsArray = new ref array<ref StoreCustomObject>;
        Init();
    }

	private void Init()
    {
		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 1;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName1";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);

		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 2;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName2";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);
    }
}

 

Тут доступность только в классе
 

 

ЗЫ Про ошибку выше - переменную i где-то в пределах функции обьявили 2 раза, либо в 2х разных циклах, либо где-то еще

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites









  • 1

Хоть один нормальный вопрос ))))

 

Проще создать класс с переменными

Создать массив типа этого класса

Создаешь экземпляр класса, присваиваешь значения его переменным, пихаешь ссылку на него в массив и тд итп

Классика же

 

Кстати, а вики Богемии смотрели?

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 1

Есть возможность получить в массив все обьекты в радиусе от координаты, но она при радиусе больше 300 грузит серв дико

 

В классе вещей в конструкторе заносить предметы (ссылки на обьекты) во внешний (вне класса) массив типа Object, и потом перебирать его ну или типа того

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 1
10 минут назад, Armor сказал:

Я в те дебри по ошибке даже не лазил, движковые правки не вношу, а за то что ты скинул спасибо, но мне вне класса этот массив нужен, а на твоем примере это не реализуемо.

 

Эт почем нереализуемо?

 

static ref array<ref StoreCustomObject> m_StoreCustomObjectsArray;
static ref StoreCustomObject m_StoreCustomObject;

class void MyClass()
{

	void MyClass() //Это конструктор!
    {

    	m_StoreCustomObjectsArray = new ref array<ref StoreCustomObject>;
        Init();
    }

	private void Init()
    {
		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 1;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName1";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);

		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 2;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName2";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);
    }
}

 

Share this post


Link to post
Share on other sites
  • 1
1 минуту назад, Armor сказал:

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

какая именно? i? i тут при чем???

Share this post


Link to post
Share on other sites
  • 1
35 минут назад, Armor сказал:

В том то и дело, даже при таком создание массива ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>> testArr = new array<ref Param4<string,ItemBase,ItemBase,ItemBase>> вылетает эта ошибка. Конфликт на этапе компиляции/интерпритирования (хз как этот язык читается)

код покаж

 

И зачем он снаружи?

Что мешает обрятиться к классу и взять ссылку на массив из него?

делаем в классе функцию

 

ref MyClass g_MyClass = new ref MyClass(); //Это что бы класс сам проинитился

ref MyClass GetMyClass() //Это что бы можно было получить доступ к функциям класса
{
	return g_MyClass;
}

class void MyClass()
{
	private ref array<ref StoreCustomObject> m_StoreCustomObjectsArray;
	private static ref StoreCustomObject m_StoreCustomObject;

	void MyClass() //Это конструктор!
    {
    	m_StoreCustomObjectsArray = new ref array<ref StoreCustomObject>;
        Init();
    }

	private void Init()
    {
		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 1;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName1";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);

		m_StoreCustomObject = new ref StoreCustomObject();
   		m_StoreCustomObject.m_ObjectId 				= 2;
		m_StoreCustomObject.m_ObjectClassname		= "ClassName2";
		m_StoreCustomObject.m_ObjectPostition		= "10 10 10";
		m_StoreCustomObject.m_ObjectOrientation		= Vector(10,10,10);
		m_StoreCustomObjectsArray.Insert(m_StoreCustomObject);
    }
      
	array<ref StoreCustomObject> GetGustomObjectsArray()
	{
		return m_StoreCustomObjectsArray;
	}

}

class StoreCustomObject
{
	int 	m_ObjectId;
	string 	m_ObjectClassname;
	vector 	m_ObjectPostition;
	vector 	m_ObjectOrientation;
}

Ну и в любом другом месте

ref LoadOuterCustomObjects g_LoadOuterCustomObjects = new ref LoadOuterCustomObjects(); //Это что бы класс сам проинитился
class LoadOuterCustomObjects
{
	ref array<ref StoreCustomObject> MyArray;
	
	void T()
	{
		Print("::: SERVER: [LoadOuterCustomObjects]:");
		Print("::: SERVER: [LoadOuterCustomObjects]: DEBUG: ");
		MyArray = GetMyClass().GetCustomObjectsArray();;
		if (MyArray.Count() > 0)
		{
			Print("::: SERVER: [LoadOuterCustomObjects]: DEBUG: MyArray.Count() = " + MyArray.Count());
			for (int i = 0; i < MyArray.Count(); i++)
			{
				Print("::: SERVER: [LoadOuterCustomObjects]: DEBUG: MyArray[" + i + "].m_ObjectId = " + MyArray[i].m_ObjectId);
			}
		}
	}
}

 

И оставте Вы уже в покое этот многострадальный класс Param
Это те же яйца ток в ид в профиль

 

Если уже так хочется
В контексте scripts гора примеров

+ файлики в 1_Core Вам в помощь
Например param.c - тут как раз можно посмотреть как этот Param устроен

 

теж ойца ток вид сбоку

 

 

Важно! Этот пример работать нормально будет только в МИССИИ

Что бы работал в контексте scripts (в модах) нужно  обьявлять внешние ссылки и функции как static

 

static ref MyClass g_MyClass = new ref MyClass(); //Это что бы класс сам проинитился

static ref MyClass GetMyClass() //Это что бы можно было получить доступ к функциям класса
{
	return g_MyClass;
}

 

static ref LoadOuterCustomObjects g_LoadOuterCustomObjects = new ref LoadOuterCustomObjects();

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 1

ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>> testArr = new ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>>;

проверил

испытал

вне класса сделал
static ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>> testArr = new ref array<ref Param4<string,ItemBase,ItemBase,ItemBase>>;

Ваще никаких проблем - все работает

Share this post


Link to post
Share on other sites
  • 1
57 минут назад, Armor сказал:

Может ли быть проблема в том, что я объявляю этот массив на стороне сервера в миссии?

как где почему
 

покажи код - куски кода итд итп а то ни че го не по ня т но

 

Share this post


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

; где?

 

И new ref array а не new array

там все прально

а ты создал массив указателей. которые хз на что указывают.

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 1
53 минуты назад, Armor сказал:

Разве не то же самое?

нет.

 

И хз что там у тебя за ошибка. тут гадалок нет.

Показывай полностью файл с классом, + где он у тебя расположен в моде.

 

 

Edited by NoNameUltima (see edit history)

Share this post


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

scripts/файл

шо серьезно такой путь?)

 

класс Param компилится в гейм или кор, уже не помню. тыб завязывал с процедуркой в ооп.

 

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 1

Пофигу где Param юзать

Главное юзать правильно

Ошибка у него, см выше, в классе Param, это глюкалово двигла при компиляции...

Я выше написал почему

Share this post


Link to post
Share on other sites
  • 1

@BorizzK Фигню ты рекомендуешь. 1. Ты ваще понимаешь что ты создаешь ref а не массив? 2. Ну попробуй создать класс А в 4_World, и класс Б в 5_Mission, и в классе А, объяви переменную с типом Б.

//4_World

class MyClassA

{

ref MyClassB m_MyClassB;

}

//5_Mission

class MyClassB

{

 

}

@Armor Выкинь это гавно и сделай модом.

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 1

Так

Речь про ссылку на область памяти где хранятся ссылки

Именно про ref

 

При чем тут тво классы а и б

Речь про Param

Я их юзаю через ref в классах и вне классов, что в World, что в Mission, что в mpmissions, с одинаковым успехом

 

Хотя и то что ты нарисовал можно сделать, но ток наоборот, тк когдаикомпилится world, mission еще не скомпилирован

 

 

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 1

@BorizzK

реч про то, что ты создаешь указатель, на (внимание) массив указателей

 

class MyClass

{

}

 

ref array<ref MyClass> m_xxx = new ref array<ref MyClass>;

 

new ref array - создался указатель на массив. (Вопрос - на какой?)

 

Добавим элемент:

insert.m_xxx( new MyClass() );

 

Куда добавиться элемент? - В какой массив? - Ведь реального массива нет, есть лишь указатель на массив, в котором указатели на класс.

Вполне реально, что в какую то кучу "мусора", попадет твой элемент. И вполне возможно(ВОЗМОЖНО! но не факт) будет работать.

 

другое дело когда ты создаешь указатель, на реально существующий массив

 

ref array<ref class> m_xxx = new array<ref MyClass>;

 

new array - создаст вполне себе массив, и тебе отдаст ссыль на него.

 

В дайзе, вполне возможно - наплевать. Но всеж таки)

Share this post


Link to post
Share on other sites
  • 1
49 минут назад, BorizzK сказал:

При чем тут тво классы а и б

А речь, про то, что хер его знает, где он указывает класс Парам(может его еще нет - не скомпилен).

 

Share this post


Link to post
Share on other sites
  • 1
7 минут назад, NoNameUltima сказал:

А речь, про то, что хер его знает, где он указывает класс Парам(может его еще нет - не скомпилен).

 

Его невозможно указать ранее чем он скопилен - 1_Core и 2_GameLib компилятся раньше всего и их невозможно ни отмоддидь ни добавить туда что-то свое - совсем - никак
А класс Param у нас как раз в Core
Впрочем можно его расширить - добавив в 3_Game свои Param10, Param11 и тп тупо срисовав их с Param и получить свои парамы - собственно я такое делал и ни раз
 

И обрати внимание НА ошибку ))) Внимательно смотри )))

image.png


там вот оно что - };

Те в копмиляторе происходит походу сбой - переполнение или еще что

Причина - не указал ref на массив о чем я ему и написал на предыдущей странице

P.S. Ну а назвать папку в миссии можно как угодно и инклюдом подключить указав путь к ней

Share this post


Link to post
Share on other sites
  • 1

@BorizzKПричина в том, что он пихает все прямо в init.c 

int i=1; <<<<-----

int j=0;

int oldRedCom = 0;

int oldBlueCom = 0;

 

А оно уже где то есть...

Share this post


Link to post
Share on other sites
  • 1

Возможно

но при чем тут Enscript.c ?

 

какое-то странное поведение компилятора

 

думал что из-за пропущенного ref

нифига

так тож прокатило

 

да и в жопу все эти парамы

делай свой класс / классы и храни в его экземплярах что и как угодно

 

 

 

 

Edited by BorizzK (see edit history)

Share this post


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

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

да можно и не перебираться в принципе если кроме моддинга миссии ничего не надо

Share this post


Link to post
Share on other sites
  • 1

Смотрю я на твой код и думаю

А нахрена ты все ВНЕ классово сделал?

Сделать свой класс религия не позволяет?

Share this post


Link to post
Share on other sites
  • 1

@Armor Во 1. Есть класс чата на клиенте, и уж если ты через свой RPC делаешь, то что мешает в данные RCP вставить UID игрока(или NetId, или сам Объект)? Во 2. На сервере ВРОДЕ как тоже естьобработчик чата в котором уже есть отправивший(но он от патча к патчу ломается)

 

Share this post


Link to post
Share on other sites
  • 1

@Armor Ну и нахрена ж тебе НАСЛЕДНИЙ playerBase?) как ты его собрался использовать?) Чем же тебя не устроил modded?

*и this можно не писать.

Edited by NoNameUltima (see edit history)

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
Sign in to follow this  

×
×
  • 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.