Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2022-07-20, 00:04


jaja







Wiek: 26
Na forum: 3495 dni
Posty: 31
Nick w MP: SkubiGo

Piwa: 4

Respekt: 45,3

Ostrzeżeń: 20%
Witam, chcia?em przenie?? tunera z jednej paczki na drug? lecz gdy wje?d?am w marker nic si? nie dzieje czy kto? m?g?by mi wyja?ni? jak to naprawi?

kod tunera kt?rego chce przenie?

c_gui

function calculateCost()
    local vehicle = getPedOccupiedVehicle(localPlayer)
    local original = getOriginalTune()
    local cost = 0

    for i = 0, 16 do
        local up = getVehicleUpgradeOnSlot(vehicle, i)
        if up and original[i] ~= up and partPrices[up] then
            cost = cost + partPrices[up]
        elseif (not up or up == 0) and (original[i] and original[i] ~= 0) then
            cost = cost - math.floor(partPrices[original[i]]*0.25)
        end
    end

    local data = (getElementData(vehicle, "visualTuning") or {
        innerSize = 1,
        wheelResize = 1,
        wheelTilt = 0,
    })
    local diff = math.floor(math.abs((original.data.innerSize or 0) - (data.innerSize or 0))*100)
    if diff > 0 then
        cost = cost + tonumber(diff)*partPrices.cale/5
    end

    local diff = math.floor(math.abs((original.data.wheelResize or 0) - (data.wheelResize or 0))*100)
    if diff > 0 then
        cost = cost + tonumber(diff)*partPrices.szerokosc/5
    end

    local diff = math.floor(math.abs((original.data.wheelTilt or 0) - (data.wheelTilt or 0))*100)
    if diff > 0 then
        cost = cost + tonumber(diff)*partPrices.negatyw/5*0.05
    end

    local tint = (getElementData(vehicle, "vehicle:carTint") or 0)
    local diff = math.floor(math.abs(original.tint - tint))
    if diff > 0 then
        cost = cost + tonumber(diff)*partPrices.szyby/5
    end

    local pojemnoscsilnika = tonumber(getElementData(vehicle, "vehicle:engine") or 1.2)
    local diff = math.abs(original.pojemnoscsilnika - pojemnoscsilnika)
    if diff > 0 then
        cost = cost + tonumber(diff)*(1/0.2)*partPrices.pojemnoscsilnika
    end

    local pojemnoscbaku = tonumber(getElementData(vehicle, "vehicle:bak") or 25)
    local diff = math.abs(original.pojemnoscbaku - pojemnoscbaku)
    if diff > 0 then
        cost = cost + tonumber(diff)*(1/5)*partPrices.pojemnoscbaku
    end

    return cost
end

local tuning = {
    ['category'] = {
        [1] = {
            ['name'] = "Vinyle",
            ['desc'] = "Otwiera edytor vinyli",
            ['use'] = function()
                removeEventHandler('onClientRender', root, renderUI)
                unbindKey("arrow_d", "down", arrowDown)
                unbindKey("arrow_u", "down", arrowUp)
                unbindKey("backspace", "down", backspace)
                unbindKey("enter", "down", enter)
                exports["borsuk-vinyle"]:openVinylsEditor()
            end
        },

        [2] = {
            ['name'] = "Zamknij",
            ['desc'] = "Wyjd? z tunera",
            ['use'] = function()
                restoreDefaultTuning()
                hideUI()
            end
        },
    },
    ['statistic'] = {
        {'Przy?pieszenie', 30, "engineAcceleration"},
        {'Pr?dko?? maksymalna', 350, "maxVelocity"},
        {'Sterowanie', 50, "steeringLock"},
        {'Przyczepno??', 1.5, "tractionLoss"}
    },
    ['selectedCategory'] = 1,
    ['selectedCategoryName'] = 'category',
    ['selectedSubCategoryName'] = nil,
}

function getDemontPrice(id)
    local original = getOriginalTune()
    local up = original[id]
    if not up or up == 0 then return 0 end

    return -math.floor(partPrices[up]*0.25)
end

local parts = {
    ["felgi"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 12,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1025, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=1250,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["wloty"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 7,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1035, 1038, 1006, 1032, 1033, 1053, 1054, 1055, 1061, 1068, 1067, 1088, 1091, 1103, 1128, 1130, 1131, 1004, 1005, 1011, 1012, 1142, 1143, 1144, 1145}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=((partNames[v]) and (partNames[v] .. "  (" .. v .. ")") or tostring(v)),
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["spoiler"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 2,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1000, 1001, 1002, 1003, 1014, 1015, 1016, 1023, 1049, 1050, 1058, 1060, 1138, 1139, 1146, 1147, 1158, 1162, 1163, 1164}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["t_zderzak"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 15,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1149, 1148, 1150, 1151, 1154, 1156, 1159, 1161, 1167, 1168, 1175, 1177, 1178, 1180, 1183, 1184, 1186, 1187, 1192, 1193}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["p_zderzak"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 14,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1171, 1172, 1140, 1141, 1117, 1152, 1153, 1155, 1157, 1160}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["progi"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 3,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        for k,v in pairs({1036, 1039, 1040, 1041, 1007, 1017, 1026, 1027, 1030, 1031, 1042, 1047, 1048, 1051, 1052, 1056, 1057, 1062, 1063, 1069, 1070, 1071, 1072, 1090, 1093, 1094, 1095, 1099, 1101, 1102, 1106, 1107, 1108, 1118, 1119, 1120, 1121, 1122, 1124, 1133, 1134, 1137}) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["wydech"] = function()
        local t = {
            {
                name = "Brak (Demonta?)",
                id = "demontaz",
                demont = 13,
            }
        }
        local temp = createVehicle(getElementModel(getPedOccupiedVehicle(localPlayer)), 0, 0, 0)
        local c = {1034, 1037, 1044, 1046, 1018, 1019, 1020, 1021, 1022, 1028, 1029, 1043, 1044, 1045, 1059, 1064, 1065, 1066, 1089, 1092, 1104, 1105, 1113, 1114, 1126, 1127, 1129, 1132, 1135, 1136}
        for k,v in pairs(c) do
            if addVehicleUpgrade(temp, v) then
                table.insert(t, {
                    name=partNames[v] .. "  (" .. v .. ")",
                    id = v,
                    cost=500,
                })
            end
        end
        destroyElement(temp)
        return t
    end,

    ["mods"] = function()
        return {
            {
                name = "Cale felgi",
                id = "cale",

                suwak = true,
                min = 0.6,
                max = 1.1,
                snap = 0.05,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    return (data.innerSize or 1)
                end,
                set = function(c)
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    data.innerSize = c
                    data.wheelResize = (data.wheelResize or 1)
                    data.wheelTilt = (data.wheelTilt or 0)
                    setElementData(getPedOccupiedVehicle(localPlayer), "visualTuning", data, false)
                end
            },
            {
                name = "Szeroko?? opon",
                id = "szerokosc",

                suwak = true,
                min = 0.8,
                max = 1.9,
                snap = 0.05,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    return (data.wheelResize or 1)
                end,
                set = function(c)
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    data.wheelResize = c
                    data.innerSize = (data.innerSize or 1)
                    data.wheelTilt = (data.wheelTilt or 0)
                    setElementData(getPedOccupiedVehicle(localPlayer), "visualTuning", data, false)
                end
            },
            {
                name = "Negatyw",
                id = "negatyw",

                suwak = true,
                min = -15,
                max = 10,
                snap = 1,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    return (data.wheelTilt or 1)
                end,
                set = function(c)
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "visualTuning") or {})
                    data.wheelTilt = c
                    data.innerSize = (data.innerSize or 1)
                    data.wheelResize = (data.wheelResize or 0)
                    setElementData(getPedOccupiedVehicle(localPlayer), "visualTuning", data, false)
                end
            },
            {
                name = "Przyciemniane szyby",
                id = "szyby",

                suwak = true,
                min = 0,
                max = 100,
                snap = 5,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "vehicle:carTint") or 0)
                    return data
                end,
                set = function(c)
                    setElementData(getPedOccupiedVehicle(localPlayer), "vehicle:carTint", c, false)
                end
            },
            {
                name = "Pojemno?? silnika",
                id = "pojemnoscsilnika",

                suwak = true,
                min = 1.2,
                max = 2.2,
                snap = 0.2,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "vehicle:engine") or 1.2)
                    return data
                end,
                set = function(c)
                    setElementData(getPedOccupiedVehicle(localPlayer), "vehicle:engine", tostring(("%.1f"):format(c)), false)
                end
            },
            {
                name = "Pojemno?? baku",
                id = "pojemnoscbaku",

                suwak = true,
                min = 25,
                max = 100,
                snap = 5,

                get = function()
                    local data = (getElementData(getPedOccupiedVehicle(localPlayer), "vehicle:bak") or 25)
                    return data
                end,
                set = function(c)
                    setElementData(getPedOccupiedVehicle(localPlayer), "vehicle:bak", tonumber(c), false)
                end
            },
        }
    end,
}

function getVehicleHandlingProperty(element, property)
    if isElement(element) and getElementType(element) == "vehicle" and type(property) == "string" then
        local handlingTable = getVehicleHandling(element) 
        local value = handlingTable[property] 
 
        if value then
            return value
        end
    end
    return false
end

function renderUI()
    local vehicle = getPedOccupiedVehicle(localPlayer)

    dxDrawRectangle(0, 0, 350/zoom, sy, tocolor(35, 35, 35, 245))
    dxDrawText("Kategorie", 10/zoom, 50/zoom, 350/zoom, nil, tocolor(200, 200, 200, 255), 1, font1, "left", "center", false, false, false, false, false)

    if tuning['selectedCategoryName'] == 'category' then
        offsetY = 0
        for i, v in ipairs(tuning[tuning['selectedCategoryName']]) do
            local ifElse = tuning['selectedCategory'] == i and tocolor(200, 200, 200, 245) or tocolor(155, 155, 155, 245)
            dxDrawRectangle(0, 85/zoom + offsetY, 350/zoom, 50/zoom, ifElse)
            local ifElse = tuning['selectedCategory'] == i and 255 or 155
            dxDrawText(v['name'], 10/zoom, 111/zoom + offsetY, nil, nil, tocolor(0, 0, 0, ifElse), 1, font2, "left", "center", false, false, false, false, false)
            dxDrawText(v['desc'], 10/zoom, 108/zoom + offsetY, 340/zoom, nil, tocolor(0, 0, 0, ifElse), 1, font5, "right", "center", false, false, false, false, false)

            offsetY = offsetY + (50/zoom + 1)
        end
    elseif type(tuning['selectedCategoryName']) == "table" then
        offsetY = 0
        for i, v in ipairs(tuning['selectedCategoryName']['subCategory']) do
            local ifElse = tuning['selectedCategory'] == i and tocolor(200, 200, 200, 245) or tocolor(155, 155, 155, 245)
            dxDrawRectangle(0, 85/zoom + offsetY, 350/zoom, 50/zoom, ifElse)
            local ifElse = tuning['selectedCategory'] == i and 255 or 155
            if v.desc and #v.desc > 0 then
                dxDrawText(v.name, 10/zoom, 103/zoom + offsetY, nil, nil, tocolor(0, 0, 0, ifElse), 1, font2, "left", "center", false, false, false, false, false)
                dxDrawText(v.desc, 10/zoom, 119/zoom + offsetY, nil, nil, tocolor(0, 0, 0, ifElse), 1, font5, "left", "center", false, false, false, false, false)
            else
                dxDrawText(v.name, 10/zoom, 111/zoom + offsetY, nil, nil, tocolor(0, 0, 0, ifElse), 1, font2, "left", "center", false, false, false, false, false)
            end

            if v.cost then
                dxDrawText(v.cost .. " PLN", 10/zoom, 108/zoom + offsetY, 340/zoom, nil, tocolor(0, 0, 0, ifElse/5), 1, font5, "right", "center", false, false, false, false, false)
                dxDrawText(v.cost .. " PLN", 10/zoom + 1, 108/zoom + 1 + offsetY, 340/zoom + 1, nil, v.cost > 0 and tocolor(255,0,0,ifElse) or (v.cost == 0 and tocolor(0, 0, 0, ifElse) or tocolor(0,100,0,ifElse)), 1, font5, "right", "center", false, false, false, false, false)
            end

            offsetY = offsetY + (50/zoom + 1)
        end
    else
        local data = parts[tuning['selectedCategoryName']]
        if data then
            local c = data()
            offsetY = 0
            for i, v in ipairs(c) do
                if i >= (scroll or 1) and i <= (scroll or 1)+11 then
                    local ifElse = tuning['selectedCategory'] == i and tocolor(200, 200, 200, 245) or tocolor(155, 155, 155, 245)
                    dxDrawRectangle(0, 85/zoom + offsetY, 350/zoom, 50/zoom, ifElse)
                    local ifElse = tuning['selectedCategory'] == i and 255 or 155
                    dxDrawText(v.name, 10/zoom, 111/zoom + offsetY, nil, nil, tocolor(0, 0, 0, ifElse), 1, font2, "left", "center", false, false, false, false, false)
                    
                    if v.suwak then
                        local w = dxGetTextWidth(v.name, 1, font2)
                        local ifElse = tuning['selectedCategory'] == i and tocolor(55, 55, 55, 245) or tocolor(55, 55, 55, 200)
                        local x = 20/zoom + w
                        local tx = 260/zoom
                        local _w = tx - x

                        local current = v.get()

                        dxDrawRectangle(x, 107/zoom + offsetY, _w, 5/zoom, ifElse)

                        local prg = (current - v.min)/(v.max - v.min)
                        dxDrawRectangle(x + _w*prg - 2/zoom, 105/zoom + offsetY, 9/zoom, 9/zoom, tocolor(25,25,25))

                        if getKeyState("arrow_l") and (lastTick or 0) < getTickCount() and tuning['selectedCategory'] == i then
                            v.set(math.max(current - v.snap, v.min))
                            lastTick = getTickCount() + 150
                        elseif getKeyState("arrow_r") and (lastTick or 0) < getTickCount() and tuning['selectedCategory'] == i then
                            v.set(math.min(current + v.snap, v.max))
                            lastTick = getTickCount() + 150
                        end
                    end
                    
                    local price = partPrices[v.id]
                    if v.id == "demontaz" then
                        price = getDemontPrice(v.demont)
                    end
                    dxDrawText(price .. " PLN", 10/zoom, 108/zoom + offsetY, 340/zoom, nil, tocolor(0, 0, 0, ifElse/5), 1, font5, "right", "center", false, false, false, false, false)
                    dxDrawText(price .. " PLN", 10/zoom + 1, 108/zoom + 1 + offsetY, 340/zoom + 1, nil, price > 0 and tocolor(255,0,0,ifElse) or (price == 0 and tocolor(0, 0, 0, ifElse) or tocolor(0,100,0,ifElse)), 1, font5, "right", "center", false, false, false, false, false)

                    offsetY = offsetY + (50/zoom + 1)
                end
            end
        end
    end

    dxDrawText("Portfel", 0, sy - 30/zoom, 350/zoom, nil, tocolor(200, 200, 200, 255), 1, font3, "center", "bottom", false, false, false, false, false)
    dxDrawText(convertNumber(getPlayerMoney(localPlayer)).." PLN", 0, sy - 30/zoom, 350/zoom, nil, tocolor(100, 255, 100, 255), 1, font2, "center", "top", false, false, false, false, false)
    dxDrawText("Koszt tuningu", 0, sy - 85/zoom, 350/zoom, nil, tocolor(200, 200, 200, 255), 1, font3, "center", "bottom", false, false, false, false, false)
    dxDrawText(convertNumber(calculateCost()).." PLN", 0, sy - 85/zoom, 350/zoom, nil, tocolor(100, 255, 100, 255), 1, font2, "center", "top", false, false, false, false, false)
    dxDrawText("Klawiszologia", sx - 20/zoom, sy - 75/zoom, nil, nil, tocolor(200, 200, 200, 255), 1, font3, "right", "bottom", false, false, false, false, false)
    dxDrawText("LPM - Poruszanie kamer?\nScroll - Przybli?anie/Oddalanie kamery", sx - 20/zoom, sy - 75/zoom, nil, nil, tocolor(200, 200, 200, 255), 1, font4, "right", "top", false, false, false, false, false)

    dxDrawRectangle(20/zoom, sy - 320/zoom, 310/zoom, 200/zoom, tocolor(30, 30, 30, 255))
    dxDrawText(exports['TR_vehicles']:getVehicleName(veh).." "..(getElementData(veh, "vehicle:engine") or "1.2").." dm&#179;", 0, sy - 300/zoom, 350/zoom, nil, tocolor(200, 200, 200, 255), 1, font3, "center", "center", false, false, false, false, false)

    offsetY = 0
    for i, v in ipairs(tuning['statistic']) do
        dxDrawText(v[1], 0, sy - 265/zoom + offsetY, 350/zoom, nil, tocolor(200, 200, 200, 255), 1, font5, "center", "center", false, false, false, false, false)
        dxDrawRectangle(25/zoom, sy - 250/zoom + offsetY, 300/zoom, 5/zoom, tocolor(0, 195, 255, 75))

        local progress = (300/zoom*getVehicleHandlingProperty(vehicle, v[3])/v[2])
        local progress = math.min(progress, 300/zoom)
        dxDrawRectangle(25/zoom, sy - 250/zoom + offsetY, progress, 5/zoom, tocolor(0, 195, 255, 200))

        offsetY = offsetY + 35/zoom
    end
end

function enter()
    if data.toggleGUI == true then
        scroll = 1
        if tuning['selectedCategoryName'] == 'category' then
            if tuning['category'][tuning['selectedCategory']]["subCategory"] then
                if tuning['category'][tuning['selectedCategory']]["subCategory"] == "mods" then
                    tuning['selectedCategoryName'] = "mods"
                else
                    tuning['selectedCategoryName'] = tuning['category'][tuning['selectedCategory']]
                end
                tuning['selectedCategory'] = 1
            else
                tuning['category'][tuning['selectedCategory']].use()
            end
        elseif type(tuning['selectedCategoryName']) == "table" then
            if tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].inner then
                tuning['selectedCategoryName'] = tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].type
                tuning['selectedCategory'] = 1
                updateVehicleTuning()
            else
                if getPlayerMoney() < tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].cost then
                    return exports["noobisty-notyfikacje"]:createNotification("Warsztat tuningowy", "Nie posiadasz tyle got?wki", {255,0,0}, "sighter")
                end
                exports["noobisty-notyfikacje"]:createNotification("Warsztat tuningowy", "Zakupiono " .. tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].name, {0,255,0}, "sight")
                triggerServerEvent("buyTuningCustom", localPlayer, getPedOccupiedVehicle(localPlayer), tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].type, tuning['selectedCategoryName']['subCategory'][tuning['selectedCategory']].cost)
            end
        end
    end
end

function backspace()
    if data.toggleGUI == true and tuning['selectedCategoryName'] ~= 'category' then
        tuning['selectedCategoryName'] = 'category'
        tuning['selectedCategory'] = 1
        scroll = 1
    end
end

function arrowDown()
    if data.toggleGUI == true then
        scrollDown()
    end
end

function arrowUp()
    if data.toggleGUI == true then
        scrollUp()
    end
end

function updateVehicleTuning()
    if type(tuning['selectedCategoryName']) ~= "table" and tuning['selectedCategoryName'] ~= "category" then
        local data = parts[tuning['selectedCategoryName']]
        if data then
            local c = data()
            local upgrade = c[tuning['selectedCategory']]
            if upgrade and upgrade.id and tonumber(upgrade.id) then
                addVehicleUpgrade(getPedOccupiedVehicle(localPlayer), upgrade.id)
            elseif upgrade and upgrade.id == "demontaz" then
                removeVehicleUpgrade(getPedOccupiedVehicle(localPlayer), getVehicleUpgradeOnSlot(getPedOccupiedVehicle(localPlayer), upgrade.demont))
            end
        end
    end
end

function scrollDown()
    if tuning['selectedCategoryName'] == 'category' then
        if tuning['selectedCategory'] >= #tuning['category'] then return end
        tuning['selectedCategory'] = tuning['selectedCategory'] + 1
    elseif type(tuning['selectedCategoryName']) == "table" then
        if tuning['selectedCategory'] >= #tuning['selectedCategoryName']['subCategory'] then return end
        tuning['selectedCategory'] = tuning['selectedCategory'] + 1
    else
        local data = parts[tuning['selectedCategoryName']]
        if data then
            local c = data()
            if tuning['selectedCategory'] >= #c then return end
            tuning['selectedCategory'] = tuning['selectedCategory'] + 1

            updateVehicleTuning()

            if tuning['selectedCategory'] - scroll > 11 then
                scroll = scroll + 1
            end
        end
    end
end

function scrollUp()
    if 1 >= tuning['selectedCategory'] then return end
    tuning['selectedCategory'] = tuning['selectedCategory'] - 1
    updateVehicleTuning()
    if tuning['selectedCategory'] - (scroll or 0) < 0 then
        scroll = scroll - 1
    end
end

function showUI()
    bindKey("arrow_d", "down", arrowDown)
    bindKey("arrow_u", "down", arrowUp)
    bindKey("backspace", "down", backspace)
    bindKey("enter", "down", enter)
    addEventHandler('onClientRender', root, renderUI)
    triggerServerEvent("setMyDimension2", localPlayer, getElementData(localPlayer, "characterUID"))
    showChat(false)
    setElementData(localPlayer, "player:hudof", true)
    data.toggleGUI = true
    createTuningVehicle(getPedOccupiedVehicle(localPlayer))
    addEventHandler('onClientKey', root, zoomCamera)
end

function hideUI()
    unbindKey("arrow_d", "down", arrowDown)
    unbindKey("arrow_u", "down", arrowUp)
    unbindKey("backspace", "down", backspace)
    unbindKey("enter", "down", enter)
    removeEventHandler('onClientRender', root, renderUI)
    triggerServerEvent("setMyDimension2", localPlayer, 0, 0)
    showChat(true)
    showCursor(false)
    setElementData(localPlayer, "player:hudof", false)
    setCameraInterior(0)
    setElementInterior(getPedOccupiedVehicle(localPlayer), 0)
    data.toggleGUI = false
    setElementPosition(getPedOccupiedVehicle(localPlayer), -2043.88, 160.55, 27.31)
    setElementRotation(getPedOccupiedVehicle(localPlayer), 359.7, 0.0, 271.4)
    leave = getTickCount() + 5000
    toggleAllControls(true)
    setCameraTarget(localPlayer)
    removeEventHandler('onClientKey', root, zoomCamera)
end

local marker = createMarker(-2052.97, 160.32, 26.70, "cylinder", 4, 0, 255, 255)
setElementData(marker, "marker:title", "Tuning")
setElementData(marker, "marker:desc", "Tuning wizualny/mechaniczny")
addEventHandler("onClientMarkerHit", marker, function(plr)
    if plr ~= localPlayer then return end
    local vehicle = getPedOccupiedVehicle(localPlayer)
    if not vehicle then return end
    if (leave or 0) > getTickCount() then return end
    local vehicleOwner = getElementData(vehicle, "ownedPlayer")
    if not owned or tonumber(owned) ~= tonumber(getElementData(localPlayer, "characterUID")) then return end
    showUI()
end)

function hideVinyls()
    addEventHandler('onClientRender', root, renderUI)
    bindKey("arrow_d", "down", arrowDown)
    bindKey("arrow_u", "down", arrowUp)
    bindKey("backspace", "down", backspace)
    bindKey("enter", "down", enter)
end


wydaje mi si? ?e to jest po prostu kwestia z?ych elementdat ale nie wiem

skrypt vehicle z mojego serwera:

c.lua

VehicleBlips = {}
VehicleBlips.__index = VehicleBlips

function VehicleBlips:create()
    local instance = {}
    setmetatable(instance, VehicleBlips)
    if instance:constructor() then
        return true
    end
    return false
end

function VehicleBlips:constructor()
    self.vehicles = {}

    self.func = {}
    self.func.update = function() self:updateVehicles() end
    self.func.remove = function() self:removeVehicle(source) end

    addEventHandler("onClientElementDestroy", root, self.func.remove)
    setTimer(self.func.update, 10000, 0)
    return true
end

function VehicleBlips:updateVehicles()
    if not getElementData(localPlayer, "characterUID") then return end
    for i, _ in pairs(self.vehicles) do
        if not isElement(i) then
            if isElement(self.vehicles[i]) then destroyElement(self.vehicles[i]) end
            self.vehicles[i] = nil
        end
    end
    for i, v in ipairs(getElementsByType("vehicle", resourceRoot)) do
        self:addVehicle(v)
    end
end

function VehicleBlips:addVehicle(vehicle)
    if not canShowVehicleBlip(vehicle) then self:removeVehicle(vehicle) return end
    if self.vehicles[vehicle] then return end

    self.vehicles[vehicle] = createBlip(0, 0, 0, 0, 0, 2, 137, 213, 255)
    setElementData(self.vehicles[vehicle], "icon", 2, false)
    attachElements(self.vehicles[vehicle], vehicle)
    setElementData(self.vehicles[vehicle], "vehObject", vehicle, false)
end

function VehicleBlips:removeVehicle(vehicle)
    if not self.vehicles[vehicle] then return end
    if isElement(self.vehicles[vehicle]) then destroyElement(self.vehicles[vehicle]) end
    self.vehicles[vehicle] = nil
end


function canShowVehicleBlip(vehicle)
    local vehData = getElementData(vehicle, "vehicleOwners")
    if not vehData then return end

    local vehOrganization = getElementData(vehicle, "vehicleOrganization")
    if vehOrganization then
        if vehOrganization == getElementData(localPlayer, "characterOrgID") then
            return true
        end
    end

    local uid = getElementData(localPlayer, "characterUID")
    for i, v in ipairs(vehData) do
        if v == uid or v == getPlayerName(localPlayer) then return true end
    end
    return false
end

function isVehicleOwner(vehicle)
    if getElementData(localPlayer, "adminDuty") then return true end
    if getElementData(vehicle, "freeForAll") then return true end

    local jobVehicle = getElementData(vehicle, "vehicleOwner")
    if jobVehicle then
        if jobVehicle == localPlayer then return true end
    end

    local vehicleFraction = getElementData(vehicle, "fractionID")
    local plrFraction = getElementData(localPlayer, "characterDuty")
    if vehicleFraction then
        if plrFraction then
            if vehicleFraction == plrFraction[4] then return true end
        end
        return false
    end

    local vehData = getElementData(vehicle, "vehicleOwners")
    if not vehData then return end

    local vehOrganization = getElementData(vehicle, "vehicleOrganization")
    if vehOrganization then
        if vehOrganization == getElementData(localPlayer, "characterOrgID") then
            return true
        end
    end

    local uid = getElementData(localPlayer, "characterUID")
    for i, v in ipairs(vehData) do
        if v == uid or v == getPlayerName(localPlayer) then return true end
    end
    return false
end


VehicleBlips:create()


local benchmarkVehicles = {}
local benchmarkCoroutine
function destroyBenchmarkVehicles()
    for i, v in pairs(benchmarkVehicles) do
        destroyElement(v)
    end
    benchmarkVehicles = {}
end

function createBenchmarkVehicles(maxVehicles, models)
    benchmarkCoroutine = coroutine.create(createBenchmarkVehiclesCoroutine)
    coroutine.resume(benchmarkCoroutine, maxVehicles, models)
end

function createBenchmarkVehiclesCoroutine(maxVehicles, models)
    local i = 0
    for _ = 0, 50 do
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1657.5361328125 + i * 6, -158.841796875 + i * 6, 13.834096908569, 0, 0, 223))
        i = i + 1

        if i%5 == 0 then
            setTimer(function()
                coroutine.resume(benchmarkCoroutine, maxVehicles, models)
            end, 100, 1)
            coroutine.yield(benchmarkCoroutine)
        end
    end
    local i = 30
    for _ = 0, 20 do
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1651.5361328125 + i * 6, -163.841796875 + i * 6, 13.834096908569, 0, 0, 223))
        i = i + 1
        if i%5 == 0 then
            setTimer(function()
                coroutine.resume(benchmarkCoroutine, maxVehicles, models)
            end, 100, 1)
            coroutine.yield(benchmarkCoroutine)
        end
    end

    local i = 102
    for _ = 0, maxVehicles do
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1663.5361328125 + i * 3, -153.841796875 + i * 3, 13.834096908569, 0, 0, 223))
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1657.5361328125 + i * 3, -158.841796875 + i * 3, 13.834096908569, 0, 0, 223))
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1651.5361328125 + i * 3, -163.841796875 + i * 3, 13.834096908569, 0, 0, 223))
        table.insert(benchmarkVehicles, createBenchmarkVehicle(models[math.random(1, #models)], -1645.5361328125 + i * 3, -168.841796875 + i * 3, 13.834096908569, 0, 0, 223))
        i = i + 1
        if i%5 == 0 then
            setTimer(function()
                coroutine.resume(benchmarkCoroutine, maxVehicles, models)
            end, 100, 1)
            coroutine.yield(benchmarkCoroutine)
        end
    end
end

function createBenchmarkVehicle(model, x, y, z, rx, ry, rz)
    local veh = createVehicle(model, x, y, z, rx, ry, rz)
    setElementData(veh, "neonEnabled", true, false)
    setElementDimension(veh, 4891)

    for i= 0, math.random(0, 5) do
        addVehicleUpgrade(veh, math.random(1000, 1193))
    end

    setElementData(veh, "neonEnabled", true, false)
    setElementData(veh, "visualTuning", {
        neon = {math.random(1, 3), math.random(0, 255), math.random(0, 255), math.random(0, 255)},
        glassTint = math.random(0, 100)/100
    }, false)
    return veh
end


Postaw piwo autorowi tego posta
 

 
Wysłany: 2022-07-27, 22:55


etrnl

CLASSIC RPG






Wiek: 26
Na forum: 2340 dni
Posty: 86
Nick w MP: anonymous

Piwa: 58

Respekt: 50

Ostrzeżeń: 40%
Cytat:

addEventHandler("onClientMarkerHit", marker, function(plr)


if plr ~= localPlayer then return end


local vehicle = getPedOccupiedVehicle(localPlayer)


if not vehicle then return end


if (leave or 0) > getTickCount() then return end


local vehicleOwner = getElementData(vehicle, "ownedPlayer")


if not owned or tonumber(owned) ~= tonumber(getElementData(localPlayer, "characterUID")) then return end


showUI()


end)


Sprawdza?e? czy masz element dat? ownedPlayer na aucie i czy jest r?wna twojemu characterUID?

i odkomentuj na chwil?
Cytat:

if (leave or 0) > getTickCount() then return end
i sprawd? bo masz tyle rzeczy w tym skrypcie ?e ci??ko si? po?apa? co jest co ale raczej to wina elementdaty.

Poza tym, wyskakuje co? w db3?

Postaw piwo autorowi tego posta
 

 
Tagi: przenoszenie :: tunera
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA Odpowiedz do tematu

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku