Пример #1
0
 public virtual void On_Effect(WarMsgParam param)
 {
     if (param != null)
     {
         string        m_str = param.param as string;
         NpcEffectInfo info  = JSON.Instance.ToObject <NpcEffectInfo>(m_str);
         if (info != null && info.to == cachedNpc.UniqueID)
         {
             Effect3DModelConfigData ecd = Core.Data.getIModelConfig <Effect3DModel>().get(info.hitAction);
             if (ecd != null)
             {
                 GameObject obj = null;
                 string     key = info.from + "_" + ecd.Start;
                 Debug.Log(key, gameObject);
                 if (info.Op == 0)
                 {
                     obj = WarEffectLoader.Load(ecd.Start);
                     if (obj != null)
                     {
                         obj = Instantiate(obj, cachedTran.position, cachedTran.rotation) as GameObject;
                         obj.transform.parent = cachedTran;
                         SkillEffectBase seb    = obj.GetComponent <SkillEffectBase>();
                         ClientNPC       srcNpc = cliMgr.npcMgr.GetNpc(info.from);
                         if (seb != null)
                         {
                             seb.EmitEffect(srcNpc, cachedNpc, false);
                         }
                         if (!uiEffectCache.ContainsKey(key))
                         {
                             uiEffectCache.Add(key, obj);
                         }
                     }
                     else
                     {
                         Debug.Log(string.Format("Fail to load effect obj with name:{0} from:{1} shootAction:{2}", ecd.Start, info.from));
                     }
                 }
                 else
                 {
                     if (uiEffectCache.TryGetValue(key, out obj))
                     {
                         uiEffectCache.Remove(key);
                         Destroy(obj);
                         obj = null;
                     }
                 }
             }
         }
     }
 }
Пример #2
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);
                    }
                }
            }
        }
Пример #3
0
        public virtual void On_CastTrigger(WarMsgParam param)
        {
            if (STATE != NpcAnimState.Killed)
            {
                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;
                skParam = srcParam;
                if (srcParam != null)
                {
                    STATE = NpcAnimState.CastTrigger;
                    Effect3DModelConfigData ecd = Core.Data.getIModelConfig <Effect3DModel>().get(srcParam.ShootAction);
                    if (ecd != null)
                    {
                        isCastSkill         = true;
                        canNextAnim         = false;
                        canTriggerEvent     = true;
                        animationTimer      = srcParam.ShootTime;
                        animationEventTimer = 0.2f;
                        SetHandler          = Trigger_Handle;

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

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

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

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

                        if (serMgr != null)
                        {
                            serMgr.realServer.proxyCli.NPCAnim(animMsg);
                        }
                    }
                    else
                    {
                        On_Stand(null);
                    }
                }
            }
        }
Пример #4
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);
                    }
                }
            }
        }