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); }