Esempio n. 1
0
        private IList <Item> ProcessOneAdvancedTarget(Character character, MissionTargetInProgress missionTargetInProgress, MissionInProgress missionInProgress, ref bool wasGroupFinished, IDictionary <string, object> info)
        {
            var    gangResultCommand = Commands.MissionTargetUpdate;
            string gangResultMessage = null;


            if (missionTargetInProgress.completed)
            {
                //extract success location
                missionTargetInProgress.GetSuccessInfo(info);
                missionTargetInProgress.WriteSuccessInfo();
                gangResultCommand = Commands.MissionTargetCompleted;
                gangResultMessage = missionTargetInProgress.myTarget.completedMessage;
            }

            //progress occured => save target anyway
            missionTargetInProgress.WriteMissionTargetToSql().ThrowIfError();

            if (missionTargetInProgress.IsBranchNeeded())
            {
                Logger.Info(">>> target is branching " + missionTargetInProgress);

                //ha lefutott, akkor kell ennek taskban elindulnia egy masik tranzakcioban
                Transaction.Current.OnCommited(() => { StartAsync(character, missionInProgress.spreadInGang, missionTargetInProgress.myTarget.BranchMissionId, missionInProgress.myLocation, missionInProgress.MissionLevel); });

                wasGroupFinished = true;
            }
            else
            {
                // Default behaviour
                missionInProgress.TryAdvanceTargetGroup(ref wasGroupFinished).ThrowIfError();
            }

            if (missionInProgress.ExtractDoerCharacter(info, out Character doerCharacter))
            {
                missionInProgress.AddParticipant(doerCharacter);
            }
            else
            {
                doerCharacter = character; //proper eventsource
            }

            var rewarditems = TryFinishMission(missionInProgress);

            Logger.Info("mission advanced! characterID:" + character.Id + " missionID:" + missionInProgress.MissionId + " targetId:" + missionTargetInProgress.MissionTargetId + " completed:" + missionTargetInProgress.completed);

            Transaction.Current.OnCommited(() =>
            {
                var statusInfo = missionInProgress.PrepareInfoDictionary(message: gangResultMessage, sourceCharacterId: doerCharacter.Id);
                missionTargetInProgress.PrepareInfoDictionary(statusInfo);

                missionTargetInProgress.SendTargetStatusToGangAsync(gangResultCommand, statusInfo);
            });

            return(rewarditems);
        }