public static Boolean DoesGridHaveCaptureBlock(MyCubeGrid grid, KothConfig koth)
        {
            foreach (MyCubeBlock block in grid.GetFatBlocks())
            {
                if (block != null && block.BlockDefinition != null)
                {
                    Log.Info(block.BlockDefinition.Id.TypeId + " " + block.BlockDefinition.Id.SubtypeName);
                }
                else
                {
                    Log.Info("Null id for capture block");
                }

                if (block.OwnerId > 0 && block.BlockDefinition.Id.TypeId.ToString().Replace("MyObjectBuilder_", "").Equals(koth.captureBlockType) && block.BlockDefinition.Id.SubtypeName.Equals(koth.captureBlockSubtype))
                {
                    if (block.IsFunctional && block.IsWorking)
                    {
                        if (block is Sandbox.ModAPI.IMyFunctionalBlock bl)
                        {
                            bl.Enabled = true;
                        }

                        if (block is Sandbox.ModAPI.IMyBeacon beacon)
                        {
                            beacon.Radius = koth.captureBlockBroadcastDistance;
                        }

                        return(true);
                    }
                }
            }
            return(false);
        }
        public static MyCubeGrid GetLootboxGrid(Vector3 position, KothConfig config)
        {
            if (MyAPIGateway.Entities.GetEntityById(config.LootboxGridEntityId) != null)
            {
                if (MyAPIGateway.Entities.GetEntityById(config.LootboxGridEntityId) is MyCubeGrid grid)
                {
                    return(grid);
                }
            }
            BoundingSphereD sphere = new BoundingSphereD(position, config.CaptureRadiusInMetre + 5000);

            foreach (MyCubeGrid grid in MyAPIGateway.Entities.GetEntitiesInSphere(ref sphere).OfType <MyCubeGrid>())
            {
                IMyFaction fac = FacUtils.GetPlayersFaction(FacUtils.GetOwner(grid));
                if (fac != null && fac.Tag.Equals(config.KothBuildingOwner))
                {
                    Sandbox.ModAPI.IMyGridTerminalSystem gridTerminalSys = MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(grid);

                    Sandbox.ModAPI.IMyTerminalBlock block = gridTerminalSys.GetBlockWithName(config.LootBoxTerminalName);
                    if (block != null)
                    {
                        return(grid);
                    }
                }
            }
            return(null);
        }
        public static KothConfig SaveConfig(String name, KothConfig config)
        {
            FileUtils utils = new FileUtils();

            utils.WriteToXmlFile <KothConfig>(path + "//CrunchKOTH" + name + ".xml", config);

            return(config);
        }
        public static void LoadConfig()
        {
            if (!Directory.Exists(path + "//CrunchKOTH"))
            {
                Directory.CreateDirectory(path + "//CrunchKOTH//");
            }
            FileUtils utils = new FileUtils();

            foreach (String s in Directory.GetFiles(path + "//CrunchKOTH//"))
            {
                KothConfig koth = utils.ReadFromXmlFile <KothConfig>(s);

                KOTHs.Add(koth);
            }
            Log.Info(KOTHs.Count);
        }
 public static void SpawnCores(MyCubeGrid grid, KothConfig config)
 {
     if (grid != null)
     {
         Sandbox.ModAPI.IMyGridTerminalSystem gridTerminalSys = MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(grid);
         MyDefinitionId rewardItem             = getRewardItem(config);
         Sandbox.ModAPI.IMyTerminalBlock block = gridTerminalSys.GetBlockWithName(config.LootBoxTerminalName);
         if (block != null && rewardItem != null)
         {
             Log.Info("Should spawn item");
             MyItemType itemType = new MyInventoryItemFilter(rewardItem.TypeId + "/" + rewardItem.SubtypeName).ItemType;
             block.GetInventory().AddItems((MyFixedPoint)config.RewardAmount, (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(rewardItem));
         }
         else
         {
             Log.Info("Cant spawn item");
         }
         return;
     }
 }
 public static Boolean IsContested(IMyFaction fac, KothConfig koth, string capturingNation)
 {
     if (GetNationTag(fac) != null)
     {
         if (capturingNation.Equals(GetNationTag(fac)) || capturingNation.Equals(""))
         {
             capturingNation = GetNationTag(fac);
         }
         else
         {
             return(true);
         }
     }
     else
     {
         //unaff cant capture
         return(true);
     }
     return(false);
 }
        private void SetupConfig()
        {
            path = this.StoragePath;
            KothConfig config = new KothConfig();
            FileUtils  utils  = new FileUtils();

            if (!Directory.Exists(StoragePath + "//CrunchKOTH"))
            {
                Directory.CreateDirectory(StoragePath + "//CrunchKOTH");
            }
            if (File.Exists(this.StoragePath + "//CrunchKOTH//example.xml"))
            {
                config = utils.ReadFromXmlFile <KothConfig>(this.StoragePath + "//CrunchKOTH//example.xml");
                utils.WriteToXmlFile <KothConfig>(this.StoragePath + "//CrunchKOTH//example.xml", config, false);
            }
            else
            {
                config = new KothConfig();
                utils.WriteToXmlFile <KothConfig>(this.StoragePath + "//CrunchKOTH//example.xml", config, false);
            }
        }
 public static MyDefinitionId getRewardItem(KothConfig config)
 {
     MyDefinitionId.TryParse("MyObjectBuilder_" + config.RewardTypeId, config.RewardSubTypeId, out MyDefinitionId id);
     return(id);
 }