public EBTStatus HasEnemyInRange(int range) { ulong num = (ulong)((long)range * (long)range); List <CharHandle_t> gameChars = GameCharMgr.instance.GameChars; int count = gameChars.Count; for (int i = 0; i < count; i++) { CCChar handle = gameChars[i].handle; if (!m_wrapper.actor.IsSelfCamp(handle)) { MonsterLogic MonsterLogic = handle.AsMonster(); if (MonsterLogic != null) { ADTMonsterCfgInfo cfgInfo = MonsterLogic.cfgInfo; if (cfgInfo != null && cfgInfo.bMonsterType == 2) { ObjAgent actorAgent = handle.pCharAgent; if (actorAgent.GetCurBehavior() == eObjBehavMode.State_Idle || actorAgent.GetCurBehavior() == eObjBehavMode.State_Dead || actorAgent.GetCurBehavior() == eObjBehavMode.State_Null) { goto IL_E0; } } } ulong sqrMagnitudeLong2D = (ulong)(handle.location - m_wrapper.actor.location).sqrMagnitudeLong2D; if (sqrMagnitudeLong2D < num) { return(EBTStatus.BT_SUCCESS); } } IL_E0 :; } return(EBTStatus.BT_FAILURE); }
public uint GetNearestEnemy(int srchR) { uint objid = 0; CCChar nearestEnemy = TargetSearcher.instance.GetNearestEnemy(m_wrapper.actor, srchR, 0u, true); if (nearestEnemy != null) { objid = nearestEnemy.ObjID; } // #if DEBUG_LOGOUT // if (MobaGo.Game.Data.DebugMask.HasMask(MobaGo.Game.Data.DebugMask.E_DBG_MASK.MASK_MOVEDATA)) // DebugHelper.LogOut("The id = " + m_wrapper.actorPtr.handle.ObjID + " targetid = " + objid); // #endif return(objid); }
public bool HasMemberHpLessThan(int hpRate) { Player ownerPlayer = CharHelper.GetOwnerPlayer(ref m_wrapper.actorPtr); ReadonlyContext <CharHandle_t> .Enumerator enumerator = ownerPlayer.GetAllHeroes().GetEnumerator(); while (enumerator.MoveNext()) { CharHandle_t current = enumerator.Current; CCChar handle = current.handle; if (hpRate > handle.pPropertyCtrl.actorHp * 10000 / handle.pPropertyCtrl.actorHpTotal) { return(true); } } return(false); }
public uint GetLowHpFriendChar(int srchR, int HPRate, eSkillSlotType InSlot) { uint filter = 0u; Skill skill = m_wrapper.GetSkill(InSlot); if (skill != null && skill.cfgData != null) { filter = skill.cfgData.dwSkillTargetFilter; } CCChar lowHpTeamMember = TargetSearcher.instance.GetLowHpTeamMember(m_wrapper.actorPtr, srchR, HPRate, filter); if (lowHpTeamMember != null) { return(lowHpTeamMember.ObjID); } return(0u); }
public bool IsDistanceToActorInRange(uint objID, int range) { CharHandle_t actor = GameCharMgr.instance.GetActor(objID); if (!actor) { return(false); } CCChar handle = actor.handle; long num = (long)range; if (handle.CharInfo != null) { num += (long)handle.CharInfo.iCollisionSize.x; } return((m_wrapper.actorLocation - handle.location).sqrMagnitudeLong2D < num * num); }
public EBTStatus IsNearbyFriendStrongThanEnemy(int srchR, int strengthRate) { ulong num = (ulong)((long)srchR * (long)srchR); List <CharHandle_t> heroChars = GameCharMgr.instance.HeroChars; int count = heroChars.Count; int sumCurHpSelfCamp = 0; int sumTotalHpSelfCamp = 0; int sumCurHpOtherCamp = 0; int sumTotalHpOtherCamp = 0; for (int i = 0; i < count; i++) { CCChar handle = heroChars[i].handle; ulong sqrMagnitudeLong2D = (ulong)(handle.location - m_wrapper.actor.location).sqrMagnitudeLong2D; if (sqrMagnitudeLong2D < num) { if (m_wrapper.actor.IsSelfCamp(handle)) { sumCurHpSelfCamp += handle.pPropertyCtrl.actorHp; sumTotalHpSelfCamp += handle.pPropertyCtrl.actorHpTotal; } else { sumCurHpOtherCamp += handle.pPropertyCtrl.actorHp; sumTotalHpOtherCamp += handle.pPropertyCtrl.actorHpTotal; } } } if (sumCurHpOtherCamp == 0) { return(EBTStatus.BT_SUCCESS); } if (sumCurHpSelfCamp * sumTotalHpOtherCamp * 10000 > sumCurHpOtherCamp * sumTotalHpSelfCamp * strengthRate) //(sumCurHpSelfCamp / sumTotalHpSelfCamp) / (sumTotalHpSelfCamp / sumTotalHpOtherCamp) > strengthRate / 10000 { return(EBTStatus.BT_SUCCESS); } return(EBTStatus.BT_FAILURE); }
public virtual void Born(CCChar actor) { m_wrapper = actor.pCharCtrl; m_AgentFileName = "HostAI"; base.SetCurAgentActive(); }