示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#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);
        }
示例#4
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);
                    }
                }
            }
        }