Ejemplo n.º 1
0
        public void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var decorDescription = new DecorDescription
                {
                    id          = request.Data.GetOrDefault <int>(k.ID),
                    definition  = request.Data.GetOrDefault <int>(k.definition),
                    quaternionX = request.Data.GetOrDefault <double>(k.quaternionX),
                    //shifted
                    quaternionY  = request.Data.GetOrDefault <double>(k.quaternionY),
                    quaternionZ  = request.Data.GetOrDefault <double>(k.quaternionZ),
                    quaternionW  = request.Data.GetOrDefault <double>(k.quaternionW),
                    scale        = request.Data.GetOrDefault <double>(k.scale),
                    position     = new Position(request.Data.GetOrDefault <int>(k.x), request.Data.GetOrDefault <int>(k.y), request.Data.GetOrDefault <int>(k.z)),
                    zoneId       = request.Zone.Id,
                    fadeDistance = request.Data.GetOrDefault <double>(k.fadeDistance),
                    category     = request.Data.GetOrDefault <int>(k.category),
                    changed      = true
                };

                //check definition
                EntityDefault.Get(decorDescription.definition).CategoryFlags.IsCategory(CategoryFlags.cf_decor).ThrowIfFalse(ErrorCodes.DefinitionNotSupported);

                DecorDescription oldDescription;
                request.Zone.DecorHandler.Decors.TryGetValue(decorDescription.id, out oldDescription).ThrowIfFalse(ErrorCodes.ItemNotFound);

                if (oldDescription.locked)
                {
                    request.Zone.DecorHandler.SpreadDecorChanges(oldDescription);
                    throw new PerpetuumException(ErrorCodes.DecorLocked);
                }

                //save to sql
                request.Zone.DecorHandler.UpdateDecorSql(decorDescription).ThrowIfError();

                Transaction.Current.OnCommited(() =>
                {
                    //save to ram
                    request.Zone.DecorHandler.SetDecor(decorDescription);
                    request.Zone.DecorHandler.SpreadDecorChanges(decorDescription);
                });

                scope.Complete();
            }
        }
Ejemplo n.º 2
0
        public void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var zone             = request.Zone;
                var decorDescription = new DecorDescription
                {
                    definition  = request.Data.GetOrDefault <int>(k.definition),
                    quaternionX = request.Data.GetOrDefault <double>(k.quaternionX),
                    //shifted
                    quaternionY  = request.Data.GetOrDefault <double>(k.quaternionY),
                    quaternionZ  = request.Data.GetOrDefault <double>(k.quaternionZ),
                    quaternionW  = request.Data.GetOrDefault <double>(k.quaternionW),
                    scale        = request.Data.GetOrDefault <double>(k.scale),
                    position     = new Position(request.Data.GetOrDefault <int>(k.x), request.Data.GetOrDefault <int>(k.y), request.Data.GetOrDefault <int>(k.z)),
                    zoneId       = zone.Id,
                    category     = request.Data.GetOrDefault <int>(k.category),
                    changed      = true,
                    fadeDistance = request.Data.GetOrDefault <double>(k.fadeDistance)
                };

                //check definition
                _entityServices.Defaults.Get(decorDescription.definition).CategoryFlags.IsCategory(CategoryFlags.cf_decor).ThrowIfFalse(ErrorCodes.DefinitionNotSupported);

                //insert to sql
                int newId;
                zone.DecorHandler.InsertDecorSql(decorDescription, out newId).ThrowIfError();

                Transaction.Current.OnCommited(() =>
                {
                    //set to ram
                    decorDescription.id = newId;
                    zone.DecorHandler.SetDecor(decorDescription);
                    zone.DecorHandler.SpreadDecorChanges(decorDescription);
                });

                scope.Complete();
            }
        }