Как убрать "Неизвестная команда"

albertus

Участник
Автор темы
8
0
Версия MoonLoader
.026-beta
Доброго времени суток всем.
Хочу убрать в чате на аризоне надпись об ошибке при вводе неизвестной команды.
По мистическим (или моим рукожопским) обстоятельствам через данный прикол:
Убирашка:
if text:find("Неизвестная команда!") then
return false
Ничего не выходит, ошибка продолжает вылезать в чат не смотря на то, что скрипт был успешно загружен.
В чем же проблема?
 
Решение
Проблема устранена. Всем огромное спасибо.
Ниже работающий код:

Нормальный код:
require 'lib.moonloader'

local samp = require 'samp.events'

function samp.onServerMessage(color, text)
  if text:find("Ошибка") and not text:find('говорит') and not text:find('кричит') and not text:find('- |') then
  return false
  end
end

Dark.

Известный
1,748
769
Доброго времени суток всем.
Хочу убрать в чате на аризоне надпись об ошибке при вводе неизвестной команды.
По мистическим (или моим рукожопским) обстоятельствам через данный прикол:
Убирашка:
if text:find("Неизвестная команда!") then
return false
Ничего не выходит, ошибка продолжает вылезать в чат не смотря на то, что скрипт был успешно загружен.
В чем же проблема?
Фулл код кинь
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Доброго времени суток всем.
Хочу убрать в чате на аризоне надпись об ошибке при вводе неизвестной команды.
По мистическим (или моим рукожопским) обстоятельствам через данный прикол:
Убирашка:
if text:find("Неизвестная команда!") then
return false
Ничего не выходит, ошибка продолжает вылезать в чат не смотря на то, что скрипт был успешно загружен.
В чем же проблема?
Используешь библиотеку самп евент, в хуке на сообщения пишешь то что выше код был + закрыть этот иф. И все должно работать, если не работает, есть несколько причин, скрипит сохранен в такой кодировки, что для самп это обычные кроказябры, вместо "Неизвестная команда!", в скрипте присутствуют иные ошибки, из-за чего он не загружается. Если все таки не понял, скинь фулл скрипта своего. Можешь так-же использовать регулярное выражение
 

albertus

Участник
Автор темы
8
0
Используешь библиотеку самп евент, в хуке на сообщения пишешь то что выше код был + закрыть этот иф. И все должно работать, если не работает, есть несколько причин, скрипит сохранен в такой кодировки, что для самп это обычные кроказябры, вместо "Неизвестная команда!", в скрипте присутствуют иные ошибки, из-за чего он не загружается. Если все таки не понял, скинь фулл скрипта своего. Можешь так-же использовать регулярное выражение
фулл код:
require 'lib.moonloader'

local sampev = require 'lib.samp.events'

function main()
    while not isSampAvailable() do wait(0) end

    while true do
        wait(0)

    end
end

function sampev.onServerMessage(color, text)
    if text:find('Неизвестная ошибка!') then
            return false
        end
    end
 
У

Удалённый пользователь 448549

Гость
Доброго времени суток всем.
Хочу убрать в чате на аризоне надпись об ошибке при вводе неизвестной команды.
По мистическим (или моим рукожопским) обстоятельствам через данный прикол:
Убирашка:
if text:find("Неизвестная команда!") then
return false
Ничего не выходит, ошибка продолжает вылезать в чат не смотря на то, что скрипт был успешно загружен.
В чем же проблема?
На аризоне при неизвестной команде пишет [Ошибка] Неизвестная команда! Введите /help для просмотра доступных функций.
Возможно ты не поменял кодировку на Windows 1251

Могу предложить вариант без samp.events

Lua:
require('moonloader')
local ffi = require('ffi')

--HOOKS
local hook = {hooks = {}}
addEventHandler('onScriptTerminate', function(scr)
    if scr == script.this then
        for i, hook in ipairs(hook.hooks) do
            if hook.status then
                hook.stop()
            end
        end
    end
end)
ffi.cdef [[
    int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function hook.new(cast, callback, hook_addr, size)
    local size = size or 5
    local new_hook = {}
    local detour_addr = tonumber(ffi.cast('intptr_t', ffi.cast('void*', ffi.cast(cast, callback))))
    local void_addr = ffi.cast('void*', hook_addr)
    local old_prot = ffi.new('unsigned long[1]')
    local org_bytes = ffi.new('uint8_t[?]', size)
    ffi.copy(org_bytes, void_addr, size)
    local hook_bytes = ffi.new('uint8_t[?]', size, 0x90)
    hook_bytes[0] = 0xE9
    ffi.cast('uint32_t*', hook_bytes + 1)[0] = detour_addr - hook_addr - 5
    new_hook.call = ffi.cast(cast, hook_addr)
    new_hook.status = false
    local function set_status(bool)
        new_hook.status = bool
        ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot)
        ffi.copy(void_addr, bool and hook_bytes or org_bytes, size)
        ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot)
    end
    new_hook.stop = function() set_status(false) end
    new_hook.start = function() set_status(true) end
    new_hook.start()
    table.insert(hook.hooks, new_hook)
    return setmetatable(new_hook, {
        __call = function(self, ...)
            self.stop()
            local res = self.call(...)
            self.start()
            return res
        end
    })
end
--HOOKS


function main()
   
    -- SF.Lua
    hkAddMessage = hook.new('void(__thiscall *)(void* this, int nType, const char* szText, const char* szPrefix, unsigned long textColor, unsigned long prefixColor)', hkAddMessage, getModuleHandle('samp.dll') + 0x64010)
   
    wait(0)
end

function hkAddMessage(this, nType, szText, szPrefix, textColor, prefixColor)

    if (ffi.string(szText) == '[Ошибка] {FFFFFF}Неизвестная команда! Введите /help для просмотра доступных функций.') then
        return false
    end

    return hkAddMessage(this, nType, szText, szPrefix, textColor, prefixColor)
end
 

albertus

Участник
Автор темы
8
0
На аризоне при неизвестной команде пишет [Ошибка] Неизвестная команда! Введите /help для просмотра доступных функций.
Возможно ты не поменял кодировку на Windows 1251

Могу предложить вариант без samp.events

Lua:
require('moonloader')
local ffi = require('ffi')

--HOOKS
local hook = {hooks = {}}
addEventHandler('onScriptTerminate', function(scr)
    if scr == script.this then
        for i, hook in ipairs(hook.hooks) do
            if hook.status then
                hook.stop()
            end
        end
    end
end)
ffi.cdef [[
    int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function hook.new(cast, callback, hook_addr, size)
    local size = size or 5
    local new_hook = {}
    local detour_addr = tonumber(ffi.cast('intptr_t', ffi.cast('void*', ffi.cast(cast, callback))))
    local void_addr = ffi.cast('void*', hook_addr)
    local old_prot = ffi.new('unsigned long[1]')
    local org_bytes = ffi.new('uint8_t[?]', size)
    ffi.copy(org_bytes, void_addr, size)
    local hook_bytes = ffi.new('uint8_t[?]', size, 0x90)
    hook_bytes[0] = 0xE9
    ffi.cast('uint32_t*', hook_bytes + 1)[0] = detour_addr - hook_addr - 5
    new_hook.call = ffi.cast(cast, hook_addr)
    new_hook.status = false
    local function set_status(bool)
        new_hook.status = bool
        ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot)
        ffi.copy(void_addr, bool and hook_bytes or org_bytes, size)
        ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot)
    end
    new_hook.stop = function() set_status(false) end
    new_hook.start = function() set_status(true) end
    new_hook.start()
    table.insert(hook.hooks, new_hook)
    return setmetatable(new_hook, {
        __call = function(self, ...)
            self.stop()
            local res = self.call(...)
            self.start()
            return res
        end
    })
end
--HOOKS


function main()
  
    -- SF.Lua
    hkAddMessage = hook.new('void(__thiscall *)(void* this, int nType, const char* szText, const char* szPrefix, unsigned long textColor, unsigned long prefixColor)', hkAddMessage, getModuleHandle('samp.dll') + 0x64010)
  
    wait(0)
end

function hkAddMessage(this, nType, szText, szPrefix, textColor, prefixColor)

    if (ffi.string(szText) == '[Ошибка] {FFFFFF}Неизвестная команда! Введите /help для просмотра доступных функций.') then
        return false
    end

    return hkAddMessage(this, nType, szText, szPrefix, textColor, prefixColor)
end
Кодировка стоит правильная, а твой скрипт тоже не пашет
 

copypaste_scripter

Известный
1,218
223
#GOVNOCODE:
local samp = require 'samp.events'
function samp.onServerMessage(color, text)
  if text:find("%[Ошибка%] Неизвестная команда%!") then
  return false
  end
end
Lua:
local samp = require 'samp.events'

function samp.onServerMessage(color, text)
  if text:find("%[Ошибка%] Неизвестная команда%!") then
  return false
  end
end
едит: при поиске он ищет не сразу символы, надо ставить значок процента " % " перед символами: ^$()%.[]*+-?
 

albertus

Участник
Автор темы
8
0
Lua:
local samp = require 'samp.events'

function samp.onServerMessage(color, text)
  if text:find("%[Ошибка%] Неизвестная команда%!") then
  return false
  end
end
едит: при поиске он ищет не сразу символы, надо ставить значок процента " % " перед символами: ^$()%.[]*+-?
#GOVNOCODE:
local samp = require 'samp.events'
function samp.onServerMessage(color, text)
  if text:find("[Ошибка] Неизвестная команда!") then
  return false
  end
end
Не пашут :/
 

albertus

Участник
Автор темы
8
0
покажи кодировку файла
1638797086873.png
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,192
Lua:
onReceiveRpc = function(id, bs)
    if id == 93 then
        local color = raknetBitStreamReadInt32(bs)
        local length = raknetBitStreamReadInt32(bs)
        local text = tostring(raknetBitStreamReadString(bs, length))
        if text:find("Неизвестная") then return false end
    end
end