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); } } }
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); } } }
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; } } }