Esempio n. 1
0
        private void OnEvent(int nEventID, object param)
        {
            // 地表没有创建成功的时候,就已经收到了角色和NPC的创建 这里重新设置位置和地表做碰撞
            if (nEventID == (int)GameEventID.SYSTEM_LOADSCENECOMPELETE)
            {
                //List<IPlayer> lstPlayer;
                FindAllEntity <IPlayer>(ref lstPlayer);
                for (int i = 0; i < lstPlayer.Count; ++i)
                {
                    Vector3 pos = lstPlayer[i].GetPos();
                    lstPlayer[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstPlayer.Clear();

                //List<INPC> lstNPC;
                FindAllEntity <INPC>(ref lstNPC);
                for (int i = 0; i < lstNPC.Count; ++i)
                {
                    Vector3 pos = lstNPC[i].GetPos();
                    lstNPC[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstNPC.Clear();

                //List<IBox> lstBox;
                FindAllEntity <IBox>(ref lstBox);
                for (int i = 0; i < lstBox.Count; ++i)
                {
                    Vector3 pos = lstBox[i].GetPos();
                    pos.y += 0.2f;
                    lstBox[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstBox.Clear();

                //List<IRobot> lstRobot;
                FindAllEntity <IRobot>(ref lstRobot);
                for (int i = 0; i < lstRobot.Count; ++i)
                {
                    Vector3 pos = lstRobot[i].GetPos();
                    lstRobot[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstRobot.Clear();
                // 请求同步移动时间
                ReqMoveServerTime();
            }
            else if (nEventID == (int)GameEventID.RECONNECT_SUCESS) // 重新连接成功
            {
                stReconnectSucess st = (stReconnectSucess)param;
                if (st.isLogin)
                {
                    Clear(false); // 不清理除主角
                    // 请求同步移动时间
                    ReqMoveServerTime();
                }
                else
                {//强制同步
                    GameCmd.stUserMoveMoveUserCmd_C cmd = new GameCmd.stUserMoveMoveUserCmd_C();
                    cmd.client_time = 0;
                    List <GameCmd.Pos> list = new List <GameCmd.Pos>();
                    GameCmd.Pos        pp   = new GameCmd.Pos();
                    pp.x = 0;
                    pp.y = 0;
                    list.Add(pp);
                    cmd.poslist.AddRange(list);
                    m_ClientGlobal.netService.Send(cmd);
                }
            }
            else if (nEventID == (int)GameEventID.NETWORK_CONNECTE_CLOSE)// 网络断开
            {
                if (m_ClientGlobal.MainPlayer != null)
                {
                    m_ClientGlobal.MainPlayer.SendMessage(EntityMessage.EntityCommand_RemoveLinkAllEffect);
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_ENTITYDEAD) // 实体死亡
            {
                stEntityDead ed = (stEntityDead)param;
                if (m_ClientGlobal.IsMainPlayer(ed.uid))
                {
                    Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                    if (rs != null)
                    {
                        rs.EnableGray(true);
                    }
                }
                IEntity en = FindEntity(ed.uid);
                if (en != null)
                {
                    AddEffectOnEntity(en, false);
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_RELIVE)
            {
                stEntityRelive ed = (stEntityRelive)param;
                if (m_ClientGlobal.IsMainPlayer(ed.uid))
                {
                    Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                    if (rs != null)
                    {
                        rs.EnableGray(false);
                    }
                }

                IEntity en = FindEntity(ed.uid);
                if (en != null)
                {
                    AddEffectOnEntity(en, true);
                }
            }
            else if (nEventID == (int)GameEventID.PLAYER_LOGIN_SUCCESS)
            {
                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs != null)
                {
                    rs.EnableGray(false);
                }

                // 请求同步移动时间
                ReqMoveServerTime();
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_LEAVEMAP) // 离开地图
            {
                // 清理地图上所有对象
                Clear(false);

                // 切地图时让主角停止移动
                IPlayer mainPlayer = EntitySystem.m_ClientGlobal.MainPlayer;
                if (mainPlayer != null)
                {
                    bool ismoving = (bool)mainPlayer.SendMessage(Client.EntityMessage.EntityCommand_IsMove, null);
                    if (ismoving)
                    {
                        mainPlayer.SendMessage(Client.EntityMessage.EntityCommand_StopMove, mainPlayer.GetPos());
                    }
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_CHANGEAREA) // 区域变化 动作处理
            {
                stEntityChangeArea changeArea = (stEntityChangeArea)param;
                IEntity            en         = FindEntity(changeArea.uid);
                if (en != null && en.GetEntityType() == EntityType.EntityType_Player)
                {
                    string strCurAni   = (string)en.SendMessage(EntityMessage.EntityCommand_GetCurAni, null);
                    bool   bChangeArea = false;
                    if (changeArea.eType == MapAreaType.Safe || changeArea.eType == MapAreaType.Fish)
                    {
                        if (strCurAni == EntityAction.Stand_Combat)
                        {
                            strCurAni   = EntityAction.Stand;
                            bChangeArea = true;
                        }

                        if (strCurAni == EntityAction.Run_Combat)
                        {
                            strCurAni   = EntityAction.Run;
                            bChangeArea = true;
                        }
                    }
                    else
                    {
                        if (strCurAni == EntityAction.Stand)
                        {
                            strCurAni   = EntityAction.Stand_Combat;
                            bChangeArea = true;
                        }

                        if (strCurAni == EntityAction.Run)
                        {
                            strCurAni   = EntityAction.Run_Combat;
                            bChangeArea = true;
                        }
                    }

                    if (bChangeArea)
                    {
                        PlayAni anim_param = new PlayAni();
                        anim_param.strAcionName = strCurAni;
                        anim_param.fSpeed       = 1;
                        anim_param.nStartFrame  = 0;
                        anim_param.nLoop        = -1;
                        anim_param.fBlendTime   = 0.1f;
                        en.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);
                    }
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_CREATEENTITY)
            {
                stCreateEntity create = (stCreateEntity)param;
                IEntity        en     = FindEntity(create.uid);
                if (en != null)
                {
                    EntityManager.Instance().OnCreateEntity(en);
                }
            }
        }
Esempio n. 2
0
        void OnEvent(int nEventID, object param)
        {
            if (m_ClientGlobal == null)
            {
                return;
            }

            IEntitySystem es = m_ClientGlobal.GetEntitySystem();

            if (es == null)
            {
                return;
            }

            GameEventID evt = (GameEventID)nEventID;
            long        uid = 0;

            switch (evt)
            {
            case GameEventID.ENTITYSYSTEM_ENTITYMOVE:
            {
                stEntityMove move = (stEntityMove)param;
                uid = move.uid;
                break;
            }

            case GameEventID.ENTITYSYSTEM_ENTITYSTOPMOVE:
            {
                stEntityStopMove move = (stEntityStopMove)param;
                uid = move.uid;
                break;
            }

            case GameEventID.SYSTEM_GAME_READY:
            {
                PreLoadAllResource();
                break;
            }

            default:
            {
                break;
            }
            }

            IEntity en = es.FindEntity(uid);

            if (en != null && en.GetEntityType() == EntityType.EntityType_Player)
            {
                Vector3     pos  = en.GetPos();
                MapAreaType type = GetAreaTypeByPos(pos);
                if (m_eMapAreaType != type)
                {
                    stEntityChangeArea changeArea = new stEntityChangeArea();
                    changeArea.uid   = uid;
                    changeArea.eType = type;
                    m_eMapAreaType   = type;
                    Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.ENTITYSYSTEM_CHANGEAREA, changeArea);
                }
            }
        }
Esempio n. 3
0
    private void OnEvent(int nEventID, object param)
    {
        if (nEventID == (int)GameEventID.ENTITYSYSTEM_CHANGEAREA || nEventID == (int)GameEventID.SYSTEM_LOADSCENECOMPELETE)
        {
            //地图区域判断
            if (nEventID == (int)GameEventID.ENTITYSYSTEM_CHANGEAREA)
            {
                stEntityChangeArea changeArea = (stEntityChangeArea)param;

                bool isMainPlayer = Client.ClientGlobal.Instance().IsMainPlayer(changeArea.uid);

                if (isMainPlayer)
                {
                    //初始化
                    InitFishing();

                    //if (changeArea.eType == MapAreaType.Fish)
                    //{
                    //    //  Engine.Utility.Log.Error("到达钓鱼区域了!!!");

                    //    m_bIsInFinshingArea = true;
                    //}
                    //else
                    //{
                    //    //Engine.Utility.Log.Error("离开钓鱼区域了!!!");

                    //    m_bIsInFinshingArea = false;
                    //}
                }
            }

            else if (nEventID == (int)GameEventID.SYSTEM_LOADSCENECOMPELETE)
            {
                Client.stLoadSceneComplete loadScene = (Client.stLoadSceneComplete)param;

                uint mapID = (uint)loadScene.nMapID;

                if (mapID == m_fishingMapId)
                {
                    //初始化
                    InitFishing();
                }
                //IMapSystem ms = Client.ClientGlobal.Instance().GetMapSystem();
                //if (ms == null)
                //{
                //    return;
                //}

                //IPlayer mainPlayer = Client.ClientGlobal.Instance().MainPlayer;
                //if (mainPlayer == null)
                //{
                //    return;
                //}

                //if (ms.GetAreaTypeByPos(mainPlayer.GetPos()) == MapAreaType.Fish)
                //{
                //    Engine.Utility.Log.Error("到达钓鱼区域了!!!");
                //    m_bIsInFinshingArea = true;
                //}
                //else
                //{
                //    m_bIsInFinshingArea = false;
                //}
                //}
                //else    //不在钓鱼地图
                //{
                //    m_bIsInFinshingArea = false;
            }
        }
    }