TheMasterNico Posted May 16, 2015 Share Posted May 16, 2015 Acabo de hacer este registro e ingreso con mysql. Lo libero y también pido sus criticas, para ver como esta el código, si le puedo cambiar algo para que funcione mejor y cosas así. meta.xml "Nicolas Castillo (TheMasterNico)" type="gamemode" name="Blod Gamer Role Play" description="Servidor roleplay en español [blod Gamer]" /> client="1.4.1" server="1.4.1" /> client_login.lua function ShowLogin1() LoginButton = guiCreateButton(0.38, 0.57, 0.10, 0.04, "Ingresar", true) guiSetProperty(LoginButton, "NormalTextColour", "FFFFFFFF") RegisterButton = guiCreateButton(0.52, 0.57, 0.10, 0.04, "Registro", true) guiSetProperty(RegisterButton, "NormalTextColour", "FFFFFFFF") --LoginSaveName = guiCreateCheckBox(0.50, 0.50, 0.12, 0.02, "Guardar cuenta.", false, true) --guiSetProperty(LoginSaveName, "NormalTextColour", "FF000000") LoginName = guiCreateEdit(0.50, 0.40, 0.12, 0.03, "", true) guiEditSetMaxLength (LoginName, 24) -- Max Username length is 24 LoginPass = guiCreateEdit(0.50, 0.44, 0.12, 0.03, "", true) guiEditSetMaxLength (LoginPass, 32) -- Max Password length is 32 guiEditSetMasked(LoginPass, true) showCursor(true) guiSetInputEnabled(true) addEventHandler("onClientGUIClick", LoginButton, CheckLogin) -- Evento para comprobar el ingreso addEventHandler("onClientGUIClick", RegisterButton, CheckRegister) -- Evento para comprobar el registro end function ShowLogin2() local screenW, screenH = guiGetScreenSize() dxDrawRectangle(screenW * 0.3438, screenH * 0.2894, screenW * 0.3134, screenH * 0.4225, tocolor(0, 0, 0, 255), false) dxDrawRectangle(screenW * 0.3524, screenH * 0.3009, screenW * 0.2960, screenH * 0.3993, tocolor(255, 255, 255, 204), false) dxDrawText("Bienvenido a Blod Gamer...", screenW * 0.3924, screenH * 0.3148, screenW * 0.6146, screenH * 0.3542, tocolor(0, 0, 0, 255), 1.20, "clear", "center", "center", false, true, false, false, false) dxDrawText("Cuenta:", screenW * 0.3802, screenH * 0.4005, screenW * 0.4774, screenH * 0.4317, tocolor(0, 0, 0, 255), 0.50, "bankgothic", "center", "center", false, false, false, false, false) dxDrawText("Contraseña:", screenW * 0.3802, screenH * 0.4433, screenW * 0.4774, screenH * 0.4745, tocolor(0, 0, 0, 255), 0.50, "bankgothic", "center", "center", false, false, false, false, false) dxDrawText("El nombre de la cuenta no es tu nombre dentro del juego.\nSi no tienes una cuenta, se te creara al instante", screenW * 0.3802, screenH * 0.6412, screenW * 0.6146, screenH * 0.6771, tocolor(221, 0, 0, 255), 1.00, "default", "center", "center", false, true, false, false, false) end addEventHandler("onClientResourceStart", resourceRoot, ShowLogin1) addEventHandler("onClientRender", root, ShowLogin2) function CheckLogin(button, state, absoluteX, absoluteY) if ComprobarNombreYPass() == 1 then triggerServerEvent("CheckLoginEvent", resourceRoot, guiGetText(LoginName), guiGetText(LoginPass), 1) -- Enviar evento al server_login.lua para comprobar el ingreso end end function CheckRegister(button, state, absoluteX, absoluteY) if ComprobarNombreYPass() == 1 then triggerServerEvent("CheckLoginEvent", getRootElement(), guiGetText(LoginName), guiGetText(LoginPass), 2) -- Enviar evento al server_login.lua para comprobar el registro end end function ComprobarNombreYPass() local username = guiGetText(LoginName) local password = guiGetText(LoginPass) if username == "" or password == "" then -- Comprobar si los campos estan llenos outputChatBox("#fff714Debes llenar todos los campos para poder ingresar.", 250, 0, 0, true) return 0; elseif string.len(username) < 4 or string.len(password) < 8 then -- Comprobar si tienen el largo adecuado outputChatBox("#fff714El nombre debe tener mínimo 4 letras y la contraseña 8.", 255, 0, 0, true) return 0; elseif string.match(username, "%W") or string.match(password, "%W") then -- Que no contengan caracteres extraños outputChatBox("#fff714Se encontraron caracteres extraños. Solo alfanuméricos por favor.", 255, 0, 0, true) return 0; end return 1; end function DestroyLoginGui() guiSetVisible(LoginButton, false) guiSetVisible(LoginName, false) guiSetVisible(LoginPass, false) guiSetVisible(RegisterButton, false) showCursor(false) guiSetInputEnabled(false) removeEventHandler( "onClientRender", root, ShowLogin2) end addEvent("OcultarLogin", true ) addEventHandler("OcultarLogin", localPlayer, DestroyLoginGui) server_login.lua local MYSQL = dbConnect("mysql", "dbname=MtaBG;host=127.0.0.1", "root", "") function ComprobarLogin(PlayerName, PlayerPass, loginregister) -- Comprobar si esta registrado o no local MitadString = math.floor(string.len(PlayerName)/2) local contra = hash("sha512", string.sub(PlayerName, 0, MitadString) .. PlayerPass .. string.sub(PlayerName, MitadString+1)) --dbQuery(ComprobarCuentaEnDB, MYSQL, "INSERT INTO `userdata`(`Cuenta`, `Password`) VALUES (?, ?)", PlayerName, contra) dbQuery(ComprobarCuentaEnDB, {PlayerName, contra, client, loginregister}, MYSQL, "SELECT * FROM `userdata` WHERE `Cuenta` = ?", PlayerName) -- Si existe o no la cuenta end addEvent("CheckLoginEvent", true) -- Agregar el evento que se llama desde client_login.lua addEventHandler("CheckLoginEvent", resourceRoot, ComprobarLogin) -- Llamar a la función cuando se llama el evento function ComprobarCuentaEnDB(hand, NombreFinal, contra, cliente, loginregister) local result , num_affected_rows, last_insert_id= dbPoll(hand, 0) CheckConsulta(result, num_affected_rows, last_insert_id) if result then if loginregister == 2 then -- Registro if num_affected_rows == 0 then local insert = dbQuery(MYSQL, "INSERT INTO `userdata`(`Cuenta`, `Password`) VALUES (?, ?)", NombreFinal, contra) outputChatBox("#ffffffCuenta registrada correctamente.", cliente, 0, 0, 0, true) outputChatBox("#ffffffAhora puedes dar clic en 'ingresar'.", cliente, 0, 0, 0, true) result , num_affected_rows, last_insert_id= dbPoll(insert, -1) CheckConsulta(resultado, num_affected_rows, last_insert_id) else outputChatBox("#fff714La cuenta ya esta registrada.", cliente, 0, 0, 0, true) end elseif loginregister == 1 then -- Ingreso if num_affected_rows == 0 then outputChatBox("#fff714La cuenta no existe", cliente, 0, 0, 0, true) else for _, row in ipairs ( result ) do if row["Password"] == contra then --outputChatBox(" Contraseñas iguales - ID Player: " .. row["id"], cliente) -- Spawn Player spawnPlayer(cliente, 1743.1999511719, -1863.0999755859, 13.60000038147,0.00274658) fadeCamera(cliente, true) setCameraTarget(cliente, client) outputChatBox("#ffffffBienvenido a #ff0000Blod Gamer", cliente, 0, 0, 0, true) triggerClientEvent(cliente, "OcultarLogin", cliente) -- Obtener datos de la db y guardarlos for column, value in pairs ( row ) do exports.generalgame:set_data(cliente, column, value) end else outputChatBox("#fff714La contraseña es incorrecta", cliente, 0, 0, 0, true) end end end end end end function CheckConsulta(result, num_affected_rows, last_insert_id) if result then outputChatBox( "**Columnas Afectadas: " .. tostring(num_affected_rows) .. "; Ultimo ID insertado: " .. tostring(last_insert_id) ) else local error_code,error_msg = num_affected_rows,last_insert_id outputChatBox( "**Error. Código: " .. tostring(error_code) .. "; Error mensaje: " .. tostring(error_msg) ) end end function crearVehiculoParaJugador(elJugador, nombreDelComando, modeloDeVehiculo) outputChatBox("Data: " .. exports.generalgame:get_data(elJugador, "Cuenta"),elJugador) local x,y,z = getElementPosition(elJugador) x = x + 5 local vehiculoCreado = createVehicle(tonumber(modeloDeVehiculo),x,y,z) if (vehiculoCreado == false) then --"if" es la condición, siempre debe ir acompañado de la condición y un "then". outputChatBox("Error al crear vehiculo.",elJugador) --Crea un mensaje de error simple en el chat. end end addCommandHandler("crearvehiculo", crearVehiculoParaJugador) --Y aqui creamos el manejador de comandos. dataplayer.lua playerData = {} function set_data(player_element, data_key, data_value) -- export this function if type(player_element) == "nil" or type(data_key) == "nil" or type(data_value) == "nil" then return false end if not playerData[player_element] then playerData[player_element] = {} end playerData[player_element][data_key] = data_value return true end function get_data(player_element, data_key) -- export this function if type(player_element) == "nil" or type(data_key) == "nil" then return false end return playerData[player_element][data_key] end function delete_data() -- you have to delete the data when the player quits playerData[source] = nil end addEventHandler('onPlayerQuit', root, delete_data) Base de datos: -- -- Database: `mtabg` -- -- -------------------------------------------------------- -- -- Table structure for table `userdata` -- CREATE TABLE IF NOT EXISTS `userdata` ( `id` int(5) NOT NULL AUTO_INCREMENT COMMENT 'Id del usuario', `Cuenta` varchar(24) NOT NULL COMMENT 'Nombre e la cuenta', `Password` varchar(128) NOT NULL COMMENT 'Contraseña', `CuentaNueva` int(1) NOT NULL DEFAULT '1' COMMENT 'Ver si ya eligio un nombre', `Nombre` varchar(32) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `Cuenta` (`Cuenta`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Link to comment
MTA Team 0xCiBeR Posted May 16, 2015 MTA Team Share Posted May 16, 2015 MySQL permite la integración con mas de una plataforma de trabajo Link to comment
UserToDelete Posted May 16, 2015 Share Posted May 16, 2015 No iria el hash mas seguro si se encriptara por el serial del jugador?, claro que tendria problemas si cambiara de PC Link to comment
TheMasterNico Posted May 16, 2015 Author Share Posted May 16, 2015 No iria el hash mas seguro si se encriptara por el serial del jugador?, claro que tendria problemas si cambiara de PC ¿Ese serial es único? Link to comment
MTA Team 0xCiBeR Posted May 16, 2015 MTA Team Share Posted May 16, 2015 El serial se basa en los IDs de hardware de tu pc. Por lo tanto, sí, es único. Link to comment
Tomas Posted May 17, 2015 Share Posted May 17, 2015 El serial se basa en los IDs de hardware de tu pc. Por lo tanto, sí, es único. Creo que no es tan así, en Uruguay entregaron notebooks a estudiantes y todas tienen la misma serial. Link to comment
Guest Posted May 17, 2015 Share Posted May 17, 2015 El serial se basa en los IDs de hardware de tu pc. Por lo tanto, sí, es único. Creo que no es tan así, en Uruguay entregaron notebooks a estudiantes y todas tienen la misma serial. NOTEBOOKS CON MISMO SERIAL? ._. Eso es casi imposible, cómo fue posible eso? Link to comment
Enargy, Posted May 17, 2015 Share Posted May 17, 2015 Al momento de fabricar la mother card el fabricante pues les asignan una ID que es la serial a la BIOS, por lo tanto pueden ser iguales por lo que yo se. Link to comment
Guest Posted May 17, 2015 Share Posted May 17, 2015 Disculpen si me salgo demasiado del tema de lo que es, pero cuánta probabilidad hay que 2 notebooks tengan el mismo serial? y estoy hablando de notebooks que son distribuidas en locales para su venta Link to comment
Enargy, Posted May 17, 2015 Share Posted May 17, 2015 Disculpen si me salgo demasiado del tema de lo que es, pero cuánta probabilidad hay que 2 notebooks tengan el mismo serial? y estoy hablando de notebooks que son distribuidas en locales para su venta Si el fabricante quiere les pone el mismo serial a 4654 mil notebooks y escritorios. Link to comment
TheMasterNico Posted May 17, 2015 Author Share Posted May 17, 2015 Entonces posiblemente no sea única. Link to comment
MTA Team 0xCiBeR Posted May 17, 2015 MTA Team Share Posted May 17, 2015 Estamos hablando de términos distintos. Es muy diferente un hardware id que esta configurado en la misma placa que un software id. Link to comment
Tomas Posted May 19, 2015 Share Posted May 19, 2015 Bueno, no tengo idea de dónde sale el serial, pero aquí en Uruguay todas las notebooks de la misma clase tienen la misma serial (me refiero a las del gobierno). Link to comment
MTA Team 0xCiBeR Posted May 19, 2015 MTA Team Share Posted May 19, 2015 Bueno, no tengo idea de dónde sale el serial, pero aquí en Uruguay todas las notebooks de la misma clase tienen la misma serial (me refiero a las del gobierno). Algún tipo de estafa quizás? Link to comment
Tomas Posted May 19, 2015 Share Posted May 19, 2015 Bueno, no tengo idea de dónde sale el serial, pero aquí en Uruguay todas las notebooks de la misma clase tienen la misma serial (me refiero a las del gobierno). Algún tipo de estafa quizás? Probablemente, jaja. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now