private HurtBox BaseAI_FindEnemyHurtBox(On.RoR2.CharacterAI.BaseAI.orig_FindEnemyHurtBox orig, BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { var gameObject = self.body.gameObject; if (gameObject) { self.enemySearch.viewer = self.body; self.enemySearch.teamMaskFilter = TeamMask.allButNeutral; self.enemySearch.teamMaskFilter.RemoveTeam(self.master.teamIndex); self.enemySearch.sortMode = BullseyeSearch.SortMode.Distance; self.enemySearch.minDistanceFilter = 0; self.enemySearch.maxDistanceFilter = maxDistance; //maxDistance self.enemySearch.searchOrigin = self.bodyInputBank.aimOrigin; self.enemySearch.searchDirection = self.bodyInputBank.aimDirection; self.enemySearch.maxAngleFilter = 180f; // (full360Vision ? 180f : 90f) self.enemySearch.filterByLoS = filterByLoS; self.enemySearch.RefreshCandidates(); self.enemySearch.FilterOutGameObject(gameObject); var list = self.enemySearch.GetResults().ToList(); foreach (HurtBox hurtBox in list) { if (hurtBox.GetComponent <PriorityAggroTargetForEnemy>()) { return(hurtBox); //Chooses the first non-charmed target } } return(list.FirstOrDefault()); //and falls back if it can't } return(orig(self, maxDistance, full360Vision, filterByLoS)); }
private HurtBox BaseAI_FindEnemyHurtBox(On.RoR2.CharacterAI.BaseAI.orig_FindEnemyHurtBox orig, BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { if (RunArtifactManager.instance.IsArtifactEnabled(Aggression)) { var range = RangeMultiplier.Value < 0 ? float.PositiveInfinity : maxDistance * RangeMultiplier.Value; return(orig(self, range, true, filterByLoS)); } return(orig(self, maxDistance, full360Vision, filterByLoS)); }
private HurtBox BaseAI_FindEnemyHurtBox(On.RoR2.CharacterAI.BaseAI.orig_FindEnemyHurtBox orig, RoR2.CharacterAI.BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { var original = orig(self, maxDistance, full360Vision, filterByLoS); if (original != null) { if (original.healthComponent == LocalUserManager.readOnlyLocalUsersList[0].cachedBody.healthComponent) { NoticedEnemiesList.Add(self); } else { NoticedEnemiesList.Remove(self); } } return(original); }
private HurtBox BaseAI_FindEnemyHurtBox(On.RoR2.CharacterAI.BaseAI.orig_FindEnemyHurtBox orig, BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { var retv = orig(self, maxDistance, full360Vision, filterByLoS); if (self && self.TryGetComponent <TauntDebuffController>(out var tdc) && tdc.isTaunted) { var taunters = tdc.GetTaunters(); var priority = self.enemySearch.GetResults().Where(x => x && x.healthComponent && taunters.Contains(x.healthComponent.body)).FirstOrDefault(); if (priority == default(HurtBox)) { return(retv); } else { return(priority); } } return(retv); }
static HurtBox CustomAITargetFilter(On.RoR2.CharacterAI.BaseAI.orig_FindEnemyHurtBox orig, RoR2.CharacterAI.BaseAI self, float maxDistance, bool full360Vision, bool filterByLoS) { if (!self.body) { return(null); } bool defaultSearch = true; bool isPlayerBot = self.master.playerCharacterMasterController ? true : false; bool isMinion = self.master.minionOwnership.ownerMaster ? true : false; bool isPlayerMinion = false; if (isMinion) { if (self.master.minionOwnership.ownerMaster.playerCharacterMasterController) { isPlayerMinion = true; } } BullseyeSearch enemySearch = self.GetFieldValue <BullseyeSearch>("enemySearch"); enemySearch.viewer = self.body; enemySearch.teamMaskFilter = TeamMask.all; enemySearch.sortMode = BullseyeSearch.SortMode.Distance; enemySearch.minDistanceFilter = 0f; enemySearch.maxDistanceFilter = maxDistance; enemySearch.searchOrigin = self.bodyInputBank.aimOrigin; enemySearch.searchDirection = self.bodyInputBank.aimDirection; enemySearch.maxAngleFilter = (full360Vision ? 180f : 90f); enemySearch.filterByLoS = filterByLoS; //Free for all pvp if (VoteAPI.VoteResults.HasVote(Settings.FreeForAllPVPToggle.Item2)) { //Player bot AI or player minion if (isPlayerBot || isPlayerMinion) { if (PVPMode.IsGracePeriod) { enemySearch.teamMaskFilter.RemoveTeam(self.master.teamIndex); } enemySearch.RefreshCandidates(); enemySearch.FilterOutGameObject(self.body.gameObject); if (isMinion) { CharacterBody ownerBody = self.master.minionOwnership.ownerMaster.GetBody(); if (ownerBody) { enemySearch.FilterOutGameObject(ownerBody.gameObject); } enemySearch.FilterOutMinionGroup(self.master.minionOwnership.ownerMaster.netId); } else { enemySearch.FilterOutMinionGroup(self.master.netId); } defaultSearch = false; } } //Team pvp or regular mobs AI if (defaultSearch) { enemySearch.teamMaskFilter.RemoveTeam(self.master.teamIndex); enemySearch.RefreshCandidates(); } return(enemySearch.GetResults().FirstOrDefault <HurtBox>()); }