mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-19 15:51:42 +00:00
Merge pull request #474 from SubmergedAmongUs/master
Add handling for null ShipStatus
This commit is contained in:
7 files changed
+39
-14
No files matched your search
@@ -7,7 +7,7 @@ namespace Impostor.Api.Net.Inner.Objects
|
||||
{
|
||||
uint Id { get; }
|
||||
|
||||
ITask Task { get; }
|
||||
ITask? Task { get; }
|
||||
|
||||
bool Complete { get; }
|
||||
|
||||
|
||||
@@ -125,20 +125,31 @@ namespace Impostor.Server.Net.Inner.Objects.Components
|
||||
return false;
|
||||
}
|
||||
|
||||
var vents = Game.GameNet.ShipStatus!.Data.Vents.Values;
|
||||
|
||||
var vent = vents.SingleOrDefault(x => Approximately(x.Position, position + ColliderOffset));
|
||||
|
||||
if (vent == null)
|
||||
if (Game.GameNet.ShipStatus == null)
|
||||
{
|
||||
if (await sender.Client.ReportCheatAsync(call, "Failed vent position check"))
|
||||
// Cannot perform vent position check on unknown ship statuses
|
||||
if (await sender.Client.ReportCheatAsync(call, "Failed vent position check on unknown map"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, vent));
|
||||
var vents = Game.GameNet.ShipStatus!.Data.Vents.Values;
|
||||
|
||||
var vent = vents.SingleOrDefault(x => Approximately(x.Position, position + ColliderOffset));
|
||||
|
||||
if (vent == null)
|
||||
{
|
||||
if (await sender.Client.ReportCheatAsync(call, "Failed vent position check"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, vent));
|
||||
}
|
||||
}
|
||||
|
||||
await SnapToAsync(sender, position, minSid);
|
||||
|
||||
@@ -66,7 +66,17 @@ namespace Impostor.Server.Net.Inner.Objects.Components
|
||||
throw new ArgumentOutOfRangeException(nameof(call), call, null);
|
||||
}
|
||||
|
||||
if (!Game.GameNet.ShipStatus!.Data.Vents.TryGetValue(ventId, out var vent))
|
||||
if (Game.GameNet.ShipStatus == null)
|
||||
{
|
||||
if (await sender.Client.ReportCheatAsync(call, "Client interacted with vent on unknown map"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (!Game.GameNet.ShipStatus.Data.Vents.TryGetValue(ventId, out var vent))
|
||||
{
|
||||
if (await sender.Client.ReportCheatAsync(call, "Client interacted with nonexistent vent"))
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Impostor.Server.Net.Inner.Objects
|
||||
private readonly InnerPlayerInfo _playerInfo;
|
||||
private readonly IEventManager _eventManager;
|
||||
|
||||
public TaskInfo(InnerPlayerInfo playerInfo, IEventManager eventManager, uint id, ITask task)
|
||||
public TaskInfo(InnerPlayerInfo playerInfo, IEventManager eventManager, uint id, ITask? task)
|
||||
{
|
||||
_playerInfo = playerInfo;
|
||||
_eventManager = eventManager;
|
||||
@@ -22,7 +22,7 @@ namespace Impostor.Server.Net.Inner.Objects
|
||||
|
||||
public uint Id { get; internal set; }
|
||||
|
||||
public ITask Task { get; internal set; }
|
||||
public ITask? Task { get; internal set; }
|
||||
|
||||
public bool Complete { get; internal set; }
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace Impostor.Server.Net.Inner.Objects
|
||||
player,
|
||||
_eventManager,
|
||||
taskId++,
|
||||
Game.GameNet!.ShipStatus!.Data.Tasks[taskTypeId]
|
||||
Game.GameNet!.ShipStatus?.Data.Tasks[taskTypeId]
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +187,7 @@ namespace Impostor.Server.Net.State
|
||||
continue;
|
||||
}
|
||||
|
||||
_logger.LogError("Couldn't find spawnable object {0}.", objectId);
|
||||
_logger.LogWarning("Couldn't find spawnable object {0}.", objectId);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,11 @@ namespace Impostor.Server.Net.State
|
||||
foreach (var player in _players.Values)
|
||||
{
|
||||
player.Character?.NetworkTransform.OnPlayerSpawn();
|
||||
await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus!.GetSpawnLocation(player.Character, PlayerCount, true), Vector2.Zero);
|
||||
|
||||
if (GameNet.ShipStatus != null)
|
||||
{
|
||||
await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus.GetSpawnLocation(player.Character, PlayerCount, true), Vector2.Zero);
|
||||
}
|
||||
}
|
||||
|
||||
GameState = GameStates.Started;
|
||||
|
||||
Reference in new issue
Block a user