помогите дописать скрипт по финке

copypaste_scripter

Известный
Автор темы
943
154
Версия MoonLoader
Другое
короче писал писал скрипт и не работает после 500 редактировании и всякой фигни.
суть скрипта в том, что он получает текст от диалога "статистика за неделю" т.е. финка бизнеса и выводит его на экран (обновляться буду делать потом наверно чтобы сам обновлялся каждые Х минут, а пока не рисует даже 1 раз...). код был взят от ТСР хелпера от Космо.

прикреплю ниже "свой" код. но мне лучше будет если скажите свои варианты как делать

Lua:
require "lib.moonloader"
require "lib.samp.events"

local sampev = require "lib.samp.events"
local main_color = 0x8B0000
local keys = require "vkeys"
local dFinka = {}
local showFinkaBox = false
local bizfinka = {}
local posX, posY, wBox, hBox = 1700, 300, 150, 160
local finkafont = renderCreateFont('Arial', 10, 9)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(80) end
        sampRegisterChatCommand('finkas', finkashow)
        lua_thread.create(finkaBox)
        --lua_thread.create(updateFinka)
        
    while true do
    wait(0)
    end
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    bizfinka = {}
    for line in text:gmatch("[^\r\n]+") do
        if line:find("(.+)\t(.+)%$") then
            day, money = line:match("(.+)\t(.+)%$")
            table.insert(bizfinka, {day = day, money = money})
        end
    end
end
--[[
function updatefinka()
    while true do wait(0)
        if showFinkaBox then
            wait(600000)
            while sampIsDialogActive() do wait(100) end
            getFinka = true
                lua_thread.create(function()
                    sampSendChat("/bizinfo")
                    wait(500)
                    sampSendDialogResponse(9761, 1, 0, false)         -- dialog /bizinfo (выбрать биз)
                    wait(500)
                    sampSendDialogResponse(156, 1, 1, false)        -- dialog меню выбранного бизнеса
                    wait(500)
                    sampSendDialogResponse(157, 1, 0, false)        -- диалог всякой фигни для бизнеса выбирает "дополниительно" тут
                    wait(500)
                    sampSendDialogResponse(1665, 1, 2, false)        -- диалог где "дополнительно" и тут выбирает "статистика за неделю"
                end)
        end
    end
end
]]
function finkaBox()
    while true do wait(100)
        if showFinkaBox then
            --renderDrawBoxWithBorder(posX, posY, wBox, hBox, 0x95864A00, 5, 0xFF3F1600)
            for i, v in ipairs(bizfinka) do -- Всегда парсить надо
                --printStyledString(v.day .. " " .. v.money, 2000, 7)    -- это фигня работает, выводит все 7 дней и так бесконечно, каждую секунду, но так не надо...
                renderFontDrawText(font, v.day.." "..v.money, posX + (wBox / 4), posY + 30, -1)
                posY = posY + 18
            end
        end
    end
end

function finkashow()
    showFinkaBox = not showFinkaBox
    --[[if showFinkaBox then
        getFinka = true
        lua_thread.create(function()
            sampSendChat("/bizinfo")
            wait(500)
            sampSendDialogResponse(9761, 1, 0, false)
            wait(500)
            sampSendDialogResponse(156, 1, 1, false)
            wait(500)
            sampSendDialogResponse(157, 1, 0, false)
            wait(500)
            sampSendDialogResponse(1665, 1, 2, false)
        end)
    else
        showFinkaBox = false
    end]]
end
 
Решение
Lua:
local sampev = require "lib.samp.events"
local bizfinka = {}
local posX, posY, wBox, hBox = 1700, 300, 150, 120
local font = renderCreateFont('Arial', 10, 9)
local finkashow = false

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('finkas', function() finkashow = not finkashow end)
    lua_thread.create(updateinfo)
    while true do
        wait(0)
        if finkashow then
            if #bizfinka >= 1 then
                local textHeight = posY
                for i, v in ipairs(bizfinka) do
                    renderFontDrawText(font, v.day.." "..v.money, posX + 5, textHeight + 5, -1)
                    textHeight = textHeight + (renderGetFontDrawHeight(font))
                end...

shinoa

Известный
284
181
Lua:
local sampev = require "lib.samp.events"
local bizfinka = {}
local posX, posY, wBox, hBox = 1700, 300, 150, 120
local font = renderCreateFont('Arial', 10, 9)
local finkashow = false

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('finkas', function() finkashow = not finkashow end)
    lua_thread.create(updateinfo)
    while true do
        wait(0)
        if finkashow then
            if #bizfinka >= 1 then
                local textHeight = posY
                for i, v in ipairs(bizfinka) do
                    renderFontDrawText(font, v.day.." "..v.money, posX + 5, textHeight + 5, -1)
                    textHeight = textHeight + (renderGetFontDrawHeight(font))
                end
            end
            renderDrawBoxWithBorder(posX, posY, wBox, hBox, 0x95864A00, 5, 0xFF3F1600)
        end
    end
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if finkashow and text:find('Прибыль') and id == 0 then
        bizfinka = {}
        for line in text:gmatch("[^\r\n]+") do
            if line:find("(.+)\t(.+)%$") then
                day, money = line:match("(.+)\t(.+)%$")
                table.insert(bizfinka, {day = day, money = money})
            end
        end
        return false
    end
    if check then
        if id == 9761 then
            sampSendDialogResponse(9761, 1, 0, false)
            return false
        end
        if id == 156 then
            sampSendDialogResponse(156, 1, 1, false)
            return false
        end
        if id == 157 then
            sampSendDialogResponse(157, 1, 0, false)
            return false
        end
        if id == 1665 then
            sampSendDialogResponse(1665, 1, 2, false)
            check = false
            return false
        end
    end
end

function updateinfo()
    while true do wait(0)
        if finkashow and sampIsLocalPlayerSpawned() then
            if not sampIsDialogActive() then
                sampSendChat('/bizinfo')
                check = true
            end
            wait(600000)
        end
    end
end
 
  • Нравится
Реакции: copypaste_scripter

copypaste_scripter

Известный
Автор темы
943
154
ну конечно же спасибо за ответ. код работает. ошибок не дает. но вот рисует всего лишь прямоуголньник и в нем ничего не пишет, да и я для проверки промежуток обновления поменял (65 линию) от 10 минуты на 10 секунд. так вот каждые 10 секунд открывает диалоговое окно финки. но опять же, ничего не рисует
 

shinoa

Известный
284
181
ну конечно же спасибо за ответ. код работает. ошибок не дает. но вот рисует всего лишь прямоуголньник и в нем ничего не пишет, да и я для проверки промежуток обновления поменял (65 линию) от 10 минуты на 10 секунд. так вот каждые 10 секунд открывает диалоговое окно финки. но опять же, ничего не рисует
/finkas пропиши, у меня всё работает
 
  • Нравится
Реакции: copypaste_scripter

copypaste_scripter

Известный
Автор темы
943
154
/finkas пропиши, у меня всё работает
ну я и это пишу, но открывается диалоговое окно и рисует прямоугольник, а в нем ничего. какой смысл мне докапаться)

может из-за другого скрипта чем то конфликтуется?
может у меня какой то библиотеки нет?
может потому что у меня не стандартный фонт в игре стоит?
 
Последнее редактирование:

shinoa

Известный
284
181
ну я и это пишу, но открывается диалоговое окно и рисует прямоугольник, а в нем ничего. какой смысл мне докапаться)

может из-за другого скрипта чем то конфликтуется?
может у меня какой то библиотеки нет?
может потому что у меня не стандартный фонт в игре стоит?
Диалоги вообще открываются? Убери return false везде в хуке onShowDialog
 
  • Нравится
Реакции: copypaste_scripter

copypaste_scripter

Известный
Автор темы
943
154
Диалоги вообще открываются? Убери return false везде в хуке onShowDialog
открывались после убрания return false, опять такой же. если можешь могу дать тимвивер зайти в комп и глянуть как, или через дискорд посмотреть на экран, в личку напиши если так
 

shinoa

Известный
284
181
открывались после убрания return false, опять такой же. если можешь могу дать тимвивер зайти в комп и глянуть как, или через дискорд посмотреть на экран, в личку напиши если так
Без return false всё нормально работает или нет? Попробуй без других скриптов, возможно, какой-то из скриптов тоже работает с одним из этих диалогов
 
  • Нравится
Реакции: copypaste_scripter

copypaste_scripter

Известный
Автор темы
943
154
Без return false всё нормально работает или нет? Попробуй без других скриптов, возможно, какой-то из скриптов тоже работает с одним из этих диалогов
диалогов не трогает другие скрипты, но я все равно убрал те функции, которые работали с похожими диалогами (была просто забиндена на команду открытие окна финки, закуп продуктов и я их закоментировал) все равно не работает, то есть не выводит

может библиотека какая то надо? я помню раньше гейм текст не хукался и пришлось просто заменить одну строку с 8бит на 32бит вроде
Без return false всё нормально работает или нет? Попробуй без других скриптов, возможно, какой-то из скриптов тоже работает с одним из этих диалогов
а ты уверен, что у тебя работает этот скрипт который скинул вверх? может ты потом что нибудь поменял?
почему то я думаю, что диалоги появляется после рендера прямоугольника, а хукать текст не от куда
 
Последнее редактирование: