private static void HandleNebulae(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.Nebulae = buffer.GetList <Nebula>(); buffer.Dispose(); }
private static void HandleItems(byte[] data) { InterfaceGUI.AddChats(@"Item dictionary downloaded.", Color.DarkOliveGreen); var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.Items = buffer.GetList <Item>(); buffer.Dispose(); }
private static void HandleInventory(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Inventory = buffer.GetList <Inventory>(); Types.Player[GameLogic.PlayerIndex].Credits = buffer.GetInteger(); Globals.newInventory = true; buffer.Dispose(); }
public void PreparePulseBroadcast() { var mobRange = 2000; _combatService.CycleArrays(); for (var i = 1; i < Constants.MAX_PLAYERS; i++) { if (ServerTCP.Clients[i].Socket != null && ServerTCP.tempPlayer[i].inGame && ServerTCP.tempPlayer[i].receiving) { var buffer = new PacketBuffer(); buffer.AddInteger((int)SPulse); buffer.AddInteger(_userService.ActiveUsers.Count); buffer.AddBytes(BitConverter.GetBytes(DateTime.UtcNow.ToBinary())); _userService.ActiveUsers.ForEach(p => { var ndx = Array.IndexOf(Types.PlayerIds, p.Id); buffer.AddInteger(ndx); buffer.AddString(p.Id); buffer.AddFloat(p.X); buffer.AddFloat(p.Y); buffer.AddFloat(p.Rotation); buffer.AddInteger(p.Health); buffer.AddInteger(p.MaxHealth); buffer.AddInteger(p.Shield); buffer.AddInteger(p.MaxShield); buffer.AddBytes(BitConverter.GetBytes(ServerTCP.tempPlayer[ndx].inGame)); }); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[i]); var minX = (int)player.X - mobRange; var minY = (int)player.Y - mobRange; var maxX = (int)player.X + mobRange; var maxY = (int)player.Y + mobRange; buffer.AddArray(_mobService.GetMobs(minX, maxX, minY, maxY).ToArray()); buffer.AddArray(_combatService.GetCombats((int)player.X, (int)player.Y).ToArray()); buffer.AddArray(Globals.Inventory.Where(m => m.X >= minX && m.X <= maxX && m.Y >= minY && m.Y <= maxY).ToArray()); buffer.AddArray(Globals.Loot.Where(L => L.X >= minX && L.X <= maxX && L.Y >= minY && L.Y <= maxY && L.Owner == player.Id).ToArray()); SendData(i, buffer.ToArray()); buffer.Dispose(); } } }
private void GoodRegister(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side buffer.Dispose(); ctcp.SendLogin(); MenuManager.Clear(2); InterfaceGUI.AddChats(@"Registration successful.", Color.DarkOliveGreen); }
void HandleServerFull(byte[] data) { int longueur; PacketBuffer _buffer = new PacketBuffer(); _buffer.AddBytes(data); longueur = _buffer.GetInteger(); longueur = BitConverter.GetBytes(longueur).Length; string login = _buffer.GetString(data.Length - longueur); Console.WriteLine(login); }
private static void HandleGalaxy(byte[] data) { InterfaceGUI.AddChats(@"Galaxy downloaded.", Color.DarkOliveGreen); var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.Galaxy = buffer.GetList <Star>(); GameLogic.CollectPlanets(); InterfaceGUI.PopulateMap(); buffer.Dispose(); }
public void HandleNetworkMessages(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); var packetNum = buffer.GetInteger(); buffer.Dispose(); if (packets.TryGetValue(packetNum, out var Packet)) { Packet.Invoke(data); } }
private void RecvPlayer(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var posX = buffer.GetFloat(); var posY = buffer.GetFloat(); var rot = buffer.GetFloat(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); player.Rotation = rot; player.X = posX; player.Y = posY; }
public void HandleNetworkMessages(byte[] data) { int packetNum; PacketBuffer _buffer; _buffer = new PacketBuffer(); _buffer.AddBytes(data); packetNum = _buffer.GetInteger(); _buffer.Dispose(); if (packets.TryGetValue(packetNum, out Packet_ packet)) { packet.Invoke(data); } }
private static void GetStaticPulse(byte[] data) { InterfaceGUI.AddChats(@"Existing connections downloaded.", Color.DarkOliveGreen); // Someone new connected so this is all the data we don't need updating every 100ms var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var numPlayers = buffer.GetInteger(); for (var i = 0; i != numPlayers; i++) { var index = buffer.GetInteger(); Types.Player[index].Name = buffer.GetString(); } buffer.Dispose(); }
public void SendData(int index, byte[] data) { var buffer = new PacketBuffer(); var compressed = Compress(data); buffer.AddInteger(compressed.Length); buffer.AddBytes(compressed); try { ServerTCP.Clients[index].Stream.Write(buffer.ToArray(), 0, buffer.ToArray().Length); } catch { // Console.WriteLine(@"Unable to send packet- client disconnected"); } buffer.Dispose(); }
public void HandleStack(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var from = buffer.GetString(); var to = buffer.GetString(); buffer.Dispose(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); if (Transactions.StackItems(from, to, player) == -1) { SendMessage(index, "Invalid item, item cannot stack, or stack is full.", Warning); } ; SendInventory(index); }
private static void HandleServerPulse(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); // Packet Type var numPlayers = buffer.GetInteger(); Globals.serverTime = BitConverter.ToInt64(buffer.GetBytes(8), 0); for (var i = 0; i != numPlayers; i++) { var index = buffer.GetInteger(); var Id = buffer.GetString(); var X = buffer.GetFloat(); var Y = buffer.GetFloat(); var Rotation = buffer.GetFloat(); var Health = buffer.GetInteger(); var MaxHealth = buffer.GetInteger(); var Shield = buffer.GetInteger(); var MaxShield = buffer.GetInteger(); var inGame = BitConverter.ToBoolean(buffer.GetBytes(1), 0); // If the buffer is not ourselves, skip the update - need to do not in game characters to remove logged out users if (index == GameLogic.PlayerIndex) { continue; } Types.Player[index].Id = Id; Types.Player[index].X = X; Types.Player[index].Y = Y; Types.Player[index].Rotation = Rotation; Types.Player[index].Health = Health; Types.Player[index].MaxHealth = MaxHealth; Types.Player[index].Shield = Shield; Types.Player[index].MaxShield = MaxShield; } GameLogic.LocalMobs = buffer.GetList <Mob>(); GameLogic.LocalCombat = buffer.GetList <Combat>(); GameLogic.LocalLoot = buffer.GetList <Inventory>(); GameLogic.RealLoot = buffer.GetList <Loot>(); GameLogic.WatchCombat(); buffer.Dispose(); }
public void ParseChat(int index, byte[] data) { var buffer = new PacketBuffer(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); buffer.AddBytes(data); buffer.GetInteger(); var str = buffer.GetString(); if (str.ToLower().StartsWith("/c")) { RelayChat(index, str.Substring(3)); } if (str.ToLower().StartsWith(">>")) { var result = Transactions.AdminCommand(index, player, str.Substring(2).TrimStart()); SendMessage(index, result, Notification); XFerLoad(index, 1); } }
private static void DownloadData(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side var suppress = buffer.GetInteger(); var i = GameLogic.PlayerIndex; Types.Player[i] = new User { Id = buffer.GetString(), Name = buffer.GetString(), X = buffer.GetFloat(), Y = buffer.GetFloat(), Rotation = buffer.GetFloat(), Health = buffer.GetInteger(), MaxHealth = buffer.GetInteger(), Shield = buffer.GetInteger(), MaxShield = buffer.GetInteger(), Rank = buffer.GetString(), Credits = buffer.GetInteger(), Exp = buffer.GetInteger(), Level = buffer.GetInteger(), Weap1Charge = buffer.GetInteger(), Weap2Charge = buffer.GetInteger(), Weap3Charge = buffer.GetInteger(), Weap4Charge = buffer.GetInteger(), Weap5Charge = buffer.GetInteger(), Inventory = buffer.GetList <Inventory>() }; buffer.Dispose(); if (suppress == 1) { return; } MenuManager.Clear(1); Globals.graphicsChange = Globals.Fullscreen; InterfaceGUI.AddChats(@"User data downloaded.", Color.DarkOliveGreen); }
private static void HandleExperience(byte[] data) { var random = new Random(); var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var tempLevel = buffer.GetInteger(); var tempXP = buffer.GetInteger(); var increase = tempXP - Types.Player[GameLogic.PlayerIndex].Exp; if (tempLevel > Types.Player[GameLogic.PlayerIndex].Level) { Game1.LevelUp.Create(new Vector2(Types.Player[GameLogic.PlayerIndex].X - 20 + random.Next(40), Types.Player[GameLogic.PlayerIndex].Y - 20 + random.Next(40))); } Types.Player[GameLogic.PlayerIndex].Level = tempLevel; Types.Player[GameLogic.PlayerIndex].Exp = tempXP; var tempDamage = new DamageText(increase.ToString(), new Vector2(Types.Player[GameLogic.PlayerIndex].X - 20 + random.Next(40), Types.Player[GameLogic.PlayerIndex].Y - 20 + random.Next(40)), 2); Game1.DamageTexts.Add(tempDamage); }
public void HandleItemTransaction(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var id = buffer.GetString(); var recipientId = buffer.GetString(); buffer.Dispose(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); if (recipientId == player.Id) { if (Transactions.ReceiveFromGlobal(id, player)) { SendInventory(index); } else { SendMessage(index, "The object no longer exists", Minor); } } else { var recipient = _userService.ActiveUsers.Find(p => p.Id == recipientId); if (!Transactions.TransferItem(id, player, recipient)) { return; } SendInventory(index); if (recipientId == "X") { return; } var recipientIndex = Array.IndexOf(Types.PlayerIds, recipient); SendInventory(recipientIndex); } }
public void HandleLoot(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var type = buffer.GetInteger(); var lootId = buffer.GetString(); var itemIndex = buffer.GetInteger(); if (type == 1) { Globals.Loot.Remove(Globals.Loot.FirstOrDefault(l => l.Id == lootId)); } else { var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); if (Transactions.CollectLoot(lootId, itemIndex, player)) { SendInventory(index, true); } } }
private static void UpdateData(byte[] data) { if (GameLogic.PlayerIndex < 0) { return; } var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Health = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].MaxHealth = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Shield = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].MaxShield = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Exp = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Level = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Weap1Charge = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Weap2Charge = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Weap3Charge = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Weap4Charge = buffer.GetInteger(); Types.Player[GameLogic.PlayerIndex].Weap5Charge = buffer.GetInteger(); buffer.Dispose(); }
private void HandleRegister(int index, byte[] data) { Console.WriteLine(@"Received register packet"); var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var username = buffer.GetString(); var password = buffer.GetString(); var exists = _userService.AccountExists(username); if (!exists) { var player = _userService.RegisterUser(username, password); Types.PlayerIds[index] = player.Id; _userService.ActiveUsers.Add(player); AcknowledgeRegister(index); } else { SendMessage(index, "That username already exists!", Warning); } }
private void HandleLogin(int index, byte[] data) { Console.WriteLine(@"Received login packet"); var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var username = buffer.GetString(); var password = buffer.GetString(); if (!_userService.AccountExists(username)) { SendMessage(index, "Username does not exist!", Warning); return; } if (!_userService.PasswordOK(username, password)) { SendMessage(index, "Password incorrect!", Warning); return; } var player = _userService.LoadPlayer(username); Types.PlayerIds[index] = player.Id; _userService.ActiveUsers.Add(player); ServerTCP.tempPlayer[index].inGame = true; XFerLoad(index); SendGalaxy(index); SendItems(index); SendNebulae(index); SendMessage(-1, player.Name + " has connected.", Notification); Globals.FullData = true; Console.WriteLine(username + @" logged in successfully."); ServerTCP.tempPlayer[index].receiving = true; }
public void HandleCombat(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var targetId = buffer.GetString(); var weapon = buffer.GetInteger(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); var weaponId = player.Inventory.FirstOrDefault(i => i.Slot == weapon); if (weaponId == null) { return; } var WEAPON = Globals.Items.FirstOrDefault(w => w.Id == weaponId?.ItemId); if (WEAPON == null) { return; } switch (weaponId.Slot) { case 7: player.Weap1Charge = 0; break; case 8: player.Weap2Charge = 0; break; case 9: player.Weap3Charge = 0; break; case 10: player.Weap4Charge = 0; break; case 11: player.Weap5Charge = 0; break; } var combat = _combatService.DoAttack(targetId, player.Id, WEAPON); var targetPlayer = _userService.ActiveUsers.FirstOrDefault(p => p?.Id == combat.TargetId); if (combat.TargetId == "dead") { Transactions.CreateLoot(player, new Vector2(combat.TargetX, combat.TargetY)); var newLevel = Transactions.GiveXP(player, 1000); if (newLevel == -1) { SendMessage(index, "You have already reached the maximum level!", Announcement); } if (newLevel > 0) { SendMessage(index, "Congratulations, you have reached level " + player.Level + "!", Announcement); } SendXP(index); } if (targetPlayer == null) { return; } targetPlayer.Shield -= combat.WeaponDamage; if (targetPlayer.Shield >= 0) { return; } targetPlayer.Health += targetPlayer.Shield; targetPlayer.Shield = 0; }