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

Wysłany: 2019-01-09, 18:48


Drediks

Developer LUA






Wiek: 30
Na forum: 3352 dni
Posty: 44
Nick w MP: Trojka

Piwa: 66

Respekt: 50

By?by kto? mi?y i pom?g? naprawi? system duty dla OwlGaming 4.3? chyba nie musz? nikomu przedstawia?


#Oraz jak naprawi? to ?e po wpisaniu /setfactionleader imie 1 wyskakuje brak frakcji mimo ze PD jest podpisane pod 1


function openDutyWindow()
    local availablePackagesallowList fetchAvailablePackages(localPlayer)
        
    if #availablePackages > 0 then
        local dutyLevel getElementData(localPlayer"duty")
        if not dutyLevel or dutyLevel == 0 then
            selectPackageGUI_open(availablePackagesallowList)
        else
            triggerServerEvent("duty:offduty"localPlayer)
        end
    else
        outputChatBox("There is no duty available for you at this spot!")
    end
end
addCommandHandler("duty"openDutyWindow)

function itemIsAllowed(allowListid)
    for k,v in pairs(allowList) do
        if tonumber(id) == tonumber(v[1]) then
            return true
        end
    end
    return false
end

-- --- --
-- GUI --
-- --- --
local gAvailablePackages nil
local gChks = { }
local gButtons = { }
local gui = { }

function selectPackageGUI_open(availablePackagesallowList)
    gAvailablePackages availablePackages
    local screenWidthscreenHeight guiGetScreenSize()
    local windowWidthwindowHeight 680516
    local left screenWidth/windowWidth/2
    local top screenHeight/windowHeight/2
    gui["_root"] = guiCreateWindow(lefttopwindowWidthwindowHeight"Duty Selection"false)
    guiWindowSetSizable(gui["_root"], false)
    
    gui["tabSelection"] = guiCreateTabPanel(1025651471falsegui["_root"])
    for pIndexpackageDetails in ipairs(availablePackages) do
        local guiTabName "package"..tostring(packageDetails[1])
        gui[guiTabName] = guiCreateTab(packageDetails[2], gui["tabSelection"])

        local xAxis 10 -- Start at 10
        local yAxis 20 -- Start at 10
        
        -- Regular items
        for indexitemDetails in pairs(packageDetails[5]) do
            local guiPrefix guiTabName.."-package"..tostring(index).."-"
            
            gui[guiPrefix.."chk1"] = guiCreateCheckBox(xAxis 30yAxis+501617"chk"falsefalsegui[guiTabName])
            setElementData(gui[guiPrefix.."chk1"], "button:action""Push")
            setElementData(gui[guiPrefix.."chk1"], "button:itemDetails"itemDetails)
            setElementData(gui[guiPrefix.."chk1"], "button:itemID"index)
            setElementData(gui[guiPrefix.."chk1"], "button:grantID"packageDetails[1])
            setElementData(gui[guiPrefix.."chk1"], "button:chk"gui[guiPrefix.."chk1"])
            addEventHandler("onClientGUIClick"gui[guiPrefix.."chk1"], selectPackageGUI_process)
            addEventHandler("onClientGUIDoubleClick"gui[guiPrefix.."chk1"], selectPackageGUI_process)
            table.insert(gChksgui[guiPrefix.."chk1"])
            
            gui[guiPrefix.."pushButton1"] = guiCreateButton(xAxisyAxis7151exports['item-system']:getItemName(itemDetails[2]), falsegui[guiTabName])
            setElementData(gui[guiPrefix.."pushButton1"], "button:action""Push")
            setElementData(gui[guiPrefix.."pushButton1"], "button:chk"gui[guiPrefix.."chk1"])
            addEventHandler("onClientGUIClick"gui[guiPrefix.."pushButton1"], selectPackageGUI_process)
            gButtonsgui[guiPrefix.."chk1"] ] = gui[guiPrefix.."pushButton1"]
            
            gui[guiPrefix.."label_3"] = guiCreateLabel(xAxisyAxis+67113itemDetails[3], falsegui[guiTabName])
            guiLabelSetHorizontalAlign(gui[guiPrefix.."label_3"], "left"false)
            guiLabelSetVerticalAlign(gui[guiPrefix.."label_3"], "center")
            guiSetProperty(gui[guiPrefix.."label_3"], "AlwaysOnTop""True")

            if not itemIsAllowed(allowListitemDetails[1]) then
                guiLabelSetColor(gui[guiPrefix.."label_3"], 25500)
                guiSetEnabled(gui[guiPrefix.."pushButton1"], false)
                guiSetEnabled(gui[guiPrefix.."chk1"], false)
            end

            xAxis xAxis 80 -- prepare next row
            
            if xAxis >= 650 then
                xAxis 10
                yAxis yAxis 70
            end
        end
        
        -- Skins
        local skinTable = { }
        
        -- show current skin?
        --[[if not packageDetails["forceSkinChange"then
            local currentSkin getElementModellocalPlayer )
            local clothing getElementDatalocalPlayer'clothing:id' )
            if clothing then
                table.insert(skinTablecurrentSkin .. ':' .. clothing)
            else
                table.insert(skinTabletostring(currentSkin))
            end
        end]]
        
        -- add package skins
        if packageDetails[3then
            for ia in pairs(packageDetails[3]) do
                if a[2] == "N/A" then a[2] = nil end
                local a table.concat(a":")
                table.insert(skinTabletostring(a))
            end
        end
        
        local xAxis -- Start at 10
        local yAxis 200 -- Start at 10
        
        local count 0
        for skinIndexskinID in pairs(skinTable) do
            count count 1
            --local skinID table.concat(skinID":")
            local skinImg = ("%03d"):format(skinID:gsub(":(.*)$"""), 10)

            gui[guiTabName.."-radio-"..skinID] = guiCreateRadioButton (xAxis 30yAxis+801515""falsegui[guiTabName] )
            setElementData(gui[guiTabName.."-radio-"..skinID], "button:skinID"skinID)
            setElementData(gui[guiTabName.."-radio-"..skinID], "button:grantID"packageDetails[1])
            table.insert(gChksgui[guiTabName.."-radio-"..skinID])
            if skinIndex == 1 then
                guiRadioButtonSetSelected(gui[guiTabName.."-radio-"..skinID], true)
            end
            
            gui[guiTabName.."-skin-"..skinID] = guiCreateStaticImage (xAxisyAxis7575":account/img/" .. skinImg..".png"falsegui[guiTabName] )
            setElementData(gui[guiTabName.."-skin-"..skinID], "button:action""Radio")
            setElementData(gui[guiTabName.."-skin-"..skinID], "button:element"gui[guiTabName.."-radio-"..skinID])
            addEventHandler("onClientGUIClick"gui[guiTabName.."-skin-"..skinID], selectPackageGUI_process)
            xAxis xAxis 80 -- prepare next row
            if count == 8 then
                count 0
                xAxis 10
                yAxis yAxis 100
            end
        end

        gui[guiTabName.."-cancel"] = guiCreateButton(1040020035"Cancel"falsegui[guiTabName])
        setElementData(gui[guiTabName.."-cancel"], "button:action""Cancel")
        addEventHandler("onClientGUIClick"gui[guiTabName.."-cancel"], selectPackageGUI_process)
        
        gui[guiTabName.."-spawn"] = guiCreateButton(44040020035"Spawn"falsegui[guiTabName])
        setElementData(gui[guiTabName.."-spawn"], "button:action""Go")
        setElementData(gui[guiTabName.."-spawn"], "button:grantID"packageDetails[1])
        addEventHandler("onClientGUIClick"gui[guiTabName.."-spawn"], selectPackageGUI_process)
    end
end

function selectPackageGUI_process(mouseButtonmouseStateabsoluteXabsoluteY)
    if source and isElement(source) and mouseButton == "left" and mouseState == "up" then
        local theGUIelement source
        local btnAction getElementData(theGUIelement"button:action")
        if btnAction then
            if btnAction == "Cancel" then
                destroyElement(gui["_root"])
                gui = { }
                gChks = { }
                gAvailablePackages = { }
            elseif btnAction == "Radio" then 
                local victimElement getElementData(theGUIelement"button:element")
                if victimElement then
                    guiRadioButtonSetSelected(victimElementtrue)
                end
            elseif btnAction == "Go" then
                local grantID getElementData(theGUIelement"button:grantID")
                if grantID then
                    local spawnRequest = { }
                    local spawnSkin = -1
                    -- Make spawn request for server
                    for tableIndexchkBox in ipairs(gChks) do
                        local rowGrantID getElementData(chkBox"button:grantID")
                        if rowGrantID == grantID then
                            local rowItemDetails getElementData(chkBox"button:itemDetails")
                            if rowItemDetails then
                                if guiCheckBoxGetSelected(chkBoxthen
                                    table.insert(spawnRequestrowItemDetails)
                                end
                            end
                            local rowSkinDetails getElementData(chkBox"button:skinID")
                            if rowSkinDetails then
                                if guiRadioButtonGetSelected(chkBoxthen
                                    spawnSkin rowSkinDetails
                                end
                            end
                        end
                    end
                    destroyElement(gui["_root"])
                    gui = { }
                    gChks = { }
                    gAvailablePackages = { }
                    
                    --outputChatBox("Spawnrequest for package "..grantID)
                    --for ia in ipairs(spawnRequest) do
                    --    outputChatBox("i: "..a[1].." (".. exports['item-system']:getItemName(a[1]) ..") v:"..a[2])
                    --end
                    --outputChatBox("Spawnskin: "..spawnSkin)
                    --outputChatBox("---")
                    
                    if spawnSkin == -1 then
                        return
                    end
                    triggerServerEvent("duty:request"localPlayergrantIDspawnRequestspawnSkin)
                end
                
            elseif btnAction == "Push" then
                local guiChk getElementData(theGUIelement"button:chk")
                if guiChk then
                    local newstate =  not guiCheckBoxGetSelected guiChk )
                    chkItemDetails getElementData(guiChk"button:itemDetails")
                    if chkItemDetails and chkItemDetails[1then
                        for tableIndexchkBox in ipairs(gChks) do
                            cchkItemDetails getElementData(chkBox"button:itemDetails")
                            if cchkItemDetails and cchkItemDetails[1then
                                if (cchkItemDetails[1] == chkItemDetails[1]) then
                                    guiCheckBoxSetSelected chkBoxfalse )
                                    guiSetEnabledgButtons[chkBox], not newstate )
                                end
                            end
                        end    
                    end
                    
                    
                    guiCheckBoxSetSelected guiChknewstate )
                    guiSetEnabledgButtons[guiChk], true )
                end
            elseif btnAction == "Block" then
                guiCheckBoxSetSelected theGUIelementnot guiCheckBoxGetSelected theGUIelement ) )
            end
        end
    end
end


DutyColShapes = { }
function createDutyColShape(posXposYposZsizeinteriordimensionfactionIDlocationID)
    tempShape createColSphere(tonumber(posX), tonumber(posY), tonumber(posZ), tonumber(size))
    setElementDimension(tempShapetonumber(dimension) or 0)
    setElementInterior(tempShapetonumber(interior) or 0)
    if tempShape then
        if type(DutyColShapes[tonumber(factionID)]) ~= "table" then
            DutyColShapes[tonumber(factionID)] = { }
        end
        DutyColShapes[tonumber(factionID)][tonumber(locationID)] = tempShape
        setElementData(resourceRoot"DutyColShapes"DutyColShapes)
        return true
    end
end

function destroyDutyColShape(factionIDlocationID)
    if DutyColShapes[tonumber(factionID)][tonumber(locationID)] then
        destroyElement(DutyColShapes[tonumber(factionID)][tonumber(locationID)])
        DutyColShapes[tonumber(factionID)][tonumber(locationID)] = nil
        setElementData(resourceRoot"DutyColShapes"DutyColShapes)
        return true
    end
end

-- -------------------------- --
-- General checking functions -- Revised by Chaos for OwlGaming Old way was shitty less loops now
-- -------------------------- --

function fetchAvailablePackagestargetPlayer )
    local availablePackages = { }
    local factionID tonumber(getElementData(targetPlayer"faction"))
    local factionDuty getElementData(resourceRoot"factionDuty")
    local factionLocations getElementData(resourceRoot"factionLocations")
    local DutyColShapes getElementData(resourceRoot"DutyColShapes")

        if factionDuty[factionIDthen
            for ifactionPackage in pairs factionDuty[factionID] ) do -- Loop all the faction packages
                local found false
                for indexv in pairs factionPackage[4] ) do -- Loop all the colshapes of the factionpackage
                    if isElement(DutyColShapes[factionID][tonumber(index)]) then
                        if isElementWithinColShapetargetPlayerDutyColShapes[factionID][tonumber(index)] ) then
                            found true
                            break  -- We found this package alreadyno need to search the other colshapes
                            end
                       end
                end

                local veh getPedOccupiedVehicle(targetPlayer) -- Still can't find it? Lets see if they are in a duty vehicle
                if not found and veh then
                    local vehid = getElementData(veh, "dbid")
                    for k,v in pairs(factionLocations[factionID]) do
                        if tonumber(vehid) == tonumber(v[9]) then -- Yep vehicle ID matches!
                            found = true
                        end
                    end
                end

                if found and canPlayerUseDutyPackage(targetPlayer, i) then
                    table.insert(availablePackages, factionPackage)
                end
            end
        end
    local resource = getResourceRootElement(getResourceFromName("faction-system"))
    if resource then
        allowList = getElementData(resource, "dutyAllowTable")
        for k,v in pairs(allowList) do
            if tonumber(v[1]) == factionID then
                key = k
                break
            end
        end
        allowList = allowList[key][3]
    end
    return availablePackages, allowList
end

function getGrant(thePlayer, grantID, factionID)
    local factionID = tonumber(factionID)
    local factionDuty = getElementData(resourceRoot, "factionDuty")
    return factionDuty[factionID][tonumber(grantID)]
end

function canPlayerUseDutyPackage(targetPlayer, packageID)
    local package = tonumber(packageID)
    local playerPackagePermission = getElementData(targetPlayer, "factionPackages")
    if playerPackagePermission then
        for index, permissionID in ipairs(playerPackagePermission) do
            if (tonumber(permissionID) == tonumber(package)) then
                return true
            end
        end
    end
    return false
end

function getFactionPackages( factionID )
    if not factionID or not tonumber( factionID ) then
        return false
    end
    local factionDuty = getElementData(resourceRoot, "factionDuty")

    return factionDuty[tonumber(factionID)]
end
addEvent("onPlayerDuty", true)

addEvent("duty:request"true)
function dutyRequest(grantIDitemTableskinID)
    local thePlayer client

    -- Fetch the factionPackage
    local foundPackage getGrant(thePlayergrantIDgetElementData(thePlayer"faction"))
    
    if foundPackage and canPlayerUseDutyPackage(thePlayerfoundPackage[1]) then
        -- We've got an auth for the package
        
        -- Now we check the contents
        for itemIndexID, itemTableContent in ipairs(itemTable) do
            local found = false
            
            for aItemIndexID, aItemTableContent in pairs(foundPackage[5]) do
                if aItemTableContent[1] == itemTableContent[1] then
                    found = true
                    break
                end
            end
            
            if not found then
                outputChatBox("Error.", thePlayer)
                return false
            end
        end
        
        for itemIndexID, itemTableContent in ipairs(itemTable) do
            if itemTableContent[2] > 0 then -- its a real item
                exports.global:giveItem(thePlayer, itemTableContent[2], itemTableContent[3]) 
            else -- Its a weapon :O!
                if itemTableContent[2] == -100 then
                    setPedArmor(thePlayer, itemTableContent[3])
                else
                    local hasAmmo = true
                    local characterDatabaseID = getElementData(thePlayer, "account:character:id")
                    local gtaWeaponID = tonumber(itemTableContent[2]) - tonumber(itemTableContent[2]) - tonumber(itemTableContent[2])
                    local weaponSerial = exports.global:createWeaponSerial(2, characterDatabaseID)
                    exports.global:giveItem(thePlayer, 115, gtaWeaponID ..":".. weaponSerial ..":" .. getWeaponNameFromID ( gtaWeaponID ) .. " (D)"  ) 
                    
                    local gtaweaponcap = exports.weaponcap:getGTACap(gtaWeaponID)
                    local packsToGive = math.ceil( tonumber(itemTableContent[3]) / gtaweaponcap)
                    
                    if (getSlotFromWeapon ( gtaWeaponID ) < 2) then
                        hasAmmo = false
                    elseif ( getSlotFromWeapon ( gtaWeaponID ) == 9) then -- Spraycan, Fire Extinguisher, Camera
                        hasAmmo = false
                    end

                    if packsToGive > 0 and hasAmmo then
                        for i=1,packsToGive do 
                            exports.global:giveItem(thePlayer, 116, gtaWeaponID ..":".. gtaweaponcap ..":Ammopack for " .. getWeaponNameFromID ( gtaWeaponID ) .. " (D)"  ) 
                        end
                    end
                    
                    
                end
            end
        end
        
        savedSkin = 0
        savedClothing = 0
        if skinID and type(skinID) == 'string' then
            local skinData = split(skinID, ':')
            savedSkin = tonumber(skinData[1])
            setElementModel(thePlayer, savedSkin)
            if #skinData > 1 then
                savedClothing = tonumber(skinData[2])
                setElementData(thePlayer, 'clothing:id', savedClothing)
            else
                setElementData(thePlayer, 'clothing:id', nil)
            end
        end
        
        triggerClientEvent(thePlayer, "onPlayerDuty", thePlayer, true)
        triggerEvent("onPlayerDuty", thePlayer, true)
        exports.anticheat:changeProtectedElementDataEx(thePlayer, "duty", grantID, true)
        exports.mysql:query_free( "UPDATE characters SET skin = '" .. exports.mysql:escape_string(savedSkin) .. "', clothingid = '" .. exports.mysql:escape_string(savedClothing) .. "', duty = '" .. exports.mysql:escape_string(getElementData( thePlayer, "duty" ) or 0 ) .. "' WHERE id = '" .. exports.mysql:escape_string(getElementData( thePlayer, "dbid" )).."'" )    


    end
    return false
end
addEventHandler("duty:request", getRootElement(), dutyRequest)

addEvent("duty:offduty", true)
function dutyOffduty()

    local thePlayer = client or source
    local grantID = getElementData(thePlayer, "duty") or 0
    if tonumber(grantID) > 0 then
        local savedSkin, savedClothing = nil, nil

        setPedArmor(thePlayer, 0)
        local correction = 0
        local items = exports['item-system']:getItems( thePlayer ) -- [] [1] = itemID [2] = itemValue
        for itemSlot, itemCheck in ipairs(items) do
            if (itemCheck[1] == 115) then -- Weapon
                local itemCheckExplode = exports.global:explode(":", itemCheck[2])
                local serialNumberCheck = exports.global:retrieveWeaponDetails(itemCheckExplode[2])
                if (tonumber(serialNumberCheck[2]) == 2) then -- /duty spawned
                    exports['item-system']:takeItemFromSlot(thePlayer, itemSlot - correction, false)
                    correction = correction + 1
                end
            elseif (itemCheck[1] == 116) then
                local checkString = string.sub(itemCheck[2], -4)
                if checkString == " (D)" then -- duty given weapon
                    exports['item-system']:takeItemFromSlot(thePlayer, itemSlot - correction, false)
                    correction = correction + 1
                end
            elseif itemCheck[1] == 16 then
                -- use the first skin as skin to wear
                if not savedSkin then
                    local skinData = split(tostring(itemCheck[2]), ':')
                    savedSkin = tonumber(skinData[1])
                    savedClothing = tonumber(skinData[2])
                end
            end
        end
        
        -- remove duty items
        local foundPackage = getGrant(thePlayer, grantID, getElementData(thePlayer, "faction"))
        if foundPackage then
            for itemIndexID, itemTableContent in ipairs(foundPackage[5]) do
                if itemTableContent[2] > 0 then -- its a real item
                    exports.global:takeItem(thePlayer, itemTableContent[1], itemTableContent[2]) 
                end
            end
        end

        -- reset the skin to the first found in the inventory
        if savedSkin then
            setElementModel(thePlayer, savedSkin)
            setElementData(thePlayer, 'clothing:id', savedClothing)

            exports.mysql:query_free( "UPDATE characters SET skin = '" .. exports.mysql:escape_string(savedSkin) .. "', clothingid = '" .. exports.mysql:escape_string(savedClothing or 0) .. "', duty = '0' WHERE id = '" .. exports.mysql:escape_string(getElementData( thePlayer, "dbid" )).."'" )    
        else
            -- no actual clothes in inventory
            exports['item-system']:doItemGiveawayChecks(thePlayer, 16)

            exports.mysql:query_free( "UPDATE characters SET duty = '0' WHERE id = '" .. exports.mysql:escape_string(getElementData( thePlayer, "dbid" )).."'" )    
        end
        
        exports.anticheat:changeProtectedElementDataEx(thePlayer, "duty", 0, true)
    
        triggerClientEvent(thePlayer, "onPlayerDuty", thePlayer, false)
        triggerEvent("onPlayerDuty", thePlayer, false)
    end
end
addEventHandler("duty:offduty", getRootElement(), dutyOffduty)


Ostatnio zmieniony przez Drediks 2019-01-09, 19:15, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2019-01-09, 18:57


Nexisten

Moderator






Wiek: 22
Na forum: 4107 dni
Posty: 551
Nick w MP: Nexisten

Piwa: 1479

Respekt: 287,3
Respekt: 287,3Respekt: 287,3Respekt: 287,3

Bez kodu nikt nic nie zrobi.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2019-01-09, 19:43


Drediks

Developer LUA






Wiek: 30
Na forum: 3352 dni
Posty: 44
Nick w MP: Trojka

Piwa: 66

Respekt: 50

dodany :P

Podpis
[lua]function()[/lua]
nie ważne jak wygląda ważne że działa
Postaw piwo autorowi tego posta
 

 
Wysłany: 2019-01-09, 20:09


Kalizman







Wiek: 23
Na forum: 3651 dni
Posty: 1394

Piwa: 4619

Respekt: 358,8
Respekt: 358,8Respekt: 358,8Respekt: 358,8Respekt: 358,8

nie kazdy moze wie o co chodzi, nie korzystam z gm

Postaw piwo autorowi tego posta
 

 
Tagi: system :: sluzby
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » System sluzby Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

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