Jump to content
Sign in to follow this  
Dilong

Recuperar contraseña del almacen en npc

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...