Guten Abend zusammen,
ich bräuchte einmal einen kleinen Snippet für ein PostRequest via Lua, das ganze soll eine Abfrage an einen Server darstellen und dieser liefert auch ein Ergebniss zurück.
Nun, als Beispiel, der Spieler verbindet sich ganz normal mit dem Server, aber bevor er den Server betritt macht der Server eine Abfrage an meinen Backend und benötigt also ein Ergebniss. Das Ergebniss ist True oder False.
Sagen wir so.
function ExtractIdentifiers(src)
local identifiers = {
steam = "",
ip = "",
discord = "",
license = "",
xbl = "",
live = ""
}
for i = 0, GetNumPlayerIdentifiers(src) - 1 do
local id = GetPlayerIdentifier(src, i)
if string.find(id, "steam") then
identifiers.steam = id
elseif string.find(id, "ip") then
identifiers.ip = id
elseif string.sub(id, 1, string.len("discord:")) == "discord:" then
discordid = string.sub(id, 9)
identifiers.discord = "<@" .. discordid .. ">"
elseif string.find(id, "license") then
identifiers.license = id
elseif string.find(id, "xbl") then
identifiers.xbl = id
elseif string.find(id, "live") then
identifiers.live = id
end
end
return identifiers
end
function KickPlayer(src, reason)
local ids = ExtractIdentifiers(src);
local playerIP = ids.ip;
local playerSteam = ids.steam;
local playerLicense = ids.license;
local playerXbl = ids.xbl;
local playerLive = ids.live;
local playerDisc = ids.discord;
local banData = {};
banData['ID'] = tonumber(getNewBanID());
banData['ip'] = "NONE SUPPLIED";
banData['reason'] = reason;
banData['license'] = "NONE SUPPLIED";
banData['steam'] = "NONE SUPPLIED";
banData['xbl'] = "NONE SUPPLIED";
banData['live'] = "NONE SUPPLIED";
banData['discord'] = "NONE SUPPLIED";
if ip ~= nil and ip ~= "nil" and ip ~= "" then
banData['ip'] = tostring(ip);
end
if playerLicense ~= nil and playerLicense ~= "nil" and playerLicense ~= "" then
banData['license'] = tostring(playerLicense);
end
if playerSteam ~= nil and playerSteam ~= "nil" and playerSteam ~= "" then
banData['steam'] = tostring(playerSteam);
end
if playerXbl ~= nil and playerXbl ~= "nil" and playerXbl ~= "" then
banData['xbl'] = tostring(playerXbl);
end
if playerLive ~= nil and playerLive ~= "nil" and playerLive ~= "" then
banData['live'] = tostring(playerXbl);
end
if playerDisc ~= nil and playerDisc ~= "nil" and playerDisc ~= "" then
banData['discord'] = tostring(playerDisc);
end
PerformHttpRequest(Config.ServerAPI, function(error, texto, cabeceras) end, "POST", "IREGDN WAS ZUM SERVER")
// Wenn Result vorhanden ist -> DropPlayer(id, ..., ...)
end
Alles anzeigen
Der Server hat natürlich eine gewisse Struktur, diese sieht ungefähr so aus.
Link Beispiel : example.com/check.php?ip=&playerLicense=&playerSteam=&playerXbl=&playerLive=&playerDisc Also wir fragen einmal alle vorhandenen ID's ab, dann schauen wir in der Datenbank ob ein Eintrag vorliegt oder nicht, ist kein Eintrag vorhanden gibt der Server ein Ok zurück anhand von einem json Array. Dann darf der Spieler sich verbinden, ansonsten wird das Drop Event ausgeführt und der Player darf den Server nicht betreten bis das Problem des Eintrag gelöst wurde.
Beispiel Code
<?php
header('Content-Type: text/json');
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'globalban');
define('DB_PASSWORD', 'globalban');
define('DB_NAME', 'globalban');
try {
$dbh = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME, DB_USERNAME, DB_PASSWORD);
if($dbh === true) {
foreach ($dbh->query('SELECT * globalban') as $row) {
print_r($row);
}
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . '<br/>';
die();
}
$ip = $_GET['ip'];
$playerLicense = $_GET['playerLicense'];
$playerSteam = $_GET['playerSteam'];
$playerXbl = $_GET['playerXbl'];
$playerLive = $_GET['playerLive'];
$playerDisc = $_GET['playerDisc'];
//Wenn Parameter übergeben werden
if(!empty($ip) && !empty($playerLicense) && !empty($playerSteam) && !empty($playerXbl) && !empty($playerLive) && !empty($playerDisc)) {
$dbh = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME, DB_USERNAME, DB_PASSWORD);
$sth = $dbh->prepare("SELECT * FROM globalban WHERE ip = :ip AND playerLicense = :playerLicense AND playerSteam = :playerSteam AND playerXbl = :playerXbl AND playerLive = :playerLive AND playerDisc = :playerDisc LIMIT 1");
$sth->bindParam(':ip', $ip);
$sth->bindValue(':playerLicense', $playerLicense);
$sth->bindParam(':playerSteam', $playerSteam);
$sth->bindValue(':playerXbl', $playerXbl);
$sth->bindValue(':playerLive', $playerLive);
$sth->bindValue(':playerDisc', $playerDisc);
$sth->execute();
$row = $sth->fetch(PDO::FETCH_OBJ);
//print_r($row);
$json = array(
'status' => 'Found',
'result' => [
'ip' => 'Redacted',
'License Hash' => $row->playerLicense,
'Steam ID' => $row->playerSteam,
'XBox Live ID' => $row->playerXbl,
'Live ID' => $row->playerLive,
'Discord ID' => $row->playerDisc,
],
'reason' => [
'Ban Reason' => $row->banReason,
],
);
echo json_encode($json);
//Wenn Parameter Leer sind
} else if(empty($ip) && empty($playerLicense) && empty($playerSteam) && empty($playerXbl) && empty($playerLive) && empty($playerDisc)) {
$json = array(
[
'error' => 'Only PostRequest Allowed :(',
],
);
echo json_encode($json);
// Wenn kein Eintrag vorhanden ist
} else {
$json = array(
[
'status' => 'Ok',
],
);
echo json_encode($json);
}
Alles anzeigen
Hat da eventuell Jemand eine Idee für mich bitte.
Keiner?