Mario Kart Wii Ghost System, and it's faults.

      Mario Kart Wii Ghost System, and it's faults.

      Introduction

      Mario Kart Wii's ghost system has been broken for some time; you can download ghosts via "Ghost Race" randomly, but you can't download the "best player", or any rival ghosts.
      This is quite some issue as it basically renders the entire section irrelevant. It seems communication with @Wiimm and @Leseratte has been contacted, but no response.
      I don't want to cause a riot or start any issues. I just want the leaderboards to be fixed if Wiimmfi is trying to go for "full support".


      Explanation of the Ghost System

      The ghost system on Mario Kart Wii uses SAKE/RACE; SAKE (pronounced like the Japanese alcohol, sa-keh) is a server designed by GameSpy for UGC (User-Generated Content) to be stored on.
      Its purpose is to hold files, such as ghosts, or user-submitted tracks (in other games). It works by using custom SOAP - SOAP is an extension to XML with custom fields.


      The game uses RACE, which is Nintendo's own server, for leaderboards (specifically, the Top 10). This goes against GAMESPY design, but it's Nintendo so they got away with it ;)
      The game uses SAKE, to upload the ghost to, as well as to download ghosts from.


      Top 10

      The game sends to RACE the following data:

      Quellcode

      1. POST /RaceService/NintendoRacingService.asmx HTTP/1.1
      2. Host: mariokartwii.race.gs.wiimmfi.de
      3. User-Agent: GameSpyHTTP/1.0
      4. Connection: close
      5. Content-Length: 505
      6. Content-Type: text/xml
      7. SOAPAction: "http://gamespy.net/RaceService/GetTopTenRankings"
      8. <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://gamespy.net/RaceService/"><SOAP-ENV:Body><ns1:GetTopTenRankings><ns1:gameid>1687</ns1:gameid><ns1:regionid>REGION</ns1:regionid><ns1:courseid>COURSE</ns1:courseid></ns1:GetTopTenRankings></SOAP-ENV:Body></SOAP-ENV:Envelope>


      The course ID is sent, along with region (which is set to 0 for worldwide), and the action to "Get Top 10 Rankings". The server complies, and sends back 10 rankings - each one has their rank, the "userdata" (their mii and country code), and their time.


      Ghost Races

      For Ghost Races, the game uses SakeFileServer, which is a simple way to upload and download files with simple filters. An example HTTP request for MKW:

      Quellcode

      1. GET /SakeFileServer/ghostdownload.aspx?gameid=1687&region=0&p0=PID&c0=20&t0=TIME HTTP/1.1


      This asks the server for ghosts for MKW (1687), without caring about region (0), with the user's PID so the server doesn't send the user's own ghosts back (p0), what i'm assuming is the course (c0), and the time that the ghost should be better than (t0)
      The server responds with a header that seems to just be for server interaction, and then an RKG appended to this header. Then, the game just checks if the header is correct and then reads the RKG.
      This currently works fine on Wiimmfi!



      Rival Ghosts and World Champion Ghosts

      The World Champion and Rival Ghosts work differently. The game first asks the server for the best time via SAKE storage server (which is communicated with via XML) for the game - I have an example communication from a beta server here:
      Spoiler anzeigen

      Quellcode

      1. POST /SakeStorageServer/StorageServer.asmx HTTP/1.1
      2. Host: mariokartwii.sake.gs.wiimmfi.de
      3. User-Agent: GameSpyHTTP/1.0
      4. Connection: close
      5. Content-Length: 912
      6. Content-Type: text/xml
      7. SOAPAction: "http://gamespy.net/sake/SearchForRecords"
      8. <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://gamespy.net/sake"><SOAP-ENV:Body><ns1:SearchForRecords><ns1:gameid>1687</ns1:gameid><ns1:secretKey>9r3Rmy</ns1:secretKey><ns1:loginTicket>23c35e51_JKLMNOPQRSTUV__</ns1:loginTicket><ns1:tableid>StoredGhostData</ns1:tableid><ns1:filter>course&#x20;=&#x20;5&#x20;and&#x20;gameid&#x20;=&#x20;1687</ns1:filter><ns1:sort>time</ns1:sort><ns1:offset>0</ns1:offset><ns1:max>1</ns1:max><ns1:surrounding>0</ns1:surrounding><ns1:ownerids></ns1:ownerids><ns1:cacheFlag>0</ns1:cacheFlag><ns1:fields><ns1:string>profile</ns1:string><ns1:string>fileid</ns1:string></ns1:fields></ns1:SearchForRecords></SOAP-ENV:Body></SOAP-ENV:Envelope>

      The server then sends back a response:
      Spoiler anzeigen

      Quellcode

      1. HTTP/1.0 200 OK
      2. Server: BaseHTTP/0.3 Python/2.7.3
      3. Date: Mon, 13 Jul 2015 04:34:23 GMT
      4. Content-Type: text/xml; charset=utf-8
      5. <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SearchForRecordsResponse xmlns="http://gamespy.net/sake"><SearchForRecordsResult>Success</SearchForRecordsResult><values><ArrayOfRecordValue><RecordValue><intValue><value>600006225</value></intValue></RecordValue><RecordValue><intValue><value>1</value></intValue></RecordValue></ArrayOfRecordValue></values></SearchForRecordsResponse></soap:Body></soap:Envelope>



      Then, the game downloads the file from SAKE File Server -

      Quellcode

      1. GET /SakeFileServer/download.aspx?fileid=1&gameid=1687&pid=600006225 HTTP/1.1
      2. Host: mariokartwii.sake.gs.wiimmfi.de
      3. User-Agent: GameSpyHTTP/1.0
      4. Connection: close


      And the server sends the RKG file with a header that the game requires.


      The Current Problem

      The current problem is that Wiimmfi does not send any data on the search for rival or world champion via SAKE; my game asks:
      Spoiler anzeigen

      Quellcode

      1. POST /SakeStorageServer/StorageServer.asmx HTTP/1.1
      2. Host: mariokartwii.sake.gs.wiimmfi.de
      3. User-Agent: GameSpyHTTP/1.0
      4. Connection: close
      5. Content-Length: 924
      6. Content-Type: text/xml
      7. SOAPAction: "http://gamespy.net/sake/SearchForRecords"
      8. <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://gamespy.net/sake"><SOAP-ENV:Body><ns1:SearchForRecords><ns1:gameid>1687</ns1:gameid><ns1:secretKey>9r3Rmy</ns1:secretKey><ns1:loginTicket>23c35e512ed91d82GQbDRaYQ</ns1:loginTicket><ns1:tableid>GhostData</ns1:tableid><ns1:filter>course&#x20;=&#x20;8&#x20;and&#x20;gameid&#x20;=&#x20;1687&#x20;and&#x20;time&#x20;<&#x20;81502</ns1:filter><ns1:sort>time&#x20;desc</ns1:sort><ns1:offset>0</ns1:offset><ns1:max>1</ns1:max><ns1:surrounding>0</ns1:surrounding><ns1:ownerids></ns1:ownerids><ns1:cacheFlag>0</ns1:cacheFlag><ns1:fields><ns1:string>fileid</ns1:string></ns1:fields></ns1:SearchForRecords></SOAP-ENV:Body></SOAP-ENV:Envelope>



      And the server replies with:
      Spoiler anzeigen

      Quellcode

      1. Date: Sun, 19 Aug 2018 19:29:32 GMT
      2. Server: Apache/2.4.6 (Linux/SUSE)
      3. X-Powered-By: PHP/5.4.20
      4. Content-Length: 396
      5. Connection: close
      6. Content-Type: text/xml; charset=utf-8
      7. <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><SearchForRecordsResponse xmlns="http://gamespy.net/sake"><SearchForRecordsResult>Success</SearchForRecordsResult><values/></SearchForRecordsResponse></soap:Body></soap:Envelope>



      There is no MKW ghost there. It doesn't tell the game a file ID, so the game errors because it doesn't know what to do!
      This is fundamentally a problem that is server-side, and thus the error falls on the head of the server maintainers.



      Oh, and Another Thing...

      Someone was banned for apparently uploading hacked times a long time ago (like a year or so), and nothing has happened about it.
      Multiple times they have stated they haven't uploaded a hacked time, and yet the server administrators haven't done anything.
      While the argument of "we dont have the ghost" can be valid IF the game didnt send the ghost (for competitions it'll either send the ghost file, OR just upload the ranking to RACE and nothing else), but even still, that proves the idiocy.
      If someone sent a hacked time once, why are they being permanently banned when people have been just leaderboard-banned for doing it once? It seems unjust and unfair from any angle, and it's upsetting to see someone be banned over a time to a leaderboard server that's unmoderated, and doesn't even work.
      The person should be unbanned, and while this may mean my entire thread will be ignored by @Wiimm, I felt it was important to reference.

      I currently host the DLS1, GAMESTATS, and Peerchat server for Wiimmfi. if you have any issues with leaderboards (excluding MKW!), Mystery Gifts or other in-game downloadables, or Pokémon Wi-Fi Plaza, I can try to help!
      I think a way to publicly view, download, and maybe even report the times for logged in WHB users would be the best.
      It's just a case of if the moderators would be ok with viewing and acting on reports. I know Wiimm could make it so the game is sent a reported ghost (ie you press "Send to Wii" on the server and SAKE sends that ghost, but i dont know if it'd be easy).

      However, having a server that works is the big issue

      I currently host the DLS1, GAMESTATS, and Peerchat server for Wiimmfi. if you have any issues with leaderboards (excluding MKW!), Mystery Gifts or other in-game downloadables, or Pokémon Wi-Fi Plaza, I can try to help!
      I know it, and I had planned some work for the previous weeks. But then I did this:
      * wiki.tockdom.com/wiki/Enemy_routes_in_battle_arenas
      * wiki.tockdom.com/wiki/Creating…enas_with_Wiimm%27s_tools
      * wiki.tockdom.com/wiki/Object/coin
      * and some more subpages
      I needed much more than 100 hours, but it was fun to analyze new things.

      WIT: Wiimms ISO Tools
      Verwaltet Plain ISO, WDF, WIA, CISO, WBFS, FST: kann Extrahieren, Erstellen, Patchen, Mischen und Überprüfen

      SZS: Wiimms SZS Tools
      Verwaltet SZS-, BRRES-, U8-, BMG-, BREFT-Dateien uvm.



      PN ohne persönlichen Charakter werden ignoriert. Support-Anfragen gehören ins Forum.
      I see. Would it be the next thing to do on the priority list? Because it'd really be a great help if the server worked again (as would it be if the certain individual was unbanned as this was their first offence and we've never as a team banned someone permanently on their first offence)

      I currently host the DLS1, GAMESTATS, and Peerchat server for Wiimmfi. if you have any issues with leaderboards (excluding MKW!), Mystery Gifts or other in-game downloadables, or Pokémon Wi-Fi Plaza, I can try to help!

      Zachruff schrieb:

      @Wiimm Would you be able to unban him now if youre not too busy? Thx
      ???

      WIT: Wiimms ISO Tools
      Verwaltet Plain ISO, WDF, WIA, CISO, WBFS, FST: kann Extrahieren, Erstellen, Patchen, Mischen und Überprüfen

      SZS: Wiimms SZS Tools
      Verwaltet SZS-, BRRES-, U8-, BMG-, BREFT-Dateien uvm.



      PN ohne persönlichen Charakter werden ignoriert. Support-Anfragen gehören ins Forum.

      Someone was banned for apparently uploading hacked times a long time ago (like a year or so), and nothing has happened about it.
      Multiple times they have stated they haven't uploaded a hacked time, and yet the server administrators haven't done anything.
      While the argument of "we dont have the ghost" can be valid IF the game
      didnt send the ghost (for competitions it'll either send the ghost file,
      OR just upload the ranking to RACE and nothing else), but even still,
      that proves the idiocy.
      If someone sent a hacked time once, why are they being permanently
      banned when people have been just leaderboard-banned for doing it once?
      It seems unjust and unfair from any angle, and it's upsetting to see
      someone be banned over a time to a leaderboard server that's
      unmoderated, and doesn't even work.

      I currently host the DLS1, GAMESTATS, and Peerchat server for Wiimmfi. if you have any issues with leaderboards (excluding MKW!), Mystery Gifts or other in-game downloadables, or Pokémon Wi-Fi Plaza, I can try to help!

      Tock schrieb:

      "I want somebody to be unbanned!"

      How should Wiimm know who of the thousands of banned profiles if you guys don't post the most important information.
      Apologies, I assumed it was pretty obvious who it was based on the nature of this post

      Console FC: 2352-8868-4813-8847

      MKW FC: 0177 7993 9274

      (It is not a normal system ban, as me/bean cant actually view it in any ban history)

      Thanks once again @Wiimm