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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
public override void HandleRequest(IZoneRequest request) { SendSafeSpawnPoints(request); }
public override void HandleRequest(IZoneRequest request) { request.Zone.EnterQueueService.MaxPlayersOnZone = request.Data.GetOrDefault(k.length, request.Zone.Configuration.MaxPlayers); base.HandleRequest(request); }