diese Servermodifikation ist für die Standard-PhysicsProfileHash im Intervall -2147483648 ... 2147483647 gemacht worden und tut auch.
mittlerweile habe ich gesehen , dass es auch (funktionierende) Carslots-Varianten mit PhysicsProfileHash im Intervall 0 .. 4294967295 gibt.
Beim PhysicsProfileHash > 2147483647 läuft der Java-INT-Typ über.
Mittlerweile habe ich bei mir eine Anpassung für alle 3 Server gemacht.
Ich spare mir erstmal den Upload. Wenn einer das Programm benutzen sollte und auf den Fehler läuft, bitte melden. ------------------------------------------
Hallo zusammen.
Ich würde gerne den Server so modifizieren, so dass er nach jedem Rennen meine Zeit in eine Datei schreibt. Diese Datei kann man dann von Zeit zu Zeit mal mit Excel oder so auswerten.
Leider scheitere ich (kurz vom Ziel ?) und bräuchte paar Tipps von einem oder DEM Server-Experten hier.
Wie weit bin ich ?
Einfach die Sourcen von Berkay nehmen , kurz verändern , übersetzen , ... funktioniert nicht so einfach, weil dann freie externe Bibliotheken fehlen.
Als Beispiel am Server 1.0. Andere gehen genauso. Kopiert den Server nfsw-srv-1.0.jar aus dem Serververzeichnis in ein komplett neues Verzeichnis. Dort entpackt ihr diese Datei. Entweder mit "jar xf nfsw-srv-1.0.jar" oder einfach einem Zip-Program; Jar ist nämlich nix anderes als Zip.
Die Verzeichnis-Struktur sieht so aus: br\com\hosts <<<< hier sind die compilierten Sourcen von berkay javax\servlet <<<< hier sind Server-Tools von Java, die im JDK nicht drin sind org\eclipse\jetty <<<< hier sind externe Server-Bibliotheken drin
Jetzt die Sourcen aus dem Server-Verzeichnis nach br\com\hosts kopieren. Jetzt bekommt man sie auch übersetzt.
Ich habe nun an diversen Stellen einen Trace hinprogrammiert und alles in Dateien geschrieben. Nicht dabei ist allerdings meine gefahrene Zeit.
Wie man in den CMD Fenstern am Output von Berkay sieht ...
GET-> /nfsw/Engine.svc/matchmaking/launchevent/43 -> /nfsw/Engine.svc/matchmaking/launchevent/43 ich habe Rennen 43 (Construction Route) ausgewählt PUT-> /nfsw/Engine.svc/event/launched -> /nfsw/Engine.svc/event/launched Rennen startet
dann das Rennen mit PowerUps und so
dann kommt nach dem Rennen u.a. POST-> /nfsw/Engine.svc/DriverPersona/UpdatePersonaPresence -> /nfsw/Engine.svc/DriverPersona/UpdatePersonaPresence
Ich denke , hier werden die Renn-Infos zwischen Client und Server ausgetauscht.
Sowas hat die API von World nämlich zurückgeliefert.
Offenbar erkennt Berkay's Server das Rennende und "verbucht" unabhängig vom Rennen die Dummy-Datei ..\www\nfsw\Engine.svc\matchmaking\joinqueueevent\377_xmpp.xml ???
D.h. jetzt muss ich "nur noch" den tatsächlichen Strom abfangen und wegschreiben. Das passiert wohl in Datei NfswSrv.java. Die anderen würde ich fast ausschliessen. Da bin ich nun aber mit meinem Latein am Ende.
Daher also die Frage an den Serverexperten nach einem kleinen Tipp.
2 Abende gesucht und probiert -- nix gefunden -- Post aufgemacht -- 2 Versuche wollte ich noch machen -- erster Versuch sitzt -- melde mich demnächst mal mit Ergebnissen
NFSW Offline Server =================== Modifikation zum automatischen Speichern der Rennzeiten.
Modifiziert wurden die Versionen: - Beta 1.0 vom 7.7.15 (ziemlich stabil; ausführlich getestet) - Beta 1.6 (kurzer Test) - Beta 1.7 (kurzer Test)
1. Version der Modifikation: 02.09.2015
Diese Modifikation richtet sich also an all die Zeitenjäger oder die Leute, die gerne mal bei NFSTIMES vorbeigeschaut haben oder mit der Speed-API von EA sich die Zeiten selbst runtergeladen haben.
Nach jedem Rennen (egal , ob beendet oder abgebrochen) sendet der Client die Renninformationen an den Server:
Die Server-Versionen von berkay (von 1.0-1.7) ignorieren diese Information, was für den Anfang ja auch völlig o.k. ist.
Ich habe nun diese Informationen abgegriffen und in einem Trace-File gespeichert.
Wie man sieht, fehlen einige Informationen in diesem Xml-Tag <RouteArbitrationPacket>. Das soll jetzt erklärt werden.
<FinishReason>22</FinishReason> ==> man hat das Rennen durch "ins Ziel fahren" beendet <FinishReason>8202</FinishReason> ==> man hat das Rennen abgebrochen ; diese Ergbnisse werden weggefiltert
Die wichtigste Information ist sicherlich <EventDurationInMilliseconds>55494</EventDurationInMilliseconds> ==> Rennzeit in Millisekunden, also 55,494sec.
<CarId>45006569</CarId> ist die carid aus Eurer Carslot.xml Datei. Da man das Auto verkaufen könnte, habe ich mit <CarId>45006569</CarId> das Auto ausgelesen und den <PhysicsProfileHash>-1541998384</PhysicsProfileHash> abgeleitet. Dieser <PhysicsProfileHash> ist die eindeutige Beschreibung des Auto und resistent gegen alle Modifikationen. Der Name aus der Carslot-Datei ist nicht zu gebrauchen, da er oft leer ist oder es steht auch was falsches drin. Also gibt es ein weiteres Mapping <PhysicsProfileHash>-1541998384</PhysicsProfileHash> --> <CarName>MCLAREN F1 ELITE</CarName> (dieses Mapping ist noch nicht komplett gemacht, aber stört für den Anfang nicht)
Das Event wird auch noch ausgelesen und die Datei ..\www\nfsw\Engine.svc\matchmaking\launchevent\xyz.xml dem Trace hinzugefügt, damit man das tatsächliche Event kennt.
Aus der Event-ID wird noch der Event-Name abgeleitet.
Am Ende sieht der Trace für ein Rennen so aus:
<Race> <SessionInfo> ... </SessionInfo> <<< hier ist u.a. die Event-Id drin <RouteArbitrationPacket ... </RouteArbitrationPacket> <<< hier ist u.a. die Zeit drin <Eventdate>2015-8-31</Eventdate> <PhysicsProfileHash>-1541998384</PhysicsProfileHash> <EventName>Construction Route</EventName> <CarName>MCLAREN F1 ELITE</CarName> </Race>
Das Trace-File hat nicht den Anspruch, ein korrektes XML-File zu sein, ist es im Normalfall aber schon.
Schreibt einfach am Anfang und Ende der Datei ein beliebiges Tag hin, z.B.:
Nun könnt ihr mit Excel oder so die Rennzeiten auswerten. Dazu reichen dann die Spalten:
<EventId>43</EventId> <EventName>Construction Route</EventName> <PhysicsProfileHash>-1541998384</PhysicsProfileHash> <CarName>MCLAREN F1 ELITE</CarName> <EventDurationInMilliseconds>55494</EventDurationInMilliseconds> <Eventdate>2015-8-31</Eventdate>
Zur Installation: Jetzt kommt der einfache Teil. Es gibt quasi keine Installation. Ihr könnt die jeweilige jar-Datei aus Eurem Server-Verzeichnis ersetzen. Alles bleibt wie vorher (alles Gute und alles Schlechte). Nur die Zeiten werden in einer Datei NFSW_Offline_Times_output.txt gesichert.
Wer erst mal testen will, kann das auch gerne in einem neuen Verzeichnis machen. Wie fast alle wissen, kann man beliegig viele Server-Versionen auf dem Rechner haben. Die Dateistruktur könnte z.B. so aussehen:
NFSW_Server --- server10_47 (*)berkay Version für aktuelle NFSW.exe --- server10_77 berkay Version für aktuelle NFSW.exe --- server15 (*)berkay Version für aktuelle NFSW.exe --- server16 berkay Version für aktuelle NFSW.exe --- server17 berkay Version für aktuelle NFSW.exe
--- server10_77_2012 berkay Version für 2012er NFSW.exe (wegen Porsche 918) --- server16_2012 berkay Version für 2012er NFSW.exe (wegen Porsche 918)
--- server10_77_times modifizierte Version für aktuelle NFSW.exe mit Zeiten-Sicherung --- server16_times modifizierte Version für aktuelle NFSW.exe mit Zeiten-Sicherung --- server17_times modifizierte Version für aktuelle NFSW.exe mit Zeiten-Sicherung
(*) die Versionen sollte man eher nicht benutzen, weil die anderen 3 deutlich besser sind
ToDo: Nächste Version: - Das Mapping <PhysicsProfileHash> --> <CarName> komplett (zeitintensiv, aber keine Programmierherausforderung) - Neben dem ausführlichem Tracefile ein sehr kurzes - vielleicht eine setting-Datei, wo man reinschreiben kann 0 = kein Trace 1 = langer Trace (Normalfall) 2 = kurzer Trace 3 = beide Traces
Übernächste Version: Ob der Trace mal direkt MySQL oder sowas nutzt, muss ich mir mal überlegen. Aufwand !!! und jeder müsste noch mehr installieren. Macht die Sache auch nicht einfacher. Mal sehen.
Zitat von BieneMaja im Beitrag #8 ToDo: Nächste Version: - Das Mapping <PhysicsProfileHash> --> <CarName> komplett (zeitintensiv, aber keine Programmierherausforderung) - Neben dem ausführlichem Tracefile ein sehr kurzes - vielleicht eine setting-Datei, wo man reinschreiben kann 0 = kein Trace 1 = langer Trace (Normalfall) 2 = kurzer Trace 3 = beide Traces
Übernächste Version: Ob der Trace mal direkt MySQL oder sowas nutzt, muss ich mir mal überlegen. Aufwand !!! und jeder müsste noch mehr installieren. Macht die Sache auch nicht einfacher. Mal sehen.
Liest sich alles sehr aufwändig. Ich habe im Mom leider so gar keine Zeit, mir dein Werk mal anzusehen, wird aber ganz sicher nachgeholt. Vielleicht bringst du in einer der nächsten Versionen ja auch mit unter, dass man mit allen bzw. wenigstens mit der 1.7 Version, auch alle TE's fahren kann?! Ich würde zumindest vermuten, das diese Version, in welcher dies möglich ist, nämlich genau in den Files an denen du da gerade schraubst, entsprechende Anweiseungen stehen.
Allerdings gilt auch hier wieder, was machen die Jungs drüben im Eltie bezüglich einer Online Version, welche eigentlich auf MySql o.ä. setzen sollte, was die Sache vereinfacht, aber auch wieder einschränkt. Persönlich denke ich, das zum jetztigen Zeitpunkt alles vergeben Liebesmühe ist. Man darf ja auch nicht aus den Augen verlieren, dass in etwa 8 Wochen das neue NFS an den Start geht.
Zitat von NfSAres im Beitrag #9 Vielleicht bringst du in einer der nächsten Versionen ja auch mit unter, dass man mit allen bzw. wenigstens mit der 1.7 Version, auch alle TE's fahren kann?! Ich würde zumindest vermuten, das diese Version, in welcher dies möglich ist, nämlich genau in den Files an denen du da gerade schraubst, entsprechende Anweiseungen stehen.
wie Du ja weisst , war ich in den letzten Wochen an 4 Baustellen unterwegs - Autos (Carslots.xml / Carslots mergen,zerlegen / beliebige Autos / ..) - Events (availableatlevel.xml / inkl. Programm zur Streckenkollektion / ..) - beliebige Rundenanzahl in Circuits - Rennzeiten tracen (Servermodifikation)
TE war bisher keine Baustelle und wird es auch in naher Zukunft nicht.
Wo ich hier geschraubt habe, hat nix mit TE zu tun.
Das gehört eher in den Bereich mit Events (availableatlevel.xml). Wenn es TE gibt, die kein Icon zum Starten auf der Worldmap haben, muss man über ein anderes Event einsteigen (quasi wie bei dem Meetingpoint-Trick)
Die ersten 4 Events starten sich selbst Die nächsten beiden Events starten ein anderen Event, weil das Xml im launchevent Verzeichnis modifiziert wurde.
PS: Aus Probierlust habe ich mal MySQL installiert und es sieht schon gut aus. Die Rennzeiten werden in einer Datenbank gesichert. Mit Server 1.0 läuft das schon (will noch paar kleine Änderungen machen). Die beiden anderen Serversionen 1.6/1.7 sind dann auch nur noch Handarbeit, weil die eigentliche Arbeit schon in der ersten Version gemacht wurde. Der Vorteil mit der Datenbank dann: Egal welche Version ich benutze, die Zeiten landen in der gleichen Datenbank. Kommt demnächst ....