Monsthers Posted August 28, 2016 Share Posted August 28, 2016 Hola comunidad de MTA tengo un panel login que logea a miembros de SQL añadidos a registry.db mi problema es que he intentado que lea tambien a miembros de ACL pero se me ha hecho imposible, Era para pedirles una ayuda a ustedes haber si podian ayudarme :cc Quiero que registre y que haga logeo a miembros de SQL (Registry.db) y a miembros de ACL Si no es mucho pedir :c Gracias antemano Client local resX,resY = guiGetScreenSize() local login = {} local register = {} local feedback = {} login.rules = "Una vez que estes logeado, porfavor lee las reglas en F1, si no cumples las reglas puedes ser baneado del servidor, en F1 puedes encontrar informacion de trabajos, gangs, grupos, etc." login.message = "Ingresa tu usuario y clave" local passwordEditChanged = true function createGUI() local serial = getPlayerSerial() login.window = guiCreateWindow ( resX /2 -190 , resY /2-120 , 380, 240, "SAVG:RPG Ventana de Logeo", false ) login.savePWCheck = guiCreateCheckBox ( 285, 142.5, 16, 16, "", false, false, login.window ) login.ruleslabel = guiCreateLabel ( 10, 30, 360, 100, login.rules, false, login.window ) login.usernameEdit = guiCreateEdit ( 150, 110, 130, 25, "", false, login.window ) login.passwordEdit = guiCreateEdit ( 150, 140, 130, 25, "", false, login.window ) login.instructions = guiCreateLabel ( 72.5, 80, 240, 15, login.message, false, login.window ) login.save = guiCreateLabel ( 285, 158, 34, 18, "(Guardar)", false, login.window ) login.usernameLabel = guiCreateLabel( 80, 115, 60, 15, "Usuario:", false, login.window ) login.passwordLabel = guiCreateLabel( 80, 145, 60, 15, "Clave:", false, login.window ) login.loginbtn = guiCreateButton( 90, 190, 80, 30, "Logearse", false, login.window ) login.regbtn = guiCreateButton ( 190, 190, 80, 30, "Registrarse", false, login.window ) guiSetInputMode("no_binds_when_editing") guiSetFont ( login.loginbtn, "default-bold-small" ) guiSetFont ( login.regbtn, "default-bold-small" ) guiEditSetMasked(login.passwordEdit,true) guiSetFont ( login.save, "default-small" ) guiLabelSetColor ( login.ruleslabel, 255, 0, 0 ) guiSetFont ( login.ruleslabel, "default-bold-small" ) guiLabelSetHorizontalAlign ( login.ruleslabel, "center", true ) guiWindowSetMovable ( login.window, false ) guiWindowSetSizable ( login.window, false ) if not getElementData(localPlayer,"loggedIn") then showCursor(true) showBackground(true) guiSetVisible(login.window,true) guiSetInputEnabled(true) else showBackground(false) guiSetVisible(login.window,false) end -- register GUI register.window = guiCreateWindow ( resX /2 -250 , resY /2-200, 500, 400, "SAVG:RPG Ventana de Registro", false ) local registernode = xmlLoadFile("files/xml/register.xml") local registertext = xmlNodeGetValue(registernode) xmlUnloadFile(registernode) register.memo = guiCreateMemo( 5, 25, 490, 220, registertext, false, register.window ) guiCreateLabel ( 15, 262.5, 60, 15, "Usuario:", false, register.window ) register.useredit = guiCreateEdit ( 80, 260, 100, 25, "", false, register.window ) guiCreateLabel ( 15, 292.5, 60, 15, "Clave:", false, register.window ) register.passedit = guiCreateEdit ( 80, 290, 100, 25, "", false, register.window ) guiCreateLabel ( 190, 292.5, 100, 15, "", false, register.window ) guiCreateLabel ( 15, 322.5, 120, 15, "Confirmar Clave:", false, register.window ) register.confpassedit = guiCreateEdit ( 120, 320, 100, 25, "", false, register.window ) guiCreateLabel ( 15, 352.5, 60, 15, "Email:", false, register.window ) register.emailedit = guiCreateEdit ( 80, 350, 100, 25, "", false, register.window ) guiCreateStaticImage ( 310, 250, 115, 95, "files/images/savg.png", false, register.window ) register.regbtn = guiCreateButton ( 280, 350, 80, 25, "Register", false, register.window ) register.closebtn = guiCreateButton( 380, 350, 80, 25, "Cancelar", false, register.window ) guiEditSetMasked ( register.passedit, true ) guiEditSetMasked ( register.confpassedit, true ) if isElement(register.caselabel) then guiSetFont ( register.caselabel, "default-bold-small" ) end guiMemoSetReadOnly ( register.memo, true ) guiWindowSetMovable ( register.window, false ) guiWindowSetSizable ( register.window, false ) guiSetVisible ( register.window, false ) -- errorbox GUI feedback.window = guiCreateWindow ( resX /2 -150 , resY /2-100, 300, 200, "SAVG:RPG - Informacion", false ) guiSetProperty(feedback.window,"AlwaysOnTop","True") feedback.memo = guiCreateMemo ( 5, 25, 295, 125, "", false, feedback.window ) feedback.okbutton = guiCreateButton ( 110, 160, 80, 25, "OK", false, feedback.window ) guiMemoSetReadOnly ( feedback.memo, true ) guiWindowSetMovable ( feedback.window, false ) guiWindowSetSizable ( feedback.window, false ) guiSetVisible ( feedback.window, false ) -- Message GUI noticewindow = guiCreateWindow ( resX /2 -175 , resY /2-100, 350, 200, "SAVG:RPG - Informacion", false ) guiSetProperty(noticewindow,"AlwaysOnTop","True") guiSetAlpha(noticewindow, 1) noticetext = guiCreateLabel ( 15, 20, 332, 125, "", false, noticewindow ) noticeokbutton = guiCreateButton ( 135, 160, 80, 25, "OK", false, noticewindow ) guiWindowSetMovable ( noticewindow, false ) guiWindowSetSizable ( noticewindow, false ) guiSetText ( noticetext, "Por Favor Leer La Nota: Bievenido a SAVG:RPG un servidor con la mejor experiencia de juego, Por ahora estamos usando 2 Login por motivos de seguridad! Recuerda nuestro server es nuevo y no queremos que pierdas tus cosas! Pronto usaremos solo 1 estamos trabajando en eso." ) guiLabelSetColor(noticetext, 255,0,0) guiSetFont ( noticetext, "default-bold-small" ) guiLabelSetHorizontalAlign ( noticetext, "center", false ) guiSetVisible ( noticewindow, false ) guiBringToFront ( noticewindow ) addEventHandler("onClientGUIClick",resourceRoot,onWindowClicked) addEventHandler("onClientGUIAccepted",resourceRoot,onGUIAccepted) addEventHandler("onClientGUIChanged",resourceRoot,onEditChanged) loginFilePath = "files/xml/"..md5(serial.."SAVGlogin")..".xml" oldFile = xmlLoadFile("files/xml/login.xml") if oldFile then xmlNodeSetValue(oldFile,"") xmlSaveFile(oldFile) xmlUnloadFile(oldFile) oldFile = nil end loginFile = xmlLoadFile(loginFilePath) if loginFile then usernameNode = xmlFindChild(loginFile,"username",0) if not usernameNode then usernameNode = xmlCreateChild(loginFile,"username","") end --passwordNode = xmlNodeFindChild(loginFile,"password",0) passkeyNode = xmlFindChild(loginFile,"passkey",0) if not passkeyNode then passkeyNode = xmlCreateChild(loginFile,"passkey","") end local passwordNode = xmlFindChild(loginFile,"password",0) if passwordNode then xmlDestroyNode(passwordNode) end xmlSaveFile(loginFile) else loginFile = xmlCreateFile(loginFilePath,"login") usernameNode = xmlCreateChild(loginFile,"username","") passkeyNode = xmlCreateChild(loginFile,"passkey","") xmlSaveFile(loginFile) end fillCredentials() end addEventHandler("onClientResourceStart",resourceRoot,createGUI) function onWindowClicked(button,state) if button == "left" and state == "up" then if source == login.loginbtn then local username = guiGetText(login.usernameEdit):lower() local password = guiGetText(login.passwordEdit) if username and username ~= "" and password and password ~= "" then if passwordEditChanged then triggerServerEvent("SAlogin.playerLogin",localPlayer,username,md5(username.."SAVG"..password):lower(),getPlayerSerial()) else triggerServerEvent("SAlogin.playerLogin",localPlayer,username,password,getPlayerSerial()) end else showError("Ingresa un usuario y una contraseña.") end elseif source == login.regbtn then showRegister() showBackground(true) elseif source == register.closebtn then hideRegister() elseif source == feedback.okbutton then hideError() elseif source == noticeokbutton then hideMsg() elseif source == register.regbtn then local username = guiGetText(register.useredit):lower() local password = guiGetText(register.passedit) local confpass = guiGetText(register.confpassedit) local email = guiGetText(register.emailedit) if username and password and confpass and email and username ~= "" and password ~= "" and email ~= "" then if password == confpass then if #password >= 6 then password = md5(username.."SAVG"..password):lower() if string.find (email, "@") and string.find (email, "%.") then triggerServerEvent("SAlogin.playerRegisterAccount",localPlayer,username,password,email) else showError("Direccion de email incorrecta") end else showError("La clave debe tener como minimo 6 numeros") end else showError("Las claves no coinciden") end else showError("Llena todos los formatos por favor") end end end end function onGUIAccepted() if source == login.passwordEdit then local username = guiGetText(login.usernameEdit):lower() local password = guiGetText(login.passwordEdit) if username and username ~= "" and password and password ~= "" then if passwordEditChanged then triggerServerEvent("SAlogin.playerLogin",localPlayer,username,md5(username.."SAVG"..password):lower(),getPlayerSerial()) else triggerServerEvent("SAlogin.playerLogin",localPlayer,username,password,getPlayerSerial()) end else showError("Ingresa un usuario y una clave.") end end end function onEditChanged() if source == login.passwordEdit then passwordEditChanged = true end end function fillCredentials() -- we assume loginFile, passkeyNode and usernameNode exist if loginFile and passkeyNode and usernameNode then local usertext = xmlNodeGetValue(usernameNode) local passkey = xmlNodeGetValue(passkeyNode) if usertext and passkey and usertext ~= "" then guiSetText(login.usernameEdit,usertext) guiSetText(login.passwordEdit,passkey) guiCheckBoxSetSelected(login.savePWCheck,true) passwordEditChanged = false end end end function saveCredentials() if loginFile and passkeyNode and usernameNode then local usertext,passkey if guiCheckBoxGetSelected(login.savePWCheck) == false then usertext,passkey = "","" else usertext = guiGetText(login.usernameEdit):lower() passkey = guiGetText(login.passwordEdit) end if usertext and passkey then if passwordEditChanged then passkey = md5(usertext.."SAVG"..passkey):lower() end xmlNodeSetValue(usernameNode,usertext) xmlNodeSetValue(passkeyNode,passkey) xmlSaveFile(loginFile) --xmlUnloadFile(loginFile) loginFile = nil end end end addEventHandler("onClientResourceStop",resourceRoot,saveCredentials) function showLogin() showBackground(true) Link to comment
Bc# Posted September 1, 2016 Share Posted September 1, 2016 A que te refieres con que lea los miembros de la acl? Con que objetivo quieres hacerlo? Link to comment
Monsthers Posted September 1, 2016 Author Share Posted September 1, 2016 A que te refieres con que lea los miembros de la acl? Con que objetivo quieres hacerlo? Este login solo lee los miembros añadidos ala database "Registry.db" lo que quiero es que lea tambien los de acl! Yo tengo un panel para los staff que se loguen en la database pero el panel admin lo quiero para los miembros full.. Y como el panel loguea solo a los de database cuando un admin full entra tiene que loguearse manualmente usando /Login o /Register y asi no lo quiero! Quiero que lea a ambos (Ala database "Registry.db" y alos miembros añadidos a ACL) con el fin de loguear a ambos sin necesidad de estar uno manualmente y otro con el panel... Lo que quisiera sin mas pedir es que le añadan esa funcion ya el tiene las funciones para que logue alos de la database ahora si ustedes como ayuda podrian añadirle las funciones para que registre y logue alos de ACL asi podria tener el panel bien Gracias antemano Link to comment
Bc# Posted September 1, 2016 Share Posted September 1, 2016 Por lo que entendi, creaste tu propio sistema de logueo. Las cuentas no se registran y loguean en la base de datos de MTA. Al no hacer esto, no puedes hacer uso de las funciones Account. Al no poder usarlas, eso te imposibilita dar derechos de ACL. Puedes resolverlo de 2 maneras: - Una solucion seria tener usar tu base de datos y loguear igualmente a los players en la base de datos por defecto de MTA, asi igualmente tendrias acceso a tu base de datos, pero no seria muy optimo usar 2. - Podrías crear tu propio sistema de acl y por consiguiente tendrias que hacer tu propio panel admin. Si eres buen scripter te aconsejo la segunda opcion, ya que al hacer esto tendrás que editar tus scripts que usen funciones de tipo Account. Si recién estas comenzando mejor haz la primera. Link to comment
Recommended Posts