示例#1
0
        public void Start(Builder_Disruption builder)
        {
            this.m_effectOwner = builder.EffectOwner;

            for (int index = 0; index < builder.Affected_Blocks.Length; index++)
            {
                IMyEntity entity;
                if (!MyAPIGateway.Entities.TryGetEntityById(builder.Affected_Blocks[index], out entity) || !(entity is IMyCubeBlock))
                {
                    Logger.DebugLog("Block is not in world: " + builder.Affected_Blocks[index], Rynchodon.Logger.severity.WARNING);
                    continue;
                }
                IMyCubeBlock block = (IMyCubeBlock)entity;
                StartEffect(block);
                // save/load will change ownership from long.MinValue to 0L
                ((MyCubeBlock)block).ChangeOwner(m_effectOwner, MyOwnershipShareModeEnum.Faction);
                m_affected.Add(block, builder.Affected_Owner[index]);

                block.SetDamageEffect(true);
            }

            if (m_affected.Count != 0)
            {
                Logger.DebugLog("Added old effect from builder");
                m_expire = builder.Expires.ToTimeSpan();
                UpdateManager.Register(UpdateFrequency, UpdateEffect);
                AllDisruptions.Add(this);
            }
        }
示例#2
0
        public Builder_Disruption GetBuilder()
        {
            Builder_Disruption result = new Builder_Disruption()
            {
                Type = GetType().Name,
                EffectOwner = m_effectOwner,
                Expires = new SerializableGameTime(m_expire)
            };

            result.Affected_Blocks = new long[m_affected.Count];
            result.Affected_Owner = new MyIDModule[m_affected.Count];

            int index = 0;
            foreach (var pair in m_affected)
            {
                result.Affected_Blocks[index] = pair.Key.EntityId;
                result.Affected_Owner[index++] = pair.Value;
            }

            return result;
        }
示例#3
0
        public Builder_Disruption GetBuilder()
        {
            Builder_Disruption result = new Builder_Disruption()
            {
                Type        = GetType().Name,
                EffectOwner = m_effectOwner,
                Expires     = new SerializableGameTime(m_expire)
            };

            result.Affected_Blocks = new long[m_affected.Count];
            result.Affected_Owner  = new MyIDModule[m_affected.Count];

            int index = 0;

            foreach (var pair in m_affected)
            {
                result.Affected_Blocks[index]  = pair.Key.EntityId;
                result.Affected_Owner[index++] = pair.Value;
            }

            return(result);
        }
示例#4
0
        public void Start(Builder_Disruption builder)
        {
            this.m_logger = new Logger(GetType().Name);
            this.m_effectOwner = builder.EffectOwner;

            for (int index = 0; index < builder.Affected_Blocks.Length; index++)
            {
                IMyEntity entity;
                if (!MyAPIGateway.Entities.TryGetEntityById(builder.Affected_Blocks[index], out entity) || !(entity is IMyCubeBlock))
                {
                    m_logger.debugLog("Block is not in world: " + builder.Affected_Blocks[index], Logger.severity.WARNING);
                    continue;
                }
                IMyCubeBlock block  = (IMyCubeBlock)entity;
                StartEffect(block);
                // save/load will change ownership from long.MinValue to 0L
                ((MyCubeBlock)block).ChangeOwner(m_effectOwner, MyOwnershipShareModeEnum.Faction);
                m_affected.Add(block, builder.Affected_Owner[index]);

                block.SetDamageEffect(true);
            }

            if (m_affected.Count != 0)
            {
                m_logger.debugLog("Added old effect from builder");
                m_expire = builder.Expires.ToTimeSpan();
                UpdateManager.Register(UpdateFrequency, UpdateEffect);
                AllDisruptions.Add(this);
            }
        }