Arizona ARZ | [TM] Inventory Plus - поиск и названия предметов в лавке, шкафах, складах и багажнике

TheMY3

Известный
Автор темы
96
56
Версия SA-MP
  1. Любая
Inventory Plus - поиск и названия предметов в лавке, шкафах, складах и багажнике

Как многие знают - стандартное окно лавки не имеет ни поиска, ни вывода названия предмета и приходится наводиться на каждую ячейку, чтобы понять, что это за предмет. Особенно больно, когда у некоторых предметов те же иконки, а их в лавке несколько десятков. Этот скрипт добавляет полноценный поиск по названию и подписывает каждую ячейку прямо в окне лавки, в шкафу, складе, багажнике и других окнах с такой же сеткой предметов (у них общий интерфейс). Помимо этого умеет сортировать предметы по алфавиту и запоминать введённый запрос - удобно, когда пробегаешь десяток лавок подряд в поисках одной вещи. Всё сделано на элементах родного интерфейса: те же иконки, тултипы и стили, что в инвентаре, плюс масштабирование под любое разрешение - от стандартного окна наверное и не отличить.

Что умеет скрипт
  1. Добавляет строку поиска прямо в окно торговой лавки, шкафов, складов, багажника и мусорки. Основной инвентарь не трогает - там поиск и так есть.
  2. Выводит название предмета поверх каждой ячейки, так что видно всё сразу без наведения.
  3. Иконка поиска работает как в инвентаре: ввёл текст - лупа становится крестиком, клик по нему сбрасывает поиск.
  4. Замочек в строке поиска - запоминает введённый запрос: можно закрыть лавку, открыть соседнюю, и поиск уже вбит. Живёт до перезахода в игру, при очистке поля выключается сам.
  5. Нормальная сортировка по названию (иконка слева от поиска): предметы выстраиваются по алфавиту, безымянные и пустые слоты уходят в конец. Специально делал по названию, а не подобие стандартной игровой, где фиг что найдешь по итогу. Выключил - вернулся порядок, который выставил продавец (или сервер). Настройка запоминается насовсем, у иконок есть подсказки при наведении.
  6. В диалоге покупки/продажи предмета - кнопка MAX (в поле ввода вместо индикатора раскладки) подставляет максимально доступное количество: при покупке это наличие в лавке, при продаже - меньшее из «сколько игрок покупает» и «сколько у вас есть». Под полем сразу считается Итого (количество × цену) в валюте этого диалога, обновляется на лету и краснеет, если ввести больше максимума.

Важно знать (ограничения)
  • Совсем новые предметы могут быть без названия. Cвежедобавленные на сервер предметы попадают в словарь с задержкой, пока я не обновлю список на сервере. У таких предметов название не будет отображаться, и по ним не сработает поиск - ячейки просто останутся без баннера. То же касается сортировки - она идёт по названиям из словаря, поэтому предметы, которых нет в списке, всегда окажутся в конце, даже если включена.
  • Названия выводятся не полностью. Делалось специально т.к. мне достаточно видеть даже часть названия, чтобы понять, что это за предмет. Не вижу смысла делать какие-то переносы строк и закрывать половину иконки.
  • Список отдаётся с моего сервера. Есть теоретический шанс, что он окажется недоступен из некоторых стран, но на практике такого пока не было. Если словарь не загрузился - поле поиска покажет «СПИСОК НЕ ЗАГРУЖЕН», можно попробовать /ipreload.

Зависимости
  • SAMP.lua
  • encoding

Команды скрипта
  • /ipreload - принудительно обновить список предметов (сбрасывает весь кэш). Результат виден в поле поиска: плейсхолдер меняется на «ПОИСК» при успехе или «СПИСОК НЕ ЗАГРУЖЕН» при ошибке.

Примечание
Скрипт делал под свои нужды, поэтому он заточено конкретно под мой сценарий использования. Если будут дельные пожелания и предложения и они мне по силам - есть шанс, что я их реализую.
Так же я заранее замечу, что я не эксперт по CEF (и на него не претендую), но всю жизнь занимаюсь вебом, так что часть кода, который я понимал - я пытался максимально оптимизировать, а вот CEF часть - тут уже искал оптимальный вариант исходя из дебага CEF на сервере и консультаций с клодом. Но вроде бы финальный вариант работает нормально, каких-то тормозов я не замечал, как и вылетов (Изначально были тормоза, но как оказалось, это и без скриптов так лавка открывается с фризами, ранее не обращал внимание).

Актуальная версия
На данный момент актуальная версия - 2.2.0, скачать можно ниже, всегда обновляю ссылку в первом посте.
Если нужны предыдущие версии, то ниже в Истории изменений можете поискать ссылки на посты.
Пример работы можно посмотреть ниже.

2.2.0
- В диалоге покупки/продажи предмета добавлена кнопка MAX (в поле ввода вместо индикатора раскладки) - подставляет максимально доступное количество: при покупке наличие в лавке, при продаже меньшее из «сколько игрок покупает» и «сколько у вас есть».
- Под полем ввода в таких диалогах появился живой подсчёт Итого (количество × цену) в валюте этого диалога, с пометкой «без учёта комиссии»; краснеет, если ввести больше максимума.

2.1.0
- Словарь предметов теперь полный: названия есть у всех предметов сервера, а не только у ~2-3к торгуемых на маркете. Поиск и сортировка тоже видят всё.
- На случай проблем с полным словарём (долгая загрузка или «СПИСОК НЕ ЗАГРУЖЕН») в самом верху файла скрипта появилась настройка DICT_MODE: замена 'all' на 'market' возвращает прежний облегчённый список, после смены перезапустить игру. Пока решил обойтись без конфига, вряд-ли будут проблемы с полным списком.

2.0.0
- Скрипт переименован в Inventory Plus - он теперь не только про лавку. Файл скрипта тоже переименован: старый [TheMY3] Lavka Enhancer.lua нужно удалить из moonloader.
- Поиск, названия предметов и сортировка теперь работают также в шкафах (личных и организации), складах (обоих типов), багажнике и мусорках - у всех этих окон общий интерфейс с лавкой.
- Плашка «Сбросить поиск» в шкафу встаёт над блоком «Пополнить/Снять», а не под ним.
- Команда обновления списка переименована: /lreload -> /ipreload.
- Разовое после обновления: словарь предметов скачается заново, а настройка сортировки сбросится (сменились ключи кэша из-за переименования).

1.2.0
- Иконка поиска теперь ведёт себя как в инвентаре: при вводе текста лупа меняется на крестик, клик по нему сбрасывает поиск.
- Добавлен замочек в строке поиска — запоминает введённый запрос при закрытии лавки или открытии другой (не сохраняется между перезаходами).
- Добавлена сортировка предметов по названию (иконка слева от поиска): предметы без названия и пустые слоты уходят в конец, при выключении возвращается порядок продавца. Настройка сохраняется между перезаходами.
- Добавлены игровые тултипы-подсказки к иконкам.
- Плашка с названием предмета теперь плотно прилегает к краям ячейки, без просвета.
- Все размеры интерфейса масштабируются под любое разрешение, как родной интерфейс игры.

Диалог продажи предмета:
image_2026-07-17_12-53-45.png
Лавка до сортировки:
image_2026-07-05_10-41-32.png
Лавка после сортировки:
image_2026-07-05_10-41-31.png
Лавка после поиска:
image_2026-07-05_10-41-30.png
Прочие сущности:
image_2026-07-12_11-54-14 (1).png
image_2026-07-12_11-54-14.png
image_2026-07-12_11-56-53.png
image_2026-07-12_11-59-07.png

 

Вложения

  • [TheMY3] Inventory Plus.lua
    33.2 KB · Просмотры: 20
Последнее редактирование:

TheMY3

Известный
Автор темы
96
56
Рандомный чубрик с BH додумался, а Arizona Games с штатом сотрудников, финансами и т.п. - нет)
Классика. Но по итогу копания в CEF я понимаю почему нет поиска в лавках и шкафах. Изначально думал, что за 5 минут накидаю скрипт и всё, но нифига)
При текущей логике работы CEF лавок/шкафов и прочего вряд-ли что-то такое сделают т.к. типы с калькуляторов ещё больше будут плакать, что у них всё долго грузится и лагает. Так, что думаю разрабы хотели бы это сделать, но в угоду слабым ПК приходится идти на такой компромисс.
 

kievdrifter

Известный
327
76
Было бы неплохо сделать так называемое «сохранение текста». Допустим, я скупаю гражданки, подошел к первой лавке, в поиске раз прописал «гражданки» и бегаю дальше по лавкам, скупаю без необходимости повторного ввода текста.
 

TheMY3

Известный
Автор темы
96
56
Было бы неплохо сделать так называемое «сохранение текста». Допустим, я скупаю гражданки, подошел к первой лавке, в поиске раз прописал «гражданки» и бегаю дальше по лавкам, скупаю без необходимости повторного ввода текста.
Я изначально так и делал, но потом мне показалось наоборот это не удобным, что нужно в каждой лавке текст чистить поле поиска, поэтому сделал автоматом чистку. Но раз уже второй человек за это пишет, то видимо в этом есть смысл. Подумаю над этим.
 
  • Нравится
Реакции: kievdrifter

TheMY3

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

Обновил первый пост - добавил актуальное описание, скриншоты и видео с примером работы. Видео ещё сюда приложу:

 

Вложения

  • [TheMY3] Lavka Enhancer.lua
    24.2 KB · Просмотры: 13

Barsik_Matroskin

Известный
328
36
Lavka Enhancer - поиск и названия предметов в прямо лавке

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

Что умеет скрипт
  1. Добавляет строку поиска прямо в окно торговой лавки.
  2. Выводит название предмета поверх каждой ячейки, так что видно всё сразу без наведения.
  3. Иконка поиска работает как в инвентаре: ввёл текст - лупа становится крестиком, клик по нему сбрасывает поиск.
  4. Замочек в строке поиска - запоминает введённый запрос: можно закрыть лавку, открыть соседнюю, и поиск уже вбит. Живёт до перезахода в игру, при очистке поля выключается сам.
  5. Нормальная сортировка по названию (иконка слева от поиска): предметы выстраиваются по алфавиту, безымянные и пустые слоты уходят в конец. Специально делал по названию, а не подобие стандартной игровой, где фиг что найдешь по итогу. Выключил - вернулся порядок, который выставил продавец. Настройка запоминается насовсем, у иконок есть подсказки при наведении.

Важно знать (ограничения)
  • Список не полный. В словаре только ходовые предметы - примерно 2-3к позиций, которые реально торгуются, а не все 10к+ предметов сервера. Это сделано специально, чтобы не грузить огромный список, ходовых товаров мне хватает. Как следствие: у неходовых или совсем новых предметов название не будет отображаться, и по ним не сработает поиск - такие ячейки просто останутся без баннера. То же касается сортировки - она идёт по названиям из словаря, поэтому предметы, которых нет в списке, всегда окажутся в конце, даже если включена.
  • Названия выводятся не полностью. Делалось специально т.к. мне достаточно видеть даже часть названия, чтобы понять, что это за предмет. Не вижу смысла делать какие-то переносы строк и закрывать половину иконки.
  • Список отдаётся с моего сервера. Есть теоретический шанс, что он окажется недоступен из некоторых стран, но на практике такого пока не было. Если словарь не загрузился - поле поиска покажет «СПИСОК НЕ ЗАГРУЖЕН», можно попробовать /lreload.

Зависимости
  • SAMP.lua
  • encoding

Команды скрипта
  • /lreload - принудительно обновить список предметов (сбрасывает весь кэш). Результат виден в поле поиска лавки: плейсхолдер меняется на «ПОИСК» при успехе или «СПИСОК НЕ ЗАГРУЖЕН» при ошибке.

Примечание
Скрипт делал под свои нужды, поэтому он заточено конкретно под мой сценарий использования. Если будут дельные пожелания и предложения и они мне по силам - есть шанс, что я их реализую.
Так же я заранее замечу, что я не эксперт по CEF (и на него не претендую), но всю жизнь занимаюсь вебом, так что часть кода, который я понимал - я пытался максимально оптимизировать, а вот CEF часть - тут уже искал оптимальный вариант исходя из дебага CEF на сервере и консультаций с клодом. Но вроде бы финальный вариант работает нормально, каких-то тормозов я не замечал, как и вылетов (Изначально были тормоза, но как оказалось, это и без скриптов так лавка открывается с фризами, ранее не обращал внимание).

Актуальная версия
На данный момент актуальная версия - 1.2.0, скачать можно ниже, всегда обновляю ссылку в первом посте.
Если нужны предыдущие версии, то ниже в Истории изменений можете поискать ссылки на посты.
Пример работы можно посмотреть ниже.

1.2.0
- Иконка поиска теперь ведёт себя как в инвентаре: при вводе текста лупа меняется на крестик, клик по нему сбрасывает поиск.
- Добавлен замочек в строке поиска — запоминает введённый запрос при закрытии лавки или открытии другой (не сохраняется между перезаходами).
- Добавлена сортировка предметов по названию (иконка слева от поиска): предметы без названия и пустые слоты уходят в конец, при выключении возвращается порядок продавца. Настройка сохраняется между перезаходами.
- Добавлены игровые тултипы-подсказки к иконкам.
- Плашка с названием предмета теперь плотно прилегает к краям ячейки, без просвета.
- Все размеры интерфейса масштабируются под любое разрешение, как родной интерфейс игры.


Сделай тоже самое тока для этого
1783515632076.png
 

KtotoTama

Участник
34
3
Так ему отдаёт список названий предметов, которые конкретно есть в инвентаре, бекенд?
Я тоже пытался сделать в CEF, но увы. Список изолирован, а сам CEF имеет лимиты (то ли памяти, то ли чего-то ещё): большие массивы не переваривает.

Очень не хватает поиска в шкафах, багажниках и на складах обоих типов. И добавь сертификаты на ходовые охранники. Например, нет Power Armoк. А это крайне популярный товар для скупа и продажи.
 

TheMY3

Известный
Автор темы
96
56

TheMY3

Известный
Автор темы
96
56
И добавь сертификаты на ходовые охранники. Например, нет Power Armoк. А это крайне популярный товар для скупа и продажи.
Данные собираю с маркета, там статистика не обновлялась уже 20 дней. Скорее всего в новом обновлении статистики они появятся.

а сам CEF имеет лимиты (то ли памяти, то ли чего-то ещё): большие массивы не переваривает.
Там по сути обычный браузер, но если закинуть JSON на 10к+ предметов, то у многих будут проблемы со скриптом из-за того, что будет кушать много оперативы, об этом писал в первом посте. 2к как-бы тоже не мало, но самому фильтровать 10к предметов не хочется, не стоит оно того.

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

TheMY3

Известный
Автор темы
96
56
Складские помещения (gps) и склад который ставится возле дома как объект.
А, точно. Склады у дома есть, я за них забыл.

- Скрипт переименован в Inventory Plus - он теперь не только про лавку. Файл скрипта тоже переименован: старый [TheMY3] Lavka Enhancer.lua нужно удалить из moonloader.
- Поиск, названия предметов и сортировка теперь работают также в шкафах (личных, отелей и организации), складах (обоих типов), багажнике и мусорках - у всех этих окон общий интерфейс с лавкой.
- Плашка «Сбросить поиск» в шкафу встаёт над блоком «Пополнить/Снять», а не под ним.
- Команда обновления списка переименована: /lreload -> /ipreload.
- Разовое после обновления: словарь предметов скачается заново, а настройка сортировки сбросится (сменились ключи кэша из-за переименования).

@KtotoTama @Barsik_Matroskin ☝️
 

Вложения

  • [TheMY3] Inventory Plus.lua
    25.6 KB · Просмотры: 4
Последнее редактирование:
  • Нравится
  • Влюблен
Реакции: kievdrifter и KtotoTama

TheMY3

Известный
Автор темы
96
56
не все предметы видит
Так и не должен все видеть, в топике же всё писал:
Список не полный. В словаре только ходовые предметы - примерно 2-3к позиций, которые реально торгуются, а не все 10к+ предметов сервера. Это сделано специально, чтобы не грузить огромный список, ходовых товаров мне хватает (в шкафах и складах словарь тот же - id предметов общие). Как следствие: у неходовых или совсем новых предметов название не будет отображаться, и по ним не сработает поиск - такие ячейки просто останутся без баннера. То же касается сортировки - она идёт по названиям из словаря, поэтому предметы, которых нет в списке, всегда окажутся в конце, даже если включена.
Но была мысль попробовать полный список подключить, разрабы там хвастаются, что CEF недавно ускорили в 100500 раз, может не будет проблем с этим теперь. Если заработает, то можно будет полный список подключать или сделать настройки с выбором списка. Но это не решит проблемы с новыми предметами, они так же будут с запозданием чуть появлятся.