Exemplo n.º 1
0
        private IActor CreateCitizen(IDropTableScheme traderDropTable, IMapNode startNode, IBotPlayer botPlayer)
        {
            var person = new CitizenPerson(traderDropTable, _dropResolver);
            var actor  = new Actor(person, botPlayer, startNode);

            _actorManager.Add(actor);
            return(actor);
        }
Exemplo n.º 2
0
        public PropDepositModule(IPropContainer propContainer,
                                 IDropTableScheme dropTableScheme,
                                 IDropResolver dropResolver,
                                 string[] toolTags,
                                 int exhaustingValue,
                                 DepositMiningDifficulty depositMiningDifficulty)
        {
            _propContainer   = propContainer ?? throw new ArgumentNullException(nameof(propContainer));
            _dropTableScheme = dropTableScheme ?? throw new ArgumentNullException(nameof(dropTableScheme));
            _dropResolver    = dropResolver ?? throw new ArgumentNullException(nameof(dropResolver));
            _toolTags        = toolTags ?? throw new ArgumentNullException(nameof(toolTags));

            _exhaustingValue   = exhaustingValue;
            _exhaustingCounter = exhaustingValue;
            Difficulty         = depositMiningDifficulty;
        }
Exemplo n.º 3
0
        private static void CheckDropTableScheme(IDropTableScheme dropTableScheme, ISchemeService schemeService)
        {
            Action act = () =>
            {
                foreach (var record in dropTableScheme.Records)
                {
                    var propSid = record.SchemeSid;
                    if (propSid == null)
                    {
                        continue;
                    }

                    schemeService.GetScheme <IPropScheme>(propSid);
                }
            };

            act.Should().NotThrow();
        }
Exemplo n.º 4
0
        private IDropTableScheme[] GetMonsterDropTables(IMonsterScheme monsterScheme)
        {
            if (monsterScheme.DropTableSids == null)
            {
                return(new IDropTableScheme[0]);
            }

            var dropTableCount = monsterScheme.DropTableSids.Length;
            var schemes        = new IDropTableScheme[dropTableCount];

            for (var i = 0; i < dropTableCount; i++)
            {
                var sid = monsterScheme.DropTableSids[i];
                schemes[i] = _schemeService.GetScheme <IDropTableScheme>(sid);
            }

            return(schemes);
        }
Exemplo n.º 5
0
        protected void FillSlot(HumanPerson person, IDropTableScheme dropScheme, int slotIndex)
        {
            // Генерируем предметы.
            // Выбираем предмет, как экипировку в слот.
            // Если он может быть экипирован, то устанавливаем в слот.
            // Остальные дропнутые предметы складываем просто в инвентарь.
            // Если текущий предмет невозможно экипировать, то его тоже помещаем в инвентарь.

            var inventory     = person.GetModule <IInventoryModule>();
            var dropedProps   = DropResolver.Resolve(new[] { dropScheme });
            var usedEquipment = dropedProps.OfType <Equipment>().FirstOrDefault();

            if (usedEquipment != null)
            {
                var equipmentModule = person.GetModule <IEquipmentModule>();
                var canBeEquiped    = CanBeEquiped(equipmentModule, slotIndex, usedEquipment);
                if (canBeEquiped)
                {
                    AddEquipment(equipmentModule, slotIndex, usedEquipment);
                    var unusedMainWeaponDrops = dropedProps.Where(x => x != usedEquipment).ToArray();
                    foreach (var prop in unusedMainWeaponDrops)
                    {
                        AddPropToInventory(inventory, prop);
                    }
                }
                else
                {
                    foreach (var prop in dropedProps)
                    {
                        AddPropToInventory(inventory, prop);
                    }
                }
            }
            else
            {
                foreach (var prop in dropedProps)
                {
                    AddPropToInventory(inventory, prop);
                }
            }
        }
Exemplo n.º 6
0
        private IDropTableScheme[] GetMonsterDropTables(IMonsterScheme monsterScheme)
        {
            if (monsterScheme.DropTableSids == null)
            {
                return(Array.Empty <IDropTableScheme>());
            }

            var dropTableCount = monsterScheme.DropTableSids.Length;
            var schemes        = new IDropTableScheme[dropTableCount];

            for (var i = 0; i < dropTableCount; i++)
            {
                var sid = monsterScheme.DropTableSids[i];
                if (sid is null)
                {
                    throw new InvalidOperationException();
                }

                schemes[i] = _schemeService.GetScheme <IDropTableScheme>(sid);
            }

            return(schemes);
        }
Exemplo n.º 7
0
 public CitizenPerson(IDropTableScheme goodsDropTable, IDropResolver dropResolver)
 {
     CitizenType     = CitizenType.Trader;
     _goodsDropTable = goodsDropTable;
     _dropResolver   = dropResolver;
 }
Exemplo n.º 8
0
 /// <summary>
 /// Создаёт экземпляр торговца <see cref="Trader"/>.
 /// </summary>
 /// <param name="goodsDropTable"> Таблица дропа, на основе которой будут выдаваться товары.</param>
 /// <param name="node"> Узел карты, в котором стоит торговец. </param>
 /// <param name="dropResolver"> Сервис для работы с таблицами дропа. </param>
 /// <exception cref="ArgumentNullException">
 /// goodsDropTable
 /// or
 /// node
 /// or
 /// dropResolver
 /// </exception>
 public Trader(IDropTableScheme goodsDropTable, IMapNode node, IDropResolver dropResolver)
 {
     _goodsDropTable = goodsDropTable ?? throw new ArgumentNullException(nameof(goodsDropTable));
     Node            = node ?? throw new ArgumentNullException(nameof(node));
     _dropResolver   = dropResolver ?? throw new ArgumentNullException(nameof(dropResolver));
 }