mimgui

Oki_Bern

Участник
Автор темы
169
6
Версия MoonLoader
Другое
Почему крашит игру?
Lua:
local ffi = require('ffi');
local imgui = require('mimgui');
local encoding = require('encoding');
encoding.default = 'CP1251';
local u8 = encoding.UTF8;
local sliders = {}
local checkboxes = {}
local window = imgui.new.bool(false);
local inicfg = require("inicfg")
local directIni = "Aspect Ration.ini"
local ini = inicfg.load({
    settings = {
        aspectratio = 1.33,
        CustomFov = false,
        fov = 70.0,
    }}, directIni)
inicfg.save(ini, directIni)
function save()
    inicfg.save(ini, directIni)
end

local new = imgui.new

sliders.aspectratio = new.float(tonumber(ini.settings.aspectratio))

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil;
end)



imgui.OnFrame(
    function() return window[0] end,
    function(this)
        local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        if imgui.Begin('', window, imgui.WindowFlags.NoCollapse) then
        if imgui.SliderFloat(u8'##Соотношение сторон', sliders.aspectratio, 0.5, 3.0, u8"Соотношение сторон: %.2f") then
            ini.settings.aspectratio = ("%.2f"):format(sliders.aspectratio[0])
        save()
        gotofunc("ScreenOptions")
        end
        imgui.PopItemWidth()
        imgui.SameLine()
        if imgui.Button(u8'Сбросить', imgui.ImVec2(70, 25)) then
            ini.settings.aspectratio = 1.33
            save()
            sliders.aspectratio[0] =  ini.settings.aspectratio
            gotofunc("ScreenOptions")
        end
        if imgui.Checkbox(u8"Свой угол обзора", checkboxes.CustomFov) then
            ini.settings.CustomFov = checkboxes.CustomFov[0]
            save()
        end
        if ini.settings.CustomFov then
            if imgui.SliderFloat(u8'##угол обзора', sliders.fov, 70.0, 100.0, u8"Угол обзора: %.2f") then
                ini.settings.fov = ("%.2f"):format(sliders.fov[0])
                save()
                gotofunc("ScreenOptions")
            end
        end
        end
    imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('mimgui', function()
        window[0] = not window[0];
    end)
end
function gotofunc(fnc)
    if fnc == "ScreenOptions" or fnc == "all" then
        writeMemory(0xFCFAED, 4, representFloatAsInt(ini.settings.aspectratio, false))
        writeMemory(0x6FF43F+2, 4, 0xFCFAED, false)
        writeMemory(0x6FF43D, 2, 0x9090, false)
    end
end
 
Решение
Я щас посмотрел у меня сохраняет, но fov не меняет в игре
если значение сохраняется, а фов не меняется, значит проблема в функции. Попробуй взять её отсюда

MLycoris

Режим чтения
Проверенный
1,824
1,880
Все ровно крашит, может еще что нибудь пропустил я
а да, ещё imgui.PopItemWidth() на 44 строке крашит. Либо снеси эту строку, либо добавь imgui.PushItemWidth(ширина) до слайдера
 

Oki_Bern

Участник
Автор темы
169
6
а да, ещё imgui.PopItemWidth() на 44 строке крашит. Либо снеси эту строку, либо добавь imgui.PushItemWidth(ширина) до слайдера
cнес, теперь открывается, но проблемка крашит когда активна CustomFov

Я добавил
Lua:
sliders.fov = new.float(tonumber(ini.setting.fov))
и теперь не крашит, но после одного нажатия на imgui.SliderFloat значения меняется только при первом клике при перемещении не робит
 
Последнее редактирование:

MLycoris

Режим чтения
Проверенный
1,824
1,880
Я добавил
Lua:
sliders.fov = new.float(tonumber(ini.setting.fov))
и теперь не крашит, но после одного нажатия на imgui.SliderFloat значения меняется только при первом клике при перемещении не робит
у меня в таком виде всё норм сохраняет
Lua:
local ffi = require('ffi');
local imgui = require('mimgui');
local encoding = require('encoding');
encoding.default = 'CP1251';
local u8 = encoding.UTF8;
local window = imgui.new.bool();
local inicfg = require("inicfg")
local directIni = "Aspect Ration.ini"
local ini = inicfg.load({
    settings = {
        aspectratio = 1.33,
        CustomFov = false,
        fov = 70.0,
    }}, directIni)
inicfg.save(ini, directIni)
function save()
    inicfg.save(ini, directIni)
end

local new = imgui.new
local sliders = {
    aspectratio = new.float(tonumber(ini.settings.aspectratio)),
    fov = new.float(tonumber(ini.settings.fov)),
}
local checkboxes = {
    CustomFov = new.bool(ini.settings.CustomFov),
}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil;
end)

imgui.OnFrame(
    function() return window[0] end,
    function(this)
        local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        if imgui.Begin('', window, imgui.WindowFlags.NoCollapse) then
        if imgui.SliderFloat(u8'##Соотношение сторон', sliders.aspectratio, 0.5, 3.0, u8"Соотношение сторон: %.2f") then
            ini.settings.aspectratio = ("%.2f"):format(sliders.aspectratio[0])
        save()
        gotofunc("ScreenOptions")
        end
        imgui.SameLine()
        if imgui.Button(u8'Сбросить', imgui.ImVec2(70, 25)) then
            ini.settings.aspectratio = 1.33
            save()
            sliders.aspectratio[0] =  ini.settings.aspectratio
            gotofunc("ScreenOptions")
        end
        if imgui.Checkbox(u8"Свой угол обзора", checkboxes.CustomFov) then
            ini.settings.CustomFov = checkboxes.CustomFov[0]
            save()
        end
        if ini.settings.CustomFov then
            if imgui.SliderFloat(u8'##угол обзора', sliders.fov, 70.0, 100.0, u8"Угол обзора: %.2f") then
                ini.settings.fov = ("%.2f"):format(sliders.fov[0])
                save()
                gotofunc("ScreenOptions")
            end
        end
        end
    imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('mimgui', function()
        window[0] = not window[0];
    end)
end
function gotofunc(fnc)
    if fnc == "ScreenOptions" or fnc == "all" then
        writeMemory(0xFCFAED, 4, representFloatAsInt(ini.settings.aspectratio, false))
        writeMemory(0x6FF43F+2, 4, 0xFCFAED, false)
        writeMemory(0x6FF43D, 2, 0x9090, false)
    end
end
 

Oki_Bern

Участник
Автор темы
169
6
у меня в таком виде всё норм сохраняет
Lua:
local ffi = require('ffi');
local imgui = require('mimgui');
local encoding = require('encoding');
encoding.default = 'CP1251';
local u8 = encoding.UTF8;
local window = imgui.new.bool();
local inicfg = require("inicfg")
local directIni = "Aspect Ration.ini"
local ini = inicfg.load({
    settings = {
        aspectratio = 1.33,
        CustomFov = false,
        fov = 70.0,
    }}, directIni)
inicfg.save(ini, directIni)
function save()
    inicfg.save(ini, directIni)
end

local new = imgui.new
local sliders = {
    aspectratio = new.float(tonumber(ini.settings.aspectratio)),
    fov = new.float(tonumber(ini.settings.fov)),
}
local checkboxes = {
    CustomFov = new.bool(ini.settings.CustomFov),
}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil;
end)

imgui.OnFrame(
    function() return window[0] end,
    function(this)
        local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        if imgui.Begin('', window, imgui.WindowFlags.NoCollapse) then
        if imgui.SliderFloat(u8'##Соотношение сторон', sliders.aspectratio, 0.5, 3.0, u8"Соотношение сторон: %.2f") then
            ini.settings.aspectratio = ("%.2f"):format(sliders.aspectratio[0])
        save()
        gotofunc("ScreenOptions")
        end
        imgui.SameLine()
        if imgui.Button(u8'Сбросить', imgui.ImVec2(70, 25)) then
            ini.settings.aspectratio = 1.33
            save()
            sliders.aspectratio[0] =  ini.settings.aspectratio
            gotofunc("ScreenOptions")
        end
        if imgui.Checkbox(u8"Свой угол обзора", checkboxes.CustomFov) then
            ini.settings.CustomFov = checkboxes.CustomFov[0]
            save()
        end
        if ini.settings.CustomFov then
            if imgui.SliderFloat(u8'##угол обзора', sliders.fov, 70.0, 100.0, u8"Угол обзора: %.2f") then
                ini.settings.fov = ("%.2f"):format(sliders.fov[0])
                save()
                gotofunc("ScreenOptions")
            end
        end
        end
    imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('mimgui', function()
        window[0] = not window[0];
    end)
end
function gotofunc(fnc)
    if fnc == "ScreenOptions" or fnc == "all" then
        writeMemory(0xFCFAED, 4, representFloatAsInt(ini.settings.aspectratio, false))
        writeMemory(0x6FF43F+2, 4, 0xFCFAED, false)
        writeMemory(0x6FF43D, 2, 0x9090, false)
    end
end
Твой код у меня работает. Видимо я где то ошибку допустил. Спасибо за помощь.
у меня в таком виде всё норм сохраняет
Lua:
local ffi = require('ffi');
local imgui = require('mimgui');
local encoding = require('encoding');
encoding.default = 'CP1251';
local u8 = encoding.UTF8;
local window = imgui.new.bool();
local inicfg = require("inicfg")
local directIni = "Aspect Ration.ini"
local ini = inicfg.load({
    settings = {
        aspectratio = 1.33,
        CustomFov = false,
        fov = 70.0,
    }}, directIni)
inicfg.save(ini, directIni)
function save()
    inicfg.save(ini, directIni)
end

local new = imgui.new
local sliders = {
    aspectratio = new.float(tonumber(ini.settings.aspectratio)),
    fov = new.float(tonumber(ini.settings.fov)),
}
local checkboxes = {
    CustomFov = new.bool(ini.settings.CustomFov),
}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil;
end)

imgui.OnFrame(
    function() return window[0] end,
    function(this)
        local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        if imgui.Begin('', window, imgui.WindowFlags.NoCollapse) then
        if imgui.SliderFloat(u8'##Соотношение сторон', sliders.aspectratio, 0.5, 3.0, u8"Соотношение сторон: %.2f") then
            ini.settings.aspectratio = ("%.2f"):format(sliders.aspectratio[0])
        save()
        gotofunc("ScreenOptions")
        end
        imgui.SameLine()
        if imgui.Button(u8'Сбросить', imgui.ImVec2(70, 25)) then
            ini.settings.aspectratio = 1.33
            save()
            sliders.aspectratio[0] =  ini.settings.aspectratio
            gotofunc("ScreenOptions")
        end
        if imgui.Checkbox(u8"Свой угол обзора", checkboxes.CustomFov) then
            ini.settings.CustomFov = checkboxes.CustomFov[0]
            save()
        end
        if ini.settings.CustomFov then
            if imgui.SliderFloat(u8'##угол обзора', sliders.fov, 70.0, 100.0, u8"Угол обзора: %.2f") then
                ini.settings.fov = ("%.2f"):format(sliders.fov[0])
                save()
                gotofunc("ScreenOptions")
            end
        end
        end
    imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('mimgui', function()
        window[0] = not window[0];
    end)
end
function gotofunc(fnc)
    if fnc == "ScreenOptions" or fnc == "all" then
        writeMemory(0xFCFAED, 4, representFloatAsInt(ini.settings.aspectratio, false))
        writeMemory(0x6FF43F+2, 4, 0xFCFAED, false)
        writeMemory(0x6FF43D, 2, 0x9090, false)
    end
end
Скопировал твой код и все ровно крч

Я щас посмотрел у меня сохраняет, но fov не меняет в игре
 

MLycoris

Режим чтения
Проверенный
1,824
1,880
Я щас посмотрел у меня сохраняет, но fov не меняет в игре
если значение сохраняется, а фов не меняется, значит проблема в функции. Попробуй взять её отсюда