using Sog; using ProtoCSStruct; namespace World { /// /// 好友在线状态 /// public static class FriendStatusSvc { public static void OnQueryFriendStatusReq(uint remoteAppID, StructPacket packet) { ref var req = ref packet.GetMessage(); TraceLog.Debug("FriendStatusSvc.OnQueryFriendStatusReq uid {0} query count {1}" , packet.ObjectID, req.Uids.Count); var res = new CSQueryFriendStatusRes(); int count = 0; for (int i = 0; i < req.Uids.Count; i++) { if (count >= 100) { break; } count++; CSFriendOneStatus oneStatus = new CSFriendOneStatus(); oneStatus.Uid = req.Uids[i]; var player = WorldServerUtils.GetPlayerTableOp().GetPlayerInfo(oneStatus.Uid); if (player != null && player.IsOnline) { oneStatus.Status = 1; //在线 } else { oneStatus.Status = 0; //不在线 } res.Friends.Add(ref oneStatus); } WorldServerUtils.GetPacketSender().SendToServerByID(remoteAppID, (int)CSGameMsgID.QueryFriendStatusRes, ref res, packet.ObjectID); } //game发给world要查玩家详细信息 public static void OnQueryOtherDetailReq(uint serverID, StructPacket packet) { PlayerInfoWorld player = WorldServerUtils.GetPlayerTableOp().GetPlayerInfo(packet.ObjectID); if (player == null) { TraceLog.Error("FriendStatusSvc.OnQueryOtherDetailReq player {0} = null", packet.ObjectID); return; } ref var req = ref packet.GetMessage(); var res = new CSQueryOtherDetailRes { TargetUid = req.TargetUid }; //如果是机器人,则直接赋值并且回包 if (req.TargetUid < 10000) { res.HideInfo = 1; var robot = WorldServerUtils.GetPlayerTableOp().GetPlayerInfo(req.TargetUid); if (robot != null) { res.Ret = 0; res.Nick = robot.roleBase.Nick; res.Icon = robot.roleBase.Icon; res.Level = robot.roleBase.Level; res.Chip = robot.roleBase.Chip; res.Diamond = robot.roleBase.Diamond; } else { TraceLog.Error("FriendStatusSvc.OnQueryOtherDetailReq robot {0} not in table", req.TargetUid); } WorldServerUtils.GetPacketSender().SendToServerByID(serverID, (int)CSGameMsgID.QueryOtherDetailRes, ref res, packet.ObjectID); } else { //不是机器人发给friend WorldServerUtils.GetPacketSender().SendToFriendServer(packet, player.UserID); } } } }