kuroppoi / entralinked

A standalone Game Sync emulator for Pokémon Black & White.
MIT License
105 stars 7 forks source link

Memory Link - Error 13209 #36

Closed cccccraneo closed 5 months ago

cccccraneo commented 5 months ago

Hey, first of all thanks for the enormous effort you're putting into bringing this feature back. I'm trying to Memory Link my Pokémon Black save with my White 2 one. I've game synced both and got the ID from both games, the black one being ZT996TSHVA and the white 2 one being PXHP8TWD4E. However, when trying to memory sync I get a 13209 error code, with this exception in the Entralinked log:

2024-01-14 19:57:39.182 ERROR : Caught exception
java.lang.NullPointerException: Cannot invoke "entralinked.GameVersion.isVersion2()" because the return value of "entralinked.model.player.Player.getGameVersion()" is null
    at entralinked.network.http.pgl.PglHandler.handleMemoryLink(PglHandler.java:359) ~[entralinked.jar:?]
    at entralinked.network.http.pgl.PglHandler.handlePglGetRequest(PglHandler.java:137) ~[entralinked.jar:?]
    at io.javalin.routing.HandlerEntry.handle(HandlerEntry.kt:19) ~[entralinked.jar:?]
    at io.javalin.http.servlet.DefaultTasks.HTTP$lambda$8$lambda$6$lambda$5(DefaultTasks.kt:38) ~[entralinked.jar:?]
    at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:88) ~[entralinked.jar:?]
    at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:53) ~[entralinked.jar:?]
    at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:41) ~[entralinked.jar:?]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587) ~[entralinked.jar:?]
    at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58) ~[entralinked.jar:?]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587) ~[entralinked.jar:?]
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764) ~[entralinked.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1570) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) ~[entralinked.jar:?]
    at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:57) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) ~[entralinked.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1543) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.Server.handle(Server.java:563) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497) ~[entralinked.jar:?]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:558) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:379) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:146) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) ~[entralinked.jar:?]
    at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:140) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194) ~[entralinked.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149) ~[entralinked.jar:?]
    at java.lang.Thread.run(Thread.java:1583) [?:?]

Things to mention:

Do you have any idea of what could be wrong? Thanks! I'll try to tuck in a pokémon tomorrow from my black copy to see if that's what's wrong.

kuroppoi commented 5 months ago

The server currently does not store the game version (nor the save data for that matter) of the user when creating Game Sync data from the main menu, which seems to be an oversight on my part. You'll have to tuck in a Pokémon on your Black Version so that it correctly tracks the data, and then you should be able to use Memory Link with it.

Edit: The error would also occur when a Game Sync ID is issued but the player didn't tuck in a Pokémon, which I think is what happened here instead. Either way, it's supposed to show an error in-game saying something along the lines of "Saved data belonging to this ID does not exist, please tuck in a Pokémon" rather than spewing errors in the server console.

kuroppoi commented 5 months ago

Should be fixed by commit abe1b80c2d5ab4db1175b225e952a155dacd6e30, thanks for reporting!