public void ThrowItems(Tuple <int, short, byte, int, int, short> parameter) { MapMonster mon = Monsters.Find(s => s.MapMonsterId == parameter.Item1) ?? Monsters.Find(s => s.MonsterVNum == parameter.Item1); if (mon == null) { return; } short originX = mon.MapX; short originY = mon.MapY; short destX; short destY; int amount = 1; Observable.Timer(TimeSpan.FromSeconds(parameter.Item6)).Subscribe(s => { for (int i = 0; i < parameter.Item3; i++) { amount = ServerManager.RandomNumber(parameter.Item4, parameter.Item5); destX = (short)(originX + ServerManager.RandomNumber(-10, 10)); destY = (short)(originY + ServerManager.RandomNumber(-10, 10)); if (Map.IsBlockedZone(destX, destY)) { destX = originX; destY = originY; } MonsterMapItem droppedItem = new MonsterMapItem(destX, destY, parameter.Item2, amount); DroppedList[droppedItem.TransportId] = droppedItem; Broadcast($"throw {droppedItem.ItemVNum} {droppedItem.TransportId} {originX} {originY} {droppedItem.PositionX} {droppedItem.PositionY} {(droppedItem.GoldAmount > 1 ? droppedItem.GoldAmount : droppedItem.Amount)}"); } }); }
public MapItem PutItem(InventoryType type, short slot, byte amount, ref ItemInstance inv, ClientSession session) { Logger.Debug($"type: {type} slot: {slot} amount: {amount}", session.SessionId); Guid random2 = Guid.NewGuid(); MapItem droppedItem = null; List <GridPos> Possibilities = new List <GridPos>(); for (short x = -2; x < 3; x++) { for (short y = -2; y < 3; y++) { Possibilities.Add(new GridPos { x = x, y = y }); } } short mapX = 0; short mapY = 0; bool niceSpot = false; foreach (GridPos possibilitie in Possibilities.OrderBy(s => _random.Next())) { mapX = (short)(session.Character.PositionX + possibilitie.x); mapY = (short)(session.Character.PositionY + possibilitie.y); if (!Map.IsBlockedZone(mapX, mapY)) { niceSpot = true; break; } } if (niceSpot) { if (amount > 0 && amount <= inv.Amount) { ItemInstance newItemInstance = inv.DeepCopy(); newItemInstance.Id = random2; newItemInstance.Amount = amount; droppedItem = new CharacterMapItem(mapX, mapY, newItemInstance); DroppedList[droppedItem.TransportId] = droppedItem; inv.Amount -= amount; } } return(droppedItem); }
public void DropItemByMonster(long?owner, DropDTO drop, short mapX, short mapY) { try { short localMapX = mapX; short localMapY = mapY; 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 possibility in possibilities.OrderBy(s => ServerManager.RandomNumber())) { localMapX = (short)(mapX + possibility.X); localMapY = (short)(mapY + possibility.Y); if (!Map.IsBlockedZone(localMapX, localMapY)) { break; } } MonsterMapItem droppedItem = new MonsterMapItem(localMapX, localMapY, drop.ItemVNum, drop.Amount, owner ?? -1); DroppedList[droppedItem.TransportId] = droppedItem; if (drop.Amount == 99) { return; } if (droppedItem == null) { return; } 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 void DropItemByMonster(long?owner, DropDTO drop, short mapX, short mapY, bool hideOwnerId = false, bool isQuestItem = false) { try { short localMapX = mapX; short localMapY = mapY; 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 possibility in possibilities.OrderBy(s => ServerManager.RandomNumber())) { localMapX = (short)(mapX + possibility.X); localMapY = (short)(mapY + possibility.Y); if (!Map.IsBlockedZone(localMapX, localMapY)) { break; } } MonsterMapItem droppedItem = new MonsterMapItem(localMapX, localMapY, drop.ItemVNum, drop.Amount, owner ?? -1, isQuestItem) { IsDroppedByMonster = true }; DroppedList[droppedItem.TransportId] = droppedItem; Broadcast($"drop {droppedItem.ItemVNum} {droppedItem.TransportId} {droppedItem.PositionX} {droppedItem.PositionY} {(droppedItem.GoldAmount > 1 ? droppedItem.GoldAmount : droppedItem.Amount)} {(droppedItem.IsQuestItem ? 1 : 0)} {(droppedItem.OwnerId != -1 ? (!hideOwnerId ? droppedItem.OwnerId : -1) : -1)}"); } catch (Exception e) { Logger.Error(e); } }