示例#1
0
        public uint Execute(PacketDistributed ipacket)
        {
            GC_PLAY_MODELSOTRY packet = (GC_PLAY_MODELSOTRY)ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }
            //enter your logic
            if (packet.ModelStoryID == GlobeVar.YanMenGuan_ModelStoryID)
            {
                Obj_MainPlayer mainplayer = Singleton <ObjManager> .Instance.MainPlayer;
                if (mainplayer == null)
                {
                    return((uint)PACKET_EXE.PACKET_EXE_ERROR);
                }
                //mainplayer.CameraController.InitCameraTrack(mainplayer.Position, curBoss.Position);
                mainplayer.ModelStoryID = packet.ModelStoryID;

                mainplayer.StopMove();
                Vector3 posTarget        = new Vector3(13.9f, 0, 27.4f);
                Vector3 posTargetTerrain = ActiveScene.GetTerrainPosition(posTarget);
                mainplayer.MoveTo(posTargetTerrain);
            }
            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#2
0
    void OnSceneMapClick()
    {
        Vector3 worldPos = UICamera.currentCamera.ScreenToWorldPoint(UICamera.lastTouchPosition);
        Vector3 localPos = m_TextureMap.transform.InverseTransformPoint(worldPos);
        Vector3 mapPos   = MapPosToScenePos(localPos, m_curTabScene);

        AutoSearchPoint point = new AutoSearchPoint(m_curSceneID, mapPos.x, mapPos.z);

        if (GameManager.gameManager && GameManager.gameManager.AutoSearch)
        {
            if (Singleton <ObjManager> .GetInstance().MainPlayer)
            {
                //验证导航是否可达,如果不可达,不进行移动
                Vector3 testVec = new Vector3(point.PosX, 0, point.PosZ);
                testVec = ActiveScene.GetTerrainPosition(testVec);
                if (!Singleton <ObjManager> .GetInstance().MainPlayer.IsMoveNavAgent(testVec))
                {
                    return;
                }
            }

            GameManager.gameManager.AutoSearch.ProcessAutoSearch(point);
        }

        if (m_ClickEffectSprite != null && m_ClickEffectTran != null)
        {
            m_ClickEffectTran.localPosition = localPos;
            m_ClickEffectSprite.gameObject.SetActive(true);
        }
        else
        {
            LogModule.ErrorLog("OnSceneMapClick::m_ClickEffectSprite = null || m_ClickEffectTran = null");
        }
    }
示例#3
0
        private void UpdateFellowMove()
        {
            SetMoveSpeedAsMainPlayer();
            Obj_MainPlayer mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

            //TODO 判读是否在战斗
            Vector3 targetPos = GetFellowPos(mainPlayer);

            if (Vector3.Distance(Position, targetPos) >= 6)
            {
                //距离太远 直接拉过去
                if (NavAgent != null)
                {
                    UnityEngine.GameObject.DestroyImmediate(NavAgent);
                }
                m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(targetPos.x, 0f, targetPos.z));
                if (NavAgent == null)
                {
                    InitNavAgent();
                }
            }
            else if (Vector3.Distance(Position, targetPos) >= 2 || (IsMoving && Vector3.Distance(Position, targetPos) >= 1))
            {
                MoveTo(targetPos, null, 0f);
            }
        }
    /// <summary>
    /// 重计算路径
    /// </summary>
    /// <returns><c>true</c>, if path was calculated, <c>false</c> otherwise.</returns>
    private bool CalculatePath()
    {
        if (null == m_mainPlayer)
        {
            return(false);
        }
        m_fReCalcPathtimer = m_fReCalcPathInterval;
        if (m_mainPlayer.NavAgent == null || m_mainPlayer.NavAgent.enabled == false)
        {
            return(false);
        }
        // navMeshAgent寻路的当前场景目标点
        Vector3 currentSceneDestination = Vector3.zero;

        // 如果目标点在当前场景
        if (m_Destination.SceneID == GameManager.gameManager.RunningScene)
        {
            currentSceneDestination = new Vector3(m_Destination.PosX, 0, m_Destination.PosZ);
            currentSceneDestination = ActiveScene.GetTerrainPosition(currentSceneDestination);
            // 判断是否已经到了目标点
            Vector3 playerPos   = m_mainPlayer.Position;
            float   distanceSqr = (playerPos.x - currentSceneDestination.x) * (playerPos.x - currentSceneDestination.x) +
                                  (playerPos.y - currentSceneDestination.y) * (playerPos.y - currentSceneDestination.y) +
                                  (playerPos.z - currentSceneDestination.z) * (playerPos.z - currentSceneDestination.z);
            if (distanceSqr < m_fCornerReachCheckDistanceSqr)
            {
                return(false);
            }
        }
        else
        {
            // todo
            AutoSearchPoint startPoint = AutoSearchPoint.MakePoint(m_mainPlayer.gameObject);

            m_Path.ResetPath();
            if (GameManager.gameManager.AutoSearch.FindPath(startPoint, m_Destination, ref m_Path))
            {
            }
            return(false);
        }

        // 利用NavMeshAgent寻得路径
        if (m_mainPlayer.NavAgent.CalculatePath(currentSceneDestination, m_NavPath))
        {
            m_NavPathCorners = m_NavPath.corners;
            // 第0个点是当前位置
            m_nNextCornerIdx = 1;
            return(true);
        }
        else
        {
            CancelGuide();
            return(false);
        }
    }
示例#5
0
        public bool Init(ObjSnare_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = transform;
            }

            //服务器发过来的信息
            ServerID  = initData.m_ServerID;
            SnareId   = initData.m_SnareID;
            OwerobjID = initData.m_OwnerObjId;
            OwnerGuid = initData.m_OwerGuid;
            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));
            Obj_Character ownerCharacter = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(OwerobjID);

            //修正陷阱的高度和陷阱释放者一样
            if (ownerCharacter != null)
            {
                Vector3 newPosVector3 = m_ObjTransform.position;
                newPosVector3.y         = ownerCharacter.ObjTransform.position.y;
                m_ObjTransform.position = newPosVector3;
            }

            //初始化特效
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>();
            }

            Tab_SnareObjInfo SnareInfo = TableManager.GetSnareObjInfoByID(SnareId, 0);

            if (SnareInfo != null)
            {
                //播放生存期特效
                for (int i = 0; i < SnareInfo.getAliveEffectIdCount(); i++)
                {
                    int AliveEffectId = SnareInfo.GetAliveEffectIdbyIndex(i);
                    if (AliveEffectId != -1 && ObjEffectController != null)
                    {
                        PlayEffect(AliveEffectId);
                    }
                }
                //播放生存期音效
                for (int i = 0; i < SnareInfo.getAliveSoundIdCount(); i++)
                {
                    int AliveSoundId = SnareInfo.GetAliveSoundIdbyIndex(i);
                    if (AliveSoundId != -1)
                    {
                        GameManager.gameManager.SoundManager.PlaySoundEffect(AliveSoundId);
                    }
                }
            }
            return(true);
        }
示例#6
0
        public uint Execute(PacketDistributed ipacket)
        {
            GC_TELEMOVE packet = (GC_TELEMOVE )ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }
            //enter your logic
            Obj_Character _objChar = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(packet.ObjId);

            if (_objChar == null)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }
            Vector3 targetPos = new Vector3(packet.TargetPosX / 100.0f, 0, packet.TargetPosZ / 100.0f);

            targetPos = ActiveScene.GetTerrainPosition(targetPos);
            //如果_objChar为轻功状态,则打断轻功
            if (_objChar.IsLightState)
            {
                //_objChar.EndLightSkillMove();
                _objChar.BeginTeleMoveInLight(targetPos);
            }
            //是否需要改变朝向
            if (packet.NeedChangeFaceto == 1)
            {
                _objChar.FaceTo(targetPos);
            }
            else
            {
                _objChar.IsMoveToNoFaceTo = true;
            }
            AutoMove autoMove = _objChar.AutoMoveComponent;

            if (autoMove != null)
            {
                autoMove.ResetAutoMove();
            }
            //向目标点移动
            _objChar.MoveTo(targetPos, null, 0);
            //是否需要播放附加动作
            if (packet.HasAnimaId && _objChar.AnimLogic != null)
            {
                _objChar.AnimLogic.Stop();
                _objChar.AnimLogic.Play(packet.AnimaId);
                //现在这里播放击退效果 todo临时的
                _objChar.PlayEffect(121);
            }

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
    /// <summary>
    /// 设置引导目的地,外部调用接口
    /// </summary>
    /// <param name="sceneId">Scene identifier.</param>
    /// <param name="posX">Position x.</param>
    /// <param name="posZ">Position z.</param>
    public void SetDest(int sceneId, float posX, float posZ, int showDestEffect)
    {
        if (null == m_mainPlayer)
        {
            m_mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;
        }
        if (sceneId == -1)
        {
            CancelGuide();
            return;
        }
        m_bHasDestination     = true;
        m_Destination.SceneID = sceneId;
        m_Destination.PosX    = posX;
        m_Destination.PosZ    = posZ;
        m_bShowDestEffect     = (showDestEffect != 0);

        if (CalculatePath() == false)
        {
            Invoke("ReTrySetDest", 2);
//			CancelGuide();
            return;
        }
        ShowGuideArrow();

        // 设定指针初始位置
        Vector3 rotateTo = new Vector3(m_NavPathCorners[m_nNextCornerIdx].x, m_arrowTrans.position.y, m_NavPathCorners[m_nNextCornerIdx].z);

        m_arrowTrans.LookAt(rotateTo);

        if (sceneId == GameManager.gameManager.RunningScene && m_bShowDestEffect)
        {
            if (m_destEffectTrans == null)
            {
                if (LoadDestEffect() == false)
                {
                    return;
                }
            }
            Vector3 currentSceneDestination = new Vector3(m_Destination.PosX, 0, m_Destination.PosZ);
            currentSceneDestination    = ActiveScene.GetTerrainPosition(currentSceneDestination);
            m_destEffectTrans.position = currentSceneDestination + new Vector3(0, -0.14f, 0);
            ShowDestEffect();
            ShowArrawEffect();
        }
        else
        {
            HideDestEffect();
        }
    }
示例#8
0
    public void GotoNextScene()
    {
        if (CurrentSceneTag == 1)
        {
            ShowSceneObject("SceneModel/Scene");

            //关闭导航
            if (Singleton <ObjManager> .GetInstance().MainPlayer != null)
            {
                if (Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent != null)
                {
                    Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent.gameObject.SetActive(false);
                }
            }

            CurrentSceneTag = 2;
            if (Singleton <ObjManager> .GetInstance().MainPlayer != null)
            {
                Vector3 curPosition = Singleton <ObjManager> .GetInstance().MainPlayer.Position;

                Singleton <ObjManager> .GetInstance().MainPlayer.Position = ActiveScene.GetTerrainPosition(curPosition);

                if (Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent != null)
                {
                    Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent.gameObject.SetActive(true);

                    Singleton <ObjManager> .GetInstance().MainPlayer.InitNavAgent();

                    Singleton <ObjManager> .GetInstance().MainPlayer.Rotation = Quaternion.Euler(0, 30, 0);
                }
            }

            if (ShaChenGameObject != null)
            {
                ShaChenGameObject.SetActive(true);
            }

            GCGame.Utils.PlaySceneMusic(207);    //second scene

            if (m_OldSceneObject != null)
            {
                DestroyObject(m_OldSceneObject);
                Resources.UnloadUnusedAssets();
                GC.Collect();
            }
        }
    }
示例#9
0
    //private bool IsReachPoint(AutoMovePos pos)
    //{
    //    //先判断序列号
    //    if (pos.m_nPosSerial != m_nCurPosSerial)
    //    {
    //        return false;
    //    }

    //    Vector2 dstPos = new Vector2(pos.m_fDstPosX, pos.m_fDstPosZ);
    //    Vector2 curPos = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z);
    //    if (Vector2.Distance(curPos, dstPos) < 0.5f)
    //    {
    //        return true;
    //    }

    //    return false;
    //}

    //到达当前点,删除当前点,向下一个点移动
    //    private void ReachPoint()
    //    {
    //        if (null == m_posList || m_posList.Count <= 0)
    //        {
    //            return;
    //        }

    //#if UNITY_ANDROID

    //        BeginMove(m_posList[0]);
    //        移除当前点
    //        m_posList.RemoveAt(0);

    //#else
    //        移除当前点
    //        m_posList.RemoveAt(0);

    //        判断剩余点
    //        if (m_posList.Count <= 0)
    //        {
    //            已经无点,停止移动
    //            StopMove();
    //        }
    //        else
    //        {
    //            BeginMove(m_posList[0]);
    //        }

    //#endif
    //    }

    //移动开始
    private void BeginMove(AutoMovePos dstPos)
    {
        if (null == m_BindObj)
        {
            return;
        }

        //记录当前点序列号
        m_nCurPosSerial = dstPos.m_nPosSerial;

        //开始移动
        Vector3 dest = new Vector3(dstPos.m_fDstPosX, 0.0f, dstPos.m_fDstPosZ);

        dest = ActiveScene.GetTerrainPosition(dest);
//        m_bIsMove = true;
        m_BindObj.MoveTo(dest, null, 0.0f);
    }
        public uint Execute(PacketDistributed ipacket)
        {
            GC_FORCE_SETPOS packet = (GC_FORCE_SETPOS )ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }
            //enter your logic

            Obj obj = Singleton <ObjManager> .Instance.FindObjInScene(packet.ServerID);

            if (obj != null)
            {
                if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER ||
                    obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER ||
                    obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_ZOMBIE_PLAYER ||
                    obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW ||
                    obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_NPC)
                {
                    Obj_Character objChar = obj as Obj_Character;
                    Vector3       vec     = new Vector3((float)packet.PosX / 100, 0, (float)packet.PosZ / 100);

                    if (objChar.NavAgent != null)
                    {
                        UnityEngine.GameObject.DestroyImmediate(objChar.NavAgent);
                    }
                    objChar.Position = ActiveScene.GetTerrainPosition(vec);
                    if (objChar.NavAgent == null)
                    {
                        objChar.InitNavAgent();
                    }

                    if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER &&
                        JtddSceneControl.Instance() != null &&
                        GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_FB_CABALINTRO)
                    {
                        JtddSceneControl.Instance().GotoNextScene();
                        GameManager.gameManager.SoundManager.PlayBGMusic(180, 0.5f, 0.5f);
                        Cutscene.CutsceneManager.Instance.CloseSyncPos = false;
                    }
                }
            }

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#11
0
    //向最新点移动
    void BeginMove()
    {
        if (m_Path.AutoSearchPosCache.Count > 0)
        {
            //首先检测场景是否对应,如果不对则直接返回
            if (GameManager.gameManager.RunningScene != m_Path.AutoSearchPosCache[0].SceneID)
            {
                return;
            }

            Vector3 pos = new Vector3(m_Path.AutoSearchPosCache[0].PosX, 0, m_Path.AutoSearchPosCache[0].PosZ);
            pos = ActiveScene.GetTerrainPosition(pos);

            if (Singleton <ObjManager> .GetInstance().MainPlayer.IsCanOperate_Move())
            {
                Singleton <ObjManager> .GetInstance().MainPlayer.MoveTo(pos, null, 1.0f, true);
            }
        }
    }
示例#12
0
        public bool Init(ObjYanHua_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = transform;
            }
            //服务器发过来的信息
            ServerID  = initData.m_ServerID;
            YanHuaId  = initData.m_nYanHuaID;
            OwerobjID = initData.m_OwnerObjId;
            OwnerGuid = initData.m_OwerGuid;
            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));
            Obj_Character ownerCharacter = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(OwerobjID);

            if (ownerCharacter != null)
            {
                Vector3 newPosVector3 = m_ObjTransform.position;
                newPosVector3.y         = ownerCharacter.ObjTransform.position.y;
                m_ObjTransform.position = newPosVector3;
            }

            //初始化特效
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>();
            }
            //播放特效
            Tab_YanHua TabYanHua = TableManager.GetYanHuaByID(YanHuaId, 0);

            if (TabYanHua != null)
            {
                int AliveEffectId = TabYanHua.AliveEffectId;
                if (AliveEffectId != -1 && ObjEffectController != null)
                {
                    PlayEffect(AliveEffectId);
                }
            }
            return(true);
        }
    void ObjMovePlay()
    {
        if (null == m_transform)
        {
            return;
        }

        Obj_Character _objChar = this.gameObject.GetComponent <Obj_Character>();

        if (_objChar)
        {
            Vector3 _selfVector3 = new Vector3(m_transform.localPosition.x, 0, m_transform.localPosition.z);
            Vector3 _newVector3  = ActiveScene.GetTerrainPosition(_selfVector3);
            if (Time.fixedTime - m_StartTime <= m_MotionTime)
            {
                m_transform.localPosition += (m_Velocity * Time.deltaTime);
                _selfVector3 = new Vector3(m_transform.localPosition.x, 0, m_transform.localPosition.z);
                _newVector3  = ActiveScene.GetTerrainPosition(_selfVector3);
                if (Time.fixedTime - m_StartTime >= m_MotionTime / 2 && m_transform.localPosition.y <= _newVector3.y)
                {
                    m_transform.localPosition = _newVector3;
                    m_bGoing    = false;
                    m_StartTime = 0;
                    m_Velocity  = m_OriginVelocity;
                }
                m_Velocity += (m_Acceleration * Time.deltaTime);
            }
            else
            {
                m_bGoing = false;
                m_transform.localPosition = _newVector3;
                m_StartTime = 0;
                m_Velocity  = m_OriginVelocity;
            }
        }
    }
示例#14
0
        public override bool Init(Obj_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = transform;
            }

            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));

            BaseAttr.RoleBaseID = initData.m_RoleBaseID;
            BaseAttr.MoveSpeed  = initData.m_MoveSpeed;
            Tab_RoleBaseAttr roleBaseTab = TableManager.GetRoleBaseAttrByID(BaseAttr.RoleBaseID, 0);

            if (roleBaseTab != null)
            {
                m_NpcType = (Games.GlobeDefine.GameDefine_Globe.NPC_TYPE)roleBaseTab.NpcType;
                //初始化CharModelID,并读取部分客户端信息
                ModelID = roleBaseTab.CharModelID;
                Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0);
                if (null != charModel)
                {
                    BaseAttr.HeadPic = charModel.HeadPic;
                    //设置动作路径
                    AnimationFilePath = charModel.AnimPath;
                    //设置名字版高度
                    DeltaHeight = charModel.HeadInfoHeight;

                    transform.localScale = Vector3.one;
                }
            }

            //服务器发过来的信息
            this.ServerID = initData.m_ServerID;
            this.BornPosX = initData.m_fX;
            this.BornPosY = gameObject.transform.position.y;
            this.BornPosZ = initData.m_fZ;

            BaseAttr.RoleName       = initData.m_StrName;
            BaseAttr.Force          = initData.m_Force;
            BaseAttr.Die            = initData.m_IsDie;
            m_ObjTransform.rotation = Utils.DirServerToClient(initData.m_fDir);
            StealthLev      = initData.m_StealthLev;
            m_bIsBornCreate = initData.m_bNpcBornCreate;
            OptStealthLevChange();
            // NPC挂任务
            AddDialogMission();

            //组件在初始化数据后进行

            //初始化寻路代理
            InitNavAgent();

            //初始化动画,需要在AnimationFilePath被赋值后进行
            AnimLogic = gameObject.GetComponent <AnimationLogic>();
            if (AnimLogic == null)
            {
                AnimLogic = gameObject.AddComponent <AnimationLogic>();
            }

            //初始化特效
            ObjEffectController = gameObject.GetComponent <CharacterEffectBehaviourController>();
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>();
            }

            //初始化AutoMove功能模块
            if (gameObject.GetComponent <AutoMove>() == null)
            {
                gameObject.AddComponent <AutoMove>();
            }

            if (IsDie())
            {
                OnCorpse();
            }
            else
            {
                if (Objanimation != null)
                {
                    Objanimation.Stop();
                }
                CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR;
            }

            //创新跟玩家一样的模型
            m_ModelVisualID   = initData.m_ModelVisualID;
            m_nProfession     = initData.m_nProfession;
            m_WeaponDataID    = initData.m_WeaponDataID;
            m_WeaponEffectGem = initData.m_WeaponDataID;
            if (initData.m_ModelVisualID != GlobeVar.INVALID_ID && initData.m_nProfession != -1)
            {
                ReloadPlayerModelVisual(initData.m_ModelVisualID, initData.m_nProfession);
            }

            //初始化名字版
            //InitNameBoard();
            if (!m_IsNameBoard)
            {
                InitNameBoard();
            }
            else
            {
                if (m_MissionBoard != null)
                {
                    //m_MissionBoard.SetActive(true);
                    ShowNameBoard();
                }
            }

            m_mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

            // 帮会活动NPC判断
            m_bIsGuildActivityBoss = IsGuildBoss();

            m_SceneNpcId = initData.m_SceneNpcId;
            return(base.Init(initData));
        }
示例#15
0
        public virtual bool Init(Obj_DroopItemData initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = transform;
            }
            if (null != GameManager.gameManager.ActiveScene &&
                null != GameManager.gameManager.ActiveScene.DropItemBoardRoot)
            {
                m_ObjTransform.parent = GameManager.gameManager.ActiveScene.DropItemBoardRoot.transform;
            }
            else
            {
                LogModule.ErrorLog("GameManager.gameManager.ActiveScene.DropItemBoardRoot is null");
            }

            DropType  = initData.m_nType;
            ItemId    = initData.m_nItemId;
            ItemCount = initData.m_nItemCount;
            ServerID  = initData.m_nServerID;
            OwnerGuid = initData.m_OwnerGuid;

            float fScaling = 0.005f;

            Vector3 pos = new Vector3(initData.m_fX, 0, initData.m_fZ);

            if (null != Singleton <ObjManager> .Instance.MainPlayer)
            {
                pos.y = Singleton <ObjManager> .Instance.MainPlayer.Position.y;
            }
            else
            {
                pos = ActiveScene.GetTerrainPosition(pos);
            }
            pos.y += 0.2f;

            if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_FB_HUNDUNZHIDI)
            {
                pos.y = 15.1f;
            }

            m_ObjTransform.position = pos;
            //暂时 写死了 后面再用服务器
            m_ObjTransform.Rotate(Vector3.up * 135);

            //初始化特效
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>();
            }

            InitEffect();

            if (DropType == (int)Games.GlobeDefine.GameDefine_Globe.DROP_TYPE.DROP_ITEM)
            {
                Tab_CommonItem line = TableManager.GetCommonItemByID(m_nItemId, 0);
                if (line != null)
                {
                    fScaling = line.DropScaling;

                    int nEffectId = line.DropEffectId;
                    if (nEffectId != -1)
                    {
                        PlayEffect(nEffectId);
                    }
                }
            }
            Vector3 posScale = m_ObjTransform.localScale;

            m_ObjTransform.localScale = posScale * fScaling;
            m_localScale = m_ObjTransform.localScale;
            return(true);
        }
示例#16
0
        //开始使用轻功技能
        public void PlayLightSkill(Vector3 dstPos, int nStep)
        {
            //首先判断是否为二段跳
            //if (IsLightState && m_bIsLightSecondStepState)
            //{
            //    m_bIsLightSecondStepActived = true;
            //}

            //暂时只支持一段跳
            if (nStep != 1)
            {
                return;
            }

            //判断场景内是否可以使用轻功
            Tab_SceneClass sceneClass = TableManager.GetSceneClassByID(GameManager.gameManager.RunningScene, 0);

            if (null != sceneClass && sceneClass.IsCanUseLight != 1)
            {
                return;
            }

            Tab_LightSkill lightSkill = TableManager.GetLightSkillByID(nStep, 0);

            if (null == lightSkill)
            {
                return;
            }

            //设置开始时间和持续时间
            m_fLightStartTime = Time.time;
            //将目标点的Y进行赋值,由于不考虑落差,所以先按照当前点的y值进行计算
            if (null != ObjTransform)
            {
                Vector3 targetPos = new Vector3(dstPos.x, ActiveScene.GetTerrainPosition(dstPos).y, dstPos.z);

                if (BaseAttr.MoveSpeed > 0)
                {
                    Vector2 vecSrc = new Vector2(ObjTransform.position.x, ObjTransform.position.z);
                    Vector2 vecDst = new Vector2(dstPos.x, dstPos.z);
                    m_fLightLastTime = Vector2.Distance(vecSrc, vecDst) / BaseAttr.MoveSpeed;

                    if (BaseAttr.MoveSpeed > 5.0f)
                    {                                                                   // 如果客户端因为乘骑,加速等,速度大于5,则按5的速度计算轻功所需时间
                        m_fLightLastTime = Vector2.Distance(vecSrc, vecDst) / 5.0f;     // 轻功一律按照5的速度算
                    }
                    m_fLightWantHight = 0.1f + (Vector2.Distance(vecSrc, vecDst) / 3f); // 计算轻功最高的高度,防止距离短但是飞的高
                    if (m_fLightWantHight < 0.1f)
                    {
                        m_fLightWantHight = 0.1f;
                    }
                    if (m_fLightWantHight > 3)
                    {
                        m_fLightWantHight = 3;
                    }
                }

                m_fMoveSpeed = BaseAttr.MoveSpeed;

                if (m_fLightLastTime <= 0 || m_fLightLastTime > 5.0f)
                {
                    m_fLightLastTime = 5.0f;        //否则给默认值5秒,和服务器的最长时间相同
                }
                StartLightSkillMove(lightSkill.AnimId, targetPos);

                if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER && null != SkillBarLogic.Instance())
                {
                    //SkillBarLogic.Instance().BeginLightCD();
                }
            }
        }
示例#17
0
        protected void UpdateLightSkill()
        {
            if (false == m_bIsLightState || m_LightSkillTargetPos == Vector3.zero)
            {
                return;
            }
            if (ObjTransform == null)
            {
                return; // 判空
            }
            m_fMoveSpeed = BaseAttr.MoveSpeed;

            //如果在轻功过程中产生强制移动行为,则进行强制移动的Update,忽略轻功本身的路径
            if (m_bTeleMoveInLight)
            {
                if (Vector3.Distance(m_vecLightTelePos, ObjTransform.position) <= 1.0f)
                {
                    EndLightSkillMove();
                    m_bTeleMoveInLight = false; // 被击退情况结束了,置回来
                }

                return;
            }

            //轻功结束
            //if (Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 2.0f)
            if (Vector2.Distance(
                    new Vector2(m_LightSkillTargetPos.x, m_LightSkillTargetPos.z),
                    new Vector2(ObjTransform.position.x, ObjTransform.position.z)
                    ) <= 0.5f)
            {
                EndLightSkillMove();
            }

            //进行高度修正,目前的轨迹是一条正弦曲线
            if (m_fLightLastTime > 0.0f)
            {
                float timeElps = Time.time - m_fLightStartTime;
                if (timeElps <= m_fLightLastTime)
                {
                    //float fAngle = (timeElps / m_fLightLastTime) * 3.1415f;
                    //float fHeightRefix = Mathf.Cos(fAngle) * 0.1f;

                    ////由于现在地表高度为精确高度,所以发现到达地面的时候则停止轻功
                    //if (fHeightRefix < 0.0f && ObjTransform.position.y < ActiveScene.GetTerrainPosition(ObjTransform.position).y)
                    //{
                    //    EndLightSkillMove();
                    //}

                    ////if (ObjTransform.position.y + fHeightRefix < 8.0f)
                    ////限制高度
                    //if (m_fTotalLightHightRefix >=3.0f && fHeightRefix>0)
                    //{
                    //    fHeightRefix = 0.0f;
                    //}
                    //else if (m_fTotalLightHightRefix < 1.0f && fHeightRefix < 0)
                    //{
                    //    fHeightRefix = 0.0f;
                    //}
                    //m_fTotalLightHightRefix += fHeightRefix;

                    //ObjTransform.position = new Vector3(ObjTransform.position.x, ObjTransform.position.y + fHeightRefix, ObjTransform.position.z);

                    if (m_fLightLastTime == 0)
                    {
                        m_fLightLastTime = 0.1f; // 判除零
                    }
                    float fAngle       = (timeElps / m_fLightLastTime) * 3.1415f;
                    float fHeightRefix = Mathf.Sin(fAngle) * m_fLightWantHight; // 最高距离是3米

                    float old_offsety = m_fTotalLightHightRefix;
                    m_fTotalLightHightRefix = fHeightRefix;

                    float new_y = ObjTransform.position.y - old_offsety + m_fTotalLightHightRefix; // 当前位置,减去上次位置,加上这次位置
                    if (new_y < ActiveScene.GetTerrainPosition(ObjTransform.position).y)
                    {                                                                              // 如果算出来的位置小于地形高度,则是地形高度
                        new_y = ActiveScene.GetTerrainPosition(ObjTransform.position).y;
                    }

                    ObjTransform.position = new Vector3(
                        ObjTransform.position.x,
                        new_y,
                        ObjTransform.position.z);
                }
                else
                {
                    EndLightSkillMove();
                }
                float fBeforeTime = 0.35f;
                if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
                {
                    Obj_OtherPlayer _Player = this as Obj_OtherPlayer;
                    if (_Player)
                    {
                        switch (_Player.Profession)
                        {
                        case  (int)CharacterDefine.PROFESSION.SHAOLIN:
                            fBeforeTime = 0.35f;
                            break;

                        case (int)CharacterDefine.PROFESSION.TIANSHAN:
                            fBeforeTime = 0.35f;
                            break;

                        case (int)CharacterDefine.PROFESSION.XIAOYAO:
                            fBeforeTime = 0.35f;
                            break;

                        case (int)CharacterDefine.PROFESSION.DALI:
                            fBeforeTime = 0.35f;
                            break;
                        }
                    }
                }

                if (AnimLogic != null && AnimLogic.CurAnimData != null)
                { // 判空
                    if (AnimLogic.CurAnimData.AnimID != (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND)
                    {
                        if (m_fLightLastTime - timeElps <= fBeforeTime || Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 1.75f)
                        {
                            AnimLogic.Stop();
                            AnimLogic.Play((int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND);
                        }
                    }
                }
            }

            //暂时屏蔽二段跳
            //如果在轻功状态并且二段跳还未被激活,则判断是否可以进行二段跳跃
            //if (!m_bIsLightSecondStepState && !m_bIsLightSecondStepActived)
            //{
            //    //激活二段跳(只能激活一次)
            //    if (Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 5.0f)
            //    {
            //        m_bIsLightSecondStepState = true;
            //        m_bIsLightSecondStepActived = false;
            //    }
            //}
        }
示例#18
0
        public void EndLightSkillMove()
        {
            if (false == m_bIsLightState || m_LightSkillTargetPos == Vector3.zero)
            {
                return; // 不能重复进入停止轻功
            }
            //一旦进入End,则没有机会触发二段跳,重置所有标记位
            m_bIsLightState = false;
            m_fMoveSpeed    = 5.0f;
            //m_bIsLightSecondStepState = false;
            //m_bIsLightSecondStepActived = false;

            StopMove();
            if (AnimLogic != null && AnimLogic.CurAnimData != null &&
                AnimLogic.CurAnimData.AnimID != (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND) // TT 10240,修复落地动画播放不完全bug [12/16/2014 yuxiaoxi]
            {
                AnimLogic.Stop();
            }


            //有可能在空中,所以要恢复一下
            if (ObjTransform != null)
            {
                if (Mathf.Abs(ObjTransform.position.y - ActiveScene.GetTerrainPosition(ObjTransform.position).y) > 1.0f)
                {
                    Vector3 pos = new Vector3(ObjTransform.position.x, ActiveScene.GetTerrainPosition(ObjTransform.position).y, ObjTransform.position.z);
                    ObjTransform.position = pos;
                }

                try
                { // 尝试找一下跟目标点是否有路径,如果异常,就是发生了人在非行走区域,这时候,我要把人强制拽到目标点
                    NavMeshHit hit;
                    bool       bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 1f, 1);
                    if (bhit == false)
                    { // 经检查,玩家落点不在navmesh上,则射线发射出去到目标点找一个点,如果能找到,则使用找到的点,如果找不到,则直接目标点
                        bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 5f, 1);
                        if (bhit == false)
                        { // 5m检测没有找到,直接放到最终点,虽然可能闪,但是没问题
                            ObjTransform.position = new Vector3(
                                m_LightSkillTargetPos.x,
                                ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y,
                                m_LightSkillTargetPos.z
                                );
                        }
                        else
                        { // 找到了
                            ObjTransform.position = hit.position;
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    LogModule.ErrorLog("EndLightSkillMove System.Exception ex " + ex.ToString());
                }
                finally
                {
                    LogModule.ErrorLog("!!!!!!!EndLightSkillMove finally!!!!!!!!");
                }
            }


            // begin 注意:m_LightSkillTargetPos是目标点,但是不是轻功的最终结束点,因为如果中途被减速,这个店并没有修正,所以下面一段代码不能执行 [12/27/2014 yuxiaoxi]
            //if (Vector3.Distance(ObjTransform.position, m_LightSkillTargetPos) >= 3.0f &&
            //    m_LightSkillTargetPos != Vector3.zero)
            //{ // 如果结束后的玩家坐标点和目标点差距太大,则直接拽到目标点
            //    ObjTransform.position = new Vector3(
            //        m_LightSkillTargetPos.x,
            //        ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y,
            //        m_LightSkillTargetPos.z
            //        ); // 既然结束了,强制设到目标点会有什么问题?
            //}
            // end [12/27/2014 yuxiaoxi]

            //恢复寻路和胶囊碰撞
            if (NavAgent)
            {
                NavAgent.enabled = true;
            }

            m_LightSkillTargetPos = Vector3.zero;

            //开启拖尾特效
            //ShowLightShadowEffect(false);

            //主角的话停止播放音效
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                if (null != GameManager.gameManager.SoundManager)
                {
                    GameManager.gameManager.SoundManager.StopSoundEffect(149);
                }

                //关闭拖尾特效
                if (null != ObjEffectController)
                {
                    ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_TAIL);
                }
            }

            if (null != ObjEffectController)
            {
                ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_EFFECT);
            }
        }
示例#19
0
        public override bool Init(Obj_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = gameObject.transform;
            }

            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));

            //暂时 写死了 后面再用服务器
            m_ObjTransform.Rotate(Vector3.up * 135);

            //服务器发过来的信息
            this.ServerID       = initData.m_ServerID;
            BaseAttr.RoleBaseID = initData.m_RoleBaseID;
            BaseAttr.RoleName   = initData.m_StrName;
            m_OwnerObjId        = initData.m_OwnerObjId;
            StealthLev          = initData.m_StealthLev;
            m_Quality           = initData.m_FellowQuality;
            OptStealthLevChange();
            //防止伙伴追上人物导致动作不流畅 把客户端主角伙伴速度修改为和人物一样
            if (IsOwnedByMainPlayer() == true)
            {
                Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjId = ServerID;

                Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjGuid = initData.m_Guid;

                BaseAttr.MoveSpeed = Singleton <ObjManager> .GetInstance().MainPlayer.BaseAttr.MoveSpeed;
            }
            else
            {
                Obj_OtherPlayer otherPlayer = Singleton <ObjManager> .Instance.FindObjInScene(m_OwnerObjId) as Obj_OtherPlayer;

                if (null != otherPlayer)
                {
                    otherPlayer.FellowID = ServerID;
                    m_bVisible           = otherPlayer.IsVisibleChar();
                }

                BaseAttr.MoveSpeed = initData.m_MoveSpeed;
            }
            Tab_CabalFellowAttr fellowAttrTab = TableManager.GetCabalFellowAttrByID(BaseAttr.RoleBaseID, 0);

            if (fellowAttrTab != null)
            {
                //初始化CharModelID,并读取部分客户端信息
                ModelID = fellowAttrTab.ModelId;
                Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0);
                if (null != charModel)
                {
                    BaseAttr.HeadPic = charModel.HeadPic;
                    //设置动作路径
                    AnimationFilePath = charModel.AnimPath;
                    //设置名字版高度
                    DeltaHeight = charModel.HeadInfoHeight;

                    m_ObjTransform.localScale    = new Vector3(charModel.Scale, charModel.Scale, charModel.Scale);
                    m_ObjTransform.localRotation = Utils.DirServerToClient(initData.m_fDir);
                }
            }


            //初始化寻路代理
            InitNavAgent();

            //初始化AutoMove功能模块
            //if (gameObject.GetComponent<AutoMove>() == null)
            //{
            gameObject.AddComponent <AutoMove>();
            //}

            //初始化动画,需要在AnimationFilePath被赋值后进行
            if (AnimLogic == null)
            {
                AnimLogic = gameObject.AddComponent <AnimationLogic>();
            }
            //初始化特效
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>();
            }

            //召出播放特效
            if (Singleton <ObjManager> .GetInstance().MainPlayer != null)
            {
                if (m_OwnerObjId == Singleton <ObjManager> .GetInstance().MainPlayer.ServerID)
                {
                    if (GameManager.gameManager.PlayerDataPool.FellowPlayerEffect == true)
                    {
                        //PlayEffect(52);
                        GameManager.gameManager.PlayerDataPool.FellowPlayerEffect = false;
                    }
                }
            }

            if (IsDie())
            {
                OnCorpse();
            }
            else
            {
                if (Objanimation != null)
                {
                    Objanimation.Stop();
                }
                CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR;
            }

            InitNameBoard();

            return(base.Init(initData));
        }
        public uint Execute(PacketDistributed ipacket)
        {
            GC_RET_RELIVE packet = (GC_RET_RELIVE )ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }
            //enter your logic

            Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

            if (null == MainPlayer)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }

            int           objId     = packet.ObjId;
            Obj_Character TargetObj = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(objId);

            if (TargetObj == null)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }

            if (objId == MainPlayer.ServerID)
            {
                // 自己
                if (packet.HasReviveTime)
                {
                    MainPlayer.ReliveEntryTime = packet.ReviveTime;
                }

                //主玩家自己。判断当前地形数据是否可用,如果不可用,更新地形数据
                //if (GameManager.gameManager != null)
                //{
                //    if (GameManager.gameManager.ActiveScene != null)
                //    {
                //        if (GameManager.gameManager.ActiveScene.TerrainData != null)
                //        {
                //            //地形数据存在,但数据没有加载成功
                //            if (!GameManager.gameManager.ActiveScene.TerrainData.RawDataOK)
                //            {
                //                GameManager.gameManager.m_loadErrorNum = 0;
                //                GameManager.gameManager.ActiveScene.SetTerrainData();
                //            }
                //        }
                //        else
                //        {
                //            //地形数据不存在,加载地形数据
                //            GameManager.gameManager.m_loadErrorNum = 0;
                //            GameManager.gameManager.ActiveScene.SetTerrainData();
                //        }
                //    }
                //}
            }

            if (packet.HasPos_x && packet.HasPos_z && packet.HasFacedir)
            {
                float   fEnterPosX  = ((float)packet.Pos_x) / 100;
                float   fEnterPosZ  = ((float)packet.Pos_z) / 100;
                Vector3 newPosition = new UnityEngine.Vector3(fEnterPosX, 0, fEnterPosZ);
                //if (GameManager.gameManager.ActiveScene.IsT4MScene())
                //{
                newPosition.y = GameManager.gameManager.ActiveScene.GetTerrainHeight(newPosition);
                //}
                //else if (null != Terrain.activeTerrain)
                //{
                //newPosition.y = GameManager.gameManager.ActiveScene.GetNavSampleHeight(newPosition);
                //}

                //Temp,保证版本正确性
                newPosition = ActiveScene.GetTerrainPosition(newPosition);
//                  if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_ERHAI)
//                  {
//                      newPosition.y = 18.0f;
//                  }
//                  else if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_YANGWANGGUMU
//                      || GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_WANGYOUGU
//                      || GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_TIANSHAN)
//                  {
//                      newPosition.y = 22.5f;
//                  }

                TargetObj.Position = newPosition;
            }

            //主角位置特殊处理
            if (objId == MainPlayer.ServerID)
            {
                MainPlayer.LastSyncPos = MainPlayer.Position;
                if (null == MainPlayer.NavAgent)
                {
                    MainPlayer.InitNavAgent();
                    MainPlayer.NavAgent.destination = MainPlayer.Position;
                }
            }

            TargetObj.OnRelife();
            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }