private static void HandleSetEnergyLevelForPlayer(ulong sender, long identity, float value) { MyVisualScriptLogicProvider.SetPlayersEnergyLevel(identity, value); if (NetworkHandlerSystem.IsServer && NetworkHandlerSystem.IsMultiplayer) { actionSetEnergyLevelForPlayer.CallToOthers(identity, value); } }
private bool RefillTarget(IMyPlayer player) { float oxygen = MyVisualScriptLogicProvider.GetPlayersOxygenLevel(player.IdentityId); float hydrogen = MyVisualScriptLogicProvider.GetPlayersHydrogenLevel(player.IdentityId); float energy = MyVisualScriptLogicProvider.GetPlayersEnergyLevel(player.IdentityId); bool oxygenRefilled = false; bool hydrogenRefilled = false; bool energyRefilled = false; Logging.Instance.WriteLine($"[Life Support] Tank status: Oxygen - {m_hasOxygen}, Hydrogen - {m_hasHydrogen}", 2); if (m_hasOxygen && m_o2RefillLevel > 0f) { if (oxygen + m_o2RefillPerTick <= 1f) { MyVisualScriptLogicProvider.SetPlayersOxygenLevel(player.IdentityId, oxygen + m_o2RefillPerTick); } else { MyVisualScriptLogicProvider.SetPlayersOxygenLevel(player.IdentityId, 1f); oxygenRefilled = true; } } else { oxygenRefilled = true; } if (m_hasHydrogen && m_h2RefillLevel > 0f) { if (hydrogen + m_h2RefillPerTick <= 1f) { MyVisualScriptLogicProvider.SetPlayersHydrogenLevel(player.IdentityId, hydrogen + m_h2RefillPerTick); } else { MyVisualScriptLogicProvider.SetPlayersHydrogenLevel(player.IdentityId, 1f); hydrogenRefilled = true; } } else { hydrogenRefilled = true; } if (m_energyRefillLevel > 0f) { if (energy + m_energyRefillPerTick <= 1f) { MyVisualScriptLogicProvider.SetPlayersEnergyLevel(player.IdentityId, energy + m_energyRefillPerTick); } else { MyVisualScriptLogicProvider.SetPlayersEnergyLevel(player.IdentityId, 1f); energyRefilled = true; } } else { energyRefilled = true; } if (oxygenRefilled && hydrogenRefilled && energyRefilled) { 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); } } } }