123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using CommonAI.RTS;
- using CommonAI.Zone;
- using CommonAI.Zone.Formula;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- using CommonLang;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace XmdsCommonServer.Plugin.Units
- {
- public class XmdsInstanceNPC : InstanceGuard
- {
- private bool mIsBattleable;
- public override bool IsNature { get { return !this.mIsBattleable; } }
- public override bool IsActive { get { return this.mIsBattleable; } }
- public override bool IsAttackable { get { return this.mIsBattleable; } }
- private float mGuardRangeLimit;
- private float mGuardRange;
- public XmdsInstanceNPC(InstanceZone zone, UnitInfo info, string name, int force, int level)
- : base(zone, info, name, force, level)
- {
- //该类型,单位无法被攻击.
- this.mIsBattleable = info.UType != UnitInfo.UnitType.TYPE_NEUTRALITY && info.UType != UnitInfo.UnitType.TYPE_NPC;
- //阵营为0无法被攻击.
- if (force == 0)
- {
- this.mIsBattleable = false;
- }
- mGuardRangeLimit = info.GuardRangeLimit;
- mGuardRange = info.GuardRange;
- }
- protected override void updateBackToOrgin()
- {
- if (mBackToPosition != null)
- {
- if (mBackToPosition.IsDone)
- {
- mBackToPosition = null;
- }
- }
- if (mOrginPosition != null && mGuardRangeLimit > mGuardRange)
- {
- //if (mCheckInGuardLimit.Update(Parent.UpdateIntervalMS))
- if (mNextCheckGuardLimit != null && mNextCheckGuardLimit.IsTrigger())
- {
- if (!CMath.includeRoundPoint(X, Y, mGuardRangeLimit, mOrginPosition.X, mOrginPosition.Y))
- {
- backToOrgin();
- }
- else if (mTracingTarget != null)
- {
- if (!mTracingTarget.IsActive || !CMath.intersectRound(
- X, Y, mGuardRangeLimit,
- mTracingTarget.TargetUnit.X,
- mTracingTarget.TargetUnit.Y,
- mTracingTarget.TargetUnit.BodyHitSize))
- {
- backToOrgin();
- return;
- }
- }
- }
- }
- }
- public void SetGuardRange(float r)
- {
- if (mViewTrigger is ViewTriggerRoundBody)
- {
- mGuardRange = r;
- (mViewTrigger as ViewTriggerRoundBody).SetLookRange(r);
- }
- }
- protected override void onNewStateBeginChange(State old_state, ref State new_state)
- {
- if (new_state is StateBackToPosition)
- {
- //回血.
- this.AddHP(this.MaxHP, null);
- this.AddMP(this.MaxMP, null);
- this.Virtual.StartRecoverMP(true);
- //去BUFF.
- this.clearBuffs();
- }
- base.onNewStateBeginChange(old_state, ref new_state);
- }
- public override void InitSkills(LaunchSkill baseSkill, params LaunchSkill[] skills)
- {
- if (this.Virtual == null ||
- (this.Virtual as XmdsVirtual).IsFinishSkillInit() == false)
- {
- return;
- }
- base.InitSkills(baseSkill, skills);
- }
- public override bool tryLaunchRandomSkillAndCancelCurrentSkill(InstanceUnit target, bool autoFocusNearTarget = false)
- {
- //自动战斗不允许中断当前技能施放.
- return false;
- }
- }
- }
|