JavaScript
mp.events.add("sendDataToServer", (player, username, password, state) => {
let loggedAccount = mp.players.toArray().find(p => p.loggedInAs == username);
switch(state){
//Account Login
case 0:
{
if(loggedAccount){
console.log("Logged in already.");
player.call("loginHandler", ["logged"]);
} else {
function loginUser(username, password, callback)
{
if(!username || !password || typeof callback !== "function")
return console.error(`loginUser was called with invalid parameters`); // Die angegeben Parameter sind falsch
http.get({
host: `${apiHost}`,
path: `/index.php?user-api&method=login&username=${username}&password=${password}&secret=${apiSecret}`, // Die Daten des Users werden in die URL geschrieben
headers: { 'User-Agent': 'Projekt Reallife Agent 1.0.0' }
}, (response) => {
let status = response.statusCode;
if(status !== 200) // Die Antwort war nicht 200, also ist irgendwas schief gelaufen
{
response.resume(); // Den Rest der Anfrage verarbeiten, damit kein Memory Overflow entsteht
callback({ Status: status, Error: "The server did not respond with 200 - OK" });
}
else
{
let data = "";
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
let parsed = JSON.parse(data);
callback(null, {
id: parsed.userID,
email: parsed.email,
groups: parsed.groups
});
});
}
});
}
loginUser(username, password, (error, data) =>
{
console.log(JSON.stringify(data));
if(error)
{
if(error.Status === 412) return player.call("loginHandler", ["incorrectinfo"]); // Falscher Name/Passwort
else return console.log(error.Error); // Bei einem Error sind keine Daten vorhanden, also muss returnt werden, damit der 2. Parameter nicht verwendet wird
}
if(data.groups.find(group => group.groupID === 6)) {
player.name = username;
player.call("loginHandler", ["success"]);
gm.auth.loadAccount(player);
} else {
player.call("loginHandler", ["incorrectinfo"]);
}
});
}
break;
}
//Account Registration
case 1:
{
if(username.length >= 3 && pass.length >= 5){
gm.mysql.handle.query('SELECT * FROM `accounts` WHERE `username` = ?', [username], function(err, res){
if(res.length > 0){
player.call("loginHandler", ["takeninfo"]);
} else {
bcrypt.hash(pass, function(err, hash) {
if(!err){
gm.mysql.handle.query('INSERT INTO `accounts` SET username = ?, password = ?', [username, hash], function(err, res){
if(!err){
player.name = username;
console.log("\x1b[92m" + username + "\x1b[39m has just registered.");
} else {
console.log("\x1b[31m[ERROR] " + err)
}
});
} else {
console.log("\x1b[31m[BCrypt]: " + err)
}
});
}
});
} else {
player.call("loginHandler", ["tooshort"]);
}
break;
}
default:
{
player.outputChatBox("An error has occured, please contact your server administrator.")
console.log("\x1b[31m[ERROR] Login/Register state was one that isn't defined. State: " + state)
break;
}
}
});
Alles anzeigen
Versuch mal die Daten stringified zu printen. Dazu hast du auch statt dem data Parameter parsed verwendet, die Variable ist aber nur innerhalb der Funktion.