示例#1
0
        public override int GetStatIncrease(EquipmentKind ek, EntityStatKind esk)
        {
            var val = base.GetStatIncrease(ek);

            if (esk == EntityStatKind.ResistCold || esk == EntityStatKind.ResistFire || esk == EntityStatKind.ResistPoison ||
                esk == EntityStatKind.ResistLighting)
            {
                if (this.EnchanterSize == EnchanterSize.Small)
                {
                    val += 1;
                }
                else if (this.EnchanterSize == EnchanterSize.Medium)
                {
                    val += 2;
                }
                else if (this.EnchanterSize == EnchanterSize.Big)
                {
                    val += 4;
                }

                val *= resistMult;
            }

            if (Damaged)
            {
                val = val / 2;
            }
            return(val);
        }
示例#2
0
        LootStatInfo GetLootStatInfo(LootStatKind lsk, EquipmentKind ek, Dictionary <EquipmentKind, EntityStatKind> gemKindInfo)
        {
            var lootStatInfo = new LootStatInfo();

            lootStatInfo.Kind = lsk;
            var post = "";
            var desc = "Weapons: ";

            if (lsk == LootStatKind.Armor)
            {
                desc  = "Armor: ";
                post += "%";
            }
            else if (lsk == LootStatKind.Jewellery)
            {
                desc = "Jewellery: ";
            }

            lootStatInfo.Desc = desc;
            if (this.GemKind == GemKind.Amber)
            {
                if (lsk == LootStatKind.Weapon)
                {
                    lootStatInfo.Desc += "all elemental attacks";
                }
                else if (lsk == LootStatKind.Armor)
                {
                    lootStatInfo.Desc += "all elemental resists";
                }
                else
                {
                    var gemKind    = GemKind.Diamond;//read props from any
                    var otherKinds = GetOtherKinds(gemKind);

                    string other = "";
                    foreach (var otherKind in otherKinds)
                    {
                        var gemKindInfo_ = enhancmentProps[otherKind];
                        if (other.Any())
                        {
                            lootStatInfo.Desc += ", ";
                        }

                        var otDesc = gemKindInfo_[EquipmentKind.Ring].ToDescription();
                        lootStatInfo.Desc += otDesc;
                        other             += otDesc;
                    }
                }
            }
            else
            {
                lootStatInfo.Desc += gemKindInfo[ek].ToDescription();
            }

            lootStatInfo.Desc += " +" + GetStatIncrease(ek, gemKindInfo[ek]);

            lootStatInfo.Desc += post;

            return(lootStatInfo);
        }
示例#3
0
 public Equipment(EquipmentKind kind = EquipmentKind.Unset)//default arg for serialization
 {
     ExtendedInfo  = new LootExtendedInfo();
     primaryStat   = new EntityStat();
     EquipmentKind = kind;
     Class         = EquipmentClass.Plain;
     LootKind      = LootKind.Equipment;
 }
        public FreeRentPackage GetFreeRentPackage(IUnitOfWork uow, EquipmentKind equipmentKind)
        {
            var package = uow.Session.QueryOver <FreeRentPackage>()
                          .Where(p => p.EquipmentKind == equipmentKind)
                          .SingleOrDefault();

            return(package);
        }
示例#5
0
 public virtual Jewellery GetRandomJewellery(EntityStatKind sk, EquipmentKind eq = EquipmentKind.Unset)
 {
     if (eq == EquipmentKind.Amulet)
     {
         return(createAmulet(sk, 1, 3));
     }
     return(AddRing("", sk, 1, 3));
 }
示例#6
0
        Jewellery createJewellery(EquipmentKind kind, int minDropDungeonLevel)
        {
            var juwell = new Jewellery();

            juwell.EquipmentKind = kind;
            juwell.SetLevelIndex(minDropDungeonLevel);
            juwell.Price = 10;
            return(juwell);
        }
示例#7
0
 public LootHistoryItem(Loot loot)
 {
     Name     = loot.Name;
     LootKind = loot.LootKind;
     Tag1     = loot.tag1;
     if (loot is Equipment)
     {
         EquipmentKind = (loot as Equipment).EquipmentKind;
     }
 }
示例#8
0
        public virtual int GetStatIncrease(EquipmentKind ek, EntityStatKind esk = EntityStatKind.Unset)
        {
            int val = 0;

            if (ek == EquipmentKind.Amulet || ek == EquipmentKind.Ring || ek == EquipmentKind.Trophy)
            {
                val = otherEqKindValues[this.EnchanterSize];
            }
            else if (ek != EquipmentKind.Unset)
            {
                val = wpnAndArmorEqKindValues[this.EnchanterSize];
            }
            return(val);
        }
        protected override IQueryOver <FreeRentPackage> ItemsQuery(IUnitOfWork uow)
        {
            FreeRentPackagesJournalNode resultAlias = null;
            EquipmentKind equipmentKindAlias        = null;

            return(uow.Session.QueryOver <FreeRentPackage>()
                   .Left.JoinAlias(x => x.EquipmentKind, () => equipmentKindAlias)
                   .Where(GetSearchCriterion <FreeRentPackage>(x => x.Name))
                   .SelectList(list => list
                               .Select(x => x.Id).WithAlias(() => resultAlias.Id)
                               .Select(x => x.Name).WithAlias(() => resultAlias.Name)
                               .Select(() => equipmentKindAlias.Name).WithAlias(() => resultAlias.EquipmentKindName))
                   .OrderBy(x => x.Name).Asc
                   .TransformUsing(Transformers.AliasToBean <FreeRentPackagesJournalNode>()));
        }
示例#10
0
        public override void UpdateNodes()
        {
            Nomenclature               nomenclatureAlias    = null;
            EquipmentKind              equipmentKindAlias   = null;
            NomenclatureForSaleVMNode  resultAlias          = null;
            WarehouseMovementOperation operationAddAlias    = null;
            WarehouseMovementOperation operationRemoveAlias = null;

            Vodovoz.Domain.Orders.Order orderAlias = null;
            OrderEquipment orderEquipmentAlias     = null;
            Equipment      equipmentAlias          = null;

            var subqueryAdded = QueryOver.Of <WarehouseMovementOperation> (() => operationAddAlias)
                                .JoinAlias(() => operationAddAlias.Nomenclature, () => nomenclatureAlias)
                                .Where(() => nomenclatureAlias.Kind.Id == equipmentKindAlias.Id)
                                .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation> (o => o.IncomingWarehouse)))
                                .Select(Projections.Sum <WarehouseMovementOperation> (o => o.Amount));

            var subqueryRemoved = QueryOver.Of <WarehouseMovementOperation>(() => operationRemoveAlias)
                                  .JoinAlias(() => operationRemoveAlias.Nomenclature, () => nomenclatureAlias)
                                  .Where(() => nomenclatureAlias.Kind.Id == equipmentKindAlias.Id)
                                  .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation> (o => o.WriteoffWarehouse)))
                                  .Select(Projections.Sum <WarehouseMovementOperation> (o => o.Amount));

            var subqueryReserved = QueryOver.Of <Vodovoz.Domain.Orders.Order> (() => orderAlias)
                                   .JoinAlias(() => orderAlias.OrderEquipments, () => orderEquipmentAlias)
                                   .JoinAlias(() => orderEquipmentAlias.Equipment, () => equipmentAlias)
                                   .JoinAlias(() => equipmentAlias.Nomenclature, () => nomenclatureAlias)
                                   .Where(() => nomenclatureAlias.Kind.Id == equipmentKindAlias.Id)
                                   .Where(() => orderEquipmentAlias.Direction == Direction.Deliver)
                                   .Where(() => orderAlias.OrderStatus == OrderStatus.Accepted ||
                                          orderAlias.OrderStatus == OrderStatus.InTravelList ||
                                          orderAlias.OrderStatus == OrderStatus.OnLoading)
                                   .Select(Projections.Count(() => orderEquipmentAlias.Id));

            var equipment = UoW.Session.QueryOver <EquipmentKind>(() => equipmentKindAlias)
                            .SelectList(list => list
                                        .SelectGroup(() => equipmentKindAlias.Id).WithAlias(() => resultAlias.Id)
                                        .Select(() => equipmentKindAlias.Name).WithAlias(() => resultAlias.Name)
                                        .SelectSubQuery(subqueryAdded).WithAlias(() => resultAlias.Added)
                                        .SelectSubQuery(subqueryRemoved).WithAlias(() => resultAlias.Removed)
                                        .SelectSubQuery(subqueryReserved).WithAlias(() => resultAlias.Reserved)
                                        )
                            .TransformUsing(Transformers.AliasToBean <EquipmentKindsForRentVMNode>())
                            .List <EquipmentKindsForRentVMNode>();

            SetItemsSource(equipment);
        }
        public NonSerialEquipmentsForRentJournalViewModel(
            EquipmentKind equipmentKind,
            IUnitOfWorkFactory unitOfWorkFactory,
            IInteractiveService interactiveService,
            INomenclatureRepository nomenclatureRepository,
            INavigationManager navigation) : base(unitOfWorkFactory, interactiveService, navigation)
        {
            _equipmentKind          = equipmentKind;
            _nomenclatureRepository = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));

            TabName = "Оборудование для аренды";

            var dataLoader = new ThreadDataLoader <NomenclatureForRentNode>(unitOfWorkFactory);

            dataLoader.AddQuery(ItemsQuery);
            DataLoader = dataLoader;

            SelectionMode = JournalSelectionMode.Single;
            CreateNodeActions();
        }
示例#12
0
        public Equipment GetAvailableEquipmentForRent(IUnitOfWork uow, EquipmentKind kind, int[] excludeEquipments)
        {
            Nomenclature nomenclatureAlias = null;

            //Ищем сначала дежурные
            var proposedList = AvailableOnDutyEquipmentQuery().GetExecutableQueryOver(uow.Session)
                               .JoinAlias(e => e.Nomenclature, () => nomenclatureAlias)
                               .Where(() => nomenclatureAlias.Kind == kind)
                               .List();

            var result = FirstNotExcludedEquipment(proposedList, excludeEquipments);

            if (result != null)
            {
                return(result);
            }

            //Выбираем сначала приоритетные модели
            proposedList = AvailableEquipmentQuery().GetExecutableQueryOver(uow.Session)
                           .JoinAlias(e => e.Nomenclature, () => nomenclatureAlias)
                           .Where(() => nomenclatureAlias.Kind == kind)
                           .Where(() => nomenclatureAlias.RentPriority == true)
                           .List();

            result = FirstNotExcludedEquipment(proposedList, excludeEquipments);

            if (result != null)
            {
                return(result);
            }

            //Выбираем любой куллер
            proposedList = AvailableEquipmentQuery().GetExecutableQueryOver(uow.Session)
                           .JoinAlias(e => e.Nomenclature, () => nomenclatureAlias)
                           .Where(() => nomenclatureAlias.Kind == kind)
                           .List();

            result = FirstNotExcludedEquipment(proposedList, excludeEquipments);

            return(result);
        }
        /// <summary>
        /// Возвращает доступное оборудование указанного типа для аренды
        /// </summary>
        public Nomenclature GetAvailableNonSerialEquipmentForRent(IUnitOfWork uow, EquipmentKind kind, IEnumerable <int> excludeNomenclatures)
        {
            Nomenclature nomenclatureAlias = null;

            var nomenclatureList = GetAllNonSerialEquipmentForRent(uow, kind);

            //Выбираются только доступные на складе и еще не выбранные в диалоге
            var availableNomenclature = nomenclatureList.Where(x => x.Available > 0)
                                        .Where(x => !excludeNomenclatures.Contains(x.Id))
                                        .ToList();

            //Если есть дежурное оборудование выбираем сначала его
            var duty = uow.Session.QueryOver(() => nomenclatureAlias)
                       .Where(() => nomenclatureAlias.IsDuty)
                       .WhereRestrictionOn(() => nomenclatureAlias.Id)
                       .IsIn(availableNomenclature.Select(x => x.Id).ToArray()).List();

            if (duty.Any())
            {
                return(duty.First());
            }

            //Иначе если есть приоритетное оборудование выбираем его
            var priority = uow.Session.QueryOver(() => nomenclatureAlias)
                           .Where(() => nomenclatureAlias.RentPriority)
                           .WhereRestrictionOn(() => nomenclatureAlias.Id)
                           .IsIn(availableNomenclature.Select(x => x.Id).ToArray()).List();

            if (priority.Any())
            {
                return(priority.First());
            }

            //Выбираем любое доступное оборудование
            var any = uow.Session.QueryOver(() => nomenclatureAlias)
                      .WhereRestrictionOn(() => nomenclatureAlias.Id)
                      .IsIn(availableNomenclature.Select(x => x.Id).ToArray()).List();

            return(any.FirstOrDefault());
        }
        /// <summary>
        /// Запрос выбирающий количество добавленное на склад, отгруженное со склада
        /// и зарезервированное в заказах каждой номенклатуры по выбранному типу оборудования
        /// </summary>
        public QueryOver <Nomenclature, Nomenclature> QueryAvailableNonSerialEquipmentForRent(EquipmentKind kind)
        {
            Nomenclature nomenclatureAlias = null;
            WarehouseMovementOperation operationAddAlias = null;

            //Подзапрос выбирающий по номенклатуре количество добавленное на склад
            var subqueryAdded = QueryOver.Of(() => operationAddAlias)
                                .Where(() => operationAddAlias.Nomenclature.Id == nomenclatureAlias.Id)
                                .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation>(o => o.IncomingWarehouse)))
                                .Select(Projections.Sum <WarehouseMovementOperation>(o => o.Amount));

            //Подзапрос выбирающий по номенклатуре количество отгруженное со склада
            var subqueryRemoved = QueryOver.Of(() => operationAddAlias)
                                  .Where(() => operationAddAlias.Nomenclature.Id == nomenclatureAlias.Id)
                                  .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation>(o => o.WriteoffWarehouse)))
                                  .Select(Projections.Sum <WarehouseMovementOperation>(o => o.Amount));

            //Подзапрос выбирающий по номенклатуре количество зарезервированное в заказах до отгрузки со склада
            Vodovoz.Domain.Orders.Order localOrderAlias = null;
            OrderEquipment localOrderEquipmentAlias     = null;
            Equipment      localEquipmentAlias          = null;

            var subqueryReserved = QueryOver.Of(() => localOrderAlias)
                                   .JoinAlias(() => localOrderAlias.OrderEquipments, () => localOrderEquipmentAlias)
                                   .JoinAlias(() => localOrderEquipmentAlias.Equipment, () => localEquipmentAlias)
                                   .Where(() => localEquipmentAlias.Nomenclature.Id == nomenclatureAlias.Id)
                                   .Where(() => localOrderEquipmentAlias.Direction == Direction.Deliver)
                                   .Where(() => localOrderAlias.OrderStatus == OrderStatus.Accepted ||
                                          localOrderAlias.OrderStatus == OrderStatus.InTravelList ||
                                          localOrderAlias.OrderStatus == OrderStatus.OnLoading)
                                   .Select(Projections.Sum(() => localOrderEquipmentAlias.Count));

            NomenclatureForRentNode resultAlias        = null;
            MeasurementUnits        unitAlias          = null;
            EquipmentKind           equipmentKindAlias = null;

            //Запрос выбирающий количество добавленное на склад, отгруженное со склада
            //и зарезервированное в заказах каждой номенклатуры по выбранному типу оборудования
            var query = QueryOver.Of(() => nomenclatureAlias)
                        .JoinAlias(() => nomenclatureAlias.Unit, () => unitAlias)
                        .JoinAlias(() => nomenclatureAlias.Kind, () => equipmentKindAlias);

            if (kind != null)
            {
                query = query.Where(() => equipmentKindAlias.Id == kind.Id);
            }

            query = query.SelectList(
                list => list
                .SelectGroup(() => nomenclatureAlias.Id).WithAlias(() => resultAlias.Id)
                .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.NomenclatureName)
                .Select(() => equipmentKindAlias.Id).WithAlias(() => resultAlias.TypeId)
                .Select(() => equipmentKindAlias.Name).WithAlias(() => resultAlias.EquipmentKindName)
                .Select(() => unitAlias.Name).WithAlias(() => resultAlias.UnitName)
                .Select(() => unitAlias.Digits).WithAlias(() => resultAlias.UnitDigits)
                .SelectSubQuery(subqueryAdded).WithAlias(() => resultAlias.Added)
                .SelectSubQuery(subqueryRemoved).WithAlias(() => resultAlias.Removed)
                .SelectSubQuery(subqueryReserved).WithAlias(() => resultAlias.Reserved))
                    .OrderBy(x => x.Name).Asc
                    .TransformUsing(Transformers.AliasToBean <NomenclatureForRentNode>());
            return(query);
        }
 /// <summary>
 /// Возвращает список всего оборудования определенного типа для аренды
 /// </summary>
 public IList <NomenclatureForRentNode> GetAllNonSerialEquipmentForRent(IUnitOfWork uow, EquipmentKind kind)
 {
     return(QueryAvailableNonSerialEquipmentForRent(kind)
            .GetExecutableQueryOver(uow.Session)
            .List <NomenclatureForRentNode>());
 }
示例#16
0
        public virtual Equipment GetRandom(EquipmentKind kind, int maxEqLevel, EquipmentClass eqClass = EquipmentClass.Plain)
        {
            Equipment eq = null;

            if (eqClass == EquipmentClass.Unique)
            {
                if (this.lootCreators.Any())
                {
                    eq = this.lootCreators[EquipmentKind.Weapon].GetUniqueItems(maxEqLevel).FirstOrDefault();
                }
                if (eq == null)
                {
                    eq = GetRandomWeapon();//TODO
                    eq.SetClass(EquipmentClass.Unique, maxEqLevel);
                    eq.SetLevelIndex(maxEqLevel);
                }

                if (eq.LevelIndex <= 0)
                {
                    throw new Exception("eq.LevelIndex <= 0!");
                }
                return(eq);
            }

            switch (kind)
            {
            case EquipmentKind.Unset:
                break;

            case EquipmentKind.Weapon:
                eq = GetRandomWeapon();
                break;

            case EquipmentKind.Armor:
                eq = GetRandomArmor();
                break;

            case EquipmentKind.Helmet:
                eq = GetRandomHelmet();
                break;

            case EquipmentKind.Shield:
                eq = GetRandomShield();
                break;

            case EquipmentKind.Ring:
                eq = GetRandomJewellery(EntityStatKind.MeleeAttack, EquipmentKind.Ring);
                break;

            case EquipmentKind.Amulet:
                eq = GetRandomJewellery(EntityStatKind.MeleeAttack, EquipmentKind.Amulet);
                break;

            case EquipmentKind.Trophy:
                break;

            case EquipmentKind.Glove:
                eq = GetRandomGloves();

                break;
            }
            if (eq != null && eqClass != EquipmentClass.Plain)
            {
                if (eqClass == EquipmentClass.Plain)
                {
                    MakeMagic(eqClass, eq);
                }
            }
            eq.SetLevelIndex(maxEqLevel);

            return(eq);
        }
示例#17
0
 public void SetFactory(EquipmentKind ek, EquipmentTypeFactory factory)
 {
     lootCreators[ek] = factory;
 }
示例#18
0
 public static CurrentEquipmentKind GetCurrentEquipmentKind(this EquipmentKind ek, CurrentEquipmentPosition pos)
 {
     return(Equipment.FromEquipmentKind(ek, pos));
 }
示例#19
0
 public NonSerialEquipmentsForRentJournalViewModel CreateNonSerialEquipmentsForRentJournalViewModel(EquipmentKind equipmentKind)
 {
     return(new NonSerialEquipmentsForRentJournalViewModel(
                equipmentKind,
                UnitOfWorkFactory.GetDefaultFactory,
                ServicesConfig.InteractiveService,
                new NomenclatureRepository(new NomenclatureParametersProvider(new ParametersProvider())),
                null));
 }
示例#20
0
 public int Count(EquipmentKind ek)
 {
     return(GeneratedLoot.Where(i => i.EquipmentKind == ek).Count());
 }