Перейти к содержимому

DustBlue IPB Skin by CodeGame Networks

Учёт боеприпасов в рюкзаках и технике

патроны

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 39

#21 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 08 сентября 2015 - 23:22

Просмотр сообщенияКенГуру (08 сентября 2015 - 22:29) писал:

Жулькаю надыбанную
setGearSlotAmmoCount
:)

Неа, не пойдёт она, т.к. работает при открытом гире тока.. Ска..
Помогите цикл загрузки-апдейта-сохранения перса и объектов отследить?

Добавь в миссию скрипт для каждого игрока, - сверка оружия, рюкзака, одежды, предметов в инвентаре и рюкзаке.
И поставь цикличность исполнения раз в 5 сек. - Изменилось, что то - шлем на сервак, что инвентарь изменился.
Это по игрокам.

#22 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 09 сентября 2015 - 00:07

Самая насущная проблема - умудриться связаться с кэшем сервера, т.к. там хранится текущее кол-во патронов каждой обоймы в каждом ящике во время сессии.
Я пока расписался - даже при синхронизации рюкзака перса надо узнать, что это неполная обойма. А инфа - в серверном кэше, т.е. мне недоступна. И как её получить - хз.. :wacko:
С уважением, и всё такое..

#23 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 09 сентября 2015 - 02:06

Ultima_fnc_Get_Current_Weapon_and_Ammo_Count =
	{
		Private ["_weapon", "_ammo_count"];
		_weapon		=	currentWeapon (vehicle player);
		_ammo_count	=	0;
		if (_weapon != "") then
			{_ammo_count = player ammo _weapon;};
		[_weapon, _ammo_count]
	};
    
Пример использования:
Private ["_myWepAndAmmo", "_log"];
_myWepAndAmmo	=	[] call Ultima_fnc_Get_Current_Weapon_and_Ammo_Count;
_log		 =	format["Оружие: %1, патронов в магазине: %2", (_myWepAndAmmo select 0), (_myWepAndAmmo select 1)];
hint _log;
systemChat _log;
diag_log _log;

Не проверял.

#24 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 09 сентября 2015 - 07:41

Да не.. Получить текущее количество не проблема. Пока обойма в инвентаре игрока - её наполненность можно узнать, получив командой GearSlotAmmoCount
Фишка в том, что как только игрок убирает её в рюкзак, инвентарь сейфа или тачки - о количестве патронов знает только лишь кэш сервера. В БД пишется перекладывание обоймы БЕЗ кол-ва её патронов (и записать это количество нельзя - т.к. синхрон идёт оптом ПОСЛЕ закрытия гира игроком) . Просто сам факт наличия её синхронизируется, но НЕ патроны в ней.
Трабла в узколобости БИСов - они либо не предполагали, либо игнорировали саму возможность работы сервера нонстоп. У них всё от сессии до сессии хранится - не более. Это уж Рокет стал дампить данные перса в мускул, и ессно никому нафих не сдалось править экзешник сервера под потребности Дезы..
Единственный вариант работы с кэшем серва напрямую - это вскрыть его, прочитать схему кэшрования данных во время сессии и с помощью консольных команд пытаться менять определённые данные. Ещё сомнительно - усвоит ли он их.

Короче - реальный такой тупик впереди.. :huh:

З.Ы. Пока ещё не забросил, но не вижу света в конце тоннеля. :)

Идеально - переписать бы набор команд в экзешнике серва.. Это я ещё ниасилю пока.. Вскрыть-вскрою канеш (если не зашифровано хитро), но правильно переписать и скомпилить обратно - неа.. ;)

До кучи - вряд ли он потом лицушно запустится, после таких-то "правок" :D
С уважением, и всё такое..

#25 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 09 сентября 2015 - 08:55

Всё.. Придумал я алгоритм учёта боеприпасов в нынешних условиях. ;)

Работа предстоит немаленькая и решение это годится только для владельцев своего дейз_кода..
Если удастся реализовать - отпишусь..
С уважением, и всё такое..

#26 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 09 сентября 2015 - 19:21

Просмотр сообщенияКенГуру (09 сентября 2015 - 07:41) писал:

Да не.. Получить текущее количество не проблема. Пока обойма в инвентаре игрока - её наполненность можно узнать, получив командой GearSlotAmmoCount
Фишка в том, что как только игрок убирает её в рюкзак, инвентарь сейфа или тачки - о количестве патронов знает только лишь кэш сервера. В БД пишется перекладывание обоймы БЕЗ кол-ва её патронов (и записать это количество нельзя - т.к. синхрон идёт оптом ПОСЛЕ закрытия гира игроком) . Просто сам факт наличия её синхронизируется, но НЕ патроны в ней.
Трабла в узколобости БИСов - они либо не предполагали, либо игнорировали саму возможность работы сервера нонстоп. У них всё от сессии до сессии хранится - не более. Это уж Рокет стал дампить данные перса в мускул, и ессно никому нафих не сдалось править экзешник сервера под потребности Дезы..
Единственный вариант работы с кэшем серва напрямую - это вскрыть его, прочитать схему кэшрования данных во время сессии и с помощью консольных команд пытаться менять определённые данные. Ещё сомнительно - усвоит ли он их.

Короче - реальный такой тупик впереди.. :huh:

З.Ы. Пока ещё не забросил, но не вижу света в конце тоннеля. :)

Идеально - переписать бы набор команд в экзешнике серва.. Это я ещё ниасилю пока.. Вскрыть-вскрою канеш (если не зашифровано хитро), но правильно переписать и скомпилить обратно - неа.. ;)

До кучи - вряд ли он потом лицушно запустится, после таких-то "правок" :D

GearSlotAmmoCount

1. Эта команда удалена из армы вроде. Хотя не проверял, но где то в тикетах видел, что не пашет.
2. Ну допустим ты перепишешь выкидывание\перекладывание из пака предметов -
если магазин, - удалить из пака, создать в хранилище, и повесить переменную на магазин с кол-вом патронов в нем.
При поднятии так же - удалить с земли\хранилища - добавить в инвентарь, повесив variable с кол-вом.
Как то это все напряжно весьма.

#27 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 10 сентября 2015 - 01:01

Сделал.. Создал конфиги обойм некратных количеств (1,2,3,4,5,6,7,8,9,10 для мелочи,15,20,25,30,40..190 для рожков и лент) и конверт-обратный конверт в ячейках при открытии-закрытии гира.. :)
Надо поспать перед работой.. Приду с работы - буду тестить, отпишусь..
Ёмаё - 6 утра.. :blink: :D
С уважением, и всё такое..

#28 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 11 сентября 2015 - 19:45

Веду отладку..
Прошу подсказки по правильному синтаксису:
_itemNew = call compile format ["%1ТЕКСТ",_val];
В лог выводит нехватку точки с запятой.

Ответ должен быть, например таким:
_itemNew = "80ТЕКСТ";

Подобрал правильный:
_itemNew = call compile format ["'%1' + 'ТЕКСТ'",_val];

Сообщение отредактировал КенГуру: 11 сентября 2015 - 21:44

С уважением, и всё такое..

#29 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 11 сентября 2015 - 21:46

Скрипт работает, но ещё сырой.. ;)

Так что - будет у меня учёт боеприпасов..

Даёошь риялизьму! :D
С уважением, и всё такое..

#30 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 12 сентября 2015 - 07:02

Просмотр сообщенияКенГуру (11 сентября 2015 - 19:45) писал:

Веду отладку..
Прошу подсказки по правильному синтаксису:
_itemNew = call compile format ["%1ТЕКСТ",_val];
В лог выводит нехватку точки с запятой.

Ответ должен быть, например таким:
_itemNew = "80ТЕКСТ";

Подобрал правильный:
_itemNew = call compile format ["'%1' + 'ТЕКСТ'",_val];

_itemNew = format ["%1ТЕКСТ",_val];

#31 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 13 сентября 2015 - 11:01

Просмотр сообщенияNoNameUltima (12 сентября 2015 - 07:02) писал:

_itemNew = format ["%1ТЕКСТ",_val];
Да, спасибо! Задублировал тему на платуне (видел поди) и там мне Свалом также ответил. правда я чуть ранее сам уж догадался и затестить даже успел к моменту ответа Свалома  :D


Короче - всё пашет!
Конвертирует обоймы скрипт - только что впервые получил результат!! :)
Ща заскриню!

АПД:
Скрины в этом странном движке форума не прикрепить что ли?
Пока чудит децл конверт, допиливаю - шлифую..
С уважением, и всё такое..

#32 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 14 сентября 2015 - 09:17

Скрины можно. На хостинг залить и сюда ссылкой. Вроде все ок было.

#33 Рhantom

Рhantom

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 30 сентября 2015 - 18:49

ммм, павн родной)

#34 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 27 октября 2015 - 09:42

Привет!
По результатам месяца тестов могу чётко сказать - работает. Не идеально, но это Арма сынок - как говорится :)
Иногда приходится убирать недострелянную обойму в рюкзак при лутании во избежание пересчётов и перезарядок перса. И изредка не проходит сверка при открытии гира - движок не засекает факт его открытия. Но - это всё мелочи, играть можно! ;)
И с патронами теперь - труба! Дефицит торговли ещё увеличивает проблему. Бездумная стрельба сейчас у меня на проекте противопоказана категорически..
С уважением, и всё такое..

#35 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 04 декабря 2015 - 11:52

Апдейт. Конвертацию обойм вынужденно переключил на клац по ячейке в гире. Иначе доставала эта автоконвертация. Дополнительная трабла на нагруженном проекте как мой - скрипт теряет информацию. Есть более приемлемые и логичные решения активации конвертации, но не хватает знаний по конфигу гира. Провёл ряд экспериментов методом научного тыка, результатов не получил и забил пока. Может явится заинтересованный кодер, с которым смогу обсудить данные моменты. Вместе со знатоком возможно и удастся реализовать на все 100%
С уважением, и всё такое..

#36 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 12 октября 2016 - 12:09

Приветствую!

Вернулся к данной проблеме - т.к. до релиза осталось исправить только этот косяк с неправильной работой скрипта конвертации.. Вторую неделю ищу правильный алгоритм.
Нужен метод удаления итема из конкретной ячейки при клике на неё.

Сейчас проблема в том, что удаляется одноимённая ПОЛНАЯ обойма из гира (если таковая присутствует), оставляя недострелянную..

Есть у кого знания по командам контрола? lbDelete и подобные что-то не хотят работать.. Похоже только со списками пашут..
С уважением, и всё такое..

#37 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 13 октября 2016 - 12:17

Просмотр сообщенияКенГуру (12 октября 2016 - 12:09) писал:

Приветствую!

Вернулся к данной проблеме - т.к. до релиза осталось исправить только этот косяк с неправильной работой скрипта конвертации.. Вторую неделю ищу правильный алгоритм.
Нужен метод удаления итема из конкретной ячейки при клике на неё.

Сейчас проблема в том, что удаляется одноимённая ПОЛНАЯ обойма из гира (если таковая присутствует), оставляя недострелянную..

Есть у кого знания по командам контрола? lbDelete и подобные что-то не хотят работать.. Похоже только со списками пашут..
А при чем тут lbDelete?
Ты для начала сделай диагностику и вывод в hint к примеру и в лог, - ид контрола над которым находишся.
Потом найди в арме, что за класс у инвентаря и ячейки.
А уж потом можно будет смотреть, что это за класс.
Ну и - не понятно - зачем удалять по клику...

#38 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 13 октября 2016 - 13:45

Ну ессно это делается..

Вот начало по стандарту:

_control = _this select 0;
_item = gearSlotData _control;
if (_item != "") then {
_conf = configFile >> "CfgMagazines" >> _item;

if (isClass _conf) then {
_val = gearSlotAmmoCount _control; // количество в этой ячейке
_max = getNumber (configFile >> "CfgMagazines" >> _item >> "count"); // должно быть в ячейке

if (_val < _max) then {

А почему необходимо удалять по клику именно из этого слота - написано здесь:

Цитата

Сейчас проблема в том, что удаляется одноимённая ПОЛНАЯ обойма из гира (если таковая присутствует), оставляя недострелянную..
Поясню. Например, есть в гире две обоймы ДМР. Одна полная, во второй 12 патронов. Кликнув на полную - я ничего не изменю, но клик по неполной второй - должен сконвертировать её в полную 12-патронную - УДАЛИВ неполную 20-ку и добавив вместо неё полную 12-ку.
Но скрипт ска удаляет ПОЛНУЮ первую, нетронутую обойму и получаем две обоймы по 12 патронов. Одна в виде 20-ки с 12-ю патронами, другая полная 12-ка.Повторный клик ессно удаляет уже её (т.к. она 20-ка всё-таки) и спавнит ещё одну полную 12-ку.
В итоге кликов: было 20+12=32 патрона - получили 12+12=24 патрона. И таких чудес в различных вариациях пруд пруди.

Всё из-за того, что движок кривущей Армы ставит в приоритет наиболее полную обойму всегда.

Вот я и хочу удалять сразу конкретно ЭТУ, текущую обойму в слоте.. Не по названию, а по слоту.
С уважением, и всё такое..

#39 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 16 октября 2016 - 20:09

Просмотр сообщенияКенГуру (13 октября 2016 - 13:45) писал:

Ну ессно это делается..

Вот начало по стандарту:

_control = _this select 0;
_item = gearSlotData _control;
if (_item != "") then {
_conf = configFile >> "CfgMagazines" >> _item;

if (isClass _conf) then {
_val = gearSlotAmmoCount _control; // количество в этой ячейке
_max = getNumber (configFile >> "CfgMagazines" >> _item >> "count"); // должно быть в ячейке

if (_val < _max) then {

А почему необходимо удалять по клику именно из этого слота - написано здесь:

Поясню. Например, есть в гире две обоймы ДМР. Одна полная, во второй 12 патронов. Кликнув на полную - я ничего не изменю, но клик по неполной второй - должен сконвертировать её в полную 12-патронную - УДАЛИВ неполную 20-ку и добавив вместо неё полную 12-ку.
Но скрипт ска удаляет ПОЛНУЮ первую, нетронутую обойму и получаем две обоймы по 12 патронов. Одна в виде 20-ки с 12-ю патронами, другая полная 12-ка.Повторный клик ессно удаляет уже её (т.к. она 20-ка всё-таки) и спавнит ещё одну полную 12-ку.
В итоге кликов: было 20+12=32 патрона - получили 12+12=24 патрона. И таких чудес в различных вариациях пруд пруди.

Всё из-за того, что движок кривущей Армы ставит в приоритет наиболее полную обойму всегда.

Вот я и хочу удалять сразу конкретно ЭТУ, текущую обойму в слоте.. Не по названию, а по слоту.
Арма ничего ни в какие приоритеты не ставит.
Что удаляешь - то и удаляется.

В твоем случае - надо:
1. Собрать информацию обо ВСЕХ объектов инвентаря, данного типа создав временный массив.
*Для примера - в инвентаре 5 обойм класса XXX, 3 по 20, 1-12, и 1-11
[12,11,20,20,20]

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

3. Следуя массиву, - добавить по очереди обоймы в инвентарь(если у тебя созданы классы под разное кол-во патронов, то наверное, ты создавал их используя приставку, - в облегчение задачи - а следовательно при добавлении неполных обойм - это другой класс. И для его определения, достаточно добавить приписку _N - где N - кол-во патронов в обойме.)

{
player addMagazine (XXX + "_" + str(_x);
} forEach _arr;

xxx_20 - полная
xxx_12 - 12 патронная
xxx_11 - 11 патронная
.....
и т.п.

#40 КенГуру

КенГуру

    Продвинутый пользователь

  • Проверенные
  • PipPipPip
  • 42 сообщений
  • ГородЧелябинск

Отправлено 16 октября 2016 - 20:14

Просмотр сообщенияNoNameUltima (16 октября 2016 - 20:09) писал:

Арма ничего ни в какие приоритеты не ставит.
Ещё как ставит. Возьми в гир полную и недострелянную обойму и посмотри какая зарядится.

Что и как делать сейчас - так всё именно и работает, как ты описал. А хотел по уму - ювелирно удалять только текущую обойму.. Ну нет - так нет..
С уважением, и всё такое..




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных