我的未来不是梦 发表于 2020-3-7 00:21:37

新问题【登录器】

如图控制台输出这个    players.Players.ToString(),服务器信息输出了info.ToString(),显示出了,但是玩家信息没有显示,显示的是,,应该没问题呀。

201724 发表于 2020-3-7 15:19:29

是个List 你自己看代码

我的未来不是梦 发表于 2020-3-7 18:03:31

201724 发表于 2020-3-7 15:19
是个List 你自己看代码

我现在获取到了。不过Score不对劲

201724 发表于 2020-3-7 20:11:08

我的未来不是梦 发表于 2020-3-7 18:03
我现在获取到了。不过Score不对劲

自己研究格式吧 都忘光了。

k1nader 发表于 2020-3-10 17:01:30

我的未来不是梦 发表于 2020-3-7 18:03
我现在获取到了。不过Score不对劲

应该是数据类型不对,你把 public PlayerResponse GetPlayers() 的代码发出来呢

我的未来不是梦 发表于 2020-3-11 01:11:05

k1nader 发表于 2020-3-10 17:01
应该是数据类型不对,你把的代码发出来呢

public PlayerResponse GetPlayers()
      {
            try
            {
                var req = Constants.A2S_PLAYER_CHALLENGE_REQUEST;

                request(req);
                var response = fetchResponse();
                var byteReader = response.GetByteReader();
                // byte[] response = fetchResponse();
                //IByteReader byteReader = response.GetByteReader();
                if (!byteReader.GetByte().Equals(0x41))
                {
                  response = fetchResponse();
                  byteReader = response.GetByteReader();
                  //header = byteReader.GetByte();
                  if (!byteReader.GetByte().Equals(0x41))
                        throw new ArgumentException("Response was no challenge response.");
                }
                req = byteReader.GetByte();
                req = byteReader.GetByte();
                req = byteReader.GetByte();
                req = byteReader.GetByte();
                request(req);                        
                response = fetchResponse();
                byteReader = response.GetByteReader();
                byte header = byteReader.GetByte();
                if (!header.Equals(0x44))
                  throw new ArgumentException("Response was no player response.");

                PlayerResponse playerResponse = new PlayerResponse() { Header = header, Players = new List<Player>() };
                int playercount = byteReader.GetByte();
                for (int i = 1; i <= playercount; i++)
                {
                  playerResponse.Players.Add(new Player()
                  {
                        Index = byteReader.GetByte(),
                        Name = byteReader.GetString(),
                        Score = byteReader.GetLong(),
                        Duration = TimeSpan.FromSeconds(byteReader.GetFloat())
                  });
                }

                //IF more bytes == THE SHIP
                if (byteReader.Remaining > 0)
                {
                  playerResponse.IsTheShip = true;
                  for (int i = 0; i < playercount; i++)
                  {
                        playerResponse.Players.Deaths = byteReader.GetLong();
                        playerResponse.Players.Money = byteReader.GetLong();
                  }
                }

                return playerResponse;
            }
            catch (Exception ex)
            {
                throw new SourceQueryException("Could not gather Players", ex);
            }
      }

k1nader 发表于 2020-3-11 02:39:51

我的未来不是梦 发表于 2020-3-11 01:11


public uint GetLong()
{
        if (Remaining < 4)
                throw new ArgumentOutOfRangeException("Not Enough bytes left to read");

        uint longValue = BitConverter.ToUInt32(Response, Iterator);
        Iterator += 4;

        return longValue;
}

发现是 Okolni 这个人写的问题了。。 long 是有符号整型,他给搞成 无符号了

Score = byteReader.GetLong()
改成
Score = byteReader.GetInt()

31199seven 发表于 2020-3-11 14:39:07

都奔着人家的东东出现了!
页: [1]
查看完整版本: 新问题【登录器】