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; } }
// BaseCorpse.OnAttacked() public static void CorpseHit(BaseCorpse corpse, HitInfo info) { // works CorpseHurtEvent che = new CorpseHurtEvent(corpse, info); OnCorpseAttacked.OnNext(che); }
public override BaseCorpse CreateCorpse() { BaseCorpse baseCorpse = this.AiDefinition.OnCreateCorpse(this); if (baseCorpse) { return(baseCorpse); } return(base.CreateCorpse()); }
public override BaseCorpse CreateCorpse() { BaseCorpse corpse = this.AiDefinition.OnCreateCorpse(this); if (Object.op_Implicit((Object)corpse)) { return(corpse); } return(base.CreateCorpse()); }
public virtual void SetupCorpse(BaseCorpse corpse) { corpse.flags = flags; LootableCorpse component = corpse.GetComponent <LootableCorpse>(); if ((bool)component) { component.TakeFrom(inventory); } }
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); }
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(); } }
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); }
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()); }
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); } }
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(); } }
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); } }
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); }
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); } }
public RustPlayerCorpseSpawnedEvent( RustPlayer player, BaseCorpse corpse) : base(player) { Corpse = corpse; }
private void OnPlayerCorpseSpawned(BasePlayer player, BaseCorpse corpse) { var @event = new RustPlayerCorpseSpawnedEvent(new RustPlayer(player), corpse); Emit(@event); }
public CorpseHurtEvent(BaseCorpse baseCorpse, HitInfo info) : base(info) { corpse = baseCorpse; }
public CorpseHurtEvent(BaseCorpse c, HitInfo info) : base(info) { corpse = c; }
public virtual float CorpseRemovalTime(BaseCorpse corpse) { return(Server.corpsedespawn); }
// BaseCorpse.InitCorpse() public static void CorpseInit(BaseCorpse corpse, BaseEntity parent) { // works OnCorpseDropped.OnNext(new CorpseInitEvent(corpse, parent)); }
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); } }
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)); }
public CorpseInitEvent(BaseCorpse baseCorpse, BaseEntity baseEntity) { Corpse = baseCorpse; Parent = new Entity(baseEntity); }
public CorpseInitEvent(BaseCorpse c, BaseEntity p) { Corpse = c; Parent = new Entity(p); }