[RELEASE] Security-System - Lua / MySQL

11/09/2013 21:20 Mr. 'Avenue™#1
Funktionen (questlib.lua):
PHP Code:
pid = pc.get_player_id()

function 
pc.set_auth(id, pw)
    if 
string.len(id) > 12 or string.len(pw) > 12 then
        syschat
("Deine ID & dein Passwort dürfen max. 12 Zeichen haben!")
        return
    elseif 
string.len(id) < 3 or string.len(pw) < 3 then
        syschat
("Deine ID & dein Passwort müssen mind. 3 Zeichen lang sein!")
        return
    
end
    mysql_query
("INSERT INTO player.auth VALUES ('"..pid.."','"..id.."','"..pw.."' ON DUPLICATE KEY UPDATE id='"..id.."', pw='"..pw.."' WHERE pid='"..pid.."';")
end

function pc.get_auth(id, pw)
    
local IDFromDB = mysql_query("SELECT id FROM player.auth WHERE pid='"..pid.."';")
    
local PWFromDB = mysql_query("SELECT pw FROM player.auth WHERE pid='"..pid.."';")
    
local RetID, RetPW = tonumber(IDFromDB), tonumber(PWFromDB)
    if 
id == RetID and pw == RetPW then
        
return true
    
else
        return 
false
    end
end 
Funktionen (quest_functions):
PHP Code:
pc.set_auth
pc
.get_auth 

Quest:
PHP Code:
quest al_security begin
    state start begin
        
function load_securityform()
            if 
get_time() < pc.getqf("security_aluna2") then
                
return
            
end
            say_title
("Aluna2 - Securitycheck")
            
say("Bitte gebe deine Security-ID ein:")
            
local ID = input()
            
say_title("Aluna2 - Securitycheck")
            
say("Bitte gebe dein Security-PW ein:")
            
local PW = input()
        
end
        when login with pc
.getqf("securitysys") < 1 begin
            say_title
("Aluna2 - Securitysystem")
            
say_reward("Zu deiner Sicherheit wird auf Aluna2 alle 12h[ENTER]nach deinen Security-Daten gefragt.")
            
say("[ENTER]Bitte gebe deine Security-ID ein:")
            
local SecID = input()
            
say("[ENTER]Bitte gebe dein Security-PW ein:")
            
local SecPW = input()
            
syschat("Deine Security-ID ist: "..SecID)
            
syschat("Dein Security-PW ist: "..SecPW)
            
pc.set_auth(SecID, SecPW)
            
pc.setqf("securitysys", 1)
        
end
        when login with pc
.getqf("securitysys") == 1 begin
            local hIntervall 
= 12
            al_security
.load_securityform()
            if 
pc.get_auth(ID, PW) == false then
                al_security
.load_securityform()
            else
                
pc.setqf("security_aluna2", get_time()+60*60*hIntervall)
                return
            
end
        end
        when ITEMVNUM
.use begin
            say_title
("Aluna2 - Securitysystem")
            
say_reward(" ~> Daten ändern")
            
say("[ENTER]Bitte gebe deine jetzige Security-ID ein:")
            
local OldID = input()
            
say_title("Aluna2 - Securitysystem")
            
say_reward(" ~> Daten ändern")
            
say("[ENTER]Bitte gebe dein jetziges Security-PW ein:")
            
local OldPW = input()
            
say_title("Aluna2 - Securitysystem")
            
say_reward(" ~> Daten ändern")
            
say_title("Bitte gebe nun deine neue Security-ID ein:")
            
local NewID = input()
            
say_title("Aluna2 - Securitysystem")
            
say_reward(" ~> Daten ändern")
            
say_title("Bitte gebe nun dein neues Security-PW ein:")
            
local NewPW = input()
            if 
pc.get_auth(OldID, OldPW) == false then
                
return
            
end
            pc
.set_auth(NewID, NewPW)
        
end
    end
end 
Die DB habe ich nicht, müsst ihr euch selbst machen.




#untested
11/09/2013 21:21 He3o Crysis#2
n1
11/09/2013 21:28 alpha-Atze#3
Sieht gut aus, danke.
11/09/2013 21:33 iYoshix3#4
Haut man es im Client raus (Questfenster) und kann Problemlos spielen :P
Btw: Gib mal 2 mal falsche Daten ein, dann ist die Quest zuende.

Mfg,
Yoshix3
11/09/2013 21:33 Sphinx²#5
Jetzt mal ne blöde frage....
Was soll das genau bringen?

Gruss
Sphinx
11/09/2013 21:35 .ProjektX²#6
du setzt doch nirgends die variable "pid". :o

Und du solltest das ganze im login mit nem timer machen, da es so garnit funzt.

Ist zwar ne nette Idee, aber so nicht release wuerdig..
11/09/2013 21:35 Mr. 'Avenue™#7
Quote:
Originally Posted by iYoshix3 View Post
Haut man es im Client raus (Questfenster) und kann Problemlos spielen :P
Btw: Gib mal 2 mal falsche Daten ein, dann ist die Quest zuende.

Mfg,
Yoshix3
Nein, ist sie nicht.
PHP Code:
            local hIntervall = 12 
            al_security
.load_securityform() 
            if 
pc.get_auth(ID, PW) == false then 
                al_security
.load_securityform() 
            else 
                
pc.setqf("security_aluna2", get_time()+60*60*hIntervall) 
                return 
            
end 
Und schau dir die pc.get_auth() funktion an :)


Aber naja, immernoch besser als gar nichts.


Quote:
Originally Posted by .ProjektX² View Post
du setzt doch nirgends die variable "pid". :o

Und du solltest das ganze im login mit nem timer machen, da es so garnit funzt.

Ist zwar ne nette Idee, aber so nicht release wuerdig..
Habs nun hinzugefügt (pid = pc.get_player_id())
11/09/2013 21:49 .Harlem²#8
Ja, das ist mal nützlich. :)

Danke dafür :>
11/09/2013 21:51 MrTherzon#9
Danke, Sehr Nice von dir.
11/09/2013 21:51 xGr33n#10
Danke aber bei Inputs beim Login brechen Quests doch ab :o
11/09/2013 21:54 Mr. 'Avenue™#11
Quote:
Originally Posted by xGr33n View Post
Danke aber bei Inputs beim Login brechen Quests doch ab :o
Nein
Ist so ähnlich wie die 'wait' funktion.
Nach einem Input steht immer 'Weiter' ^^
11/09/2013 21:54 .Xelo™#12
Danke <3
11/09/2013 22:01 .ProjektX²#13
Quote:
Originally Posted by Mr. 'Avenue™ View Post
Nein
Ist so ähnlich wie die 'wait' funktion.
Nach einem Input steht immer 'Weiter' ^^
Du verstehst ihn glaube Falsch, das geht so nicht.

Setz das ganze was du im login abfragst in ein Timer.

Momentan kommste bis zum ersten Input, dann bricht der Code ab, weils beim login event einfach so nicht geht.
11/09/2013 22:20 Mashkin#14
Quote:
Originally Posted by .ProjektX² View Post
Du verstehst ihn glaube Falsch, das geht so nicht.

Setz das ganze was du im login abfragst in ein Timer.

Momentan kommste bis zum ersten Input, dann bricht der Code ab, weils beim login event einfach so nicht geht.
Die ganze Quest funktioniert sowieso nicht.

Es wird erst das "Formular" angezeigt, dann werden die Daten geprüft.
Wenn sie richtig sind wird der "Check" Timer gesetzt - ok soweit. Aber wenn die Daten falsch sind erscheint wieder das Formular. Danach passiert aber nichts mehr und die Quest ist zu Ende.

Wie Yoshix3 schon sagte, kann man zwei mal was falsches eingeben und man hat das System umgangen.

An der Stelle sollte vllt. eine while-Schleife stehen oder der Spieler sollte gekickt/gebannt (Zeitbann) werden.

Aber so wie es jetzt ist passiert einfach gar nichts.
11/09/2013 22:31 .ProjektX²#15
ne while schleife wird glaub auch dann unterbrochen, einfach nen looptimer lieber reinhauen, da kannste dir sicher sein das es immer wieder kommt.