public void Login() { Packet p = new Packet(); p.PutByte((byte)PacketType.Login); // Login-viesti p.PutString("v2.5"); // Ohjelmaversio p.PutString("SharpNM" + new Random().Next(int.MaxValue)); // Nimi ClientSend(p); // Lähetys while (!IsLoggedIn) { NmClient_PacketReceived(null, new PacketEventArgs(ClientRead())); } //ClientReadInternal(); }
internal void Logout() { Packet p = new Packet(); p.PutByte(PacketType.Logout); ClientSend(p); IsLoggedIn = false; }
private void HandleLogin(Packet p) { var netmsg = p.GetByte(); // Luetaan kirjautumispyynnön vastaus switch ((PacketType)netmsg) { case PacketType.LoginFailed: { // Kirjautuminen epäonnistui // Luetaan syy var reason = p.GetByte(); switch ((PacketType)reason) { case PacketType.WrongVersion: // Väärä ohjelmaversio // Luetaan palvelimen ohjelmaversio throw new Exception("Wrong version! Server expected version " + p.GetString()); case PacketType.TooManyPlayers: // Liikaa pelaajia throw new Exception("Server is full"); case PacketType.NicknameInUse: throw new Exception("Nickname in use"); default: throw new Exception("Unexpected error!"); } } case PacketType.LoginOk: Uid = p.ClientId; PlayerId = p.GetByte(); var playMode = p.GetByte(); MapName = p.GetString(); MapCRC = p.GetInt(); MapServerUrl = p.GetString(); p = new Packet(); p.PutByte(PacketType.PlayerName); // Pyydetään kaikki tiedot p.PutByte(PlayerId); // Pelaajatunnus p.PutByte(PacketType.End); // Viestin loppu ClientSend(p); IsLoggedIn = true; return; break; } }
public void UpdatePlayer(byte shootNow, byte pickedItemId = 0) { Packet p = new Packet(); p.PutByte((byte)PacketType.Player); p.PutByte(LocalPlayer.Id); p.PutShort((short)LocalPlayer.Position.X); p.PutShort((short)LocalPlayer.Position.Y); p.PutShort(LocalPlayer.Angle); if (LocalPlayer.HasAmmo == 0 || LocalPlayer.HeldWeapon == 0) { shootNow = 0; } // Tungetaan useampi muuttuja yhteen tavuun: byte b = (byte)((((int)LocalPlayer.HeldWeapon % 16) << 0) // Ase (bitit 0-3) + (LocalPlayer.HasAmmo << 4) // Onko ammuksia (bitti 4) + (shootNow << 5)); // Ammutaanko (bitti 5) p.PutByte(b); p.PutByte(pickedItemId); ClientSend(p); }