965 lines
30 KiB
C#
965 lines
30 KiB
C#
// ***********************************************************************
|
|
// Assembly : Unity
|
|
// Author : Kimch
|
|
// Created : 2017-10-24
|
|
//
|
|
// Last Modified By : Kimch
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
// <copyright file= "MissionProxy" company=""></copyright>
|
|
// <summary></summary>
|
|
// ***********************************************************************
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace G
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
partial class MissionProxy : F.GameProxy
|
|
{
|
|
#region FIELD
|
|
|
|
private readonly Dictionary<int, Mission> _missions = new Dictionary<int, Mission>();
|
|
private readonly Dictionary<int, List<Mission>> _eventMissions = new Dictionary<int, List<Mission>>();
|
|
|
|
private readonly List<Mission> _achievementMissions = new List<Mission>();
|
|
private readonly List<Mission> _dailyMissions = new List<Mission>();
|
|
private readonly List<Mission> _weeklyMissions = new List<Mission>();
|
|
|
|
private Mission _mainMission;
|
|
private readonly List<Mission> _mainMissions = new List<Mission>();
|
|
|
|
private bool _eventChanged;
|
|
|
|
#endregion
|
|
|
|
#region PROPERTY
|
|
|
|
public override int priority => 998;
|
|
|
|
/// <summary>
|
|
/// 日常任务
|
|
/// </summary>
|
|
public IReadOnlyList<Mission> dailyMissions
|
|
{
|
|
get
|
|
{
|
|
//if (_dailyMissions.Count == 0)
|
|
//{
|
|
// foreach (var mission in _missions)
|
|
// {
|
|
// if (mission.Value.type == 1)
|
|
// {
|
|
// _dailyMissions.Add(mission.Value);
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
CheckMission();
|
|
|
|
_dailyMissions.Sort();
|
|
return _dailyMissions;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 每周任务
|
|
/// </summary>
|
|
public IReadOnlyList<Mission> weeklyMissions
|
|
{
|
|
get
|
|
{
|
|
//if (_weeklyMissions.Count == 0)
|
|
//{
|
|
// foreach (var mission in _missions)
|
|
// {
|
|
// if (mission.Value.type == 5)
|
|
// {
|
|
// _weeklyMissions.Add(mission.Value);
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
CheckMission();
|
|
|
|
_weeklyMissions.Sort();
|
|
return _weeklyMissions;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 成就
|
|
/// </summary>
|
|
public IReadOnlyList<Mission> achievements
|
|
{
|
|
get
|
|
{
|
|
//if (_achievementMissions.Count == 0)
|
|
//{
|
|
// LoadMission();
|
|
// foreach (var mission in _missions)
|
|
// {
|
|
// if (mission.Value.type == 2)
|
|
// {
|
|
// _achievementMissions.Add(mission.Value);
|
|
// }
|
|
// }
|
|
//}
|
|
_achievementMissions.Sort();
|
|
return _achievementMissions;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 主线任务
|
|
/// </summary>
|
|
public Mission mainMission
|
|
{
|
|
get
|
|
{
|
|
//if (_mainMissions.Count == 0)
|
|
//{
|
|
// LoadMission();
|
|
// foreach (var mission in _missions)
|
|
// {
|
|
// if (mission.Value.type == 3)
|
|
// {
|
|
// _mainMissions.Add(mission.Value);
|
|
// var prev = mission.Value.prevMission;
|
|
// if (prev != null)
|
|
// {
|
|
// prev.nextMission = mission.Value;
|
|
// }
|
|
// }
|
|
// }
|
|
// _mainMission = _mainMissions[0];
|
|
//}
|
|
while (_mainMission != null && _mainMission.isRewarded)
|
|
{
|
|
_mainMission = _mainMission.nextMission;
|
|
}
|
|
return _mainMission;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region METHOD
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public Mission GetMission(int id)
|
|
{
|
|
Mission result = null;
|
|
if (id > 0)
|
|
_missions.TryGetValue(id, out result);
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否完成的任务
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public bool IsCompletedMission(int id)
|
|
{
|
|
var mission = GetMission(id);
|
|
return mission != null ? mission.isCompleted : false;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public void CheckMission()
|
|
{
|
|
CheckWeekMission();
|
|
CheckDailyMission();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
private void CheckDailyMission()
|
|
{
|
|
//if (_dailyMissions.Count > 0 && TimeProxy.Instance.TryTimeKey(TimeProxy.每日任务))
|
|
//{
|
|
// foreach (var mission in _dailyMissions)
|
|
// {
|
|
// mission.Reset();
|
|
// }
|
|
// OnEvent(MissionProxy.每日累计登录次数);
|
|
// SaveLocal();
|
|
//}
|
|
|
|
if (TimeProxy.Instance.TryTimeKey(TimeProxy.每日任务))
|
|
{
|
|
foreach (var mission in _missions.Values)
|
|
{
|
|
if (mission.item.reset == 1)
|
|
mission.Reset();
|
|
}
|
|
OnEvent(MissionProxy.每日累计登录次数);
|
|
SaveLocal();
|
|
}
|
|
}
|
|
|
|
private void CheckWeekMission()
|
|
{
|
|
//if (_weeklyMissions.Count > 0 && TimeProxy.Instance.TryTimeKey(TimeProxy.每周任务))
|
|
//{
|
|
// foreach (var mission in _weeklyMissions)
|
|
// {
|
|
// mission.Reset();
|
|
// }
|
|
// SaveLocal();
|
|
//}
|
|
|
|
if (TimeProxy.Instance.TryTimeKey(TimeProxy.每周任务))
|
|
{
|
|
foreach (var mission in _missions.Values)
|
|
{
|
|
if (mission.item.reset == 2)
|
|
mission.Reset();
|
|
}
|
|
SaveLocal();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 月清
|
|
/// </summary>
|
|
private void CheckMonthMission()
|
|
{
|
|
//if (TimeProxy.Instance.TryTimeKey(TimeProxy.每周任务))
|
|
//{
|
|
// foreach (var mission in _missions.Values)
|
|
// {
|
|
// if (mission.item.reset == 3)
|
|
// mission.Reset();
|
|
// }
|
|
// SaveLocal();
|
|
//}
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool JumpMission(Mission mission)
|
|
{
|
|
#if !UNITY_WEBGL && (UNITY_EDITOR || DEBUG_MY)
|
|
if (KGMOptions.Instance.任务跳过完成)
|
|
{
|
|
mission.curValue = mission.maxValue;
|
|
return true;
|
|
}
|
|
#endif
|
|
switch (mission.eventId)
|
|
{
|
|
case 通关成功:
|
|
case 闯关次数://
|
|
case 角色达到X:
|
|
case 击杀小怪数量: //
|
|
case 击杀大怪数量://
|
|
case 使用指定技能:
|
|
{
|
|
var level = ItemProxy.Instance.GetStaticItem<ItemLevel>(LevelProxy.Instance.currentUnlockedLevel);
|
|
if (level != null)
|
|
KUIWindow.OpenWindow<UI.LevelDetailBox>(level);
|
|
}
|
|
break;
|
|
case 装备累计获得_数量:
|
|
case 装备累计穿戴_等级_品质_数量:
|
|
case 装备累计回收_数量:
|
|
case 累计强化次数:
|
|
case 装备累计重铸_次数:
|
|
PostNotification(GlobalDefine.EVENT_MAIN_WINDOW_PAGE, null, "3");
|
|
break;
|
|
case 饰品宝箱加速次数:
|
|
case 装备宝箱加速次数:
|
|
case 开启宝箱次数:
|
|
PostNotification(GlobalDefine.EVENT_MAIN_WINDOW_PAGE, null, "4");
|
|
break;
|
|
case 游历次数:
|
|
PostNotification(GlobalDefine.EVENT_MAIN_WINDOW_PAGE, null, "0");
|
|
break;
|
|
case 武学升级次数:
|
|
PostNotification(GlobalDefine.EVENT_MAIN_WINDOW_PAGE, null, "1");
|
|
break;
|
|
case 处理江湖事件次数:
|
|
case 红颜问候X次:
|
|
case 红颜送礼X次:
|
|
case 指定红颜亲密度达到X:
|
|
case 指定红颜的X技能达到X级:
|
|
case 红颜技能累计提升X次:
|
|
//PostNotification(GlobalDefine.EVENT_MAIN_WINDOW_PAGE, 0, "");
|
|
KUIWindow.OpenWindow<UI.BusinessWindow>();
|
|
break;
|
|
case 境界系统任务完成X次:
|
|
case 境界达到X级:
|
|
case 累计境界修炼X次:
|
|
KUIWindow.OpenWindow<UI.SwordWindow>();
|
|
break;
|
|
case 完成指定类型任务:
|
|
var missionType = mission.eventArg1;
|
|
if (missionType == 1 || missionType == 2)
|
|
KUIWindow.OpenWindow<UI.MissionWindow>(missionType == 1 ? UI.MissionWindow.DAILY_PANEL : UI.MissionWindow.ACHIEVEMENT_PANEL);
|
|
break;
|
|
case 宠物升级次数:
|
|
KUIWindow.OpenWindow<UI.PetWindow>();
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 领取奖励
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="callback"></param>
|
|
public void GainReward(int id, Callback2 callback)
|
|
{
|
|
if (AntiCheatProxy.Instance.isCheat)
|
|
{
|
|
callback?.Invoke(ErrorCode.TIME_CHEAT, "请检查手机时间");
|
|
return;
|
|
}
|
|
|
|
var mission = GetMission(id);
|
|
if (mission.isRewarding)
|
|
{
|
|
mission.isRewarded = true;
|
|
RewardProxy.Instance.GetRewardsWithUI(mission.rewards, (error, message) =>
|
|
{
|
|
if (error ==0)
|
|
{
|
|
PostNotification(GlobalDefine.EVENT_MONEY_CHANGED);
|
|
}
|
|
});
|
|
|
|
OnEvent(完成指定类型任务, 1, mission.item.type);
|
|
OnEvent(领取指定任务奖励, 1, mission.id);
|
|
|
|
_eventChanged = true;
|
|
OnMissionRewarded();
|
|
//SaveLocal();
|
|
//PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
callback?.Invoke(0, "");
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(1, "");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 一键
|
|
/// </summary>
|
|
/// <param name="type">1,2,3</param>
|
|
public void OneKeyGainRewards(int type, Callback2 callback)
|
|
{
|
|
if (AntiCheatProxy.Instance.isCheat)
|
|
{
|
|
callback?.Invoke(ErrorCode.TIME_CHEAT, "请检查手机时间");
|
|
return;
|
|
}
|
|
|
|
var rewards = F.ListPool<Item.ItemInfo>.Get();
|
|
int compC = 0;
|
|
if (type == 1)
|
|
{
|
|
foreach (var item in _dailyMissions)
|
|
{
|
|
if (item.isRewarding)
|
|
{
|
|
compC += 1;
|
|
item.isRewarded = true;
|
|
rewards.AddRange(item.rewards);
|
|
OnEvent(领取指定任务奖励, 1, item.id);
|
|
}
|
|
}
|
|
}
|
|
else if (type == 2)
|
|
{
|
|
foreach (var item in _achievementMissions)
|
|
{
|
|
if (item.isRewarding)
|
|
{
|
|
compC += 1;
|
|
item.isRewarded = true;
|
|
rewards.AddRange(item.rewards);
|
|
OnEvent(领取指定任务奖励, 1, item.id);
|
|
}
|
|
}
|
|
}
|
|
else if (type == 5)
|
|
{
|
|
foreach (var item in _weeklyMissions)
|
|
{
|
|
if (item.isRewarding)
|
|
{
|
|
compC += 1;
|
|
item.isRewarded = true;
|
|
rewards.AddRange(item.rewards);
|
|
OnEvent(领取指定任务奖励, 1, item.id);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (compC > 0)
|
|
{
|
|
OnEvent(完成指定类型任务, compC, type);
|
|
RewardProxy.Instance.GetRewardsWithUI(rewards, (error, message) =>
|
|
{
|
|
PostNotification(GlobalDefine.EVENT_MONEY_CHANGED);
|
|
});
|
|
_eventChanged = true;
|
|
OnMissionRewarded();
|
|
callback?.Invoke(0, "");
|
|
//SaveLocal();
|
|
//PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(1, "");
|
|
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, "暂无可领取的奖励");
|
|
}
|
|
F.ListPool<Item.ItemInfo>.Release(rewards);
|
|
}
|
|
|
|
public void OnMissionCompleted(Mission mission)
|
|
{
|
|
#if UNITY_EDITOR
|
|
UnityEngine.Debug.Log(StringLoggingExtensions.Colored($"{mission.id} 任务完成", Colors.fuchsia));
|
|
#endif
|
|
PostNotification(GlobalDefine.EVENT_MISSION_COMPLETED, mission);
|
|
KStatistics.Instance.ReportEvent_Mission(mission.item.type.ToString(), mission.id, mission.name, mission.description, 1, mission.rewardText);
|
|
}
|
|
|
|
private void OnMissionRewarded()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public int GetRedPointDay()
|
|
{
|
|
if (_dailyMissions != null)
|
|
{
|
|
CheckMission();
|
|
for (int i = 0; i < _dailyMissions.Count; i++)
|
|
{
|
|
if (_dailyMissions[i].isRewarding)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public int GetRedPointAch()
|
|
{
|
|
if (_achievementMissions != null)
|
|
for (int i = 0; i < _achievementMissions.Count; i++)
|
|
{
|
|
if (_achievementMissions[i].isRewarding)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public int GetRedPointWeek()
|
|
{
|
|
if (_weeklyMissions != null)
|
|
for (int i = 0; i < _weeklyMissions.Count; i++)
|
|
{
|
|
if (_weeklyMissions[i].isRewarding)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
private const string MISSION_KEY_V1 = "missions";
|
|
private void LoadLocal()
|
|
{
|
|
var dataList = ArchiveProxy.Instance.GetIntList(MISSION_KEY_V1);
|
|
if (dataList != null && dataList.Count > 0)
|
|
{
|
|
int index = 0;
|
|
Label:
|
|
var id = dataList[index++];
|
|
int data = dataList[index++];
|
|
if (_missions.TryGetValue(id, out Mission mission))
|
|
{
|
|
mission.Set(data);
|
|
}
|
|
if (index < dataList.Count)
|
|
goto Label;
|
|
}
|
|
}
|
|
|
|
private void SaveLocal()
|
|
{
|
|
var dataList = ArchiveProxy.Instance.GetIntList(MISSION_KEY_V1);
|
|
if (dataList != null)
|
|
{
|
|
dataList.Clear();
|
|
|
|
foreach (var mission in _missions.Values)
|
|
{
|
|
if (mission.curValue > 0)
|
|
{
|
|
dataList.Add(mission.id);
|
|
dataList.Add(mission.Get());
|
|
}
|
|
}
|
|
|
|
ArchiveProxy.Instance.SetIntList(MISSION_KEY_V1, dataList);
|
|
}
|
|
}
|
|
|
|
private void LoadMission()
|
|
{
|
|
if (_missions.Count == 0)
|
|
{
|
|
var missionItems = ItemProxy.Instance.GetStaticItems<ItemMission>();
|
|
foreach (var item in missionItems)
|
|
{
|
|
_missions.Add(item.id, new Mission(item));
|
|
}
|
|
|
|
foreach (var mission in _missions.Values)
|
|
{
|
|
if (_eventMissions.TryGetValue(mission.eventId, out var missions))
|
|
{
|
|
missions.Add(mission);
|
|
}
|
|
else
|
|
{
|
|
missions = new List<Mission>
|
|
{
|
|
mission
|
|
};
|
|
_eventMissions.Add(mission.eventId, missions);
|
|
}
|
|
switch (mission.item.type)
|
|
{
|
|
case 1:
|
|
_dailyMissions.Add(mission);
|
|
break;
|
|
case 2:
|
|
_achievementMissions.Add(mission);
|
|
break;
|
|
case 3:
|
|
_mainMissions.Add(mission);
|
|
var prev = mission.prevMission;
|
|
if (prev != null)
|
|
{
|
|
prev.nextMission = mission;
|
|
}
|
|
break;
|
|
case 5:
|
|
_weeklyMissions.Add(mission);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_mainMissions.Count > 0)
|
|
_mainMission = _mainMissions[0];
|
|
}
|
|
else
|
|
{
|
|
foreach (var mission in _missions.Values)
|
|
{
|
|
mission.Reset();
|
|
}
|
|
if (_mainMissions.Count > 0)
|
|
_mainMission = _mainMissions[0];
|
|
}
|
|
}
|
|
|
|
private void SyncMission()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 累加事件1
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
public void OnEvent(int eventId, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid)
|
|
{
|
|
mission.curValue += 1;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 累加事件1
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
public void OnEvent(int eventId, int eventTarget, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid)
|
|
{
|
|
mission.curValue += eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 累加事件1
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
/// <param name="eventArg1"></param>
|
|
public void OnEvent(int eventId, int eventTarget, int eventArg1, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.CheckEventArg1(eventArg1))
|
|
{
|
|
mission.curValue += eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 累加事件1
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
/// <param name="eventArg1"></param>
|
|
/// <param name="eventArg2"></param>
|
|
public void OnEvent(int eventId, int eventTarget, int eventArg1, int eventArg2, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.CheckEventArg2(eventArg1, eventArg2))
|
|
{
|
|
mission.curValue += eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 达到事件
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
public void OnEvent2(int eventId, int eventTarget, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid /*&& mission.maxValue <= eventTarget*/)
|
|
{
|
|
mission.curValue = eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 达到事件
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
public void OnClampEvent2(int eventId, int eventTarget, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.maxValue <= eventTarget)
|
|
{
|
|
mission.curValue = eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 达到事件
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
public void OnEvent2(int eventId, int eventTarget, int eventArg1, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.CheckEventArg1(eventArg1) && mission.curValue < eventTarget)
|
|
{
|
|
mission.curValue = eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 达到事件
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
/// <param name="eventArg1"></param>
|
|
/// <param name="eventArg2"></param>
|
|
public void OnEvent2(int eventId, int eventTarget, int eventArg1, int eventArg2, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.CheckEventArg2(eventArg1, eventArg2) && mission.curValue < eventTarget)
|
|
{
|
|
mission.curValue = eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 累计over事件
|
|
/// </summary>
|
|
/// <param name="eventId"></param>
|
|
/// <param name="eventTarget"></param>
|
|
/// <param name="eventArg1"></param>
|
|
/// <param name="eventArg2"></param>
|
|
/// <param name="immediately"></param>
|
|
public void OnOverEvent(int eventId, int eventTarget, int eventArg1, int eventArg2, bool immediately = false)
|
|
{
|
|
if (_eventMissions.TryGetValue(eventId, out var missions))
|
|
{
|
|
bool flag = false;
|
|
foreach (var mission in missions)
|
|
{
|
|
if (mission.isValid && mission.OverEventArg2(eventArg1, eventArg2))
|
|
{
|
|
mission.curValue += eventTarget;
|
|
flag = true;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
{
|
|
if (immediately)
|
|
{
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
else
|
|
{
|
|
_eventChanged = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Unity
|
|
|
|
private void Awake()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
if (_eventChanged)
|
|
{
|
|
_eventChanged = false;
|
|
SaveLocal();
|
|
PostNotification(GlobalDefine.EVENT_MISSION_CHANGED);
|
|
}
|
|
}
|
|
|
|
public override void ReadArchive()
|
|
{
|
|
LoadMission();
|
|
LoadLocal();
|
|
SyncMission();
|
|
}
|
|
|
|
public override void OnRegister()
|
|
{
|
|
|
|
}
|
|
|
|
public override void OnRemove()
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region STATIC
|
|
|
|
public static MissionProxy Instance;
|
|
|
|
#endregion
|
|
}
|
|
}
|