Exemplo n.º 1
0
        public void UnRegisterSubGrid(MyCubeGrid grid, bool clean = false)
        {
            if (!SubGridsRegistered.Contains(grid))
            {
                Log.Line($"sub Grid Already UnRegistered: [Main]:{grid == MyGrid}");
            }

            if (!clean)
            {
                SubGrids.Remove(grid);
            }

            SubGridsRegistered.Remove(grid);
            grid.OnFatBlockAdded   -= FatBlockAdded;
            grid.OnFatBlockRemoved -= FatBlockRemoved;

            foreach (var cube in grid.GetFatBlocks())
            {
                var battery = cube as MyBatteryBlock;
                if (InventoryMonitor.ContainsKey(cube) || battery != null && Batteries.Contains(battery))
                {
                    FatBlockRemoved(cube);
                }
            }

            GridAi removeAi;

            if (!Session.GridTargetingAIs.ContainsKey(grid))
            {
                Session.GridToMasterAi.TryRemove(grid, out removeAi);
            }
        }
Exemplo n.º 2
0
        public void RegisterSubGrid(MyCubeGrid grid, bool dupCheck = false)
        {
            if (dupCheck && SubGridsRegistered.Contains(grid))
            {
                Log.Line($"sub Grid Already Registered: [Main]:{grid == MyGrid}");
            }

            grid.Flags             |= (EntityFlags)(1 << 31);
            grid.OnFatBlockAdded   += FatBlockAdded;
            grid.OnFatBlockRemoved += FatBlockRemoved;


            SubGridsRegistered.Add(grid);

            FatMap fatMap;

            if (Session.GridToFatMap.TryGetValue(grid, out fatMap))
            {
                var blocks = fatMap.MyCubeBocks;
                for (int i = 0; i < blocks.Count; i++)
                {
                    FatBlockAdded(blocks[i]);
                }
            }
        }
Exemplo n.º 3
0
        internal void RegisterMyGridEvents(bool register, MyCubeGrid grid, bool force = false)
        {
            if (grid == null)
            {
                grid = MyGrid;
            }

            if (register)
            {
                if (Registered)
                {
                    Log.Line($"Ai RegisterMyGridEvents error");
                }

                Registered              = true;
                grid.OnFatBlockAdded   += FatBlockAdded;
                grid.OnFatBlockRemoved += FatBlockRemoved;
                grid.OnMarkForClose    += GridClose;
                if (SubGridsRegistered.Contains(grid))
                {
                    Log.Line($"Main Grid Already Registered");
                }

                SubGridsRegistered.Add(grid);
            }
            else
            {
                if (Registered)
                {
                    Registered              = false;
                    grid.OnFatBlockAdded   -= FatBlockAdded;
                    grid.OnFatBlockRemoved -= FatBlockRemoved;
                    grid.OnMarkForClose    -= GridClose;

                    if (!SubGridsRegistered.Contains(grid))
                    {
                        Log.Line($"Main Grid Already UnRegistered");
                    }
                    SubGridsRegistered.Remove(grid);
                }
                else if (!force)
                {
                    Log.Line($"NotRegistered: gridReg:{SubGridsRegistered.Contains(grid)}- Aimarked:{MarkedForClose} - aiClosed:{Closed} - Ticks:{Session?.Tick - AiCloseTick} - NullSession:{Session == null} - gridMarked:{grid.MarkedForClose}");
                }
            }
        }
Exemplo n.º 4
0
        public void RegisterSubGrid(MyCubeGrid grid, bool dupCheck = false)
        {
            if (dupCheck && SubGridsRegistered.Contains(grid))
            {
                Log.Line($"sub Grid Already Registered: [Main]:{grid == MyGrid}");
            }

            grid.Flags             |= (EntityFlags)(1 << 31);
            grid.OnFatBlockAdded   += FatBlockAdded;
            grid.OnFatBlockRemoved += FatBlockRemoved;

            SubGridsRegistered.Add(grid);

            foreach (var cube in grid.GetFatBlocks())
            {
                var battery = cube as MyBatteryBlock;
                if (battery != null || cube.HasInventory)
                {
                    FatBlockAdded(cube);
                }
            }
        }
Exemplo n.º 5
0
        public void UnRegisterSubGrid(MyCubeGrid grid, bool clean = false)
        {
            if (!SubGridsRegistered.Contains(grid))
            {
                Log.Line($"sub Grid Already UnRegistered: [Main]:{grid == MyGrid}");
            }

            if (!clean)
            {
                SubGrids.Remove(grid);
            }

            SubGridsRegistered.Remove(grid);
            grid.OnFatBlockAdded   -= FatBlockAdded;
            grid.OnFatBlockRemoved -= FatBlockRemoved;
            GridAi removeAi;

            if (!Session.GridTargetingAIs.ContainsKey(grid))
            {
                Session.GridToMasterAi.TryRemove(grid, out removeAi);
            }
        }
Exemplo n.º 6
0
        private void FatBlockRemoved(MyCubeBlock cube)
        {
            try
            {
                var sessionNull  = Session == null;
                var weaponType   = (cube is MyConveyorSorter || cube is IMyUserControllableGun);
                var cubeDef      = cube.BlockDefinition;
                var isWeaponBase = weaponType && cubeDef != null && !sessionNull && (Session.ReplaceVanilla && Session.VanillaIds.ContainsKey(cubeDef.Id) || Session.WeaponPlatforms.ContainsKey(cubeDef.Id));
                var battery      = cube as MyBatteryBlock;
                if (sessionNull)
                {
                    Log.Line($"FatBlockRemoved Session was null: AiMarked:{MarkedForClose} - AiClosed:{Closed} - cubeMarked:{cube.MarkedForClose} - CubeGridMarked:{cube.CubeGrid.MarkedForClose} - isRegistered:{SubGridsRegistered.Contains(cube.CubeGrid)} - regCnt:{SubGridsRegistered.Count}");
                }

                MyInventory inventory;
                if (!isWeaponBase && cube.HasInventory && cube.TryGetInventory(out inventory))
                {
                    if (!InventoryRemove(cube, inventory))
                    {
                        Log.Line($"FatBlock inventory remove failed: {cube.BlockDefinition?.Id.SubtypeName} - gridMatch:{cube.CubeGrid == MyGrid} - aiMarked:{MarkedForClose} - {cube.CubeGrid.DebugName} - {MyGrid?.DebugName}");
                    }
                }
                else if (battery != null)
                {
                    if (Batteries.Remove(battery))
                    {
                        SourceCount--;
                    }

                    UpdatePowerSources = true;
                }
            }
            catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved last: {ex} - Marked: {MarkedForClose} - Closed:{Closed}"); }
        }
Exemplo n.º 7
0
        private void FatBlockRemoved(MyCubeBlock cube)
        {
            try
            {
                var sessionNull  = Session == null;
                var weaponType   = (cube is MyConveyorSorter || cube is IMyUserControllableGun);
                var cubeDef      = cube.BlockDefinition;
                var isWeaponBase = weaponType && cubeDef != null && !sessionNull && (Session.ReplaceVanilla && Session.VanillaIds.ContainsKey(cubeDef.Id) || Session.WeaponPlatforms.ContainsKey(cubeDef.Id));
                if (sessionNull)
                {
                    Log.Line($"FatBlockRemoved Session was null: AiMarked:{MarkedForClose} - AiClosed:{Closed} - cubeMarked:{cube.MarkedForClose} - CubeGridMarked:{cube.CubeGrid.MarkedForClose} - isRegistered:{SubGridsRegistered.Contains(cube.CubeGrid)} - regCnt:{SubGridsRegistered.Count}");
                }

                try {
                    var         battery = cube as MyBatteryBlock;
                    MyInventory inventory;
                    if (!isWeaponBase && cube.HasInventory && cube.TryGetInventory(out inventory))
                    {
                        try
                        {
                            if (inventory != null && !sessionNull && Session.UniqueListRemove(inventory, InventoryIndexer, Inventories))
                            {
                                inventory.InventoryContentChanged -= CheckAmmoInventory;
                                List <MyPhysicalInventoryItem> removedPhysical;
                                List <BetterInventoryItem>     removedBetter;
                                if (Session.InventoryItems.TryRemove(inventory, out removedPhysical))
                                {
                                    removedPhysical.Clear();
                                }

                                if (Session.AmmoThreadItemList.TryRemove(inventory, out removedBetter))
                                {
                                    removedBetter.Clear();
                                }
                            }
                        } catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved inventory: {ex}"); }
                    }
                    else if (battery != null)
                    {
                        if (Batteries.Remove(battery))
                        {
                            SourceCount--;
                        }
                        UpdatePowerSources = true;
                    }
                }
                catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved main: {ex}"); }
            }
            catch (Exception ex) { Log.Line($"Exception in FatBlockRemoved last: {ex} - Marked: {MarkedForClose} - Closed:{Closed}"); }
        }
Exemplo n.º 8
0
        internal void CleanUp()
        {
            AiCloseTick = Session.Tick;

            MyGrid.Components.Remove <AiComponent>();

            for (int i = 0; i < MIds.Length; i++)
            {
                MIds[i] = 0;
            }

            if (Session.IsClient)
            {
                Session.SendUpdateRequest(MyGrid.EntityId, PacketType.ClientAiRemove);
            }

            Data.Repo.ControllingPlayers.Clear();
            Data.Repo.ActiveTerminal = 0;

            CleanSortedTargets();
            Construct.Clean();
            Obstructions.Clear();
            ObstructionsTmp.Clear();
            TargetAis.Clear();
            TargetAisTmp.Clear();
            EntitiesInRange.Clear();
            Batteries.Clear();
            Targets.Clear();
            Weapons.Clear();
            WeaponsIdx.Clear();
            WeaponBase.Clear();
            LiveProjectile.Clear();
            DeadProjectiles.Clear();
            NearByShieldsTmp.Clear();
            NearByFriendlyShields.Clear();
            StaticsInRange.Clear();
            StaticsInRangeTmp.Clear();
            TestShields.Clear();
            NewEntities.Clear();
            SubGridsRegistered.Clear();
            SourceCount           = 0;
            BlockCount            = 0;
            AiOwner               = 0;
            ProjectileTicker      = 0;
            NearByEntities        = 0;
            NearByEntitiesTmp     = 0;
            MyProjectiles         = 0;
            AccelChecked          = false;
            PointDefense          = false;
            FadeOut               = false;
            SuppressMouseShoot    = false;
            OverPowered           = false;
            UpdatePowerSources    = false;
            AvailablePowerChanged = false;
            PowerIncrease         = false;
            RequestedPowerChanged = false;
            RequestIncrease       = false;
            DbReady               = false;
            GridInit              = false;
            TouchingWater         = false;
            Data.Clean();

            MyShield         = null;
            MyPlanetTmp      = null;
            MyPlanet         = null;
            TerminalSystem   = null;
            LastTerminal     = null;
            PowerDistributor = null;
            PowerBlock       = null;
            MyGrid           = null;
            PowerDistributor = null;
            Session          = null;
            Closed           = true;
            CanShoot         = true;
            Version++;
        }