Skip to content

Commit 3d065c1

Browse files
committed
bugfixes for the reported issues
1 parent 5a6c8ae commit 3d065c1

File tree

11 files changed

+70
-32
lines changed

11 files changed

+70
-32
lines changed

data/multiplayer/hunt/intermediate/GemsInTheRoad.mis

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ new SimGroup(MissionGroup) {
77
desc = "Find the gems in the maze of roads!";
88
radiusFromGem = "20";
99
gameMode = "Hunt";
10-
level = "5";
10+
level = "4";
1111
type = "Intermediate";
1212
time = "300000";
1313
maxGemsPerSpawn = "6";

src/MarbleGame.hx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ class MarbleGame {
262262
if (paused && world._ready) {
263263
Console.log("Game paused");
264264
world.setCursorLock(false);
265+
if (Util.isTouchDevice()) {
266+
this.touchInput.movementInput.forceRelease();
267+
}
265268
if (world.isMultiplayer) {
266269
exitGameDlg = new MPExitGameDlg(() -> {
267270
canvas.popDialog(exitGameDlg);

src/MarbleWorld.hx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package src;
22

3+
import net.NetPacket.ExplodableUpdatePacket;
34
import net.TrapdoorPredictionStore;
45
import shapes.Explodable;
56
import net.ExplodablePredictionStore;
@@ -563,10 +564,10 @@ class MarbleWorld extends Scheduler {
563564
interior.onLevelStart();
564565
for (shape in this.dtsObjects)
565566
shape.onLevelStart();
566-
// if (this.isMultiplayer && Net.isClient)
567-
// NetCommands.clientIsReady(Net.clientId);
567+
if (this.isMultiplayer && Net.isClient && !_skipPreGame)
568+
NetCommands.clientIsReady(Net.clientId);
568569
if (this.isMultiplayer && Net.isHost) {
569-
// NetCommands.clientIsReady(-1);
570+
// NetCommands.clientIsReady(-1);
570571

571572
// Sort all the marbles so that they are updated in a deterministic order
572573
this.marbles.sort((a, b) -> @:privateAccess {
@@ -591,6 +592,7 @@ class MarbleWorld extends Scheduler {
591592
_skipPreGame = false;
592593
this.setCursorLock(true);
593594
NetCommands.requestMidGameJoinState(Net.clientId);
595+
NetCommands.clientIsReady(Net.clientId);
594596
}
595597
}
596598
this.gameMode.onMissionLoad();
@@ -1417,7 +1419,11 @@ class MarbleWorld extends Scheduler {
14171419
// Marble states
14181420
for (marb in this.marbles) {
14191421
var oldFlags = @:privateAccess marb.netFlags;
1420-
@:privateAccess marb.netFlags = MarbleNetFlags.DoBlast | MarbleNetFlags.DoMega | MarbleNetFlags.DoHelicopter | MarbleNetFlags.PickupPowerup | MarbleNetFlags.GravityChange | MarbleNetFlags.UsePowerup;
1422+
@:privateAccess marb.netFlags = MarbleNetFlags.DoBlast | MarbleNetFlags.DoMega | MarbleNetFlags.DoHelicopter | MarbleNetFlags.DoShockAbsorber | MarbleNetFlags.DoSuperBounce | MarbleNetFlags.PickupPowerup | MarbleNetFlags.GravityChange | MarbleNetFlags.UsePowerup;
1423+
1424+
if (oldFlags & MarbleNetFlags.UpdateTrapdoor > 0) {
1425+
@:privateAccess marb.netFlags |= MarbleNetFlags.UpdateTrapdoor;
1426+
}
14211427

14221428
var innerMove = @:privateAccess marb.lastMove;
14231429
if (innerMove == null) {
@@ -1452,6 +1458,19 @@ class MarbleWorld extends Scheduler {
14521458
}
14531459
}
14541460

1461+
// Explosion states
1462+
for (exp in this.explodables) {
1463+
if (this.timeState.ticks < (exp.lastContactTick + exp.renewTime >> 5)) {
1464+
var b = new OutputBitStream();
1465+
b.writeByte(NetPacketType.ExplodableUpdate);
1466+
var explPacket = new ExplodableUpdatePacket();
1467+
explPacket.explodableId = exp.netId;
1468+
explPacket.serverTicks = timeState.ticks;
1469+
explPacket.serialize(b);
1470+
packets.push(b.getBytes());
1471+
}
1472+
}
1473+
14551474
// Scoreboard!
14561475
var b = new OutputBitStream();
14571476
b.writeByte(NetPacketType.ScoreBoardInfo);

src/Settings.hx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,8 @@ class Settings {
422422
levelStatistics.set(key, value);
423423
}
424424
}
425-
if (json.serverSettings != null) {
426-
serverSettings = json.serverSettings;
425+
if (json.server != null) {
426+
serverSettings = json.server;
427427
}
428428
#if js
429429
if (serverSettings.oldSpawns == null) {

src/gui/MPKickBanDlg.hx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gui;
22

3+
import net.ClientConnection;
34
import net.NetCommands;
45
import net.Net;
56
import h2d.filter.DropShadow;
@@ -91,6 +92,7 @@ class MPKickBanDlg extends GuiImage {
9192
var playerList = new GuiTextListCtrl(markerFelt18, playerNames, 0);
9293
playerList.position = new Vector(120, 60);
9394
playerList.extent = new Vector(188, 180);
95+
playerList.scrollable = true;
9496
playerList.textYOffset = -6;
9597
playerList.onSelectedFunc = (sel) -> {
9698
kickBtn.disabled = false;
@@ -106,6 +108,8 @@ class MPKickBanDlg extends GuiImage {
106108
playerList.setTexts(playerNames);
107109
kickBtn.disabled = true;
108110
NetCommands.getKickedClient(Net.clientIdMap.get(playerToKick));
111+
var cc = cast(Net.clientIdMap.get(playerToKick), ClientConnection);
112+
cc.socket.close();
109113
}
110114
}
111115
}

src/gui/MPPreGameDlg.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ class MPPreGameDlg extends GuiControl {
289289
playerListLeft.setTexts(playerListCompiled);
290290
playerListRight.setTexts(playerListStateCompiled);
291291

292+
playerListContainer.setScrollMax(playerListLeft.calculateFullHeight());
293+
292294
if (playerListArr.length == 1) {
293295
// Disable spectating
294296
Net.hostSpectate = false;

src/modes/HuntMode.hx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,19 @@ class HuntMode extends NullMode {
120120
override function getSpawnTransform() {
121121
var idx = Net.connectedServerInfo.competitiveMode ? idealSpawnIndex : Math.floor(rng2.randRange(0, playerSpawnPoints.length - 1));
122122
if (!Net.connectedServerInfo.competitiveMode) {
123-
while (spawnPointTaken[idx]) {
124-
idx = Math.floor(rng2.randRange(0, playerSpawnPoints.length - 1));
123+
var allTaken = true;
124+
for (spw in spawnPointTaken) {
125+
if (!spw) {
126+
allTaken = false;
127+
break;
128+
}
129+
}
130+
if (!allTaken) {
131+
while (spawnPointTaken[idx]) {
132+
idx = Math.floor(rng2.randRange(0, playerSpawnPoints.length - 1));
133+
}
134+
spawnPointTaken[idx] = true;
125135
}
126-
spawnPointTaken[idx] = true;
127136
}
128137

129138
var randomSpawn = playerSpawnPoints[idx];

src/net/ClientConnection.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import src.TimeState;
99
enum abstract GameplayState(Int) from Int to Int {
1010
var UNKNOWN;
1111
var LOBBY;
12+
var LOADING;
1213
var GAME;
1314
}
1415

src/net/Net.hx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,10 @@ class Net {
433433
for (dc => cc in clients) {
434434
if (cc is ClientConnection) {
435435
var conn = cast(cc, ClientConnection);
436+
if (Net.isHost && conn.state == LOADING)
437+
continue;
438+
if (Net.isClient && MarbleGame.instance.world != null && !MarbleGame.instance.world._ready)
439+
continue; // We still loading, don't disconnect
436440
if (conn.needsTimeoutWarn(t)) {
437441
conn.didWarnTimeout = true;
438442
if (Net.isClient) {

src/net/NetCommands.hx

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -160,28 +160,7 @@ class NetCommands {
160160

161161
@:rpc(client) public static function clientIsReady(clientId:Int) {
162162
if (Net.isHost) {
163-
if (Net.serverInfo.state == "WAITING") {
164-
Console.log('Client ${clientId} is ready!');
165-
if (clientId != -1)
166-
Net.clientIdMap[clientId].ready();
167-
else
168-
Net.hostReady = true;
169-
var allReady = true;
170-
for (id => client in Net.clientIdMap) {
171-
if (client.state != GameplayState.GAME) {
172-
allReady = false;
173-
break;
174-
}
175-
}
176-
if (allReady && Net.hostReady) {
177-
if (MarbleGame.instance.world != null) {
178-
Console.log('All are ready, starting');
179-
MarbleGame.instance.world.allClientsReady();
180-
}
181-
Net.serverInfo.state = "PLAYING";
182-
MasterServerClient.instance.sendServerInfo(Net.serverInfo); // notify the server of the playing state
183-
}
184-
} else {}
163+
Net.clientIdMap[clientId].state = GAME;
185164
}
186165
}
187166

0 commit comments

Comments
 (0)