1
0
forked from akanyan/mu3-mods
Files
mu3-mods/Unlockers/UnlockGameEvents/MU3.OperationManager/patch_OperationManager.cs
akanyan fefadfc243 fix(UnlockGameEvents): rework mission event cycling
* Iterate in reverse, from latest to oldest.
* Unlock all missions again, unless the server has returned
  exactly one active mission and that mission is present
  on the client's machine..
2025-01-24 20:20:37 +00:00

41 lines
1.6 KiB
C#

using MU3.Data;
using MU3.User;
using MU3.Util;
using System.Collections.Generic;
using System.Linq;
namespace MU3.Operation;
class patch_OperationManager: OperationManager {
private Dictionary<int, MissionEventData> _missionEventDataMap;
public extern MissionEventData orig_getTargetMissionFromChapterID(int chapterId);
public new MissionEventData getTargetMissionFromChapterID(int chapterId) {
return overrideMission(orig_getTargetMissionFromChapterID(chapterId));
}
public extern MissionEventData orig_getTargetMissionFromStoryID(int storyId);
public new MissionEventData getTargetMissionFromStoryID(int storyId) {
return overrideMission(orig_getTargetMissionFromStoryID(storyId));
}
private MissionEventData overrideMission(MissionEventData orig) {
if(orig != null) {
foreach(KeyValuePair<int, MissionEventData> item in _missionEventDataMap.Reverse()) {
MissionEventData value = item.Value;
if(!value.isMissionEventActive || value.eventData == null) {
continue;
}
var userMissions = Singleton<UserManager>.instance.userMission;
if(userMissions != null && userMissions.TryGetValue(value.missionEventId, out UserMission um)) {
var rv = value.eventData.getNextEventPointBonus(out EventRewardInfo rewardInfo, um.Point);
if(!rv || rewardInfo.bonus_.RewardNameAndCounts[0].isLoop) {
continue;
}
}
return value;
}
}
return orig;
}
}