Ich will hier mal was hoffentlich neues Releasen, dass für große Server recht interessant ist..
Ich habe von einiger Zeit mal nach Möglichkeiten gesucht, um bestimmte Daten die in einer Quest benutzt werden woanders als in in der Quest-Tabelle speichern zu lassen? Warum?
Ganz einfach: Wenn ich jetzt etwas auslesen will also z.B. bei einem 2 sprachigen Server muss man ja irgendwo abspeichern, welche Sprache der user hat..
Das kann man ja ganz normal per setqf machen..
Aber wenn ich das jetzt abrufen muss also SELECT * xyx (des macht ja der db Server) dann muss der mysql Server so lange suchen bis er den Eintrag hat.. Was bei 800.000k Einträgen (PSG-Elysim 42k Spieler) ganz schön dauern kann und einige Ressourcen braucht.
Schneller und effizenter geht es wenn man einfach eine Textdatei ausliest, wo darin einfach die Sprache gespeichert wird..
Hier mal einen Ausschnitt aus meiner Questlib:
PHP Code:
function createtxtsystem()
os.execute("mkdir playerdata/".. pc.get_account_id() .."")
os.execute("mkdir playerdata/".. pc.get_account_id() .."/".. pc.get_player_id() .."")
end
function getlang()
local lang = ""
local r = io.open("playerdata/".. pc.get_account_id() .."/lang.txt","r")
if r~=nil then
lang = r:read()
r:close()
return lang
else
return false
end
end
function setlang(text)
local w = io.open("playerdata/".. pc.get_account_id() .."/lang.txt","w")
if text == "de" then
w:write("de")
else
w:write("en")
end
w:close()
end
Also wird bei 1. Login das Grundgerüst von einem Spieler erstellt.
Warum jetzt das?
Ja jeder Spieler braucht eine eigene Textdatei logisch?
Da aber die Sprache bei allen Chars gleich ist, lass ich die Sprache im Account-Ordner (also der Ordner heißt wie die account-id des Spielers) speichern. Andere Daten die bei jedem Spieler unterschiedlich sind, kann ich in dem Ordner speichern, der im Account-Ordner ist aber die Player id als Name trägt.
Ich hoffe ihr habt es einigermaßen verstanden
Genaue Leser ist sicher das os.execute aufgefallen. Mit dem Command kann man Befehle ausführen (also alle Befehle die man in putty so eingeben kann)..
Jemand der weiter nachdenkt und geil auf neue Ranglisten ist dem fällt ggf das hier ein:
PHP Code:
function rotkill()
os.execute("mysql -u root playerdata --execute='UPDATE pvpkillcounter SET rot = rot + 1 WHERE playerid = ".. pc.get_player_id() ..";'")
end
function gelbkill()
os.execute("mysql -u root playerdata --execute='UPDATE pvpkillcounter SET gelb = gelb + 1 WHERE playerid = ".. pc.get_player_id() ..";'")
end
function blaukill()
os.execute("mysql -u root playerdata --execute='UPDATE pvpkillcounter SET blau = blau + 1 WHERE playerid = ".. pc.get_player_id() ..";'")
end
function mobkill()
os.execute("mysql -u root playerdata --execute='UPDATE pvmkillcounter SET kills = kills + 1 WHERE playerid = ".. pc.get_player_id() ..";'")
end
(Leider ungetestet bei größeren Servern)
Quest States lassen sich natürlich auch so speichern:
PHP Code:
function gettxtstate(state)
local value = ""
local r = io.open("playerdata/".. pc.get_account_id() .."/".. pc.get_player_id() .."/".. state ..".txt","r")
if r~=nil then
value = r:read()
r:close()
return value
else
return false
end
end
function settxtstate(state,text)
local w = io.open("playerdata/".. pc.get_account_id() .."/".. pc.get_player_id() .."/".. state ..".txt","w")
w:write(text)
w:close()
end
Ich weiß nicht ob es schon alles in dieser Form bekannt ist, wenn ja dann sry
Ich bitte euch dies nicht als eigenes auszugeben, da ich einige Tage an den paar Zeilen gesessen bin. Danke
grüßle LordMampf2