//在NPC有MoveToPointrequest时候,玩家传送时多人处理:controler丢失直接让NPC传送到需求点 public void RequsetProtect() { if (Contains(EReqType.MoveToPoint)) { if (Entity != null && Entity.NpcCmpt != null) { RQMoveToPoint request = GetRequest(EReqType.MoveToPoint) as RQMoveToPoint; if (request != null) { Vector3 pos = request.position; StroyManager.Instance.EntityReach(Entity, true); Entity.NpcCmpt.Req_Remove(EReqType.MoveToPoint); Entity.NpcCmpt.Req_Translate(pos); } } } if (Contains(EReqType.TalkMove)) { if (Entity != null && Entity.NpcCmpt != null) { RQTalkMove request = GetRequest(EReqType.TalkMove) as RQTalkMove; if (request != null) { Vector3 pos = request.position; Entity.NpcCmpt.Req_Remove(EReqType.TalkMove); Entity.NpcCmpt.Req_Translate(pos); } } } if (Contains(EReqType.FollowTarget)) { if (Entity != null && Entity.NpcCmpt != null) { RQFollowTarget request = GetRequest(EReqType.FollowTarget) as RQFollowTarget; if (request != null) { PeEntity target = EntityMgr.Instance.Get(request.id); if (target != null) { Vector3 pos = target.position; Entity.NpcCmpt.Req_Remove(EReqType.FollowTarget); Entity.NpcCmpt.Req_Translate(pos, true, false); Entity.NpcCmpt.Req_FollowTarget(target.Id, request.targetPos, request.dirTargetID, request.tgtRadiu); } } } } }
public void RemoveRequest(Request request) { if (request == null) { return; } if (request.Type == EReqType.MoveToPoint && StroyManager.Instance != null) { RQMoveToPoint R_move = request as RQMoveToPoint; if (R_move != null) { bool isreached = PETools.PEUtil.MagnitudeH(Entity.position, R_move.position) < R_move.stopRadius; StroyManager.Instance.EntityReach(Entity, isreached); } } if (m_Request[(int)request.Type] != null && m_Request[(int)request.Type].Equals(request)) { m_Request[(int)request.Type] = null; } if (PeGameMgr.IsSingle && Entity.BehaveCmpt != null && m_View != null && !m_View.hasView && !HasRequest()) { Entity.BehaveCmpt.Stopbehave(); } if (PeGameMgr.IsMulti && Entity != null && Entity.netCmpt != null && request.Type == EReqType.FollowPath) { if (Entity.netCmpt.network.hasOwnerAuth) { Entity.netCmpt.network.RPCServer(EPacketType.PT_NPC_RequestAiOp, (int)EReqType.Remove, (int)EReqType.FollowPath, (request as RQFollowPath).VerifPos); } } if (PeGameMgr.IsMulti && Entity != null && Entity.netCmpt != null && request.Type == EReqType.FollowTarget && !PeGameMgr.IsStory) { if (Entity.netCmpt.network.hasOwnerAuth) { Entity.netCmpt.network.RPCServer(EPacketType.PT_NPC_RequestAiOp, (int)EReqType.Remove, (int)EReqType.FollowTarget); } } }
public Request Register(EReqType type, params object[] objs) { Request request = null; switch (type) { case EReqType.Dialogue: request = new RQDialogue(objs); break; case EReqType.Idle: request = new RQIdle(objs); break; case EReqType.Animation: request = new RQAnimation(objs); break; case EReqType.MoveToPoint: request = new RQMoveToPoint(objs); break; case EReqType.TalkMove: request = new RQTalkMove(objs); break; case EReqType.FollowPath: request = new RQFollowPath(objs); break; case EReqType.FollowTarget: request = new RQFollowTarget(objs); break; case EReqType.Salvation: request = new RQSalvation(objs); break; case EReqType.Translate: request = new RQTranslate(objs); break; case EReqType.Rotate: request = new RQRotate(objs); break; case EReqType.Attack: request = new RQAttack(); break; case EReqType.PauseAll: request = new RQPauseAll(); break; case EReqType.UseSkill: request = new RQUseSkill(); break; } if (!CalculateRelation(request)) { return(null); } AddRequest(request); return(request); }