BorizzK

Получение содержимого всего инветаря

Вопрос

Чет затупил нещадно

Делал как-то еще на 063 но куда-то дел код

 

Получаем в цикле что на игроке и пытаемся получить что в вещах

AttCount = player.GetInventory().AttachmentCount();

for ( int i = 0; i < AttCount; i++ )

{

attachment = player.GetInventory().GetAttachmentFromIndex(i);

   if ( attachment.IsItemBase() )
   {

     SubAttCount = attachment.GetInventory().AttachmentCount();

     for ( int a = 0; a < SubAttCount; a++ )

     {

         subattachment = attachment.GetInventory().GetAttachmentFromIndex(a);

     }

   }

}

 

Если находится akm, то attachment.GetInventory().AttachmentCount(); и далее работает

Если например куртка или штаны - то нет, чет запамятовал, как получить содержимое в случае курки, рюкзака???

...

 

Спасибо!

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

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


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

8 ответов на этот вопрос

Вспомнил

array<EntityAI> subItems = new array<EntityAI>;
 

attachment.GetInventory().EnumerateInventory(InventoryTraversalType.PREORDER, subItems);

 

ну и разбор массива

 

P.S. решил написать альтернативную версию сохранения

 

 

 

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


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


BorizzK сложно именно разложить вещи по ячейкам инвентаря так, как оно поместится все там, все остальное ерунда. К слову, уже сделал даже давно, только нет смысла заниматься этим далее из-за ограничений в виде количества файлов в папке и не создаваемых папок.

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


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

123new Про кл-во файлов не знал
Но вот на ограничения на данные в профиле сервера пока не натыкался

Один раз его умудрился до 12 гигов раздуть

Я именно в него сохранять собираюсь

ну а в inventory\inventory.c есть описание всего что нужно

 

получить где лежит вещь в каком слоте

или положить вещь в нужный слот

	///@{ cargo
	proto native CargoBase GetCargo ();
	/**
	 * @brief Create Entity of specified type in cargo of entity
	 **/
	proto native EntityAI CreateEntityInCargo (string typeName);
	/**
	 * @brief	Create Entity of specified type in cargo of entity at coordinates (row, col)
	 * @param	typeName		type to create
	 * @param	row		the row of cargo to be created at
	 * @param	col		the column of cargo to be created at
	 **/
	proto native EntityAI CreateEntityInCargoEx (string typeName, int idx, int row, int col);

	proto native bool HasEntityInCargo (notnull EntityAI e);
	proto native bool HasEntityInCargoEx (notnull EntityAI e, int idx, int row, int col);
	proto native bool CanAddEntityInCargo (notnull EntityAI e);
	proto native bool CanAddEntityInCargoEx (notnull EntityAI e, int idx, int row, int col);
	//proto native bool AddEntityInCargo (notnull EntityAI owner, EntityAI cargo);
	//proto native bool AddEntityInCargoEx (notnull EntityAI owner, notnull EntityAI e, int idx, int row, int col);
	proto native bool CanRemoveEntityInCargo (notnull EntityAI e);
	proto native bool CanRemoveEntityInCargoEx (notnull EntityAI e, int idx, int row, int col);
	///@} cargo

 

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


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

BorizzK Я на каком-то из патчей пытался созданную вещь под ногами у игрока такой функцией переместить в инвентарь, функция есть, комманда правильная, а не делало ничего. Это что называется из любопытного.
Писать в профиль сервера игроков? Ну идея неплохая, только слысл? Все то же самое реализовано и так уже в официальной базе, игроки сохраняются, проблем с этим не наблюдаю. да и недостаток в виде отсутствия возможности менять себя остается.
 

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


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

Ну как бы вещи которые УЖЕ созданы перемещаются не теми функциями

В данном случае нужно создавать новые

и они создаются где надо и как надо

То же касается получения свойств

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

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

Вобщем движок на самом деле здорово оптимизирует код

 

 

 

 

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


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

Ну как бы вещи которые УЖЕ созданы перемещаются не теми функциями

В данном случае нужно создавать новые

и они создаются где надо и как надо

То же касается получения свойств

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

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

Вобщем движок на самом деле здорово оптимизирует код

 

 

 

 

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

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


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

123new Есть функции которые

1 Проверяют и возвращают тру если вещь поместится в конкретный контейнер

2 Создают предмет в конкретном слоте конкретного контейнера

 

 

 

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


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

BorizzK вот теперь отсюда вытекает следующий вопрос. ТЗ состоит в том, чтобы  разместить в инвентаре (например, контейнере) 4 вещи, при том заранее известно, что вручную эти вещи разместить там реально и они там поместятся полностью. Пытаемся спавнить добавлением в инвентарь - вещи спавнятся так, как им вздемается, т.е. в первое обнаруженное свободное место в слотах контейнера. Т.е. априори в конце получаем, что хотя бы 1 ваще не появится в нем. Встает вопрос - а каким же образом разместить в этом контейнере вещи так, как это было у игрока? Грубо говоря так, чтобы они все там поместились, т.к. заведомо известно, что они все там были и помещаются 100%

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: BorizzK
      Вобщем тема такая
       
      1я задачка была такая
      Нужно получить координату на плоскости под углом на расстоянии от текущей координаты
      Задачку решил тут
      Код в итоге таков:
       
      например выведем в лог  координаты точки на плоскости на расстоянии 2м и под углом 90 град (справа) от игрока (вызвав функцию PrintCoords, передав ей в качестве параметра переменную содержащую ссылку на перса игрока)
       
      void PrintCoords(PlayerBase player) { float distance = 2; float anglerotation = 90; Print("Coordinates on the plane at distance " + distance + " and at an angle relative to the player: " + anglerotation + ": " + GetCoords(player, distance, anglerotation).ToString()); } vector GetGoords(PlayerBase player, float distance, float anglerotation) { return GetPosFromDistAndAngle(player.GetPosition(), distance, player.GetOrientation()[0] + anglerotation); } vector GetPosFromDistAndAngle(vector pos, float dist, float angle) { angle = Math.NormalizeAngle(angle) * Math.DEG2RAD; pos[0] = pos[0] + (double)(Math.Sin(angle) * dist); //offset X pos[2] = pos[2] + (double)(Math.Cos(angle) * dist); //offset Y return pos; }  
      Это была задачка 1 и она была решена!
       
      далее надо решить более сложную задачу - она будет номер 2
       
      Надо вычислить координату не на плоскости, а вообще в пространстве, взяв в качестве поправок значения pitch и roll (наклон по поперечной и продольной осям) которые получаются из функции  обьект.GetOrientation() - первое значение масива типа вектор которое возвращает функция - угол на плоскости, второе угол в поперечной оси, третье в продольной (вроде так)
       
      те если игрок, да не важно, просто обьект, имеет наклон в поперечной оси 45 градусов (от так как этот слэш /), то точка под углом на плоскости относительно игрока 90град и расстоянии 2м "справа для него будет 'ниже', чем слева"
       
      врбщем -  нам надо получить координату под улом 90град на плоскости, 45град по вертикали и расстоянии 2м от него слева
       
      воот
       
      и тут у меня мозг взорвался (и почему-то захотелось вискаря)
       
      я понимаю что в данном случае нужно отталкиваться от поперечной вертикальной плоскости... но чет не догоняю как........
       
       
    • Автор: KING324
      Всем привет,хотелось бы узнать как можно получить кол-во нар в верталёте.
      написал  такой код,но работает почему то не на всей технике
      _array = []; for "_i" from -1 to 3 do { _weapons = _vehicle weaponsTurret [_i]; if((count _weapons) > 0) then { { _weapon = _weapons select _forEachIndex ; _ammo = _vehicle ammo _weapon; _array set [count _array,[_i,[_weapon,_ammo]]]; } forEach _weapons; }; }; hint format["%1 ",_array]; copyToClipboard str _array;  
    • Автор: CrHD
      Добрый день!
      Расскажите, пожалуйста, каким образом сервисы типа gametracker получают список игроков на сервере? 

      Судя по их инструкции им хватает только ip и порта для трекинга. Без всякой авторизации. Если эти данные смотрят в мир, то как я могу их забрать?
      Меня интересуют сервера Arma 2 Dayz mod.
    • Автор: OXIDE
      Добрый день. Хотелось бы сделать аналог рукопашного боя, как в DayZ Sa. Игрок подходит к другому, нажимает на кнопку в скролл меню. Второй теряет кровь\сознание и т.д.
      Есть возможность запилить такой скрипт? Игроки просят. 
    • Автор: Ramhha
      Где можно узнать ID всех предметов, техники и прочего для DayZ Mod?