Jump to content

Sistema de Banco - Como diós manda


PACI

Mensajes recomendados

Hola.

Bueno, esta tarde me aburria, y decidi hacer un sistema de banco, no como los normales, que es depositar el dinero y ale, pero uno con más seguridad al user, sin que haya un limite de yang para guardar.

Y nada que lo vengo a postear.

 

La quest es simple, los jugadores pueden crear su cuenta bancaria escribiendo una contraseña, seleccionando una pregunta de seguridad y una respuesta a la pregunta de seguridad.

Pueden hacer login a su cuenta con su contraseña, si se olvidan, la pueden recuperar, desde que sepan la respuesta a la pregunta de seguridad. Entonces será generado un numero aleatorio que servirá como contraseña hasta que la cambien otra vez.

Y también, una vez echo el login, podeis cambiar vuestros datos.

 

También he adicionado la opción de bloqueo de cuenta. O sea, si falláis la contraseña al hacer login unas 5 veces, sólo podréis volver a intentar conectaros 2 horas después, en mi caso. Y lo mismo sucede si falláis la respuesta a la pregunta de seguridad al intentar recuperar la contraseña.

 

 

Primero adicionais estas funciones que hice al questlib.lua:

 

bank_path = '/game/bank' function readline(path, x)    local linetable = {}    for line in io.lines(path..'/'..pc.name) do        table.insert(linetable, line)    end    return linetable[x]end     function write_in_file(path, text)    if string.find(text, "%[ENTER%]") then        text = string.gsub(text, "%[ENTER%]", "n")    end    local file = io.open(path..'/'..pc.name, 'w')    file:write(text)    file:close()end
Debereis cambiar la variable bank_path para la ruta de la carpeta donde queréis que se guarden los datos de cada personaje.

 

Lo que se guarda en esta carpeta es la contraseña, datos de seguridad y la cantidad de yang que han depositado.

 

Y por fin, la quest:

 

quest advanced_bank begin    state start begin        when 20090.chat.'Bank' begin            local question = {'Your moms name?', 'Your fathers name', 'Your pets name', 'Other'}            say_title'Bank'            if pc.getqf('has_bank_acc') == 0 then                say'Hello! Welcome to our City Bank.[ENTER]I guess you havent an account here.'                say'Let me explain you how this works:'                say_reward'You have to write a password for your account[ENTER]a security question and a security answer.'                say_reward'This will increase your security.[ENTER]No one can access your account unless they[ENTER]have your password.[ENTER]'                say'You just need to pay 1.000.000 Gold[ENTER]to get your bank account.[ENTER]But always, remember:'                say_reward'Do not use other games password.[ENTER]This would make easier to know your pw.[ENTER]And also because'                say_reward'admins can see your password.[ENTER]The same is for your question and answer.[ENTER]'                say'So.. you wanna continue, and get a[ENTER]bank account?'                if select('Yes, of course.', 'Nah, forget it.') == 1 then                    if pc.get_gold() < 1000000 then                        say'Sorry, you dont have enough Gold.[ENTER]Come back when you get 1.000.000 Gold.'                        return                    end                    say'Okay, please write your bank acc pw.'                    local pw = input()                    if pw == '' then                        say'Did you change your mind?'                        return                    end                    say'Next step is choose your security question.[ENTER]You can also write one if you want to.'                    local sqt = select_table(question)                    if sqt == 4 then                        say'Okay, please write your question:'                        local myquestion = input()                        if myquestion == '' then                            say'Did you change your mind?'                            return                        end                        question = myquestion                    else                        question = question[sqt]                    end                    say'Oh right, we are almost finishing.[ENTER]Now enter the answer to your question.'                    say_reward(question)                    local answ = input()                    if answ == nil then                        say'Did you change your mind?'                        return                    end                    advanced_bank.set_pc_bank_infos(pw, question, answ, 0)                    say'Great! You are now registered in our bank.[ENTER]Welcome! :)'                    pc.change_gold(-1000000)                end            else                local mainmenu = select('Log in into my account','I forgot my password','Cancel')                if mainmenu == 2 then                    if pc.getqf('tries') == 5 then                        say'Sorry, you have tried too many times.[ENTER]Please, try later.'                        pc.setqf('tries', get_time()+60*60*2)                        pc.setqf('is_delayed', 1)                        return                    elseif get_time() <= pc.getqf('tries') then                        say'Since you failed 5 times your password[ENTER]you have to wait 2 hours to try again.[ENTER]Too bad!'                        return                    end                    if pc.getqf('is_delayed') == 1 then pc.delqf('is_delayed') pc.delqf('tries') end                    say'Wow what the hell![ENTER]If you at least know your[ENTER]security answer, we can generate a new pw 4 you.'                    say'Please, write the RIGHT answer.'                    if input() ~= readline(bank_path, 3) then                        say'Wrong, sorry dude..'                        pc.setqf('tries', pc.getqf('tries')+1)                    else                        say'Okay, wait a minute.[ENTER]A number password is being generated.'                        wait()                        local random = number(1000, 9999)                        say('Your new password is '..tostring(random)..'.')                        advanced_bank.set_pc_bank_infos(random, readline(bank_path, 2), readline(bank_path, 3), readline(bank_path, 4))                    end                    return                end                if pc.getqf('tries_to_login') == 5 then                    say'Sorry, you have tried to log in too many times.[ENTER]Please try later.'                    pc.setqf('tries_to_login', get_time()+60*60*2)                    pc.setqf('is_login_delayed', 1)                    return                elseif get_time() <= pc.getqf('tries_to_login') then                    say'Since you failed 5 times your password[ENTER]you have to wait 2 hours to try again.[ENTER]Too bad!'                    return                end                if pc.getqf('is_login_delayed') == 1 then pc.delqf('is_login_delayed') pc.delqf('tries_to_login') end                say'Yô dawg[ENTER]Welcome back.[ENTER]Please write your password to log in.'                local login = input()                say_title('Bank')                if login ~= readline(bank_path,1) then                    say('Sorry, your password is wrong.')                    pc.setqf('tries_to_login', pc.getqf('tries_to_login')+1)                    return                end                say'Welcome to Clients Panel.[ENTER]What do you want to do?'                say_reward('Currently you have '..readline(bank_path, 4)..' Gold saved.')                local sel = select('Take Gold', 'Save Gold', 'Change data', 'Nothing')                if sel ~= 4 then                    say_title('Bank')                    if sel ~= 3 then                        say_reward('Currently you have '..readline(bank_path,4)..' Gold saved.')                    end                end                if sel == 1 then                    say'You have to write how much Gold[ENTER]you want to receive.[ENTER]If you want to cancel, please write 0[ENTER]or do not write nothing.'                    local qt = tonumber(input())                    if qt == nil or qt == 0 then                        say'Did you change your mind?'                        return                    end                    say('So you want to receive '..qt..' Gold. Isnt it?')                    if select('Yes, it is.', 'Hmm, no') == 1 then advanced_bank.give_money(qt) end                elseif sel == 2 then                    say'How much Gold you want to save?'                    local whatiwant = tonumber(input())                    if whatiwant ~= nil then                        say('So do you really want to save '..whatiwant..' Gold?')                        if select('Yes, I want to', 'No, no sorry.') == 1 then                            if pc.get_gold() < whatiwant then                                say('You dont have that Gold to save..')                                return                            end                            advanced_bank.save_money(whatiwant)                            pc.change_gold(-whatiwant)                            say('Done.[ENTER]Now you have more '..whatiwant..' Gold in your account.')                        end                    end                elseif sel == 3 then                    local new                    say'What do you want to change?'                    local change = select('Password', 'Security data (Question & Answer)', 'Nothing')                    if change ~= 3 then                        say'Please, write your password.'                        if input() ~= readline(bank_path,1) then say'The password you entered is wrong.' return end                        say'Please, write the Answer to your security question:'                        say_reward(readline(bank_path, 2))                        if input() ~= readline(bank_path,3) then say'The answer you entered is wrong.' return end                        if change == 1 then                            say'Write your new password:'                            local newpw = input()                            if newpw == '' then say'Did you change your mind?' return end                            advanced_bank.set_pc_bank_infos(newpw, readline(bank_path, 2), readline(bank_path, 3), readline(bank_path,4))                            say'Your password has been changed.'                        else                            say'Okay, choose your new Security Question:'                            local newquestion = select_table(question)                            if newquestion == table.getn(question) then                                say'Write the security question you want:'                                local newq = input()                                if newq == '' then say'Did you change your mind?' return end                                newquestion = newq                            else                                newquestion = question[newquestion]                            end                            say'Oh right, one more step left.[ENTER]Write the answer to your question:'                            local newanswer = input()                            if newanser == '' then say'Did you changed your mind?' return end                            advanced_bank.set_pc_bank_infos(readline(bank_path,1), newquestion, newanswer, readline(bank_path,4))                            say'Your Security data has been changed.'                        end                    end                end            end        end         function set_pc_bank_infos(pw, question, answer, money)            write_in_file(bank_path, pw..'[ENTER]'..question..'[ENTER]'..answer..'[ENTER]'..money..'[ENTER]')            pc.setqf('has_bank_acc', 1)        end         function give_money(value)            if pc.get_gold() + value >= 2000000000 then                say'You cant take that value. It will bug!'                return            elseif tonumber(readline(bank_path ,4)) < value then                say'You dont have that much Gold in your bank acc.'                return            end            pc.change_gold(value)            advanced_bank.save_money(tonumber(readline(bank_path,4))-value)        end         function save_money(value)            write_in_file(bank_path, readline(bank_path, 1)..'[ENTER]'..readline(bank_path, 2)..'[ENTER]'..readline(bank_path, 3)..'[ENTER]'..value)        end     endend
Saludos.
Enlace para comentar
Compartir en otros sitios

Pues es bueno pero seria mejor que le agregaras para que ya dejemos de utilizar el chat y solo un diendole un boton del teclado aparesca asi se ahorra mucho tiempo igual forma esta buena ;)

 

pd: la que digo yo creo que es publica a mi me la pasaron pero no me dijieron si era publica xdd

Enlace para comentar
Compartir en otros sitios

Tiene algunos errores de funcionalidad pero esta muy buena

if pc.getqf('tries') == 5 then                        say'Sorry, you have tried too many times.[ENTER]Please, try later.'                        pc.setqf('tries', get_time()+60*60*2)                        pc.setqf('is_delayed', 1)                        return
 

						if pc.getqf('tries_to_login') == 5 then                    say'Sorry, you have tried to log in too many times.[ENTER]Please try later.'                    pc.setqf('tries_to_login', get_time()+60*60*2)                    pc.setqf('is_login_delayed', 1)                    return
tries_to_login y tries les estás asignando un tiempo(ej: 97412497412459) nunca podran recuperar pass o la función que tengan si se equibocan.

 

Así por encima no he mirado mucho, pero esta buena ;)

Enlace para comentar
Compartir en otros sitios

Si que podrán, ya que el is_delayed sirve para eso, si te fijas bien:

 

                    elseif get_time() <= pc.getqf('tries') then                        say'Since you failed 5 times your password[ENTER]you have to wait 2 hours to try again.[ENTER]Too bad!'                        return                    end                    if pc.getqf('is_delayed') == 1 then pc.delqf('is_delayed') pc.delqf('tries') end
Si get_time() no es <= tries y el is_delayed es 1 entonces borra los qf is_delayed y tries, de este modo podrán volver a intentarlo y el contaje se borrará, como es obvio.

 

De todos modos, gracias por tu comentário y el de los demás ^^

Enlace para comentar
Compartir en otros sitios

Si que podrán, ya que el is_delayed sirve para eso, si te fijas bien: 

                    elseif get_time() <= pc.getqf('tries') then                        say'Since you failed 5 times your password[ENTER]you have to wait 2 hours to try again.[ENTER]Too bad!'                        return                    end                    if pc.getqf('is_delayed') == 1 then pc.delqf('is_delayed') pc.delqf('tries') end
Si get_time() no es <= tries y el is_delayed es 1 entonces borra el qf is_delayed y tries, de este modo podrán volver a intentarlo y el contaje se borrará, como es obvio.De todos modos, gracias por tu comentário y el de los demás ^^

 

Bueno tampoco me había fijado en eso x), pensaba que estaba esa condición superior a la anterior.
Enlace para comentar
Compartir en otros sitios

  • 2 weeks later...

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...