コード例 #1
0
        private bool VerifyVehicleIsNotDead(IPlayer player, BaseCombatEntity vehicle)
        {
            if (!vehicle.IsDead())
            {
                return(true);
            }

            ReplyToPlayer(player, "Generic.Error.VehicleDead");
            return(false);
        }
コード例 #2
0
ファイル: AutoTurret.cs プロジェクト: Ailtop/RustDocuments
    public void TargetTick()
    {
        if (UnityEngine.Time.realtimeSinceStartup >= nextVisCheck)
        {
            nextVisCheck  = UnityEngine.Time.realtimeSinceStartup + UnityEngine.Random.Range(0.2f, 0.3f);
            targetVisible = ObjectVisible(target);
            if (targetVisible)
            {
                lastTargetSeenTime = UnityEngine.Time.realtimeSinceStartup;
            }
        }
        EnsureReloaded();
        BaseProjectile attachedWeapon = GetAttachedWeapon();

        if (UnityEngine.Time.time >= nextShotTime && targetVisible && Mathf.Abs(AngleToTarget(target, currentAmmoGravity != 0f)) < GetMaxAngleForEngagement())
        {
            if ((bool)attachedWeapon)
            {
                if (attachedWeapon.primaryMagazine.contents > 0)
                {
                    FireAttachedGun(AimOffset(target), aimCone, null, PeacekeeperMode() ? target : null);
                    float delay = (attachedWeapon.isSemiAuto ? (attachedWeapon.repeatDelay * 1.5f) : attachedWeapon.repeatDelay);
                    delay        = attachedWeapon.ScaleRepeatDelay(delay);
                    nextShotTime = UnityEngine.Time.time + delay;
                }
                else
                {
                    nextShotTime = UnityEngine.Time.time + 5f;
                }
            }
            else if (HasFallbackWeapon())
            {
                FireGun(AimOffset(target), aimCone, null, target);
                nextShotTime = UnityEngine.Time.time + 0.115f;
            }
            else if (HasGenericFireable())
            {
                AttachedWeapon.ServerUse();
                nextShotTime = UnityEngine.Time.time + 0.115f;
            }
            else
            {
                nextShotTime = UnityEngine.Time.time + 1f;
            }
        }
        if (target == null || target.IsDead() || UnityEngine.Time.realtimeSinceStartup - lastTargetSeenTime > 3f || Vector3.Distance(base.transform.position, target.transform.position) > sightRange || (PeacekeeperMode() && !IsEntityHostile(target)))
        {
            SetTarget(null);
        }
    }
コード例 #3
0
 private static bool CanShow(BaseCombatEntity player)
 {
     return(player != null && !player.IsDead());
 }
コード例 #4
0
ファイル: Hooks.cs プロジェクト: Notulp/Pluton.Rust
        /// <summary>
        /// Called from <c>BaseCombatEntity.Hurt(HitInfo)</c> .
        /// </summary>
        public static void On_CombatEntityHurt(BaseCombatEntity combatEntity, HitInfo info)
        {
            try {
                Assert.Test(combatEntity.isServer, "This should be called serverside only");

                if (combatEntity.IsDead())
                    return;

                using (TimeWarning.New("Hurt", 50)) {
                    BaseNPC baseNPC = combatEntity.GetComponent<BaseNPC>();
                    BaseCorpse baseCorpse = combatEntity.GetComponent<BaseCorpse>();
                    BasePlayer basePlayer = combatEntity.GetComponent<BasePlayer>();

                    combatEntity.ScaleDamage(info);

                    if (basePlayer != null) {
                        Player player = Server.GetPlayer(basePlayer);

                        if (player.Teleporting) {
                            for (int i = 0; i < info.damageTypes.types.Length; i++) {
                                info.damageTypes.types[i] = 0f;
                            }
                        }

                        HurtEvent he = new PlayerHurtEvent(player, info);
                        OnNext("On_PlayerHurt", he);
                    } else if (baseNPC != null) {
                            HurtEvent he = new NPCHurtEvent(new NPC(baseNPC), info);
                            OnNext("On_NPCHurt", he);
                        } else if (baseCorpse != null) {
                                HurtEvent he = new CorpseHurtEvent(baseCorpse, info);
                                OnNext("On_CorpseHurt", he);
                            } else {
                                HurtEvent he = new CombatEntityHurtEvent(combatEntity, info);
                                OnNext("On_CombatEntityHurt", he);
                            }

                    if (info.PointStart != Vector3.zero) {
                        DirectionProperties[] directionProperties = (DirectionProperties[])combatEntity.GetFieldValue("propDirection");

                        for (int i = 0; i < directionProperties.Length; i++) {
                            if (!(directionProperties[i].extraProtection == null)) {
                                if (directionProperties[i].IsWeakspot(combatEntity.transform, info)) {
                                    directionProperties[i].extraProtection.Scale(info.damageTypes);
                                }
                            }
                        }
                    }

                    // the DebugHurt() method
                    if (ConVar.Vis.attack) {
                        if (info.PointStart != info.PointEnd) {
                            ConsoleNetwork.BroadcastToAllClients("ddraw.arrow", new object[] {
                                60, UnityEngine.Color.cyan, info.PointStart, info.PointEnd, 0.1
                            });

                            ConsoleNetwork.BroadcastToAllClients("ddraw.sphere", new object[] {
                                60, UnityEngine.Color.cyan, info.HitPositionWorld, 0.05
                            });
                        }

                        string text = String.Empty;

                        for (int i = 0; i < info.damageTypes.types.Length; i++) {
                            float num = info.damageTypes.types[i];

                            if (num != 0) {
                                string text2 = text;
                                text = String.Concat(new string[] {
                                    text2, " ", ((global::Rust.DamageType)i).ToString().PadRight(10), num.ToString("0.00"), "\r\n"
                                });
                            }
                        }

                        string text3 = String.Concat(new object[] {
                            "<color=lightblue>Damage:</color>".PadRight(10),
                            info.damageTypes.Total().ToString("0.00"),
                            "\r\n<color=lightblue>Health:</color>".PadRight(10),
                            combatEntity.health.ToString("0.00"), " / ",
                            (combatEntity.health - info.damageTypes.Total() > 0) ? "<color=green>" : "<color=red>",
                            (combatEntity.health - info.damageTypes.Total()).ToString("0.00"), "</color>",
                            "\r\n<color=lightblue>Hit Ent:</color>".PadRight(10), combatEntity,
                            "\r\n<color=lightblue>Attacker:</color>".PadRight(10), info.Initiator,
                            "\r\n<color=lightblue>Weapon:</color>".PadRight(10), info.Weapon,
                            "\r\n<color=lightblue>Damages:</color>\r\n", text
                        });

                        ConsoleNetwork.BroadcastToAllClients("ddraw.text", new object[] {
                            60, UnityEngine.Color.white, info.HitPositionWorld, text3
                        });
                    }

                    combatEntity.health -= info.damageTypes.Total();
                    combatEntity.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);

                    if (ConVar.Global.developer > 1) {
                        Debug.Log(string.Concat(new object[] {
                            "[Combat]".PadRight(10),
                            combatEntity.gameObject.name,
                            " hurt ",
                            info.damageTypes.GetMajorityDamageType(),
                            "/",
                            info.damageTypes.Total(),
                            " - ",
                            combatEntity.health.ToString("0"),
                            " health left"
                        }));
                    }

                    combatEntity.lastDamage = info.damageTypes.GetMajorityDamageType();
                    combatEntity.lastAttacker = info.Initiator;

                    BaseCombatEntity baseCombatEntity = combatEntity.lastAttacker as BaseCombatEntity;

                    if (baseCombatEntity != null)
                        baseCombatEntity.MarkHostileTime();

                    combatEntity.SetFieldValue("_lastAttackedTime", Time.time);

                    if (combatEntity.health <= 0f) {
                        combatEntity.Die(info);

                        BuildingBlock bb = combatEntity.GetComponent<BuildingBlock>();

                        if (bb != null) {
                            OnNext("On_BuildingPartDestroyed", new BuildingPartDestroyedEvent(bb, info));
                        }
                    }
                }
            } catch (Exception ex) {
                Logger.LogError("[Hooks] Error in CombatEntityHurt hook.");
                Logger.LogException(ex);
            }
        }
コード例 #5
0
ファイル: Hooks.cs プロジェクト: Viproz/Pluton
        public static void CombatEntityHurt(BaseCombatEntity combatEnt, HitInfo info)
        {
            try {
                Assert.Test(combatEnt.isServer, "This should be called serverside only");
                if (combatEnt.IsDead()) {
                    return;
                }

                BaseNPC npc = combatEnt.GetComponent<BaseNPC>();
                BaseCorpse corpse = combatEnt.GetComponent<BaseCorpse>();
                BasePlayer player = combatEnt.GetComponent<BasePlayer>();

                if (!SkinnedMeshCollider.ScaleDamage(info)) {
                    if (combatEnt.baseProtection != null) {
                        combatEnt.baseProtection.Scale(info.damageTypes);
                        if (ConVar.Global.developer > 1) {
                            Debug.Log("BaseProtection Scaling for entity :" + combatEnt.name);
                        }
                    }
                }
                else if (ConVar.Global.developer > 1) {
                    Debug.Log("SMC scaling damage for entity :" + combatEnt.name);
                }
                HurtEvent he;
                if (player != null) {
                    Player p = Server.GetPlayer(player);
                    if (p.Teleporting) {
                        for (int i = 0; i < info.damageTypes.types.Length; i++) {
                            info.damageTypes.types[i] = 0f;
                        }
                    }

                    he = new PlayerHurtEvent(p, info);
                    OnPlayerHurt.OnNext(he as PlayerHurtEvent);
                } else if (npc != null) {
                    he = new NPCHurtEvent(new NPC(npc), info);
                    OnNPCHurt.OnNext(he as NPCHurtEvent);
                } else if (corpse != null) {
                    he = new CorpseHurtEvent(corpse, info);
                    OnCorpseHurt.OnNext(he as CorpseHurtEvent);
                } else {
                    he = new CombatEntityHurtEvent(combatEnt, info);
                    OnCombatEntityHurt.OnNext(he as CombatEntityHurtEvent);
                }

                // the DebugHurt() method
                if (ConVar.Vis.attack) {
                    if (info.PointStart != info.PointEnd) {
                        ConsoleSystem.Broadcast("ddraw.arrow", new object[] {
                            60, Color.cyan, info.PointStart, info.PointEnd, 0.1
                        });
                        ConsoleSystem.Broadcast("ddraw.sphere", new object[] {
                            60, Color.cyan, info.HitPositionWorld, 0.05
                        });
                    }
                    string text = String.Empty;
                    for (int i = 0; i < info.damageTypes.types.Length; i++) {
                        float num = info.damageTypes.types[i];
                        if (num != 0) {
                            string text2 = text;
                            text = String.Concat(new string[] {
                                text2, " ", ((Rust.DamageType)i).ToString().PadRight(10), num.ToString("0.00"), "\r\n"
                            });
                        }
                    }
                    string text3 = String.Concat(new object[] {
                        "<color=lightblue>Damage:</color>".PadRight(10),
                        info.damageTypes.Total().ToString("0.00"),
                        "\r\n<color=lightblue>Health:</color>".PadRight(10),
                        combatEnt.health.ToString("0.00"), " / ",
                        (combatEnt.health - info.damageTypes.Total() > 0) ? "<color=green>" : "<color=red>",
                        (combatEnt.health - info.damageTypes.Total()).ToString("0.00"), "</color>",
                        "\r\n<color=lightblue>Hit Ent:</color>".PadRight(10), combatEnt,
                        "\r\n<color=lightblue>Attacker:</color>".PadRight(10), info.Initiator,
                        "\r\n<color=lightblue>Weapon:</color>".PadRight(10), info.Weapon,
                        "\r\n<color=lightblue>Damages:</color>\r\n", text
                    });
                    ConsoleSystem.Broadcast("ddraw.text", new object[] {
                        60, Color.white, info.HitPositionWorld, text3
                    });
                }
                if (combatEnt.skeletonProperties) {
                    combatEnt.skeletonProperties.ScaleDamage(info);
                }
                if (info.PointStart != Vector3.zero) {
                    DirectionProperties[] directionProperties = (DirectionProperties[])combatEnt.GetFieldValue("propDirection");
                    for (int i = 0; i < directionProperties.Length; i++) {
                        if (!(directionProperties[i].extraProtection == null)) {
                            if (directionProperties[i].IsPointWithinRadius(combatEnt.transform, info.PointStart)) {
                                directionProperties[i].extraProtection.Scale(info.damageTypes);
                            }
                        }
                    }
                }
                combatEnt.health -= info.damageTypes.Total();
                combatEnt.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
                if (ConVar.Global.developer > 1) {
                    Debug.Log(string.Concat(new object[]
                    {
                        "[Combat]".PadRight(10),
                        combatEnt.gameObject.name,
                        " hurt ",
                        info.damageTypes.GetMajorityDamageType(),
                        "/",
                        info.damageTypes.Total(),
                        " - ",
                        combatEnt.health.ToString("0"),
                        " health left"
                    }));
                }
                combatEnt.lastDamage = info.damageTypes.GetMajorityDamageType();
                combatEnt.lastAttacker = info.Initiator;
                if (combatEnt.health <= 0f) {
                    combatEnt.Die(info);
                    BuildingBlock bb = combatEnt.GetComponent<BuildingBlock>();
                    if (bb != null)
                    {
                        OnBuildingPartDestroyed.OnNext(new BuildingPartDestroyedEvent(bb, info));
                    }
                }
            } catch (Exception ex) {
                Logger.LogError("[Hooks] Error in CombatEntityHurt hook.");
                Logger.LogException(ex);
            }
        }
 // Token: 0x060003FC RID: 1020 RVA: 0x000042C7 File Offset: 0x000024C7
 static bool smethod_8(BaseCombatEntity baseCombatEntity_0)
 {
     return(baseCombatEntity_0.IsDead());
 }
コード例 #7
0
        public static void On_CombatEntityHurt(BaseCombatEntity combatEnt, HitInfo info, bool useProtection = true)
        {
            try {
                Assert.Test(combatEnt.isServer, "This should be called serverside only");
                if (combatEnt.IsDead())
                {
                    return;
                }
                using (TimeWarning.New("Hurt", 50)) {
                    BaseNPC    npc    = combatEnt.GetComponent <BaseNPC>();
                    BaseCorpse corpse = combatEnt.GetComponent <BaseCorpse>();
                    BasePlayer player = combatEnt.GetComponent <BasePlayer>();

                    combatEnt.ScaleDamage(info, useProtection);

                    HurtEvent he;
                    if (player != null)
                    {
                        Player p = Server.GetPlayer(player);
                        if (p.Teleporting)
                        {
                            for (int i = 0; i < info.damageTypes.types.Length; i++)
                            {
                                info.damageTypes.types[i] = 0f;
                            }
                        }

                        he = new PlayerHurtEvent(p, info);
                        OnNext("On_PlayerHurt", he);
                    }
                    else if (npc != null)
                    {
                        he = new NPCHurtEvent(new NPC(npc), info);
                        OnNext("On_NPCHurt", he);
                    }
                    else if (corpse != null)
                    {
                        he = new CorpseHurtEvent(corpse, info);
                        OnNext("On_CorpseHurt", he);
                    }
                    else
                    {
                        he = new CombatEntityHurtEvent(combatEnt, info);
                        OnNext("On_CombatEntityHurt", he);
                    }

                    if (info.PointStart != Vector3.zero)
                    {
                        DirectionProperties[] directionProperties = (DirectionProperties[])combatEnt.GetFieldValue("propDirection");
                        for (int i = 0; i < directionProperties.Length; i++)
                        {
                            if (!(directionProperties[i].extraProtection == null))
                            {
                                if (directionProperties[i].IsPointWithinRadius(combatEnt.transform, info.PointStart))
                                {
                                    directionProperties[i].extraProtection.Scale(info.damageTypes);
                                }
                            }
                        }
                    }

                    // the DebugHurt() method
                    if (ConVar.Vis.attack)
                    {
                        if (info.PointStart != info.PointEnd)
                        {
                            ConsoleSystem.Broadcast("ddraw.arrow", new object[] {
                                60, Color.cyan, info.PointStart, info.PointEnd, 0.1
                            });
                            ConsoleSystem.Broadcast("ddraw.sphere", new object[] {
                                60, Color.cyan, info.HitPositionWorld, 0.05
                            });
                        }
                        string text = String.Empty;
                        for (int i = 0; i < info.damageTypes.types.Length; i++)
                        {
                            float num = info.damageTypes.types[i];
                            if (num != 0)
                            {
                                string text2 = text;
                                text = String.Concat(new string[] {
                                    text2, " ", ((Rust.DamageType)i).ToString().PadRight(10), num.ToString("0.00"), "\r\n"
                                });
                            }
                        }
                        string text3 = String.Concat(new object[] {
                            "<color=lightblue>Damage:</color>".PadRight(10),
                            info.damageTypes.Total().ToString("0.00"),
                            "\r\n<color=lightblue>Health:</color>".PadRight(10),
                            combatEnt.health.ToString("0.00"), " / ",
                            (combatEnt.health - info.damageTypes.Total() > 0) ? "<color=green>" : "<color=red>",
                            (combatEnt.health - info.damageTypes.Total()).ToString("0.00"), "</color>",
                            "\r\n<color=lightblue>Hit Ent:</color>".PadRight(10), combatEnt,
                            "\r\n<color=lightblue>Attacker:</color>".PadRight(10), info.Initiator,
                            "\r\n<color=lightblue>Weapon:</color>".PadRight(10), info.Weapon,
                            "\r\n<color=lightblue>Damages:</color>\r\n", text
                        });
                        ConsoleSystem.Broadcast("ddraw.text", new object[] {
                            60, Color.white, info.HitPositionWorld, text3
                        });
                    }

                    combatEnt.health -= info.damageTypes.Total();
                    combatEnt.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
                    if (ConVar.Global.developer > 1)
                    {
                        Debug.Log(string.Concat(new object[]
                        {
                            "[Combat]".PadRight(10),
                            combatEnt.gameObject.name,
                            " hurt ",
                            info.damageTypes.GetMajorityDamageType(),
                            "/",
                            info.damageTypes.Total(),
                            " - ",
                            combatEnt.health.ToString("0"),
                            " health left"
                        }));
                    }
                    combatEnt.lastDamage   = info.damageTypes.GetMajorityDamageType();
                    combatEnt.lastAttacker = info.Initiator;
                    combatEnt.SetFieldValue("_lastAttackedTime", Time.time);
                    if (combatEnt.health <= 0f)
                    {
                        combatEnt.Die(info);
                        BuildingBlock bb = combatEnt.GetComponent <BuildingBlock>();
                        if (bb != null)
                        {
                            OnNext("On_BuildingPartDestroyed", new BuildingPartDestroyedEvent(bb, info));
                        }
                    }
                }
            } catch (Exception ex) {
                Logger.LogError("[Hooks] Error in CombatEntityHurt hook.");
                Logger.LogException(ex);
            }
        }
コード例 #8
0
        public static void CombatEntityHurt(BaseCombatEntity combatEnt, HitInfo info)
        {
            try {
                Assert.Test(combatEnt.isServer, "This should be called serverside only");
                if (combatEnt.IsDead())
                {
                    return;
                }

                BaseNPC    npc    = combatEnt.GetComponent <BaseNPC>();
                BaseCorpse corpse = combatEnt.GetComponent <BaseCorpse>();
                BasePlayer player = combatEnt.GetComponent <BasePlayer>();

                if (!SkinnedMeshCollider.ScaleDamage(info))
                {
                    if (combatEnt.baseProtection != null)
                    {
                        combatEnt.baseProtection.Scale(info.damageTypes);
                        if (ConsoleGlobal.developer > 1)
                        {
                            Debug.Log("BaseProtection Scaling for entity :" + combatEnt.name);
                        }
                    }
                }
                else
                {
                    if (ConsoleGlobal.developer > 1)
                    {
                        Debug.Log("SMC scaling damage for entity :" + combatEnt.name);
                    }
                }

                HurtEvent he;
                if (player != null)
                {
                    Player p = Server.GetPlayer(player);
                    if (p.Teleporting)
                    {
                        for (int i = 0; i < info.damageTypes.types.Length; i++)
                        {
                            info.damageTypes.types[i] = 0f;
                        }
                    }

                    he = new PlayerHurtEvent(p, info);
                    OnPlayerHurt.OnNext(he as PlayerHurtEvent);
                }
                else if (npc != null)
                {
                    he = new NPCHurtEvent(new NPC(npc), info);
                    OnNPCHurt.OnNext(he as NPCHurtEvent);
                }
                else if (corpse != null)
                {
                    he = new CorpseHurtEvent(corpse, info);
                    OnCorpseHurt.OnNext(he as CorpseHurtEvent);
                }
                else
                {
                    he = new CombatEntityHurtEvent(combatEnt, info);
                    OnCombatEntityHurt.OnNext(he as CombatEntityHurtEvent);
                }

                // the DebugHurt() method
                if (vis.attack)
                {
                    if (info.PointStart != info.PointEnd)
                    {
                        ConsoleSystem.Broadcast("ddraw.arrow", new object[] {
                            60, Color.cyan, info.PointStart, info.PointEnd, 0.1
                        });
                        ConsoleSystem.Broadcast("ddraw.sphere", new object[] {
                            60, Color.cyan, info.HitPositionWorld, 0.05
                        });
                    }
                    string text = String.Empty;
                    for (int i = 0; i < info.damageTypes.types.Length; i++)
                    {
                        float num = info.damageTypes.types [i];
                        if (num != 0)
                        {
                            string text2 = text;
                            text = String.Concat(new string[] {
                                text2, " ", ((Rust.DamageType)i).ToString().PadRight(10), num.ToString("0.00"), "\r\n"
                            });
                        }
                    }
                    string text3 = String.Concat(new object[] {
                        "<color=lightblue>Damage:</color>".PadRight(10),
                        info.damageTypes.Total().ToString("0.00"),
                        "\r\n<color=lightblue>Health:</color>".PadRight(10),
                        combatEnt.health.ToString("0.00"), " / ",
                        (combatEnt.health - info.damageTypes.Total() > 0) ? "<color=green>" : "<color=red>",
                        (combatEnt.health - info.damageTypes.Total()).ToString("0.00"), "</color>",
                        "\r\n<color=lightblue>Hit Ent:</color>".PadRight(10), combatEnt,
                        "\r\n<color=lightblue>Attacker:</color>".PadRight(10), info.Initiator,
                        "\r\n<color=lightblue>Weapon:</color>".PadRight(10), info.Weapon,
                        "\r\n<color=lightblue>Damages:</color>\r\n", text
                    });
                    ConsoleSystem.Broadcast("ddraw.text", new object[] {
                        60, Color.white, info.HitPositionWorld, text3
                    });
                }

                combatEnt.health -= info.damageTypes.Total();
                if (ConsoleGlobal.developer > 1)
                {
                    Debug.Log("[Combat]".PadRight(10) +
                              combatEnt.gameObject.name + " hurt " +
                              info.damageTypes.GetMajorityDamageType() + "/" +
                              info.damageTypes.Total() + " - " +
                              combatEnt.health.ToString("0") + " health left"
                              );
                }
                combatEnt.lastDamage = info.damageTypes.GetMajorityDamageType();
                if (combatEnt.health <= 0)
                {
                    combatEnt.Die(info);
                }
            } catch (Exception ex) {
                Logger.LogError("[Hooks] Error in CombatEntityHurt hook.");
                Logger.LogException(ex);
            }
        }