Heyho,
basierend auf das Accountsystem von Map, dazu sein Tutorial habe ich mich an etwas anderem versucht. Undzwar ein Accountsystem zu machen, indem man sich nicht selber einloggen oder registrieren muss. Nein, hier geht das alles automatisch. Nun, wie folgt wird am Anfang eine neue Datenbank erstellt:
Dann hatten wir EventListener für das System geschrieben, bei dem System kommt nun ein Event dazu. "OnClientEnter", "ClientEnter". Über dieses Event, werden wir den Spieleraccount registrieren bzw. dafür eine Funktion aufrufen.
Hier wird noch ein Array "Accounts" hinzugefügt. Dazu auch ein Integer, KDRate, für die spätere Kills/Deaths Rate die man dann mit /stats aufrufen kann.
Wie folgt, kommen wieder Tick Funktionen, die wir aber nicht brauchen werden:
In der nächsten Funktion, CheckAccount(Username) wird überprüft, ob es den angegebenen Account schon gibt. Ist dem so, gibt sie true zurück. Gibt es den Account noch nicht, gibt sie false zurück.
In der Funktion "Update(ID)" werden die Daten des letzens Logins in den Account gespeichert.
Jetzt wird die Funktion CheckAccount verwendet, undzwar für die Funktion Register. Zuerst wird geprüft ob es den Account schon gibt. Wenn ja, wird der Account eingeloggt. Wenn nicht wird ein neuer Account erstellt und auch automatisch eingeloggt.
Jeder, der sich das Tutorial von Map schonmal angesehen hat, weiß was hier passiert. Zuerst werden die Daten abgefragt, stimmen sie überein wird man eingeloggt. Accounts[ClientID] wird dann zu Accounts["uid"] sozusagen geändert oder umgewandelt. Print("kills", result[1]["kills]) gibt den Score des gerade eingeloggten Spielers in der Konsole frei. Dann wird dem Spieler sein gespeicherter Score mit SetPlayerScore zugewiesen. Zuletzt wird man in das Spiel befördert.
Alles anzeigen
Hier wird man ausgeloggt, die Daten des Accounts werden gespeichert, Accounts[ClientID] wird geleert und man wird zum Spectator versetzt. Diese Funktion benutzen wir in diesem System jedoch nicht.
So, jetzt du der Funktion "GetStats" hier werden dein Score, deine Tode und deine Kills/Deaths Rate errechnet und wiedergegeben. Ist dein Score oder
deine Tode unter 1 wird die Rate immer als 0 angezeigt.
Hier in der Funktion Chat, gibt es 3 Kommandos. /stats führt GetStats aus, was wir gerade besprochen haben. /cmdlist und /info geben nur Infos im Chat wieder.
Alles anzeigen
In der nächsten Funktion, Kill(Killer, Victim, Weapon) wird der Score des Killers um ein hoch gesetzt, und das Opfer bekommt bei seinen Toden ein Punkt dazu.
Zur drittletzten Funktion, undzwar wenn man Leavt (oder auch ausloggt in dem Fall) werden die alten Daten in dem Account gespeichert.
In der vorletzen Funktion, wenn zum Server connecten, wird in der Konsole die ID des Spielers ausgegeben und Accounts auf Null gesetzt.
SetPlayerTeam ist deaktiviert, weil wir sie hier nicht benötigen.
In der letzten Funktion, wenn man den Server betritt wird man registriert oder eingeloggt. Je nach dem, ob man schon registriert ist oder nicht.
Hier nochmal der gesamte Code:
Klick!
So das wars von meinem Tutorial, ich hoffe euch hat es gefallen und ihr könnt auch etwas damit anfangen.
Was ihr jetzt gelernt habt ist, wie ihr eine einfache Modifikation macht mit einem automatischen Accountsystem.
lg.
basierend auf das Accountsystem von Map, dazu sein Tutorial habe ich mich an etwas anderem versucht. Undzwar ein Accountsystem zu machen, indem man sich nicht selber einloggen oder registrieren muss. Nein, hier geht das alles automatisch. Nun, wie folgt wird am Anfang eine neue Datenbank erstellt:
Dann hatten wir EventListener für das System geschrieben, bei dem System kommt nun ein Event dazu. "OnClientEnter", "ClientEnter". Über dieses Event, werden wir den Spieleraccount registrieren bzw. dafür eine Funktion aufrufen.
Hier wird noch ein Array "Accounts" hinzugefügt. Dazu auch ein Integer, KDRate, für die spätere Kills/Deaths Rate die man dann mit /stats aufrufen kann.
Wie folgt, kommen wieder Tick Funktionen, die wir aber nicht brauchen werden:
In der nächsten Funktion, CheckAccount(Username) wird überprüft, ob es den angegebenen Account schon gibt. Ist dem so, gibt sie true zurück. Gibt es den Account noch nicht, gibt sie false zurück.
In der Funktion "Update(ID)" werden die Daten des letzens Logins in den Account gespeichert.
Quellcode
- function Update(ClientID)
- if (Accounts[ClientID]["uid"] == nil) then
- return
- end
- sql.query(db, "UPDATE `users` SET `playername` = '" .. EscapeString(GetPlayerName(ClientID)) .. "', `kills` = '" .. EscapeString(Accounts[ClientID]["kills"]) .. "', `deaths` = '" .. EscapeString(Accounts[ClientID]["deaths"]) .. "' WHERE `uid` = '" .. Accounts[ClientID]["uid"] .. "'")
- end
Jetzt wird die Funktion CheckAccount verwendet, undzwar für die Funktion Register. Zuerst wird geprüft ob es den Account schon gibt. Wenn ja, wird der Account eingeloggt. Wenn nicht wird ein neuer Account erstellt und auch automatisch eingeloggt.
Quellcode
- function Register(User, Pass, ClientID)
- if(CheckAccount(User) == true) then
- Login(User, Pass, ClientID)
- else
- sql.query(db, "INSERT INTO `users` (`username`, `password`, `playername`) VALUES ('" .. EscapeString(User) .. "', '" .. EscapeString(Pass) .. "', '" .. EscapeString(GetPlayerName(ClientID)) .. "')")
- Login(User, Pass, ClientID)
- end
- end
Jeder, der sich das Tutorial von Map schonmal angesehen hat, weiß was hier passiert. Zuerst werden die Daten abgefragt, stimmen sie überein wird man eingeloggt. Accounts[ClientID] wird dann zu Accounts["uid"] sozusagen geändert oder umgewandelt. Print("kills", result[1]["kills]) gibt den Score des gerade eingeloggten Spielers in der Konsole frei. Dann wird dem Spieler sein gespeicherter Score mit SetPlayerScore zugewiesen. Zuletzt wird man in das Spiel befördert.
Quellcode
- function Login(User, Pass, ClientID)
- result = sql.query(db, "SELECT * FROM `users` WHERE `username` = '" .. EscapeString(User) .. "' AND `password` = '" .. EscapeString(Pass) .. "'")
- if (result[1] and result[1]["uid"]) then
- Accounts[ClientID] = result[1]
- Print("kills", result[1]["kills"])
- Print("deaths", result[1]["deaths"])
- SetPlayerScore(ClientID, Accounts[ClientID]["kills"])
- SetPlayerTeam(ClientID, 0)
- else
- Register(User, Pass, ClientID)
- end
- end
Hier wird man ausgeloggt, die Daten des Accounts werden gespeichert, Accounts[ClientID] wird geleert und man wird zum Spectator versetzt. Diese Funktion benutzen wir in diesem System jedoch nicht.
So, jetzt du der Funktion "GetStats" hier werden dein Score, deine Tode und deine Kills/Deaths Rate errechnet und wiedergegeben. Ist dein Score oder
deine Tode unter 1 wird die Rate immer als 0 angezeigt.
Quellcode
- function GetStats(ID)
- SendChatTarget(ID, "Kills: "..Accounts[ID]["kills"])
- SendChatTarget(ID, "Deaths: "..Accounts[ID]["deaths"])
- if(Accounts[ID]["kills"] < 1 or Accounts[ID]["deaths"] < 1) then
- KDRate = 0
- else
- KDRate = ((Accounts[ID]["kills"])/(Accounts[ID]["deaths"]))
- end
- SendChatTarget(ID, "K/D: "..KDRate)
- end
Hier in der Funktion Chat, gibt es 3 Kommandos. /stats führt GetStats aus, was wir gerade besprochen haben. /cmdlist und /info geben nur Infos im Chat wieder.
Quellcode
- function Chat(Text, ID, Team)
- if (Text:sub(1, 1) == "/") then
- if (Text:sub(1, 6) == "/stats" and (Text:len() == 6)) then
- GetStats(ID)
- elseif (Text:sub(1, 8) == "/cmdlist" and (Text:len() == 8)) then
- SendChatTarget(ID, "Servercommands:")
- SendChatTarget(ID, "Commando - Funktion")
- SendChatTarget(ID, "/stats - Gibt deine Stats wieder, Score etc.")
- SendChatTarget(ID, "/info - Info ueber die Mod")
- elseif (Text:sub(1, 5) == "/info" and (Text:len() == 5)) then
- SendChatTarget(ID, "System based on the Lua Accountsystem by Map")
- SendChatTarget(ID, "Death Match with Saved Scores. Have Fun!")
- else
- SendChatTarget(ID, "Unknown command")
- SendChatTarget(ID, "/cmdlist")
- end
- return true
- end
- end
In der nächsten Funktion, Kill(Killer, Victim, Weapon) wird der Score des Killers um ein hoch gesetzt, und das Opfer bekommt bei seinen Toden ein Punkt dazu.
Zur drittletzten Funktion, undzwar wenn man Leavt (oder auch ausloggt in dem Fall) werden die alten Daten in dem Account gespeichert.
In der vorletzen Funktion, wenn zum Server connecten, wird in der Konsole die ID des Spielers ausgegeben und Accounts auf Null gesetzt.
SetPlayerTeam ist deaktiviert, weil wir sie hier nicht benötigen.
In der letzten Funktion, wenn man den Server betritt wird man registriert oder eingeloggt. Je nach dem, ob man schon registriert ist oder nicht.
Hier nochmal der gesamte Code:
Klick!
So das wars von meinem Tutorial, ich hoffe euch hat es gefallen und ihr könnt auch etwas damit anfangen.
Was ihr jetzt gelernt habt ist, wie ihr eine einfache Modifikation macht mit einem automatischen Accountsystem.
lg.