21.06.2009, 11:06 | #1 (permalink) |
Registriert seit: 06.06.2009
Beiträge: 50
|
Server Whitelist
Ich habe es gestern aufgegeben, meinen Server public laufen zu lassen. Es kann sich wohl jeder denken, wieso.
Nun will ich keinen Clan gründen, nur um Passwörter zu verteilen, dafür fehlt mir die Zeit. Ich hatte an eine Whitelist gedacht, die man über ein Webfrontend füttern kann: Nach dem Joinen wir einfach geguggt ob eine ID für den joinenden Player in der Whitelist-Datei steht. Wenn ja, wird nichts unternommen, wenn nicht wird er gekickt. Nun ist das Problem: wie löst man die Whitelist-Datei? Eine SQF im Missionsordner macht wohl keinen Sinn, da die nicht mehr beschreibbar ist, wenn sie durch eine Mission geladen wurde. Wie also kann ich Daten in eine schon laufende Mission bekommen? Oder hätte jemand eine Alternative zur Whitelist? |
21.06.2009, 19:29 | #3 (permalink) |
Registriert seit: 06.06.2009
Beiträge: 50
|
Vielleicht habe ich mich zu kompliziert ausgedrückt. Das Problem ist, Dateien einer Mission zu ändern, wärend dieso schon läuft. Ich werde mir auf jeden Fall mal die ArmALib anschauen, eine Verbindung zu einer Datenbank wäre schonmal eine Lösung. Auch wenns nicht gerade ein Microsoft SQL Server sein sollte wie bei ArmALib *hust*. |
22.06.2009, 11:29 | #6 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Schau im Biki mal nach server-side scripting. ArmA: Server Side Scripting - Bohemia Interactive Community
Davon abgesehen, du kannst in missionen, scripten, addons usw. auch Dateien direkt aus dem Arma-ordner laden und die kannst du auch wärend der Laufzeit modifizieren. (müssen halt nur regelmässig abgefragt werden oder bei onPlayerConnect) z.B.: Code:
nul=[this] execVM "settings.sqf"; Aber wie schon gesagt, serversidescripting ist für sowas sinnvoller als ein Missionseintrag, schliesslich willst du die whitelist ja für alle Missionen haben. Probier mal dashier, ist nur auf die schnelle aus dem Kopf geschrieben könnte aber klappen: In die server.cfg muss diese Zeile: Code:
onUserConnected = "if ([_this select 0 ] execVM 'whitelist.sqf') then {kick _this select 0}"; Im ArmAverzeichniss erstellst du die Datei hier: whitelist.sqf In dem Array in der ersten Zeile stehen dann die IDs. Code:
whitelist=[123123,123130,0213123]; if (whitelist find (_this select 0) > -1) then { true; } else { false; };
__________________
|
22.06.2009, 13:24 | #9 (permalink) |
Registriert seit: 05.12.2006
Beiträge: 43
|
Meines Wissens ist die Menge der Commands vom server side scripting (also in der server.cfg) sehr begrenzt - ich weiß es nicht mehr auswendig, aber ich glaube, dass u.a. execVM usw. nicht dabei sind, des weiteren gibt onUserConnected leider nur die temporäre userID zurück und nicht die PlayerID (nachdem man die jetzt sogar ingame per getPlayerUID bekommt, könnten sie das eigentlich einbauen...).
Mit nem server side only addon - wie .kju vorgeschlagen hat - müsste es aber klappen (völlig unabhängig von der Mission). Dabei ist nur das unschöne, dass dann erst ingame die Überprüfung stattfindet und ingame commands wie kick / ban nicht verfügbar sind - müsste aber trotzdem klappen per endMission oder Trigger (Doolittle hat bei seinem DooACS was ähnliches gemacht). |
22.06.2009, 13:56 | #10 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Hmm mir war so als hätte ich execVM bei ArmA1 schonmal für serversidescripting benutzt. Hatte auf dem alten clubnight server ne Wilkommensnachricht eingebaut die nach Missionsstart eingeblendet wurde.
Ich bin mir zimlich sicher das es über serversidescripting machbar ist, nur vielleicht stellt es sich eben als etwas komplexer heraus als wir momentan glauben. Ich dachte eigendlich Serversides verwenden die UID, aber vielleicht trügt mich da mein Gedächtniss, ist alles schon ein Weilchen her. Notfalls lesen wir die halt per script mit dem neuen Befehl aus. Vielleicht könnte man in der whitelist.sqf ein temporäres objekt erstellen und mit processinitcommands ein Script beim neu verbundenen Spieler injizieren das sobald möglich seine UID abfragt und die als globale variable an das serverscript zurückmeldet. Ich glaub das geht.
__________________
|
22.06.2009, 21:38 | #11 (permalink) |
Registriert seit: 06.06.2009
Beiträge: 50
|
Ich denke Master85 hat recht und ich kann in der onUserConnected-Zeile keinen Befehl ausführen, der nicht unter ArmA: Server Side Scripting - Bohemia Interactive Community steht.
Ich habe es mit execVM und loadFile probiert und es scheint so als ob er an der Stelle aufhört zu interpretieren - es passiert einfach nix. Denke ich werde es in der Mission weiterbauen, daraus kann man dann später ja ein Addon machen, richtig? Geändert von Ephraim (22.06.2009 um 21:50 Uhr). Grund: paar dumme fragen entfernt |
22.06.2009, 23:47 | #14 (permalink) |
Registriert seit: 05.12.2006
Beiträge: 43
|
Also im Moment funktioniert kick und ban nur im Chat und der server.cfg - k.A. ob sich da was ändert, hab aber erst neulich was von kickUID und banUID gelesen - scheinen aber wohl (noch?) nicht implementiert zu sein.
Ingame kannst du etwas in der Art Code:
endMission "END6" Der Code darf aber nur auf dem Rechner des entsprechenden Spielers ausgeführt werden. Das unschöne ist halt, dass selbst gesperrte Spieler nen Slot verbrauchen können und Bandbreite kosten (können ja beliebig oft joinen), sobald sie aber ins Spiel starten, sollte die Mission für sie zu Ende sein. (Die Teamkiller und Heli-Crasher kann man so vielleicht draußen halten, aber wer wirklich Quatsch machen will, schafft das auch so - zumindest ohne Signaturen). |
23.06.2009, 09:39 | #15 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
naja in ArmA1 hatten wir noch
Code:
[] resize -1; Um Himmels willen, das sollen die blos nicht als reguläre scriptbefehle einbauen.
__________________
|
23.06.2009, 12:01 | #16 (permalink) |
Registriert seit: 06.06.2009
Beiträge: 50
|
Das mit den Slots sehe ich im Moment noch nicht so wild. Und Signaturen sollte mein Server eigentlich überprüfen. Als Zusatz kann man ja noch die ban.txt verwenden, sprich: wenn ein User aus der Whitelist entfernt wird, landet er automatisch auf der BanList. Zweck des ganzen soll ja auch nur sein, dass die Startbasen nicht gleich nach 5 Minuten in Flammen stehen. Ich probiere das mit dem Missionsende mal heute Abend aus. Einen Crash beim Client verursachen ist für mich auf jeden Fall ein no-go. Wenn es nur auf dem Server ausgeführt einen Effekt hat, wäre es doch praktisch oder nicht? |
23.06.2009, 14:05 | #18 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Nur wenn der Server auch überprüft wo der Befehl herkommt den er da ausführt und das tut er nicht. Es ist ein Leichtes im multiplayer Scriptbefehle an den Server oder sogar ganz gezielt an einzelne Spieler zu schicken. Wenn solche Befehle eingebaut werden kann das ein böses Ende nehmen. Wenn es den Befehl gibt kann man in 5-10 minuten ein Script schreiben mit dem man einen beliebigen User vom einem beliebigen Server auf dem man gerade ist bannen kann. Sowas können wir echt nicht gebrauchen. Das eigentliche serversidescripting ist nicht ohne grund vom regulären scripting ingame abgekapselt.
__________________
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
frage zur server.cfg (bei hohen ping kicken) / mods auf server verbieten | FBM | Technische Fragen & Probleme | 1 | 05.05.2009 17:34 |