protected void MarkWarningMessageByEffect(EntityParent caster, int effectID, XPoint basePoint) { if (basePoint == null) { return; } Effect effect = DataReader <Effect> .Get(effectID); if (effect == null) { return; } if (effect.aiEffectMove != 1) { return; } if (effect.range == null) { return; } if (effect.range.get_Count() < 3) { return; } float casterRadius = 0f; if (caster.Actor) { casterRadius = XUtility.GetHitRadius(caster.Actor.FixTransform); } this.MarkWarningMessage(basePoint.ApplyOffset(effect.offset), effect.range, casterRadius); this.MarkWarningMessage(basePoint.ApplyOffset(effect.offset), effect.range2, casterRadius); }
protected void MarkWarningMessageByDynamicWarningArea(EntityParent caster, EntityParent target, List <int> dynamicWarningArea) { if (dynamicWarningArea.get_Count() < 4) { return; } XPoint xPoint = null; int num = dynamicWarningArea.get_Item(0); if (num != 1) { if (num == 2) { if (!target.Actor) { return; } xPoint = new XPoint(); xPoint.position = target.Actor.FixTransform.get_position(); xPoint.rotation = target.Actor.FixTransform.get_rotation(); } } else { if (!caster.Actor) { return; } xPoint = new XPoint(); xPoint.position = caster.Actor.FixTransform.get_position(); xPoint.rotation = caster.Actor.FixTransform.get_rotation(); } List <int> list = new List <int>(); for (int i = 1; i < 4; i++) { list.Add(dynamicWarningArea.get_Item(i)); } float casterRadius = 0f; if (caster.Actor) { casterRadius = XUtility.GetHitRadius(caster.Actor.FixTransform); } this.MarkWarningMessage(xPoint, list, casterRadius); }
public override bool MoveToSkillTarget(float skillReach) { if (this.GetEntity().AITarget == null) { return(false); } if (!this.GetEntity().AITarget.Actor) { return(false); } float num = XUtility.DistanceNoY(base.FixTransform.get_position(), this.GetEntity().AITarget.Actor.FixTransform.get_position()) - (skillReach + XUtility.GetHitRadius(this.GetEntity().AITarget.Actor.FixTransform)); if (num <= -0.05f) { base.StopMoveToPoint(); return(false); } if (this.CurActionStatus != "run" && !this.CanChangeActionTo("run", true, 0, false) && ActionStatusName.IsSkillAction(this.CurActionStatus) && !this.GetEntity().IsMoveCast&& !base.IsUnderTermination) { return(false); } Vector3 vector = new Vector3(this.GetEntity().AITarget.Actor.FixTransform.get_position().x - base.FixTransform.get_position().x, 0f, this.GetEntity().AITarget.Actor.FixTransform.get_position().z - base.FixTransform.get_position().z); Vector3 normalized = vector.get_normalized(); Vector3 aIMoveFixPoint = base.GetAIMoveFixPoint(base.FixTransform.get_position(), this.GetEntity().AITarget.Actor.FixTransform.get_position(), normalized, num, XUtility.GetHitRadius(base.FixTransform)); this.MoveToPoint(aIMoveFixPoint, 0f, null); this.GetEntity().AIToPoint = new XPoint { position = aIMoveFixPoint }; return(true); }
public bool MoveToFollowTarget(FollowTargetType followTargetType, float searchRange, float startDistance, float stopDistance) { if (this.owner.IsWeak) { return(false); } if (!this.ownerActor) { return(false); } float hitRadius = XUtility.GetHitRadius(this.ownerActor.FixTransform); if (this.owner.FollowTarget == null) { List <EntityParent> list = new List <EntityParent>(); switch (followTargetType) { case FollowTargetType.Self: list.Add(EntityWorld.Instance.EntSelf); break; case FollowTargetType.OtherPlayer: list.AddRange(EntityWorld.Instance.GetEntities <EntityPlayer>().Values); break; case FollowTargetType.Boss: { List <EntityParent> values = EntityWorld.Instance.GetEntities <EntityMonster>().Values; for (int i = 0; i < values.get_Count(); i++) { if (values.get_Item(i).IsLogicBoss) { list.Add(values.get_Item(i)); } } break; } } EntityParent followTarget = null; float num = 3.40282347E+38f; for (int j = 0; j < list.get_Count(); j++) { if (list.get_Item(j).Actor) { if (list.get_Item(j).Actor.FixTransform) { float num2 = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), list.get_Item(j).Actor.FixTransform.get_position()) - hitRadius - XUtility.GetHitRadius(list.get_Item(j).Actor.FixTransform); if (num2 < searchRange && num2 < num) { followTarget = list.get_Item(j); num = num2; } } } } this.owner.FollowTarget = followTarget; } if (this.owner.FollowTarget == null) { return(false); } if (!this.owner.FollowTarget.Actor) { this.owner.FollowTarget = null; return(false); } float num3 = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.FollowTarget.Actor.FixTransform.get_position()) - hitRadius - XUtility.GetHitRadius(this.owner.FollowTarget.Actor.FixTransform); if (num3 < stopDistance) { this.ownerActor.StopMoveToPoint(); } else if (num3 > startDistance) { this.ownerActor.MoveToPoint(this.owner.FollowTarget.Actor.FixTransform.get_position(), 0f, null); } return(true); }
public bool CheckTargetDistanceBySkillIndex(int skillIndex) { int key; if (!this.GetSkillIDBySkillIndex(skillIndex, out key)) { return(false); } Skill skill = DataReader <Skill> .Get(key); if (skill == null) { return(false); } if (this.owner.AITarget == null) { return(false); } if (this.owner.AITarget.Actor == null || this.owner.AITarget.Actor.FixTransform == null) { return(false); } if (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) <= (float)skill.reach.get_Item(0) * 0.01f + XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) && XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) >= skill.reachLimit * 0.01f - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform)) { float num = Vector3.Angle(this.ownerActor.FixTransform.get_forward(), new Vector3(this.owner.AITarget.Actor.FixTransform.get_position().x, this.ownerActor.FixTransform.get_position().y, this.owner.AITarget.Actor.FixTransform.get_position().z) - this.ownerActor.FixTransform.get_position()); if (num <= (float)skill.reach.get_Item(1) || this.ownerActor.FixTransform.get_position() == this.owner.AITarget.Actor.FixTransform.get_position()) { return(true); } } return(false); }
public bool CheckTargetDistance(ComparisonOperator comparisonOperator1, float range1, ComparisonOperator comparisonOperator2, float range2, LogicalOperator logicalOperator) { if (!this.ownerActor) { return(false); } if (this.owner.AITarget == null || this.owner.AITarget.Actor == null || this.owner.AITarget.Actor.FixTransform == null) { return(false); } if (comparisonOperator1 == ComparisonOperator.None && comparisonOperator2 == ComparisonOperator.None) { return(false); } bool flag = false; switch (comparisonOperator1) { case ComparisonOperator.GreaterThan: flag = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) > range1); break; case ComparisonOperator.GreatThanOrEqual: flag = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) >= range1); break; case ComparisonOperator.Equal: flag = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) == range1); break; case ComparisonOperator.LessThanOrEqual: flag = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) <= range1); break; case ComparisonOperator.LessThan: flag = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) < range1); break; } if (comparisonOperator2 == ComparisonOperator.None) { return(flag); } bool flag2 = false; switch (comparisonOperator2) { case ComparisonOperator.GreaterThan: flag2 = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) > range2); break; case ComparisonOperator.GreatThanOrEqual: flag2 = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) >= range2); break; case ComparisonOperator.Equal: flag2 = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) == range2); break; case ComparisonOperator.LessThanOrEqual: flag2 = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) <= range2); break; case ComparisonOperator.LessThan: flag2 = (XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform) < range2); break; } if (comparisonOperator1 == ComparisonOperator.None) { return(flag2); } if (logicalOperator != LogicalOperator.And) { return(logicalOperator == LogicalOperator.Or && (flag || flag2)); } return(flag && flag2); }
public override void ClientBeginAssault(int skillID, EntityParent assaultTarget) { if (!this.ownerActor) { return; } if (assaultTarget == null) { return; } if (!assaultTarget.Actor) { return; } this.owner.IsAssault = true; this.assaultSkillID = skillID; Vector3 endPosition = this.ownerActor.FixTransform.get_position() + (assaultTarget.Actor.FixTransform.get_position() - this.ownerActor.FixTransform.get_position()).get_normalized() * (XUtility.DistanceNoY(assaultTarget.Actor.FixTransform.get_position(), this.ownerActor.FixTransform.get_position()) - XUtility.GetHitRadius(assaultTarget.Actor.FixTransform.get_transform())); this.ownerActor.TurnToPos(assaultTarget.Actor.FixTransform.get_position()); (this.ownerActor as ActorPlayer).ClientAssault(assaultTarget.ID, this.assaultSkillID, endPosition); }
public override bool ClientCastSkillByID(int skillID) { if (this.owner.IsClientDominate) { Skill skill = DataReader <Skill> .Get(skillID); if (skill.rush > 0) { this.owner.GetSkillManager().SetTargetBySkillID(skillID, TargetRangeType.SkillRange, (float)skill.rush); } else { this.owner.GetSkillManager().SetTargetBySkillID(skillID, TargetRangeType.SkillRange, 0f); } if (skill.rush > 0 && this.owner.AITarget != null && this.owner.AITarget.Actor) { float num = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - (float)skill.reach.get_Item(0) * 0.01f - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform); if (!this.owner.IsStatic && !this.owner.IsDizzy && !this.owner.IsWeak && !this.owner.IsFixed && !this.owner.IsAssault && !this.owner.IsHitMoving && num <= (float)skill.rush * 0.01f && num > 0f && this.CheckClientHandleSkillByID(skillID)) { this.ClientBeginAssault(skillID, this.owner.AITarget); return(false); } } return(base.ClientCastSkillByID(skillID)); } return(base.ClientCastSkillByID(skillID)); }
protected List <ActorModel> CheckCandidatesByEffectShape(List <ActorModel> candidates, Actor casterActor, XPoint basePoint, Effect effectData) { List <ActorModel> list = new List <ActorModel>(); if (casterActor == null) { return(list); } if (basePoint == null) { return(list); } GraghMessage graghMessage = null; GraghMessage graghMessage2 = null; bool flag = true; XPoint xPoint = basePoint.ApplyOffset(effectData.offset).ApplyOffset(effectData.offset2).ApplyForwardFix(effectData.forwardFixAngle); if (effectData.range.get_Count() > 2) { int num = Mathf.Abs(effectData.range.get_Item(0)); if (num != 1) { if (num == 2) { graghMessage = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Rect, 0f, 0f, (float)effectData.range.get_Item(1) * 0.01f, (float)effectData.range.get_Item(2) * 0.01f); } } else { graghMessage = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Sector, (float)effectData.range.get_Item(1) * 0.01f, (float)effectData.range.get_Item(2), 0f, 0f); } } if (effectData.range2.get_Count() > 2) { if (effectData.range2.get_Item(0) < 0) { flag = false; } int num = Mathf.Abs(effectData.range2.get_Item(0)); if (num != 1) { if (num == 2) { graghMessage2 = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Rect, 0f, 0f, (float)effectData.range2.get_Item(1) * 0.01f, (float)effectData.range2.get_Item(2) * 0.01f); } } else { graghMessage2 = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Sector, (float)effectData.range2.get_Item(1) * 0.01f, (float)effectData.range2.get_Item(2), 0f, 0f); } } if (graghMessage != null) { graghMessage.DrawShape(Color.get_red()); } if (graghMessage2 != null) { if (flag) { graghMessage2.DrawShape(Color.get_red()); } else { graghMessage2.DrawShape(Color.get_blue()); } } for (int i = 0; i < candidates.get_Count(); i++) { if (!(candidates.get_Item(i) == null)) { bool flag2 = false; float hitRadius = XUtility.GetHitRadius(candidates.get_Item(i).get_transform()); bool flag3 = graghMessage != null && graghMessage.InArea(candidates.get_Item(i).get_transform().get_position(), hitRadius); bool flag4 = graghMessage2 != null && graghMessage2.InArea(candidates.get_Item(i).get_transform().get_position(), hitRadius); if (flag) { if (flag3 || flag4) { flag2 = true; } } else if (flag3 && !flag4) { flag2 = true; } if (flag2) { list.Add(candidates.get_Item(i)); } } } return(list); }
protected List <Vector3> GetAccuratePointByWarningMessage(WarningMessage message) { List <Vector3> list = new List <Vector3>(); GraghShape graghShape = message.graghShape; if (graghShape != GraghShape.Sector) { if (graghShape == GraghShape.Rect) { list.AddRange(this.GetAccuratePointByRectangle(this.ownerActor.FixTransform.get_position(), message.fixBasePoint, message.width, message.height, XUtility.GetHitRadius(this.ownerActor.FixTransform), message.casterRadius)); } } else if (message.IsCircle) { list.AddRange(this.GetAccuratePointByCircle(this.ownerActor.FixTransform.get_position(), message.fixBasePoint, message.range, XUtility.GetHitRadius(this.ownerActor.FixTransform), message.casterRadius)); } else { list.AddRange(this.GetAccuratePointBySector(this.ownerActor.FixTransform.get_position(), message.fixBasePoint, message.range, message.angle, XUtility.GetHitRadius(this.ownerActor.FixTransform), message.casterRadius)); } return(list); }
protected Hashtable CheckCandidatesByEffectShape(List <EntityParent> candidates, List <ContainerGear> containers, Actor casterActor, XPoint basePoint, Effect effectData) { Hashtable hashtable = new Hashtable(); if (casterActor == null) { return(hashtable); } if (basePoint == null) { return(hashtable); } List <EntityParent> list = new List <EntityParent>(); List <ContainerGear> list2 = new List <ContainerGear>(); GraghMessage graghMessage = null; GraghMessage graghMessage2 = null; bool flag = true; XPoint xPoint = basePoint.ApplyOffset(effectData.offset).ApplyOffset(effectData.offset2).ApplyForwardFix(effectData.forwardFixAngle); if (effectData.range.get_Count() > 2) { int num = Mathf.Abs(effectData.range.get_Item(0)); if (num != 1) { if (num == 2) { graghMessage = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Rect, 0f, 0f, (float)effectData.range.get_Item(1) * 0.01f, (float)effectData.range.get_Item(2) * 0.01f); } } else { graghMessage = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Sector, (float)effectData.range.get_Item(1) * 0.01f, (float)effectData.range.get_Item(2), 0f, 0f); } } if (effectData.range2.get_Count() > 2) { if (effectData.range2.get_Item(0) < 0) { flag = false; } int num = Mathf.Abs(effectData.range2.get_Item(0)); if (num != 1) { if (num == 2) { graghMessage2 = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Rect, 0f, 0f, (float)effectData.range2.get_Item(1) * 0.01f, (float)effectData.range2.get_Item(2) * 0.01f); } } else { graghMessage2 = new GraghMessage(new XPoint { position = xPoint.position, rotation = xPoint.rotation }, GraghShape.Sector, (float)effectData.range2.get_Item(1) * 0.01f, (float)effectData.range2.get_Item(2), 0f, 0f); } } if (graghMessage != null) { graghMessage.DrawShape(Color.get_red()); } if (graghMessage2 != null) { if (flag) { graghMessage2.DrawShape(Color.get_red()); } else { graghMessage2.DrawShape(Color.get_blue()); } } for (int i = 0; i < candidates.get_Count(); i++) { if (candidates.get_Item(i) != null) { if (candidates.get_Item(i).Actor) { bool flag2 = false; float hitRadius = XUtility.GetHitRadius(candidates.get_Item(i).Actor.FixTransform); bool flag3 = graghMessage != null && graghMessage.InArea(candidates.get_Item(i).Actor.FixTransform.get_position(), hitRadius); bool flag4 = graghMessage2 != null && graghMessage2.InArea(candidates.get_Item(i).Actor.FixTransform.get_position(), hitRadius); if (flag) { if (flag3 || flag4) { flag2 = true; } } else if (flag3 && !flag4) { flag2 = true; } if (flag2) { list.Add(candidates.get_Item(i)); } } } } for (int j = 0; j < containers.get_Count(); j++) { if (containers.get_Item(j)) { if (containers.get_Item(j).get_gameObject()) { bool flag5 = false; bool flag6 = graghMessage != null && graghMessage.InArea(containers.get_Item(j).get_transform().get_position(), containers.get_Item(j).hitRange); bool flag7 = graghMessage2 != null && graghMessage2.InArea(containers.get_Item(j).get_transform().get_position(), containers.get_Item(j).hitRange); if (flag) { if (flag6 || flag7) { flag5 = true; } } else if (flag6 && !flag7) { flag5 = true; } if (flag5) { list2.Add(containers.get_Item(j)); } } } } hashtable.Add("Entity", list); hashtable.Add("Container", list2); return(hashtable); }
protected override void UpdateHpChangeInfluence(HPChangeMessage data) { switch (data.hpChangeType) { case HPChangeMessage.HPChangeType.Normal: case HPChangeMessage.HPChangeType.Critical: case HPChangeMessage.HPChangeType.Parry: case HPChangeMessage.HPChangeType.CriticalAndParry: if (base.IsPlayerMate) { if (!this.IsEntitySelfType && DataReader <JJiaoSeSheZhi> .Get(this.TypeID).hitTips > 0) { EventDispatcher.Broadcast <int, LiveTextMessage>(BattleUIEvent.LiveText, 1, new LiveTextMessage { contentID = DataReader <JJiaoSeSheZhi> .Get(this.TypeID).hitTips, showTime = 2000, name = this.Name }); } } else if (data.modeType == HPChangeMessage.ModeType.MonsterBySelf && base.Actor) { EventDispatcher.Broadcast <int, Transform>(CameraEvent.PlayerGetHit, this.TypeID, base.Actor.FixTransform); } break; case HPChangeMessage.HPChangeType.Miss: if (base.IsPlayerMate && !this.IsEntitySelfType && DataReader <JJiaoSeSheZhi> .Get(this.TypeID).hitTips > 0) { EventDispatcher.Broadcast <int, LiveTextMessage>(BattleUIEvent.LiveText, 1, new LiveTextMessage { contentID = DataReader <JJiaoSeSheZhi> .Get(this.TypeID).hitTips, showTime = 2000, name = this.Name }); } break; case HPChangeMessage.HPChangeType.KillRecover: if (base.Actor && !this.IsEntitySelfType) { int templateId = (int)float.Parse(DataReader <GlobalParams> .Get("killReply").value); float speed = float.Parse(DataReader <GlobalParams> .Get("killReplySpeed").value) * 0.01f; float lessDistance = float.Parse(DataReader <GlobalParams> .Get("killReplyHeight_y").value) * 0.01f; int getFxID = (int)float.Parse(DataReader <GlobalParams> .Get("killReply_get").value); FXManager.Instance.PlayFXOfFollow(templateId, data.casterPosition, base.Actor.FixTransform, speed, lessDistance, XUtility.GetHitRadius(base.Actor.FixTransform), delegate { if (!this.Actor) { return; } FXManager.Instance.PlayFX(getFxID, this.Actor.FixTransform, Vector3.get_zero(), Quaternion.get_identity(), 1f, 1f, 0, false, 0, null, null, 1f, FXClassification.Normal); WaveBloodManager.Instance.ThrowBlood(data); }, FXClassification.Normal); } break; } base.UpdateHpChangeInfluence(data); }
public override bool ClientCastSkillByID(int skillID) { if (!GlobalBattleNetwork.Instance.IsServerEnable) { if (this.IsOpenLog) { Debug.LogError("return 4"); } return(false); } Skill skill = DataReader <Skill> .Get(skillID); if (skill.rush > 0) { this.owner.GetSkillManager().SetTargetBySkillID(skillID, TargetRangeType.SkillRange, (float)skill.rush); } else { this.owner.GetSkillManager().SetTargetBySkillID(skillID, TargetRangeType.SkillRange, 0f); } if (skill.rush > 0 && this.owner.AITarget != null && this.owner.AITarget.Actor) { float num = XUtility.DistanceNoY(this.ownerActor.FixTransform.get_position(), this.owner.AITarget.Actor.FixTransform.get_position()) - (float)skill.reach.get_Item(0) * 0.01f - XUtility.GetHitRadius(this.owner.AITarget.Actor.FixTransform); if (!this.owner.IsStatic && !this.owner.IsDizzy && !this.owner.IsWeak && !this.owner.IsFixed && !this.owner.IsAssault && !this.owner.IsHitMoving && num <= (float)skill.rush * 0.01f && num > 0f && (!ActionStatusName.IsSkillAction(this.ownerActor.CurActionStatus) || this.ownerActor.IsUnderTermination) && this.ownerActor.CanChangeActionTo("rush", true, 0, false) && this.CheckClientHandleSkillByID(skillID)) { this.ClientBeginAssault(skillID, this.owner.AITarget); return(false); } } return(base.ClientCastSkillByID(skillID)); }