修改非空断言可能会导致的崩溃错误

This commit is contained in:
2025-10-11 16:55:43 +08:00
parent 75c483103e
commit 32b17ddfcc
4 changed files with 63 additions and 27 deletions

View File

@@ -36,6 +36,7 @@ class GameManager {
} }
} }
claculateRanking(aPlayers) { claculateRanking(aPlayers) {
var _a, _b;
let sortPlayers = []; let sortPlayers = [];
for (const player of aPlayers.values()) { for (const player of aPlayers.values()) {
if (player.mHp <= 0) { if (player.mHp <= 0) {
@@ -51,21 +52,23 @@ class GameManager {
if (sortPlayers[i].mCharacterName != "") { if (sortPlayers[i].mCharacterName != "") {
continue; continue;
} }
let characterName = this.mCharacterNames.pop(); let characterName = (_a = this.mCharacterNames.pop()) !== null && _a !== void 0 ? _a : "";
sortPlayers[i].mCharacterName = characterName; sortPlayers[i].mCharacterName = characterName;
if (characterName == "飞鸟千寻") { if (characterName == "飞鸟千寻") {
let player = aPlayers.get(sortPlayers[i].mCurrentEnemy); let player = aPlayers.get(sortPlayers[i].mCurrentEnemy);
if (player) {
player.mCharacterName = "高桥林佑"; player.mCharacterName = "高桥林佑";
} }
} }
} }
}
//计算最后一个存活玩家的排名 //计算最后一个存活玩家的排名
if (this.mAlivePlayerCount == 1) { if (this.mAlivePlayerCount == 1) {
for (const player of aPlayers.values()) { for (const player of aPlayers.values()) {
if (player.mHp > 0) { if (player.mHp > 0) {
player.mRank = 1; player.mRank = 1;
if (this.mCharacterNames.length > 0) { if (this.mCharacterNames.length > 0) {
player.mCharacterName = this.mCharacterNames.pop(); player.mCharacterName = (_b = this.mCharacterNames.pop()) !== null && _b !== void 0 ? _b : "";
} }
return; return;
} }
@@ -73,22 +76,30 @@ class GameManager {
} }
} }
calcuteGameFightResult() { calcuteGameFightResult() {
var _a;
let temp = new Map(this.mGameFightPlayer); let temp = new Map(this.mGameFightPlayer);
let restRound = null; let restRound = null;
while (temp.size > 0) { while (temp.size > 0) {
const iterator = temp.keys(); const iterator = temp.keys();
const playerID = iterator.next().value; const playerID = (_a = iterator.next().value) !== null && _a !== void 0 ? _a : "";
let player = temp.get(playerID); let player = temp.get(playerID);
if (!player) { if (!player) {
return; return;
} }
if (player.mIsResting) { if (player.mIsResting) {
restRound = [player, this.mGameFightPlayer.get(player.mCurrentEnemy)], let enemy = this.mGameFightPlayer.get(player.mCurrentEnemy);
if (!enemy) {
return;
}
restRound = [player, enemy],
temp.delete(playerID); temp.delete(playerID);
continue; continue;
} }
else { else {
let enemy = temp.get(player.mCurrentEnemy); let enemy = temp.get(player.mCurrentEnemy);
if (!enemy) {
return;
}
if (player.mAgile >= enemy.mAgile) //palyer 敏捷高 if (player.mAgile >= enemy.mAgile) //palyer 敏捷高
{ {
this.claculatePlayerHp(player, enemy); this.claculatePlayerHp(player, enemy);

View File

@@ -68,15 +68,18 @@ export class GameManager
{ {
continue; continue;
} }
let characterName = this.mCharacterNames.pop()!; let characterName = this.mCharacterNames.pop() ?? "";
sortPlayers[i].mCharacterName = characterName; sortPlayers[i].mCharacterName = characterName;
if(characterName == "飞鸟千寻") if(characterName == "飞鸟千寻")
{ {
let player = aPlayers.get(sortPlayers[i].mCurrentEnemy)!; let player = aPlayers.get(sortPlayers[i].mCurrentEnemy);
if(player)
{
player.mCharacterName = "高桥林佑"; player.mCharacterName = "高桥林佑";
} }
} }
} }
}
//计算最后一个存活玩家的排名 //计算最后一个存活玩家的排名
if(this.mAlivePlayerCount == 1) if(this.mAlivePlayerCount == 1)
{ {
@@ -87,7 +90,7 @@ export class GameManager
player.mRank = 1; player.mRank = 1;
if(this.mCharacterNames.length > 0) if(this.mCharacterNames.length > 0)
{ {
player.mCharacterName = this.mCharacterNames.pop()!; player.mCharacterName = this.mCharacterNames.pop() ?? "";
} }
return; return;
} }
@@ -102,7 +105,7 @@ export class GameManager
while (temp.size > 0) while (temp.size > 0)
{ {
const iterator = temp.keys(); const iterator = temp.keys();
const playerID = iterator.next().value!; const playerID = iterator.next().value ?? "";
let player = temp.get(playerID); let player = temp.get(playerID);
if(!player) if(!player)
{ {
@@ -110,13 +113,22 @@ export class GameManager
} }
if(player.mIsResting) if(player.mIsResting)
{ {
restRound = [player, this.mGameFightPlayer.get(player.mCurrentEnemy)!], let enemy = this.mGameFightPlayer.get(player.mCurrentEnemy);
if(!enemy)
{
return;
}
restRound = [player, enemy],
temp.delete(playerID); temp.delete(playerID);
continue; continue;
} }
else else
{ {
let enemy = temp.get(player.mCurrentEnemy)!; let enemy = temp.get(player.mCurrentEnemy);
if(!enemy)
{
return;
}
if(player.mAgile >= enemy.mAgile)//palyer 敏捷高 if(player.mAgile >= enemy.mAgile)//palyer 敏捷高
{ {
this.claculatePlayerHp(player, enemy); this.claculatePlayerHp(player, enemy);

View File

@@ -33,8 +33,9 @@ class Room {
generatePairings() { generatePairings() {
let tempPlayers = new Map; let tempPlayers = new Map;
for (const key of this.mPlayers.keys()) { for (const key of this.mPlayers.keys()) {
if (this.mPlayers.get(key).mHp > 0) { const player = this.mPlayers.get(key);
tempPlayers.set(key, this.mPlayers.get(key)); if (player && player.mHp > 0) {
tempPlayers.set(key, player);
} }
} }
this.mMatchMaker.updatePlayers(tempPlayers); this.mMatchMaker.updatePlayers(tempPlayers);
@@ -100,16 +101,21 @@ class RoomManager {
return this.mInstance; return this.mInstance;
} }
join(aRoomID, aName, aSocket) { join(aRoomID, aName, aSocket) {
if (!this.mRooms.has(aRoomID)) { const room = this.mRooms.get(aRoomID);
if (!room) {
return [false, "No room Id", null, null]; return [false, "No room Id", null, null];
} }
let room = this.mRooms.get(aRoomID);
if (room.mPlayers.has(aName)) { if (room.mPlayers.has(aName)) {
let player = room.mPlayers.get(aName); let player = room.mPlayers.get(aName);
if (player) {
player.setPlayerSocketId(aSocket.id); player.setPlayerSocketId(aSocket.id);
aSocket.join(aRoomID); aSocket.join(aRoomID);
return [true, "", room.mStatus, player]; return [true, "", room.mStatus, player];
} }
else {
return [false, "unKnow error", null, null];
}
}
if (room.mPlayers.size < GameDefine_1.ALL_PLAYER_NUM) { if (room.mPlayers.size < GameDefine_1.ALL_PLAYER_NUM) {
let player = new Player_1.Player(aName, aSocket.id); let player = new Player_1.Player(aName, aSocket.id);
aSocket.join(aRoomID); aSocket.join(aRoomID);

View File

@@ -57,9 +57,10 @@ class Room
let tempPlayers:Map<string, Player> = new Map<string, Player>; let tempPlayers:Map<string, Player> = new Map<string, Player>;
for(const key of this.mPlayers.keys()) for(const key of this.mPlayers.keys())
{ {
if(this.mPlayers.get(key)!.mHp > 0) const player = this.mPlayers.get(key);
if(player && player.mHp > 0)
{ {
tempPlayers.set(key, this.mPlayers.get(key)!); tempPlayers.set(key, player);
} }
} }
this.mMatchMaker.updatePlayers(tempPlayers); this.mMatchMaker.updatePlayers(tempPlayers);
@@ -145,18 +146,24 @@ export class RoomManager
join(aRoomID:string, aName:string, aSocket:Socket):[boolean, string, number | null, Player | null] join(aRoomID:string, aName:string, aSocket:Socket):[boolean, string, number | null, Player | null]
{ {
if(!this.mRooms.has(aRoomID)) const room = this.mRooms.get(aRoomID);
if (!room)
{ {
return [false, "No room Id", null, null]; return [false, "No room Id", null, null];
} }
let room = this.mRooms.get(aRoomID)!;
if(room.mPlayers.has(aName)) if(room.mPlayers.has(aName))
{ {
let player = room.mPlayers.get(aName); let player = room.mPlayers.get(aName);
player!.setPlayerSocketId(aSocket.id); if(player)
{
player.setPlayerSocketId(aSocket.id);
aSocket.join(aRoomID); aSocket.join(aRoomID);
return [true, "", room.mStatus, player!]; return [true, "", room.mStatus, player];
}
else
{
return [false, "unKnow error", null, null];
}
} }
if(room.mPlayers.size < ALL_PLAYER_NUM) if(room.mPlayers.size < ALL_PLAYER_NUM)