Jump to content

Sistema de Banco - Como diós manda


PACI
 Share

Recommended Posts

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

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

Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

  • 2 weeks later...

Me gustaria saber que errores tiene, ya que la probé antes de traerla, puede que se me alla escapado algo, o no.

 

Gracias por compartir, intentare arreglarla ya que veo por aquí "QUE DICEN" que tiene algunas fallas y derecha a mi servidor  ^^ olvide mencionar ese... "dicen" xD

Link to comment
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.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...