CreatNpcDepandency ctorToShowcase(bool Collide, NPCData data, int[] BuffIDList, List <UVec3> TargetVec3, ServerNPC src = null) { CreatNpcDepandency depandency = new CreatNpcDepandency() { IsCollide = Collide, Source = data, Buff_IDs = BuffIDList, }; int Vec3Cnt = TargetVec3.Count; depandency.TargetVector3 = new List <Vec3F>(); if (Vec3Cnt > 0) { for (int i = 0; i < Vec3Cnt; ++i) { depandency.TargetVector3.Add(TargetVec3[i].toCustomVec3()); } } else { depandency.TargetVector3.Add(src.transform.position.toCustomVec3()); } return(depandency); }
CreatNpcDepandency ctorToShowcase(NPCRuntimeData rt, NPCConfigData cfg, int[] BuffIDList, UVec3 TargetVec3) { NPCData data = new NPCData() { configData = cfg, rtData = rt, }; //有碰撞 bool Collide = true; CreatNpcDepandency depandency = new CreatNpcDepandency() { IsCollide = Collide, Source = data, Buff_IDs = BuffIDList, TargetVector3 = new List <Vec3F>(), }; depandency.TargetVector3.Add(TargetVec3.toCustomVec3()); return(depandency); }
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 void CastSk(params Object[] args) { if (castor != null && param != null) { WarSrcAnimParam srcParam = param as WarSrcAnimParam; if (srcParam != null) { SelfDescribed sd = srcParam.described; if (sd != null) { EndResult result = sd.srcEnd; CreatNpcDepandency cnd = (CreatNpcDepandency)result.obj; if (cnd != null && cnd.TargetVector3 != null) { VirtualNpcLoader loader = Core.ResEng.getLoader <VirtualNpcLoader>(); GameObject obj = null; Vector3 pos = Vector3.zero; foreach (Vec3F v in cnd.TargetVector3) { pos = v.toUnityVec3(); int id = result.param1; obj = loader.LoadNpcObj(id, castor.Camp, pos, Quaternion.LookRotation(Vector3.back)); if (obj != null) { ServerNPC npc = obj.GetComponent <ServerNPC>(); if (npc != null) { SendCrtNpcMsg(npc); castor.addChildNpc(npc); npc.data = cnd.Source; npc.Init(castor, srcParam); if (npc.collider != null) { npc.collider.enabled = cnd.IsCollide; } if (npc is LifeSummonNPC) { AttachAI(npc, result.param2); } if (cnd.Buff_IDs != null) { for (int i = 0; i < cnd.Buff_IDs.Length; i++) { BuffCtorParam bp = new BuffCtorParam(); bp.bufNum = cnd.Buff_IDs[i]; bp.fromNpcId = castor.UniqueID; bp.toNpcId = npc.UniqueID; bp.origin = AW.Data.OriginOfBuff.Alone; bp.duration = Consts.USE_BUFF_CONFIG_DURATION; bp.initLayer = 1; WarServerManager.Instance.bufMgr.createBuff(bp); } } } } } } } } } }