private bool HealTarget(IMyPlayer player) { if (player == null) { return(false); } float health = MyVisualScriptLogicProvider.GetPlayersHealth(player.IdentityId); if (health <= 0) { return(true); } if (health + m_healthRefillPerTick <= 100f) { MyVisualScriptLogicProvider.SetPlayersHealth(player.IdentityId, health + m_healthRefillPerTick); } else { MyVisualScriptLogicProvider.SetPlayersHealth(player.IdentityId, 100f); return(true); } return(false); }
private void DamageApplied(object target, ref MyDamageInformation info) { try { if (!(target is MyCharacter)) { return; } if (!(target is MyCharacter targetCharacter)) { return; } //Log.Info($"Target type {target.GetType().Name}"); var damageInfo = info; //Log.Info($"target is player"); //Log.Info($"damage amount {damageInfo.Amount}"); //Log.Info($"attacker id {damageInfo.AttackerId}"); //Log.Info($"deformation? {damageInfo.IsDeformation}"); //Log.Info($"attack type {damageInfo.Type}"); //var attackerIdentity = damageInfo.AttackerId; //var targetPlayer = MyPlayer.GetPlayerFromCharacter(targetCharacter); var targetPlayer = PlayerUtils.GetPlayer(targetCharacter.GetPlayerIdentityId()); if (targetPlayer == null) { return; } var targetHealth = MyVisualScriptLogicProvider.GetPlayersHealth(targetPlayer.Identity.IdentityId); if (targetHealth < damageInfo.Amount) { IMyPlayer attackerPlayer = Core.GetPlayer(damageInfo.AttackerId); if (attackerPlayer == null) { return; } if (attackerPlayer != null) { Core.OnDamage(targetPlayer, attackerPlayer); } } } catch (Exception e) { Log.Error(e.Message); Log.Error("--------------------------"); Log.Error(e.StackTrace); } }
private bool DoesTargetNeedLifeSupport(IMyPlayer player) { float health = MyVisualScriptLogicProvider.GetPlayersHealth(player.IdentityId); float oxygen = MyVisualScriptLogicProvider.GetPlayersOxygenLevel(player.IdentityId); float hydrogen = MyVisualScriptLogicProvider.GetPlayersHydrogenLevel(player.IdentityId); float energy = MyVisualScriptLogicProvider.GetPlayersEnergyLevel(player.IdentityId); if (health < 100f || (oxygen < m_o2RefillLevel && m_hasOxygen) || (hydrogen < m_h2RefillLevel && m_hasHydrogen) || energy < m_energyRefillLevel) { return(true); } return(false); }
public override void UpdateBeforeSimulation() { if (MyAPIGateway.Multiplayer.IsServer == false) { return; } if (scriptInit == false) { scriptInit = true; var definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Component), "Nadium_Radioactive"); radioactive_nadium = (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(definitionId); definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Ore), "Unknown_Element"); electromagnetic_element = (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(definitionId); definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Component), "composite_plate"); composite_plate = (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(definitionId); } tickTimer++; if (tickTimer < 180) { return; } tickTimer = 0; var playerList = new List <IMyPlayer>(); MyAPIGateway.Players.GetPlayers(playerList); if (playerList.Count == 0) { return; } foreach (var player in playerList) { if (player.IsBot == true) { continue; } if (player.Character == null) { continue; } float health = MyVisualScriptLogicProvider.GetPlayersHealth(player.IdentityId); float energy = MyVisualScriptLogicProvider.GetPlayersEnergyLevel(player.IdentityId); if (health <= 0) { continue; } var playerInv = player.Character.GetInventory(); MyFixedPoint amount = playerInv.GetItemAmount(electromagnetic_element); MyFixedPoint composite_plate_amount = playerInv.GetItemAmount(composite_plate); if (playerInv.ContainItems(1, radioactive_nadium) == true) { MyVisualScriptLogicProvider.SetPlayersHealth(player.IdentityId, health - 5); health = MyVisualScriptLogicProvider.GetPlayersHealth(player.IdentityId); MyVisualScriptLogicProvider.ShowNotification(">>> WARNING RADIATION ALERT <<<\n\nToxic Nadium radiation detected\nIntensity: 2,5 Rad/s", 2000, "Red", player.IdentityId); //MyVisualScriptLogicProvider.ShowNotificationToAll("WARNING RADIATION ALERT\n\nDetected toxic substance\n\nTriNadiumTaloxid-438", 2000, "White"); } if (playerInv.ContainItems(1, composite_plate) == true) { playerInv.RemoveItemsOfType(composite_plate_amount, composite_plate); MyVisualScriptLogicProvider.SetPlayersHealth(player.IdentityId, health - 50); health = MyVisualScriptLogicProvider.GetPlayersHealth(player.IdentityId); MyVisualScriptLogicProvider.ShowNotification(">>> WARNING RADIATION ALERT <<<\n\nUnknown radiation detected\nIntensity: 50 Rad/s", 2000, "Red", player.IdentityId); } if (playerInv.ContainItems(1, electromagnetic_element) == true) { if (energy <= 0) { MyVisualScriptLogicProvider.SetPlayersEnergyLevel(player.IdentityId, 0); } else { MyVisualScriptLogicProvider.SetPlayersEnergyLevel(player.IdentityId, energy - .04f); playerInv.RemoveItemsOfType(amount, electromagnetic_element); energy = MyVisualScriptLogicProvider.GetPlayersEnergyLevel(player.IdentityId); MyVisualScriptLogicProvider.ShowNotification(">>> INTERNAL ENERGY LOSS DETECTED <<<", 2000, "White", player.IdentityId); } } } }