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; } }
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; } }
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 } }
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 } }
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); }
/// <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; } }
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()); } }
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); }
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); }
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; } } }
public bool TryGetStat(MyStringHash statId, out MyEntityStat outStat) { return(m_stats.TryGetValue(statId, out outStat)); }
public bool TryGetStat(MyStringHash statId, out MyEntityStat outStat) => this.m_stats.TryGetValue(statId, out outStat);