void _firstTimer_Completed(object sender, object e) { _firstTimer.Completed -= _firstTimer_Completed; _firstTimer = null; // if (_unit is Player) // _unit = _unit; ///Так как это юнит мы убираем флаг юзед со старой ячейку var callOld = _map.Calls.Single(p => p.IndexLeft == _unit.PositionX && p.IndexTop == _unit.PositionY); ///Удаляем из старой ячейки ссылку на юнит callOld.IUnits.Remove(_unit); if (!callOld.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.UnitBlock)) { ///Делаем ячейку пустой callOld.Used = false; } _unit.PositionX = _xNew; _unit.PositionY = _yNew; ///Получаем новую ячейку var callNew = _map.Calls.Single(p => p.IndexLeft == _unit.PositionX && p.IndexTop == _unit.PositionY); if (!_unit.Dead) { //if (_unit is Player) // callNew = callNew; ///Добавляем в нее ссылку на юнит callNew.IUnits.Add(_unit); ///Убераем то что колонка использывалась, теперь ставим что она все время используется callNew.Used = true; } ///Проверим или получил юнит урон в новой ячейке foreach (var item in callNew.Bullet) { if (!item.BuffDemage) { if (!item.IsRoket) { item.Exept = UnitGenerator.AddDamage(callNew, item); } else { ///Только попадение, урон не наносится item.Exept = UnitGenerator.AddNullDemage(callNew, item); } if (item.Exept) { UnitGenerator.AddStuneTwo(callNew, item, item.StunDuration, item.StunDuration); } } else if (!item.IsRoket)///Значит баф урон, и не бомба { UnitGenerator.AddBufDemageOne(callNew, item, item.DemageMagic); } } callNew.Using = false; Player player = _unit as Player; if (player != null && callNew.Item.Count > 0) { int playerItemCount = player.Items.Count; ItemClass addedItem = callNew.Item.FirstOrDefault(); ///Смотрим можно ли данный итем во что то собрать ItemClass newItem = UnitGenerator.CreateNewItem(player, addedItem); if (newItem != null) { ///Можно собрать ///Разрешаем пропустить итем playerItemCount = 0; addedItem = newItem; } if (addedItem.Bonus)///Если итем бонус, то пропустить его тоже { playerItemCount = 0; } if (playerItemCount < 4) { _map.MapCanvas.Children.Remove(callNew.Item.FirstOrDefault().View); ///Подбираем итем player.AddItem(addedItem); callNew.Item.Remove(callNew.Item.FirstOrDefault()); } } }
private void BuyItemMethod(Player _player, ItemClass itemClass) { int playerItemCount = _player.Items.Count; ItemClass addedItem = itemClass; ///Если предмет сборный ///Названия частей которых есть (чтобы потом их удалить) List <string> yesAllParts = new List <string>(); ///Сума золота необходимая для покупки итема int allPrice = itemClass.Price; ///С начала проверим, может игроку нужен рецепт итема а не сам итем if (addedItem.Parts != null) { allPrice = 0; foreach (var item in addedItem.Parts) { if (CurrentPlayer.Items.Count(p => p.Name == item.Name) == 0) { ///Проверим может есть части итема, частей if (item.Parts != null) { foreach (var item2 in item.Parts) { if (!CurrentPlayer.Items.Any(p => p.Name == item2.Name)) { allPrice += item2.Price; } else if (CurrentPlayer.Items.Count(p => p.Name == item2.Name) > yesAllParts.Count(p => p == item2.Name)) { yesAllParts.Add(item2.Name); } else { allPrice += item2.Price; } } } else { allPrice += item.Price; } } else if (CurrentPlayer.Items.Count(p => p.Name == item.Name) > yesAllParts.Count(p => p == item.Name)) { yesAllParts.Add(item.Name); } else { ///Проверим может есть части итема, частей if (item.Parts != null) { foreach (var item2 in item.Parts) { if (!CurrentPlayer.Items.Any(p => p.Name == item2.Name)) { allPrice += item2.Price; } else if (CurrentPlayer.Items.Count(p => p.Name == item2.Name) > yesAllParts.Count(p => p == item2.Name)) { yesAllParts.Add(item2.Name); } else { allPrice += item2.Price; } } } else { allPrice += item.Price; } } } } if (_player.Gold >= allPrice && !_player.Dead) { int oldPrice = itemClass.Price; if (allPrice == addedItem.Price) {///Значит никаких частей у игрока нету ///Смотрим можно ли данный итем во что то собрать ItemClass newItem = UnitGenerator.CreateNewItem(_player, itemClass); if (newItem != null) { ///Можно собрать ///Разрешаем пропустить итем playerItemCount = 0; addedItem = newItem; } if (playerItemCount < 4) { _player.Gold -= oldPrice; ///Подбираем итем _player.AddItem(addedItem); if (playerItemCount == 0) { ///Смотрим можно ли во что то собрать части в инвинтаре for (int i = 0; i < 4; i++) { ItemClass newItemPart2 = UnitGenerator.CreateNewItem(_player, addedItem); if (newItemPart2 != null) { _player.RemoveItem(addedItem, false); _player.AddItem(newItemPart2); } else { break; } } } } else { ///Нет места в инвинтаре } } else {///Части есть, значит место для итема найдется _player.Gold -= allPrice; ///Удаляем части которые уже есть foreach (var item in yesAllParts) { CurrentPlayer.RemoveItem(CurrentPlayer.Items.FirstOrDefault(p => p.Name == item), false); } ///Подбираем итем _player.AddItem(addedItem); } } }