static bool IsDamagedByPlayerInNeutralGrid(IMyCubeGrid Grid, out IMyPlayer Damager) { Damager = null; try { Damager = Grid.FindControllingPlayer(); if (Damager != null) { return(!Damager.IsBot); } try { List <MyCubeBlock> CubeBlocks = Grid.GetBlocks <MyCubeBlock>(x => x.BuiltBy != 0); if (CubeBlocks.Count != 0) { var ThatCunningGrieferID = CubeBlocks[0].BuiltBy; Damager = MyAPIGateway.Players.GetPlayerByID(ThatCunningGrieferID); return(Damager != null); } else { List <IMySlimBlock> SlimBlocks = Grid.GetBlocks(Selector: x => x.GetBuiltBy() != 0, BlockLimit: 50); if (SlimBlocks.Count == 0) { return(false); // We give up on this one } else { try { Damager = MyAPIGateway.Players.GetPlayerByID(SlimBlocks.First().GetBuiltBy()); if (Damager != null) { Grid.DebugWrite("Damage.IsDoneByPlayer.FindBuilderBySlimBlocks", $"Found damager player from slim block. Damager is {Damager.DisplayName}"); } return(Damager != null); } catch (Exception Scrap) { AISessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check grid via SlimBlocks BuiltBy crashed.", Scrap)); return(false); } } } } catch (Exception Scrap) { AISessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check grid via BuiltBy crashed.", Scrap)); return(false); } } catch (Exception Scrap) { AISessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check neutral grid crashed", Scrap)); return(false); } }
private static bool IsDamagedByPlayerInNeutralGrid(IMyCubeGrid grid, out IMyPlayer damager) { damager = null; try { damager = grid.FindControllingPlayer(); if (damager != null) { return(!damager.IsBot); } try { List <MyCubeBlock> cubeBlocks = grid.GetBlocks <MyCubeBlock>(x => x.BuiltBy != 0); if (cubeBlocks.Count != 0) { long thatCunningGrieferId = cubeBlocks[0].BuiltBy; damager = MyAPIGateway.Players.GetPlayerById(thatCunningGrieferId); return(damager != null); } else { List <IMySlimBlock> slimBlocks = grid.GetBlocks(Selector: x => x.GetBuiltBy() != 0, BlockLimit: 50); if (slimBlocks.Count == 0) { return(false); // We give up on this one } else { try { damager = MyAPIGateway.Players.GetPlayerById(slimBlocks.First().GetBuiltBy()); if (damager != null) { grid.DebugWrite("Damage.IsDoneByPlayer.FindBuilderBySlimBlocks", $"Found damager player from slim block. Damager is {damager.DisplayName}"); } return(damager != null); } catch (Exception scrap) { AiSessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check grid via SlimBlocks BuiltBy crashed.", scrap)); return(false); } } } } catch (Exception scrap) { AiSessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check grid via BuiltBy crashed.", scrap)); return(false); } } catch (Exception scrap) { AiSessionCore.LogError("Damage.IsDoneByPlayer", new Exception("Check neutral grid crashed", scrap)); return(false); } }