imgui.Checkbox и удаление строк

турбодизельный унитаз2012

Участник
Автор темы
127
9
Версия MoonLoader
.026-beta
Всем привет.
Я пытался сделать чекбокс с возможностью удалять строки в чате, но там были проблемы.
Суть вопроса:
Как правильно и грамотно сделать imgui.Checkbox, если при его активации, он будет удалять строки?

Lua:
-- sozdaem
local delltext = new.bool()
--mimgui
if imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext) then
--хз как сюда вставить штуку, чтобы при вкл чекбокса, event.OnServerMessage удалял текст, если офф, то не удалял.
end
--mimgui end
function event.OnServerMessage(col, text)
    if text:find('^%[.* VIP]') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
    return false
    end
end
end
 
Решение
Вот даже попробуй это вставить в свой скрипт, оно не заработает при включении галочки чекбокса.
Не могу понять, почему..
Ну во-первых, крашит у тебя из-за этого:
1708664241427.png

После delltext должно быть [0] - delltext[0].

А во-вторых, даже если ты и добавишь [0], у тебя это не будет работать, так как ты его сразу вырубаешь, когда он включается:
1708664354346.png

Попробуй на это заменить:
Lua:
if imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext) then
    sampAddChatMessage('Поебень в чате '..(delltext[0] and 'врублена' or 'вырублена'), -1)
end
Ну а с цветами поиграйся там сам.)
Screenshot_1.png

Screenshot_2.png


Ну в третьих, у тебя в регулярках кое-чего не хватает...

recxvery

Участник
90
27
I'm stupid.
Можно пожалуйста весь?)
Lua:
local sampev = require('lib.samp.events')

local deleteText = imgui.new.bool()

function sampev.onServerMessage(color, text)
    if deleteText[0] then
        if text:find(--[[твой текст]]) then
            -- code
        end
    else
        -- code
    end
end

-- onFrame
if imgui.Checkbox(u8'Delete Text', deleteText) then
    -- code
end
такое чет
 

турбодизельный унитаз2012

Участник
Автор темы
127
9
Lua:
local sampev = require('lib.samp.events')

local deleteText = imgui.new.bool()

function sampev.onServerMessage(color, text)
    if deleteText[0] then
        if text:find(--[[твой текст]]) then
            -- code
        end
    else
        -- code
    end
end

-- onFrame
if imgui.Checkbox(u8'Delete Text', deleteText) then
    -- code
end
такое чет


Просто, но я всё равно ничё не понял.
Мб кто-то другой ответит с развёрнутым ответом.


Сделал вот так, не работает.
Lua:
function event.OnServerMessage(col, text)
    if delltext[0] then
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return false
        end
    else
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return true
        end
    end
end
 

recxvery

Участник
90
27
Просто, но я всё равно ничё не понял.
Мб кто-то другой ответит с развёрнутым ответом.


Сделал вот так, не работает.
Lua:
function event.OnServerMessage(col, text)
    if delltext[0] then
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return false
        end
    else
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return true
        end
    end
end
Экранируй правильно VIP
 
  • Bug
Реакции: Rezbirp

турбодизельный унитаз2012

Участник
Автор темы
127
9
Экранируй правильно VIP
Это не связано с текстом, который должен быть удалён.
Я имел ввиду, что не понимаю, как правильно настроить бокс, чтобы он удалял текст.
 

турбодизельный унитаз2012

Участник
Автор темы
127
9
Короче.
Попробовал сделать так, но после включения галочки - скрипт вырубает.
Lua:
--frame
if imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext) then
    if delltext then delltext = false sampAddChatMessage('Поебень в чате вырублена', 0xFF6600) else delltext = true sampAddChatMessage('Поебень в чате врублена', 0x63CB00) end
end
--frame
function event.OnServerMessage(col, text)
    if delltext[0] then
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return false
        end
    else
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return true
        end
    end
end
1708037527587.png

1708037673266.png
 
  • Эм
Реакции: recxvery

recxvery

Участник
90
27
Короче.
Попробовал сделать так, но после включения галочки - скрипт вырубает.
Lua:
--frame
if imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext) then
    if delltext then delltext = false sampAddChatMessage('Поебень в чате вырублена', 0xFF6600) else delltext = true sampAddChatMessage('Поебень в чате врублена', 0x63CB00) end
end
--frame
function event.OnServerMessage(col, text)
    if delltext[0] then
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return false
        end
    else
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return true
        end
    end
end
Посмотреть вложение 232173
Посмотреть вложение 232174
Lua:
sampAddChatMessage(delltext and 'включен' or 'выключен', -1)
 

kyrtion

Известный
660
242
Короче.
Попробовал сделать так, но после включения галочки - скрипт вырубает.
Lua:
--frame
if imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext) then
    if delltext then delltext = false sampAddChatMessage('Поебень в чате вырублена', 0xFF6600) else delltext = true sampAddChatMessage('Поебень в чате врублена', 0x63CB00) end
end
--frame
function event.OnServerMessage(col, text)
    if delltext[0] then
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return false
        end
    else
        if text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or text:find('^Гл. следящий за .* %w+_%w+') then
        return true
        end
    end
end
Посмотреть вложение 232173
Посмотреть вложение 232174
text:find('^%[.* VIP%]')

Скрипт вырубает - и что. Там посмотри в консоли или прочитай в файл moonlader.log. Мы тебя совсем не обучаем. Обычно обучают как самоучитель.
 

Rezbirp

Известный
72
69
Lua:
local sampev = require 'lib.samp.events'

local imgui = require 'mimgui'

local renderWindow = imgui.new.bool()
local delltext = imgui.new.bool()

local sw, sh = getScreenResolution()

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("menu", function() renderWindow[0] = not renderWindow[0] end)
end

local newFrameSettings = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.Begin("tmp", renderWindow)
            
            imgui.Checkbox(u8'Убрать оповещения в VIP-чате, сообщения от администраторов и прочий бред', delltext)
            
        imgui.End()
    end
)

function sampev.onServerMessage(col, text)
    if delltext[0] and (text:find('^%[.* VIP]') or text:find('^Вы позвонили в службу точного времени') or
    text:find('^Администратор %w+_%w+') or text:find('^Следящий за .* %w+_%w+') or
    text:find('^Гл. следящий за .* %w+_%w+'))  then
        return false
    end
end

Экранируй правильно VIP
1708042096267.png

А ошибка в названии функции onServerMessage (у него OnServerMessage)
 
Последнее редактирование:
  • Bug
Реакции: recxvery

Rezbirp

Известный
72
69
Некоторые символы нужно экранизировать: ^ $ ( ) % . [ ] * + - ? на процентов %, допустим %], %^, %%, %$, %(
Иначе не будет корректно работать
Если 1 [ экранировать, 2, закрывающую ] экранировать не нужно. Ещё раз напишу: "ошибка в названии функции onServerMessage (у него OnServerMessage)"
1708078534041.png
 
  • Bug
Реакции: kyrtion