fix few nulls

This commit is contained in:
RandomityGuy 2024-05-05 12:59:10 +05:30
parent ca6991e495
commit eaea583c2c
3 changed files with 65 additions and 24 deletions

View file

@ -1142,15 +1142,17 @@ class MarbleWorld extends Scheduler {
var packet = new GemSpawnPacket();
var hunt = cast(this.gameMode, HuntMode);
var activeGemIds = [];
for (gemId in @:privateAccess hunt.activeGemSpawnGroup) {
if (@:privateAccess hunt.gemSpawnPoints[gemId].gem != null && @:privateAccess !hunt.gemSpawnPoints[gemId].gem.pickedUp) {
activeGemIds.push(gemId);
if (@:privateAccess hunt.activeGemSpawnGroup != null) {
var activeGemIds = [];
for (gemId in @:privateAccess hunt.activeGemSpawnGroup) {
if (@:privateAccess hunt.gemSpawnPoints[gemId].gem != null && @:privateAccess !hunt.gemSpawnPoints[gemId].gem.pickedUp) {
activeGemIds.push(gemId);
}
}
packet.gemIds = activeGemIds;
packet.serialize(bs);
packets.push(bs.getBytes());
}
packet.gemIds = activeGemIds;
packet.serialize(bs);
packets.push(bs.getBytes());
// Marble states
for (marb in this.marbles) {

View file

@ -290,7 +290,9 @@ class Net {
if (!Net.isMP)
return;
static var accum = 0.0;
static var wsAccum = 0.0;
accum += dt;
wsAccum += dt;
if (accum > 1.0) {
accum = 0;
var t = Console.time();
@ -312,11 +314,25 @@ class Net {
}
if (Net.isClient) {
disconnect();
if (MarbleGame.instance.world != null) {
MarbleGame.instance.quitMission();
}
if (!(MarbleGame.canvas.content is MultiplayerLoadingGui)) {
var loadGui = new MultiplayerLoadingGui("Timed out");
MarbleGame.canvas.setContent(loadGui);
loadGui.setErrorStatus("Timed out");
}
}
}
}
}
}
if (wsAccum >= 20.0) {
wsAccum = 0;
if (Net.isHost) {
MasterServerClient.instance.sendServerInfo(serverInfo); // Heartbeat
}
}
}
static function onClientConnect(c:RTCPeerConnection, dc:RTCDataChannel, dcu:RTCDataChannel) {
@ -521,23 +537,25 @@ class Net {
var marbleUpdatePacket = new MarbleUpdatePacket();
marbleUpdatePacket.deserialize(input);
var cc = marbleUpdatePacket.clientId;
if (MarbleGame.instance.world != null) {
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
var m = MarbleGame.instance.world.lastMoves;
m.enqueue(marbleUpdatePacket);
}
case MarbleMove:
var movePacket = new MarbleMovePacket();
movePacket.deserialize(input);
var cc = clientIdMap[movePacket.clientId];
if (cc.state == GAME)
for (move in movePacket.moves)
cc.queueMove(move);
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
var movePacket = new MarbleMovePacket();
movePacket.deserialize(input);
var cc = clientIdMap[movePacket.clientId];
if (cc.state == GAME)
for (move in movePacket.moves)
cc.queueMove(move);
}
case PowerupPickup:
var powerupPickupPacket = new PowerupPickupPacket();
powerupPickupPacket.deserialize(input);
if (MarbleGame.instance.world != null) {
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
var m = @:privateAccess MarbleGame.instance.world.powerupPredictions;
m.acknowledgePowerupPickup(powerupPickupPacket, MarbleGame.instance.world.timeState, clientConnection.moveManager.getQueueSize());
}
@ -545,7 +563,7 @@ class Net {
case GemSpawn:
var gemSpawnPacket = new GemSpawnPacket();
gemSpawnPacket.deserialize(input);
if (MarbleGame.instance.world != null) {
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
MarbleGame.instance.world.spawnHuntGemsClientSide(gemSpawnPacket.gemIds);
@:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemSpawn(gemSpawnPacket);
}
@ -553,7 +571,7 @@ class Net {
case GemPickup:
var gemPickupPacket = new GemPickupPacket();
gemPickupPacket.deserialize(input);
if (MarbleGame.instance.world != null) {
if (MarbleGame.instance.world != null && !MarbleGame.instance.world._disposed) {
@:privateAccess MarbleGame.instance.world.playGui.incrementPlayerScore(gemPickupPacket.clientId, gemPickupPacket.scoreIncr);
@:privateAccess MarbleGame.instance.world.gemPredictions.acknowledgeGemPickup(gemPickupPacket);
}

View file

@ -106,14 +106,32 @@ class NetCommands {
// Mid game join
Console.log("Mid game join for client " + clientId);
// Send em our present world state
var packets = MarbleGame.instance.world.getWorldStateForClientJoin();
var c = Net.clientIdMap[clientId];
for (packet in packets) {
c.sendBytes(packet);
if (MarbleGame.instance.world != null) {
var packets = MarbleGame.instance.world.getWorldStateForClientJoin();
var c = Net.clientIdMap[clientId];
for (packet in packets) {
c.sendBytes(packet);
}
Net.clientIdMap[clientId].ready();
if (MarbleGame.instance.world.serverStartTicks == 0) {
var allReady = true;
for (id => client in Net.clientIdMap) {
if (client.state != GameplayState.GAME) {
allReady = false;
break;
}
}
if (allReady) {
if (MarbleGame.instance.world != null) {
MarbleGame.instance.world.allClientsReady();
}
}
} else {
// Send the start ticks
NetCommands.setStartTicksMidJoinClient(c, MarbleGame.instance.world.serverStartTicks, MarbleGame.instance.world.timeState.ticks);
}
}
Net.clientIdMap[clientId].ready();
// Send the start ticks
NetCommands.setStartTicksMidJoinClient(c, MarbleGame.instance.world.serverStartTicks, MarbleGame.instance.world.timeState.ticks);
}
}
}
@ -143,6 +161,9 @@ class NetCommands {
@:rpc(server) public static function timerRanOut() {
if (Net.isClient && MarbleGame.instance.world != null) {
if (MarbleGame.instance.paused) {
MarbleGame.instance.handlePauseGame(); // Unpause
}
var huntMode:HuntMode = cast MarbleGame.instance.world.gameMode;
huntMode.onTimeExpire();
}