예제 #1
0
        public void Init()
        {
            _prototypes     = Database.CreateCache <int, int>("prototypes", "definition", "prototype");
            _researchlevels = Database.CreateCache <int, ItemResearchLevel>("itemresearchlevels", "definition", r =>
            {
                var level = new ItemResearchLevel
                {
                    definition    = r.GetValue <int>(k.definition),
                    researchLevel = r.GetValue <int>(k.researchLevel.ToLower()),
                    calibrationProgramDefinition = r.GetValue <int?>(k.calibrationProgram.ToLower())
                };
                return(level);
            }, ItemResearchLevelFilter);

            _productionComponents = Database.CreateLookupCache <int, ProductionComponent>("components", "definition", r =>
            {
                var ed     = _entityDefaultReader.Get(r.GetValue <int>(k.componentDefinition.ToLower()));
                var amount = r.GetValue <int>(k.componentAmount.ToLower());
                return(new ProductionComponent(ed, amount));
            }, r => _entityDefaultReader.Exists(r.GetValue <int>(k.definition)));

            _productionDurations      = Database.CreateCache <CategoryFlags, double>("productionduration", "category", "durationmodifier");
            _calibrationDefaults      = Database.CreateCache <int, CalibrationDefault>("calibrationdefaults", "definition", r => new CalibrationDefault(r));
            _productionDecalibrations = Database.CreateCache <CategoryFlags, ProductionDecalibration>("productiondecalibration", "categoryflag", r =>
            {
                var distorsionMin = r.GetValue <double>(k.distorsionMin.ToLower());
                var distorsionMax = r.GetValue <double>(k.distorsionMax.ToLower());
                var decrease      = r.GetValue <double>("decrease");
                return(new ProductionDecalibration(distorsionMin, distorsionMax, decrease));
            });
        }
        private RobotTemplateRelation CreateRobotTemplateRelationFromRecord(IDataRecord record)
        {
            var relation = new RobotTemplateRelation
            {
                EntityDefault        = _entityDefaultReader.Get(record.GetValue <int>("definition")),
                Template             = _robotTemplateReader.Get(record.GetValue <int>("templateid")),
                RaceID               = record.GetValue <int>("raceid"),
                missionLevel         = record.GetValue <int?>("missionlevel"),
                missionLevelOverride = record.GetValue <int?>("missionleveloverride")
            };

            return(relation);
        }
예제 #3
0
 private static Dictionary <MaterialType, MaterialInfo> LoadMaterials(IEntityDefaultReader entityDefaultReader)
 {
     return(Db.Query().CommandText("select * from minerals").Execute().Select(r =>
     {
         var mineral = new MaterialInfo
         {
             Type = r.GetValue <string>("name").ToMaterialType(),
             EntityDefault = entityDefaultReader.Get(r.GetValue <int>("definition")),
             Amount = r.GetValue <int>("amount"),
             EnablerExtensionRequired = r.GetValue <bool>("enablereffectrequired")
         };
         return mineral;
     }).ToDictionary(m => m.Type));
 }
        public void HandleRequest(IZoneRequest request)
        {
            var definitionz = request.Data.GetOrDefault <int[]>(k.definition);

            foreach (var definition in definitionz)
            {
                var ed = _defaultReader.Get(definition);
                if (ed == EntityDefault.None)
                {
                    Logger.Error("definition not found:" + definition);
                    continue;
                }

                request.Zone.DrawBlockingByDefinition(ed);
            }

            Message.Builder.FromRequest(request).WithOk().Send();
        }
예제 #5
0
        public void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var ID                   = request.Data.GetOrDefault <int>(k.ID);
                var presenceID           = request.Data.GetOrDefault <int>(k.presenceID);
                var definition           = request.Data.GetOrDefault <int>(k.definition);
                var spawnOriginX         = request.Data.GetOrDefault <int>(k.spawnOriginX);
                var spawnOriginY         = request.Data.GetOrDefault <int>(k.spawnOriginY);
                var respawnMultiplierLow = request.Data.GetOrDefault(k.respawnMultiplierLow, 0.75);

                //instafix dict
                request.Data[k.respawnMultiplierLow] = respawnMultiplierLow;

                var ed = _defaultReader.Get(definition);
                if (!ed.CategoryFlags.IsCategory(CategoryFlags.cf_npc))
                {
                    throw new PerpetuumException(ErrorCodes.DefinitionNotSupported);
                }

                var presence = request.Zone.PresenceManager.GetPresences().GetPresenceOrThrow(presenceID);

                var origFlock = presence.Flocks.GetFlockOrThrow(ID);
                presence.RemoveFlock(origFlock);

                var inputDict = new Dictionary <string, object>(request.Data)
                {
                    { k.spawnOrigin, new Position(spawnOriginX, spawnOriginY) }
                };

                var builder = _flockConfigurationBuilderFactory();
                builder.FromDictionary(inputDict);
                builder.SetID(ID);
                var configuration = builder.Build();
                _repository.Update(configuration);

                presence.CreateAndAddFlock(configuration);

                var result = request.Zone.PresenceManager.GetPresences().ToDictionary("p", p => p.ToDictionary(true));
                Message.Builder.FromRequest(request).WithData(result).Send();

                scope.Complete();
            }
        }
예제 #6
0
 public FlockConfigurationBuilder WithDefinition(int definition)
 {
     _configuration.EntityDefault = _entityDefaultReader.Get(definition);
     return(this);
 }
예제 #7
0
        public Entity Create(int definition, IIDGenerator <long> idGenerator)
        {
            var ed = _defaultReader.Get(definition);

            return(Create(ed, idGenerator));
        }
예제 #8
0
        public EntityDefault Activate()
        {
            CalibrationCapsuleRecord record = CalibrationTemplateItemLookup.GetOrDefault(Definition);

            return(_entityDefaultReader.Get(record.TargetDefinition));
        }