public static void HostileWildlifeAI_StateSim_Attack(HostileWildlifeAI AI, ulong millis) { object[] args = new object[] { AI, millis }; Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_StateSim_Attack", args); }
public static void HostileWildlifeAI_OnHurt(HostileWildlifeAI AI, DamageEvent damage) { object[] args = new object[] { AI, damage }; Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_OnHurt", args); }
public static void HostileWildlifeAI_Scent(HostileWildlifeAI AI, TakeDamage damage) { object[] args = new object[] { AI, damage }; Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_Scent", args); }
void OnKilled(TakeDamage takedamage, DamageEvent damage) { var tags = new Hash <string, string>(); if (damage.attacker.client != null) { tags["weapon"] = (damage.extraData is WeaponImpact) ? ((WeaponImpact)damage.extraData).dataBlock.name : "Unknown"; tags["killer"] = damage.attacker.client.userName; tags["killer-id"] = damage.attacker.client.userID.ToString(); if (damage.victim.client != null) { tags["killed"] = damage.victim.client.userName; tags["killed-id"] = damage.victim.client.userID.ToString(); if (damage.victim.client == damage.attacker.client) { if (suicide) { notifyDeath(tags, "suicideDeathMessage"); } return; } else { if (player) { tags["distance"] = Math.Floor(Vector3.Distance(damage.victim.client.lastKnownPosition, damage.attacker.client.lastKnownPosition)).ToString(); tags["bodypart"] = BodyParts.GetNiceName(damage.bodyPart); notifyDeath(tags, "playerDeathMessage"); } } } else if (damage.victim.networkView != null && damage.victim.networkView.gameObject.GetComponent <HostileWildlifeAI>()) { HostileWildlifeAI hostileai = damage.victim.networkView.gameObject.GetComponent <HostileWildlifeAI>(); tags["distance"] = Math.Floor(Vector3.Distance(damage.victim.networkView.position, damage.attacker.client.lastKnownPosition)).ToString(); tags["killed"] = hostileai.gameObject.name.Replace("(Clone)", "").Replace("Mutant", "Mutant ").ToLower(); tags["killed-id"] = tags["killed"].Replace("mutant ", ""); } } else if (damage.attacker.networkView != null && damage.attacker.networkView.gameObject.GetComponent <HostileWildlifeAI>()) { HostileWildlifeAI hostileai = damage.attacker.networkView.gameObject.GetComponent <HostileWildlifeAI>(); tags["killer"] = hostileai.gameObject.name.Replace("(Clone)", "").Replace("Mutant", "Mutant ").ToLower(); tags["killer-id"] = tags["killer"].Replace("mutant ", ""); if (animals) { notifyDeath(tags, "deathByAnimal"); } } }
//public static void OverheadPlayerName_Open(RPOS.InfoLabel label, HumanController HC) //{ // PlayerClient instantiatedPlayerClient = HC.instantiatedPlayerClient; // if (instantiatedPlayerClient != null) // { // if (vanishedList.Contains(instantiatedPlayerClient.userID.ToString())) // label.text = ""; // else // label.text = instantiatedPlayerClient.userName; // } // label.transform = HC.headBone; // label.color = Color.yellow; //} //public static bool OverheadPlayerName_Update(RPOS.InfoLabel label, HumanController HC) //{ // PlayerClient instantiatedPlayerClient = HC.instantiatedPlayerClient; // if (instantiatedPlayerClient != null) // { // if (vanishedList.Contains(instantiatedPlayerClient.userID.ToString())) // label.text = ""; // else // label.text = instantiatedPlayerClient.userName; // label.offset = (Vector3)(label.transform.InverseTransformDirection(HC.transform.up) * 0.3f); // return true; // } // return false; //} public static void HostileScent(TakeDamage damage, HostileWildlifeAI HWAI) { try { if (HWAI != null) { if (damage != null) { bool b = false; try { foreach (PlayerClient pc in AllPlayerClients) { if (pc.controllable != null) { if (pc.controllable.GetComponent<TakeDamage>() != null) { if (pc.controllable.GetComponent<TakeDamage>() == damage) { PlayerClient playerClient = pc; if (HWAI._targetTD != null) { b = hiddenList.Contains(playerClient.userID.ToString()) && HWAI._targetTD == playerClient.controllable.GetComponent<TakeDamage>(); try { if (!b) { if (isPlayer(damage.idMain)) { Character character = damage.idMain as Character; foreach (string UID in hiddenList) { if (UID == character.playerClient.userID.ToString() && HWAI._targetTD == character.playerClient.controllable.GetComponent<TakeDamage>()) b = true; } } } } catch (Exception ex) { Vars.conLog.Error("HS #3: " + ex.ToString()); } } break; } } } } } catch (Exception ex) { Vars.conLog.Error("HS #2: " + ex.ToString()); } if (!HWAI.IsScentBlind() && (((HWAI._state != 2) && (HWAI._state != 7)) && !HWAI.HasTarget()) && !b) { HWAI.ExitCurrentState(); HWAI.SetAttackTarget(damage); HWAI.EnterState_Chase(); } if (b && HWAI.HasTarget()) { ignoringAIList.Add(HWAI); HWAI._targetTD = null; } } } } catch (Exception ex) { Vars.conLog.Error("HS #1: " + ex.ToString()); } }
public static void HostileHurt(DamageEvent damage, HostileWildlifeAI HWAI) { try { bool b = false; try { if (isPlayer(damage.attacker.idMain)) { b = hiddenList.Contains(damage.attacker.client.userID.ToString()) && HWAI._targetTD == damage.attacker.client.controllable.GetComponent<TakeDamage>(); } } catch (Exception ex) { Vars.conLog.Error("HH: " + ex.ToString()); } if (!HWAI.HasTarget() && (damage.attacker.character != null) && !b) { HWAI.SetAttackTarget(damage.attacker.character.gameObject.GetComponent<TakeDamage>()); HWAI.ExitCurrentState(); HWAI.EnterState_Chase(); } if (b && HWAI.HasTarget()) HWAI._targetTD = null; } catch (Exception ex) { Vars.conLog.Error(ex.ToString()); } }
public static void HostileChase(ulong millis, HostileWildlifeAI HWAI) { try { if (HWAI != null) { if (millis != null) { if (HWAI._targetTD == null) { if (ignoringAIList.Contains(HWAI)) { HWAI.GoScentBlind(10f); HWAI.ExitCurrentState(); HWAI.idleClock.ResetRandomDurationSeconds(0, 0); HWAI._state = 1; if (!HWAI.idleSoundRefireClock.once) { HWAI.idleSoundRefireClock.ResetRandomDurationSeconds(2.0, 4.0); } ignoringAIList.Remove(HWAI); } else HWAI.LoseTarget(); if (hadTarget.Contains(HWAI)) hadTarget.Remove(HWAI); } else { bool b = false; if (!hadTarget.Contains(HWAI)) { try { foreach (PlayerClient pc in AllPlayerClients) { if (pc.controllable != null) { if (pc.controllable.GetComponent<TakeDamage>() != null) { if (pc.controllable.GetComponent<TakeDamage>() == HWAI._targetTD) { PlayerClient playerClient = pc; b = hiddenList.Contains(playerClient.userID.ToString()) && HWAI._targetTD == playerClient.controllable.GetComponent<TakeDamage>(); try { if (!b) { if (isPlayer(HWAI._targetTD.idMain)) { Character character = HWAI._targetTD.idMain as Character; foreach (string UID in hiddenList) { if (UID == character.playerClient.userID.ToString() && HWAI._targetTD == character.playerClient.controllable.GetComponent<TakeDamage>()) b = true; } } } } catch (Exception ex) { Vars.conLog.Error("HC #3: " + ex.ToString()); } break; } } } } } catch (Exception ex) { Vars.conLog.Error("HC #2: " + ex.ToString()); } hadTarget.Add(HWAI); } if (!b) { float num = HWAI.TargetRange(); if (num > HWAI.loseTargetRange) { HWAI.LoseTarget(); } else { Vector3 vector = HWAI._targetTD.transform.position - HWAI.transform.position; vector.y = 0f; if (num <= HWAI.attackRange) { HWAI._wildMove.SetLookDirection(vector.normalized); HWAI.ExitCurrentState(); HWAI.EnterState_Attack(); } else { if (HWAI._wildMove.IsStuck()) { if (HWAI.wasStuck) { if (HWAI.stuckClock.IntegrateTime_Reached(millis)) { Vector3 position = HWAI._targetTD.transform.position; HWAI.LoseTarget(); HWAI.ExitCurrentState(); HWAI.EnterState_Flee(position, 0x2710L); return; } } else { HWAI.wasStuck = true; HWAI.stuckClock.ResetRandomDurationSeconds(1.0, 2.0); } } else { HWAI.wasStuck = false; } if (HWAI.chaseSoundClock.IntegrateTime_Reached(millis)) { BasicWildLifeAI.AISound chase = BasicWildLifeAI.AISound.Chase; if (num < 5f) { chase = BasicWildLifeAI.AISound.ChaseClose; } HWAI.NetworkSound(chase); HWAI.chaseSoundClock.ResetRandomDurationSeconds(1.5, 2.5); } HWAI._wildMove.SetMoveTarget(HWAI._targetTD.gameObject, HWAI.runSpeed); if (HWAI.targetReachClock.IntegrateTime_Reached(millis)) { HWAI.LoseTarget(); HWAI.ExitCurrentState(); HWAI.EnterState_Idle(); } } } } } } } } catch (Exception ex) { conLog.Error("HC #1: " + ex.ToString()); } }