/// <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); } }
/// <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; } } } }
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; }
/// <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; } }
public override void EmitEffect(ClientNPC _from, ClientNPC _target, bool _needUpdate = true) { From = _from; Target = _target; }
//初始化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; } } } }
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_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); } } } }