コード例 #1
0
        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();
        }
コード例 #2
0
        public Dictionary <string, object> GetAssignmentInfo()
        {
            var result = ToDictionary();

            if (AssignmentId > 0)
            {
                var transportAssignmentInfo = TransportAssignment.Get(AssignmentId);
                result.Add(k.assignment, transportAssignmentInfo.ToPrivateDictionary());
            }

            return(result);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        /// <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();
        }