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

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

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

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

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

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

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

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

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


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

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

  • 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х разных циклах, либо где-то еще

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

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


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





  • 1

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

 

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

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

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

Классика же

 

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

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

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


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

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

 

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

 

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

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


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

Хоть бы спасибо сказал жмяканьем кнопочки )))

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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);
    }
}

 

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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();

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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>>;

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

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


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

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

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

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

 

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


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

; где?

 

И new ref array а не new array

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

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


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

; где?

 

И new ref array а не new array

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

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

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

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


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

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

нет.

 

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

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

 

 

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

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


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

scripts/файл

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

 

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

 

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

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


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

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

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

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

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

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


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

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

//4_World

class MyClassA

{

ref MyClassB m_MyClassB;

}

//5_Mission

class MyClassB

{

 

}

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

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

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


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

Так

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

Именно про ref

 

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

Речь про Param

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

 

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

 

 

 

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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 - создаст вполне себе массив, и тебе отдаст ссыль на него.

 

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

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


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

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

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

 

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


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

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

 

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

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

image.png


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

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

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

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

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


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

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

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

int j=0;

int oldRedCom = 0;

int oldBlueCom = 0;

 

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

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


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

Возможно

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

 

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

 

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

нифига

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

 

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

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

 

 

 

 

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

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


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

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

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

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


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

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

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

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

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


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

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

 

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


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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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