public List <string> GetMapItems() { List <string> packets = new List <string>(); Sessions.Where(s => s.Character != null && !s.Character.InvisibleGm).ToList().ForEach(s => { s.Character.Mates.Where(m => m.IsTeamMember).ToList().ForEach(m => packets.Add(m.GenerateIn())); }); // TODO: Parallelize getting of items of mapinstance Portals.ForEach(s => packets.Add(s.GenerateGp())); ScriptedInstances.Where(s => s.Type == ScriptedInstanceType.TimeSpace).ToList().ForEach(s => packets.Add(s.GenerateWp())); Monsters.ForEach(s => { packets.Add(s.GenerateIn()); if (s.IsBoss) { packets.Add(s.GenerateBoss()); } }); Npcs.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateNPCShopOnMap()); Parallel.ForEach(DroppedList.GetAllItems(), session => packets.Add(session.GenerateIn())); Buttons.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateUserShops()); packets.AddRange(GeneratePlayerShopOnMap()); return(packets); }
public void DropItemByMonster(long?Owner, DropDTO drop, short mapX, short mapY) { try { MapItem droppedItem = null; short localMapX = (short)(_random.Next(mapX - 1, mapX + 1)); short localMapY = (short)(_random.Next(mapY - 1, mapY + 1)); List <MapCell> Possibilities = new List <MapCell>(); for (short x = -1; x < 2; x++) { for (short y = -1; y < 2; y++) { Possibilities.Add(new MapCell() { X = x, Y = y }); } } foreach (MapCell possibilitie in Possibilities.OrderBy(s => _random.Next())) { localMapX = (short)(mapX + possibilitie.X); localMapY = (short)(mapY + possibilitie.Y); if (!IsBlockedZone(localMapX, localMapY)) { break; } } ItemInstance newInstance = InventoryList.CreateItemInstance(drop.ItemVNum); newInstance.Amount = drop.Amount; droppedItem = new MapItem(localMapX, localMapY) { ItemInstance = newInstance, Owner = Owner }; // rarify if (droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.Armor || droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.MainWeapon || droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.SecondaryWeapon) { droppedItem.Rarify(null); } DroppedList.TryAdd(droppedItem.ItemInstance.TransportId, droppedItem); // TODO: UseTransportId Broadcast($"drop {droppedItem.ItemInstance.ItemVNum} {droppedItem.ItemInstance.TransportId} {droppedItem.PositionX} {droppedItem.PositionY} {droppedItem.ItemInstance.Amount} 0 0 -1"); } catch (Exception e) { Logger.Error(e); } }
public void RemoveMapItem() { // take the data from list to remove it without having enumeration problems (ToList) try { List <MapItem> dropsToRemove = DroppedList.Where(dl => dl.CreatedDate.AddMinutes(3) < DateTime.Now); Parallel.ForEach(dropsToRemove, drop => { Broadcast(StaticPacketHelper.Out(UserType.Object, drop.TransportId)); DroppedList.Remove(drop.TransportId); }); } catch (Exception e) { Logger.Error(e); } }
public void RemoveMapItem() { // take the data from list to remove it without having enumeration problems (ToList) try { List <MapItem> dropsToRemove = DroppedList.GetAllItems().Where(dl => dl.CreatedDate.AddMinutes(3) < DateTime.Now).ToList(); foreach (MapItem drop in dropsToRemove) { Broadcast(drop.GenerateOut(drop.TransportId)); DroppedList.Remove(drop.TransportId); } } catch (Exception e) { Logger.Error(e); } }
private void RemoveMapItem() { // take the data from list to remove it without having enumeration problems (ToList) try { IEnumerable <KeyValuePair <long, MapItem> > dropsToRemove = DroppedList.Where(dl => dl.Value.CreateDate.AddMinutes(3) < DateTime.Now).ToList(); foreach (KeyValuePair <long, MapItem> drop in dropsToRemove) { Broadcast(drop.Value.GenerateOut(drop.Key)); MapItem mapItem; DroppedList.TryRemove(drop.Key, out mapItem); } } catch (Exception e) { Logger.Error(e); } }
public void DropItemByMonster(long?Owner, DropDTO drop, short mapX, short mapY, int gold = 0) { try { MonsterMapItem droppedItem = null; short localMapX = (short)(_random.Next(mapX - 1, mapX + 1)); short localMapY = (short)(_random.Next(mapY - 1, mapY + 1)); List <MapCell> Possibilities = new List <MapCell>(); for (short x = -1; x < 2; x++) { for (short y = -1; y < 2; y++) { Possibilities.Add(new MapCell() { X = x, Y = y }); } } foreach (MapCell possibilitie in Possibilities.OrderBy(s => _random.Next())) { localMapX = (short)(mapX + possibilitie.X); localMapY = (short)(mapY + possibilitie.Y); if (!IsBlockedZone(localMapX, localMapY)) { break; } } droppedItem = new MonsterMapItem(localMapX, localMapY, drop.ItemVNum, drop.Amount, Owner ?? -1); DroppedList.TryAdd(droppedItem.TransportId, droppedItem); Broadcast($"drop {droppedItem.ItemVNum} {droppedItem.TransportId} {droppedItem.PositionX} {droppedItem.PositionY} {(droppedItem.GoldAmount > 1 ? droppedItem.GoldAmount : droppedItem.Amount)} 0 0 -1"); } catch (Exception e) { Logger.Error(e); } }
public List <string> GetMapItems() { List <string> packets = new List <string>(); Portals.ForEach(s => packets.Add(s.GenerateGp())); ScriptedInstances.Where(s => s.Type == ScriptedInstanceType.TimeSpace).ToList().ForEach(s => packets.Add(s.GenerateWp())); Monsters.ForEach(s => { packets.Add(s.GenerateIn()); if (s.IsBoss) { packets.Add(s.GenerateBoss()); } }); Npcs.ForEach(s => { packets.Add(s.GenerateIn()); }); packets.AddRange(GenerateNpcShopOnMap()); Parallel.ForEach(DroppedList.Select(s => s.Value), session => { packets.Add(session.GenerateIn()); }); Buttons.ForEach(s => { packets.Add(s.GenerateIn()); }); packets.AddRange(GenerateUserShops()); packets.AddRange(GeneratePlayerShopOnMap()); return(packets); }
public List <string> GetMapItems() { List <string> packets = new List <string>(); Sessions.Where(s => s.Character != null && !s.Character.InvisibleGm).ToList().ForEach(s => { s.Character.Mates.Where(m => m.IsTeamMember).ToList().ForEach(m => packets.Add(m.GenerateIn())); }); Portals.ForEach(s => packets.Add(s.GenerateGp())); TimeSpaces.ForEach(s => packets.Add(s.GenerateWp())); Monsters.ForEach(s => packets.Add(s.GenerateIn())); Npcs.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateNPCShopOnMap()); DroppedList.GetAllItems().ForEach(s => packets.Add(s.GenerateIn())); Buttons.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateUserShops()); packets.AddRange(GeneratePlayerShopOnMap()); return(packets); }
public void DropItemByMonster(long?Owner, DropDTO drop, short mapX, short mapY) { try { Random rnd = new Random((int)DateTime.Now.Ticks & 0x0000FFFF); MapItem droppedItem = null; short localMapX = (short)(rnd.Next(mapX - 1, mapX + 1)); short localMapY = (short)(rnd.Next(mapY - 1, mapY + 1)); while (IsBlockedZone(localMapX, localMapY)) { localMapX = (short)(rnd.Next(mapX - 1, mapX + 1)); localMapY = (short)(rnd.Next(mapY - 1, mapY + 1)); } ItemInstance newInstance = InventoryList.CreateItemInstance(drop.ItemVNum); newInstance.Amount = drop.Amount; droppedItem = new MapItem(localMapX, localMapY) { ItemInstance = newInstance, Owner = Owner }; //rarify if (droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.Armor || droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.MainWeapon || droppedItem.ItemInstance.Item.EquipmentSlot == (byte)EquipmentType.SecondaryWeapon) { droppedItem.Rarify(null); } DroppedList.TryAdd(droppedItem.ItemInstance.TransportId, droppedItem); Broadcast($"drop {droppedItem.ItemInstance.ItemVNum} {droppedItem.ItemInstance.TransportId} {droppedItem.PositionX} {droppedItem.PositionY} {droppedItem.ItemInstance.Amount} 0 0 -1");//TODO UseTransportId } catch (Exception e) { Logger.Error(e); } }
public List <string> GetMapItems() { List <string> packets = new List <string>(); Sessions.Where(s => s.Character?.InvisibleGm == false).ToList().ForEach(s => s.Character.Mates.Where(m => m.IsTeamMember).ToList().ForEach(m => packets.Add(m.GenerateIn()))); Portals.ForEach(s => packets.Add(s.GenerateGp())); ScriptedInstances.Where(s => s.Type == ScriptedInstanceType.TimeSpace).ToList().ForEach(s => packets.Add(s.GenerateWp())); Monsters.ForEach(s => { packets.Add(s.GenerateIn()); if (s.IsBoss) { packets.Add(s.GenerateBoss()); } }); Npcs.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateNPCShopOnMap()); DroppedList.ForEach(s => packets.Add(s.GenerateIn())); Buttons.ForEach(s => packets.Add(s.GenerateIn())); packets.AddRange(GenerateUserShops()); packets.AddRange(GeneratePlayerShopOnMap()); return(packets); }