MegaMek / megamek

MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight using giant robots, tanks, and/or infantry on a hex-based map.
http://www.megamek.org
GNU General Public License v2.0
288 stars 277 forks source link

Various errors from Jan 6 Casual Joker Stream - See Comments for specifics #5022

Open HammerGS opened 6 months ago

HammerGS commented 6 months ago

Casual Joker had an oddity in the Stream last night with after using GM mode to damage a players ECM, the heat jumped by 32 and wouldn't sink. He also had a player with a skipped turn.

https://www.twitch.tv/videos/2025041038?t=1h1m42s you'll need to watch for at 15-20 min to see the issues.

Environment

What version of MegaMek does your issue apply to? 49.17 What operating system are you using? Windows

Some errors in the logs. FROM THE MEGAMEK.LOG


19:47:53,879 WARN  [megamek.client.ui.swing.CommonSettingsDialog] {AWT-EventQueue-0}
megamek.client.ui.swing.CommonSettingsDialog.filteredFilesWithSubDirs(CommonSettingsDialog.java:3102) - Error while reading .xml files from \data\universe\awards
java.nio.file.NoSuchFileException: \data\universe\awards
    at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
    at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:53)
    at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38)
    at java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:198)
    at java.base/java.nio.file.Files.readAttributes(Files.java:1764)
    at java.base/java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
    at java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
    at java.base/java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
    at java.base/java.nio.file.FileTreeIterator.<init>(FileTreeIterator.java:71)
    at java.base/java.nio.file.Files.walk(Files.java:3825)
    at java.base/java.nio.file.Files.walk(Files.java:3879)
    at megamek.client.ui.swing.CommonSettingsDialog.filteredFilesWithSubDirs(CommonSettingsDialog.java:3099)
    at mekhq.campaign.personnel.AwardsFactory.loadAwards(AwardsFactory.java:154)
    at mekhq.campaign.personnel.AwardsFactory.<init>(AwardsFactory.java:62)
    at mekhq.campaign.personnel.AwardsFactory.getInstance(AwardsFactory.java:67)
    at mekhq.gui.adapter.PersonnelTableMouseAdapter.createPopupMenu(PersonnelTableMouseAdapter.java:1291)
    at mekhq.gui.adapter.JPopupMenuAdapter.maybeShowPopup(JPopupMenuAdapter.java:74)
    at mekhq.gui.adapter.JPopupMenuAdapter.mouseReleased(JPopupMenuAdapter.java:69)

This is in twice back to back

20:51:49,758 ERROR [megamek.common.net.connections.AbstractConnection] {Connection 0}
megamek.common.net.connections.AbstractConnection.sendNow(AbstractConnection.java:214) - 
java.net.SocketException: Software caused connection abort: socket write error
    at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
    at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
    at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123)
    at java.base/java.io.DataOutputStream.write(DataOutputStream.java:107)
    at java.base/java.io.FilterOutputStream.write(FilterOutputStream.java:108)
    at megamek.common.net.connections.DataStreamConnection.sendNetworkPacket(DataStreamConnection.java:105)
    at megamek.common.net.connections.AbstractConnection.sendNow(AbstractConnection.java:212)
    at megamek.common.net.connections.AbstractConnection.processPacket(AbstractConnection.java:340)
    at megamek.common.net.connections.AbstractConnection.flush(AbstractConnection.java:310)
    at megamek.common.net.connections.DataStreamConnection.flush(DataStreamConnection.java:115)
    at megamek.common.net.connections.AbstractConnection.send(AbstractConnection.java:206)
    at megamek.server.Server.lambda$send$0(Server.java:1149)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    at megamek.server.Server.send(Server.java:1149)
    at megamek.server.GameManager.send(GameManager.java:608)
    at megamek.server.GameManager.transferAllEnititiesOwnedBy(GameManager.java:556)
    at megamek.server.GameManager.disconnect(GameManager.java:488)
    at megamek.server.Server.disconnected(Server.java:834)
    at megamek.server.Server$1.disconnected(Server.java:210)
    at megamek.common.net.connections.AbstractConnection.processConnectionEvent(AbstractConnection.java:372)
    at megamek.common.net.connections.AbstractConnection.close(AbstractConnection.java:158)
    at megamek.server.Server.handle(Server.java:1229)
    at megamek.server.Server$1.packetReceived(Server.java:227)
    at megamek.common.net.connections.AbstractConnection.processConnectionEvent(AbstractConnection.java:375)
    at megamek.common.net.connections.AbstractConnection.processPacket(AbstractConnection.java:334)
    at megamek.common.net.connections.AbstractConnection.update(AbstractConnection.java:285)
    at megamek.server.ConnectionHandler.run(ConnectionHandler.java:47)
    at java.base/java.lang.Thread.run(Thread.java:829)

A couple of these

00:08:05,635 ERROR [megamek.client.bot.princess.PathEnumerator] {Princess-precognition (Terracap Confederation Primary Opfor)}
megamek.client.bot.princess.PathEnumerator.recalculateMovesForWorker(PathEnumerator.java:302) - 
java.lang.IllegalArgumentException: Entity invalid. ID 77
    at megamek.common.Compute.isPilotingSkillNeeded(Compute.java:557)
    at megamek.common.MovePath.addStep(MovePath.java:371)
    at megamek.common.MovePath.addStep(MovePath.java:263)
    at megamek.common.MovePath.addStep(MovePath.java:175)
    at megamek.common.BulldozerMovePath.addStep(BulldozerMovePath.java:80)
    at megamek.common.pathfinder.DestructionAwareDestinationPathfinder.generateChildNodes(DestructionAwareDestinationPathfinder.java:163)
    at megamek.common.pathfinder.DestructionAwareDestinationPathfinder.findPathToCoords(DestructionAwareDestinationPathfinder.java:105)
    at megamek.common.pathfinder.DestructionAwareDestinationPathfinder.findPathToCoords(DestructionAwareDestinationPathfinder.java:46)
    at megamek.client.bot.princess.PathEnumerator.updateLongRangePaths(PathEnumerator.java:353)
    at megamek.client.bot.princess.PathEnumerator.recalculateMovesForWorker(PathEnumerator.java:287)
    at megamek.client.bot.princess.PathEnumerator.recalculateMovesFor(PathEnumerator.java:127)
    at megamek.client.bot.princess.Precognition.run(Precognition.java:364)
    at java.base/java.lang.Thread.run(Thread.java:829)
00:15:01,235 ERROR [megamek.client.Client] {AWT-EventQueue-0}
megamek.client.Client.handlePacket(Client.java:1709) - Failed to parse Packet command ENTITY_ATTACK
java.lang.NullPointerException
    at megamek.common.actions.WeaponAttackAction.toDisplayableString(WeaponAttackAction.java:5310)
    at megamek.client.ui.swing.AccessibilityWindow$1.gameNewAction(AccessibilityWindow.java:140)
    at megamek.common.event.GameNewActionEvent.fireEvent(GameNewActionEvent.java:52)
    at megamek.common.Game.processGameEvent(Game.java:3011)
    at megamek.common.Game.addAction(Game.java:2209)
    at megamek.client.Client.receiveAttack(Client.java:1186)
    at megamek.client.Client.handlePacket(Client.java:1579)
    at megamek.client.Client$1.lambda$packetReceived$0(Client.java:176)

FROM THE MEKHQ LOG

0:51:49,822 ERROR [mekhq.MekHQ] {Connection 2}
mekhq.MekHQ.lambda$main$0(MekHQ.java:240) - Uncaught Exception Detected
java.lang.NullPointerException
    at megamek.common.Entity.getStartingPos(Entity.java:12909)
    at megamek.common.Entity.getStartingPos(Entity.java:12902)
    at java.base/java.util.Comparator.lambda$comparingInt$7b0bb60$1(Comparator.java:490)
    at java.base/java.util.Comparator.lambda$thenComparing$36697e65$1(Comparator.java:217)
    at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:360)
    at java.base/java.util.TimSort.sort(TimSort.java:220)
    at java.base/java.util.Arrays.sort(Arrays.java:1515)
    at java.base/java.util.ArrayList.sort(ArrayList.java:1750)
    at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392)
    at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at megamek.server.GameManager.writeInitiativeReport(GameManager.java:3465)
    at megamek.server.GameManager.prepareForPhase(GameManager.java:1910)
    at megamek.server.GameManager.changePhase(GameManager.java:1609)
    at megamek.server.GameManager.endCurrentPhase(GameManager.java:2338)
    at megamek.server.GameManager.changeToNextTurn(GameManager.java:2744)
    at megamek.server.GameManager.executePhase(GameManager.java:2191)
    at megamek.server.GameManager.changePhase(GameManager.java:1616)
    at megamek.server.GameManager.endCurrentPhase(GameManager.java:2322)
    at megamek.server.GameManager.checkReady(GameManager.java:1399)
    at megamek.server.GameManager.disconnect(GameManager.java:522)
    at megamek.server.Server.disconnected(Server.java:834)
    at megamek.server.Server$1.disconnected(Server.java:210)
    at megamek.common.net.connections.AbstractConnection.processConnectionEvent(AbstractConnection.java:372)
    at megamek.common.net.connections.AbstractConnection.close(AbstractConnection.java:158)
    at megamek.common.net.connections.AbstractConnection.update(AbstractConnection.java:292)
    at megamek.server.ConnectionHandler.run(ConnectionHandler.java:47)
    at java.base/java.lang.Thread.run(Thread.java:829)

Logs.zip

Sleet01 commented 5 months ago

Two more issues seen during the 0.49.18 stream a couple days back:

  1. Editing unit damage (or now pilot hits) mid-game would very often not persist; they tried to edit the armor, internals, and pilot wounds of a Turkina they'd spawned as an enemy reinforcement multiple times but it kept refreshing back to full health.
  2. Having another window open when the Round Report popped up at the end of a Round caused an NPE.

Logs may be available from the source, but I believe they are stepping away for a couple weeks so maybe not immediately.

SJuliez commented 2 months ago

The first one (AwardsFactory IO Exception) is fixed (CommonSettingsDialog.filteredFilesWithSubDirs will no longer throw an exception, return an empty list instead)

SJuliez commented 2 months ago

The fourth one is also fixed. (WAA text)