Hallo liebe MTA Community,
wieder einmal hat der Herr Wong ein Frage. Die Lösung der Problemstellung wurde schon durch Kaito Kid verstärkt, allerdings kamen wir beide nicht zu einer Lösung. Und da ich Justus in Skype nicht erreichen kann (beide haben mir schon oft und erfolgreich geholfen, weshalb ich sie hier auch erwähne ), richte ich die Frage nun doch an euch. Ich versuche eigentlich immer meine Probleme selbst oder im kleinen Kreis zu lösen, aber wie gesagt ich stecke in einer Sackgasse, weil eigentlich alles richtig ist und doch funktioniert es nicht.
Ok zum Problem:
Ich habe 2 Funktionen "login2" und "spawnHandler". "login2" dient dazu die vom Spieler eingegebenen Informationen zu überprüfen und je nach Wahrheitsgrad ein der Eingaben die "spawnHandler"-Funktion zu starten oder die "falseLogin" Funktion zu starten und damit den Spieler auf seinen Fehler hinzuweisen. Aufgerufen wird die "login2" Funktion via folgender Syntax:
Wie ihr seht ist die source der Funktion also der Spieler der sich einloggen möchte.
Die "spawnHandler"-Funktion dient dazu den Spieler bei richtig eingegebenen Daten zu spawnen und zwar, wenn er schon einmal da war an dem Punkt wo er zuletzt stand oder wenn er neu ist an einem vordefinierten Startpunkt. Dies habe ich durch abspeichern der Koordinaten in der MySQL Datenbank versucht zu realisieren. Das Ende vom Lied ist allerdings die folgende Fehlermeldung:
Zitat[2011-03-06 12:47:53] WARNING: american-freedom\join.lua:52: Bad argument @ 'spawnPlayer'
Auf anraten von Kaito Kid habe ich schon mal die source vom "spawnHandler" ausgegeben. Ergebniss war, dass es sich dabei tatsächlich um den Spieler der sich einloggen möchte handelt. Und damit sind wir in der Sackgasse angekommen.
Zusammengefasst kann man sagen, dass alles richtig ist und trotzdem irgendwo ein Fehler sein muss! Wie die Fehlermeldung beweist. Das Debug-Script hat auch nicht geholfen. Ich hoffe ihr könnt mit mir zusammen eine Lösung finden, denn viele Augen sehen mehr als 2
Hier noch die beiden Funktionen:
function spawnHandler()
local serial = getPlayerSerial(source)
local datenbank = mysql_connect(SQLHOST,SQLUSER,SQLPASSWORT,SQLDATENBANK)
local result = mysql_query(datenbank, "SELECT serial FROM position WHERE serial = '"..serial.."';")
if (mysql_num_rows(result) == 0) then
local x = 1373.8881
local y = 405.0316
local z = 19.9555
local rx = 0.0
local ry = 0.0
local rz = 0.0
outputDebugString("Der Spieler "..getPlayerName(source).." wurde am Default Startpunkt gespawnt!")
else
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT x FROM position WHERE serial = '"..serial.."';")
local x = mysql_fetch_assoc(result)
x = x["x"]
x = tonumber(x)
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT y FROM position WHERE serial = '"..serial.."';")
local y = mysql_fetch_assoc(result)
y = y["y"]
y = tonumber(y)
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT z FROM position WHERE serial = '"..serial.."';")
local z = mysql_fetch_assoc(result)
z = z["z"]
z = tonumber(z)
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT rx FROM position WHERE serial = '"..serial.."';")
local rx = mysql_fetch_assoc(result)
rx = rx["rx"]
rx = tonumber(rx)
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT ry FROM position WHERE serial = '"..serial.."';")
local ry = mysql_fetch_assoc(result)
ry = ry["ry"]
ry = tonumber(ry)
mysql_free_result(result)
result = mysql_query(datenbank, "SELECT rz FROM position WHERE serial = '"..serial.."';")
local rz = mysql_fetch_assoc(result)
rz = rz["rz"]
rz = tonumber(rz)
outputDebugString("Der Spieler "..getPlayerName(source).." wurde am letzten Endpunkt gespawnt!")
outputDebugString("Die Koordinaten lauten :"..x..", "..y..", "..z..". Mit der Rotation : "..rx..", "..ry..", "..rz..".")
end
spawnPlayer(source,x,y,z);
setElementRotation(source,rx,ry,yz)
fadeCamera(source, true);
setCameraTarget(source, source);
mysql_close(datenbank)
end
function login2 (nameE, passwordE)
local serial = getPlayerSerial(source)
local datenbank = mysql_connect(SQLHOST, SQLUSER, SQLPASSWORT, SQLDATENBANK)
--Serial auslesen und in serial speichern
local result = mysql_query(datenbank, "SELECT serial FROM player WHERE serial = '"..serial.."';")
local serialT = mysql_fetch_assoc(result)
local serial = serialT["serial"]
mysql_free_result(result)
--Name auslesen und in name speichern
result = mysql_query(datenbank, "SELECT name FROM player WHERE serial = '"..serial.."';")
local nameT = mysql_fetch_assoc(result)
local name = nameT["name"]
mysql_free_result(result)
--Passwort auslesen und in passwort speichern
result = mysql_query(datenbank, "SELECT passwort FROM player WHERE serial = '"..serial.."';")
local passwortT = mysql_fetch_assoc(result)
local passwort = passwortT["passwort"]
passwort = string.upper(passwort)
--Eingegebenes passwort verschlüsseln
passwordE = md5(passwordE)
--Abfrage stimmt alles überein
if (nameE == name) and (passwordE == passwort) then
spawnHandler()
else
triggerClientEvent("falseLogin", getRootElement())
end
mysql_close(datenbank)
end
addEvent("login", true)
addEventHandler("login", getRootElement(), login2)
Alles anzeigen
So das sind die Funktionen wie ihr sehen könnt, sind diese beiden Funktionen nun von sich selbst abhängig und die einzige Einmischung von außen geschieht durch den Aufruf der "login2" mit der source "getLocalPlayer". Beide Functions sind Serverseitig.
So far
MrWong
P.S.: Die Daten der Datenbank (name, passwort, etc.) werden bei Eröffnung des Servers völlig anders benannt sein. Zur Erhöhung der Sicherheit versteht sich =)