-
Posts
288 -
Joined
-
Last visited
Posts posted by jingzhi
-
-
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!
-
Quote
- scale: the size of the text.scale: can (optionally) be specified as two floats. i.e. scaleX, scaleY
As it indicated in the wikipage of dxDrawText (https://wiki.multitheftauto.com/wiki/DxDrawText), the font scale can be splitted into 2 variables. However, I am not quite sure how to do that. Can anyone give me an example on how can it be implemented? Thanks in advance!
-
Cool! Thank you!
-
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?
-
(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"
-
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
-
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
-
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
-
hmm, xwad, i need to make script or i can put this in console?
Dude you should learn a lot more then come back and ask....
-
-
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
-
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 ?
use
getVehicleHandling()
The max speed is also depending on the road
-
You can't load the meta.xml client side.
Thank you!
-
Hello!
meta = xmlLoadFile ("meta.xml")
for index,node in pairs ( xmlNodeGetChildren ( meta ) ) do
xmlLoadFile returns false, here is the xml file:
Any thoughts?
-
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
-
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 ?)
-
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?
-
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
-
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
-
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
-
-
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
-
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
-
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?
Splitting the font scale of dxDrawText into 2 variables
in Scripting
Posted
Great, thank you!