public IEnumerable <SparkTeleport> GetAllByDockingBase(DockingBase dockingBase) { return(Db.Query().CommandText("select * from charactersparkteleports where baseeid=@baseEid") .SetParameter("@baseEid", dockingBase.Eid) .Execute() .Select(CreateFromRecord)); }
public void DeleteAllSparkTeleports(DockingBase dockingBase) { var sparkTeleports = _sparkTeleportRepository.GetAllByDockingBase(dockingBase).ToArray(); foreach (var sparkTeleport in sparkTeleports) { DeleteAndInform(sparkTeleport); } Logger.Info($"{sparkTeleports.Length} spark teleport targets were deleted from dockingBase: {dockingBase.InfoString}"); }
public static Corporation GetProfitingOwner(DockingBase dockingBase) { if (dockingBase == null) { return(null); } var selector = new ProfitingOwnerSelector(); dockingBase.AcceptVisitor(selector); return(selector._owner); }
public SparkTeleport CreateSparkTeleport(DockingBase dockingBase, Character character) { var teleport = new SparkTeleport { Character = character, DockingBase = dockingBase }; _sparkTeleportRepository.Insert(teleport); return(teleport); }
private static ErrorCodes PrepareDeliverOneAssignment(Character character, long wrapperEid, out VolumeWrapperContainer volumeWrapperContainer) { volumeWrapperContainer = Container.GetOrThrow(wrapperEid) as VolumeWrapperContainer; if (volumeWrapperContainer == null) { return(ErrorCodes.DefinitionNotSupported); } if (volumeWrapperContainer.Owner != character.Eid) { return(ErrorCodes.AccessDenied); } var transportAssignmentInfo = GetByContainer(volumeWrapperContainer); if (transportAssignmentInfo == null) { //no assignment for this container return(ErrorCodes.NoTransportAssignmentForContainer); } var ownerCharacter = transportAssignmentInfo.ownercharacter; if (transportAssignmentInfo.Retrieved) { var targetBaseEid = transportAssignmentInfo.sourcebaseeid; if (!DockingBase.Exists(transportAssignmentInfo.sourcebaseeid)) { targetBaseEid = DefaultCorporation.GetDockingBaseEid(ownerCharacter); } Logger.Info("retrieved assignment was found " + transportAssignmentInfo); transportAssignmentInfo.RetrieveToBasePublicContainer(volumeWrapperContainer, targetBaseEid); return(ErrorCodes.NoError); } var baseOfWrapper = volumeWrapperContainer.TraverseForStructureRootEid(); if (transportAssignmentInfo.targetbaseeid != baseOfWrapper) { return(ErrorCodes.TransportAssignmentCannotBeDeliveredHere); } var publicContainer = Container.GetFromStructure(transportAssignmentInfo.targetbaseeid); publicContainer.ReloadItems(character); AdministerDelivery(transportAssignmentInfo, volumeWrapperContainer, publicContainer); return(ErrorCodes.NoError); }
/// <summary> /// Creates a transport assignment /// </summary> public static void SubmitTransportAssignment(Character character, long wrapperContainerEid, long reward, long collateral, long sourceBaseEid, long targetBaseEid, int durationDays) { if (durationDays <= 0) { durationDays = 1; } reward.ThrowIfLessOrEqual(0, ErrorCodes.IllegalTransportAssignmentReward); collateral.ThrowIfLess(0, ErrorCodes.IllegalTransportAssignmentCollateral); targetBaseEid.ThrowIfEqual(sourceBaseEid, ErrorCodes.WTFErrorMedicalAttentionSuggested); DockingBase.Exists(targetBaseEid).ThrowIfFalse(ErrorCodes.TargetDockingBaseWasNotFound); var publicContainer = Container.GetFromStructure(sourceBaseEid); publicContainer.ReloadItems(character); var wrapperContainer = (VolumeWrapperContainer)publicContainer.GetItemOrThrow(wrapperContainerEid); wrapperContainer.CheckSubmitConditionsAndThrowIfFailed(); var transportAssignmentInfo = new TransportAssignment { reward = reward, ownercharacter = character, collateral = collateral, containereid = wrapperContainerEid, sourcebaseeid = sourceBaseEid, targetbaseeid = targetBaseEid, volume = wrapperContainer.Volume, expiry = DateTime.Now.AddDays(durationDays), containername = wrapperContainer.Name, }; transportAssignmentInfo.CashInOnSubmit(); transportAssignmentInfo.InsertToDb(); wrapperContainer.Parent = GetTransportStorageEid(sourceBaseEid).ThrowIfLessOrEqual(0, ErrorCodes.ServerError); wrapperContainer.AssignmentId = transportAssignmentInfo.id; wrapperContainer.Save(); transportAssignmentInfo.WriteLog(TransportAssignmentEvent.submit, sourceBaseEid); SendCommandWithTransportAssignmentsAndContainer(Commands.TransportAssignmentSubmit, publicContainer, character); }
/// <summary> /// Make the docking happen /// </summary> /// <param name="zone"></param> /// <param name="dockingBase"></param> public void DockToBase(IZone zone, DockingBase dockingBase) { States.Dock = true; var publicContainer = dockingBase.GetPublicContainer(); FullArmorRepair(); publicContainer.AddItem(this, false); publicContainer.Save(); dockingBase.DockIn(Character, NormalUndockDelay, ZoneExitType.Docked); Transaction.Current.OnCommited(() => { RemoveFromZone(); MissionHelper.MissionAdvanceDockInTarget(Character.Id, zone.Id, CurrentPosition); TransportAssignment.DeliverTransportAssignmentAsync(Character); }); }
public void GiveUpAssignment(Character issuerCharacter) { taken.ThrowIfFalse(ErrorCodes.AccessDenied); volunteercharacter.ThrowIfEqual(null, ErrorCodes.AccessDenied); volunteercharacter.ThrowIfNotEqual(issuerCharacter, ErrorCodes.AccessDenied); var volumeWrapperContainer = GetContainer(); volumeWrapperContainer.ReloadItems(volunteercharacter); volumeWrapperContainer.TraverseForStructureRootEid().ThrowIfLessOrEqual(0, ErrorCodes.ContainerHasToBeOnADockingBase); //container is on a base somewhere var baseEid = sourcebaseeid; if (!DockingBase.Exists(sourcebaseeid)) { baseEid = ownercharacter.CurrentDockingBaseEid; } var sourceContainer = Container.GetOrThrow(volumeWrapperContainer.Parent); sourceContainer.ReloadItems(volunteercharacter); var wrapperContainer = sourceContainer.GetItem(volumeWrapperContainer.Eid) as VolumeWrapperContainer; if (wrapperContainer != null) { sourceContainer.RemoveItemOrThrow(wrapperContainer); } var publicContainer = Container.GetFromStructure(baseEid); publicContainer.ReloadItems(ownercharacter); volumeWrapperContainer.Owner = ownercharacter.Eid; volumeWrapperContainer.ClearAssignmentId(); DeleteFromDb(); publicContainer.AddItem(volumeWrapperContainer, false); publicContainer.Save(); PaybackReward(); PaybackHalfCollateral(); WriteLog(TransportAssignmentEvent.gaveUp, baseEid); Transaction.Current.OnCommited(() => { var result = new Dictionary <string, object> { { k.assignment, ToDictionary() }, { k.container, publicContainer.ToDictionary() } }; Message.Builder.SetCommand(Commands.TransportAssignmentGaveUp) .WithData(result) .ToCharacter(ownercharacter) .Send(); if (volunteercharacter == Character.None) { return; } var privateResult = new Dictionary <string, object> { { k.assignment, ToPrivateDictionary() }, { k.container, sourceContainer.ToDictionary() }, }; Message.Builder.SetCommand(Commands.TransportAssignmentGaveUp) .WithData(privateResult) .ToCharacter(volunteercharacter) .Send(); }); }
public static Player LoadPlayerAndAddToZone(IZone zone, Character character) { using (var scope = Db.CreateTransaction()) { var player = (Player)character.GetActiveRobot().ThrowIfNull(ErrorCodes.ARobotMustBeSelected); DockingBase dockingBase = null; ZoneEnterType zoneEnterType; Position spawnPosition; if (character.IsDocked) { // ha bazisrol jott zoneEnterType = ZoneEnterType.Undock; dockingBase = character.GetCurrentDockingBase(); spawnPosition = UndockSpawnPositionSelector.SelectSpawnPosition(dockingBase); character.ZoneId = zone.Id; character.ZonePosition = spawnPosition; character.IsDocked = false; } else { // ha teleportalt zoneEnterType = ZoneEnterType.Teleport; zone.Id.ThrowIfNotEqual(character.ZoneId ?? -1, ErrorCodes.InvalidZoneId); var zonePosition = character.ZonePosition.ThrowIfNull(ErrorCodes.InvalidPosition); spawnPosition = (Position)zonePosition; } spawnPosition = zone.FixZ(spawnPosition); // keresunk neki valami jo poziciot var finder = new ClosestWalkablePositionFinder(zone, spawnPosition, player); var validPosition = finder.FindOrThrow(); // parentoljuk a zonahoz <<< NAGYON FONTOS - TILOS MASHOGY kulonben bennmaradnak a (pbs) bazison a robotok, es pl letorlodnek amikor kilovik a bazist var zoneStorage = zone.Configuration.GetStorage(); player.Parent = zoneStorage.Eid; player.FullCoreRecharge(); // elmentjuk player.Save(); // csak akkor rakjuk ki ha volt rendes commit Transaction.Current.OnCommited(() => { dockingBase?.LeaveChannel(character); player.CorporationEid = character.CorporationEid; zone.SetGang(player); player.AddToZone(zone, validPosition, zoneEnterType); player.ApplyInvulnerableEffect(); }); scope.Complete(); return(player); } }