Jump to content

Recuperar contraseña del almacen en npc


Dilong

Mensajes recomendados

Spoiler

quest contraseña begin
state start begin
when 9005.chat."Recuperar contraseña(Registrarse)" begin
local info,s = mysql_direct_query("SELECT account_id FROM player.registro_almacen")
	for i=1,info do
		if pc.get_account_id()==s[i].account_id then
			say("Ya estas registrado")
			return end end
say_title("Npc")
say("Hola "..pc.get_name().."")
say("veo que esta es la primera vez[ENTER]que estas usando esta opcion")
say("si te registras podras recuperar la[ENTER]contraseña del almacen")
say("ingresando los datos que hayas puesto")
local contraseña = select("Registrarse","Despues")
say_title("Npc")
say("Ingresa la pregunta secreta")
say_reward("Maximo 20 caracteres")
if contraseña == 1 then
	local pregunta = input()
	if pregunta == "" then
		say("error")
		return end
		if string.len(pregunta) > 20 then
			say_reward("Maximo 20 caracteres")
			return end
	say_title("Npc")
	say("Ingresa la respuesta secreta")
	say_reward("Maximo 20 caracteres")
	local respuesta = input()
	if respuesta == "" then
		say("error")
		return end
		if string.len(respuesta) > 20 then
			say_reward("Maximo 20 caracteres")
			return end
				mysql_direct_query("INSERT INTO player.registro_almacen(account_id, pregunta,respuesta) VALUES ('"..pc.get_account_id().."', '"..pregunta.."', '"..respuesta.."')")
				say_title("Npc")
				say_reward("Registrado")
				pc.setqf("intentos",3)
				say("Pregunta: "..pregunta.."")
				say("Respuesta: "..respuesta.."")
				say_reward("Si fallas tres (3) veces al ingresar[ENTER]los datos, tendras que esperar 24hs para[ENTER]volver a intentarlo")
				return
			end
		end
		when 9005.chat."GM Recuperar contraseña(Reiniciar)" with pc.is_gm() begin
		say_title("Npc:")
		say("Esto reiniciara el tiempo de espera para volver a[ENTER]ingresar los datos")
		say_reward("Esto solo afecta al pj GM")
		local rs = select("Reiniciar","Cerrar")
		if rs == 1 then
			pc.setqf("tiempo_uso",0)
			pc.setqf("contador",0)
			pc.setqf("intentos",3)
			return end end
		when 9005.chat."Recuperar contraseña" begin
		say_title("Npc")
		if get_time() < pc.getqf("tiempo_uso") then
			say("Faltan ".. pc.getqf("tiempo_uso") - get_time().." segundos para volver a escribir los datos")
			return end
		say("Escribe los datos")
		local info,s = mysql_direct_query("SELECT pregunta, respuesta FROM player.registro_almacen WHERE account_id = '"..pc.get_account_id().."'")
		say_reward("Pregunta: "..s[1].pregunta.."")
		local check = input()
		if check == "" then
			say("error")
			return end
			if string.len(check) > 20 then
				say_reward("Maximo 20 caracteres")
				return end
				if check == s[1].respuesta then
					local info2,s2 = mysql_direct_query("SELECT password FROM player.safebox WHERE account_id = '"..pc.get_account_id().."'")
					say_reward("Contraseña: "..s2[1].password.."")
				else
					say_reward("Incorrecto")
					say_reward("Intentos: "..pc.getqf("intentos").."")
					pc.setqf("intentos",pc.getqf("intentos")-1)
					pc.setqf("contador",pc.getqf("contador")+1)
					if pc.getqf("contador") >= 3 then
						pc.setqf("tiempo_uso", get_time() + 60*60*24)
						pc.setqf("contador",0)
						pc.setqf("intentos",3)
						return
					end
				end
			end
		end
	end

 

Sql:
 

Spoiler



SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for registro_almacen
-- ----------------------------
DROP TABLE IF EXISTS `registro_almacen`;
CREATE TABLE `registro_almacen`  (
  `account_id` int(8) NOT NULL,
  `pregunta` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `respuesta` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  PRIMARY KEY (`account_id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 

Avisen si les da algun problema

Enlace para comentar
Compartir en otros sitios

Este código en la parte de insertar preguntas y respuesta no hace una comprobación de caracteres no permitidos(Inyección SQL), los cual permitiría cambiar las preguntas y respuestas de todos los registros de la tabla entre otras cosas pequeñas e.e

Enlace para comentar
Compartir en otros sitios

hace 26 minutos, Johan™ dijo:

Este código en la parte de insertar preguntas y respuesta no hace una comprobación de caracteres no permitidos(Inyección SQL), los cual permitiría cambiar las preguntas y respuestas de todos los registros de la tabla entre otras cosas pequeñas e.e

Faltaria comprobar eso, pero seguro que alguien se tome la molestia de intentar algo asi despues de robar la cuenta de alguien?, ademas si se reduce los intentos de tres a uno dudo que lo intente de nuevo 24hs despues hasta que lo logre xd

Enlace para comentar
Compartir en otros sitios

Justo ahora, Dilong dijo:

Faltaria comprobar eso, pero seguro que alguien se tome la molestia de intentar algo asi despues de robar la cuenta de alguien? xd

algunos guardan sus cosas en el almacén <,< solo digo, ademas se pueden hacer otras cosas como un "DROP a la base de datos" supongo e.e

Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...