Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden  
´
Sie können sich hier anmelden
Dieses Thema hat 9 Antworten
und wurde 657 mal aufgerufen
 Gameplay & Einsteigerforum
BieneMaja


Beiträge: 102

27.08.2015 19:03
Modifizierter Server: Gefahrene Zeit nach Rennen in Datei sichern Zitat · Antworten

EDIT [02.09.2015]:

1. Version der Servermodifikation (für die Berkay-Server 1.0/1.6/1.7)
zum automatischen Sichern der gefahrenen Zeiten.

Readme im Download-Paket enthalten.


http://www.file-upload.net/download-1088...150902.zip.html

EDIT [14.09.2015]

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.


Irgendwie müsste sowas übertragen werden
<worldLeaderboard
eventId="43"
eventType="1"
eventMode="1"
eventDurationMilliseconds="170927"
eventDuration="0:02:50.927"
createdDate="2014-06-23 12:22:09.0 GMT-00:00"
createdDateStr="2014/06/23"
personaName="PLAYERXYZ"
make="LEXUS"
carName="LFA"
rank="1">
<persona personaName="PLAYERXYZ" level="60" image="0" statusMessage="" defaultPersona="true"/>
</worldLeaderboard>


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.

BieneMaja


Beiträge: 102

27.08.2015 20:27
#2 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Ich gebe die Antwort selbst

das ist murphy's law.

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

das war eine 1:18:96 ==> (Auszug)

<RouteArbitrationPacket xmlns="http://schemas.datacontract.org/2004/07/Victory.Service.Objects"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><AlternateEventDurationInMilliseconds>78960</AlternateEventDurationInMilliseconds>
<CarId>45666569</CarId><EventDurationInMilliseconds>78959</EventDurationInMilliseconds><FinishReason>22</FinishReason>
<FraudDetectionInfo><Checksum>0</Checksum><IntValue1>69753</IntValue1><IntValue2>0</IntValue2>
<IntValue3>0</IntValue3><IntValue4>0</IntValue4><IsEncrypted>false</IsEncrypted>
</FraudDetectionInfo><HacksDetected>0</HacksDetected>
<PhysicsMetrics><AccelerationAverage>0.376688</AccelerationAverage><AccelerationMaximum>52.023193</AccelerationMaximum>
<AccelerationMedian>2.562386</AccelerationMedian><SpeedAverage>50.916794</SpeedAverage>
<SpeedMaximum>92.362091</SpeedMaximum><SpeedMedian>57.248413</SpeedMedian></PhysicsMetrics>

NfSAres



Beiträge: 288

27.08.2015 21:08
#3 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Selbst ist die Frau^^

NoSpaX



Beiträge: 223

28.08.2015 21:03
#4 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Bienchen, wieso machste nicht gleich eine Schnittstelle zu MySQL oder SQLlite?



http://www.anime-planet.com/users/Syphos/anime/watching
^ Anime watchlist T_T so viel zu glotzen und bin nich fertig.

Stylexpansion



Beiträge: 326

29.08.2015 16:56
#5 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Ihr macht mich fertig

Ich lese das und versteh rein gar nichts davon

NoSpaX



Beiträge: 223

29.08.2015 17:14
#6 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Armes Lisa *kopf streichel* :D

So gehts den meisten



http://www.anime-planet.com/users/Syphos/anime/watching
^ Anime watchlist T_T so viel zu glotzen und bin nich fertig.

Stylexpansion



Beiträge: 326

29.08.2015 18:17
#7 RE: Gefahrene Zeit nach Rennen in Datei sichern ??? Zitat · Antworten

Ach, dankeschön

Ich geb mir da wirklich aller größte Mühe, aber mein Kopf qualmt da tierisch...lach

BieneMaja


Beiträge: 102

02.09.2015 19:38
#8 Modifizierter Server: Gefahrene Zeit nach Rennen in Datei sichern Zitat · Antworten

1. Version der Servermodifikation (für die Berkay-Server 1.0/1.6/1.7)
zum automatischen Sichern der gefahrenen Zeiten.

Download-Link im editierten Initial-Posting

Hier mal die komplette readme-Datei, damit man ungefähr weiß, wass im
Download drin ist:

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

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:

<RouteArbitrationPacket xmlns="http://schemas.datacontract.org/2004/07/Victory.Service.Objects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AlternateEventDurationInMilliseconds>55504</AlternateEventDurationInMilliseconds>
<CarId>45006569</CarId>
<EventDurationInMilliseconds>55494</EventDurationInMilliseconds>
<FinishReason>22</FinishReason>
<FraudDetectionInfo>
<Checksum>0</Checksum>
<IntValue1>3428309</IntValue1>
<IntValue2>0</IntValue2>
<IntValue3>0</IntValue3>
<IntValue4>0</IntValue4>
<IsEncrypted>false</IsEncrypted>
<ModuleName>Z2FtZXBsYXkubmF0aXZlLmRsbA==</ModuleName>
<ModulePath>
QzpcUHJvZ3JhbURhdGFcRWxlY3Ryb25pYyBBcnRzXE5lZWQgRm9yIFNwZWVkIFdvcmxkXERhdGFc
</ModulePath>
<ModuleValue>0</ModuleValue>
<StringValue1/>
<StringValue2/>
</FraudDetectionInfo>
<HacksDetected>0</HacksDetected>
<PhysicsMetrics>
<AccelerationAverage>1.691480</AccelerationAverage>
<AccelerationMaximum>58.805267</AccelerationMaximum>
<AccelerationMedian>1.234760</AccelerationMedian>
<SpeedAverage>65.009941</SpeedAverage>
<SpeedMaximum>108.258240</SpeedMaximum>
<SpeedMedian>74.524361</SpeedMedian>
</PhysicsMetrics>
<Rank>1</Rank>
<Response>
<ChallengeId>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</ChallengeId>
<Result>0</Result>
</Response>
<BestLapDurationInMilliseconds>55494</BestLapDurationInMilliseconds>
<FractionCompleted>1.000000</FractionCompleted>
<LongestJumpDurationInMilliseconds>1266</LongestJumpDurationInMilliseconds>
<NumberOfCollisions>0</NumberOfCollisions>
<PerfectStart>1</PerfectStart>
<SumOfJumpsDurationInMilliseconds>3194</SumOfJumpsDurationInMilliseconds>
<TopSpeed>108.446426</TopSpeed>
</RouteArbitrationPacket>


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.:

<All_Races>
<Race> ... </Race>
<Race> ... </Race>
<Race> ... </Race>
<Race> ... </Race>
<Race> ... </Race>
:
:
</All_Races>


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.

NfSAres



Beiträge: 288

03.09.2015 21:07
#9 RE: Modifizierter Server: Gefahrene Zeit nach Rennen in Datei sichern Zitat · Antworten

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.

BieneMaja


Beiträge: 102

04.09.2015 14:29
#10 RE: Modifizierter Server: Gefahrene Zeit nach Rennen in Datei sichern Zitat · Antworten

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)


Start auf der World-Map --> lesen der Datei --> Start des Events
--------------------------------------------------------------------
Event 14 -----------------> /launchevent/14.xml ---> EventId 14
Event 27 -----------------> /launchevent/27.xml ---> EventId 27
Event 38 -----------------> /launchevent/38.xml ---> EventId 38
Event 56 -----------------> /launchevent/56.xml ---> EventId 56

Event 77 -----------------> /launchevent/77.xml ---> EventId 123
Event 88 -----------------> /launchevent/88.xml ---> EventId 156


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 ....

 Sprung  
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz