예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }