public void HandleRequest(IRequest request) { var assignmentId = request.Data.GetOrDefault <int>(k.ID); var info = TransportAssignment.Get(assignmentId); var character = request.Session.Character; info.ownercharacter.ThrowIfNotEqual(character, ErrorCodes.AccessDenied); var volumeWrapperContainer = info.GetContainer(); //depending on the owner status a different character must be used var ownerCharacter = info.taken ? info.volunteercharacter : character; volumeWrapperContainer.ReloadItems(ownerCharacter); var containerInfo = volumeWrapperContainer.ToDictionary(); var result = new Dictionary <string, object> { { k.container, containerInfo }, { k.assignment, info.ToDictionary() } }; Message.Builder.FromRequest(request).WithData(result).Send(); }
public Dictionary <string, object> GetAssignmentInfo() { var result = ToDictionary(); if (AssignmentId > 0) { var transportAssignmentInfo = TransportAssignment.Get(AssignmentId); result.Add(k.assignment, transportAssignmentInfo.ToPrivateDictionary()); } return(result); }
public void HandleRequest(IRequest request) { using (var scope = Db.CreateTransaction()) { var assignmentId = request.Data.GetOrDefault <int>(k.ID); var info = TransportAssignment.Get(assignmentId); var character = request.Session.Character; info.GiveUpAssignment(character); scope.Complete(); } }
/// <summary> /// A volunteer takes a transport assignment /// </summary> private static void TakeTransportAssignment(int id, Character character) { var transportAssignmentInfo = TransportAssignment.Get(id); transportAssignmentInfo.ownercharacter.ThrowIfEqual(character, ErrorCodes.WTFErrorMedicalAttentionSuggested); transportAssignmentInfo.taken.ThrowIfTrue(ErrorCodes.TransportAssignmentIsTaken); transportAssignmentInfo.volunteercharacter.ThrowIfNotEqual(null, ErrorCodes.TransportAssignmentIsTaken); transportAssignmentInfo.TakeCollateral(character); transportAssignmentInfo.expiry.ThrowIfLess(DateTime.Now, ErrorCodes.TransportAssignmentExpired); transportAssignmentInfo.volunteercharacter = character; transportAssignmentInfo.taken = true; transportAssignmentInfo.started = DateTime.Now; transportAssignmentInfo.UpdateToDb(); VolumeWrapperContainer volumeWrapperContainer; PublicContainer publicContainer; transportAssignmentInfo.GiveToVolunteer(out volumeWrapperContainer, out publicContainer); transportAssignmentInfo.WriteLog(TransportAssignmentEvent.take, publicContainer.Parent); var extraInfo = new Dictionary <string, object> { { k.assignment, transportAssignmentInfo.ToDictionary() } }; var assignmentInfo = new Dictionary <string, object> { { k.assignment, transportAssignmentInfo.ToPrivateDictionary() } }; //send info to volunteer TransportAssignment.SendCommandWithTransportAssignmentsAndContainer(Commands.TransportAssignmentTake, publicContainer, character, assignmentInfo); //send info to principal Message.Builder.SetCommand(Commands.TransportAssignmentAccepted).WithData(extraInfo).ToCharacter(transportAssignmentInfo.ownercharacter).Send(); }