Jump to content

jingzhi

Members
  • Posts

    288
  • Joined

  • Last visited

Posts posted by jingzhi

  1. Hello everyone,

    I am now working on a login system. I noticed in the mta wiki that it is recommended to use the function passwordHash to encrypt passwords. However, they also said that there can be short freezes if using this algorithm. Although I already used a call back function as they suggested, I still want to make sure it will not cause any lag in the server. Has anyone used this function yet? Please tell me what happens when using this function (especially on a server with many players). Thanks in advance!

  2. Hi everyone,

    I am working on a general database script and I am wondering if establishing multiple database connections in different resources will affect the performance. If that is true, can database connections be shared in different resources(e.g. by exporting function)? Thanks in advance!

    Moreover, if I export a function that uses database connection to a different resource, does the function use the dbconnection established in the resource exporting the function, or it must use the connection in the resource I'm calling the function from?

  3. (Copy and Paste make more line than normal)

    Modules are loaded in mtaserv.conf

    and result of netstat is :

    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

    I tried with :

      
    local con = dbConnect("mysql","dbname=MYDBNAME;host=127.0.0.1;port=3306", "DBUSER", "DBPASS", "share=1") 
      
    

    Make sure the group of your db user is set to "host"

  4. Hey Guys in my login panel the intro won't showing what is the problem ?

    That Code

    GUIEditor = { 
        tab = {},
        label = {},
        tabpanel = {},
        edit = {},
        button = {},
        window = {},
        checkbox = {},
        memo = {}
    }
     
    screenW, screenH = guiGetScreenSize()
    xtd, ytd = screenW/1366, screenH/768
    addEventHandler("onClientRender", root, function ()
        if getElementData(localPlayer, "Banned") then
            hideLoginWindow(true)
        end
    end)
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
        screenW, screenH = guiGetScreenSize()
            GUIEditor.window[1] = guiCreateWindow((screenW - 626/1280*screenW) / 2, (screenH - 612/800*screenH) / 2, 626/1280*screenW, 612/800*screenH, "Welcome to SAEG:RPG!", false)
            guiWindowSetSizable(GUIEditor.window[1], false)
            guiWindowSetMovable(GUIEditor.window[1], false)
            guiSetAlpha(GUIEditor.window[1], 0)
            guiSetVisible(GUIEditor.window[1], false)
     
            GUIEditor.tabpanel[1] = guiCreateTabPanel(9/1280*screenW, 312/800*screenH, 607/1280*screenW, 290/800*screenH, false, GUIEditor.window[1])
     
            GUIEditor.tab[1] = guiCreateTab("Updates", GUIEditor.tabpanel[1])
        GUIEditor.tab[2] = guiCreateTab("Rules", GUIEditor.tabpanel[1])
     
            GUIEditor.memo[1] = guiCreateMemo(10/1280*screenW, 10/800*screenH, 582/1280*screenW, 241/800*screenH, "", false, GUIEditor.tab[1])
            guiMemoSetReadOnly(GUIEditor.memo[1], true)
            GUIEditor.memo[2] = guiCreateMemo(10/1280*screenW, 10/800*screenH, 582/1280*screenW, 241/800*screenH, "", false, GUIEditor.tab[2])
            guiMemoSetReadOnly(GUIEditor.memo[2], true)
     
            local xml = xmlLoadFile("rules.xml")            
            local messageNodes = xmlNodeGetChildren(xml)  
            for i,node in ipairs(messageNodes) do              
            guiSetText(GUIEditor.memo[2], guiGetText(GUIEditor.memo[2])..xmlNodeGetValue(node).."\n")
            end
            xmlUnloadFile(xml)
     
            local xml2 = xmlLoadFile("updates.xml")            
            local messageNodes2 = xmlNodeGetChildren(xml2)  
            for i2,node2 in ipairs(messageNodes2) do              
            guiSetText(GUIEditor.memo[1], guiGetText(GUIEditor.memo[1])..xmlNodeGetValue(node2).."\n")
            end
            xmlUnloadFile(xml2)                                
     
     
            GUIEditor.button[1] = guiCreateButton(345/1280*screenW, 282/800*screenH, 124/1280*screenW, 45/800*screenH, "Login", false, GUIEditor.window[1])
        function fock(k, s)
            if k == "enter" and s then
                triggerEvent("onClientGUIClick", GUIEditor.button[1])
            end
        end
        addEventHandler("onClientKey", root, fock)
            GUIEditor.button[2] = guiCreateButton(479/1280*screenW, 282/800*screenH, 127/1280*screenW, 45/800*screenH, "Register", false, GUIEditor.window[1])
           
            GUIEditor.label[1] = guiCreateLabel(11/1280*screenW, 30/800*screenH, 96/1280*screenW, 34/800*screenH, "Username:", false, GUIEditor.window[1])
            GUIEditor.label[2] = guiCreateLabel(11/1280*screenW, 92/800*screenH, 96/1280*screenW, 34/800*screenH, "Password : ", false, GUIEditor.window[1])
           
            GUIEditor.edit[1] = guiCreateEdit(125/1280*screenW, 26/800*screenH, 161/1280*screenW, 38/800*screenH, "", false, GUIEditor.window[1])
            GUIEditor.edit[2] = guiCreateEdit(125/1280*screenW, 82/800*screenH, 161/1280*screenW, 38/800*screenH, "", false, GUIEditor.window[1])
            guiEditSetMasked(GUIEditor.edit[2], true)
            GUIEditor.checkbox[1] = guiCreateCheckBox(52/1280*screenW, 157/800*screenH, 369/1280*screenW, 15/800*screenH, "I accept all server Rules.", true, false, GUIEditor.window[1])
            guiSetFont(GUIEditor.checkbox[1], "default-bold-small")
            guiSetProperty(GUIEditor.checkbox[1], "NormalTextColour", "FF23FE00")
            GUIEditor.label[3] = guiCreateLabel(440/1280*screenW, 41/800*screenH, 176/1280*screenW, 89/800*screenH, "2015 @ SAEG RPG 1.0 BETA", false, GUIEditor.window[1])
            guiSetFont(GUIEditor.label[3], "default-bold-small")
            guiLabelSetColor(GUIEditor.label[3], 255, 0, 0)
            guiLabelSetHorizontalAlign(GUIEditor.label[3], "left", true)    
            GUIEditor.label[4] = guiCreateLabel(43/1280*screenW, 217/800*screenH, 546/1280*screenW, 47/800*screenH, "Always read the rules before playing!", false, GUIEditor.window[1])
            GUIEditor.button[3] = guiCreateButton(211/1280*screenW, 282/800*screenH, 124/1280*screenW, 45/800*screenH, "Recover Account", false, GUIEditor.window[1])    
        end
    )
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
            local screenW, screenH = guiGetScreenSize()
            reg = guiCreateWindow((screenW - 690/1280*screenW) / 2, (screenH - 506/800*screenH) / 2, 690/1280*screenW, 506/800*screenH, "Register an account!", false)
            guiWindowSetSizable(reg, false)
            guiSetAlpha(reg, 1.00)
     
            register = guiCreateButton(228/1280*screenW, 447/800*screenH, 229/1280*screenW, 49/800*screenH, "Register", false, reg)
            guiSetProperty(register, "NormalTextColour", "FFFF0000")
            backBtn = guiCreateButton(22/1280*screenW, 27/800*screenH, 107/1280*screenW, 31/800*screenH, "Go back!", false, reg)    
            editbox = guiCreateEdit(139/1280*screenW, 62/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            sLb1 = guiCreateLabel(32/1280*screenW, 68/800*screenH, 97/1280*screenW, 15/800*screenH, "Username:", false, reg)
            editbox1 = guiCreateEdit(139/1280*screenW, 136/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            guiEditSetMasked(editbox1, true)
            sLb2 = guiCreateLabel(36/1280*screenW, 146/800*screenH, 97/1280*screenW, 15/800*screenH, "Password:", false, reg)
            sLb3 = guiCreateLabel(36/1280*screenW, 229/800*screenH, 97/1280*screenW, 15/800*screenH, "Repeat Password:", false, reg)
            editbox2 = guiCreateEdit(139/1280*screenW, 217/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            guiEditSetMasked(editbox2, true)
            sAnswer = guiCreateEdit(139/1280*screenW, 296/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            sLb4 = guiCreateLabel(36/1280*screenW, 308/800*screenH, 97/1280*screenW, 15/800*screenH, "E-Mail:", false, reg)
            sLb5 = guiCreateLabel(37/1280*screenW, 351/800*screenH, 647/1280*screenW, 86/800*screenH, "Don't tell your password to anyone!", false, reg)    
        end
    )
     
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
            local screenW, screenH = guiGetScreenSize()
            registerWindow = guiCreateWindow((screenW - 516/1280*screenW) / 2, (screenH - 461/800*screenH) / 2, 516/1280*screenW, 461/800*screenH, "Recover account", false)
            guiWindowSetSizable(registerWindow, false)
            guiSetVisible(registerWindow, false)
            guiSetAlpha(registerWindow, 0.-- s8) -->
     
            usernameR = guiCreateEdit(156/1280*screenW, 51/800*screenH, 208/1280*screenW, 37/800*screenH, "", false, registerWindow)
            myLabelS = guiCreateLabel(44/1280*screenW, 64/800*screenH, 112/1280*screenW, 34/800*screenH, "Acc username:", false, registerWindow)
            guiSetFont(myLabelS, "default-bold-small")
            secretAnswerR = guiCreateEdit(156/1280*screenW, 113/800*screenH, 208/1280*screenW, 37/800*screenH, "", false, registerWindow)
            myLabel2 = guiCreateLabel(44/1280*screenW, 126/800*screenH, 112/1280*screenW, 34/800*screenH, "E-Mail:", false, registerWindow)
            guiSetFont(myLabel2, "default-bold-small")
            goBack = guiCreateButton(23/1280*screenW, 37/800*screenH, 73/1280*screenW, 24/800*screenH, "Back", false, registerWindow)
            submitR = guiCreateButton(113/1280*screenW, 390/800*screenH, 272/1280*screenW, 49/800*screenH, "Recover", false, registerWindow)
            myLabel1 = guiCreateLabel(18/1280*screenW, 199/800*screenH, 488/1280*screenW, 163/800*screenH, "We are not able to do anything if you lost your e-mail or username. ", false, registerWindow)    
        end
    )
     
        function setWarningText(text, r, g, b)
            if not text or not r or not g or not b then
                return
            end
            guiSetText(GUIEditor.label[4], tostring(text))
            guiLabelSetColor(GUIEditor.label[4], r, g, b)
        end
        addEvent('setWarning', true)
        addEventHandler('setWarning', root, setWarningText)
     
        function setRegisterWarningText(text, r, g, b)
            if not text or not r or not g or not b then
                return
            end
            guiSetText(sLb5, tostring(text))
            guiLabelSetColor(sLb5, r, g, b)        
        end
        addEvent('setRegisterWarning', true)
        addEventHandler('setRegisterWarning', root, setRegisterWarningText)
     
        function windowHandler( )
            local playername = getPlayerName(localPlayer)
            guiSetText(GUIEditor.edit[1], "")
            guiSetText(GUIEditor.edit[2], "")
            setWarningText("Always read the rules before playing!", 0, 255, 0)
            setRegisterWarningText("Don't tell your password to anyone!", 0, 255, 0)
            guiSetVisible ( GUIEditor.window[1], false )
            guiSetVisible ( reg, false )
            guiSetInputEnabled( false )
            showCursor ( false )
        end
        addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), windowHandler )
       
        function playerPressedKey(s)
            elements = {
                        GUIEditor.edit[1],
                        GUIEditor.edit[2],
                        sAnswer,
                        editbox,
                        editbox1,
                        editbox2,
                        secretAnswerR,
                        usernameR,
                        }
            triggers = {
                "isValidUsername",
                "isValidPassword",
                "isValidSecretAnswer",
                "isValidUsername",
                "isValidPassword",
                "isValidPassword",
                "isValidSecretAnswer",
                "isValidUsername",
                        }
            parents = {
                        "setWarning",
                        "setWarning",
                        "setRecoverText",
                        "setRegisterWarning",
                        "setRegisterWarning",
                        "setRegisterWarning",
                        "setRecoverText",
                        "setRecoverText"
                      }
            for k,v in ipairs(elements) do
                if v == s then
                    if elements[k] == elements[4] then
                        triggerServerEvent("isValidR", localPlayer, guiGetText(s), parents[k])
                    else
                        triggerServerEvent(triggers[k], localPlayer, guiGetText(s), parents[k])
                    end
                end
            end
        end
        addEventHandler("onClientGUIChanged", guiRoot, playerPressedKey)
                function resetFields()
                guiSetText(sAnswer, "")
                guiSetText(editbox2, "")
                guiSetText(editbox, "")
                guiSetText(usernameR, "")
                guiSetText(GUIEditor.edit[1], "")
                guiSetText(GUIEditor.edit[2], "")
                guiSetText(secretAnswerR, "")
                guiSetText(editbox1, "")
            end
        addEvent('resetFields', true)
        addEventHandler('resetFields', root,resetFields )
     
     
        function login ()
            if (source == GUIEditor.button[1]) then
                if guiCheckBoxGetSelected( GUIEditor.checkbox[1] ) == true then
                    triggerServerEvent ( "onLogin",getRootElement(), localPlayer, guiGetText(GUIEditor.edit[1]), guiGetText(GUIEditor.edit[2]) )
        removeEventHandler("onClientKey", root, fock)
                else
                    triggerServerEvent("kickPlayer", localPlayer)
                end
            end
        end
         addEventHandler ( "onClientGUIClick", guiRoot, login )
         
            function setRecoverText(text, r, g, b)
                guiLabelSetColor(myLabel1, r, g, b)
                guiSetText(myLabel1, tostring(text))
            end
            addEvent("setRecoverText", true)
            addEventHandler("setRecoverText", root, setRecoverText)
     
           function recover(button, state)
                if (button == "left" and state == "up") then
                    if source == goBack then
                        guiSetVisible( registerWindow, false )
                        guiSetVisible( GUIEditor.window[1], true )
                        resetFields()
                    elseif source == submitR then
                        local acc = guiGetText(usernameR)
                        local secret = guiGetText(secretAnswerR)
                        if secret == "" then
                            setRecoverText("Please type something at editbox of e-mail.", 255, 0, 0)
                            return
                        elseif acc == "" then
                            setRecoverText("No account entered! Sorry!", 255, 0, 0)
                            return
                        end
                       
  5. Hey Guys in my login panel the intro won't showing what is the problem ?

    That Code

    GUIEditor = { 
        tab = {},
        label = {},
        tabpanel = {},
        edit = {},
        button = {},
        window = {},
        checkbox = {},
        memo = {}
    }
     
    screenW, screenH = guiGetScreenSize()
    xtd, ytd = screenW/1366, screenH/768
    addEventHandler("onClientRender", root, function ()
        if getElementData(localPlayer, "Banned") then
            hideLoginWindow(true)
        end
    end)
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
        screenW, screenH = guiGetScreenSize()
            GUIEditor.window[1] = guiCreateWindow((screenW - 626/1280*screenW) / 2, (screenH - 612/800*screenH) / 2, 626/1280*screenW, 612/800*screenH, "Welcome to SAEG:RPG!", false)
            guiWindowSetSizable(GUIEditor.window[1], false)
            guiWindowSetMovable(GUIEditor.window[1], false)
            guiSetAlpha(GUIEditor.window[1], 0)
            guiSetVisible(GUIEditor.window[1], false)
     
            GUIEditor.tabpanel[1] = guiCreateTabPanel(9/1280*screenW, 312/800*screenH, 607/1280*screenW, 290/800*screenH, false, GUIEditor.window[1])
     
            GUIEditor.tab[1] = guiCreateTab("Updates", GUIEditor.tabpanel[1])
        GUIEditor.tab[2] = guiCreateTab("Rules", GUIEditor.tabpanel[1])
     
            GUIEditor.memo[1] = guiCreateMemo(10/1280*screenW, 10/800*screenH, 582/1280*screenW, 241/800*screenH, "", false, GUIEditor.tab[1])
            guiMemoSetReadOnly(GUIEditor.memo[1], true)
            GUIEditor.memo[2] = guiCreateMemo(10/1280*screenW, 10/800*screenH, 582/1280*screenW, 241/800*screenH, "", false, GUIEditor.tab[2])
            guiMemoSetReadOnly(GUIEditor.memo[2], true)
     
            local xml = xmlLoadFile("rules.xml")            
            local messageNodes = xmlNodeGetChildren(xml)  
            for i,node in ipairs(messageNodes) do              
            guiSetText(GUIEditor.memo[2], guiGetText(GUIEditor.memo[2])..xmlNodeGetValue(node).."\n")
            end
            xmlUnloadFile(xml)
     
            local xml2 = xmlLoadFile("updates.xml")            
            local messageNodes2 = xmlNodeGetChildren(xml2)  
            for i2,node2 in ipairs(messageNodes2) do              
            guiSetText(GUIEditor.memo[1], guiGetText(GUIEditor.memo[1])..xmlNodeGetValue(node2).."\n")
            end
            xmlUnloadFile(xml2)                                
     
     
            GUIEditor.button[1] = guiCreateButton(345/1280*screenW, 282/800*screenH, 124/1280*screenW, 45/800*screenH, "Login", false, GUIEditor.window[1])
        function fock(k, s)
            if k == "enter" and s then
                triggerEvent("onClientGUIClick", GUIEditor.button[1])
            end
        end
        addEventHandler("onClientKey", root, fock)
            GUIEditor.button[2] = guiCreateButton(479/1280*screenW, 282/800*screenH, 127/1280*screenW, 45/800*screenH, "Register", false, GUIEditor.window[1])
           
            GUIEditor.label[1] = guiCreateLabel(11/1280*screenW, 30/800*screenH, 96/1280*screenW, 34/800*screenH, "Username:", false, GUIEditor.window[1])
            GUIEditor.label[2] = guiCreateLabel(11/1280*screenW, 92/800*screenH, 96/1280*screenW, 34/800*screenH, "Password : ", false, GUIEditor.window[1])
           
            GUIEditor.edit[1] = guiCreateEdit(125/1280*screenW, 26/800*screenH, 161/1280*screenW, 38/800*screenH, "", false, GUIEditor.window[1])
            GUIEditor.edit[2] = guiCreateEdit(125/1280*screenW, 82/800*screenH, 161/1280*screenW, 38/800*screenH, "", false, GUIEditor.window[1])
            guiEditSetMasked(GUIEditor.edit[2], true)
            GUIEditor.checkbox[1] = guiCreateCheckBox(52/1280*screenW, 157/800*screenH, 369/1280*screenW, 15/800*screenH, "I accept all server Rules.", true, false, GUIEditor.window[1])
            guiSetFont(GUIEditor.checkbox[1], "default-bold-small")
            guiSetProperty(GUIEditor.checkbox[1], "NormalTextColour", "FF23FE00")
            GUIEditor.label[3] = guiCreateLabel(440/1280*screenW, 41/800*screenH, 176/1280*screenW, 89/800*screenH, "2015 @ SAEG RPG 1.0 BETA", false, GUIEditor.window[1])
            guiSetFont(GUIEditor.label[3], "default-bold-small")
            guiLabelSetColor(GUIEditor.label[3], 255, 0, 0)
            guiLabelSetHorizontalAlign(GUIEditor.label[3], "left", true)    
            GUIEditor.label[4] = guiCreateLabel(43/1280*screenW, 217/800*screenH, 546/1280*screenW, 47/800*screenH, "Always read the rules before playing!", false, GUIEditor.window[1])
            GUIEditor.button[3] = guiCreateButton(211/1280*screenW, 282/800*screenH, 124/1280*screenW, 45/800*screenH, "Recover Account", false, GUIEditor.window[1])    
        end
    )
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
            local screenW, screenH = guiGetScreenSize()
            reg = guiCreateWindow((screenW - 690/1280*screenW) / 2, (screenH - 506/800*screenH) / 2, 690/1280*screenW, 506/800*screenH, "Register an account!", false)
            guiWindowSetSizable(reg, false)
            guiSetAlpha(reg, 1.00)
     
            register = guiCreateButton(228/1280*screenW, 447/800*screenH, 229/1280*screenW, 49/800*screenH, "Register", false, reg)
            guiSetProperty(register, "NormalTextColour", "FFFF0000")
            backBtn = guiCreateButton(22/1280*screenW, 27/800*screenH, 107/1280*screenW, 31/800*screenH, "Go back!", false, reg)    
            editbox = guiCreateEdit(139/1280*screenW, 62/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            sLb1 = guiCreateLabel(32/1280*screenW, 68/800*screenH, 97/1280*screenW, 15/800*screenH, "Username:", false, reg)
            editbox1 = guiCreateEdit(139/1280*screenW, 136/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            guiEditSetMasked(editbox1, true)
            sLb2 = guiCreateLabel(36/1280*screenW, 146/800*screenH, 97/1280*screenW, 15/800*screenH, "Password:", false, reg)
            sLb3 = guiCreateLabel(36/1280*screenW, 229/800*screenH, 97/1280*screenW, 15/800*screenH, "Repeat Password:", false, reg)
            editbox2 = guiCreateEdit(139/1280*screenW, 217/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            guiEditSetMasked(editbox2, true)
            sAnswer = guiCreateEdit(139/1280*screenW, 296/800*screenH, 526/1280*screenW, 37/800*screenH, "", false, reg)
            sLb4 = guiCreateLabel(36/1280*screenW, 308/800*screenH, 97/1280*screenW, 15/800*screenH, "E-Mail:", false, reg)
            sLb5 = guiCreateLabel(37/1280*screenW, 351/800*screenH, 647/1280*screenW, 86/800*screenH, "Don't tell your password to anyone!", false, reg)    
        end
    )
     
     
    addEventHandler("onClientResourceStart", resourceRoot,
        function()
            local screenW, screenH = guiGetScreenSize()
            registerWindow = guiCreateWindow((screenW - 516/1280*screenW) / 2, (screenH - 461/800*screenH) / 2, 516/1280*screenW, 461/800*screenH, "Recover account", false)
            guiWindowSetSizable(registerWindow, false)
            guiSetVisible(registerWindow, false)
            guiSetAlpha(registerWindow, 0.-- s8) -->
     
            usernameR = guiCreateEdit(156/1280*screenW, 51/800*screenH, 208/1280*screenW, 37/800*screenH, "", false, registerWindow)
            myLabelS = guiCreateLabel(44/1280*screenW, 64/800*screenH, 112/1280*screenW, 34/800*screenH, "Acc username:", false, registerWindow)
            guiSetFont(myLabelS, "default-bold-small")
            secretAnswerR = guiCreateEdit(156/1280*screenW, 113/800*screenH, 208/1280*screenW, 37/800*screenH, "", false, registerWindow)
            myLabel2 = guiCreateLabel(44/1280*screenW, 126/800*screenH, 112/1280*screenW, 34/800*screenH, "E-Mail:", false, registerWindow)
            guiSetFont(myLabel2, "default-bold-small")
            goBack = guiCreateButton(23/1280*screenW, 37/800*screenH, 73/1280*screenW, 24/800*screenH, "Back", false, registerWindow)
            submitR = guiCreateButton(113/1280*screenW, 390/800*screenH, 272/1280*screenW, 49/800*screenH, "Recover", false, registerWindow)
            myLabel1 = guiCreateLabel(18/1280*screenW, 199/800*screenH, 488/1280*screenW, 163/800*screenH, "We are not able to do anything if you lost your e-mail or username. ", false, registerWindow)    
        end
    )
     
        function setWarningText(text, r, g, b)
            if not text or not r or not g or not b then
                return
            end
            guiSetText(GUIEditor.label[4], tostring(text))
            guiLabelSetColor(GUIEditor.label[4], r, g, b)
        end
        addEvent('setWarning', true)
        addEventHandler('setWarning', root, setWarningText)
     
        function setRegisterWarningText(text, r, g, b)
            if not text or not r or not g or not b then
                return
            end
            guiSetText(sLb5, tostring(text))
            guiLabelSetColor(sLb5, r, g, b)        
        end
        addEvent('setRegisterWarning', true)
        addEventHandler('setRegisterWarning', root, setRegisterWarningText)
     
        function windowHandler( )
            local playername = getPlayerName(localPlayer)
            guiSetText(GUIEditor.edit[1], "")
            guiSetText(GUIEditor.edit[2], "")
            setWarningText("Always read the rules before playing!", 0, 255, 0)
            setRegisterWarningText("Don't tell your password to anyone!", 0, 255, 0)
            guiSetVisible ( GUIEditor.window[1], false )
            guiSetVisible ( reg, false )
            guiSetInputEnabled( false )
            showCursor ( false )
        end
        addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), windowHandler )
       
        function playerPressedKey(s)
            elements = {
                        GUIEditor.edit[1],
                        GUIEditor.edit[2],
                        sAnswer,
                        editbox,
                        editbox1,
                        editbox2,
                        secretAnswerR,
                        usernameR,
                        }
            triggers = {
                "isValidUsername",
                "isValidPassword",
                "isValidSecretAnswer",
                "isValidUsername",
                "isValidPassword",
                "isValidPassword",
                "isValidSecretAnswer",
                "isValidUsername",
                        }
            parents = {
                        "setWarning",
                        "setWarning",
                        "setRecoverText",
                        "setRegisterWarning",
                        "setRegisterWarning",
                        "setRegisterWarning",
                        "setRecoverText",
                        "setRecoverText"
                      }
            for k,v in ipairs(elements) do
                if v == s then
                    if elements[k] == elements[4] then
                        triggerServerEvent("isValidR", localPlayer, guiGetText(s), parents[k])
                    else
                        triggerServerEvent(triggers[k], localPlayer, guiGetText(s), parents[k])
                    end
                end
            end
        end
        addEventHandler("onClientGUIChanged", guiRoot, playerPressedKey)
                function resetFields()
                guiSetText(sAnswer, "")
                guiSetText(editbox2, "")
                guiSetText(editbox, "")
                guiSetText(usernameR, "")
                guiSetText(GUIEditor.edit[1], "")
                guiSetText(GUIEditor.edit[2], "")
                guiSetText(secretAnswerR, "")
                guiSetText(editbox1, "")
            end
        addEvent('resetFields', true)
        addEventHandler('resetFields', root,resetFields )
     
     
        function login ()
            if (source == GUIEditor.button[1]) then
                if guiCheckBoxGetSelected( GUIEditor.checkbox[1] ) == true then
                    triggerServerEvent ( "onLogin",getRootElement(), localPlayer, guiGetText(GUIEditor.edit[1]), guiGetText(GUIEditor.edit[2]) )
        removeEventHandler("onClientKey", root, fock)
                else
                    triggerServerEvent("kickPlayer", localPlayer)
                end
            end
        end
         addEventHandler ( "onClientGUIClick", guiRoot, login )
         
            function setRecoverText(text, r, g, b)
                guiLabelSetColor(myLabel1, r, g, b)
                guiSetText(myLabel1, tostring(text))
            end
            addEvent("setRecoverText", true)
            addEventHandler("setRecoverText", root, setRecoverText)
     
           function recover(button, state)
                if (button == "left" and state == "up") then
                    if source == goBack then
                        guiSetVisible( registerWindow, false )
                        guiSetVisible( GUIEditor.window[1], true )
                        resetFields()
                    elseif source == submitR then
                        local acc = guiGetText(usernameR)
                        local secret = guiGetText(secretAnswerR)
                        if secret == "" then
                            setRecoverText("Please type something at editbox of e-mail.", 255, 0, 0)
                            return
                        elseif acc == "" then
                            setRecoverText("No account entered! Sorry!", 255, 0, 0)
                            return
                        end
                       
  6. That's not getting the initial state. When a player gets in a vehicle it turns on the engine by itself so it's always going to be true.

    I could set the engine state to false through onPlayerVehicleEnter but that's not what I'm looking for. Because with my code, I can choose to leave the engine on when I exit a vehicle. But when I choose to leave the engine off and exit en re-enter the vehicle it'll turn the engine back on.

    So to be more clear: When I leave the engine off and exit, when I enter again and use getVehicleEngineState then it will return true because the engine turns back on by it self. I hope you understand what I mean.

    I remember there is an event that is triggered when the player starts entering a vehicle, you can use this one and if the engine is off then after the player enter the vehicle use setEngineState to turn it off. When the player exit you can just easily use the onPlayerVehicleExit trigger and turn the engine off with setEngineState

  7. Hello everyone, I have an problem in my VIP panel, I need to make it

    -------------------------------------------------------------------------

    function reparar12 ( )

    if (not isElement(plr)) then return end

    end

    local veh = getPedOccupiedVehicle(plr)

    setElementHealth(veh, 1000)

    fixVehicle(veh)

    -------------------------------------------------------------------------

    It won't work

    what I need do :/?

    please help me

    Show the full code, also show your codes with the "lua" funcion, otherwise it's hard to read

  8. Hello guys.How to get the vehicle top speed ? I want to ask , i know about handling and how to set it,get it , but i try maxVelocity and it says that maxVelocity is 160 but car goes over 130 km/h .Do you have any good math formula or something how to get real max speed.I read about that GTA:SA Engine is bad and because i can't get the max speed of the vehicle yeah i know that in the hightway the car goes over 140 and near some gang streets same car max Speed is 110 .But is there any way to get it ? :idea:

    use

    getVehicleHandling() 
    

    The max speed is also depending on the road

  9. Those functions are for checking if elements are rendered by the GTA engine.

    step 1) You add those two events to two functions.

    step 2) On both of those functions. You validate the source element with the type "vehicle", using the function getElementType.

    step 3) Use the event onClientElementStreamIn (+ function) to insert the a sound with the source as key of the table.

      
    local sound = playSound3D(engine_sound, x, y, z, true) 
    if sound  then 
     local_sound[source] =  sound 
     setElementParent(sound,source) 
    end 
    

    and you set the source element as parent of the sound element with setElementParent. (when the vehicle gets destroyed, the sound element is also gone)

    step 4) Use the event onClientElementStreamOut (+ function) to receive the sound with the source as key of the table. Delete the sound with stopSound. And as last you nil a table location with the sound element as key.

    local sound = local_sound[source]  
    if isElement(sound) then 
     destroyElement(sound) 
    end 
    local_sound[source] = nil 
    

    Extra info

    The only thing you have to take a closer look at is that you have to check the table ones in while(maybe 2 hours?) for destroyed vehicles. This can be done with using getTickCount(). But this is extra, I don't think there are a lot of players playing longer than 10 hours. Or you can choose for onClientElementDestroy to replace the use of setElementParent.

    Thank you, that's very helpful

  10. Line 6 and 7. >local RPM = getVehicleRPM(veh)< >setElementData(veh,"RPM",RPM)<

    Move after: if veh then

    Line 19: Validate sound with isElement before destroying it.

    Line 31: Validate the sound with if state, before setting it's volume etc.

    Line 44: Makes no sense, nilling an location but losing access to the sound element.

    But what I strongly recommend you, is not using the player as key of the table but the vehicles instead.

    Use to add and remove from the table: https://wiki.multitheftauto.com/wiki/On ... ntStreamIn and https://wiki.multitheftauto.com/wiki/On ... tStreamOut

    Hello, I have made it as you said, don't know if it will work or not. What exactly do these events work? ( how to apply these 2 events in this very script ?)

  11. Here is a part of arresting system scripts:

    addEvent("onPlayerArrested",true) 
    addEventHandler("onPlayerArrested",root, 
    function(arrestercop) 
        arrester = arrestercop 
        toggleAllControls(false,true,false) 
        fadeCamera() 
        setCameraTarget(arrestercop) 
        addEventHandler("onClientRender",root,cuffed) 
    end) 
      
    function cuffed()   
        local copx, copy, copz = getElementPosition (arrester) 
        local x, y, z = getElementPosition (localPlayer) 
        local rx, ry, _ = getElementRotation (localPlayer) 
        local dist = getDistanceBetweenPoints2D (copx, copy, x, y) 
        local relx = copx - x 
        local rely = copy - y 
        if rely == 0 then 
            if relx < 0 then  
                copangle = 90  
            else 
                copangle = 270 
            end 
        else 
            if rely > 0 then 
                local copangle = 360 - math.deg(math.atan(relx / rely)) % 360 
            else 
                local copangle = 180 - math.deg(math.atan(relx / rely)) 
            end 
        end 
        setElementRotation(localPlayer,_,_, copangle) 
        if dist < 5 then 
            setControlState("forwards", false) 
            setControlState("sprint", false ) 
        else 
            setControlState("forwards", true) 
            setControlState("sprint", true ) 
            if dist > 50 then 
                setElementPosition(localPlayer,copx,copy,copz) 
            end 
        end 
    end 
    

    The arrested players can still change the direction when they move the mouse, any help?

  12. Create a table for storage sound elements. Also you must add an event which sets sound element to nil. (onClientPlayerQuit)

    English isn’t my first language, so please excuse any mistakes.

      
    function onClientPlayerQuit_Handler() 
    if isElement(local_sound[source]) then 
          local_sound[source] = nil 
    end 
    end 
    addEventHandler("onClientPlayerQuit", root, onClientPlayerQuit_Handler) 
      
    

      
    local local_sound = {} 
      
    function engine_func() 
        local veh = getPedOccupiedVehicle (localPlayer) 
        local RPM = getVehicleRPM(veh) 
        setElementData(veh,"RPM",RPM) 
        --edit #1 
        if veh then 
            if getVehicleEngineState (veh) == true then 
                setSoundVolume(local_sound[localPlayer],1) 
                setSoundSpeed(local_sound[localPlayer], RPM * 2.5 / 10000) 
            else 
                if getSoundVolume(local_sound[localPlayer]) == 1 then 
                    setSoundVolume(local_sound[localPlayer],0) 
                end 
            end 
        else 
            destroyElement(local_sound[localPlayer]) 
            removeEventHandler("onClientRender",root,engine_func) 
        end 
    end 
      
    addEventHandler ( "onClientVehicleEnter", getRootElement(), 
    function( thePlayer ) 
        if getElementModel ( source ) == 411 then 
            setWorldSoundEnabled(40,false) 
            local x,y,z = getElementPosition(source) 
            if vehicles[source] then vehicles[source] = nil end 
            --edit #2 
            local_sound[thePlayer] = playSound3D(engine_sound, x, y, z, true) 
            setSoundVolume(local_sound[thePlayer],0) 
            attachElements(local_sound[thePlayer],source) 
            addEventHandler ( "onClientRender", getRootElement(), engine_func ) 
        end 
    end) 
      
    addEventHandler ( "onClientVehicleExit", getRootElement(), function( thePlayer ) 
        if getElementModel(source) == 411 then 
            setWorldSoundEnabled(40,true) 
            --edit #3 
            --destroyElement(local_sound[thePlayer]) 
            --or 
            local_sound[thePlayer] = nil 
            removeEventHandler ( "onClientRender", getRootElement(), engine_func ) 
        end 
    end) 
      
    

    Not working, same problem

  13. So i want make for my RP server script when you drive 10k miles, tire's will blow up. Sometimes front left/right, sometimes rear right/left for that i will use math.random function. But how can i make when exactly you have driven 10k miles the tire will blow?

    Use

      
    getElementPosition() 
    setTimer() 
      
    

    This won't give you the most precise mileage (should be smaller than the actual number), but it also won't cause any lag

  14. Hello.

    I want to ask, if there is any better, or faster way to import handlings from HEDIT into script - so basically the cars will load with their handlings on spawn.

    I have one way, but that's just too long plus you can't set everything (such as double exhaust)

    I hear about editing handling.cfg but what I have to do for that?

    Are you looking for this? :

    setVehicleHandling 
    

  15. Hello guys, it is possible make a radio which can play sounds from your GTA folder, I know that there is radio channel who do that, but i want activate only this channel

    Do you mean this:

    playSFX 
    

  16. Hello, i have a housing for my server RPG. but needs a data base for save all, this housing has, car shop, boat shop and house shop. one scripter he told me without data base no work the script, I don't know create a data base, Somebody help me, Please, Only i lack this script for open my server . Please help me and Thank you!

    Error in debugscript

    [2015-11-21 19:05:45] ERROR: RPGhousing\rpghousing.lua:221: Database query failed: no such table: icon_data 
    [2015-11-21 19:05:45] ERROR: RPGhousing\rpghousing.lua:222: bad argument #1 to 'ipairs' (table expected, got string) 
    

    Line of error

    local iconsTable = executeSQLSelect("icon_data","houseid,status,x,y,z") 
        for k,v in ipairs(iconsTable) do 
            local id = v.houseid 
            local status = v.status 
            if string.find(id,"safe") then 
    

    Firstable, you should use executeSQLQuery instead

    Read and learn more : https://wiki.multitheftauto.com/wiki/Database

  17. Your problem is that you didn't sync your function to the server side, use triggerServerClient and then triggerClientEvent for all the players in the server

    I didn't realize that, thanks! I have another question, too small for making it a post.

    Can you get a return in server-side, by a client-side? Or vice versa

    You can just use triggerServerEvent to trigger back

  18. Then it's strange, I can't tell why this script doesn't run good. It only works when it's playing the sound for one player only, when it plays for the second player the first player can not hear it anymore.
    function engine_func() 
        local veh = getPedOccupiedVehicle (localPlayer) 
        local RPM = getVehicleRPM(veh) 
        setElementData(veh,"RPM",RPM) 
        if veh then 
            if getVehicleEngineState (veh) == true then 
                setSoundVolume(local_sound,1) 
                setSoundSpeed(local_sound, RPM * 2.5 / 10000) 
            else 
                if getSoundVolume(local_sound) == 1 then 
                    setSoundVolume(local_sound,0) 
                end 
            end 
        else 
            destroyElement(local_sound) 
            removeEventHandler("onClientRender",root,engine_func) 
        end 
    end 
      
    addEventHandler ( "onClientVehicleEnter", getRootElement(), 
    function() 
        if getElementModel ( source ) == 411 then 
            setWorldSoundEnabled(40,false) 
            local x,y,z = getElementPosition(source) 
            if vehicles[source] then vehicles[source] = nil end 
            local_sound = playSound3D(engine_sound, x, y, z, true) 
            setSoundVolume(local_sound,0) 
            attachElements(local_sound,source) 
            addEventHandler ( "onClientRender", getRootElement(), engine_func ) 
        end 
    end) 
      
    addEventHandler ( "onClientVehicleExit", getRootElement(), function() 
        if getElementModel(source) == 411 then 
            setWorldSoundEnabled(40,true) 
            destroyElement(local_sound) 
            removeEventHandler ( "onClientRender", getRootElement(), engine_func ) 
        end 
    end) 
    

    No solution?

×
×
  • Create New...