public bool AddNewUser(User newUser) { foreach (User us in m_RoomUsers) { if (us != null && us.Guid == newUser.Guid) { //当前玩家已在游戏房间内 if (us.GetKey() == newUser.GetKey()) { LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomId:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", m_RoomId, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey()); m_UserPool.FreeUser(newUser.LocalID); return(true); } else if (us.UserControlState != (int)UserControlState.User) { LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomId:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", m_RoomId, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for old {1} {2}, [Room.AddNewUser]", us.LocalID, us.Guid, us.GetKey()); RemoveUser(us); break; } else { LogSys.Log(LOG_TYPE.DEBUG, "Add user false: User already in the room and online! RoomId:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", m_RoomId, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey()); m_UserPool.FreeUser(newUser.LocalID); return(false); } } } newUser.EnterRoomTime = TimeUtility.GetLocalMilliseconds(); newUser.OwnRoomUserManager = this; newUser.RegisterObservers(m_RoomObservers); newUser.CharacterCreateTime = TimeUtility.GetLocalMilliseconds(); newUser.TimeCounter = 0; if ((int)UserControlState.Ai == newUser.UserControlState) { newUser.IsEntered = true; } if (null != m_ActiveScene && m_ActiveScene.SceneState == SceneState.Running) { Scene scene = m_ActiveScene; scene.EnterScene(newUser); } foreach (User otheruser in m_RoomUsers) { if (otheruser != null) { otheruser.AddSameRoomUser(newUser); newUser.AddSameRoomUser(otheruser); } } m_RoomUsers.Add(newUser); LogSys.Log(LOG_TYPE.DEBUG, "Add user success ! RoomId:{0} , UserGuid:{1}({2})", m_RoomId, newUser.Guid, newUser.GetKey()); return(true); }
public static Msg_RC_CreateNpc BuildCreateNpcMessage(EntityInfo npc, int rate = -1) { Msg_RC_CreateNpc bder = new Msg_RC_CreateNpc(); bder.npc_id = npc.GetId(); bder.unit_id = npc.GetUnitId(); ScriptRuntime.Vector3 pos = npc.GetMovementStateInfo().GetPosition3D(); GameFrameworkMessage.Position pos_bd = new GameFrameworkMessage.Position(); pos_bd.x = (float)pos.X; pos_bd.z = (float)pos.Z; bder.cur_pos = pos_bd; bder.face_direction = (float)npc.GetMovementStateInfo().GetFaceDir(); bder.link_id = npc.GetTableId(); bder.camp_id = npc.GetCampId(); if (npc.OwnerId > 0) { bder.owner_id = npc.OwnerId; } if (npc.GetAiStateInfo().LeaderId > 0) { bder.leader_id = npc.GetAiStateInfo().LeaderId; } User user = npc.CustomData as User; if (null != user) { bder.key = user.GetKey(); } bder.level = npc.Level; return(bder); }
internal static void Execute(object msg, User user) { Msg_CR_Enter enter_msg = msg as Msg_CR_Enter; if (enter_msg == null) { return; } LogSys.Log(LOG_TYPE.DEBUG, "user {0}({1},{2},{3}) enter.", user.RoleId, user.GetKey(), user.Guid, user.Name); user.UserControlState = (int)UserControlState.User; user.IsEntered = true; Room room = user.OwnRoom; if (null != room) { Scene scene = room.ActiveScene; if (null != scene) { EntityInfo userInfo = user.Info; if (null != userInfo) { if (scene.SceneState == SceneState.Running) { scene.SyncForNewUser(user); scene.StorySystem.SendMessage("user_enter_scene", userInfo.GetId(), userInfo.GetUnitId(), userInfo.GetCampId(), userInfo.GetMovementStateInfo().PositionX, userInfo.GetMovementStateInfo().PositionZ); } } } } }
internal static void Execute(object msg, User user) { Msg_CR_Enter enter_msg = msg as Msg_CR_Enter; if (enter_msg == null) { return; } LogSys.Log(LOG_TYPE.DEBUG, "user {0}({1},{2},{3}) enter.", user.RoleId, user.GetKey(), user.Guid, user.Name); user.UserControlState = (int)UserControlState.User; user.IsEntered = true; Room room = user.OwnRoom; if (null != room) { Scene scene = room.ActiveScene; if (null != scene) { EntityInfo userInfo = user.Info; if (null != userInfo) { if (scene.SceneState == SceneState.Running) { scene.SyncForNewUser(user); scene.StorySystem.SendMessage("user_enter_scene", userInfo.GetId(), userInfo.GetUnitId(), userInfo.GetCampId(), userInfo.GetMovementStateInfo().PositionX, userInfo.GetMovementStateInfo().PositionZ); } } } } }
public void RemoveUser(User user, bool free) { if (user == null) { return; } foreach (User otheruser in m_RoomUsers) { if (null != otheruser && otheruser != user) { otheruser.RemoveSameRoomUser(user); } } user.ClearSameRoomUser(); if (null != m_ActiveScene) { Scene scene = m_ActiveScene; scene.LeaveScene(user); } LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [Room.RemoveUser]", user.LocalID, user.Guid, user.GetKey()); m_RoomUsers.Remove(user); if (free) { m_UserPool.FreeUser(user.LocalID); } }
internal static void Execute(object msg, User user) { Msg_CR_Skill use_skill = msg as Msg_CR_Skill; if (null == use_skill) return; EntityInfo userObj = user.Info; if (null == userObj) { LogSys.Log(LOG_TYPE.DEBUG, "UseSkillHandler, charactor {0}({1},{2},{3}) not exist", user.RoleId, user.GetKey(), user.Guid, user.Name); return; } Scene scene = user.OwnRoom.ActiveScene; if (null != scene) { EntityInfo obj = scene.GetEntityById(use_skill.role_id); if (null != obj) { AiStateInfo aiInfo = obj.GetAiStateInfo(); if (use_skill.target_id > 0) { aiInfo.Target = use_skill.target_id; } else if (use_skill.target_dir > 0) { float dir = ProtoHelper.DecodeFloat(use_skill.target_dir); obj.GetMovementStateInfo().SetFaceDir(dir); aiInfo.Target = 0; } if (aiInfo.AiLogic == (int)AiStateLogicId.Entity_Leader) { AiData_Leader data = aiInfo.AiDatas.GetData<AiData_Leader>(); if (null == data) { data = new AiData_Leader(); aiInfo.AiDatas.AddData(data); } data.ManualSkillId = use_skill.skill_id; } else { AiData_General data = aiInfo.AiDatas.GetData<AiData_General>(); if (null == data) { data = new AiData_General(); aiInfo.AiDatas.AddData(data); } data.ManualSkillId = use_skill.skill_id; } aiInfo.ChangeToState((int)AiStateId.SkillCommand); } } }
internal static void Execute(object msg, User user) { Msg_CR_UserMoveToPos move_msg = msg as Msg_CR_UserMoveToPos; if (move_msg == null) return; EntityInfo charactor = user.Info; if (charactor == null) { LogSys.Log(LOG_TYPE.DEBUG, "charactor {0}({1},{2},{3}) not exist", user.RoleId, user.GetKey(), user.Guid, user.Name); return; } /// if (charactor.GetAIEnable()) { float tx, tz; ProtoHelper.DecodePosition2D(move_msg.target_pos, out tx, out tz); ScriptRuntime.Vector3 pos = new ScriptRuntime.Vector3(tx, 0, tz); MovementStateInfo msi = charactor.GetMovementStateInfo(); msi.IsMoving = true; msi.TargetPosition = pos; float dir = Geometry.GetYRadian(msi.GetPosition3D(), pos); msi.SetFaceDir(dir); msi.SetMoveDir(dir); Msg_RC_NpcMove npcMoveBuilder = DataSyncUtility.BuildNpcMoveMessage(charactor); if (null != npcMoveBuilder) { Scene scene = user.OwnRoom.ActiveScene; if (null != scene) { scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcMove, npcMoveBuilder); } } } }
internal void DeleteUser(User user) { if (null != user) { user.UserControlState = (int)UserControlState.Remove; if (null != user.Info) { //user.Info.Suicide(); } LogSys.Log(LOG_TYPE.DEBUG, "Room {0} User {1}({2}) deleted.", RoomID, user.Guid, user.GetKey()); } }
public void DropUser(User user) { //向Lobby发送玩家掉线消息 Msg_RL_UserDrop uaqBuilder = new Msg_RL_UserDrop(); uaqBuilder.RoomId = RoomId; uaqBuilder.UserGuid = user.Guid; uaqBuilder.IsBattleEnd = false; m_Connector.SendMsgToLobby(uaqBuilder); user.LastNotifyUserDropTime = TimeUtility.GetLocalMilliseconds(); //控制状态改为掉线 user.UserControlState = (int)UserControlState.UserDropped; if (null != user.Info) { // user.Info.Suicide(); } LogSys.Log(LOG_TYPE.DEBUG, "Room {0} User {1}({2}) dropped.", RoomId, user.Guid, user.GetKey()); }
internal static void Execute(object msg, User user) { Msg_CR_Skill use_skill = msg as Msg_CR_Skill; if (null == use_skill) { return; } EntityInfo userObj = user.Info; if (null == userObj) { LogSys.Log(LOG_TYPE.DEBUG, "UseSkillHandler, charactor {0}({1},{2},{3}) not exist", user.RoleId, user.GetKey(), user.Guid, user.Name); return; } Scene scene = user.OwnRoom.ActiveScene; if (null != scene) { EntityInfo obj = scene.GetEntityById(use_skill.role_id); if (null != obj) { AiStateInfo aiInfo = obj.GetAiStateInfo(); if (use_skill.target_id > 0) { aiInfo.Target = use_skill.target_id; } else if (use_skill.target_dir > 0) { float dir = ProtoHelper.DecodeFloat(use_skill.target_dir); obj.GetMovementStateInfo().SetFaceDir(dir); aiInfo.Target = 0; } if (aiInfo.AiLogic == (int)AiStateLogicId.Entity_Leader) { AiData_Leader data = aiInfo.AiDatas.GetData <AiData_Leader>(); if (null == data) { data = new AiData_Leader(); aiInfo.AiDatas.AddData(data); } data.ManualSkillId = use_skill.skill_id; } else { AiData_General data = aiInfo.AiDatas.GetData <AiData_General>(); if (null == data) { data = new AiData_General(); aiInfo.AiDatas.AddData(data); } data.ManualSkillId = use_skill.skill_id; } aiInfo.ChangeToState((int)AiStateId.SkillCommand); } } }
internal static void Execute(object msg, User user) { LogSys.Log(LOG_TYPE.DEBUG, "Unhandled msg {0} user {1}({2},{3},{4})!!!", msg.GetType(), user.RoleId, user.GetKey(), user.Guid, user.Name); }
public static void Execute(object msg, User user) { Msg_CR_Skill use_skill = msg as Msg_CR_Skill; if (null == use_skill) { return; } EntityInfo userObj = user.Info; if (null == userObj) { LogSys.Log(LOG_TYPE.DEBUG, "UseSkillHandler, charactor {0}({1},{2},{3}) not exist", user.RoleId, user.GetKey(), user.Guid, user.Name); return; } Scene scene = user.OwnRoomUserManager.ActiveScene; if (null != scene) { EntityInfo obj = scene.GetEntityById(use_skill.role_id); if (null != obj) { AiStateInfo aiInfo = obj.GetAiStateInfo(); if (use_skill.target_id > 0) { aiInfo.Target = use_skill.target_id; } else if (use_skill.target_dir > 0) { float dir = use_skill.target_dir; obj.GetMovementStateInfo().SetFaceDir(dir); aiInfo.Target = 0; } Msg_RC_NpcSkill retMsg = DataSyncUtility.BuildNpcSkillMessage(obj, use_skill.skill_id); scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcSkill, retMsg); } } }
private void RemoveUser(User user, bool free) { if (user == null) { return; } foreach (User otheruser in room_users_) { if (null != otheruser && otheruser != user) { otheruser.RemoveSameRoomUser(user); } } user.ClearSameRoomUser(); if (null != m_ActiveScene) { Scene scene = m_ActiveScene; scene.LeaveScene(user); } LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [Room.RemoveUser]", user.LocalID, user.Guid, user.GetKey()); room_users_.Remove(user); if (free) { user_pool_.FreeUser(user.LocalID); } }
internal void DropUser(User user) { //向Lobby发送玩家掉线消息 Msg_RL_UserDrop uaqBuilder = new Msg_RL_UserDrop(); uaqBuilder.RoomID = cur_room_id_; uaqBuilder.UserGuid = user.Guid; uaqBuilder.IsBattleEnd = false; connector_.SendMsgToLobby(uaqBuilder); user.LastNotifyUserDropTime = TimeUtility.GetLocalMilliseconds(); //控制状态改为掉线 user.UserControlState = (int)UserControlState.UserDropped; if (null != user.Info) { // user.Info.Suicide(); } LogSys.Log(LOG_TYPE.DEBUG, "Room {0} User {1}({2}) dropped.", RoomID, user.Guid, user.GetKey()); }
internal static void Execute(object msg, User user) { Msg_CR_UserMoveToPos move_msg = msg as Msg_CR_UserMoveToPos; if (move_msg == null) { return; } EntityInfo charactor = user.Info; if (charactor == null) { LogSys.Log(LOG_TYPE.DEBUG, "charactor {0}({1},{2},{3}) not exist", user.RoleId, user.GetKey(), user.Guid, user.Name); return; } /// if (charactor.GetAIEnable()) { float tx, tz; ProtoHelper.DecodePosition2D(move_msg.target_pos, out tx, out tz); ScriptRuntime.Vector3 pos = new ScriptRuntime.Vector3(tx, 0, tz); MovementStateInfo msi = charactor.GetMovementStateInfo(); msi.IsMoving = true; msi.TargetPosition = pos; float dir = Geometry.GetYRadian(msi.GetPosition3D(), pos); msi.SetFaceDir(dir); msi.SetMoveDir(dir); Msg_RC_NpcMove npcMoveBuilder = DataSyncUtility.BuildNpcMoveMessage(charactor); if (null != npcMoveBuilder) { Scene scene = user.OwnRoom.ActiveScene; if (null != scene) { scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcMove, npcMoveBuilder); } } } }
public void DeleteUser(User user) { if (null != user) { user.UserControlState = (int)UserControlState.Remove; if (null != user.Info) { //user.Info.Suicide(); } LogSys.Log(LOG_TYPE.DEBUG, "Room {0} User {1}({2}) deleted.", RoomId, user.Guid, user.GetKey()); } }
internal void Destroy() { LogSys.Log(LOG_TYPE.INFO, "room {0}({1}) destroy.", RoomID, LocalID); m_ActiveScene.Reset(); m_ScenePool.RecycleScene(m_ActiveScene); m_ActiveScene = null; this.CurrentState = RoomState.Unuse; int userCt = room_users_.Count; for (int i = userCt - 1; i >= 0; --i) { User user = room_users_[i]; if (null != user) { LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [Room.Destroy]", user.LocalID, user.Guid, user.GetKey()); user.Reset(); user_pool_.FreeUser(user.LocalID); room_users_.RemoveAt(i); } } for (int i = 0; i < room_observers_.Length; ++i) { room_observers_[i].Reset(); } }
public void RemoveUser(User user, bool free) { if (user == null) { return; } Msg_RL_UserQuit quitBuilder = new Msg_RL_UserQuit(); quitBuilder.UserGuid = user.Guid; quitBuilder.RoomId = RoomId; m_Connector.SendMsgToLobby(quitBuilder); foreach (User otheruser in m_RoomUsers) { if (null != otheruser && otheruser != user) { otheruser.RemoveSameRoomUser(user); } } user.ClearSameRoomUser(); if (null != m_ActiveScene) { Scene scene = m_ActiveScene; scene.LeaveScene(user); } LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [Room.RemoveUser]", user.LocalID, user.Guid, user.GetKey()); m_RoomUsers.Remove(user); if (free) { m_UserPool.FreeUser(user.LocalID); } }
internal static void Execute(object msg, User user) { LogSys.Log(LOG_TYPE.DEBUG, "Unhandled msg {0} user {1}({2},{3},{4})!!!", msg.GetType(), user.RoleId, user.GetKey(), user.Guid, user.Name); }
public void Destroy() { LogSys.Log(LOG_TYPE.INFO, "room {0}({1}) destroy.", RoomId, LocalID); OnDestroy(); m_RoomUserMgr.ActiveScene.Reset(); m_ScenePool.RecycleScene(m_RoomUserMgr.ActiveScene); m_RoomUserMgr.ActiveScene = null; this.CurrentState = RoomState.Unuse; int userCt = m_RoomUserMgr.RoomUsers.Count; for (int i = userCt - 1; i >= 0; --i) { User user = m_RoomUserMgr.RoomUsers[i]; if (null != user) { LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [Room.Destroy]", user.LocalID, user.Guid, user.GetKey()); user.Reset(); m_UserPool.FreeUser(user.LocalID); m_RoomUserMgr.RoomUsers.RemoveAt(i); } } for (int i = 0; i < m_RoomUserMgr.RoomObservers.Length; ++i) { m_RoomUserMgr.RoomObservers[i].Reset(); } }
internal bool AddNewUser(User newUser) { foreach (User us in room_users_) { if (us != null && us.Guid == newUser.Guid) { //当前玩家已在游戏房间内 if (us.GetKey() == newUser.GetKey()) { LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey()); user_pool_.FreeUser(newUser.LocalID); return true; } else if (us.UserControlState != (int)UserControlState.User) { LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for old {1} {2}, [Room.AddNewUser]", us.LocalID, us.Guid, us.GetKey()); RemoveUser(us); break; } else { LogSys.Log(LOG_TYPE.DEBUG, "Add user false: User already in the room and online! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ", cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey()); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey()); user_pool_.FreeUser(newUser.LocalID); return false; } } } can_close_time_ = 0; newUser.EnterRoomTime = TimeUtility.GetLocalMilliseconds(); newUser.OwnRoom = this; newUser.RegisterObservers(room_observers_); newUser.CharacterCreateTime = TimeUtility.GetLocalMilliseconds(); newUser.TimeCounter = 0; if ((int)UserControlState.Ai == newUser.UserControlState) { newUser.IsEntered = true; } if (null != m_ActiveScene && m_ActiveScene.SceneState == SceneState.Running) { Scene scene = m_ActiveScene; scene.EnterScene(newUser); } foreach (User otheruser in room_users_) { if (otheruser != null) { otheruser.AddSameRoomUser(newUser); newUser.AddSameRoomUser(otheruser); } } room_users_.Add(newUser); LogSys.Log(LOG_TYPE.DEBUG, "Add user success ! RoomID:{0} , UserGuid:{1}({2})", cur_room_id_, newUser.Guid, newUser.GetKey()); m_CanFinish = true; return true; }