예제 #1
0
        /// <summary>
        /// 在已经挂掉的npc缓冲中注册该npc
        /// </summary>
        /// <param name="npc">Npc.</param>
        public void SignDeadNpcCache(BNPC npc)
        {
            List <BNPC> npcList = null;

            if (cacheNpcDic.TryGetValue(npc.data.num, out npcList))
            {
                bool bFind = false;
                for (int i = 0; i < npcList.Count; i++)
                {
                    if (npcList [i].UniqueID == npc.UniqueID)
                    {
                        npcList [i] = npc;
                        bFind       = true;
                        break;
                    }
                }
                if (!bFind)
                {
                    npcList.Add(npc);
                }
            }
            else
            {
                npcList = new List <BNPC> ();
                npcList.Add(npc);
                cacheNpcDic.Add(npc.data.num, npcList);
            }
        }
예제 #2
0
        /// <summary>
        /// 从缓存中删除NPC
        /// </summary>
        /// <param name="npc">Npc.</param>
        public void RemoveNpcFromCache(BNPC npc)
        {
            List <BNPC> npcList = null;

            if (cacheNpcDic.TryGetValue(npc.data.num, out npcList))
            {
                for (int i = 0; i < npcList.Count; i++)
                {
                    if (npcList [i].UniqueID == npc.UniqueID)
                    {
                        npcList.Remove(npcList[i]);
                        return;
                    }
                }
            }
        }
예제 #3
0
 public void Init(AnimationMsg msg)
 {
     wmMgr = WarClientManager.Instance;
     tran  = transform;
     if (msg != null)
     {
         speed  = msg.arg1;
         maxDis = msg.arg2;
         if (wmMgr != null)
         {
             BNPC npc = wmMgr.npcMgr.GetNpc(msg.targetId);
             if (npc != null)
             {
                 Target = npc.transform;
             }
         }
     }
     inited = true;
 }
예제 #4
0
        /// <summary>
        /// Init the specified owner and param.
        /// </summary>
        /// <param name="owner">Owner.</param>
        /// <param name="param">Parameter.</param>
        public override void Init(ServerNPC owner, WarMsgParam param)
        {
            parent = owner;
            tran   = transform;
            wmMgr  = WarServerManager.Instance;
            Camp   = Camp.set(parent.Camp);

            WarSrcAnimParam srcParam = param as WarSrcAnimParam;

            if (srcParam != null)
            {
                SelfDescribed sd = srcParam.described;
                if (sd != null)
                {
                    EndResult result      = sd.targetEnd;
                    int       effectIndex = result.param2;
                    targetIndex = result.param5;
                    if (targetIndex > 0)
                    {
                        if (wmMgr != null)
                        {
                            target = wmMgr.npcMgr.GetNPCByUniqueID(targetIndex);
                        }
                    }
                    EffectConfigData effect = Core.Data.getIModelConfig <EffectModel>().get(effectIndex);
                    if (effect != null)
                    {
                        effectID      = effectIndex;
                        speed         = effect.Param3 / 1000f;
                        maxDis        = effect.Param4 / 1000;
                        damageType    = effect.Param8;
                        disappearType = effect.Param5;
                    }
//                    string msg = string.Format("[effect:{0} speed:{1} maxDis:{2} disappearType:{3} damageType:{4}]", effectID, speed, maxDis, disappearType, damageType);
//                    Debug.Log(msg);
                }
                inited = true;
            }
        }
예제 #5
0
 public override void EmitEffect(ClientNPC _from, ClientNPC _target, bool _needUpdate = true)
 {
     From   = _from;
     Target = _target;
 }
예제 #6
0
        //初始化AI
        private void InitAi(BNPC npc)
        {
            //如果是npc刷新点
            if (npc.data.num == NpcMgr <ServerNPC> .FRESH_NPC)
            {
                #if NO_SOLDIER
                #else
                BehaviorTree tree = npc.gameObject.GetComponent <BehaviorTree> ();
                if (tree == null)
                {
                    tree = npc.gameObject.AddComponent <BehaviorTree>();
                }

                tree.ExternalBehavior    = AiLoader.load(AILoader.NPC_FRESH);
                tree.StartWhenEnabled    = true;
                tree.RestartWhenComplete = false;
                #endif
            }
            else
            {
                NPCAIType type = (NPCAIType)npc.dataInScene.AIType;
                switch (type)
                {
                case NPCAIType.Pathfind_Atk:
                {
                    BehaviorTree tree = npc.gameObject.GetComponent <BehaviorTree> ();
                    if (tree == null)
                    {
                        tree = npc.gameObject.AddComponent <BehaviorTree>();
                    }

                    tree.ExternalBehavior    = AiLoader.load(AILoader.PATHFIND_ATK);
                    tree.StartWhenEnabled    = true;
                    tree.RestartWhenComplete = true;
                    break;
                }

                case NPCAIType.Simple_PfAtk:
                {
                    BehaviorTree tree = npc.gameObject.GetComponent <BehaviorTree> ();
                    if (tree == null)
                    {
                        tree = npc.gameObject.AddComponent <BehaviorTree>();
                    }

                    tree.ExternalBehavior    = AiLoader.load(AILoader.SIMPLE_PFATK);
                    tree.StartWhenEnabled    = true;
                    tree.RestartWhenComplete = true;
                    break;
                }

                case NPCAIType.Patrol:
                {
                    BehaviorTree tree = npc.gameObject.GetComponent <BehaviorTree> ();
                    if (tree == null)
                    {
                        tree = npc.gameObject.AddComponent <BehaviorTree>();
                    }

                    tree.ExternalBehavior    = AiLoader.load(AILoader.NORMAL_ATTACK);
                    tree.StartWhenEnabled    = true;
                    tree.RestartWhenComplete = true;
                    break;
                }
                }
            }
        }
예제 #7
0
        public virtual void On_CastSkill(WarMsgParam param)
        {
            if (STATE != NpcAnimState.Killed && !isCastSkill)
            {
//                WarSrcAnimParam srcParam = param as WarSrcAnimParam;
//                int index = param.arg1;
//                List<ISkImp> ops = null;
//                ISkImp sk = null;
//                if (!sk_Imps.TryGetValue(index, out ops))
//                {
//                    ops = new List<ISkImp>();
//                    sk_Imps.Add(index, ops);
//                }
//                sk = ops.Find(imp => imp.SkOp() == srcParam.OP);
//                if (sk == null)
//                {
//                    sk = SkImpFactory.getSkImp(srcParam.OP);
//                    ops.Add(sk);
//                }
//                sk.Reset();
//                sk.InitSk(cachedNpc, param);
//                sk.CastSk();
            }
            if (STATE != NpcAnimState.Killed && !isAttack && !isCastSkill)
            {
                WarSrcAnimParam srcParam = param as WarSrcAnimParam;
                Debug.Log(JSON.Instance.ToJSON(param));
                skParam = srcParam;
                if (srcParam != null)
                {
                    STATE = NpcAnimState.CastSkill;
                    Effect3DModelConfigData ecd = Core.Data.getIModelConfig <Effect3DModel>().get(srcParam.ShootAction);
                    if (ecd != null)
                    {
                        isCastSkill         = true;
                        canNextAnim         = false;
                        canTriggerEvent     = true;
                        animationTimer      = srcParam.ShootTime;
                        animationEventTimer = srcParam.ShootEventTime;
                        SetHandler          = Skill_Handle;

                        AnimationMsg msg = new AnimationMsg();
                        msg.animationTimer      = animationTimer;
                        msg.animationEventTimer = animationEventTimer;
                        msg.index         = param.arg1;
                        msg.ecd           = ecd;
                        msg.animationName = ecd.Anim;
                        msg.targetId      = 0;

                        if (srcParam.described != null && srcParam.OP == EffectOp.CtorNPC)
                        {
                            EndResult          result = srcParam.described.srcEnd;
                            CreatNpcDepandency cnd    = (CreatNpcDepandency)result.obj;
                            msg.objCrtV = cnd.TargetVector3;
                        }

                        WarTarAnimParam[] targets = skParam.InjureTar;
                        BNPC npc = null;
                        if (targets != null && targets.Length > 0)
                        {
                            msg.targetId = targets[0].described.target;
                            npc          = serMgr.npcMgr.GetNPCByUniqueID(targets[0].described.target);
                            if (npc != null)
                            {
                                lastTarget = "Target:" + targets[0].described.target;
                                Vector3 pos = npc.transform.position;
                                pos.y = cachedTran.position.y;
                                cachedTran.LookAt(pos);
                            }
                        }

                        string a_data = JSON.Instance.ToJSON(msg);

                        NpcAnimInfo info = new NpcAnimInfo()
                        {
                            ClientID  = DeviceInfo.GUID,
                            nextState = NpcAnimState.CastSkill,
                            data      = a_data,
                        };

                        animMsg.nextAnim = WarMsg_Type.UseSkill.ToString();
                        animMsg.uniqueId = cachedNpc.UniqueID;
                        animMsg.data     = JSON.Instance.ToJSON(info);

                        if (serMgr != null)
                        {
                            serMgr.realServer.proxyCli.NPCAnim(animMsg);
                        }
                    }
                    else
                    {
                        On_Stand(null);
                    }
                }
            }
        }
예제 #8
0
        public virtual void On_Attack(WarMsgParam param)
        {
            if (STATE != NpcAnimState.Killed && !isAttack && !isCastSkill)
            {
                WarSrcAnimParam srcParam = param as WarSrcAnimParam;
                atkParam = srcParam;
//                Debug.Log(JSON.Instance.ToJSON(atkParam), gameObject);
                if (srcParam != null)
                {
                    int index = cachedNpc.AttIndex;
                    STATE = NpcAnimState.Attack;
                    Effect3DModelConfigData ecd = Core.Data.getIModelConfig <Effect3DModel>().get(srcParam.ShootAction);
                    if (ecd != null)
                    {
                        isAttack            = true;
                        canNextAnim         = false;
                        canTriggerEvent     = true;
                        animationTimer      = srcParam.ShootTime;
                        animationEventTimer = srcParam.ShootEventTime;
                        attackWaitForNext   = 0.3f;
                        attackIndex         = index;
                        SetHandler          = AttackHandle;

                        WarTarAnimParam[] targets = atkParam.InjureTar;
                        BNPC npc = null;
                        if (targets != null && targets.Length > 0)
                        {
                            npc = serMgr.npcMgr.GetNPCByUniqueID(targets[0].described.target);
                            if (npc != null)
                            {
                                lastTarget = "Target:" + targets[0].described.target;
                                Vector3 pos = npc.transform.position;
                                pos.y = cachedTran.position.y;
                                cachedTran.LookAt(pos);
                            }
                        }

                        AnimationMsg msg = new AnimationMsg();
                        msg.animationTimer      = animationTimer;
                        msg.animationEventTimer = animationEventTimer;
                        msg.index         = index;
                        msg.ecd           = ecd;
                        msg.animationName = ecd.Anim;
                        msg.targetId      = (npc == null) ? 0 : npc.UniqueID;
                        msg.arg1          = srcParam.described.targetEnd.param8;
                        msg.arg2          = srcParam.described.targetEnd.param9;

                        string a_data = JSON.Instance.ToJSON(msg);

                        NpcAnimInfo info = new NpcAnimInfo()
                        {
                            ClientID  = DeviceInfo.GUID,
                            nextState = NpcAnimState.Attack,
                            data      = a_data,
                        };

                        animMsg.nextAnim = WarMsg_Type.Attack.ToString();
                        animMsg.uniqueId = cachedNpc.UniqueID;
                        animMsg.data     = JSON.Instance.ToJSON(info);

                        if (serMgr != null)
                        {
                            serMgr.realServer.proxyCli.NPCAnim(animMsg);
                        }
                    }
                    else
                    {
                        On_Stand(null);
                    }
                }
            }
        }