научите находить color [поиск сообщения из чата по цвету]

|_Ayarg_|

Известный
Автор темы
147
19
Версия MoonLoader
Другое
Для себя делаю скрипт для замены сообщений в вип чате по типу forever, vip и vip adv
есть код рабочий, но только потому что есть color на золотой цвет

Код:
if color == -213517057 and text:match('%[FOREVER%]') then
        local text = text:gsub('%[FOREVER%]', '{ffdd00}%[F%]')
        sampAddChatMessage(''..text..'', -1)
    end
- Такой код работает и заменяет сообщения, но у VIP ADV другой цвет в hex - FD446F

Начитавшись нейросеток и интернетов, понял, что Color это десятичное число (signed int32), представляющее цвет в формате ARGB (альфа + красный + зелёный + синий), а hex, который я получаю скопировав сообщение из чата игры, это шестнадцатеричный код цвета в формате RGB без альфа канала

Воспользовавшись всякими онлайн конвертерами из одного кода в другой все равно не удается получить даже золотой цвет который находится в color == -213517057 из FFD700

Помогите в этом вопросе, кто знает как упросить жизнь в этом....
 

БеzликиЙ

Автор темы
Проверенный
1,792
1,035
всё ты в принципе правильно делаешь, но в Lua можно вводить int прямо hex значениями, вот так:


Lua:
local color = 0xdeadbeef
local color2 = 0xDEADBEEF

регистр значения не имеет на самом деле

так вот. ты вполне можешь сделать в начале своего ev.onServerMessage что-нибудь типа:
Lua:
function ev.onServerMessage(color, text)
    print(color, text)
    -- остальной код
end

и доставать цвета оттуда, потому что самп их как-то странно хранит, #F345FCFE (то, что получается из твоего color) в ARGB - ярко-бирюзовый, в RGBA - фиолетовый (похож на премку, если присмотреться), в BGRA - тоже фиолетовый, но ближе к мадженте... бред, в общем
 
  • Влюблен
  • Нравится
Реакции: Tema05 и |_Ayarg_|

Tema05

Известный
1,629
545
в Lua можно вводить int прямо hex значениями
Прошу прощение, а существует хоть 1 язык где так нельзя сделать?)

Спасибо большое! Все заработало теперь

Если кому надо вот код для розового vip adv из чата

Код:
if color == -45846529 and text:match('%[VIP ADV%]') then
        local text = text:gsub('%[VIP ADV%]', '{FD446F}%[V ADV%]')
        sampAddChatMessage(''..text..'', -1)
        return false
    end
Круто, что разобрался. Я просто добавлю для информации, когда-то пригодится и не даст сойти с ума. В игре в некоторых местах почему-то цвет идёт не в формате RGB, а в формате BGR(это условно, такого не существует). Т.е. смещение по битам идёт в противоположную сторону из-за чего первый и последний цветовой канал меняются местами. Также из-за особенностей перекодирования в десятичной версии у некоторых цветов появляется минус, хотя по идеи это должно быть беззнаковое число, просто старший бит может быть равен 1 и lua это число представляет уже как отрицательное так как в lua динамическая типизация и нет беззнаковых чисел.

Это может вызывать путаницу. С чатом то изи. Альфа канал там на самом деле есть, под него выделена память, просто он всегда равен 0x00 или 0xFF(не помню) и ни на что не влияет. На Аризоне свой кастом чат и ты копируешь подготовленный цвет в его интерфейсе. В других местах Альфа канал может использоваться и там чёрт ногу сломит в каком порядке идут цветовые каналы. Так что при работе с цветом и особенно конвертации всегда перепроверяй себя и учитывай существование старшего бита, который lua отдаёт под знак. P.S. это конкретно в сампе такой пиздец, ни в 1 другой игре с таким не столкнёшься
 
Последнее редактирование:
  • Нравится
Реакции: |_Ayarg_|

|_Ayarg_|

Известный
Автор темы
147
19
Подскажите пожалуйста если кто знает, как на арз передавать сообщения так, чтобы вместо id предмета писалось также как и при обычном чате, если такое возможно
Пример: 1 сообщение подмена, 2 сообщение оригинальное
1769186614352.png


Причем это касается только item , иные сообщение по типу :call: , :houseid: нормально выводятся
1769186939390.png


1769186977578.png