Ejemplo n.º 1
0
        public override BaseCorpse OnCreateCorpse(HTNAnimal target)
        {
            BaseCorpse baseCorpse;

            if (this.DeathEffect.isValid)
            {
                Effect.server.Run(this.DeathEffect.resourcePath, target, 0, Vector3.zero, Vector3.zero, null, false);
            }
            using (TimeWarning timeWarning = TimeWarning.New("Create corpse", 0.1f))
            {
                BaseCorpse navAgent = target.DropCorpse(this.CorpsePrefab.resourcePath);
                if (navAgent)
                {
                    if (target.AiDomain != null && target.AiDomain.NavAgent != null && target.AiDomain.NavAgent.isOnNavMesh)
                    {
                        navAgent.transform.position = navAgent.transform.position + (Vector3.down * target.AiDomain.NavAgent.baseOffset);
                    }
                    navAgent.InitCorpse(target);
                    navAgent.Spawn();
                    navAgent.TakeChildren(target);
                }
                baseCorpse = navAgent;
            }
            return(baseCorpse);
        }
        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseCorpse corpse = entity as BaseCorpse;

            if (corpse != null)
            {
                if (!corpse is PlayerCorpse || !corpse?.parentEnt?.ToPlayer() || corpse.parentEnt.ToPlayer().IsNpc)
                {
                    return;
                }
                BasePlayer player = corpse.parentEnt.ToPlayer();
                string     UserID = player.UserIDString;
                if (ActiveTimers.ContainsKey(UserID))
                {
                    ActiveTimers[UserID].Destroy();
                    ActiveTimers.Remove(UserID);
                }
                Timer CorpseChecker = timer.Repeat(1, config.trackTime, () => {
                    if (!corpse.IsDestroyed)
                    {
                        Vector3 BodyLocation           = corpse.transform.position;
                        List <float> ShortBodyLocation = new List <float> {
                            BodyLocation.x, BodyLocation.y, BodyLocation.z
                        };
                        storedData.deaths[UserID] = ShortBodyLocation;
                        SaveData();
                    }
                });
                ActiveTimers[UserID] = CorpseChecker;
            }
        }
Ejemplo n.º 3
0
        // BaseCorpse.OnAttacked()
        public static void CorpseHit(BaseCorpse corpse, HitInfo info)
        {
            // works

            CorpseHurtEvent che = new CorpseHurtEvent(corpse, info);

            OnCorpseAttacked.OnNext(che);
        }
Ejemplo n.º 4
0
    public override BaseCorpse CreateCorpse()
    {
        BaseCorpse baseCorpse = this.AiDefinition.OnCreateCorpse(this);

        if (baseCorpse)
        {
            return(baseCorpse);
        }
        return(base.CreateCorpse());
    }
Ejemplo n.º 5
0
    public override BaseCorpse CreateCorpse()
    {
        BaseCorpse corpse = this.AiDefinition.OnCreateCorpse(this);

        if (Object.op_Implicit((Object)corpse))
        {
            return(corpse);
        }
        return(base.CreateCorpse());
    }
Ejemplo n.º 6
0
    public virtual void SetupCorpse(BaseCorpse corpse)
    {
        corpse.flags = flags;
        LootableCorpse component = corpse.GetComponent <LootableCorpse>();

        if ((bool)component)
        {
            component.TakeFrom(inventory);
        }
    }
Ejemplo n.º 7
0
 public override float CorpseRemovalTime(BaseCorpse corpse)
 {
     foreach (MonumentInfo monument in TerrainMeta.Path.Monuments)
     {
         if (monument != null && monument.IsSafeZone && monument.Bounds.Contains(corpse.transform.position))
         {
             return(30f);
         }
     }
     return(Server.corpsedespawn);
 }
    public override void OnKilled(HitInfo hitInfo = null)
    {
        Assert.IsTrue(base.isServer, "OnKilled called on client!");
        BaseCorpse baseCorpse = base.DropCorpse(this.CorpsePrefab.resourcePath);

        if (baseCorpse)
        {
            baseCorpse.Spawn();
            baseCorpse.TakeChildren(this);
        }
        base.Invoke(new Action(this.KillMessage), 0.5f);
    }
Ejemplo n.º 9
0
 void OnEntitySpawned(BaseNetworkable entity)
 {
     if (entity.GetComponent("BaseCorpse"))
     {
         BaseCorpse corpse = entity as BaseCorpse;
         corpse.RemoveCorpse();
     }
     if (entity.GetComponent("BaseNPC"))
     {
         BaseNPC npc = entity as BaseNPC;
         npc.Kill();
     }
 }
Ejemplo n.º 10
0
    public override void OnKilled(HitInfo hitInfo = null)
    {
        Assert.IsTrue(base.isServer, "OnKilled called on client!");
        BaseCorpse baseCorpse = DropCorpse(CorpsePrefab.resourcePath);

        if ((bool)baseCorpse)
        {
            SetupCorpse(baseCorpse);
            baseCorpse.Spawn();
            baseCorpse.TakeChildren(this);
        }
        Invoke(base.KillMessage, 0.5f);
        base.OnKilled(hitInfo);
    }
Ejemplo n.º 11
0
    public override BaseCorpse CreateCorpse()
    {
        BaseCorpse baseCorpse = AiDefinition.OnCreateCorpse(this);

        if ((bool)baseCorpse)
        {
            PlayerCorpse playerCorpse;
            if ((object)(playerCorpse = baseCorpse as PlayerCorpse) != null)
            {
                playerCorpse.playerName = LootPanelName;
            }
            return(baseCorpse);
        }
        return(base.CreateCorpse());
    }
Ejemplo n.º 12
0
 void EraseCorpse(Vector3 position)
 {
     if (Physics.Raycast(position, Vector3Down, out cachedRaycasthit))
     {
         position = cachedRaycasthit.point;
     }
     foreach (Collider collider in Physics.OverlapSphere(position, 2f, AIMask))
     {
         BaseCorpse corpse = collider.GetComponentInParent <BaseCorpse>();
         if (corpse == null)
         {
             continue;
         }
         corpse.Kill(BaseNetworkable.DestroyMode.None);
     }
 }
Ejemplo n.º 13
0
        private void DropBodyOfPlayer(BasePlayer player)
        {
            BaseCorpse corpse = player.DropCorpse("assets/prefabs/player/player_corpse.prefab");

            if (corpse != null)
            {
                LootableCorpse lootable = corpse as LootableCorpse;
                if (lootable != null)
                {
                    ItemContainer[] source = new ItemContainer[] { player.inventory?.containerMain, player.inventory?.containerWear, player.inventory?.containerBelt };
                    lootable.TakeFrom(source);
                    lootable.playerName    = player.displayName;
                    lootable.playerSteamID = player.userID;
                }
                corpse.SpawnAsMapEntity();
            }
        }
Ejemplo n.º 14
0
 public override BaseCorpse OnCreateCorpse(HTNAnimal target)
 {
     if (this.DeathEffect.isValid)
     {
         Effect.server.Run(this.DeathEffect.resourcePath, (BaseEntity)target, 0U, Vector3.get_zero(), Vector3.get_zero(), (Connection)null, false);
     }
     using (TimeWarning.New("Create corpse", 0.1f))
     {
         BaseCorpse baseCorpse = target.DropCorpse(this.CorpsePrefab.resourcePath);
         if (Object.op_Implicit((Object)baseCorpse))
         {
             if (Object.op_Inequality((Object)target.AiDomain, (Object)null) && Object.op_Inequality((Object)target.AiDomain.NavAgent, (Object)null) && target.AiDomain.NavAgent.get_isOnNavMesh())
             {
                 ((Component)baseCorpse).get_transform().set_position(Vector3.op_Addition(((Component)baseCorpse).get_transform().get_position(), Vector3.op_Multiply(Vector3.get_down(), target.AiDomain.NavAgent.get_baseOffset())));
             }
             baseCorpse.InitCorpse((BaseEntity)target);
             baseCorpse.Spawn();
             baseCorpse.TakeChildren((BaseEntity)target);
         }
         return(baseCorpse);
     }
 }
Ejemplo n.º 15
0
        private void OnPlayerCorpseSpawned(BasePlayer player, BaseCorpse corpse)
        {
            if (!_lastDroppedBackpacks.ContainsKey(player.userID))
            {
                return;
            }

            var container = _lastDroppedBackpacks[player.userID];

            if (container == null)
            {
                return;
            }

            var corpseCollider    = corpse.GetComponent <Collider>();
            var containerCollider = _lastDroppedBackpacks[player.userID].GetComponent <Collider>();

            if (corpseCollider != null && containerCollider != null)
            {
                Physics.IgnoreCollision(corpseCollider, containerCollider);
            }

            _lastDroppedBackpacks.Remove(player.userID);
        }
Ejemplo n.º 16
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);
            }
        }
Ejemplo n.º 17
0
 public RustPlayerCorpseSpawnedEvent(
     RustPlayer player,
     BaseCorpse corpse) : base(player)
 {
     Corpse = corpse;
 }
Ejemplo n.º 18
0
        private void OnPlayerCorpseSpawned(BasePlayer player, BaseCorpse corpse)
        {
            var @event = new RustPlayerCorpseSpawnedEvent(new RustPlayer(player), corpse);

            Emit(@event);
        }
Ejemplo n.º 19
0
 public CorpseHurtEvent(BaseCorpse baseCorpse, HitInfo info)
     : base(info)
 {
     corpse = baseCorpse;
 }
Ejemplo n.º 20
0
 public CorpseHurtEvent(BaseCorpse c, HitInfo info)
     : base(info)
 {
     corpse = c;
 }
Ejemplo n.º 21
0
 public virtual float CorpseRemovalTime(BaseCorpse corpse)
 {
     return(Server.corpsedespawn);
 }
Ejemplo n.º 22
0
 // BaseCorpse.InitCorpse()
 public static void CorpseInit(BaseCorpse corpse, BaseEntity parent)
 {
     // works
     OnCorpseDropped.OnNext(new CorpseInitEvent(corpse, parent));
 }
Ejemplo n.º 23
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);
            }
        }
Ejemplo n.º 24
0
 private object OnPlayerCorpseSpawned(BasePlayer player, BaseCorpse corpse)
 {
     return(Interface.Oxide.CallDeprecatedHook("OnPlayerCorpse", "OnPlayerCorpseSpawned(BasePlayer player, BaseCorpse corpse)",
                                               new System.DateTime(2021, 7, 1), player, corpse));
 }
Ejemplo n.º 25
0
 public CorpseInitEvent(BaseCorpse baseCorpse, BaseEntity baseEntity)
 {
     Corpse = baseCorpse;
     Parent = new Entity(baseEntity);
 }
Ejemplo n.º 26
0
 public CorpseInitEvent(BaseCorpse c, BaseEntity p)
 {
     Corpse = c;
     Parent = new Entity(p);
 }
Ejemplo n.º 27
0
 public CorpseHurtEvent(BaseCorpse c, HitInfo info)
     : base(info)
 {
     corpse = c;
 }