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
BorizzK

Нужна помощь по массивам.

Что такое массивы и тп я в целом знаю, но поскольку на 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;
 }
 

Все верно?

 

Share this post


Link to post
Share on other sites

Recommended Posts

  • 0

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

Share this post


Link to post
Share on other sites









  • 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]; 

  

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

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

 

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

то же в цикле

 

...

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

123new Попробую

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

 

Share this post


Link to post
Share on other sites
  • 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>;

Share this post


Link to post
Share on other sites
  • 0

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

array<string> m_Ingredients;

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

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

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

 

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

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

string  FindSection(string StringParam)

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

 

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

 

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

 

 

Share this post


Link to post
Share on other sites
  • 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

 

 

Share this post


Link to post
Share on other sites
  • 0

да

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

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

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

 

Share this post


Link to post
Share on other sites
  • 0

NoNameUltima 

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

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

 

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

 

или

 

int a;

a = 7;

int *mas = new int[a];

 

???

 

 

 

 

Edited by BorizzK (see edit history)

Share this post


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

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

Читай про OUT

Share this post


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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

BorizzK 

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

 

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

 

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

Share this post


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

float *ptrarray = new float [10];

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

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

 

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

 

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

 

Share this post


Link to post
Share on other sites
  • 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];

 

Share this post


Link to post
Share on other sites
  • 0

Ну и как бы

 

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

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

и в нем нужные

 

typed_objects[i] = object;

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

 

Share this post


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

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

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

type_object.Insert(player);

 

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

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

typed_objects = object;

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

 

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

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

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

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

вот в чем дело

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

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

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

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

 

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

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

 

Вот о чем речь

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

 

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

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

 

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

А затем уже

typed_objects[10] = typed_objects[55];

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

 

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

 

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

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

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

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

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

обект в текст

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

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

 

 

 

Edited by BorizzK (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

  • Similar Content

    • By 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.
      прошу не угарать,надо мной,я не профи-скриптер,самоучка,которому пригорело ставить свой Сервер для народа...
      спасибо!
    • By 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 и в курсе этой темы - подскажите как решали. Неделя отчаянной работы уже заставляет краем глаза посматривать на кошелёк чтобы это сделал хоть кто-то более шарящий в этом деле, но желательно всё же объяснил. Заранее спасибо всем кто откликнется - жду всех на обсуждение. В случае успеха можно будет написать статейку по настройке на форум.
    • By Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
    • By akklin
      Привет. 
      Я сделал несколько
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By fedotovyasha
      в messages есть такая возможность
      <messages> <!-- This is example message for automatic server termination --> <message> <!-- no delay --> <delay>0</delay> <!-- if the value is larger than 0, then flag Repeat is enabled --> <repeat>0</repeat> <!-- if the value is larger than 0, then flag Countdown is enabled, countdown reaches zero in 10 hours --> <deadline>600</deadline> <!-- disable On connect flag --> <onConnect>0</onConnect> <!-- enable Shutdown flag --> <shutdown>1</shutdown> <!-- message itself with placeholders --> <text>Hello, #name will shutdown in #tmin minutes.</text> </message> </messages> Что лучше и эффективнее будет. Писать свой рестартер с помощью Rcon или будет достаточно messages.xml?
  • Our picks

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