Ejemplo n.º 1
0
        public virtual void Init(MyObjectBuilder_Base objectBuilder)
        {
            MyEntityStatDefinition     definition;
            MyObjectBuilder_EntityStat stat = (MyObjectBuilder_EntityStat)objectBuilder;

            MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(stat.TypeId, stat.SubtypeId), out definition);
            this.StatDefinition                   = definition;
            this.m_maxValue                       = definition.MaxValue;
            this.m_minValue                       = definition.MinValue;
            this.m_currentValue                   = stat.Value * this.m_maxValue;
            this.m_defaultValue                   = definition.DefaultValue;
            this.m_lastSyncValue                  = this.m_currentValue;
            this.m_statId                         = MyStringHash.GetOrCompute(definition.Name);
            this.m_regenAmountMultiplier          = stat.StatRegenAmountMultiplier;
            this.m_regenAmountMultiplierDuration  = stat.StatRegenAmountMultiplierDuration;
            this.m_regenAmountMultiplierTimeStart = MySandboxGame.TotalGamePlayTimeInMilliseconds;
            this.m_regenAmountMultiplierTimeAlive = 0;
            this.m_regenAmountMultiplierActive    = this.m_regenAmountMultiplierDuration > 0f;
            this.ClearEffects();
            if (stat.Effects != null)
            {
                foreach (MyObjectBuilder_EntityStatRegenEffect effect in stat.Effects)
                {
                    this.AddEffect(effect);
                }
            }
        }
Ejemplo n.º 2
0
        public virtual void Init(MyObjectBuilder_Base objectBuilder)
        {
            var builder = (MyObjectBuilder_EntityStat)objectBuilder;

            MyEntityStatDefinition definition;

            MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(builder.TypeId, builder.SubtypeId), out definition);

            Debug.Assert(definition != null);
            StatDefinition = definition;

            m_maxValue     = builder.MaxValue * 100.0f;
            m_minValue     = 0.0f;
            m_currentValue = builder.Value * m_maxValue;

            m_lastSyncValue = m_currentValue;
            m_statId        = MyStringHash.GetOrCompute(definition.Name);

            if (builder.Effects != null)
            {
                foreach (var effectBuilder in builder.Effects)
                {
                    AddEffect(effectBuilder);
                }
            }
        }
Ejemplo n.º 3
0
        public override void Deserialize(MyObjectBuilder_ComponentBase objectBuilder)
        {
            var builder = objectBuilder as MyObjectBuilder_CharacterStatComponent;

            if (builder != null)
            {
                if (builder.Stats != null)
                {
                    foreach (var stat in builder.Stats)
                    {
                        MyEntityStatDefinition statDefinition = null;
                        if (MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(stat.TypeId, stat.SubtypeId), out statDefinition) &&
                            statDefinition.Enabled &&
                            ((statDefinition.EnabledInCreative && MySession.Static.CreativeMode) ||
                             (statDefinition.AvailableInSurvival && MySession.Static.SurvivalMode)))
                        {
                            AddStat(stat.SubtypeId, stat);
                        }
                    }
                }

                if (builder.ScriptNames != null && Sync.IsServer)
                {
                    foreach (var scriptName in builder.ScriptNames)
                    {
                        InitScript(scriptName);
                    }
                }
            }

            base.Deserialize(objectBuilder);
        }
Ejemplo n.º 4
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;
            }
        }
Ejemplo n.º 5
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
            }
        }
Ejemplo n.º 6
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
            }
        }
Ejemplo n.º 7
0
        public virtual MyObjectBuilder_EntityStat GetObjectBuilder()
        {
            var builder = new MyObjectBuilder_EntityStat();
            MyEntityStatDefinition definition = MyDefinitionManager.Static.GetDefinition(new MyDefinitionId(builder.TypeId, StatDefinition.Id.SubtypeId)) as MyEntityStatDefinition;

            builder.SubtypeName = StatDefinition.Id.SubtypeName;
            Debug.Assert(definition != null);
            if (definition != null)
            {
                Debug.Assert(definition.MaxValue != 0);
                builder.Value    = m_currentValue / (definition.MaxValue != 0 ? definition.MaxValue : 1); // Save stat value relative to the definition maximum value
                builder.MaxValue = m_maxValue / (definition.MaxValue != 0 ? definition.MaxValue : 1);     // Save stat maximum value relative to the definition maximum value
            }
            else
            {
                builder.Value    = m_currentValue / m_maxValue;
                builder.MaxValue = 1.0f;
            }

            if (m_regenAmountMultiplierActive)
            {
                builder.StatRegenAmountMultiplier         = m_regenAmountMultiplier;
                builder.StatRegenAmountMultiplierDuration = m_regenAmountMultiplierDuration;
            }

            builder.Effects = null;
            if (m_effects != null && m_effects.Count > 0)
            {
                int savedEffectCount = m_effects.Count;

                foreach (var effectPair in m_effects)
                {
                    if (effectPair.Value.Duration < 0)
                    {
                        --savedEffectCount;                     // Don't save the permanent effects
                    }
                }
                if (savedEffectCount > 0)
                {
                    builder.Effects = new MyObjectBuilder_EntityStatRegenEffect[savedEffectCount];
                    int effectIndex = 0;
                    foreach (var effectPair in m_effects)
                    {
                        if (effectPair.Value.Duration >= 0)
                        {
                            builder.Effects[effectIndex++] = effectPair.Value.GetObjectBuilder();
                        }
                    }
                }
            }

            return(builder);
        }
Ejemplo n.º 8
0
        public virtual MyObjectBuilder_EntityStat GetObjectBuilder()
        {
            MyObjectBuilder_EntityStat stat       = new MyObjectBuilder_EntityStat();
            MyEntityStatDefinition     definition = MyDefinitionManager.Static.GetDefinition(new MyDefinitionId(stat.TypeId, this.StatDefinition.Id.SubtypeId)) as MyEntityStatDefinition;

            stat.SubtypeName = this.StatDefinition.Id.SubtypeName;
            if (definition != null)
            {
                stat.Value    = this.m_currentValue / ((definition.MaxValue != 0f) ? definition.MaxValue : 1f);
                stat.MaxValue = this.m_maxValue / ((definition.MaxValue != 0f) ? definition.MaxValue : 1f);
            }
            else
            {
                stat.Value    = this.m_currentValue / this.m_maxValue;
                stat.MaxValue = 1f;
            }
            if (this.m_regenAmountMultiplierActive)
            {
                stat.StatRegenAmountMultiplier         = this.m_regenAmountMultiplier;
                stat.StatRegenAmountMultiplierDuration = this.m_regenAmountMultiplierDuration;
            }
            stat.Effects = null;
            if ((this.m_effects != null) && (this.m_effects.Count > 0))
            {
                int count = this.m_effects.Count;
                foreach (KeyValuePair <int, MyEntityStatRegenEffect> pair in this.m_effects)
                {
                    if (pair.Value.Duration < 0f)
                    {
                        count--;
                    }
                }
                if (count > 0)
                {
                    stat.Effects = new MyObjectBuilder_EntityStatRegenEffect[count];
                    int index = 0;
                    foreach (KeyValuePair <int, MyEntityStatRegenEffect> pair2 in this.m_effects)
                    {
                        if (pair2.Value.Duration >= 0f)
                        {
                            index++;
                            stat.Effects[index] = pair2.Value.GetObjectBuilder();
                        }
                    }
                }
            }
            return(stat);
        }
Ejemplo n.º 9
0
        public override void Deserialize(MyObjectBuilder_ComponentBase objectBuilder)
        {
            var builder = objectBuilder as MyObjectBuilder_CharacterStatComponent;

            // Because of switching helmet on/off
            foreach (var script in m_scripts)
            {
                script.Close();
            }
            m_scripts.Clear();

            if (builder != null)
            {
                if (builder.Stats != null)
                {
                    foreach (var stat in builder.Stats)
                    {
                        MyEntityStatDefinition statDefinition = null;
                        if (MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(stat.TypeId, stat.SubtypeId), out statDefinition) &&
                            statDefinition.Enabled &&
                            ((statDefinition.EnabledInCreative && MySession.Static.CreativeMode) ||
                             (statDefinition.AvailableInSurvival && MySession.Static.SurvivalMode)))
                        {
                            AddStat(MyStringHash.GetOrCompute(statDefinition.Name), stat, true);
                        }
                    }
                }

                if (builder.ScriptNames != null && Sync.IsServer)
                {
                    // Should fix broken saves
                    // I assume that StatComponent should hold only once instance per script
                    builder.ScriptNames = builder.ScriptNames.Distinct().ToArray();

                    foreach (var scriptName in builder.ScriptNames)
                    {
                        InitScript(scriptName);
                    }
                }
            }

            base.Deserialize(objectBuilder);
        }
Ejemplo n.º 10
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;
                }
            }
        }
Ejemplo n.º 11
0
        public void InitStats(MyStatsDefinition definition)
        {
            if (definition == null)
            {
                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))
                {
                    continue;
                }

                var builder = new MyObjectBuilder_EntityStat();
                builder.MaxValue = statDefinition.MaxValue;
                builder.MinValue = statDefinition.MinValue;
                builder.Value    = statDefinition.MaxValue;
                AddStat(statId.SubtypeId, builder);
            }

            Type scriptType;

            foreach (var scriptName in definition.Scripts)
            {
                if (MyScriptManager.Static.StatScripts.TryGetValue(scriptName, out scriptType))
                {
                    var script = (MyStatLogic)Activator.CreateInstance(scriptType);
                    script.Init(Entity as MyCharacter, m_stats);
                    m_scripts.Add(script);
                }
            }
        }
Ejemplo n.º 12
0
        public override void Deserialize(MyObjectBuilder_ComponentBase objectBuilder)
        {
            MyObjectBuilder_CharacterStatComponent component = objectBuilder as MyObjectBuilder_CharacterStatComponent;

            using (List <MyStatLogic> .Enumerator enumerator = this.m_scripts.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    enumerator.Current.Close();
                }
            }
            this.m_scripts.Clear();
            if (component != null)
            {
                if (component.Stats != null)
                {
                    foreach (MyObjectBuilder_EntityStat stat in component.Stats)
                    {
                        MyEntityStatDefinition definition = null;
                        if ((MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(stat.TypeId, stat.SubtypeId), out definition) && definition.Enabled) && ((definition.EnabledInCreative && MySession.Static.CreativeMode) || (definition.AvailableInSurvival && MySession.Static.SurvivalMode)))
                        {
                            this.AddStat(MyStringHash.GetOrCompute(definition.Name), stat, true);
                        }
                    }
                }
                if ((component.ScriptNames != null) && Sync.IsServer)
                {
                    component.ScriptNames = component.ScriptNames.Distinct <string>().ToArray <string>();
                    foreach (string str in component.ScriptNames)
                    {
                        this.InitScript(str);
                    }
                }
            }
            base.Deserialize(objectBuilder);
        }
Ejemplo n.º 13
0
        public virtual void Init(MyObjectBuilder_Base objectBuilder)
        {
            var builder = (MyObjectBuilder_EntityStat)objectBuilder;

            MyEntityStatDefinition definition;

            MyDefinitionManager.Static.TryGetDefinition <MyEntityStatDefinition>(new MyDefinitionId(builder.TypeId, builder.SubtypeId), out definition);

            Debug.Assert(definition != null);
            StatDefinition = definition;

            System.Diagnostics.Debug.Assert(!float.IsNaN(definition.MaxValue) && !float.IsNaN(definition.MinValue) && !float.IsNaN(definition.DefaultValue), "Invalid values in stat definition!");

            m_maxValue     = definition.MaxValue;
            m_minValue     = definition.MinValue;
            m_currentValue = builder.Value * m_maxValue;
            m_defaultValue = definition.DefaultValue;

            m_lastSyncValue = m_currentValue;
            m_statId        = MyStringHash.GetOrCompute(definition.Name);

            m_regenAmountMultiplier          = builder.StatRegenAmountMultiplier;
            m_regenAmountMultiplierDuration  = builder.StatRegenAmountMultiplierDuration;
            m_regenAmountMultiplierTimeStart = MySandboxGame.TotalGamePlayTimeInMilliseconds;
            m_regenAmountMultiplierTimeAlive = 0;
            m_regenAmountMultiplierActive    = m_regenAmountMultiplierDuration > 0;

            ClearEffects();
            if (builder.Effects != null)
            {
                foreach (var effectBuilder in builder.Effects)
                {
                    AddEffect(effectBuilder);
                }
            }
        }