Best-Killer Posted December 2, 2016 Share Posted December 2, 2016 Hello Guys !! This is Nerd Gaming Turfs sys local turfLocs = { } function createTurf ( x, y, z, width, height, owner, forcedId ) local owner = tostring ( owner or "server" ) local r, g, b = exports.SAEGGroups: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, "SAEGTurf:TurfId", id ) setElementData ( turfLocs[id].col, "SAEGTurf: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 ( "SAEGTurf: 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.SAEGAdministration:isPlayerStaff ( player ) and exports.SAEGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 4 ) then if ( not width ) then return exports.SAEGMessages:sendClientMessage ( "Missing width argument, correct syntax: /addturf width height", player, 225, 0, 0) end if ( not height ) then return exports.SAEGMessages: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.SAEGMessages:sendClientMessage( "SAEGTurf: A new turf was added successfully", player, 0, 255, 0 ) else exports.SAEGMessages:sendClientMessage( "SAEGTurf: Expected numbers for width and/or height", player, 0, 255, 0 ) end end end addCommandHandler( "addturf", addTurf ) function deleteturf( player, cmd ) if ( exports.SAEGAdministration:isPlayerStaff ( player ) and exports.SAEGAdministration:getPlayerStaffLevel ( player, 'int' ) >= 5 ) 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.SAEGMessages:sendClientMessage( "SAEGTurf: 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.SAEGMessages: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.nggroups: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.SAEGGroups:getPlayerGroup ( player ) if getTeamName(getPlayerTeam(player)) ~= "Criminals" then exports['SAEGMessages']:sendClientMessage("You must be criminal.",255,0,0) return end triggerClientEvent ( player, "SAEGTurfs:onClientEnterTurfArea", player, turfLocs [ id ] ) if ( not gang ) then return exports.SAEGMessages:sendClientMessage ( "You're not in a gang, you cannot turf.", player, 255, 255, 0 ) end triggerClientEvent ( player, "SAEGTurfs: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, "SAEGTurf:TurfId" ) ) if ( turfLocs[id].owner == gang ) then return end if ( turfLocs[id].attackers and turfLocs[id].attackers ~= gang ) then return exports.SAEGMessages: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.SAEGMessages: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.SAEGGroups: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, "SAEGTurf:TurffingTable", turfLocs [ id ] ) end end end function onColShapeLeave ( player ) if ( player and getElementType ( player ) == "player" ) then triggerClientEvent ( player, "SAEGTurfs:onClientExitTurfArea", player, turfLocs [ getElementData ( source, "SAEGTurf: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.NGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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.SAEGroups: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, "SAEGTurfs:upadateClientInfo", p, turfLocs [ id ] ) end end end end end, 800, 0 ) addEvent ( "SAEGTurfs:onTurfProgressChange", true ) --[[ addCommandHandler ( "attackprog", function ( p ) local gangAttacks = { } local g = exports.SAEGGroups:getPlayerGroup ( p ) if ( not g ) then return exports.SAEGMessages: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.SAEGMessages: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.SAEGGroups: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.SAEGGroups: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.SAEGGroups: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[i] = 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.SAEGGroups:getPlayerGroup ( v ) if ( g and groupTurfs [ g ] and groupTurfs [ g ] > 0 ) then local c = groupTurfs [ g ] * tonumber ( get ( "*PAYOUT_CASH" ) ) givePlayerMoney ( v, c ) exports.SAEGMessages:sendClientMessage ( "Turfing: Here is $"..tostring(c).." for having "..tostring ( groupTurfs [ g ] ).." turfs ($700/turf)", v, 0, 255, 0 ) end end end setTimer ( sendTurfPayout, (60*tonumber(get("*PAYOUT_TIME")))*1000, 0 ) i want add command /turfs when i use it i see in chatbox example : Last kings have 10 turfs Hooliganz Have 30 Turfs ...... i don't know what i have use to make it Note Give me examples for do it or if it's ez do it (if you have time , but make sure if it's ez pz if not give me examples to learn ) And thx all Link to comment
LoPollo Posted December 2, 2016 Share Posted December 2, 2016 I'm not an expert in SQL (never used it) but till someone reply you can try executeSQLQuery doing a group by on the team id (owner) counting the IDs Something like Select owner, Count(id) as turfsCount From turfs Group By owner; Edit: also dbQuery... it's up to you Link to comment
Best-Killer Posted December 2, 2016 Author Share Posted December 2, 2016 function test () 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 index, clan in pairs(exports.SAEGClans:getClanList(groupTurfs)) do local clanList = tostring(clan["clan_name"]) if ( groupTurfs [ clanList ] or 0 ) then outputChatBox ( "Test : " ..tostring(groupTurfs [ clanList ]).. "",) end end end addCommandHandler("ct",test) with that i'm geting how much the name have turf if it's have but i'm not geting the clan name ! what i have do now guys Link to comment
LoPollo Posted December 2, 2016 Share Posted December 2, 2016 I don't understand 14 minutes ago, Best-Killer said: with that i'm geting how much the name have turf if it's have but i'm not geting the clan name ! what i have do now guys Don't you already have??? Link to comment
Best-Killer Posted December 2, 2016 Author Share Posted December 2, 2016 ah sory , i have just how much have turfs without clanName Link to comment
LoPollo Posted December 2, 2016 Share Posted December 2, 2016 (edited) I still don't understand: isn't this what you have? groupTurfs[_owner] = _count where _owner is the team name and _count is the number of turfs and you are looking for the _owner Pratically: replace outputChatBox ( "Test : " ..tostring(groupTurfs [ clanList ]).. "",) with outputChatBox ( "Test : "..clanList.."->"..tostring(groupTurfs [ clanList ]).. "",) Can you explain where i'm wrong? I mean, i'm probably missing something PS: pls align the code you post with indentation? it makes it so much easier to read PS: why "or 0"? if ( groupTurfs [ clanList ] or 0 ) then Edited December 2, 2016 by LoPollo Link to comment
Best-Killer Posted December 2, 2016 Author Share Posted December 2, 2016 function test () 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 index, clan in pairs(exports.SAEGClans:getClanList(groupTurfs)) do local clanList = tostring(clan["clan_name"]) if ( groupTurfs [ clanList ] or 0 ) then outputChatBox ( "I Test : " ..tostring(groupTurfs [ clanList ]).. " apples and oranges.",) end end end addCommandHandler("ct",test) function getClanList() local data = executeSQLQuery("SELECT * FROM clans") return data end what i'm trying to do ? now i'm geting : how much the clan have turfs i want get , the clan name & How much the clan have turfs Link to comment
Best-Killer Posted December 2, 2016 Author Share Posted December 2, 2016 oh sory i don't see what you posted lol function test () 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 index, clan in pairs(exports.SAEGClans:getClanList(groupTurfs)) do local clanList = tostring(clan["clan_name"]) if ( groupTurfs [ clanList ] or 0 ) then outputChatBox ( "Test : "..clanList.."->"..tostring(groupTurfs [ clanList ]).. "") end end end addCommandHandler("ct",test) now i'm geting full clans list with how much have turfs , i want if clan don't have turfs it's don't show in that chat ! Please help ! 1 Link to comment
LoPollo Posted December 2, 2016 Share Posted December 2, 2016 (edited) So if the number of turfs owned by a clan is equal to 0, the text will NOT be printed? Line 14 --replace if ( groupTurfs [ clanList ] or 0 ) then --with if groupTurfs [ clanList ] and groupTurgs[clanList]~=0 then When you wrote "or 0" you make lua take 0 as condition if groupTurfs[clanList] returned a false value, in which case the if statement was exactly equal to: if 0 then and since 0 is a non false value (is not false and is not nil) it will be evalutated as true, and the code inside the if gets executed Edited December 2, 2016 by LoPollo Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now