Example #1
0
        public override void Init(MyComponentDefinitionBase definition)
        {
            base.Init(definition);

            MyEntityStatComponentDefinition entityStatDefinition = definition as MyEntityStatComponentDefinition;

            Debug.Assert(entityStatDefinition != null);

            if (entityStatDefinition == null || !entityStatDefinition.Enabled || MySession.Static == null ||
                (!entityStatDefinition.AvailableInSurvival && MySession.Static.SurvivalMode))
            {
                if (Sync.IsServer) // Only init scripts on server
                {
                    m_statActionsRequested = true;
                }
                return;
            }

            foreach (var statId in entityStatDefinition.Stats)
            {
                MyEntityStatDefinition statDefinition = null;
                if (!MyDefinitionManager.Static.TryGetDefinition(statId, out statDefinition))
                {
                    continue;
                }

                if (!statDefinition.Enabled ||
                    (!statDefinition.EnabledInCreative && MySession.Static.CreativeMode) ||
                    (!statDefinition.AvailableInSurvival && MySession.Static.SurvivalMode))
                {
                    continue;
                }

                var          nameHash     = MyStringHash.GetOrCompute(statDefinition.Name);
                MyEntityStat existingStat = null;
                if (m_stats.TryGetValue(nameHash, out existingStat) && existingStat.StatDefinition.Id.SubtypeId == statDefinition.Id.SubtypeId)
                {
                    continue;
                }

                var builder = new MyObjectBuilder_EntityStat();
                builder.SubtypeName = statId.SubtypeName;
                builder.MaxValue    = 1.0f;
                builder.Value       = statDefinition.DefaultValue / statDefinition.MaxValue;
                AddStat(nameHash, builder);
            }

            if (Sync.IsServer)  // Only init scripts on server
            {
                Debug.Assert(m_scripts.Count == 0);
                foreach (var scriptName in entityStatDefinition.Scripts)
                {
                    InitScript(scriptName);
                }
                m_statActionsRequested = true;
            }
        }
Example #2
0
 public MyGuiControlStat(MyEntityStat stat, Vector2 position, Vector2 size, MyGuiDrawAlignEnum originAlign = MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER)
     : base(position: position, size: size, originAlign: originAlign)
 {
     Debug.Assert(stat != null);
     m_stat = stat;
     if (m_stat != null)
     {
         m_stat.OnStatChanged += UpdateStatControl;
     }
 }
Example #3
0
        public void InitStats(MyStatsDefinition definition)
        {
            if (definition == null || !definition.Enabled || (!definition.AvailableInSurvival && MySession.Static.SurvivalMode))
            {
                return;
            }

            foreach (var statId in definition.Stats)
            {
                MyEntityStatDefinition statDefinition = null;
                if (!MyDefinitionManager.Static.TryGetDefinition(statId, out statDefinition))
                {
                    continue;
                }

                if (!statDefinition.Enabled ||
                    (!statDefinition.EnabledInCreative && MySession.Static.CreativeMode) ||
                    (!statDefinition.AvailableInSurvival && MySession.Static.SurvivalMode))
                {
                    continue;
                }

                var          nameHash     = MyStringHash.GetOrCompute(statDefinition.Name);
                MyEntityStat existingStat = null;
                if (m_stats.TryGetValue(statId.SubtypeId, out existingStat) && existingStat.StatId == nameHash)
                {
                    continue;
                }

                var builder = new MyObjectBuilder_EntityStat();
                builder.SubtypeName = statId.SubtypeName;
                builder.MaxValue    = 1.0f;
                builder.Value       = 1.0f;
                AddStat(nameHash, builder);
            }

            if (Sync.IsServer)                  // Only init scripts on server
            {
                foreach (var scriptName in definition.Scripts)
                {
                    MyStatLogic script = null;
                    if ((script = m_scripts.Find((otherScript) => { return(otherScript.Name == scriptName); })) != null)
                    {
                        script.Close();
                        m_scripts.Remove(script);                               // On load we might've had less stats to consider (moving from creative to survival for example) so replace the old script
                    }

                    InitScript(scriptName);
                }
            }
            else
            {
                RequestStatActions();                   // Only request the stat actions from the server
            }
        }
Example #4
0
        public void InitStats(MyStatsDefinition definition)
        {
            if (definition == null || !definition.Enabled || (!definition.AvailableInSurvival && MySession.Static.SurvivalMode))
            {
                return;
            }

            foreach (var statId in definition.Stats)
            {
                MyEntityStatDefinition statDefinition = null;
                if (!MyDefinitionManager.Static.TryGetDefinition(statId, out statDefinition))
                {
                    continue;
                }

                if (!statDefinition.Enabled ||
                    (!statDefinition.EnabledInCreative && MySession.Static.CreativeMode) ||
                    (!statDefinition.AvailableInSurvival && MySession.Static.SurvivalMode))
                {
                    continue;
                }

                var          nameHash     = MyStringHash.GetOrCompute(statDefinition.Name);
                MyEntityStat existingStat = null;
                if (m_stats.TryGetValue(statId.SubtypeId, out existingStat) && existingStat.StatId == nameHash)
                {
                    continue;
                }

                var builder = new MyObjectBuilder_EntityStat();
                builder.SubtypeName = statId.SubtypeName;
                builder.MaxValue    = 1.0f;
                builder.Value       = statDefinition.DefaultValue / statDefinition.MaxValue;
                AddStat(nameHash, builder);
            }

            if (Sync.IsServer)                  // Only init scripts on server
            {
                // MW: remove all scripts because of the broken saves (Medieval character has multiple scripts (peasant's and player's))
                foreach (var script in m_scripts)
                {
                    script.Close();
                }
                m_scripts.Clear();

                foreach (var scriptName in definition.Scripts)
                {
                    InitScript(scriptName);
                }
            }
            else
            {
                RequestStatActions();                   // Only request the stat actions from the server
            }
        }
Example #5
0
        public void RequestStatChange(MyEntityStat stat)
        {
            List <StatInfo> changedStats = new List <StatInfo>();

            changedStats.Add(new StatInfo()
            {
                StatId = stat.StatId, Amount = stat.Value
            });                                                                                 // Regen left not used

            MyMultiplayer.RaiseStaticEvent(s => MyEntityStatComponent.OnStatChangedRequest, Entity.EntityId, changedStats);
        }
Example #6
0
        /// <summary>
        /// Applies overheating mechanics
        /// </summary>
        /// <param name="energy"></param>
        /// <param name="entity"></param>
        public void ApplyOverheating(float energy, IMyDestroyableObject entity, bool removeEnergy,
                                     MyStringHash?damageName = null)
        {
            var slim          = entity as IMySlimBlock;
            var massToDestroy = energy / Material.EnthalpyOfFusion;

            var maxIntegrity = Math.Max(entity?.Integrity ?? 1, 1);

            if (slim != null)
            {
                maxIntegrity = slim.MaxIntegrity;
            }
            else
            {
                MyEntityStat healthStat = null;
                (entity as IMyEntity)?.Components.Get <MyEntityStatComponent>()
                ?.TryGetStat(MyCharacterStatComponent.HealthId, out healthStat);
                var floating = entity as MyFloatingObject;
                if (healthStat != null)
                {
                    maxIntegrity = healthStat.MaxValue;
                }
                else if (floating != null)
                {
                    maxIntegrity = MyDefinitionManager.Static.GetPhysicalItemDefinition(floating.Item.Content)
                                   .Health;
                }
            }

            var integrityPerKg = maxIntegrity / Mass;

            var damageToDo = Math.Min(integrityPerKg * massToDestroy, (entity?.Integrity + 0.1f) ?? 1.1f);

            if (removeEnergy)
            {
                var massToDestroyReal = damageToDo / integrityPerKg;
                AddEnergy(-massToDestroyReal * Material.EnthalpyOfFusion);
            }

            if (!MyAPIGateway.Session.IsServerDecider())
            {
                return;
            }

            if ((slim?.CubeGrid != null && !slim.IsDestroyed && !slim.CubeGrid.Closed &&
                 slim.CubeGrid.GetCubeBlock(slim.Position) == slim) ||
                !((entity as IMyEntity)?.Closed ?? true))
            {
                entity?.DoDamage(damageToDo, damageName ?? _overheatingHash, true);
            }
        }
        public void RequestStatChange(MyEntityStat stat)
        {
            EntityStatChangedMsg msg = new EntityStatChangedMsg();

            msg.EntityId     = Entity.EntityId;
            msg.ChangedStats = new List <StatInfo>();

            msg.ChangedStats.Add(new StatInfo()
            {
                StatId = stat.StatId, Amount = stat.Value
            });                                                                                                 // Regen left not used

            MySession.Static.SyncLayer.SendMessageToServer(ref msg, MyTransportMessageEnum.Request);
        }
            public MyGuiControlStat(MyEntityStat stat, Vector2 position, Vector2 size, MyGuiDrawAlignEnum originAlign = MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER)
                : base(position: position, size: size, originAlign: originAlign)
            {
                Debug.Assert(stat != null);
                m_stat = stat;
                var vecColor = m_stat.StatDefinition.GuiDef.CriticalColorFrom;

                m_criticalValueColorFrom = new Color(vecColor.X, vecColor.Y, vecColor.Z);
                vecColor = m_stat.StatDefinition.GuiDef.CriticalColorTo;
                m_criticalValueColorTo = new Color(vecColor.X, vecColor.Y, vecColor.Z);
                if (m_stat != null)
                {
                    m_stat.OnStatChanged += UpdateStatControl;
                }
            }
Example #9
0
        public void DoDamage(float damage, object statChangeData = null)
        {
            MyEntityStat health = this.Health;

            if (health != null)
            {
                if (this.m_character != null)
                {
                    this.m_character.CharacterAccumulatedDamage += damage;
                }
                if (statChangeData is MyDamageInformation)
                {
                    this.LastDamage = (MyDamageInformation)statChangeData;
                }
                health.Decrease(damage, statChangeData);
            }
        }
            public MyGuiControlStat(MyEntityStat stat, Vector2 position, Vector2 size, MyGuiDrawAlignEnum originAlign = MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER)
                : base(position: position, size: size, originAlign: originAlign)
            {
                Debug.Assert(stat != null);
                m_stat = stat;
                var vecColor = m_stat.StatDefinition.GuiDef.CriticalColorFrom;

                m_criticalValueColorFrom = new Color(vecColor.X, vecColor.Y, vecColor.Z);
                vecColor = m_stat.StatDefinition.GuiDef.CriticalColorTo;
                m_criticalValueColorTo = new Color(vecColor.X, vecColor.Y, vecColor.Z);
                if (m_stat != null)
                {
                    m_stat.OnStatChanged   += UpdateStatControl;
                    m_stat.OnStatChanged   += DisplayStatNotification;
                    m_outOfStatNotification = new MyHudNotification(MyCommonTexts.NotificationStatZero, disappearTimeMs: 1000, font: MyFontEnum.Red, level: MyNotificationLevel.Important);
                    m_outOfStatNotification.SetTextFormatArguments(m_stat.StatId.ToString());
                }
            }
Example #11
0
        private MyEntityStat AddStat(MyStringHash statId, MyObjectBuilder_EntityStat objectBuilder, bool forceNewValues = false)
        {
            MyEntityStat stat = null;

            if (this.m_stats.TryGetValue(statId, out stat))
            {
                if (!forceNewValues)
                {
                    objectBuilder.Value = stat.CurrentRatio;
                }
                stat.ClearEffects();
                this.m_stats.Remove(statId);
            }
            stat = new MyEntityStat();
            stat.Init(objectBuilder);
            this.m_stats.Add(statId, stat);
            return(stat);
        }
Example #12
0
        public MyEntityStat AddStat(MyStringHash statId, MyObjectBuilder_EntityStat objectBuilder)
        {
            MyEntityStat stat = null;

            if (!m_stats.TryGetValue(statId, out stat))
            {
                stat = new MyEntityStat();
                stat.Init(objectBuilder);

                m_stats.Add(statId, stat);
            }
            else
            {
                stat.ClearEffects();
            }

            return(stat);
        }
Example #13
0
        public override void Init(MyComponentDefinitionBase definition)
        {
            base.Init(definition);
            MyEntityStatComponentDefinition definition2 = definition as MyEntityStatComponentDefinition;

            if (((definition2 == null) || (!definition2.Enabled || (MySession.Static == null))) || (!definition2.AvailableInSurvival && MySession.Static.SurvivalMode))
            {
                if (Sync.IsServer)
                {
                    this.m_statActionsRequested = true;
                }
            }
            else
            {
                foreach (MyDefinitionId id in definition2.Stats)
                {
                    MyEntityStatDefinition definition3 = null;
                    if (MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(id, out definition3) && (definition3.Enabled && ((definition3.EnabledInCreative || !MySession.Static.CreativeMode) && (definition3.AvailableInSurvival || !MySession.Static.SurvivalMode))))
                    {
                        MyStringHash orCompute = MyStringHash.GetOrCompute(definition3.Name);
                        MyEntityStat stat      = null;
                        if (!this.m_stats.TryGetValue(orCompute, out stat) || (stat.StatDefinition.Id.SubtypeId != definition3.Id.SubtypeId))
                        {
                            MyObjectBuilder_EntityStat objectBuilder = new MyObjectBuilder_EntityStat {
                                SubtypeName = id.SubtypeName,
                                MaxValue    = 1f,
                                Value       = definition3.DefaultValue / definition3.MaxValue
                            };
                            this.AddStat(orCompute, objectBuilder, false);
                        }
                    }
                }
                if (Sync.IsServer)
                {
                    foreach (string str in definition2.Scripts)
                    {
                        this.InitScript(str);
                    }
                    this.m_statActionsRequested = true;
                }
            }
        }
Example #14
0
 public bool TryGetStat(MyStringHash statId, out MyEntityStat outStat)
 {
     return(m_stats.TryGetValue(statId, out outStat));
 }
Example #15
0
 public bool TryGetStat(MyStringHash statId, out MyEntityStat outStat) =>
 this.m_stats.TryGetValue(statId, out outStat);