Beispiel #1
0
        public Vector2 PowerOutput()
        {
            if (IsClosed())
            {
                return(Vector2.Zero);
            }

            if (IsParentEntityGrid)
            {
                var grid = ParentEntity as IMyCubeGrid;

                if (grid == null)
                {
                    return(Vector2.Zero);
                }

                return(EntityEvaluator.GridPowerOutput(LinkedGrids));
            }
            else
            {
                var character = ParentEntity as IMyCharacter;

                if (character == null)
                {
                    return(Vector2.Zero);
                }

                if (MyVisualScriptLogicProvider.GetPlayersEnergyLevel(Player.IdentityId) < 1)
                {
                    return(Vector2.Zero);
                }

                return(new Vector2(0.009f, 0.009f));
            }
        }
Beispiel #2
0
        public bool IsPowered()
        {
            var character = ParentEntity as IMyCharacter;

            if (character == null)
            {
                return(false);
            }

            if (MyVisualScriptLogicProvider.GetPlayersEnergyLevel(Player.IdentityId) < 1)
            {
                return(false);
            }

            return(true);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
                    }
                }
            }
        }
Beispiel #6
0
 public static float GetEnergyLevel(this IMyPlayer player)
 {
     return(MyVisualScriptLogicProvider.GetPlayersEnergyLevel(player.IdentityId));
 }