public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();

                var containerEid = request.Data.GetOrDefault <long>(k.container);
                var container    = request.Zone.FindContainerOrThrow(player, containerEid);
                CheckContainerType(container).ThrowIfError();
                CheckFieldTerminalRange(player, container).ThrowIfError();

                var target = request.Data.GetOrDefault <long[]>(k.target);

                container.EnlistTransaction();
                container.TrashItems(character, target);
                container.Save();

                Transaction.Current.OnCompleted(c =>
                {
                    var result = container.ToDictionary();
                    Message.Builder.FromRequest(request).WithData(result).Send();
                });

                scope.Complete();
            }
        }
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();
                CheckActiveModules(player).ThrowIfError();

                player.EnlistTransaction();

                var sourceModuleEid = request.Data.GetOrDefault <long>(k.sourceModuleEID);
                var sourceModule    = player.GetModule(sourceModuleEid).ThrowIfNotType <ActiveModule>(ErrorCodes.ModuleNotFound);
                sourceModule.IsAmmoable.ThrowIfFalse(ErrorCodes.AmmoNotRequired);

                var sourceAmmo = sourceModule.GetAmmo().ThrowIfNull(ErrorCodes.AmmoNotFound);

                var targetModuleEid = request.Data.GetOrDefault <long>(k.targetModuleEID);
                var targetModule    = player.GetModule(targetModuleEid).ThrowIfNotType <ActiveModule>(ErrorCodes.ModuleNotFound);
                targetModule.IsAmmoable.ThrowIfFalse(ErrorCodes.AmmoNotRequired);
                targetModule.CheckLoadableAmmo(sourceAmmo.Definition).ThrowIfFalse(ErrorCodes.InvalidAmmoDefinition);
                targetModule.AmmoCapacity.ThrowIfLess(sourceAmmo.Quantity, ErrorCodes.ModuleOutOfSpace);

                var targetAmmo = targetModule.GetAmmo();
                if (targetAmmo == null)
                {
                    //target module is empty
                    sourceModule.SetAmmo(null);
                }
                else
                {
                    //target module has ammo
                    sourceModule.CheckLoadableAmmo(targetAmmo.Definition).ThrowIfFalse(ErrorCodes.InvalidAmmoDefinition);
                    sourceModule.AmmoCapacity.ThrowIfLess(targetAmmo.Quantity, ErrorCodes.ModuleOutOfSpace);
                    sourceModule.SetAmmo(targetAmmo);
                }

                targetModule.SetAmmo(sourceAmmo);

                player.Initialize(character);
                player.Save();

                Transaction.Current.OnCompleted(completed =>
                {
                    player.SendRefreshUnitPacket();

                    var result = new Dictionary <string, object>
                    {
                        { k.robot, player.ToDictionary() }
                    };

                    Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
                });

                scope.Complete();
            }
        }
 public override void HandleRequest(IZoneRequest request)
 {
     using (var scope = Db.CreateTransaction())
     {
         var x = request.Data.GetOrDefault <int>(k.x);
         var y = request.Data.GetOrDefault <int>(k.y);
         AddSafeSpawnPoint(request, new Point(x, y));
         scope.Complete();
     }
 }
Exemplo n.º 4
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);
                //Store ratios before transaction
                var hpRatio = player.ArmorPercentage;
                var apRatio = player.CorePercentage;

                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();
                CheckActiveModules(player).ThrowIfError();

                var containerEid = request.Data.GetOrDefault <long>(k.containerEID);
                var container    = request.Zone.FindContainerOrThrow(player, containerEid);

                CheckContainerType(container).ThrowIfError();
                CheckFieldTerminalRange(player, container).ThrowIfError();

                player.EnlistTransaction();
                container.EnlistTransaction();

                Transaction.Current.OnCompleted(completed =>
                {
                    player.Initialize(character);

                    //Apply original ratios after equip-action
                    player.Armor = player.ArmorMax * hpRatio;
                    player.Core  = player.CoreMax * apRatio;

                    player.SendRefreshUnitPacket();

                    var result = new Dictionary <string, object>
                    {
                        { k.robot, player.ToDictionary() },
                        { k.container, container.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
                });

                var moduleEid = request.Data.GetOrDefault <long>(k.moduleEID);
                var module    = player.GetModule(moduleEid).ThrowIfNull(ErrorCodes.ModuleNotFound);
                module.Owner = character.Eid;
                module.Unequip(container);

                player.Initialize(character);
                player.CheckEnergySystemAndThrowIfFailed();

                player.Save();
                container.Save();

                scope.Complete();
            }
        }
Exemplo n.º 5
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);
                AddSafeSpawnPoint(request, player.CurrentPosition);

                scope.Complete();
            }
        }
 public override void HandleRequest(IZoneRequest request)
 {
     using (var scope = Db.CreateTransaction())
     {
         var id = request.Data.GetOrDefault <int>(k.ID);
         request.Zone.SafeSpawnPoints.Delete(new SafeSpawnPoint {
             Id = id
         });
         SendSafeSpawnPoints(request);
         scope.Complete();
     }
 }
Exemplo n.º 7
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();
                CheckActiveModules(player).ThrowIfError();

                var containerEid = request.Data.GetOrDefault <long>(k.containerEID);
                var container    = request.Zone.FindContainerOrThrow(player, containerEid);

                CheckContainerType(container).ThrowIfError();
                CheckFieldTerminalRange(player, container).ThrowIfError();

                player.EnlistTransaction();
                container.EnlistTransaction();

                Transaction.Current.OnCompleted(completed =>
                {
                    player.Initialize(character);
                    player.SendRefreshUnitPacket();

                    var result = new Dictionary <string, object>
                    {
                        { k.robot, player.ToDictionary() },
                        { k.container, container.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
                });

                var componentType = request.Data.GetOrDefault <string>(k.robotComponent).ToEnum <RobotComponentType>();
                var component     = player.GetRobotComponentOrThrow(componentType);
                var slot          = request.Data.GetOrDefault <int>(k.slot);
                component.MakeSlotFree(slot, container);

                var moduleEid = request.Data.GetOrDefault <long>(k.moduleEID);
                var module    = (Module)container.GetItemOrThrow(moduleEid).Unstack(1);
                component.EquipModuleOrThrow(module, slot);

                player.Initialize(character);
                player.CheckEnergySystemAndThrowIfFailed();

                player.Save();
                container.Save();

                scope.Complete();
            }
        }
Exemplo n.º 8
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                var containerEid = request.Data.GetOrDefault <long>(k.containerEID);
                var container    = request.Zone.FindContainerOrThrow(player, containerEid);

                CheckContainerType(container).ThrowIfError();
                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();
                CheckActiveModules(player).ThrowIfError();
                CheckFieldTerminalRange(player, container).ThrowIfError();

                var moduleEid = request.Data.GetOrDefault <long>(k.moduleEID);
                var module    = player.GetModule(moduleEid).ThrowIfNotType <ActiveModule>(ErrorCodes.ModuleNotFound);
                module.IsAmmoable.ThrowIfFalse(ErrorCodes.AmmoNotRequired);

                var ammoEid = request.Data.GetOrDefault <long>(k.ammoEID);
                var ammo    = (Ammo)container.GetItemOrThrow(ammoEid);

                //check ammo type
                module.CheckLoadableAmmo(ammo.Definition).ThrowIfFalse(ErrorCodes.InvalidAmmoDefinition);
                module.UnequipAmmoToContainer(container);

                ammo = (Ammo)ammo.Unstack(module.AmmoCapacity);
                module.SetAmmo(ammo);

                player.Initialize(character);
                module.Save();
                container.Save();

                Transaction.Current.OnCompleted(completed =>
                {
                    player.SendRefreshUnitPacket();

                    var result = new Dictionary <string, object>
                    {
                        { k.robot, player.ToDictionary() },
                        { k.container, container.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
                });

                scope.Complete();
            }
        }
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var itemEid = request.Data.GetOrDefault <long>(k.eid);
                var amount  = request.Data.GetOrDefault <int>(k.amount);
                var size    = request.Data.GetOrDefault <int>(k.size);

                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                var sourceContainerEid = request.Data.GetOrDefault <long>(k.container);
                var sourceContainer    = request.Zone.FindContainerOrThrow(player, sourceContainerEid);
                CheckContainerType(sourceContainer).ThrowIfError();
                CheckFieldTerminalRange(player, sourceContainer).ThrowIfError();

                var targetContainerEid = request.Data.GetOrDefault <long>(k.targetContainer);
                var targetContainer    = request.Zone.FindContainerOrThrow(player, targetContainerEid);
                CheckContainerType(targetContainer).ThrowIfError();
                CheckFieldTerminalRange(player, targetContainer).ThrowIfError();

                sourceContainer.EnlistTransaction();
                if (sourceContainer != targetContainer)
                {
                    targetContainer.EnlistTransaction();
                }


                sourceContainer.UnstackItem(itemEid, character, amount, size, targetContainer);
                sourceContainer.Save();
                targetContainer.Save();

                Transaction.Current.OnCompleted(c =>
                {
                    var result = new Dictionary <string, object>
                    {
                        { k.source, sourceContainer.ToDictionary() },
                        { k.target, targetContainer.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).Send();
                });

                scope.Complete();
            }
        }
Exemplo n.º 10
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                var sourceContainerEid = request.Data.GetOrDefault <long>(k.sourceContainer);
                var sourceContainer    = request.Zone.FindContainer(player, sourceContainerEid).ThrowIfNull(ErrorCodes.ContainerNotFound);
                CheckContainerType(sourceContainer, character.Id).ThrowIfError();
                CheckFieldTerminalRange(player, sourceContainer).ThrowIfError();

                var targetContainerEid = request.Data.GetOrDefault <long>(k.targetContainer);
                var targetContainer    = request.Zone.FindContainer(player, targetContainerEid).ThrowIfNull(ErrorCodes.ContainerNotFound);
                CheckContainerType(targetContainer, character.Id).ThrowIfError();
                CheckFieldTerminalRange(player, targetContainer).ThrowIfError();

                sourceContainer.EnlistTransaction();
                if (sourceContainer != targetContainer)
                {
                    targetContainer.EnlistTransaction();
                }

                var itemEids = request.Data.GetOrDefault <long[]>(k.eid);
                sourceContainer.RelocateItems(character, character, itemEids, targetContainer);

                sourceContainer.Save();
                targetContainer.Save();

                Transaction.Current.OnCommited(() =>
                {
                    var result = new Dictionary <string, object>
                    {
                        { k.source, sourceContainer.ToDictionary() },
                        { k.target, targetContainer.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).Send();
                });

                scope.Complete();
            }
        }
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var id = request.Data.GetOrDefault <int>(k.ID);
                var x  = request.Data.GetOrDefault <int>(k.x);
                var y  = request.Data.GetOrDefault <int>(k.y);

                var point = new SafeSpawnPoint
                {
                    Id       = id,
                    Location = new Point(x, y)
                };

                request.Zone.SafeSpawnPoints.Update(point);
                SendSafeSpawnPoints(request);

                scope.Complete();
            }
        }
Exemplo n.º 12
0
        public override void HandleRequest(IZoneRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var player    = request.Zone.GetPlayerOrThrow(character);

                CheckPvpState(player).ThrowIfError();
                CheckCombatState(player).ThrowIfError();
                CheckActiveModules(player).ThrowIfError();

                player.EnlistTransaction();

                var componentType = request.Data.GetOrDefault <string>(k.sourceComponent).ToEnum <RobotComponentType>();
                var component     = player.GetRobotComponentOrThrow(componentType);
                var sourceSlot    = request.Data.GetOrDefault <int>(k.source);
                var targetSlot    = request.Data.GetOrDefault <int>(k.target);
                component.ChangeModuleOrThrow(sourceSlot, targetSlot);

                player.Initialize(character);

                player.Save();

                Transaction.Current.OnCommited(() =>
                {
                    player.SendRefreshUnitPacket();

                    var result = new Dictionary <string, object>
                    {
                        { k.robot, player.ToDictionary() }
                    };
                    Message.Builder.FromRequest(request).WithData(result).WrapToResult().Send();
                });

                scope.Complete();
            }
        }
Exemplo n.º 13
0
 public override void HandleRequest(IZoneRequest request)
 {
     SendSafeSpawnPoints(request);
 }
Exemplo n.º 14
0
 public override void HandleRequest(IZoneRequest request)
 {
     request.Zone.EnterQueueService.MaxPlayersOnZone = request.Data.GetOrDefault(k.length, request.Zone.Configuration.MaxPlayers);
     base.HandleRequest(request);
 }