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

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

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

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
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 (история изменений)

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


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

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

  • 0

Вспомнил

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

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

 

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

 

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

 

 

 

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


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





  • 0

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

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


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

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

 

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


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

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

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


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

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

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

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

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

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

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

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

 

 

 

 

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


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

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

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

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

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

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

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

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

 

 

 

 

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

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


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

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

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

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

 

 

 

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


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

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?
  • Наш выбор

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

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

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