Search the Community

Showing results for tags 'help'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Multi Theft Auto: San Andreas 1.x
    • Support for MTA:SA 1.x
    • User Guides
    • Open Source Contributors
    • Suggestions
    • Ban appeals
  • General MTA
    • News
    • Media
    • Site/Forum/Discord/Mantis/Wiki related
    • MTA Chat
    • Other languages
  • MTA Community
    • Scripting
    • Maps
    • Resources
    • Other Creations & GTA modding
    • Competitive gameplay
    • Servers
  • Other
  • Archive
  • Private Bugtracker

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Gang


Location


Occupation


Interests

Found 631 results

  1. Hello. Since I got a new PC, my draw distance is bad, even though its on 100%. Any solutions? And don't you dare call me a lowpostie.
  2. Hello! sorry for the inconvenience again, could anyone guide me or give me a code to be able to "project" or "show" the local player model in a GUI? I try to get an inventory like PUBG, but I still can not figure out how to link a specific weapon number. I also have the problem that when the ammunition of a weapon is just automatically reloaded, and when the ammunition reserve is finished it also "erases" the player's weapon.
  3. Hi, I'm trying to make an inventory, but I do not know how to hide it and display it with a key assigned. Try the following: Loading Script failed: Inventario\inv.lua:3: '(' expected near 'inventarioV' My code is the following: addEventHandler("onClientRender", root, function inventarioV() local ammo = tostring(getPedTotalAmmo(localPlayer) - getPedAmmoInClip(localPlayer)) local ammoinclip = tostring(getPedAmmoInClip(localPlayer)) local id = tostring(getPedWeapon( localPlayer )) local id2 = getPedWeapon( localPlayer ) local im = getWeaponNameFromID(getPedWeapon(localPlayer)) -- Imagenes dxDrawImage(screenW * 0.8779, screenH * 0.1380, screenW * 0.0029, screenH * 0.0169, ":Inventario/images/bullet.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(screenW * 0.4081, screenH * 0.1094, screenW * 0.1838, screenH * 0.7813, ":Inventario/images/character.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(screenW * 0.6963, screenH * 0.1719, screenW * 0.2110, screenH * 0.1055, ":Inventario/Inventory/"..id..".png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawRectangle(screenW * 0.0000, screenH * 0.0000, screenW * 1.0000, screenH * 1.0000, tocolor(0, 0, 0, 165), false) dxDrawText(":Onacio", screenW * 0.4015, screenH * 0.0260, screenW * 0.5985, screenH * 0.0612, tocolor(255, 255, 255, 255), 1.50, "default-bold", "center", "center", false, false, false, false, false) dxDrawLine(932 - 1, 102 - 1, 932 - 1, 122, tocolor(238, 237, 237, 111), 1, false) dxDrawLine(952, 102 - 1, 932 - 1, 102 - 1, tocolor(238, 237, 237, 111), 1, false) dxDrawLine(932 - 1, 122, 952, 122, tocolor(238, 237, 237, 111), 1, false) dxDrawLine(952, 122, 952, 102 - 1, tocolor(238, 237, 237, 111), 1, false) dxDrawRectangle(932, 102, 20, 20, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.1250) - 1, (screenW * 0.6096) - 1, screenH * 0.1771, tocolor(251, 251, 251, 117), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.1250) - 1, (screenW * 0.6096) - 1, (screenH * 0.1250) - 1, tocolor(251, 251, 251, 117), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.1771, screenW * 0.6390, screenH * 0.1771, tocolor(251, 251, 251, 117), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.1771, screenW * 0.6390, (screenH * 0.1250) - 1, tocolor(251, 251, 251, 117), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.1250, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.1901) - 1, (screenW * 0.6096) - 1, screenH * 0.2422, tocolor(251, 251, 251, 117), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.1901) - 1, (screenW * 0.6096) - 1, (screenH * 0.1901) - 1, tocolor(251, 251, 251, 117), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.2422, screenW * 0.6390, screenH * 0.2422, tocolor(251, 251, 251, 117), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.2422, screenW * 0.6390, (screenH * 0.1901) - 1, tocolor(251, 251, 251, 117), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.1901, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawText(""..im, screenW * 0.7037, screenH * 0.1328, screenW * 0.8279, screenH * 0.1589, tocolor(255, 255, 255, 255), 1.20, "default-bold", "left", "bottom", false, false, false, false, false) dxDrawText(""..ammoinclip, screenW * 0.8529, screenH * 0.1328, screenW * 0.8765, screenH * 0.1589, tocolor(255, 255, 255, 255), 1.20, "clear", "right", "bottom", false, false, false, false, false) dxDrawText(""..ammo, screenW * 0.8824, screenH * 0.1315, screenW * 0.9044, screenH * 0.1576, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "bottom", false, false, false, false, false) dxDrawLine(screenW * 0.6831, screenH * 0.3073, screenW * 0.9316, screenH * 0.3073, tocolor(255, 255, 255, 255), 1, false) dxDrawText("1", 932, 102, 952, 122, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.3451) - 1, (screenW * 0.6096) - 1, screenH * 0.3971, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.3451) - 1, (screenW * 0.6096) - 1, (screenH * 0.3451) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.3971, screenW * 0.6390, screenH * 0.3971, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.3971, screenW * 0.6390, (screenH * 0.3451) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.3451, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.4102) - 1, (screenW * 0.6096) - 1, screenH * 0.4622, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.4102) - 1, (screenW * 0.6096) - 1, (screenH * 0.4102) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.4622, screenW * 0.6390, screenH * 0.4622, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.4622, screenW * 0.6390, (screenH * 0.4102) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.4102, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.4753) - 1, (screenW * 0.6096) - 1, screenH * 0.5273, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.4753) - 1, (screenW * 0.6096) - 1, (screenH * 0.4753) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.5273, screenW * 0.6390, screenH * 0.5273, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.5273, screenW * 0.6390, (screenH * 0.4753) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.4753, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.6302) - 1, (screenW * 0.6096) - 1, screenH * 0.6823, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.6302) - 1, (screenW * 0.6096) - 1, (screenH * 0.6302) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.6823, screenW * 0.6390, screenH * 0.6823, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.6823, screenW * 0.6390, (screenH * 0.6302) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.6302, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 117), false) dxDrawLine((screenW * 0.6096) - 1, (screenH * 0.6953) - 1, (screenW * 0.6096) - 1, screenH * 0.7474, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, (screenH * 0.6953) - 1, (screenW * 0.6096) - 1, (screenH * 0.6953) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawLine((screenW * 0.6096) - 1, screenH * 0.7474, screenW * 0.6390, screenH * 0.7474, tocolor(254, 254, 254, 140), 1, false) dxDrawLine(screenW * 0.6390, screenH * 0.7474, screenW * 0.6390, (screenH * 0.6953) - 1, tocolor(254, 254, 254, 140), 1, false) dxDrawRectangle(screenW * 0.6096, screenH * 0.6953, screenW * 0.0294, screenH * 0.0521, tocolor(0, 0, 0, 140), false) end ) bindKey ("TAB", "down", inventarioV) And I really do not know how to fix it, my English is mid-level, I can not understand the whole wiki or tutorials on the web. I apologize for the inconvenience, if I knew how to read English, I'd better learn for myself, could someone tell me where I'm failing and why do I have to replace him? or the method that I use to make the design section in my Inventory is not correct?
  4. function ShowControlPanel(seat) seat = getPedOccupiedVehicle (localPlayer) vehiclee = getPedOccupiedVehicle(localPlayer) if (vehiclee) and getPedOccupiedVehicleSeat (localPlayer) == 0 and localPlayer == localPlayer then bool = not bool showCursor(bool) guiSetVisible(ControlPanel,bool) end end bindKey("F2","up",ShowControlPanel) --why this qui show all players? This is clientside and Should show only localplayer
  5. Hi, I'm trying to develop a realistic speaker system. but there is a problem, I can not move the component as it plays -- HELP ME PLS local working = true local stream = playSound("http://91.121.157.114:8421/stream") local moveOn = true function toggleRadio() working = not working if working == false then moveOn = false setSoundVolume(stream, 0) else moveOn = true setSoundVolume(stream, 1) end end bindKey("r","down",toggleRadio) function move() local theVeh = getPedOccupiedVehicle(localPlayer) local getComponent = getVehicleComponents(theVeh) if (theVeh) then for k in pairs (getComponent) do if (k == "alto") then if (not components["alto"]) then local x, y, z = getVehicleComponentPosition(theVeh, k) if (working) then local ls = getSoundLevelData(stream); if (ls ~= false) then if moveOn == true then setVehicleComponentPosition(theVeh,"alto", ls/-100, y, z) end end end end end end end end addEventHandler("onVehicleEnter",root,move)
  6. Hi guys, I made a chatbox script myself and all is working perfectly with no errors or warnings in /debugscript 3. I am using a table to save the messages that will be displayed in the chatbox. This is how a part of it looks like: local chatBox = {} function drawChat() for i,v in ipairs (chatBox) do if i < 15 then dxDrawBorderedText(v, 27, 229 - 15*i, 582, 230, tocolor(255, 255, 255, 255), 1, "default-bold", "left", "top", false, false, false, false, false) end end end addEventHandler("onClientRender", root, drawChat) I have no problems to display the first 14 messages, but now I want the last ( first message) to disappear when there comes a new 15th message. But I have no idea how to script it. So it could be nice if someone could help me.
  7. sorry my photoshop have a error, I used Paint 3D kkk OK I need a help to create system is life heart person, for on life full and empty, 100% IMAGE SELECTION CUT == 50% life == 0% local life = getElementHealt(source) dxdrawimagesection() -- help ?
  8. Hello, can someone give me some hints how to set a carrying animation on a player and he will be able to walk/run? Thanks in advance
  9. The default max money is 99 999 999$. Can i this max money increase to (for example) 200 000 000$?
  10. Hello everyone. I need some help here. I wan't to create a DX Inventory for my server, with some buttons. I created a script that creates the inventory but only 1 button is working. local newInvItems = { {"Assault Rifle"}, {"AK-47"}, {"Sniper"}, {"Pump Shotgun"}, {"Crossbow"}, {"Custom SMG"}, {"Shotgun"}, {"Semi-Automatic Pistol"}, {"Machete"}, {"5.56 Rifle Ammo"}, {"Sniper Rifle Ammo"}, {"12 Gauge"}, {"Pistol Bullet"}, {"Wooden Arrow"}, {"SMG Ammo"}, {"Apple"}, {"Banana"}, {"Orange"}, {"Tomato"}, {"Cereal Box"}, {"Juice Box"}, {"Milk Bottle"}, {"Water Bottle"}, {"Raw Meat"}, {"Cooked Meat"}, {"Battery"}, {"Gallon (Fuel)"}, {"Gallon (Empty)"}, {"Bottle (Empty)"}, {"Medical Satchel"}, {"Rags"}, {"Cloth"}, {"Gun Powder"}, {"Alcohol Bottle"}, {"Wood"}, {"Metal"}, {"Stone"}, {"Building Tool"}, {"Fishing Rod"}, {"Cannabis Seed"}, {"Cannabis Medicinal"}, {"Sulphur"}, {"Charcoal"}, {"Axe"}, {"Pickaxe"}, {"C4"}, {"Lock"}, {"Map"}, {"GPS"}, {"Watch"}, {"Toolbox"}, {"Medium Backpack"}, {"Large Backpack"}, {"Top Hat"}, {"Witch Hat"}, {"Horn Hat"}, {"Pizza Hat"}, {"Police Hat"}, {"SWAT Hat"}, {"SWAT Armour"}, {"Chicken Head"}, {"Gas Mask"}, {"Eyepatch"}, {"Motorcycle Helmet"}, } local screenW, screenH = guiGetScreenSize() local inventoryLimit = 28 showCursor(true) function renderInventory () mainTable = dxDrawRectangle(10, (screenH - 583) / 2, 260, 598, tocolor(0, 0, 0, 170), false) lootTable = dxDrawRectangle(10, (screenH - 670) / 2, 260, 38, tocolor(0, 77, 126, 150), false) rowNumber = 0 for i,item in ipairs(newInvItems) do if ( getElementData(getLocalPlayer(),item[1]) >= 1 ) then if not ( rowNumber > inventoryLimit ) then rowNumber = rowNumber + 1 itemBackground = dxDrawRectangle(20, 85+rowNumber*20, 185, 15, tocolor(0, 77, 126, 150), false) takeBackground = dxDrawRectangle(210, 85+rowNumber*20, 50, 15, tocolor(0, 77, 126, 150), false) itemText = dxDrawText(item[1].." ("..getElementData(getLocalPlayer(),item[1]).."x)",25,85+rowNumber*20,tocolor(255,255,255, 255)) takeText = dxDrawText("Take",221,85+rowNumber*20,tocolor(255,255,255, 255)) end end end end addEventHandler("onClientRender", root, renderInventory) function inventoryClickDetect (button,state,x,y) if ( button == "left" ) then if ( state == "down" ) then if ( x >= 210 and x <= 210 + 50 and y >= 85+rowNumber*20 and y <= 85+rowNumber*20 + 15 ) then outputChatBox("Test!") end end end end addEventHandler("onClientClick",root,inventoryClickDetect) It creates all buttons and all things, but only the last button created is working. How can I make for every button to work? sorry for my bad english, I'm brazilian
  11. Hello all yesterday i find a script in Mta furom and i edited it and it's working 100% but the problem is it sets godmode for a Player only ! i want it to set godmode for player also vehicles so the player's car will not exploded by any other player so any help please i will very apreaciate it ? Here's The code it's Client : GUIEd itor = { checkbox = {}, label = {} } addEventHandler("onClientResourceStart", resourceRoot, function() GUIEditor.label[1] = guiCreateLabel(540, 98, 145, 14, " Disable Deathmatch", false) GUIEditor.checkbox[1] = guiCreateCheckBox(606, 112, 15, 15, "", false, false) GUIEditor.label[2] = guiCreateLabel(-50, -13, 123, 13, "", false, GUIEditor.checkbox[1]) addEventHandler("onClientGUIClick",GUIEditor.checkbox[1], checkBox, false) end ) function checkBox() if ( guiCheckBoxGetSelected(GUIEditor.checkbox[1])) then setElementData(localPlayer, "invincible", true) setVehicleDamageProof(getPedOccupiedVehicle(player),true) else setElementData(localPlayer, "invincible", false) setVehicleDamageProof(getPedOccupiedVehicle(player),false) end end addEventHandler ( "onClientPlayerDamage",localPlayer, function () if getElementData(source,"invincible") then cancelEvent() end end)
  12. i have this code: addEvent( "eszakirablas", true ) addEventHandler( "eszakirablas", root, function (thePlayer) if ( idozito [ thePlayer ] ~= nil ) then outputChatBox ( "#01AC41[SuperFun] #FFffFFA következő széfrablásig várnod kell #01AC41".. math.floor ( getTimerDetails ( idozito [ thePlayer ] ) / 60000+1 ) .." percet.", thePlayer, 255, 0, 0, true ); else setElementFrozen(thePlayer, true) setPedAnimation(thePlayer , "rob_bank", "cat_safe_rob", 10000, true, true, true, false) setTimer(setElementFrozen,10000,1,thePlayer,false) randomM = math.random(500000,1500000) setTimer(function() givePlayerMoney(thePlayer,randomM) end,10000,1) setTimer(outputChatBox, 10000,1,"#01AC41[SuperFun] #FFffFFÖsszesen raboltál #01AC41"..randomM.." #ffffffforintot.",thePlayer,255,255,255,true) setTimer(outputChatBox, 900000, 1,"#01AC41[SuperFun - #8C8C8CÉszaki] #FFffFFAz #01AC41északin #FFffFFújra kirabolhatod a széfet! #01AC41(/eszaki)",thePlayer,255,255,255,true) setTimer(Boltrablas,900000,1) idozito [ thePlayer ] = setTimer ( function ( thePlayer ) idozito [ thePlayer ] = nil; end, 900000, 1, thePlayer); end end ) and when the animation stop, and i change my skin, start off the animation.. how to fix this bug??
  13. i want make a script, which create objects every 15 minutes, and when i click on a object, then play a animation, and remove object & give me money, how to make this? sorry for my bad english.. :c
  14. i have a loginpanel, and i added this lines: time = getTickCount() x = 1000 y = 200 z = 20 function anim() x = x+0.31 y = y+0.32 setCameraMatrix(x,y,z, 0, 0, 0) if (getTickCount() - time >= 5000) then removeEventHandler("onClientPreRender", getRootElement(), anim) end end addEventHandler("onClientPreRender", getRootElement(), anim) but when i log in, how to set camera to the player? because when i login, the loginpanel disappear, and the camera stay there sorry for my bad english :c
  15. Hello Guys, I have a problem.. So, in my GM ther's a folder named job-system http://prntscr.com/gjav8j In folder job-system ther's a another folders with jobs http://prntscr.com/gjavjn When I write /setjob in-game - SYNTAX: /setjob [Player Partial Nick / ID] [Job ID, 0 = Unemployed] ID#1: Delivery Driver ID#2: Taxi Driver ID#3: Bus Driver ID#4: City Maintenance ID#5: Mechanic ID#6: Locksmith ID#7: Long Haul Truck Driver Ig ped - http://prntscr.com/gjayc9 So the question is how to add new job to [setjob] and to ped? P.S. Step by step please.
  16. Bhai koi help karega muje ye turf system fix karna hai Pls help kardo koi
  17. I loaded MTA SA from this page when i started to open MTA there are a problem appeared this is a photo for the problem please help me
  18. Hi Friends, I need help. What is the wrong? If Someone help me, I will give admin rights. This is base script but not save this base. function setData(player) if player then if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Console")) then setElementData(player, "Yetkili", "Kurucu") elseif isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then setElementData(player, "Yetkili", "Admin") end end end setTimer( function() for i, pl in pairs(getElementsByType("player")) do if pl ~= (false or nil) then setData(pl) end end end, 3000, 0) local groups = { } addEventHandler ( "onResourceStart", resourceRoot, function ( ) exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS groups ( id INT, name VARCHAR(20), info TEXT )" ); exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS group_members ( id INT, member_name VARCHAR(30), rank VARCHAR(20), join_date VARCHAR(40) )"); exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS group_rank ( id INT, rank VARCHAR(30), perms TEXT )" ) exports.NGSQL:db_exec ( "CREATE TABLE IF NOT EXISTS group_logs ( id INT, time VARCHAR(40), account VARCHAR(40), log TEXT )" ) exports.scoreboard:scoreboardAddColumn ( "Group", getRootElement ( ), 90, "Group", 10 ) exports.scoreboard:scoreboardAddColumn ( "Group Rank", getRootElement ( ), 90, "Group Rank", 12 ) for i, v in pairs ( getElementsByType ( "player" ) ) do local g = getElementData ( v, "Group" ) if ( not g ) then setElementData ( v, "Group", "None" ) setElementData ( v, "Group Rank", "None") --setElementData ( v, "Group Tag", "None") end if ( not getElementData ( v, "Group Rank" ) ) then setElementData ( v, "Group Rank", "None" ) end end end ) addEventHandler ( "onPlayerJoin", root, function ( ) setElementData ( source, "Group", "None" ) setElementData ( source, "Group Rank", "None") --setElementData ( source, "Group Tag", "None") end ) groups = { } --[[ example: groups = { ['ownfexrf__s'] = { info = { founder = "xXMADEXx", -- this CANNOT change founded_time = "2014-06-18:01-35-57", desc = "This is my group", color = { 255, 255, 0 }, type = "Gang", bank = 0, id = 0 }, members = { ["xXMADEXx"] = { rank="Founder", joined="2014-06-18:01-35-57" } }, ranks = { ['Founder'] = { -- member access ['member_kick'] = true, ['member_invite'] = true, ['member_setrank'] = true, ['member_viewlog'] = true -- General group changes ['group_modify_color'] = true,, ['group_modify_motd'] = true, -- banks ['bank_withdraw'] = true, ['bank_deposit'] = true, -- logs ['logs_view'] = true, ['logs_clear'] = true, -- ranks ['ranks_create'] = true, ['ranks_delete'] = true, ['ranks_modify'] = true } }, log = { -- { time, log } { time="2014-06-18 05:05:05", account="xXMADEXx", log="Group Created" } }, pendingInvites = { ['account'] = { inviter = "Inviter Account", time="Time Invite Sent"} } } }]] function saveGroups ( ) exports.NGSQL:db_exec ( "DELETE FROM groups" ) exports.NGSQL:db_exec ( "DELETE FROM group_rank" ) exports.NGSQL:db_exec ( "DELETE FROM group_members") exports.NGSQL:db_exec ( "DELETE FROM group_logs") for i, v in pairs ( groups ) do exports.NGSQL:db_exec ( "INSERT INTO groups ( id, name, info ) VALUES ( ?, ?, ? )", tostring ( v.info.id ), tostring ( i ), toJSON ( v.info ) ) for k, val in pairs ( v.ranks ) do exports.NGSQL:db_exec ( "INSERT INTO group_rank ( id, rank, perms ) VALUES ( ?, ?, ? )", tostring ( v.info.id ), k, toJSON ( val ) ) end for k, val in pairs ( v.members ) do exports.NGSQL:db_exec ( "INSERT INTO group_members ( id, member_name, rank, join_date ) VALUES ( ?, ?, ?, ? )", tostring ( v.info.id ), k, val.rank, val.joined ) end for k, val in ipairs ( v.log ) do exports.NGSQL:db_exec ( "INSERT INTO group_logs ( id, time, account, log ) VALUES ( ?, ?, ?, ? )", tostring ( v.info.id ), val.time, val.account, val.log ) end end end function loadGroups ( ) local start = getTickCount ( ) local groups_ = exports.NGSQL:db_query ( "SELECT * FROM groups" ) for i, v in pairs ( groups_ ) do if ( v and v.name and not groups [ v.name ] ) then groups [ v.name ] = { } groups [ v.name ].info = { } groups [ v.name ].ranks = { } groups [ v.name ].members = { } groups [ v.name ].log = { } -- load info table groups [ v.name ].info = fromJSON ( v.info ) groups [ v.name ].info.id = tonumber ( v.id ) -- load rank table local ranks = exports.NGSQL:db_query ( "SELECT * FROM group_rank WHERE id=?", tostring ( v.id ) ) for i, val in pairs ( ranks ) do if ( not groups [ v.name ].ranks[val.rank] ) then groups [ v.name ].ranks[val.rank] = fromJSON ( val.perms ) end end -- load member table local members = exports.NGSQL:db_query ( "SELECT * FROM group_members WHERE id=?", tostring ( v.id ) ) for i, val in pairs ( members ) do groups [v.name].members[val.member_name] = { } groups [v.name].members[val.member_name].rank = val.rank groups [v.name].members[val.member_name].joined = val.join_date for _, player in pairs ( getElementsByType ( "player" ) ) do local a = getPlayerAccount ( player ) local tag = getElementData ( player, "Group Tag") if ( a and not isGuestAccount ( a ) ) then local acc = getAccountName ( a ) if ( val.member_name == acc ) then setElementData ( player, "Group", tostring ( v.name ) ) setElementData ( player, "Group Rank", tostring ( val.rank ) ) --setElementData ( player, "Group Tag", tostring ( tag ) ) end end end end -- load logs table local log = exports.NGSQL:db_query ( "SELECT * FROM group_logs WHERE id=?", tostring ( v.id ) ) for i, val in ipairs ( log ) do table.insert ( groups[v.name].log, { time=val.time, account=val.account, log=val.log } ) end groups [ v.name ].pendingInvites = { } else local reason = "Variable 'v' not set" if ( v and not v.name ) then reason = "Variable 'v.name' not set" elseif ( v and v.name and groups [ v.name ] ) then reason = "Group already exists in table" else reason = "Undetected" end outputDebugString ( "NGGroups: Failed to load group ".. tostring ( v.name ).." - ".. tostring ( reason ), 1 ) end end local load = math.ceil ( getTickCount()-start ) local tLen = table.len ( groups ) outputDebugString ( "NGGroups: Successfully loaded "..tLen.." groups from the sql database ("..tostring(load).."MS - About "..math.floor(load/tLen).."MS/group)" ) end addEventHandler ( "onResourceStart", resourceRoot, loadGroups ) addEventHandler ( "onResourceStop", resourceRoot, saveGroups ) function getGroups ( ) return groups end addEvent ( "NGGroups->Events:onClientRequestGroupList", true ) addEventHandler ( "NGGroups->Events:onClientRequestGroupList", root, function ( ) local g = getGroups ( ) triggerClientEvent ( source, "NGGroups->onServerSendClientGroupList", source, g ) g = nil end ) ------------------------------ -- Group Creating -- ------------------------------ function createGroup ( name, color, type, owner ) if ( doesGroupExist ( name ) ) then return false end local id = 0 local ids = { } for i, v in pairs ( groups ) do ids [ v.info.id ] = true end while ( ids [ id ] ) do id = id + 1 end groups [ name ] = { info = { founder = owner, -- this CANNOT change founded_time = getThisTime ( ), desc = "", color = color, type = type, --tag = tag, bank = 0, id = id }, members = { [owner] = { rank="Founder", joined=getThisTime ( ) } }, ranks = { ['Founder'] = { -- member access ['member_kick'] = true, ['member_invite'] = true, ['member_setrank'] = true, ['member_viewlog'] = true, -- General group changes ['group_modify_color'] = true, ['group_modify_motd'] = true, -- banks ['bank_withdraw'] = true, ['bank_deposit'] = true, -- logs ['logs_view'] = true, ['logs_clear'] = true, -- ranks ['ranks_create'] = true, ['ranks_delete'] = true, ['ranks_modify'] = true }, ["Member"] = { -- button access ['view_member_list'] = true, ['view_ranks'] = false, ['view_bank'] = true, -- member access ['member_kick'] = false, ['member_invite'] = false, ['member_setrank'] = false, -- General group changes ['group_modify_color'] = false, ['group_modify_motd'] = false, -- banks ['bank_withdraw'] = false, ['bank_deposit'] = true, -- logs ['logs_view'] = false, ['logs_clear'] = false, -- ranks ['ranks_create'] = false, ['ranks_delete'] = false, ['ranks_modify'] = false } }, log = { -- { time, log } { time=getThisTime ( ), account="Server", log="Group Created" } }, pendingInvites = { } } return true, groups [ name ] end ------------------------------ -- Group Deleting -- ------------------------------ function deleteGroup ( group ) if ( not doesGroupExist ( group ) ) then return false end local id = groups [ group ].info.id groups [ group ] = nil exports.NGSQL:db_exec ( "DELETE FROM groups WHERE id=?", tostring ( id ) ) exports.NGSQL:db_exec ( "DELETE FROM group_logs WHERE id=?", tostring ( id ) ) exports.NGSQL:db_exec ( "DELETE FROM group_members WHERE id=?", tostring ( id ) ) exports.NGSQL:db_exec ( "DELETE FROM group_rank WHERE id=?", tostring ( id ) ) for i, v in pairs ( getElementsByType ( "player" ) ) do local gang = getElementData ( v, "Group" ) if ( gang == group ) then setElementData ( v, "Group", "None" ) setElementData ( v, "Group Rank", "None" ) --setElementData ( v, "Group Tag", "None" ) end end exports.NGSQL:db_exec ( "UPDATE accountdata SET GroupName=?, GroupRank=? WHERE GroupName=?", "None", "None", tostring ( group ) ) end addEvent ( "NGGroups->Modules->Gangs->Force->DeleteGroup", true ) addEventHandler ( "NGGroups->Modules->Gangs->Force->DeleteGroup", root, deleteGroup ) addEvent ( "NGGroups->GEvents:onPlayerAttemptGroupMake", true ) addEventHandler ( "NGGroups->GEvents:onPlayerAttemptGroupMake", root, function ( data ) --[[ data = { name = "Group Name", type = "Group Type", color = { r = GroupColorR, g = GroupColorG, b = GroupColorB } } ]] if ( doesGroupExist ( data.name ) or tostring ( data.name ):lower() == "none" ) then return exports.ngmessages:sendClientMessage ( "A group with this name already exists", source, 255, 255, 0 ) end --if ( doesGroupExist ( data.tag ) or tostring ( data.tag ):lower() == "none" ) then --return exports.ngmessages:sendClientMessage ( "A group with this tag already exists", source, 255, 255, 0 ) --end local created, __ = createGroup ( data.name, data.color, data.type, getAccountName ( getPlayerAccount ( source ) ) ) if ( created ) then setElementData ( source, "Group", data.name ); setElementData ( source, "Group Rank", "Founder" ); --setElementData ( source, "Group Tag", data.tag ); outputDebugString ( "CREATED GROUP "..tostring(data.name)..". Owner: "..getPlayerName(source) ); refreshPlayerGroupPanel ( source ) return true else outputDebugString ( "FAILED TO CREATE GROUP "..tostring(data.name).." FROM "..getplayerName(source) ); end return false end ) addEvent ( "NGGroups->gEvents:onPlayerDeleteGroup", true ) addEventHandler ( "NGGroups->gEvents:onPlayerDeleteGroup", root, function ( group ) deleteGroup ( group ) refreshPlayerGroupPanel ( source ) end ) ------------------------------ -- Group Banking Functions -- ------------------------------ function getGroupBank ( group ) if ( groups [ group ] and groups [ group ].info ) then local a = groups [ group ].info.bank or 0 return a end return false end function setGroupBank ( group, money ) if ( groups [ group ] and groups [ group ].info ) then groups [ group ].info.bank = money local a = true return a end return false end addEvent ( "NGGroups:Module->Bank:returnBankBalanceToClient", true ) addEventHandler ( "NGGroups:Module->Bank:returnBankBalanceToClient", root, function ( group ) local bank = getGroupBank ( group ) or 0 triggerClientEvent ( source, "NGGroups:Module->Bank:onServerSendClientBankLevel", source, bank ) end ) addEvent ( "NGGroups:Modules->BankSys:onPlayerAttemptWithdawl", true ) addEventHandler ( "NGGroups:Modules->BankSys:onPlayerAttemptWithdawl", root, function ( group, amount ) if ( not doesGroupExist ( group ) ) then exports.ngmessages:sendClientMessage ( "Something went wrong with the server (Error Code: ngroup-1)", source, 255, 0, 0 ); setElementData ( source, "Group", "None" ); setElementData ( source, "Group Rank", "None" ); --setElementData ( source, "Group Tag", "None" ); refreshPlayerGroupPanel ( source ); return false end local bank = getGroupBank ( group ); if ( amount > bank ) then return exports.ngmessages:sendClientMessage ( "Your group doesn't have $"..tostring(amount).." in their bank account", source, 255, 0, 0 ) end exports.ngmessages:sendClientMessage ( "You have withdrawn $"..tostring(amount).." from your groups bank... Actions logged", source, 0, 255, 0 ) givePlayerMoney ( source, amount ) setGroupBank ( group, bank - amount ) outputGroupLog ( group, "Withdrew $"..tostring(amount).." from the group bank", source ) end ) addEvent ( "NGGroups:Modules->BankSys:onPlayerAttemptDeposit", true ) addEventHandler ( "NGGroups:Modules->BankSys:onPlayerAttemptDeposit", root, function ( group, amount ) if ( not doesGroupExist ( group ) ) then exports.ngmessages:sendClientMessage ( "Something went wrong with the server (Error Code: ngroup-2)", source, 255, 0, 0 ); setElementData ( source, "Group", "None" ); setElementData ( source, "Group Rank", "None" ); --setElementData ( source, "Group Tag", "None" ); refreshPlayerGroupPanel ( source ); return false end local m = source.money; if ( amount > m ) then return exports.ngmessages:sendClientMessage ( "You don't have $"..tostring(amount), source, 255, 0, 0 ) end exports.ngmessages:sendClientMessage ( "You deposited $"..tostring(amount).." into your group bank", source, 0, 255, 0 ) source.money = m - amount; outputGroupLog ( group, "Deposited $"..tostring(amount).." into the group bank", source ) setGroupBank ( group, getGroupBank ( group ) + amount ) end ) ------------------------------ -- Group Member Functions -- ------------------------------ function getPlayerGroup ( player ) local g = getElementData ( player, "Group" ) or "None" if ( g:lower ( ) == "none" ) then g = nil end return g end function refreshPlayerGroupPanel ( player ) triggerClientEvent ( player, "NGGroups->pEvents:onPlayerRefreshPanel", player ) player = nil end function setPlayerGroup ( player, group ) local acc = getPlayerAccount ( player ) if ( isGuestAccount ( acc ) ) then return false end if ( not group ) then group = "None" end if ( group ~= "None" ) then if ( not groups [ group ] ) then return false end end setElementData ( player, "Group", group ) if ( group == "None" ) then return setElementData ( player, "Group Rank", "None" ) else groups [ group ].members [ getAccountName ( acc ) ] = { rank="Member", joined=getThisTime() } return setElementData ( player, "Group Rank", "Member" ) end return false end addEvent ( "NGGroups->Modules->Gangs->kickPlayer", true ) addEventHandler ( "NGGroups->Modules->Gangs->kickPlayer", root, function ( group, account ) exports.ngsql:db_exec ( "UPDATE accountdata SET GroupTag=? GroupName=?, GroupRank=? WHERE Username=?", "None", "None", "None", account ) for i, v in pairs ( getElementsByType ( "player" ) ) do local a = getPlayerAccount ( v ) if ( not isGuestAccount ( a ) and getAccountName ( a ) == account ) then setElementData ( v, "Group", "None" ) setElementData ( v, "Group Rank", "None" ) --setElementData ( v, "Group Tag", "None" ) outputChatBox ( "You got kicked from your group.", v, 255, 0, 0) break end end groups [ group ].members [ account ] = nil exports.ngmessages:sendClientMessage ( "You kicked "..tostring(account).." from "..tostring(group), source, 255, 255, 0 ) outputGroupLog ( group, "Kicked account "..tostring(account), source ) refreshPlayerGroupPanel ( source ) end ) addEvent ( "NGGroups->Modules->Groups->OnPlayerLeave", true ) addEventHandler ( "NGGroups->Modules->Groups->OnPlayerLeave", root, function ( g ) groups[g].members[getAccountName(getPlayerAccount(source))] = nil setPlayerGroup ( source, nil ) refreshPlayerGroupPanel ( source ) outputGroupLog ( g, "Has left the group", source ) end ) ------------------------------------------ -- Players -> Group Ranking Functions -- ------------------------------------------ function setAccountRank ( group, account, newrank ) local account, newrank = tostring ( account ), tostring ( newrank ) exports.ngsql:db_exec ( "UPDATE accountdata SET GroupRank=? WHERE Username=?", newrank, account ) groups[group].members[account].rank = newrank for i, v in pairs ( getElementsByType ( "player" ) ) do local a = getPlayerAccount ( v ) if ( a and not isGuestAccount ( a ) and a == account ) then setElementData ( v, "Group Rank", tostring ( newrank ) ) outputChatBox ( "You rank has been changed to "..tostring ( newrank ), v, 255, 255, 0) break end end return true end addEvent ( "NGGroups->Modules->Gangs->Ranks->UpdatePlayerrank", true ) addEventHandler ( "NGGroups->Modules->Gangs->Ranks->UpdatePlayerrank", root, function ( group, account, newrank ) if ( not groups[group] or not groups[group].ranks[newrank] ) then exports.ngmessages:sendClientMessage ( "Oops, something went wrong. Please try again", source, 255, 0, 0 ) refreshPlayerGroupPanel ( source ) return false end outputGroupLog ( group, "Changed "..account.."'s rank from "..groups[group].members[account].rank.." to "..newrank, source ) setAccountRank ( group, account, newrank ) exports.ngmessages:sendClientMessage ( "You have changed "..tostring ( account ).."'s rank!", source, 255, 255, 0) refreshPlayerGroupPanel ( source ) end ) function sendPlayerInvite ( player, group, inviter ) local a = getPlayerAccount ( player ) if ( isGuestAccount( a ) ) then return false end local a = getAccountName ( a ) if ( groups [ group ].pendingInvites [ a ] ) then return false end table.insert ( groups [ group ].pendingInvites, { to=getAccountName(getPlayerAccount(player)), inviter=getAccountName(getPlayerAccount(inviter)), time=getThisTime() } ); return true end addEvent ( "NGGroups->Modules->Groups->InvitePlayer", true ) addEventHandler ( "NGGroups->Modules->Groups->InvitePlayer", root, function ( group, plr ) local a = getPlayerAccount ( plr ) if ( isGuestAccount ( a ) ) then return exports.ngmessages:sendClientMessage ( "Your group request couldn't be sent to "..plr.name, source, 255, 0, 0 ) end local a = getAccountName ( a ) for _, info in pairs ( groups [ group ].pendingInvites ) do if ( info.to == a ) then return exports.ngmessages:sendClientMessage ( "This player is already invited by "..tostring(info.from), source, 255, 255, 0 ) end end outputGroupLog ( group, "Invited "..plr.name.." ("..a..")", source ) local r, g, b = getGroupColor ( group ); exports.ngmessages:sendClientMessage ( source.name.." invited you to "..group..". Accept it in F2", plr, r, g, b ) exports.ngmessages:sendClientMessage ( "You have invited "..plr.name.." to the group", source, r, g, b ) sendPlayerInvite ( plr, group, source ) end ) addEvent ( "NGGroups->Modules->Groups->Invites->OnPlayerDeny", true ) addEventHandler( "NGGroups->Modules->Groups->Invites->OnPlayerDeny", root, function ( g ) local a = getAccountName ( getPlayerAccount ( source ) ) groups [ g ].pendingInvites [ a ] = nil refreshPlayerGroupPanel ( source ) end ) addEvent ( "NGGroups->Modules->Groups->Invites->OnPlayerAccept", true ) addEventHandler ( "NGGroups->Modules->Groups->Invites->OnPlayerAccept", root, function ( g ) local a = getAccountName ( getPlayerAccount ( source ) ) for index, info in pairs ( groups [ g ].pendingInvites ) do if ( info.to == a ) then table.remove ( groups [ g ].pendingInvites, index ) end end groups [ g ].members [ a ] = { rank="Member", joined = getThisTime() } setPlayerGroup ( source, g ) outputGroupMessage ( getPlayerName ( source ).." has joined the group!", g ) refreshPlayerGroupPanel ( source ) end ) function addRankToGroup ( group, name, info ) if ( not groups [ group ] ) then return false end for i, v in pairs ( groups [ group ].ranks ) do if ( i:lower() == name:lower() ) then return false end end groups [ group ].ranks [ name ] = info return true end addEvent ( "NGGroups->Modules->Groups->Ranks->AddRank", true ) addEventHandler ( "NGGroups->Modules->Groups->Ranks->AddRank", root, function ( group, name, info ) outputGroupLog ( group, "Added rank '"..tostring(name).."'", source ) addRankToGroup ( group, name, info ) refreshPlayerGroupPanel ( source ) exports.ngmessages:sendClientMessage ( "The rank has been added.", source, 0, 255, 0 ) end ) function setGroupMotd ( group, motd ) if ( groups [ group ] ) then groups[group].info.desc = tostring ( motd ) return true end return false end addEvent ( "NGGroups->Modules->Groups->MOTD->Update", true ) addEventHandler ( "NGGroups->Modules->Groups->MOTD->Update", root, function ( g, mo ) outputGroupLog ( g, "Changed the group MOTD", source ) setGroupMotd ( g, mo ) refreshPlayerGroupPanel ( source ) end ) ------------------------------ -- Group Checking Functions -- ------------------------------ function doesGroupExist ( group ) local group = tostring ( group ):lower ( ) for i, v in pairs ( groups ) do if ( tostring ( i ):lower ( ) == group ) then group = nil return true end end group = nil return false end function isRankInGroup ( group, rank ) local group = tostring ( group ):lower ( ) for i, v in pairs ( groups ) do if ( i:lower() == group ) then if ( v.ranks and v.ranks [ rank ] ) then return true end break end end return false end ------------------------------ -- Group Logging -- ------------------------------ function groupClearLog ( group ) if ( groups [ group ] ) then groups [ group ].log = nil exports.NGSQL:db_exec ( "DELETE FROM group_logs WHERE id=?", groups[group].info.id ) groups [ group ].log = { } group = nil return true end group = nil return false end function outputGroupLog ( group, log, element ) if ( not groups[group] ) then return end if ( not groups[group].log ) then groups[group].log = { } end local e = "Server" if ( element ) then e = element if ( type ( element ) == "userdata" ) then if ( getElementType ( element ) == "player" ) then local a = getPlayerAccount ( element ) if ( not isGuestAccount ( a ) ) then e = getAccountName ( a ) end a = nil end end end table.insert ( groups[group].log, 1, { time=getThisTime(), account=e, log=log } ) end function getGroupLog ( group ) if ( group and groups [ group ] ) then local f = groups [ group ].log return f end end addEvent ( "NGGroups->GEvents:onPlayerClearGroupLog", true ) addEventHandler ( "NGGroups->GEvents:onPlayerClearGroupLog", root, function ( group ) groupClearLog ( group ) outputGroupLog ( group, "Cleared the logs", source ) refreshPlayerGroupPanel ( source ) -- memory sweep group = nil end ) addEvent( "NGGroups->GroupStaff:OnAdminDeleteGroup", true ); addEventHandler ( "NGGroups->GroupStaff:OnAdminDeleteGroup", root, function ( group ) for _, p in pairs ( getElementsByType ( "player" ) ) do if ( tostring ( getElementData ( p, "Group" ) ) == group ) then outputChatBox ( "Admin "..tostring(source.name).." has deleted your group.", p, 255, 0, 0 ); end end deleteGroup ( group ); refreshPlayerGroupPanel ( source ); end ); ------------------------------ -- Misc Functions -- ------------------------------ function getThisTime ( ) local time = getRealTime ( ) local year = time.year + 1900 local month = time.month + 1 local day = time.monthday local hour = time.hour local min = time.minute local sec = time.second if ( month < 10 ) then month = 0 .. month end if ( day < 10 ) then day = 0 .. day end if ( hour < 10 ) then hour = 0 .. hour end if ( min < 10 ) then min = 0 .. min end if ( sec < 10 ) then sec = 0 .. sec end return table.concat ( { year, month, day }, "-") .. " "..table.concat ( { hour, min, sec }, ":" ) end function getGroupColor ( group ) local r, g, b = 0, 0, 0 if ( groups [ group ] ) then r, g, b = groups[group].info.color.r, groups[group].info.color.g, groups[group].info.color.b end return r, g, b end function getGroupTag ( group ) if ( groups [ group ] ) then tag = groups[group].info.tag end end function setGroupColor ( group, r, g, b ) if ( groups [ group ] ) then groups[group].info.color.r = r groups[group].info.color.g = g groups[group].info.color.b = b exports.ngturf:updateTurfGroupColor ( group ) return true end return false end function setGroupTag ( group ) if ( groups [ group ] ) then groups[group].info.tag = tag exports.ngturf:updateTurfGroupColor ( group ) return true end return false end addEvent("NGGroups->Modules->Groups->Colors->UpdateColor",true) addEventHandler("NGGroups->Modules->Groups->Colors->UpdateColor",root,function(group,r,g,b) outputGroupLog ( group, "Changed group color to ".. table.concat ( { r, g, b }, ", " ), source ) setGroupColor ( group, r, g, b ) refreshPlayerGroupPanel ( source ) end ) function getGroupType ( name ) if ( doesGroupExist ( name ) ) then return groups [ name ].info.type; end return false; end function isRankInGroup ( group, rank ) if ( doesGroupExist ( group ) ) then if ( groups [ group ].ranks [ rank ] ) then return true end end return false end function outputGroupMessage ( message, group, blockTag ) local blockTag = blockTag or false if ( not blockTag ) then message = "("..tostring(group)..") "..tostring(message) end local r, g, b = getGroupColor ( group ) local group = tostring ( group ):lower ( ) for i, v in ipairs ( getElementsByType ( "player" ) ) do if ( tostring ( getElementData ( v, "Group" ) ):lower ( ) == group:lower() ) then outputChatBox ( message, v, r, g, b, true ) end end end function table.len ( t ) local c = 0 for i in pairs ( t ) do c = c + 1 end return c end function RGBToHex(red, green, blue, alpha) if((red < 0 or red > 255 or green < 0 or green > 255 or blue < 0 or blue > 255) or (alpha and (alpha < 0 or alpha > 255))) then return nil end if(alpha) then return string.format("#%.2X%.2X%.2X%.2X", red,green,blue,alpha) else return string.format("#%.2X%.2X%.2X", red,green,blue) end end function getChatLine ( player, message ) local playername = getPlayerName ( player ):gsub ( "#%x%x%x%x%x%x", "" ) --local playername = getPlayerTags ( player )..playername return playername..": #ffffff"..message end -- group chat -- addCommandHandler ( "gc", function ( plr, _, ... ) local message = table.concat ( { ... }, " " ) local g = getPlayerGroup ( plr ) if ( not g ) then return exports.ngmessages:sendClientMessage ( "You cannot use this command, you're not in a group", plr, 255, 0, 0 ) end if ( message:gsub ( " ", "" ) == "" ) then return exports.ngmessages:sendClientMessage ( "You didn't enter a message. Syntax: /gc message", plr, 255, 0, 0 ) end outputGroupMessage("[Group] ".. getChatLine ( plr, message ), g, true ) end )
  19. Hello World ! i was trying to add discord-bot to my server using Necktrox/mta-discord-bot , but i don't know how to install these things bellow : - app.js -package.json -package-lock.json the whole src things are :Oed up with me sockets are working but it still shows this problem in console | any help please ? @Necktrox
  20. Is there an event that is activated when an acl group is changed?
  21. Preciso de uma ajuda numa função.. toda vez que to o comando de criar o veiculo com as coordenada ja na tabela da esse erro vehicle_spawns.lua:3: bad argument #1 to 'pairs' (table expected, got number) função server. function spawnDayZVehicles() for i,vehs in pairs(vehiclesTable)do for i,spawn in pairs(#vehSpawns[vehs[1]]) do local x,y,z = spawn[1],spawn[2],spawn[3] local veh = createVehicle(vehs[2],x,y,z) local vehCol = createColSphere(x,y,z,4) attachElements(vehCol,veh,0,0,0) setElementData(vehCol,"parent",veh) setElementData(veh,"parent",vehCol) setElementData(vehCol,"vehicle",true) setElementData(vehCol,"MAX_Slots",vehs[8]) local engRand = math.random(0,vehs[3]) local tireRand = math.random(0,vehs[4]) local partRand = math.random(0,vehs[5]) local rotorRand = math.random(0,vehs[6]) local glaRand = math.random(0,vehs[7]) setElementData(vehCol,"Engine_inVehicle",engRand) setElementData(vehCol,"Tire_inVehicle",tireRand) setElementData(vehCol,"Parts_inVehicle",partRand) setElementData(vehCol,"Rotor_inVehicle",rotorRand) setElementData(vehCol,"Glass_inVehicle",glaRand) setElementData(vehCol,"spawn",{vehs[2],x,y,z}) setElementData(vehCol,"fuel",10) setElementData(vehCol,"ProtectionPercent",0) setElementData(vehCol,"maxfuel",vehs[9]) setElementData(vehCol,"needengines",vehs[3]) setElementData(vehCol,"needtires",vehs[4]) setElementData(vehCol,"needparts",vehs[5]) setElementData(vehCol,"needrotor",vehs[6]) setElementData(vehCol,"needglass",vehs[7]) if tireRand >= 1 then setElementData(vehCol,"TireState",math.random(0,100)) else setElementData(vehCol,"TireState",100) end if engRand >= 1 then setElementData(vehCol,"EngineState",math.random(0,100)) else setElementData(vehCol,"EngineState",100) end if rotorRand >= 1 then setElementData(vehCol,"RotorState",math.random(0,100)) else setElementData(vehCol,"RotorState",100) end if partRand >= 1 then setElementData(vehCol,"PartsState",math.random(0,100)) else setElementData(vehCol,"PartsState",100) end end end end
  22. Hello, i have one problem but that doesn´t say anything errors / warnings. If i send mysql command to SQL Form in phpmyadmin then that give me values of i need and same values give into game but condition if tip == 1 then doens´t called can they help me ? (Variable tip = 1) function test(thePlayer, cmd) local tip = 0 local plat = 0 local id = getElementData(thePlayer, "dbid") local query = mysql:query('SELECT * FROM `PojistitVeh` WHERE `Enabled`=1 AND `Character`="'.. id ..'"') while true do local row = mysql:fetch_assoc(query) if not row then return end tip = row["Tip"] outputDebugString(plat .. "|" .. tip) if tip == 1 then plat = plat + 200 end if tip == 2 then plat = plat + 500 end if tip == 3 then plat = plat + 800 end if tip == 4 then plat = plat + 1000 end if tip == 5 then plat = plat + 1500 end end end addCommandHandler("testvyplata", test, false, true) Thank for help.
  23. Hello, there, I have a serious problem. My MTA has patched when I started it. After that I ran the server, joined and started my script, that worked today at 1 AM. Now I get errors. debugscript says that this: --[[ Something here so it's commented. --]] is deprecated, as well as it says that i have and unexpected character near "[" in this line: outputChatBox(tostring(i).."|"..items[slot[3]][2]) Again. The exact same script has worked at 1AM today. What did the patch change?
  24. i added this line to a nametag script: if isChatBoxInputActive() then dxDrawImage ( sx - math.max(nameWidth/2, teamWidth/2) - imageSize - 1*scale, sy - imageSize, imageSize, imageSize, "logo.png" ) end but when i press 't', the image show in all players nametag.. how to fix this?