Garrys mod TTT Dedicated Server erstellen – Part 5: Den Loading-Screen anpassen

In diesem Teil der Tutorialreihe zum Einrichten eines Dedicated Servers für TTT möchte ich euch zeigen, wie ihr einen eigenen Ladebildschirm erstellt, der dann allen Spielern, die sich mit eurem Server verbinden angezeigt wird. Ich werde in diesem Tutorial allerdings nur die allgemeinen Grundlagen zeigen und euch keinen fertigen Ladebildschirm liefern. Wenn ihr also einen eigenen Ladebildschirm erstellen wollt, solltet ihr euch zusätzlich noch ein wenig mit HTML und CSS auseinandersetzen, da dieser als ganz normale Webseite umgesetzt wird, welche einfach im Spiel angezeigt wird.

Zunächst möchte ich euch eine kleine Zutatenliste geben.  Ihr braucht für euren eigenen Ladebildschirm:

  • Einen Dedicated Server für Garry’s Mod
  • Einen eigenen Webspace (idealerweise mit PHP) auf den ihr per ftp zugreifen könnt
  • Grundkenntnisse in HTML, CSS, Javascript und bei Bedarf PHP

Habt ihr all diese Grundlagen erfüllt, steht eurem eigenen Ladebildschirm nichts mehr im Wege.

Was müssen wir auf dem Webspace tun?

Auf unserem Webspace erfolgt der Hauptteil der ganzen Arbeit. Hier werden wir im Folgenden eine ganz normale Webseite anlegen.

Anlegen eines eigenen Verzeichnisses im Webspace

Um uns nicht den ganzen Webspace mit den Dateien für den Ladebildschirm zu “verunstalten”, legen wir ein eigenes Verzeichnis an, in dem später nur die  zum Ladebildschirm gehörenden Dateien landen. Ich werde das Verzeichnis im Folgenden ttt_loading nennen. Passt bei der Namensgebung darauf auf, möglichst auf Sonderzeichen, Umlaute und Leerzeichen zu verzichten, da diese zu Problemen führen können.

Anlegen der nötigen Dateien

Wenn ihr einen Webspace habt, welcher PHP unterstützt, legt ihr am besten zunächst eine Datei namens index.php in eurem neuen Verzeichnis an. dazu kommt noch eine Datei für euer CSS-Stylesheet und eine weitere Datei, welche ich in diesem Beispiel jetzt loading.js nennen werde. Diese enthält später Spielspezifische Funktionen, die im Laufe des Ladefortschritts vom Spiel aufgerufen werden und mit deren Hilfe wir dadurch auf Ladefortschritte reagieren können. Wichtig ist, dass ihr sämtliche Dateien, welche ihr in eurem Ladebildschirm nutzen wollt, natürlich auch in die index.php einbinden müsst.

Funktionen für die loading.js

Wie bereits erwähnt gibt es einige vordefinierte JavaScript-Funktionen, die ihr selbst schreiben und damit auf Ladefortschritte reagieren könnt. Diese Funktionen werden während des Ladens vom Spiel aufgerufen und erhalten per Parameter den aktuellen Ladezustand aber auch andere Informationen zum Server. Im folgenden werde ich euch diese Funktionen kurz vorstellen und euch ihren Sinn erklären:

 

function DownloadingFile( fileName )

Diese Funktion erhält über den Parameter fileName den Namen der Datei, welche gerade vom Spiel heruntergeladen wird. Diesen könnt ihr dann nutzen, um zum Beispiel eine kleine Statusanzeige zu realisieren.

function SetStatusChanged( status )

Im Laufe des Ladevorgangs durchläuft das Laden verschiedene Phasen. Diese könnt ihr auch beim Laden mit dem Standard-Ladebildschirm in dem dunkelgrünen Rechteck unten rechts sehen (“Retrieving Server Info”, “Workshop finished”, …)

function SetFilesTotal( total )

Diese Funktion wird genau ein einziges mal aufgerufen, bevor der Download startet. Sie erhält über den Parameter total die Gesamtzahl aller herunterzuladenden Dateien. Wenn ihr euch diese Zahl speichert, könnt ihr mit der nachfolgenden Funktion den prozentualen Fortschritt berechnen.

function SetFilesNeeded( needed )

Diese Funktion erhält  über den Parameter needed nach jeder heruntergeladenen Datei die Information, wie viele Dateien noch heruntergeladen werden müssen. Mit dieser  Funktion lässt sich also zum Beispiel ein Ladebalken realisieren, welcher den aktuellen Downloadfortschritt anzeigt.

 

function GameDetails( servername, serverurl, mapname, maxplayers, steamid, gamemode )

Diese Funktion ruft das Spiel am Anfang des Ladevorgangs genau einmal auf. Hier werden die wichtigsten Infos zum Server und zum gerade laufenden Spiel übergeben. Die meisten Parameter sollten eigentlich selbsterklärend sein. Im Parameter steamid  wird die Steamid des gerade Ladenden Spielers übergeben. Damit könnt ihr dann zum Beispiel sein Avatar anzeigen. Dies ist jedoch mit PHP wesentlich einfacher, wie ich euch gleich noch zeigen werde.

Weitere Funktionalität für den Ladebildschirm

Das Avatar eines Spielers könnt ihr sehr leicht via PHP anzeigen. Dazu braucht ihr allerdings erneut den im dritten Tutorial erzeugten Key für die Steam API.

Der dazu nötige Code in PHP sieht folgendermaßen aus:

<?php
 $communityid = $_GET["steamid"];
 $authserver = bcsub($communityid, '76561197960265728') & 1;
 $authid = (bcsub($communityid, '76561197960265728')-$authserver)/2;
 $steamid = "STEAM_0:$authserver:$authid";
 $url     = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=EUERSTEAMAPIKEY&steamids=".$communityid."&format=xml";
 $data    = file_get_contents($url);
 $xml     = simplexml_load_string($data);
 $avatar = $xml->players->player->avatarfull;
?>

In der Variable $avatar steht anschließend der volle Pfad zum großen Thumbnail des Spieleravatars. Diesen könnt ihr dann nutzen, um das Bild in einem img-Tag anzuzeigen. Was ihr euch noch so alles an Informationen über euren joinenden Spieler über die Steam-API holen könnt, könnt ihr euch ansehen, wenn ihr die URL von $url mal mit einer validen $communityid und eurem API-Key aufruft. Ihr solltet dann ein XML-Dokument angezeigt bekommen, in dem die ganzen Informationen aufgelistet sind. Hier der Aufbau dieses XML-Dokuments:

<response>
	<players>
	  <player>
		  <steamid>…</steamid>
		  <communityvisibilitystate>3</communityvisibilitystate>
		  <profilestate>1</profilestate>
		  <personaname>…</personaname>
		  <lastlogoff>…</lastlogoff>
		  <profileurl>http://steamcommunity.com/id/…/</profileurl>
		  <avatar>http://media.steampowered.com/…</avatar>
		  <avatarmedium>http://media.steampowered…</avatarmedium>
		  <avatarfull>http://media.steampowered.com/…</avatarfull>
		  <personastate>0</personastate>
		  <realname>…</realname>
		  <primaryclanid>…</primaryclanid>
		  <timecreated>…</timecreated>
		  <personastateflags>0</personastateflags>
		  <loccountrycode>…</loccountrycode>
		  <locstatecode>…</locstatecode>
		  <loccityid>…</loccityid>
	  </player>
	</players>
</response>

Wer bereits ein bisschen PHP  programmiert hat wird sehen: dem obigen PHP-Script muss mit einem GET-Parameter die Steamid des Spielers übergeben werden. Wie das funktioniert, folgt gleich.

Einrichten des eigenen Ladebildschirms im Server

Um dem Server zu erklären, welchen Ladebildschirm ihr euren Spielern anzeigen wollt, müsst ihr erneut eine Konfigurationsdatei ändern. Wir benötigen dafür wieder die autoexec.cfg aus dem cfg-Verzeichnis des TTT-Servers. In diese müsst ihr nun die folgende Zeile einfügen:

sv_loadingurl "http://euer-webspace.de/ttt_loading/index.php?mapname=%m&steamid=%s"

Wie ihr eventuell sehen könnt, werden hier beim Laden der Seite zusätzlich noch die Parameter mapname und steamid übergeben (das %m und das %s wird durch den Server durch die tatsächlichen Werte für den Mapnamen und die Steamid des joinenden Spielers ersetzt – Diese wird zum Beispiel vom Avatar-Script weiter oben genutzt).

Abschließendes

Musik im Loading-Screen: Ja oder Nein?

Von meiner Seite aus ein klares NEIN! Ihr werdet mit der Musik garantiert nicht den Geschmack jedes potentiellen Mitspielers treffen. Außerdem ist es in der Ladephase unmöglich, Steuerelemente im Ladebildschirm zu bedienen, man hat also keine Möglichkeit, die Musik zu stoppen. Auch sind die Ladezeiten beim ersten Betreten eines Servers mitunter sehr lange, wodurch sich ein Lied durchaus während der Ladezeit auch 3-4 Male wiederholen kann – das wird sich keiner antun und euren Server verlassen, bevor er überhaupt mitgespielt hat. Zu guter Letzt kommen noch mögliche Copyrightprobleme dazu, wenn ihr keine eigene Musik nutzt, sondern auf Chartmusik oder ähnliches zurückgreift.

Und was soll ich jetzt in den Ladebildschirm einbauen?

Hier müsst ihr eurer Kreativität freien Lauf lassen. Häufig wird irgendeine Form von Ladefortschrittsanzeige eingebaut. Zusätzlich könnt ihr zum Beispiel die Serverregeln oder mit Hilfe anderer Tools eventuell Serverstatistiken anzeigen. Viel Spaß dabei!

 


 NOCH FRAGEN?

Schau dir doch mal die FAQ an, vielleicht wurde deine Frage bereits beantwortet. Wenn nicht, schreibe mir gerne in den Kommentaren.

Weiter gehts in Part 6 mit der Einrichtung und Nutzung von ULX, einem Plugin zur einfacheren Administration des Servers.

78 thoughts on “Garrys mod TTT Dedicated Server erstellen – Part 5: Den Loading-Screen anpassen

  • Hallo Simon.
    Aus irgend einem Grund bleibt bei mir die Zahl der needed gleich. Immer auf 57. Ich muss aber kein Intervall mit einbauen oder? Sollte doch eigentlich anzeigen wieviel noch heruntergeladen werden muss.
    Danke dir schon mal
    Fabian

    • Wie ist es denn, wenn du die Addons komplett aus deinem Addon-Ordner (Also der vom Spiel, nicht der vom Server) löschst (Kannst ja vorher mal vorsichtshalber ne Sicherungskopie irgendwo ablegen)? Weil wenn du alle Addons schon heruntergeladen hast, bekommst du natürlich nur einmal zu sehen, dass 57 Dateien gebraucht werden. Dann checkt dein Spiel, dass schon alle da sind und zählt danach dann auch nichts mehr herunter. Ich habe aber gerade gesehen, dass das bei einem vorgefertigten Startscreen so gelöst wurde, dass bei der Funktion DownloadingFile jeweils 1 von den verbleibenden Files abgezogen wird. Siehe https://github.com/glua/load-seed/blob/master/app/scripts/main.js#L83

      • Addons sind bereits draußen. War das erste, was ich versucht habe. Zumal die Totals 136 und nicht 57 sind….

        • Hm, bei mir verhält sich das ganz gerade irgendwie auch etwas seltsam gerade. Leider lässt sich das auch schlecht debuggen :/ Du kannst höchstens mal testen, ob das was ich oben verlinkt hab (kannst du ja mal 1:1 übernehmen vorerst) korrekte Ergebnisse liefert. Wenn nicht, stimmt da wohl gerade einfach auf der Seite des Spiels was nicht, was wir gar nicht ändern können.

          Das was ich im Tutorial schreibe stammt so aus dem offiziellen Wiki zu garrysmod (http://wiki.garrysmod.com/page/Loading_URL). Wenn das also so nichtmehr funktioniert, haben wohl die Entwickler da was versemmelt.

          • Hm. Also da geht es mehr oder weniger, wenn auch etwas seltsam. Zeigt zwar nicht meine server-daten sondern irgendwelche anderen an, aber da geht die Prozentzahl zumindest. Komisch. Willst du mal meinen Code sehen, vll erkennst du da etwas, wo ich einen Fehler gemacht habe.

          • kannst mir gerne mal deine loading url schicken, ja. Ich werde aber voraussichtlich erst Ende nächster Woche dazu kommen, mir das näher anzusehen, weil ich gerade am Lernen für die letzte Klausur in diesem Semester bin.

          • Nein, habe gestern meine letzte Prüfung geschrieben und hab erst heute wieder ein bisschen Zeit zum ausschlafen gehabt, was ich auch ausgiebig genutzt habe 😀

            Habe mir dein Skript jetzt aber ohne es bisher genauer getestet zu haben mal angesehen und würde behaupten, das passt so eigentlich. Du kopierst zwar viel unnötig in temporäre Variablen (du hättest auch direkt document.getElementById("filesleft").innerHTML=needed schreiben können) aber schlimm ist das ja nicht. Das deckt sich aber mit meiner Erfahrung – bei meinem Loading Screen bleibt diese Zahl seltsamerweise neuerdings auch konstant. Ich werde in den nächsten Tagen mal noch ein bisschen rumprobieren und dich wissen lassen, wenn ich irgendwas neues herausgefunden habe.

            Zum Vergleich: Das hier ist mein Loading-Screen (noch sehr unausgereift, ich weiß – aber ist ja auch nicht das wichtigste an nem Server :D) https://e-smog.org/zk/ttt_loading/

          • Das ist immer gut möglich, ich denke nicht, dass die bei jedem Update testen, ob die loading screen-Funktionen noch alle funktionieren. Ich teste aber einfach noch ein bisschen rum, vielleicht habe ich ja auch was in der Beschreibung im Wiki falsch verstanden.

  • Moin,

    kennst du vielleicht ein Tool, mitdem mann Serverstatistiken auf dem Ladebildschirm anzeigen lassen kann ??

    MfG René Müller

    • Naja, was meinst du denn überhaupt mit „Serverstatistiken“? Die Prozessorauslastung? Die Arbeitsspeicherbelegung? Die Anzahl bisheriger Mitspieler? Da gibt es viele Möglichkeiten.

      Im Ladebildschirm kannst du alles anzeigen, was man halt so auf einer Webseite anzeigen kann – im Prinzip also alles. Ein vorgefertigtes Skript wirst du aber wohl eher nicht finden. Im Zweifelsfall wirst du dir da per PHP und anderen Skriptsprachen was basteln müssen, das die Werte 1. ausliest und 2. dann im Ladebildschirm anzeigt.

  • Moin,
    erst einmal, nice wie du das beschrieben hast, sehr schlüssig und echt gut gemacht. Bevor ich mich jetzt daran mache mir einen Server zu erstellen, wollte ich einmal fragen, ob es sich empfiehlt so einen dedicated Server so zu erstellen für eine kleine LAN-Party. Denn das ist mein Ziel: Demnächst schmeiße ich mit ein paar Kollegen eine LAN-Party, nun wollte ich vorher einmal für uns die Möglichkeit schaffen, so ein paar Add-Ons für TTT und auch zum Beispiel Prob Hunt einzufügen. Und wenn ich das jetzt so sehe, ist das hier so wohl die beste Variante. Online etc. brauch der nicht sein, wie gesagt, dieser Server wäre nur für die LAN-Party und zum einbinden der Add-Ons, sodass alle diese Inhalte bekommen. Was ja wohl automatisch funktionieren würde mit einbindung per Workshop. Oder gibt es für eine LAN-Party an sich noch eine bessere Variante?

    Liebe Grüße 🙂

    • Hi 🙂

      Ja, grundsätzlich wäre ein Dedicated Server eine Möglichkeit, für eine größere Lan-Party. Vorteil daran ist, dass du den Server schon vorher fix-und fertig einrichten und auch testen kannst. So ist auch eine Spezialisierung auf einen bestimmten Spielmodus pro Server Möglich. Du hättest dann zum Beispiel die Möglichkeit, einen PropHunt und einen TTT-Dedicated Server einzurichten.

      Eine etwas schnellere Methode (die vor allem ohne große Einrichtarbeit und Gigabyte-große Downloads von Server-Dateien funktioniert), wenn ttt oder ph eventuell nur kurz gezockt werden sollen wäre die Möglichkeit, direkt im Spiel zu hosten. Das funktioniert dann wie früher in Counter Strike oder diversen Strategie-Spielen: einer hostet bei sich direkt ingame einen privaten Server, alle anderen treten diesem Server bei. Das hat den Vorteil, dass es sehr schnell geht. Du hast damit aber leider keine allzu große Kontrolle über Addons, die auf dem Server laufen: Alle Addons, die du im Workshop für dich abonniert hast, sind auf deinem Server dann auch aktiv (so war es zumindest, als ich das vor ca. einem Jahr mit meinen Freunden getestet habe). Wenn du nur bestimmte Addons auf dem Server haben möchtest, musst du entweder tatsächlich zum Dedicated Server greifen oder aber vor dem Hosten deine Garrys Mod Workshop-Abonnements ausmisten 😀

      Zusammenfassend kann man wohl sagen: Kommt drauf an, wie deine Bedürfnisse sind: Willst du lange und oft auf einem sehr stark konfigurierbaren Server spielen, den du auch vor der Lan ausgiebig testen kannst? Dann bist du mit einem Dedicated Server gut beraten. Willst du einfach auf der Lan schnell einen Server hosten, dem alle anderen einfach beitreten und dich aber nicht Stundenlang vorher um das Einrichten kümmern und steht es noch gar nicht fest, dass du den Server nach der Lan jemals wieder brauchen wirst? Dann tut ist das ingame-hosten imho völlig ausreichend.

      Lg,
      Simon

      • Gut danke, das hilft mir weiter, werde es dann mal mit dem dedicated Server machen zur besseren Kontrolle. Und danke für die fixe antwort 🙂

        • Moin nochmal,

          habe die Server erstellt, läuft an sich super. Sogar Prob Hunt habe ich nach einige Problemen so aufgesetzt. Nun habe ich das Problem, dass wenn man sich auf den Server connected ja eigentlich die Addons aus der Kollektion runtergeladen werden sollten, was er eig auch macht. Der Server mountet diese auch..
          Doch bei Prob Hunt ist es mir aufgefallen: Da habe ich ein Tauntpack mit in die Kollektion gesteckt, hatte das selber zusätzlich abboniert. Nun habe ich erstmal natürlich nichts mitbekommen, durch das Abo des Addons konnte ich die Taunts selber hören. Soweit so gut, nur dann sagte mein Kumpel er würde die nicht hören. Und hier ist das Problem jetzt, er hatte dieses spezielle Addon nicht abboniert, muss er ja eigentlich auch nicht, da dieses Addon in der Server Kollektion eingebunden ist und er doch eigentlich auch dann automatisch diese Addons runterladen sollte, oder nicht? Also meine Frage: Müssen die Addons trotzdem nochmal abboniert werden oder sollte normalerweise das automatisch beim verbinden passieren?

          Liebe Grüße 🙂

          • Hi,

            ja damit habe ich auch manchmal schon so meine Probleme gehabt – die meisten der Addons, die direkt im Spiel gebraucht werden (ich denke das sind die mit lua-Dateien), werden vom Client direkt heruntergeladen. Manche Addons, die nur Ressourcen wie Skins, Sounds, etc. enthalten, scheinen so allerdings nicht direkt heruntergeladen zu werden.

            Für solche Packs gibt es allerdings eine Möglichkeit, den Download zu erzwingen:

            Unter /gm/garrysmod/lua/autorun/server/ kannst du dir eine neue .lua-Datei mit beliebgem Namen erstellen. Ich habe meine zum Beispiel force_dl.lua genannt.
            In diese lua-Datei musst du die IDs der Addons deren Download erzwungen werden soll nach folgendem Muster eintragen: resource.AddWorkshop( "105685526" )
            resource.AddWorkshop( "112471062" )
            resource.AddWorkshop( "132286705" )
            .
            .
            .

            Wenn die IDs so eingetragen sind, sollten die Clients deiner Freunde bei einem Reconnect die Betroffenen Addons dann eigentlich herunterladen.

            Du solltest es mit der Zahl der eingetragenen Addons allerdings auch nicht übertreiben, da sonst der Download für neue Spieler extrem lange dauern kann.

            Ich hoffe, ich konnte dir weiterhelfen 🙂

            Lg,
            Simon

    • Ok, dann ist das auch nicht das Problem. So langsam gehen mir dann aber leider echt die Ideen aus, ehrlich gesagt 😀
      Anpingen kann ich dich nach wie vor nicht und falls dein Server gerade läuft: mir antwortet er auch nicht. Falls du nicht irgendein Addon installiert hast oder eine Einstellung anders gesetzt hast, als im Tutorial, wüsste ich nicht, warum es jetzt nicht funktionieren sollte :/

        • Das ist ja komisch: Jetzt hast du hier auf einmal eine IPv6-Adresse (siehe Anhang). Hast du diesen letzten Beitrag auch von deinem normalen PC zu Hause geschrieben? Dann wird das Problem tatsächlich das im anderen Kommentar von mir beschriebene sein. Mit IPv6 funktioniert der Server leider im Moment noch überhaupt nicht. Mir wäre da auch kein Weg bekannt, wie man das Umgehen kann, außer wie gesagt hamachi oder Tunngle zu benutzen (oder einfach woanders zu Hosten)
          IPv6

          • Hamachi installieren, dir einen Benutzeraccount bei logmein anlegen, ein netzwerk erstellen, das gleiche bei allen freunden machen und die dann alle in dein Netzwerk reinpacken. Dann sollten (wenn hamachi das mit ipv6 besser hinbekommt als srcds) alle deinen Server bei „lokales Netzwerk“ finden.

  • Alles nachgeguckt SV_lan 0 und ich kann joinen rummlaufen ….
    den api code hab ich für den screenshot entfernt weil ich zu faul war ihn unkenntlich zu machen
    wird dann höchswahrscheinlich ein problem zwischen meinem pc und dem inet sein 🙁

      • Na zu no-ip gibts ja eigentlich nicht viel zu sagen. Das meiste was es da zu tun gibt ist sowieso am Router einzustellen und das ist ja dann wieder Routerabhängig (und zumindest in der Fritzbox so ziemlich selbsterklärend).

        Kurze Anleitung:

        gehe auf https://www.noip.com
        Melde dich an
        du landest auf https://www.noip.com/members/
        Klicke auf Add a host
        Hostname kannst du dir frei im Rahmen der Vorgaben aussuchen. (merken!)
        Wähle bei Host Type „DNS Host (A)“
        Schreibe bei IP Address deine IP rein (herauszufinden über http://www.wieistmeineip.de/)
        Und dann solltest du schon fertig sein.

        In der Fritzbox (Erweiterte Ansicht) dann:
        Internet->Freigaben->Dynamic DNS

        Dynamic DNS-Anbieter: „No-IP.com“ auswählen
        Domainname: Dein gerade oben gewählter Domainname
        Benutzername: Dein Benutzername auf https://www.noip.com/
        Passwort: Dein Passwort auf https://www.noip.com/
        Speichern
        fertig

        Zum anderen Problem: vorübergehend könnte dir dann Hamachi helfen, das verbindet alle eure Rechner so, als wären sie in einem Lan – dann sollten deine Freunde den Server auch finden, als wäre er in einem lokalen Netzwerk.

        Was mich persönlich wundert: ich kann die IP, unter der du deine Kommentare schreibst auch nicht anpingen, das gibt immer eine Zeitüberschreitung. Irgendwie scheint entweder dein Router oder bereits dein Provider so einiges an Verbindungsversuchen von außen zu blocken.

        • und was kann ich da machen
          habe auch einen repeater im netz falls dir diese info hilft
          und eine leitung bei unitymedia

          • Tjaa, das ist eine gute Frage… Der Repeater sollte kein Problem sein und dass du bei Unitymedia bist habe ich mir wegen deiner Fritzbox Cable schon gedacht. Es kann leider sein, dass es bei deinem Internetanschluss gar nicht möglich ist, dass du via IPv4 von außen erreichbar bist. Was sagt denn http://www.wieistmeineip.de/ bei „Ihre IPv6-Adresse lautet:“? Hast du eine IPv6-Adresse oder ist keine vorhanden? Das kann unter Umständen nämlich auch Probleme machen, da der srcds nur IPv4 aber nicht IPv6 unterstützt. Eventuell ist also das hier: http://de.wikipedia.org/wiki/IPv6#Dual-Stack_Lite_.28DS-Lite.29 dein Problem – das ließe sich dann außer durch einen Vertragswechsel bei Unitymedia gar nicht beheben.

  • Hallo,
    danke erstmal für die Erklärungen. Habe durch die Tutorials schon einige Funktionen zu meinem Server hinzufügen können.
    Bei diesem Schritt habe ich nun das Problem, dass der Loadscreen beim laden schwarz bleibt, also vermutlich gar nicht geladen wird. Die Adresse zum Webspace, http://dh1806.bplaced.net/index.php funktioniert einwandfrei. Ich habe die URL wie vorgegeben in die autoexec.cfg eingegeben, und es wird ja auch nicht mehr der normale Garrys Mod Ladescreen geladen, irgendwas muss also passiert sein. Der Ladescreen wird jedoch leider nicht geladen, könnte das evtl daran liegen dass auf dem Webspace bisher nur die index.php / style.css sowie das Bild für den Header vorhanden ist? Woran könnte es sonst liegen?
    Danke schon einmal für die Antwort,
    D.H.

    • Hi, also ich habe jetzt testweise einfach mal meinen Server so eingestellt, dass er deinen Loading-Screen nutzt – und bei mir hat alles funktioniert. An deinem Webserver oder deinem Loading-Screen liegt es also nicht. Du solltest bei dir also nochmal ganz genau prüfen, ob du in der Server-Konfigurationsdatei alles richtig geschrieben hast. Bei dir sollte das also so aussehen:

      sv_loadingurl "http://dh1806.bplaced.net/index.php"
      gamemode terrortown

      Der Loading-Screen erscheint auch immer erst nach „retrieving server information“ – es dauert also eventuell eine Weile, bis der Loading-Screen das erste mal erscheint.

      • Hallo, Danke für die Antwort. Habe es inzwishen selbst herrausgefunden, es fehlten die Anführungszeichen bei der URL (Da solltest du übrigens deinen Artikel bearbeiten, da fehlen sie nämlich auch).
        Habe nun noch ein anderes „Problem“, auf der Adresse zu meinem Webspace sieht man unten den Footer im Vergleich zu dem Bild „Infos & Regeln“ leicht nach links versetzt, sodass er insgesamt mittig wirkt. In Garrys Mod wird das Bild jedoch immer links auf der Höhe des Infos-Bildes beginnend geladen. Gibt es bestimmte CSS-Begriffe, die GM nicht laden kann, oder wieso wird es dort anders dargestellt als im Browser?
        Die CSS-zeile lautet übrigens #footer{position:relative;width:460px; padding-bottom:50px;padding-top:10px;right:100px;}, der Div Footer ist jedoch noch in dem Div des Info-Bildes drinnen, da das Bild in Garrys Mod sonst direkt unter dem Header geladen wird.
        Hat vtl etwas mehr mit CSS zu tun, jedoch tritt das Problem ja nur in Garrys Mod auf. Würde mich freuen, wenn du mir da noch einmal helfen könntest.
        Gruß
        D.H.

        • Oh verdammt… Tatsächlich, da fehlen die auch – wird sofort ergänzt, danke 🙂

          Zu deinem Ladebildschirm an sich:

          Ein paar allgemeine Tipps: Gewöhne dir am besten einen sauberen Stil an, d.h. verschachtelte Elemente immer schön einrücken, nach jedem Element ein Zeilenumbruch etc. das macht das Lesen des Codes wesentlich einfacher. position: relative ist in Verbindung mit Pixelangaben (oder wenn du einen Webdesigner fragst: IMMER) eine eher schlechte Wahl. Stell dir vor, dein Kumpel hat einen größeren/kleineren Bildschirm als du, da passt dann ja nichts mehr so richtig zusammen.
          Wenn du alle Elemente zentrieren möchtest, nutze am besten margin: auto; für die zu zentrierenden Elemente (wie du es ja sowieso schon teilweise machst).

          Dein footer ist zudem für das enthaltene Bild viel zu schmal und dafür zu hoch (gleiches gilt für die Regeln). Dein Bild hat 1030 Pixel in der Breite und #footer aber nur 460px – das kann nicht passen. Dazu kommt, dass du Elemente, aus ihrem eigentlichen Container hinausschiebst (den footer nach links aus #text). Sowas ist auch nicht wirklich schöner Stil und darauf könnte der ingame-Browser (der den Ladebildschirm dann darstellt) auch empfindlich reagieren. Dein Browser schafft es, das ganze trotz solcher Ungereimtheiten halbwegs gut darzustellen, das Spiel scheint damit aber Probleme zu haben. Deshalb solltest du gut auf die richtigen Größen achten und wo es nur geht relative/automatische Größen nutzen, damit die Seite auf allen Bildschirmen gleich/ähnlich aussieht.

          Ganz praktisch ist beim Entwickeln einer Webseite übrigens das Entwicklermenü, das viele Browser mittlerweile unter F12 bereitstellen. Da kannst du dir ganz genau ansehen, welche Container wie groß sind und wo es Probleme geben könnte.

          Dein eigentliches Problem konnte ich so jetzt leider nicht lösen, ich hoffe aber, dass ich dir ein paar Denkanstöße geben konnte, die dir weiterhelfen.

          • Ja, danke für die Tipps. Habe es nun hinbekommen, Hauptproblem war wohl die zu geringe Breite 🙂
            Danke für die Hilfe,
            D.H.

    • Die selbe Frage hast du weiter unten doch schon zweimal gestellt!? Wenn du immer nur die selbe Frage stellst und mir keine weiteren Infos gibst, kann ich dir schlecht helfen. Schreib doch bitte wenigstens mal, was du schon gemacht hast, und welche meiner Tipps du schon umgesetzt hast! Sonst kann ich dir einfach nicht weiterhelfen weil es einfach keinen Ansatzpunkt gibt…

      Wie bereits gesagt: Am wahrscheinlichsten ist, dass eine Firewall das ganze blockt. Und wenn es nicht die Windows-eigene Firewall (oder die deines Virenscanners) ist, dann ist es die im Router. Und wie man das ganze in deinem Router umstellt, habe ich dir unten ja schon genauestens beschrieben…

        • Nachdem du mir weiter unten eine Frage zu einer fritzbox 3600 cable geschrieben hast, gehe ich mal davon aus, dass das dein Router ist? Dann hast du abgesehen von der, die sowieso in jedem Windows enthalten ist ziemlich sicher eine weitere Firewall – und zwar im Router. Und das ist es, was ich dir die ganze Zeit schon sagen möchte: Wenn dein Router keine Daten nach innen durchlässt, können deine Freunde natürlich auch nicht auf deinen Server verbinden.

          Und wenn unten im Router die Ansicht auf erweitert steht, geht das wie ebenfalls weiter unten schon beschrieben Links im Menü über Internet->Freigaben. Dort dann im ersten Tab „Portfreigaben“ auf „Neue Portfreigabe“ klicken, „andere anwendungen“ auswählen und Port 27015 für TCP an Port 27015 auf deinem PC weiterleiten. Dann speichern und das selbe wiederholen, nur dieses mal UDP einstellen. Erst dann kann das ganze überhaupt funktionieren.

          Und wenn es dann noch nicht funktioniert, solltest du noch unter „Systemsteuerung\System und Sicherheit\Windows-Firewall\Eine App oder ein Feature durch die Windows-Firewall kommunizieren lassen“ prüfen, ob srcds.exe durch die Windows-Firewall kommunizieren darf. Wenn du das alles gründlich gemacht und gecheckt hast, dann melde dich bitte nochmal und gib mir genaue informationen (screenshots sind am sinnvollsten), wie bei dir alles eingestellt ist und was exakt passiert wenn jemand connecten will.

          • Jep zum Beispiel. wobei die server.cfg eigentlich nicht unbedingt, wenn du einfach die von hier aus dem zweiten Part übernommen hast und nicht mehr als die ttt-Regeln angepasst hast.

          • Ok, du bist aber am Anfang bei der Einrichtung nicht wirklich exakt meinem Tutorial gefolgt, oder? In deiner Kommandozeile fehlt nämlich zum Beispiel die Option für den Steam Api-Key (-authkey) oder hast du die nur für den Screenshot entfernt? Zudem sind die Ordnerpfade etwas anders, sodass du dann auch bei der Konfiguration (mounten, etc.) andere Pfade nutzen musst. Deine Firewall- und Routereinstellungen sehen soweit gut aus, solange der Server auch wirklich auf „tino1711-PC“ laufen soll.
            Falls du die Ersteinrichtung mit Hilfe eines anderen Tutorials gemacht hast: sv_lan sollte in der server.cfg auf keinen Fall auf 1 gesetzt werden – dann ist dein Server aus dem Internet nämlich nicht erreichbar. Hast du das schonmal geprüft?

          • Ah und da du selbst deinem Server wie es klingt ja anscheinend beitreten kannst: funktioniert da alles (wird die Map geladen, kannst du herumlaufen, …)? Wenn nicht, ist es wohl irgendwie ein Konfigurationsfehler den wir noch nicht gefunden haben, falls doch, muss es noch irgendetwas zwischen deinem PC und dem Internet geben, was den Zugriff verhindert…

          • Das ist genau das, wo ich die ganze Zeit versuche, dich zu überzeugen das mal richtig einzustellen: Das ist der Mechanismus im Router, der dafür sorgt, dass der Datenverkehr, der von außen an einem bestimmten Port ankommt im Heimnetzwerk an den richtigen Port des richtigen PCs weitergeleitet wird. Wenn die NAT falsch oder gar nicht konfiguriert ist, kann keiner connecten. Und das Einstellen machst du exakt so wie ich einen Kommentar weiter oben beschreibe. Das ist gleichzeitig die Einstellung für die Routerinterne Firewall und die NAT.

  • Erstmal sehr gute Guide, danke! 😀 Ich hab aber noch ein Problem:
    http://steamcommunity.com/sharedfiles/filedetails/?id=322871123
    Das hier ist meine Kollektion, aber wenn ich die srcds datei in steamcmd/gm öffne werden nur gm_construct und gm_flatgrass angezeigt obwohl die startServer.bat datei so aussieht:
    srcds.exe -console -maxplayers 10 -game garrysmod +gamemode terrortown +map ttt_skyscraper -authkey ############################### +host_workshop_collection 322871123 hab ich also was falsch gemacht? danke schonmal im vorraus
    -Milez

    Edit by Simon: Api-Key zensiert

    • Na du musst den Server dann natürlich auch über die startServer.bat starten, nicht über die srcds.exe. Wenn du das machst und sonst alles richtig eingerichtet ist, sollte der Server eigentlich in der Konsole starten, zunächst deine ganzen Workshop-addons herunterladen und dann müssten auch deine hinzugefügten Maps verfügbar sein.

      P.s. Deinen Steam-Apikey habe ich mal unkenntlich gemacht. Mit dem könnten andere in deinem Namen ziemlichen Unfug treiben (deine Workshop Collection manipulieren etc.)

      • Also ich habe ja die srcds.exe, das ist eine Anwendung und ich habe die startServer.bat, beide im verzeichnis C:\steamcmd\gm
        Die startServer.bat ist ja aber keine Anwendung die ich starten kann sondern ein Texdokument, das so aussieht wie oben im kommentar. Wie soll ich die denn starten? ich glaube ich habe irgendwo etwas total simples verpasst komm aber nicht drauf…
        -Milez

        • Ich glaube, du verstehst da was falsch: Die startServer.bat ist eine Skript-Datei und keine Textdatei – das ist ein Unterschied. Ein Skript ist ausführbar und dieses startet wenn du es Doppelklickst dann den Server mit den nötigen Parametern. Wichtig ist dabei allerdings, dass du die Dateiendungen bei bekannten Dateitypen nicht ausblenden lässt. Sonst kann es passieren, dass du eine Datei namens startServer.bat.txt hast, wobei das txt eben ausgeblendet wird und es für dich aussieht, als hieße die Datei nur startServer.bat. Das wäre dann WIRKLICH keine Skriptdatei. In dem Fall einfach in den Ordner- und Suchoptionen die Dateiendungen einblenden lassen (da gibts auch Tutorials im Internet, falls du nicht weißt, wo genau das geht) und die Datei richtig umbenennen. Dann sollte das ganze auch klappen.

          • Grundsätzlich ist aber richtig was du sagst: Das ganze ist im Grunde auch mit der richtigen Dateiendung nur eine Textdatei. Durch die korrekte Dateiendung weiß Windows aber, dass es die Textdatei nicht einfach zum bearbeiten öffnen, sondern das Skript darin ausführen soll, wenn sie doppelt angeklickt wird.

    • Das sollte eigentlich funktionieren, wie wenn du jedem anderen Server joinen willst: Über den Serverbrowser im Spiel selbst (Wenn du nach einem Teil des Servernamens im Filter suchst, solltest du ihn schnell finden). Wenn der Server in deinem lokalen Netzwerk steht hast zumindest du selbst es auch etwas einfacher, weil du dann den „Lokales Netzwerk“-Menüpunkt nutzen können solltest. Deine Freunde könnten dir dann auch über die „Spiel beitreten“-Funktion von Steam hinterherjoinen.

      Voraussetzung, dass das alles richtig funktioniert, ist aber wie am Anfang von Part 1 gesagt, dass deine NAT im Router richtig eingestellt ist und die Firewall am Serverrechner auch passend konfiguriert ist. Sprich: Der Router muss Aufrufe an die entsprechenden Ports an deinen PC weiterleiten, dieser muss diese Anfragen dann auch an den TTT-Server durchlassen.

        • Internet->Freigaben, da der Tab Portfreigaben. Die Oberfläche sollte selbsterklärend sein (Wenn nicht, bitte einfach ins Handbuch schauen). Ich kann hier leider echt nicht für jeden Router eine genaue Anleitung geben, das geht bei jedem wieder ein bisschen anders und die Liste würde dann endlos werden. Bei der Fritzbox ist es glaube ich außerdem noch wichtig, die Ansicht ganz unten auf Erweitert zu stellen, da die wichtigsten Einstellungen sonst fehlen.

          • „Der Port für den Dedicated Server muss im Router geöffnet sein – und außerdem an den Server-PC weitergeleitet werden. Wie das geht, ist in der zum Router gehörenden Anleitung oder in einem der zahlreichen Tutorials im Netz nachzulesen. Für den Server ist der Port 27015 für TCP und UDP freizugeben und an den eigenen PC weiterzuleiten.“ – Part 1 😉

  • kannst du mir ein gutes Ingame-Administration Addon oder ähnliches empfehlen für den Server? Es gibt zu viele als das man alle durchprobieren kann/will 😉

    • Also wirklich viele verschiedene hab ich da auch noch nicht getestet. Ich selbst benutze aber ULX + ULIB, was wohl auch das am häufigsten verwendete Admin-Addon zu sein scheint, und bin eigentlich recht zufrieden damit. Dafür gibt’s im Workshop auch noch eine ttt-spezifische Erweiterung (http://steamcommunity.com/sharedfiles/filedetails/?id=127865722), die ein paar nützliche Funktionen ergänzt. Zum Thema ULX habe ich auch noch einen weiteren Artikel für die Serie geplant, bin aber im Moment wegen einem Haufen Prüfungen in der Uni leider etwas zu eingespannt, um den schreiben zu können. So Mitte Oktober kommt der aber wahrscheinlich dann.

  • moin moin, danke für deine hilfe ich hab viel davon gelernt, nur verstehte ich nicht, wie ich die datei loading.js datei in die index.php datei einbinden soll.
    auserdem fehlt mir jede grundkenntnis über css datein, kannst du mir da weiterhelfen?

    • Ja, auf den Inhalt der index.php hatte ich verzichtet, damit das ganze nicht zu ausufernd wird. Das js bindest du mit

      <script type='text/javascript' src='PfadZumScript'></script>

      ein.
      Diese Zeile packst du am besten ganz oben in den Head-Bereich der Datei (Kannst dir ja mal den Quelltext dieser Seite anzeigen lassen, da siehst du, wie das angewendet wird).
      Css dagegen wird mit

      <link rel='stylesheet' href='PfadZumCss' type='text/css'/>

      eingebunden.
      Zu den Grundkenntnissen: Das hier zu erklären wird definitiv zu viel. Oben im Artikel sind für jede Script- und Auszeichnungssprache sehr gute Online-Tutorialseiten verlinkt, die auch mir am Anfang ganz gut geholfen haben, einen Einstieg zu finden. Da könntest du dir die Basics mal durchlesen. Auch hilfreich kann es sein, im Internet mal nach anderen Loading Screens zu suchen und da nachzusehen, wie die gemacht wurden. Da man mit css ja auch nichts kaputt machen kann, kannst du auch einfach mal ein bisschen rumprobieren. So lernt man es eigentlich am besten 🙂

Kommentare sind geschlossen.