Jump to content

[HELP]Turf


VenomOG

Recommended Posts

local r, g, b = exports.STONEGroups:getGroupColor ( owner )
    
    if ( not r and not g and not b ) then
        owner = "server"
    else
        if ( not r ) then r = 255; end
        if ( not g ) then g = 255; end
        if ( not b ) then b = 255; end
    end
    
    if ( owner == "server" ) then
        r, g, b = 255, 255, 255
    end

    local _rad = createRadarArea ( x, y, width, height, r, g, b, 170, getRootElement ( ) )
    local col = createColCuboid ( x, y, z-5, width, height, 35)

    local id = 0;
    
    if ( forcedId ) then
        if ( turfLocs [ forcedId ] ) then destroyTurf ( forcedId ); end
        id = forcedId;
    else
        while ( turfLocs [ id ] ) do
            id = id + 1;
        end
    end

    turfLocs[id] = { }
    turfLocs[id].col = col
    turfLocs[id].radar = _rad
    turfLocs[id].owner = owner or "server"
    turfLocs[id].attackers = nil
    turfLocs[id].attackProg = 0
    turfLocs[id].prepProg = 0
    setElementData ( turfLocs[id].col, "NGTurf:TurfId", id )
    setElementData ( turfLocs[id].col, "NGTurf:TurffingTable", turfLocs [ id ] )
    addEventHandler ( "onColShapeHit", turfLocs[id].col, onColShapeHit )
    addEventHandler ( "onColShapeLeave", turfLocs[id].col, onColShapeLeave )
    return turfLocs[id];
end

function destroyTurf ( id )
    if ( turfLocs [ id ] ) then
        
        removeEventHandler ( "onColShapeHit", turfLocs[id].col, onColShapeHit )
        removeEventHandler ( "onColShapeLeave", turfLocs[id].col, onColShapeLeave )
        
        destroyElement ( turfLocs[id].col );
        destroyElement ( turfLocs[id].radar );
        
        outputDebugString ( "NGTurf: Turf #"..tostring(id).." has been destroyed (Owner: "..turfLocs[id].owner..")" );
        
        turfLocs[id] = nil;
        
        return true;
        
    end
    return false;
end 

function addTurf( player, cmd, width, height )
    if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
        if ( not width ) then return exports.NGMessages:sendClientMessage ( "Missing width argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( not height ) then return exports.NGMessages:sendClientMessage ( "Missing height argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( type ( width ) == 'number' and type ( height ) == 'number' ) then
            local x, y, z = getElementPosition ( player )
            createTurf ( x, y, z, width, height, "server", id )
            exports.NGSQL:db_query ( "INSERT INTO turfs(`id`, `owner`, `x`, `y`, `z`, `width`, `height`)  VALUES (?, ?, ?, ?, ?, ?, ?)", id, 'server', math.floor(x), math.floor(y), math.floor(z), tonumber(width), tonumber(height))
            exports.NGMessages:sendClientMessage( "NGTurf: A new turf was added successfully", player, 0, 255, 0 )
        else
            exports.NGMessages:sendClientMessage( "NGTurf: Expected numbers for width and/or height", player, 0, 255, 0 )
        end
    end
end
addCommandHandler( "addturf", addTurf )

function deleteturf( player, cmd )
    if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
        local x, y, z = getElementPosition(player)
        local counter = 0
        for w, area in ipairs(getElementsByType("radararea")) do
            local ax, ay, az = getElementPosition ( area )
            if ax > (x-5) and ax < (x+5) and ay > (y-5) and ay < (y+5) then
                destroyElement(area)
                counter = counter + 1
            end
        end
        for w, colshape in ipairs(getElementsByType("colshape")) do
            local ax,ay,az = getElementPosition(colshape)
            if ax > (x-5) and ax < (x+5) and ay > (y-5) and ay < (y+5) and getElementData( colshape, "NGTurf:TurfId") then
                destroyElement(colshape)
            end
        end
        if counter > 0 then
            exports.NGMessages:sendClientMessage( "NGTurf: Turf was removed from database successfully", player, 0, 255, 0 )
            exports.NGSQL:db_exec("DELETE FROM turfs WHERE X>? AND X<? AND Y>? AND Y<?", math.floor(x)-5, math.floor(x)+5, math.floor(y)-5, math.floor(y)+5 )
        else
            exports.NGMessages:sendClientMessage( "NGTurf: No turfs was found within this range, stand near by the left corner of radar area", player, 255, 0, 0 )
        end
    end
end
addCommandHandler( "deleteturf", deleteturf )

function updateTurfGroupColor ( group )
    local r, g, b = exports.STONEGroups:getGroupColor ( group )
    for i, v in pairs ( turfLocs ) do
        if ( v.owner == group ) then
            setRadarAreaColor ( v.radar, r, g, b, 120 )
        end 
    end 
end 

function onColShapeHit ( player ) 
    if ( player and isElement ( player ) and getElementType ( player ) == "player" and not isPedInVehicle ( player ) ) then
        local gang = exports.STONEGroups:getPlayerGroup ( player )
        
        triggerClientEvent ( player, "NGTurfs:onClientEnterTurfArea", player, turfLocs [ id ] )
        if ( not gang ) then
            return exports.NGMessages:sendClientMessage ( "You're not in a gang, you cannot turf.", player, 255, 255, 0 )
        end

        local id = tonumber ( getElementData ( source, "NGTurf:TurfId" ) )
        
        if ( turfLocs[id].owner == gang ) then
            return
        end

        if ( turfLocs[id].attackers and turfLocs[id].attackers ~= gang ) then
            return exports.NGMessages:sendClientMessage ( "The "..tostring(turfLocs[id].attackers).." gang is already trying to take this turf. Try again later.", player, 255, 0, 0 )
        end

        if ( not turfLocs[id].attackers ) then
            exports.NGMessages:sendClientMessage ( "You have started to prepare a turf war. Find cover, call backup, and wait for it to begin.", player, 255, 255, 0 )
            local x, y, z = getElementPosition ( source )
            exports.STONEGroups:outputGroupMessage ( getPlayerName ( player ).." is preparing a turf war with "..tostring(turfLocs[id].owner).." in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).."! Get there to help him, the war will start in 2 minutes!", gang, 255, 255, 0 )
            setRadarAreaFlashing ( turfLocs[id].radar, true )
            turfLocs[id].attackers = gang
            turfLocs[id].attackProg = 0
            turfLocs[id].prepProg = 0
            setElementData ( turfLocs[id].col, "NGTurf:TurffingTable", turfLocs [ id ] )
        end
    end
end

function onColShapeLeave ( player ) 
    if ( player and getElementType ( player ) == "player" ) then
        triggerClientEvent ( player, "NGTurfs:onClientExitTurfArea", player, turfLocs [ getElementData ( source, "NGTurf:TurfId" ) ] )
    end
end


setTimer ( function ( ) 
    for id, data in pairs ( turfLocs ) do 
        if ( data.attackers ) then
            local players = { attackers = { }, owners = { } }
            local isGangInTurf = false
            local isOwnerInTurf = false
            for i, v in pairs ( getElementsWithinColShape ( data.col, "player" ) ) do
                local g = exports.STONEGroups:getPlayerGroup ( v )
                if ( g == data.attackers ) then
                    isGangInTurf = true
                    table.insert ( players.attackers, v )
                elseif ( g == data.owner ) then
                    isOwnerInTurf = true
                    table.insert ( players.owners, v )
                end
            end

            local x, y, z = getElementPosition ( data.col )
            if ( isOwnerInTurf and isGangInTurf ) then
                exports.STONEGroups:outputGroupMessage ( "The turf war in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." is paused due to both gangs in the turf", turfLocs[id].attackers, 255, 255, 255 )
                exports.STONEGroups:outputGroupMessage ( "The turf war in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." is paused due to both gangs in the turf", turfLocs[id].owner, 255, 255, 255 )
            else
                -- Add Points To Attackers
                if ( isGangInTurf ) then 
                    -- Prep the war 
                    if ( turfLocs[id].attackProg <= 0 ) then
                        turfLocs[id].prepProg = data.prepProg + 2
                        if ( turfLocs[id].prepProg >= 100 ) then
                            turfLocs[id].prepProg = 0
                            turfLocs[id].attackProg = 1
                            beginTurfWarOnTurf ( id )
                        end
                    -- Attack War
                    else
                        turfLocs[id].attackProg = turfLocs[id].attackProg + 1
                        if ( turfLocs[id].attackProg >= 100 ) then 
                            exports.STONEGroups:outputGroupMessage ( "Your gang has captured a turf in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." from the "..turfLocs[id].owner.." gang! Great job!", turfLocs[id].attackers, 0, 255, 0)
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost a turf in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].attackers.." gang.", turfLocs[id].owner, 255, 0, 0)
                            setTurfOwner ( id, turfLocs[id].attackers )
                        end
                    end
                    
                -- Take points from attackers
                else 
                    -- Prepare war
                    if ( turfLocs[id].attackProg <= 0 ) then
                        turfLocs[id].prepProg = data.prepProg - 2
                        if ( turfLocs[id].prepProg <= 0 ) then
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost the turf preparation war in "..getZoneName(x,y,z)..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].owner.." gang!", turfLocs[id].attackers, 255, 0, 0 )
                            exports.STONEGroups:outputGroupMessage ( "Your gang has defended the turf in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).."!", turfLocs[id].owner..", from the "..turfLocs[id].attackers.." gang, when it was being preped for a war", 0, 255, 0 )
                            setTurfOwner ( id, turfLocs[id].owner )
                        end 
                    -- Attacking war
                    else 
                        turfLocs[id].attackProg = data.attackProg - 1
                        if ( turfLocs[id].attackProg <= 0 ) then
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost the turf war in "..getZoneName(x,y,z)..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].owner.." gang!", turfLocs[id].attackers, 255, 0, 0 )
                            exports.STONEGroups:outputGroupMessage ( "Your gang has defended the turf in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).." from the "..turfLocs[id].attackers.." gang", turfLocs[id].owner, 0, 255, 0 )
                            setTurfOwner ( id, turfLocs[id].owner )
                        end 
                    end
                end
            end
            for i, v in pairs ( players ) do
                for k, p in pairs ( v ) do 
                    triggerClientEvent ( p, "NGTurfs:upadateClientInfo", p, turfLocs [ id ] )
                end
            end
        end
    end
end, 800, 0 )
addEvent ( "NGTurfs:onTurfProgressChange", true )

--[[
addCommandHandler ( "attackprog", function ( p )
    local gangAttacks = { }
    local g = exports.STONEGroups:getPlayerGroup ( p )
    if ( not g ) then
        return exports.NGMessages:sendclientMessage ( "You're not in a gang", p, 255, 255, 0)
    end
    for i, v in pairs ( turfLocs ) do
        if ( v.attackers and v.attackers == g ) then
            gangAttacks [ i ] = true
        end 
    end 
    if ( table.len ( gangAttacks ) == 0 ) then
        return exports.NGMessages:sendClientMessage ( "Your gang isn't involved in any gang wars right now.", p, 255, 255, 0 )
    end 
    for id, _ in pairs ( gangAttacks ) do 
        local x ,y, z = getElementPosition ( turfLocs[id].col )
        outputChatBox ( "----Turf War Status---", p, 255, 255, 255, false )
        outputChatBox ( "Current owner: "..turfLocs[id].owner, p, 255, 255, 255, false )
        outputChatBox ( "Attacker: "..turfLocs[id].attackers, p, 255, 255, 255, false )
        outputChatBox ( "Prep Progress: "..turfLocs[id].prepProg.."%", p, 255, 255, 255, false )
        outputChatBox ( "Attack Progress: "..turfLocs[id].attackProg.."%", p, 255, 255, 255, false )
        outputChatBox ( "Turf Location: "..getZoneName ( x, y, z )..", "..getZoneName ( x, y, z, true ), p, 255, 255, 255, false )
        outputChatBox ( "Turf Server-ID: "..id, p, 255, 255, 255, false )
    end
end )]]

function table.len ( tb ) 
    local c = 0
    for i, v in pairs ( tb ) do
        c = c + 1
    end
    return c
end

function beginTurfWarOnTurf ( id )
    local d = turfLocs [ id ]
    local x, y, z = getElementPosition ( d.col ) 
    exports.STONEGroups:outputGroupMessage ( "Your gang has begun a turf war in "..getZoneName ( x, y, z)..", "..getZoneName ( x, y, z, true ).." against the "..d.owner.." gang! Get there an help!", d.attackers, 255, 255, 0 )
    exports.STONEGroups:outputGroupMessage ( "One of your turfs in "..getZoneName ( x, y, z)..", "..getZoneName ( x, y, z, true ).." is being attacked by the "..d.attackers.." gang!", d.owners, 255, 0, 0 )
    setRadarAreaColor ( d.radar, 255, 255, 255, 170 )
end

function setTurfOwner ( id, owner )
    local r, g, b = exports.STONEGroups:getGroupColor ( owner )
    if ( owner == "server" ) then r, g, b = 255, 255, 255 end
    
    setRadarAreaFlashing ( turfLocs[id].radar, false )
    turfLocs[id].owner = owner
    turfLocs[id].attackers = nil
    turfLocs[id].attackProg = 0
    setRadarAreaColor ( turfLocs[id].radar, r or 255, g or 255, b or 255, 120 )
    saveTurfs ( )
end

function getTurfs ( ) 
    return turfLocs
end 

function saveTurfs ( )
    for id, data in pairs ( turfLocs ) do 
        exports.NGSQL:db_exec ( "UPDATE turfs SET owner=? WHERE id=?", data.owner, id )
    end
    return true
end

addEventHandler( "onResourceStart", resourceRoot, function ( )
    exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS turfs ( id INT, owner VARCHAR(50), x FLOAT, y FLOAT, z FLOAT, width INT, height INT )" )
    local query = exports.NGSQL:db_query ( "SELECT * FROM turfs" )
    if ( #query == 0 ) then 
        local data = { 
            { -1867.8, -107.43, 15.1, 58, 65 },
            { -1866.5, -26.36, 15.29, 49, 200 },
            { -1811.33, 743.43, 20, 85, 85 },
            { -1991.5, 862.62, 34, 79, 42 },
            { -2799.25, -200.6, 7.19, 83, 120 },
            { -2136.84, 120.12, 30, 120, 190 },
            { -2516.52, 718.16, 27.97, 118, 80 },
            { -2516.41, 578.19, 16.62, 117, 120 },
            { -2596.49, 818.05, 49.98, 59, 80 },
            { -2453.17, 947.58, 45.43, 54, 80  },
            { -2740.6, 344.59, 4.41, 68, 61 },
            { -2696.24, 227.35, 4.33, 39.5, 50.5 },
            { -2397.31, 82.99, 35.3, 133, 160 },
            { -2095.33, -280.06, 35.32, 84, 176 },
            { -1980.58, 107.69, 27.68, 59, 62 },
            { -2129.01, 741.71, 48, 112, 57 },
            { -2243.24, 928.4, 66.65, 87, 154 },
            { -1701.62, 743.44, 10, 129, 83 },
            { -2696.23, -59.88, 4.73, 83, 89 },
            { -2541.18, -720.16, 135, 55, 125 }
        }
        outputDebugString ( "NGTurf: 0 Turfs found -- Generating ".. tostring ( #data ) )
        for i, v in pairs ( data ) do 
            x = { 
                ['x'] = v[1],
                ['y'] = v[2],
                ['z'] = v[3],
                ['width'] = v[4],
                ['height'] = v[5],
                ['owner'] = "server"
            }
            
            query = x;
            
            exports.NGSQL:db_exec ( "INSERT INTO turfs ( id, owner, x, y, z, width, height ) VALUES ( ?, ?, ?, ?, ?, ?, ? )",
                tostring ( i ), "server", tostring ( x['x'] ), tostring ( x['y'] ), tostring ( x['z'] ), tostring ( x['width'] ), x['height'] );
        end
    end 
    
    for i, v in pairs ( query ) do
        local id, owner, x, y, z, width, height = tonumber ( v['id'] ), v['owner'], tonumber ( v['x'] ), tonumber ( v['y'] ), tonumber ( v['z'] ), tonumber ( v['width'] ), tonumber ( v['height'] )
        createTurf ( x, y, z, width, height, owner, id )
    end
end )


-- Group payout timer 
function sendTurfPayout ( ) 
    local groupTurfs = { }
    for i, v in pairs ( turfLocs ) do 
        if ( not groupTurfs [ v.owner ] ) then 
            groupTurfs [ v.owner ] = 0
        end 

        if ( not v.attackers ) then 
            groupTurfs [ v.owner ] = groupTurfs [ v.owner ] + 1
        end   
    end

    for i, v in pairs ( getElementsByType ( 'player' ) ) do 
        local g = exports.STONEGroups:getPlayerGroup ( v ) 
        if ( g and groupTurfs [ g ] and groupTurfs [ g ] > 0 ) then 
            local c = groupTurfs [ g ] * tonumber ( get ( "*PAYOUT_CASH" ) )
            givePlayerMoney ( v, c )
            exports.NGMessages:sendClientMessage ( "Turfing: Here is $"..tostring(c).." for having "..tostring ( groupTurfs [ g ] ).." turfs ($10000/turf)", v, 0, 255, 0 )
        end
    end
end 
setTimer ( sendTurfPayout, (60*tonumber(get("*PAYOUT_TIME")))*1000, 0 )


 

 

 

 

Help me Please? When I do /addturf I Does Not Add

Edited by jhxp
Added code tags
Link to comment
function addTurf( player, cmd, width, height )
    if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
        if ( not width ) then return exports.NGMessages:sendClientMessage ( "Missing width argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( not height ) then return exports.NGMessages:sendClientMessage ( "Missing height argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( type ( width ) == 'number' and type ( height ) == 'number' ) then
            local x, y, z = getElementPosition ( player )
            createTurf ( x, y, z, width, height, "server", id )
            exports.NGSQL:db_query ( "INSERT INTO turfs(`id`, `owner`, `x`, `y`, `z`, `width`, `height`)  VALUES (?, ?, ?, ?, ?, ?, ?)", id, 'server', math.floor(x), math.floor(y), math.floor(z), tonumber(width), tonumber(height))
            exports.NGMessages:sendClientMessage( "NGTurf: A new turf was added successfully", player, 0, 255, 0 )
        else
            exports.NGMessages:sendClientMessage( "NGTurf: Expected numbers for width and/or height", player, 0, 255, 0 )
        end
    end
end
addCommandHandler( "addturf", addTurf )

The 2nd line is using an export function from the resource called NGAdministration, isPlayerStaff probably checks if the player is a staff member, don't know about getPlayerStaffLevel. Check if the statements are returning true.

Link to comment

Next time use a spoiler, so the lines number are displayer and it's easier for everyone to help.

Spoiler

This is your code:



local r, g, b = exports.STONEGroups:getGroupColor ( owner )
    
    if ( not r and not g and not b ) then
        owner = "server"
    else
        if ( not r ) then r = 255; end
        if ( not g ) then g = 255; end
        if ( not b ) then b = 255; end
    end
    
    if ( owner == "server" ) then
        r, g, b = 255, 255, 255
    end

    local _rad = createRadarArea ( x, y, width, height, r, g, b, 170, getRootElement ( ) )
    local col = createColCuboid ( x, y, z-5, width, height, 35)

    local id = 0;
    
    if ( forcedId ) then
        if ( turfLocs [ forcedId ] ) then destroyTurf ( forcedId ); end
        id = forcedId;
    else
        while ( turfLocs [ id ] ) do
            id = id + 1;
        end
    end

    turfLocs[id] = { }
    turfLocs[id].col = col
    turfLocs[id].radar = _rad
    turfLocs[id].owner = owner or "server"
    turfLocs[id].attackers = nil
    turfLocs[id].attackProg = 0
    turfLocs[id].prepProg = 0
    setElementData ( turfLocs[id].col, "NGTurf:TurfId", id )
    setElementData ( turfLocs[id].col, "NGTurf:TurffingTable", turfLocs [ id ] )
    addEventHandler ( "onColShapeHit", turfLocs[id].col, onColShapeHit )
    addEventHandler ( "onColShapeLeave", turfLocs[id].col, onColShapeLeave )
    return turfLocs[id];
end

function destroyTurf ( id )
    if ( turfLocs [ id ] ) then
        
        removeEventHandler ( "onColShapeHit", turfLocs[id].col, onColShapeHit )
        removeEventHandler ( "onColShapeLeave", turfLocs[id].col, onColShapeLeave )
        
        destroyElement ( turfLocs[id].col );
        destroyElement ( turfLocs[id].radar );
        
        outputDebugString ( "NGTurf: Turf #"..tostring(id).." has been destroyed (Owner: "..turfLocs[id].owner..")" );
        
        turfLocs[id] = nil;
        
        return true;
        
    end
    return false;
end 

function addTurf( player, cmd, width, height )
    if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
        if ( not width ) then return exports.NGMessages:sendClientMessage ( "Missing width argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( not height ) then return exports.NGMessages:sendClientMessage ( "Missing height argument, correct syntax: /addturf width height", player, 225, 0, 0) end
        if ( type ( width ) == 'number' and type ( height ) == 'number' ) then
            local x, y, z = getElementPosition ( player )
            createTurf ( x, y, z, width, height, "server", id )
            exports.NGSQL:db_query ( "INSERT INTO turfs(`id`, `owner`, `x`, `y`, `z`, `width`, `height`)  VALUES (?, ?, ?, ?, ?, ?, ?)", id, 'server', math.floor(x), math.floor(y), math.floor(z), tonumber(width), tonumber(height))
            exports.NGMessages:sendClientMessage( "NGTurf: A new turf was added successfully", player, 0, 255, 0 )
        else
            exports.NGMessages:sendClientMessage( "NGTurf: Expected numbers for width and/or height", player, 0, 255, 0 )
        end
    end
end
addCommandHandler( "addturf", addTurf )

function deleteturf( player, cmd )
    if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
        local x, y, z = getElementPosition(player)
        local counter = 0
        for w, area in ipairs(getElementsByType("radararea")) do
            local ax, ay, az = getElementPosition ( area )
            if ax > (x-5) and ax < (x+5) and ay > (y-5) and ay < (y+5) then
                destroyElement(area)
                counter = counter + 1
            end
        end
        for w, colshape in ipairs(getElementsByType("colshape")) do
            local ax,ay,az = getElementPosition(colshape)
            if ax > (x-5) and ax < (x+5) and ay > (y-5) and ay < (y+5) and getElementData( colshape, "NGTurf:TurfId") then
                destroyElement(colshape)
            end
        end
        if counter > 0 then
            exports.NGMessages:sendClientMessage( "NGTurf: Turf was removed from database successfully", player, 0, 255, 0 )
            exports.NGSQL:db_exec("DELETE FROM turfs WHERE X>? AND X<? AND Y>? AND Y<?", math.floor(x)-5, math.floor(x)+5, math.floor(y)-5, math.floor(y)+5 )
        else
            exports.NGMessages:sendClientMessage( "NGTurf: No turfs was found within this range, stand near by the left corner of radar area", player, 255, 0, 0 )
        end
    end
end
addCommandHandler( "deleteturf", deleteturf )

function updateTurfGroupColor ( group )
    local r, g, b = exports.STONEGroups:getGroupColor ( group )
    for i, v in pairs ( turfLocs ) do
        if ( v.owner == group ) then
            setRadarAreaColor ( v.radar, r, g, b, 120 )
        end 
    end 
end 

function onColShapeHit ( player ) 
    if ( player and isElement ( player ) and getElementType ( player ) == "player" and not isPedInVehicle ( player ) ) then
        local gang = exports.STONEGroups:getPlayerGroup ( player )
        
        triggerClientEvent ( player, "NGTurfs:onClientEnterTurfArea", player, turfLocs [ id ] )
        if ( not gang ) then
            return exports.NGMessages:sendClientMessage ( "You're not in a gang, you cannot turf.", player, 255, 255, 0 )
        end

        local id = tonumber ( getElementData ( source, "NGTurf:TurfId" ) )
        
        if ( turfLocs[id].owner == gang ) then
            return
        end

        if ( turfLocs[id].attackers and turfLocs[id].attackers ~= gang ) then
            return exports.NGMessages:sendClientMessage ( "The "..tostring(turfLocs[id].attackers).." gang is already trying to take this turf. Try again later.", player, 255, 0, 0 )
        end

        if ( not turfLocs[id].attackers ) then
            exports.NGMessages:sendClientMessage ( "You have started to prepare a turf war. Find cover, call backup, and wait for it to begin.", player, 255, 255, 0 )
            local x, y, z = getElementPosition ( source )
            exports.STONEGroups:outputGroupMessage ( getPlayerName ( player ).." is preparing a turf war with "..tostring(turfLocs[id].owner).." in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).."! Get there to help him, the war will start in 2 minutes!", gang, 255, 255, 0 )
            setRadarAreaFlashing ( turfLocs[id].radar, true )
            turfLocs[id].attackers = gang
            turfLocs[id].attackProg = 0
            turfLocs[id].prepProg = 0
            setElementData ( turfLocs[id].col, "NGTurf:TurffingTable", turfLocs [ id ] )
        end
    end
end

function onColShapeLeave ( player ) 
    if ( player and getElementType ( player ) == "player" ) then
        triggerClientEvent ( player, "NGTurfs:onClientExitTurfArea", player, turfLocs [ getElementData ( source, "NGTurf:TurfId" ) ] )
    end
end


setTimer ( function ( ) 
    for id, data in pairs ( turfLocs ) do 
        if ( data.attackers ) then
            local players = { attackers = { }, owners = { } }
            local isGangInTurf = false
            local isOwnerInTurf = false
            for i, v in pairs ( getElementsWithinColShape ( data.col, "player" ) ) do
                local g = exports.STONEGroups:getPlayerGroup ( v )
                if ( g == data.attackers ) then
                    isGangInTurf = true
                    table.insert ( players.attackers, v )
                elseif ( g == data.owner ) then
                    isOwnerInTurf = true
                    table.insert ( players.owners, v )
                end
            end

            local x, y, z = getElementPosition ( data.col )
            if ( isOwnerInTurf and isGangInTurf ) then
                exports.STONEGroups:outputGroupMessage ( "The turf war in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." is paused due to both gangs in the turf", turfLocs[id].attackers, 255, 255, 255 )
                exports.STONEGroups:outputGroupMessage ( "The turf war in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." is paused due to both gangs in the turf", turfLocs[id].owner, 255, 255, 255 )
            else
                -- Add Points To Attackers
                if ( isGangInTurf ) then 
                    -- Prep the war 
                    if ( turfLocs[id].attackProg <= 0 ) then
                        turfLocs[id].prepProg = data.prepProg + 2
                        if ( turfLocs[id].prepProg >= 100 ) then
                            turfLocs[id].prepProg = 0
                            turfLocs[id].attackProg = 1
                            beginTurfWarOnTurf ( id )
                        end
                    -- Attack War
                    else
                        turfLocs[id].attackProg = turfLocs[id].attackProg + 1
                        if ( turfLocs[id].attackProg >= 100 ) then 
                            exports.STONEGroups:outputGroupMessage ( "Your gang has captured a turf in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." from the "..turfLocs[id].owner.." gang! Great job!", turfLocs[id].attackers, 0, 255, 0)
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost a turf in "..getZoneName ( x,y,z )..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].attackers.." gang.", turfLocs[id].owner, 255, 0, 0)
                            setTurfOwner ( id, turfLocs[id].attackers )
                        end
                    end
                    
                -- Take points from attackers
                else 
                    -- Prepare war
                    if ( turfLocs[id].attackProg <= 0 ) then
                        turfLocs[id].prepProg = data.prepProg - 2
                        if ( turfLocs[id].prepProg <= 0 ) then
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost the turf preparation war in "..getZoneName(x,y,z)..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].owner.." gang!", turfLocs[id].attackers, 255, 0, 0 )
                            exports.STONEGroups:outputGroupMessage ( "Your gang has defended the turf in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).."!", turfLocs[id].owner..", from the "..turfLocs[id].attackers.." gang, when it was being preped for a war", 0, 255, 0 )
                            setTurfOwner ( id, turfLocs[id].owner )
                        end 
                    -- Attacking war
                    else 
                        turfLocs[id].attackProg = data.attackProg - 1
                        if ( turfLocs[id].attackProg <= 0 ) then
                            exports.STONEGroups:outputGroupMessage ( "Your gang lost the turf war in "..getZoneName(x,y,z)..", "..getZoneName ( x,y,z, true ).." to the "..turfLocs[id].owner.." gang!", turfLocs[id].attackers, 255, 0, 0 )
                            exports.STONEGroups:outputGroupMessage ( "Your gang has defended the turf in "..getZoneName(x,y,z)..", "..getZoneName(x,y,z,true).." from the "..turfLocs[id].attackers.." gang", turfLocs[id].owner, 0, 255, 0 )
                            setTurfOwner ( id, turfLocs[id].owner )
                        end 
                    end
                end
            end
            for i, v in pairs ( players ) do
                for k, p in pairs ( v ) do 
                    triggerClientEvent ( p, "NGTurfs:upadateClientInfo", p, turfLocs [ id ] )
                end
            end
        end
    end
end, 800, 0 )
addEvent ( "NGTurfs:onTurfProgressChange", true )

--[[
addCommandHandler ( "attackprog", function ( p )
    local gangAttacks = { }
    local g = exports.STONEGroups:getPlayerGroup ( p )
    if ( not g ) then
        return exports.NGMessages:sendclientMessage ( "You're not in a gang", p, 255, 255, 0)
    end
    for i, v in pairs ( turfLocs ) do
        if ( v.attackers and v.attackers == g ) then
            gangAttacks [ i ] = true
        end 
    end 
    if ( table.len ( gangAttacks ) == 0 ) then
        return exports.NGMessages:sendClientMessage ( "Your gang isn't involved in any gang wars right now.", p, 255, 255, 0 )
    end 
    for id, _ in pairs ( gangAttacks ) do 
        local x ,y, z = getElementPosition ( turfLocs[id].col )
        outputChatBox ( "----Turf War Status---", p, 255, 255, 255, false )
        outputChatBox ( "Current owner: "..turfLocs[id].owner, p, 255, 255, 255, false )
        outputChatBox ( "Attacker: "..turfLocs[id].attackers, p, 255, 255, 255, false )
        outputChatBox ( "Prep Progress: "..turfLocs[id].prepProg.."%", p, 255, 255, 255, false )
        outputChatBox ( "Attack Progress: "..turfLocs[id].attackProg.."%", p, 255, 255, 255, false )
        outputChatBox ( "Turf Location: "..getZoneName ( x, y, z )..", "..getZoneName ( x, y, z, true ), p, 255, 255, 255, false )
        outputChatBox ( "Turf Server-ID: "..id, p, 255, 255, 255, false )
    end
end )]]

function table.len ( tb ) 
    local c = 0
    for i, v in pairs ( tb ) do
        c = c + 1
    end
    return c
end

function beginTurfWarOnTurf ( id )
    local d = turfLocs [ id ]
    local x, y, z = getElementPosition ( d.col ) 
    exports.STONEGroups:outputGroupMessage ( "Your gang has begun a turf war in "..getZoneName ( x, y, z)..", "..getZoneName ( x, y, z, true ).." against the "..d.owner.." gang! Get there an help!", d.attackers, 255, 255, 0 )
    exports.STONEGroups:outputGroupMessage ( "One of your turfs in "..getZoneName ( x, y, z)..", "..getZoneName ( x, y, z, true ).." is being attacked by the "..d.attackers.." gang!", d.owners, 255, 0, 0 )
    setRadarAreaColor ( d.radar, 255, 255, 255, 170 )
end

function setTurfOwner ( id, owner )
    local r, g, b = exports.STONEGroups:getGroupColor ( owner )
    if ( owner == "server" ) then r, g, b = 255, 255, 255 end
    
    setRadarAreaFlashing ( turfLocs[id].radar, false )
    turfLocs[id].owner = owner
    turfLocs[id].attackers = nil
    turfLocs[id].attackProg = 0
    setRadarAreaColor ( turfLocs[id].radar, r or 255, g or 255, b or 255, 120 )
    saveTurfs ( )
end

function getTurfs ( ) 
    return turfLocs
end 

function saveTurfs ( )
    for id, data in pairs ( turfLocs ) do 
        exports.NGSQL:db_exec ( "UPDATE turfs SET owner=? WHERE id=?", data.owner, id )
    end
    return true
end

addEventHandler( "onResourceStart", resourceRoot, function ( )
    exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS turfs ( id INT, owner VARCHAR(50), x FLOAT, y FLOAT, z FLOAT, width INT, height INT )" )
    local query = exports.NGSQL:db_query ( "SELECT * FROM turfs" )
    if ( #query == 0 ) then 
        local data = { 
            { -1867.8, -107.43, 15.1, 58, 65 },
            { -1866.5, -26.36, 15.29, 49, 200 },
            { -1811.33, 743.43, 20, 85, 85 },
            { -1991.5, 862.62, 34, 79, 42 },
            { -2799.25, -200.6, 7.19, 83, 120 },
            { -2136.84, 120.12, 30, 120, 190 },
            { -2516.52, 718.16, 27.97, 118, 80 },
            { -2516.41, 578.19, 16.62, 117, 120 },
            { -2596.49, 818.05, 49.98, 59, 80 },
            { -2453.17, 947.58, 45.43, 54, 80  },
            { -2740.6, 344.59, 4.41, 68, 61 },
            { -2696.24, 227.35, 4.33, 39.5, 50.5 },
            { -2397.31, 82.99, 35.3, 133, 160 },
            { -2095.33, -280.06, 35.32, 84, 176 },
            { -1980.58, 107.69, 27.68, 59, 62 },
            { -2129.01, 741.71, 48, 112, 57 },
            { -2243.24, 928.4, 66.65, 87, 154 },
            { -1701.62, 743.44, 10, 129, 83 },
            { -2696.23, -59.88, 4.73, 83, 89 },
            { -2541.18, -720.16, 135, 55, 125 }
        }
        outputDebugString ( "NGTurf: 0 Turfs found -- Generating ".. tostring ( #data ) )
        for i, v in pairs ( data ) do 
            x = { 
                ['x'] = v[1],
                ['y'] = v[2],
                ['z'] = v[3],
                ['width'] = v[4],
                ['height'] = v[5],
                ['owner'] = "server"
            }
            
            query = x;
            
            exports.NGSQL:db_exec ( "INSERT INTO turfs ( id, owner, x, y, z, width, height ) VALUES ( ?, ?, ?, ?, ?, ?, ? )",
                tostring ( i ), "server", tostring ( x['x'] ), tostring ( x['y'] ), tostring ( x['z'] ), tostring ( x['width'] ), x['height'] );
        end
    end 
    
    for i, v in pairs ( query ) do
        local id, owner, x, y, z, width, height = tonumber ( v['id'] ), v['owner'], tonumber ( v['x'] ), tonumber ( v['y'] ), tonumber ( v['z'] ), tonumber ( v['width'] ), tonumber ( v['height'] )
        createTurf ( x, y, z, width, height, owner, id )
    end
end )


-- Group payout timer 
function sendTurfPayout ( ) 
    local groupTurfs = { }
    for i, v in pairs ( turfLocs ) do 
        if ( not groupTurfs [ v.owner ] ) then 
            groupTurfs [ v.owner ] = 0
        end 

        if ( not v.attackers ) then 
            groupTurfs [ v.owner ] = groupTurfs [ v.owner ] + 1
        end   
    end

    for i, v in pairs ( getElementsByType ( 'player' ) ) do 
        local g = exports.STONEGroups:getPlayerGroup ( v ) 
        if ( g and groupTurfs [ g ] and groupTurfs [ g ] > 0 ) then 
            local c = groupTurfs [ g ] * tonumber ( get ( "*PAYOUT_CASH" ) )
            givePlayerMoney ( v, c )
            exports.NGMessages:sendClientMessage ( "Turfing: Here is $"..tostring(c).." for having "..tostring ( groupTurfs [ g ] ).." turfs ($10000/turf)", v, 0, 255, 0 )
        end
    end
end 
setTimer ( sendTurfPayout, (60*tonumber(get("*PAYOUT_TIME")))*1000, 0 )

 

Also are there errors? copy and paste if there are. I'm too lazy to read this all :(

Link to comment
function addTurf( player, cmd, width, height)
	if ( exports.NGAdministration:isPlayerStaff ( player ) and exports.NGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then
		if ( not width ) then return exports.NGMessages:sendClientMessage ( "Missing width argument, correct syntax: /addturf width height", player, 225, 0, 0) end
		if ( not height ) then return exports.NGMessages:sendClientMessage ( "Missing height argument, correct syntax: /addturf width height", player, 225, 0, 0) end
		-------if ( type ( width ) ~= 'string' and type ( height ) ~= 'string' ) then return exports.SAEGMessages:sendClientMessage( "SAEGTurf: Expected numbers for width and/or height", player, 0, 255, 0 ) end
			local x, y, z = getElementPosition ( player )
			createTurf ( x, y, z, width, height, "server", id )
			exports.NGSQL:db_query ( "INSERT INTO turfs(`id`, `owner`, `x`, `y`, `z`, `width`, `height`)  VALUES (?, ?, ?, ?, ?, ?, ?)", id, 'server', math.floor(x), math.floor(y), math.floor(z), tonumber(width), tonumber(height))
			exports.NGMessages:sendClientMessage( "SAEGTurf: A new turf was added successfully", player, 0, 255, 0 )
	end
end
addCommandHandler( "addturf", addTurf )

 

  • Like 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...