Exemplo n.º 1
0
    /// <summary>
    /// 当主主角使用技能成功时
    /// </summary>
    protected void OnMainPlayerUseAbility()
    {
        SmartActor target = owner.CurTarget as SmartActor;

        if (target == null)
        {
            return;
        }
        if (PlayerAutoFightFSM.IsEnemy(target))
        {
            switch (target.typeID)
            {
            case ObjectType.Entourage:
            case ObjectType.Player:
                if (lastPvpTraceTarget != target)
                {
                    lastPvpTraceTarget = target;
                    stateMachine.Send((int)EventType.PVP_FIGHT_TRACE);
                }
                break;

            case ObjectType.MOB:
                if (lastPveTraceTarget != target)
                {
                    lastPveTraceTarget = target;
                    stateMachine.Send((int)EventType.PVE_TRACE);
                }
                break;

            default:
                break;
            }
        }
    }
Exemplo n.º 2
0
    protected void OnCampUpdate(int _camp)
    {
        if (IsActor)
        {
            return;
        }
        IsFriend = !PlayerAutoFightFSM.IsEnemy(this);
        if (headTextCtrl != null)
        {
//            if (headTextCtrl.HasShowBlood)
//            {
//                headTextCtrl.SetBlood(actorInfo.MaxHP <= 0 ? 0 : actorInfo.CurHP / (float)actorInfo.MaxHP, IsFriend);
//            }
            headTextCtrl.SetNameColorAlongInterActive();
        }
    }
Exemplo n.º 3
0
 /// <summary>
 /// 尽量避免使用Awake等unity控制流程的接口来初始化,而改用自己调用的接口 by吴江
 /// </summary>
 protected override void Init()
 {
     base.Init();
     if (actorInfo != null)
     {
         id = actorInfo.ServerInstanceID;
     }
     rendererCtrl = base.rendererCtrl as SmartActorRendererCtrl;
     animFSM      = base.animFSM as SmartActorAnimFSM;
     foreach (BuffInfo item in actorInfo.BuffList.Values)
     {
         OnBuffUpdate(item.BuffTypeID, true);
     }
     if (GameCenter.curMainPlayer != null)
     {
         IsFriend = !PlayerAutoFightFSM.IsEnemy(this);
     }
 }
Exemplo n.º 4
0
    /// <summary>
    /// 切换目标怪物
    /// </summary>
    public static SmartActor GetAnotherSmartActor(this GameStage _gameStage, int _old, Vector3 _comparePos)
    {
        List <Monster>     monsters = _gameStage.GetMobs();
        List <OtherPlayer> opcs     = _gameStage.GetOtherPlayers();
        List <SmartActor>  sActors  = new List <SmartActor>();

        int       selfCamp  = GameCenter.curMainPlayer.Camp;
        SceneType sceneType = GameCenter.curGameStage.SceneType;
        SceneRef  sceneRef  = GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef;

        for (int i = 0; i < opcs.Count; i++)
        {
            if (sceneRef != null && sceneRef.pk_mode == 0)
            {
                break;                //不强制玩家切换PK模式的场景里,切换目标不锁定玩家
            }
            OtherPlayer opc = opcs[i];
            if (opc.isDead || opc.actorInfo.IsHide)
            {
                continue;
            }
            if (PlayerAutoFightFSM.IsEnemy(opc) && !opc.IsActor && !opc.isDead)            //修改玩家是否敌对判断  by邓成
            {
                if ((_comparePos - opc.transform.position).sqrMagnitude <= 15.0f * 15.0f)  //2015/12/30 翟照要求15距离以内
                {
                    sActors.Add(opc);
                }
            }
        }

        for (int i = 0; i < monsters.Count; i++)
        {
            Monster mob = monsters[i];
            if (mob.isDummy || !mob.IsShowing || mob.isDead)
            {
                continue;
            }
            if (GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef != null)
            {
                if (GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef.sort == SceneType.SCUFFLEFIELD)
                {
                    if (GameCenter.systemSettingMng.IsHideBoss && mob.actorInfo.IsBoss)
                    {
                        continue;//自动寻怪避开BOSS  by黄洪兴
                    }
                }
            }
            if (ConfigMng.Instance.GetRelationType(selfCamp, mob.Camp, sceneType) == RelationType.AUTOMATEDATTACKS && !mob.IsActor && !mob.isDead)
            {
                if ((_comparePos - mob.transform.position).sqrMagnitude <= 15.0f * 15.0f)                 //2015/12/30 翟照要求15距离以内
                {
                    sActors.Add(mob);
                }
            }
        }
        int count = sActors.Count;

        if (count == 0)
        {
            return(null);
        }
        if (count == 1)
        {
            return(sActors[0]);
        }
        System.Random rm   = new System.Random();
        int           flag = 0;

        while (true)
        {
            flag++;
            if (flag > count)
            {
                break;
            }
            int        index   = rm.Next(0, count - 1);
            SmartActor monster = sActors[index];
            if (monster.id != _old)
            {
                return(monster);
            }
        }
        return(null);
    }