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

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

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

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

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

Что такое массивы и тп я в целом знаю, но поскольку на c++ и подобном никогда не писал (только в Дейзе столкнулся), то есть некоторое непонимание некоторых принципов работы с массивами в данном случае

 

Продположим

 

обявили массив внутри функции

 

array<string> stringParam;

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

 

или

 

static array<string> stringParam;

// определяем массив текстового типа который сохраняет в себе данные и после завершения работы функции и при следующем

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

 

string text = "text";

 

//записываем содержимое переменной text в элемент массива 0

stringParam.Insert(text);

//записываем содержимое переменной text  в элемент массива 1, если переменная text пуста в элемент запишется текст NULL

stringParam.Insert(text, "NULL");

 

читаем в переменную text элемент массива 1

string text = stringParam.Get(1);

 

А вот теперь вопрос

Как мне изменить эелемент 1 массива?

stringParam[1] = "блаблабла";

 

так?

в теории должно быть так

 

Это вообще возможно?

 

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

 

 array<string> FileRead(string FileName)
 {
  array<string> stringParam;
  string line_content;
   

.....


  CloseFile(File);
  return stringParam;
 }
 

Все верно?

 

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


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

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

  • 0

BorizzK про "И еще про функцию возвращающую результат в качестве массива" верно

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


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





  • 0

123new 

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

Динамических массивов судя по всему тут нет как в c++

типа array<string> m_Ingredients = new array<string>[100];

и потом можно писать сразу в любой элемент

 

array<string> m_Ingredients;

заполнили массив скажем 10 элементами

и нам надо изменить 5й

m_Ingredients[5] = "5th element";

 

вроде нашел в RecipeBase.c пример по теме

ref array<string> m_Ingredients[MAX_NUMBER_OF_INGREDIENTS];

 

и там же ниже в цикле

m_Ingredients[i] = new array<string>; 

 

array<string> tempArray = m_Ingredients[i]; 

  

только вот не совсем понятно

выходит  элемент массива так же становится массивом

 

и ниже ситуация меня совсем запутала

то же в цикле

 

...

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

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


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

BorizzK удалить старый и добавить новый элемент в массив. Ну если он одномерный.

Если он в 2 колонки, название элемента и значение, то по названию можно менять.

 

Ну или да, как и сказал ты выше, вот так

array<string> m_Ingredients; 
  
  m_Ingredients.Insert("00");
  m_Ingredients.Insert("11");
  m_Ingredients.Insert("22");
  
  m_Ingredients.[2] = "00";

что-то типа такого должно работать по идее

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

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


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

123new Попробую

У меня в таком случае сервер крашится почему-то...

 

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


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

Динамических массивов судя по всему тут нет как в c++

типа array<string> m_Ingredients = new array<string>[100];

Во 1. Это статический массив. т.к. указана размерность.

Во 2. Если ты и далее будешь имена так давать "

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

stringParam

то далеко не уедешь, как и с ini

В 3.

 

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

 

array<string> m_Ingredients;

заполнили массив скажем 10 элементами

и нам надо изменить 5й

m_Ingredients[5] = "5th element";

А создавать перед добавлением не надо?

array<string> m_Ingredients = new array<string>;

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


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

NoNameUltima 
Вот тут разжуй про обьявлять и создавать

array<string> m_Ingredients;

Обьявили массив

Он разве е создан?

Я логику хочу понять

 

Про имена переменных

stringParam - этор входная переменная функции

string  FindSection(string StringParam)

мне так привычней и удобней

 

про динамический массив

 

 float *ptrarray = new float [10];  - это создание какого массива в C++ ?

 

 

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


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

Я логику хочу понять

Какую?

Если ты переменную создаешь - ОБЪЯВЛЯЕШЬ, как в любом нормальном языке программирования - дельфи\си

var

MyVar: String;

 

или

 

string MyVar;

 

Ты что сразу можешь получить ее значение?

Ну попробуй...

 

Есть объявление.

И есть - ИНИЦИАЛИЗАЦИЯ.

string MyVar;//Объявление

MyVar = "...";//Инициализация

В С допустимо сразу инициализировать

string MyVar = "...";

Хотя лучше все переменные, всегда описывать вверху процедуру\функции\класса, а не создавать когда и где тебе хочется в теле. т.к. при длинном листинге может привести к серьезной путанице.

 

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

new float [10];  - это создание какого массива в C++ ?

Как и в любом другом языке - СТАТИЧНОГО. - имеющего статичные 10 элементов.

 

*Технически и в С и в Дельфи(хз как там в других языках), при объявлении переменной, она может быть и инициализирована(т.е.какое то значение может и быть), а может там будет "МУСОР".

т.е. при таком написании

string MyVar;

Print(MyVar);

ты можешь получить и ошибку т.к. NULL а можешь вообще хз что, т.к. в памяти которую заняла MyVar мог остаться "мусор".

 

И последнее

Param - имя которое используется в движке энфорса. А ты опять со своими задвигами.

 

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

array<string> strings;

Ну или если тебе надо как тип ее создать typedef, то TStrings

 

 

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


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

да

и про именование переменных

поскольку я пишу функцию применимую не только для поиска секций в ini, но и вообще для поиска какого-то текста в файле и последующего

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

 

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


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

NoNameUltima 

про динамический массив

А почему тогда в книгах

 

float *ptrarray = new float [10]; // создание динамического массива вещественных чисел на десять элементов

 

или

 

int a;

a = 7;

int *mas = new int[a];

 

???

 

 

 

 

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

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


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

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

Читай про OUT

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


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

А почему тогда в книгах

У тебя книга бракованная. сделай скрин с нее, чтобы мы аффтара знали.

Динамика и есть динамика - когда размер не определен заранее, и может быть любым.

А это статика. - Фиксированная.

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


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

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


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

BorizzK 

"Строго говоря, такой массив не реализован в языке C++. Есть некоторая его замена, обладающая рядом функций динамического массива."

 

"Благодаря такой конструкции можно инициализировать массив любого размера, но изменять размер выделенной на него памяти в ходе работы невозможно. Можно только полностью освободить занимаемое массивом место. Это делается с помощью функции delete. Для нашего примера это выглядит так"

 

Выкинь это. Нет там никакой динамики. Статика это. т.к. размерность задана.

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


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

Где читать?

http://www.realcoding.net/article/view/142

Тут можешь прочесть. Для энфорса подойдет. Синтаксис только поменяешь.

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


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

NoNameUltima 

и в то же время

http://sitev.ru/post/151

 

вобщем я с тобой согласен более чем поностью

 

чего только не напишут  в интернетах )))

 

 

 

 

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


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

float *ptrarray = new float [10];

Тут весь косяк заключен в том, что ты как БЭ можешь управлять размерностью, НО только один раз))))) А это уже статика)

А если надо потом изменить размерность, то - удаляйте батенька массив)

 

Так что, там написано по сути и верно и не верно. Как яйца не крути - статика.

 

А динамика, это когда в ходе работы, ты можешь изменять размерность.

 

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


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

NoNameUltima 

1 минуту назад, NoNameUltima сказал:

http://www.realcoding.net/article/view/142

Тут можешь прочесть. Для энфорса подойдет. Синтаксис только поменяешь.

так там вообще массив массивов можно создать, где каждый элемент массива будет так же массива, в sqf такое было

в энфорсе такого нет вроде

 

мне вот это интересно очень

 

в RecipeBase.c

ref array<string> m_Ingredients[MAX_NUMBER_OF_INGREDIENTS];

 

и там же ниже в цикле

m_Ingredients[i] = new array<string>;

 

и в другом ниже

array<string> tempArray = m_Ingredients[i];

 

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


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

Ну и как бы

 

array<Object> typed_objects = new array<Object>;
  

затем в цикле отбираем обьекты

и в нем нужные

 

typed_objects[i] = object;

и это сразу кладет сервер

 

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


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

array<Object> typed_objects = new array<Object>;

Ну а ниже попробуй

type_object.Insert(player);

 

а то что ты делаешь неправильно

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

typed_objects = object;

Это ж динамика. Кол-во элементов не задано, и память под какой то мифический i элемент не выделена.

 

Команда Insert добавляет элемент в массив, предварительно выделяя под него память.

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


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

Ну и player в Object прокасть...

Или попробуй на простых данных...

 

array<string> strings = new array<string>;

strings.Insert("Привет");

strings.Insert("Пока");

Print(string.Format("Длина массива strings: %1. Элемент 0 имеет значение: %2", strings.Count(), strings[0]));

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

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


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

NoNameUltima Это все понятно

Мне нужно изменять элементы заполненного массива

вот в чем дело

сильно бы упростило жизнь

те есть массив со 100 элементами типа object - и это не игроки вовсе

мне надо на место елемента 10 поместить элемент 55 предварительно грухнув обьект из 10го эелемента

те сделать так

 

GetGame().ObjectDelete(typed_objects.Get(10));

typed_objects[10] = typed_objects.Get(55);

 

Вот о чем речь

Вот что мне нужно

 

но походу не судьба

сервер крашится

 

 

 

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

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


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

BorizzK А ты уверен чтодлина массива уже 55 элементов?

Выведи принтом - сколько элементов в массиве, и что в элементе 55.

А затем уже

typed_objects[10] = typed_objects[55];

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


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

NoNameUltima Уверен
В массиве на тот момент их уже 64

Мне надо его пересортировать

Именно обьекты в нем

да и если я заменяю эелемент другим обьектом

typed_objects[10] = m_object; - m_object это обьект найденный на карте, то так же краш

 

кроме того делается это в цикле по счетчику typed_objects.Count() и выйти за размер ну никак не получится

 

кажись доперло

имхо - это потому как в каждом данном случае (тип то Object) мы не с элементом массива работаем, а с обьектом - те каждый эелемент ссылка на обьект

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

ща доеду до дома попробую другой вариант

типа как делали в sqf

обект в текст

затем в массив текстовый

и потом уже с ним как с текстом раюботать...

 

 

 

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

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


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

BorizzK 

array<ref Object> typed_objects = new array<ref Object>;

Тебя спасет.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 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, в противном случае мы будем считать, что вы согласны с этим.