Coordmaster

AgentM

Известный
Автор темы
41
3


Can someone edit this and make it work with normal checkpoints please? This only works with race checkpoints...


Код:
slot0 = require("samp.events")
require("encoding").default = "CP1251"
slot4 = require("encoding").UTF8
slot5, slot6 = getScreenResolution()
slot7 = require("imgui").ImBool(false)
slot8 = require("imgui").ImBool(false)
slot9 = 1.2
setposs = false
sendpll = false

function apply_custom_style()
    slot0 = slot0

    uv0.SwitchContext()

    slot0 = uv0.GetStyle()
    slot0.WindowRounding = 2
    slot0.WindowTitleAlign = uv0.ImVec2(0.5, 0.84)
    slot0.ChildWindowRounding = 2
    slot0.FrameRounding = 2
    slot0.ItemSpacing = uv0.ImVec2(5, 4)
    slot0.ScrollbarSize = 13
    slot0.ScrollbarRounding = 0
    slot0.GrabMinSize = 8
    slot0.GrabRounding = 1
    slot0.Colors[uv0.Col.Text] = slot3(1, 1, 1, 1)
    slot0.Colors[uv0.Col.TextDisabled] = slot3(0.5, 0.5, 0.5, 1)
    slot0.Colors[uv0.Col.WindowBg] = slot3(0.06, 0.06, 0.06, 0.94)
    slot0.Colors[uv0.Col.ChildWindowBg] = slot3(1, 1, 1, 0)
    slot0.Colors[uv0.Col.PopupBg] = slot3(0.08, 0.08, 0.08, 0.94)
    slot0.Colors[uv0.Col.ComboBg] = slot0.Colors[uv0.Col.PopupBg]
    slot0.Colors[uv0.Col.Border] = slot3(0.43, 0.43, 0.5, 0.5)
    slot0.Colors[uv0.Col.BorderShadow] = slot3(0, 0, 0, 0)
    slot0.Colors[uv0.Col.FrameBg] = slot3(0.16, 0.29, 0.48, 0.54)
    slot0.Colors[uv0.Col.FrameBgHovered] = slot3(0.26, 0.59, 0.98, 0.4)
    slot0.Colors[uv0.Col.FrameBgActive] = slot3(0.26, 0.59, 0.98, 0.67)
    slot0.Colors[uv0.Col.TitleBg] = slot3(0.04, 0.04, 0.04, 1)
    slot0.Colors[uv0.Col.TitleBgActive] = slot3(0.16, 0.29, 0.48, 1)
    slot0.Colors[uv0.Col.TitleBgCollapsed] = slot3(0, 0, 0, 0.51)
    slot0.Colors[uv0.Col.MenuBarBg] = slot3(0.14, 0.14, 0.14, 1)
    slot0.Colors[uv0.Col.ScrollbarBg] = slot3(0.02, 0.02, 0.02, 0.53)
    slot0.Colors[uv0.Col.ScrollbarGrab] = slot3(0.31, 0.31, 0.31, 1)
    slot0.Colors[uv0.Col.ScrollbarGrabHovered] = slot3(0.41, 0.41, 0.41, 1)
    slot0.Colors[uv0.Col.ScrollbarGrabActive] = slot3(0.51, 0.51, 0.51, 1)
    slot0.Colors[uv0.Col.CheckMark] = slot3(0.26, 0.59, 0.98, 1)
    slot0.Colors[uv0.Col.SliderGrab] = slot3(0.24, 0.52, 0.88, 1)
    slot0.Colors[uv0.Col.SliderGrabActive] = slot3(0.26, 0.59, 0.98, 1)
    slot0.Colors[uv0.Col.Button] = slot3(0.26, 0.59, 0.98, 0.4)
    slot0.Colors[uv0.Col.ButtonHovered] = slot3(0.26, 0.59, 0.98, 1)
    slot0.Colors[uv0.Col.ButtonActive] = slot3(0.06, 0.53, 0.98, 1)
    slot0.Colors[uv0.Col.Header] = slot3(0.26, 0.59, 0.98, 0.31)
    slot0.Colors[uv0.Col.HeaderHovered] = slot3(0.26, 0.59, 0.98, 0.8)
    slot0.Colors[uv0.Col.HeaderActive] = slot3(0.26, 0.59, 0.98, 1)
    slot0.Colors[uv0.Col.Separator] = slot0.Colors[uv0.Col.Border]
    slot0.Colors[uv0.Col.SeparatorHovered] = slot3(0.26, 0.59, 0.98, 0.78)
    slot0.Colors[uv0.Col.SeparatorActive] = slot3(0.26, 0.59, 0.98, 1)
    slot0.Colors[uv0.Col.ResizeGrip] = slot3(0.26, 0.59, 0.98, 0.25)
    slot0.Colors[uv0.Col.ResizeGripHovered] = slot3(0.26, 0.59, 0.98, 0.67)
    slot0.Colors[uv0.Col.ResizeGripActive] = slot3(0.26, 0.59, 0.98, 0.95)
    slot0.Colors[uv0.Col.CloseButton] = slot3(0.41, 0.41, 0.41, 0.5)
    slot0.Colors[uv0.Col.CloseButtonHovered] = slot3(0.98, 0.39, 0.36, 1)
    slot0.Colors[uv0.Col.CloseButtonActive] = slot3(0.98, 0.39, 0.36, 1)
    slot0.Colors[uv0.Col.PlotLines] = slot3(0.61, 0.61, 0.61, 1)
    slot0.Colors[uv0.Col.PlotLinesHovered] = slot3(1, 0.43, 0.35, 1)
    slot0.Colors[uv0.Col.PlotHistogram] = slot3(0.9, 0.7, 0, 1)
    slot0.Colors[uv0.Col.PlotHistogramHovered] = slot3(1, 0.6, 0, 1)
    slot0.Colors[uv0.Col.TextSelectedBg] = slot3(0.26, 0.59, 0.98, 0.35)
    slot0.Colors[uv0.Col.ModalWindowDarkening] = slot3(0.8, 0.8, 0.8, 0.35)
end

apply_custom_style()

if not doesFileExist("moonloader/config/coord.ini") then
    require("inicfg").save({
        main = {
            delta = 1,
            height = -10,
            time = 0,
            surfX = 0,
            surfZ = 0,
            surfY = 0,
            nopSetPos = false,
            nopPlayerSync = false,
            mSpeedZ = 0,
            mSpeedY = 0,
            visible = true,
            mSpeedX = 0,
            bypass = false
        }
    }, "coord.ini")
end

slot3.save(slot10, "coord.ini")

slot11 = slot1.ImInt(slot3.load(slot10, "coord.ini").main.time)
slot12 = slot1.ImInt(slot3.load(slot10, "coord.ini").main.delta)
slot13 = slot1.ImInt(slot3.load(slot10, "coord.ini").main.height)
slot14 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.mSpeedX)
slot15 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.mSpeedY)
slot16 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.mSpeedZ)
slot17 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.surfX)
slot18 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.surfY)
slot19 = slot1.ImFloat(slot3.load(slot10, "coord.ini").main.surfZ)
slot20 = slot1.ImBool(slot3.load(slot10, "coord.ini").main.nopPlayerSync)
slot21 = slot1.ImBool(slot3.load(slot10, "coord.ini").main.nopSetPos)
slot22 = slot3.load(slot10, "coord.ini").main.visible
slot23 = slot3.load(slot10, "coord.ini").main.bypass
format = "%.2f"

function main()
    repeat
        wait(0)
    until isSampAvailable()

    sampAddChatMessage("{FF5656}[CoordMaster]: {FFFFFF}Автор:{FF5656} Mscr", -1)
    sampRegisterChatCommand("cgo", function ()
        res, x, y, z = getTargetBlipCoordinatesFixed()

        if res then
            cordtp(x, y, z)
        end
    end)
    sampRegisterChatCommand("cgoc", function ()
        if isCharOnFoot(PLAYER_PED) then
            mres, mx, my, mz = SearchMarker()

            if mres then
                cordtp(mx, my, mz)
            end
        end
    end)
    sampRegisterChatCommand("cmenu", function ()
        uv0.v = not uv0.v
    end)

    uv1.ShowCursor = false
    uv1.Process = true

    wait(-1)
end

button = slot4("Bypass mode")

function slot1.OnDrawFrame()
    uv0.ShowCursor = false

    if uv1.v then
        window_f()
    end

    if uv2.v then
        uv1.v = false
        uv0.ShowCursor = true

        uv0.SetNextWindowPos(uv0.ImVec2(uv3 / 2, uv4 / 2), uv0.Cond.FirstUseEver, uv0.ImVec2(0.5, 0.5))
        uv0.SetNextWindowSize(uv0.ImVec2(240 * uv5, 225 * uv5))
        uv0.Begin("obhodi by mscr", uv2, uv0.WindowFlags.NoCollapse + uv0.WindowFlags.NoResize)

        if uv0.Button(button, uv0.ImVec2(-1, 0)) then
            uv6 = not uv6

            if not uv6 then
                button = uv7("Enable walk mode")
            else
                button = uv7("[Disable walk mode]")
            end
        end

        if uv6 then
            uv0.SliderFloat("moveSpeed.x", uv8, -10, 10, format)
            uv0.SliderFloat("moveSpeed.y", uv9, -10, 10, format)
            uv0.SliderFloat("moveSpeed.z", uv10, -10, 10, format)
            uv0.SliderFloat("surfing.x", uv11, -10, 10, format)
            uv0.SliderFloat("surfing.y", uv12, -10, 10, format)
            uv0.SliderFloat("surfing.z", uv13, -10, 10, format)

            if uv0.Checkbox("NOP onSendPlayerSync", uv14) then
                if uv14.v then
                    sendpll = true
                else
                    sendpll = false
                end
            end

            if uv0.Checkbox("NOP onSetPlayerPos", uv15) then
                if uv15.v then
                    setposs = true
                else
                    setposs = false
                end
            end

            if uv0.Button(uv7("Save changes"), uv0.ImVec2(-1, 0)) then
                uv16.main.bypass = uv6
                uv16.main.mSpeedX = uv8.v
                uv16.main.mSpeedY = uv9.v
                uv16.main.mSpeedZ = uv10.v
                uv16.main.surfX = uv11.v
                uv16.main.surfY = uv12.v
                uv16.main.surfZ = uv13.v
                uv16.main.nopPlayerSync = uv14.v
                uv16.main.nopSetPos = uv15.v

                uv17.save(uv16, "coord.ini")
            end
        end

        uv0.End()
    end
end

function window_f()
    uv0.ShowCursor = true

    uv0.SetNextWindowPos(uv0.ImVec2(uv1 / 2, uv2 / 2), uv0.Cond.FirstUseEver, uv0.ImVec2(0.5, 0.5))
    uv0.SetNextWindowSize(uv0.ImVec2(240 * uv3, 205 * uv3))
    uv0.Begin("mCord by mscr", uv4, uv0.WindowFlags.NoCollapse + uv0.WindowFlags.NoResize)

    if uv5 then
        uv0.TextColoredRGB("Mode: {FF0000}Visual Visible")
    else
        uv0.TextColoredRGB("Mode: {CCFF00}Visual Invisible")
    end

    uv0.Text(" ")
    uv0.SliderInt(uv6("Distance"), uv7, 1, 80)
    uv0.SliderInt(uv6("Slow"), uv8, 0, 5000)
    uv0.SliderInt(uv6("Height"), uv9, -50, 0)
    uv0.Text(" ")

    if uv0.Button(uv6("Change visibility mode"), uv0.ImVec2(-1, 40)) then
        uv5 = not uv5
    end

    if uv0.Button(uv6("Save changes"), uv0.ImVec2(-1, 0)) then
        uv10.main.time = uv8.v
        uv10.main.delta = uv7.v
        uv10.main.height = uv9.v
        uv10.main.visible = uv5

        uv11.save(uv10, "coord.ini")
    end

    if uv0.Button(uv6("Обходы"), uv0.ImVec2(-1, 0)) then
        uv12.v = not uv12.v
    end

    uv0.End()
end

function cordtp(slot0, slot1, slot2)
    lua_thread.create(function ()
        if uv0 then
            state = true

            freezeCharPosition(PLAYER_PED, true)

            slot0, slot1, slot2 = getCharCoordinates(PLAYER_PED)
            slot3 = getHeadingFromVector2d(uv1 - slot0, uv2 - slot1)

            while uv4.v < math.abs(slot2 - uv3.v) do
                if slot2 < uv3.v then
                    setCharCoordinates(PLAYER_PED, slot0, slot1, slot2 - 1 + uv4.v)
                else
                    setCharCoordinates(PLAYER_PED, slot0, slot1, slot2 - 1 - uv4.v)
                end

                slot0, slot1, slot2 = getCharCoordinates(PLAYER_PED)

                wait(uv5.v)
            end

            setCharCoordinates(PLAYER_PED, slot0, slot1, uv3.v)

            while uv4.v < getDistanceBetweenCoords2d(uv1, uv2, slot0, slot1) do
                setCharCoordinates(PLAYER_PED, slot0 - uv4.v * math.sin(math.rad(slot3)), slot1 + uv4.v * math.cos(math.rad(slot3)), slot2 - 1)

                slot0, slot1, slot2 = getCharCoordinates(PLAYER_PED)
                slot3 = getHeadingFromVector2d(uv1 - slot4, uv2 - slot5)

                wait(uv5.v)
            end

            while uv4.v < math.abs(slot2 - uv6) do
                if slot2 < uv6 then
                    setCharCoordinates(PLAYER_PED, slot0, slot1, slot2 - 1 + uv4.v)
                else
                    setCharCoordinates(PLAYER_PED, slot0, slot1, slot2 - 1 - uv4.v)
                end

                slot0, slot1, slot2 = getCharCoordinates(PLAYER_PED)

                wait(uv5.v)
            end

            setCharCoordinates(PLAYER_PED, uv1, uv2, uv6)

            setposs = false
            sendpll = false

            freezeCharPosition(PLAYER_PED, false)

            state = false
        else
            state = true

            freezeCharPosition(PLAYER_PED, true)

            slot4, slot5, slot2 = getCharCoordinates(PLAYER_PED)

            while true do
                wait(0)

                if uv4.v < getDistanceBetweenCoords2d(slot0, slot1, uv1, uv2) then
                    sendOnFootPosition(slot0, slot1 + math.cos(getAngle(slot0, slot1, uv1, uv2)) * uv4.v, slot2 - uv3.v)
                    wait(uv5.v)
                else
                    setCharCoordinates(PLAYER_PED, uv1, uv2, uv6)

                    setposs = false
                    sendpll = false

                    freezeCharPosition(PLAYER_PED, false)

                    state = false

                    break
                end
            end
        end
    end)
end

function sendOnFootPosition(slot0, slot1, slot2)
    sendOnfootSync(slot0, slot1, slot2)
    sampForceOnfootSync()
end

function slot1.TextColoredRGB(slot0)
    slot2 = uv0.GetStyle().Colors
    slot3 = uv0.ImVec4

    function slot4(slot0)
        return bit.band(bit.rshift(slot0, 24), 255), bit.band(bit.rshift(slot0, 16), 255), bit.band(bit.rshift(slot0, 8), 255), bit.band(slot0, 255)
    end

    function slot5(slot0)
        if slot0:sub(1, 6):upper() == "SSSSSS" then
            return uv1(uv0[1].x, uv0[1].y, uv0[1].z, (tonumber(slot0:sub(7, 8), 16) or uv0[1].w * 255) / 255)
        end

        if type(type(slot0) == "string" and tonumber(slot0, 16) or slot0) ~= "number" then
            return
        end

        slot7, slot8, slot9, slot10 = uv2(slot1)

        return uv3.ImColor(slot2, slot3, slot4, slot5):GetVec4()
    end

    function (slot0)
        for slot4 in slot0:gmatch("[^\r\n]+") do
            slot5 = {}
            slot6 = {}
            slot7 = 1

            while slot4:gsub("{(......)}", "{%1FF}"):find("{........}") do
                slot8, slot9 = slot4:find("{........}")

                if uv0(slot4:sub(slot8 + 1, slot9 - 1)) then
                    slot5[#slot5 + 1] = slot4:sub(slot9 + 1, #slot4)
                    slot5[#slot5] = slot4:sub(slot7, slot8 - 1)
                    slot6[#slot6 + 1] = slot10
                    slot7 = slot8
                end

                slot4 = slot4:sub(1, slot8 - 1) .. slot4:sub(slot9 + 1, #slot4)
            end

            if slot5[0] then
                for slot11 = 0, #slot5, 1 do
                    uv1.TextColored(slot6[slot11] or uv2[1], uv3(slot5[slot11]))
                    uv1.SameLine(nil, 0)
                end

                uv1.NewLine()
            else
                uv1.Text(uv3(slot4))
            end
        end
    end(slot0)
end

function slot0.onSendPlayerSync(slot0)
    if state and uv0 then
        slot0.surfingOffsets.z = uv3.v
        slot0.surfingOffsets.y = uv2.v
        slot0.surfingOffsets.x = uv1.v
        slot0.moveSpeed.z = uv6.v
        slot0.moveSpeed.y = uv5.v
        slot0.moveSpeed.x = uv4.v

        if sendpll then
            return false
        end
    end
end

function slot0.onSetPlayerPos()
    if state and setposs then
        return false
    end
end

function sendOnfootSync(slot0, slot1, slot2)
    slot3 = allocateMemory(68)
    slot4, slot7 = sampGetPlayerIdByCharHandle(PLAYER_PED)

    sampStorePlayerOnfootData(slot5, slot3)
    setStructFloatElement(slot3, 6, slot0, false)
    setStructFloatElement(slot3, 10, slot1, false)
    setStructFloatElement(slot3, 14, slot2, false)
    setStructFloatElement(slot3, 38, 0.9, false)
    setStructFloatElement(slot3, 42, 0.9, false)
    setStructFloatElement(slot3, 46, -0.9, false)
    sampSendOnfootData(slot3)
    freeMemory(slot3)
end

function getTargetBlipCoordinatesFixed()
    slot0, slot1, slot2, slot3 = getTargetBlipCoordinates ()

    if not slot0 then
        return false
    end

    requestCollision(slot1, slot2)
    loadScene(slot1, slot2, slot3)

    slot8, slot9, slot10, slot11 = getTargetBlipCoordinates ()

    return slot4, slot5, slot6, slot7
end

function getAngle(slot0, slot1, slot2, slot3)
    return math.atan2(slot2 - slot0, slot3 - slot1)
end

function SearchMarker(slot0, slot1, slot2)
    slot3 = 0
    slot4 = 0
    slot5 = 0
    slot6 = false

    for slot10 = 0, 31, 1 do
        slot11 = 0

        if representIntAsFloat(readMemory(13103464 + slot10 * 56 + 0, 4, false)) ~= 0 or representIntAsFloat(readMemory(13103464 + slot10 * 56 + 4, 4, false)) ~= 0 or representIntAsFloat(readMemory(13103464 + slot10 * 56 + 8, 4, false)) ~= 0 then
            slot3 = slot12
            slot4 = representIntAsFloat(readMemory(13103464 + slot10 * 56 + 4, 4, false))
            slot5 = representIntAsFloat(readMemory(13103464 + slot10 * 56 + 8, 4, false))
            slot6 = true
        end
    end

    return slot6, slot3, slot4, slot5
end