Вылетает игра

Annanel

Участник
Автор темы
86
8
Версия MoonLoader
Другое
При нажатие кнопку Цель просто закрывается игра, суть что я вывожу название ларца и создаю поле для ввода стоимости и ещё проблема не как не могу разобраться как хукнуть текст Rare Box Blue и чтобы он прибавил стоимость этого ларца в заработок


Lua:
script_author('Annanel')
script_version('0.1')

local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local arr = os.date("*t")
local window = imgui.ImBool(false)
local initialBalance = getPlayerMoney()
local goalBalance = 950000  -- целевое значение баланса

function main()
    while not isSampAvailable() do wait(200) end
    sampAddChatMessage("{0C7BF1}[TestTime]: {61A4EC}[v0.1] Загружен.")
    imgui.Process = false
    window.v = true  --show window on start
    while true do
        wait(0)
        imgui.Process = window.v
        imgui.ShowCursor = false
    end
end

local showInfoWindow = imgui.ImBool(false) -- переменная для показа/скрытия окна с информацией
local showMoneyWindow = imgui.ImBool(false)

function imgui.OnDrawFrame()
    if window.v then
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300 -- WINDOW SIZE
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 1 - sizeX / 1.5, resY / 2 - sizeY / 2), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Меню', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)
        -- Button to show/hide info window
        if imgui.Button(u8'Информация') then
            showInfoWindow.v = not showInfoWindow.v
        end

        if imgui.Button(u8'Цель') then
            showMoneyWindow.v = not showMoneyWindow.v
        end

        imgui.End()

        -- Earnings window
        if showInfoWindow.v then
            imgui.SetNextWindowPos(imgui.ImVec2(resX / 1 - sizeX / 1.5, resY / 2 - sizeY / 4), imgui.Cond.FirstUseEver)
            imgui.SetNextWindowSize(imgui.ImVec2(200, 120), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Информация', showInfoWindow, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)
            imgui.Text(u8'Текущая дата: '..arr.day..':'..arr.month..':'..arr.year )
            imgui.Text(u8'Игровое время: '.. os.date('%H:%M:%S'))
            imgui.End()
        end

        -- Goal window
        if showMoneyWindow.v then
            imgui.SetNextWindowPos(imgui.ImVec2(resX / 1 - sizeX / 1.5, resY / 2), imgui.Cond.FirstUseEver)
            imgui.SetNextWindowSize(imgui.ImVec2(200, 100), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Цель', showMoneyWindow, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)
            local currentBalance = getPlayerMoney()
            local earned = math.max(0, currentBalance - initialBalance)
            imgui.Text(u8'Заработано: $' .. string.format("%.2f", earned))
            local remaining = goalBalance - currentBalance
            imgui.Text(u8'Необходимо накопить: $' .. remaining)
            if remaining > 0 then
                imgui.ProgressBar(currentBalance / goalBalance, imgui.ImVec2(0, 0))
            end
            imgui.Text(u8'Название предметов:')
            imgui.Text(u8'1) Rare Box Blue')
            local rareBoxPrice = imgui.InputInt(u8'   Стоимость: ', rareBoxPrice, 1, 10)
            imgui.Text(u8'2) Ларец кастомных аксессуаров')
            local accessoryChestPrice = imgui.InputFloat(u8'   Стоимость: ', accessoryChestPrice, 0.1, 1)

            imgui.End()
        end
    end
end

Если убрать из кода

Lua:
            imgui.Text(u8'Название предметов:')
            imgui.Text(u8'1) Rare Box Blue')
            local rareBoxPrice = imgui.InputInt(u8'   Стоимость: ', rareBoxPrice, 1, 10)
            imgui.Text(u8'2) Ларец кастомных аксессуаров')
            local accessoryChestPrice = imgui.InputFloat(u8'   Стоимость: ', accessoryChestPrice, 0.1, 1)

И делать хук делать через

Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color--[[Цвет]], text--[[Текст]]) -- Этот хук ловит сообщения в чате
    lua_thread.create(function() -- создаем поток
        if text:find('test') then -- если найден текст "test" то
            wait(1000) -- отвечает за ожидание в размере секунды
            sampSendChat('Не тест') -- если в чате засветится сообщение test, то хук поймает данное сообщение, дальше скрипт подождет 1 секунду и выведет "Не тест"
        end
    end) -- закрываем поток
end
То получается:

Lua:
function samp.onServerMessage(color, text)
    if text:find('Вам добавлен предмет Ларец Водителя Автобуса') then
        earned = earned + 1450
    end
    if text:find('Вам добавлен предмет Ларец Олигарха') then
        earned = earned + 900
    end
    if text:find('Вам добавлен предмет Супер авто-ящик') then
        earned = earned + 900
    end
end

Нужно чтобы ценна ларца улетала сюда

            local currentBalance = getPlayerMoney()
            local earned = math.max(0, currentBalance - initialBalance)
            imgui.Text(u8'Заработано: $' .. string.format("%.2f", earned))
Но проблема в том что бывает даёт 2 одинаковых либо 2 разных то как в этом случае быть?
1.jpg
2.jpg
 
Последнее редактирование:

Dmitriy Makarov

25.05.2021
Проверенный
2,505
1,134
Половину не понял. Наверное потому, что я ещё ложился.
"Цель" у тебя вызывает окно showMoneyInfo, в котором потенциальные ошибки.
Тут в скобках должно быть PLAYER_HANDLE
local rareBoxPrice = imgui.InputInt
Убери перед ним local rareBoxPrice и оставь просто imgui.InputInt(тут ничего не трогай)
local accessoryChestPrice = imgui.InputFloat
Аналогично. Возможно, последний аргумент придётся превратить с int (1) в float (1.0), так как InputFloat, всё-таки. Но это не точно.

Но проблема в том что бывает даёт 2 одинаковых либо 2 разных то как в этом случае быть?
Не особо понял. Когда тебе дают ларец, то сразу говорят, что ты получил 2 ларца или же после открытия? Если после открытия, то нужно хукнуть текст, который показывается после открытия, взять оттуда количество ларцов и умножить на сумму за 1 ларец.
Lua:
if text:find("%[Информация%] Вы получили (%d+) случайных ларца за завершенный маршрут") then
    local count = text:match("%[Информация%] Вы получили (%d+) случайных ларца за завершенный маршрут")
    earned = count * 1000 -- 1000 - цена за 1 ларец.
end
 
  • Нравится
Реакции: qdIbp

Annanel

Участник
Автор темы
86
8
Не особо понял. Когда тебе дают ларец, то сразу говорят, что ты получил 2 ларца или же после открытия? Если после открытия, то нужно хукнуть текст, который показывается после открытия, взять оттуда количество ларцов и умножить на сумму за 1 ларец.
Lua:
if text:find("%[Информация%] Вы получили (%d+) случайных ларца за завершенный маршрут") then
    local count = text:match("%[Информация%] Вы получили (%d+) случайных ларца за завершенный маршрут")
    earned = count * 1000 -- 1000 - цена за 1 ларец.
end
Когда доезжаешь рейс до конца тебе в чат пишет как на скринах что тебе выпало, в 1ом скрине написано что нам добавили лацер дальнабоя 2шт(тобишь это 2 ларца надпись в одну строку и так может быть с каждым ларцом) тут и загвоздка как сделать чтобы сумма начислялась сразу за 2. Тобишь через информацию как у тебя не получиться сделать ибо пишет он только для одного лацра а для второго уже нет такой строчки
На 2ом скрине уже выдано 2 разных ларца но тут понятно если я создам хук для всех ларцов он и будет выдавать за те ларцы что выпадут.
Или может есть другой способ это сделать более грамотно?
 

Dmitriy Makarov

25.05.2021
Проверенный
2,505
1,134
То получается:
А этот хук не работает или что? Попробуй elseif ещё, а не только if'ы.
Я ещё заметил, что в игре название ларца в кавычках, а у тебя их нет.
Я не знаю, экранируют ли их или нет, но попробовать не помешает.
"Вам добавлен предмет %'Ларец Водителя Автобуса%'"
Используй двойные кавычки, чтобы не конфликтовали с теми, что в тексте. Их, конечно, тоже можно экранировать через обратный слэш, но без тестов точный код не смогу дать.
 

Annanel

Участник
Автор темы
86
8
А этот хук не работает или что? Попробуй elseif ещё, а не только if'ы.
Я ещё заметил, что в игре название ларца в кавычках, а у тебя их нет.
Я не знаю, экранируют ли их или нет, но попробовать не помешает.
"Вам добавлен предмет %'Ларец Водителя Автобуса%'"
Используй двойные кавычки, чтобы не конфликтовали с теми, что в тексте. Их, конечно, тоже можно экранировать через обратный слэш, но без тестов точный код не смогу дать.
Спасибо попробую