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; } } } } } }
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); } } } }
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); } } } }
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); } } } }