using System.Collections.Generic; using System.Linq; using proto; namespace MoleMole { public class MissionModule : BaseModule { private Dictionary _missionDict; private Dictionary monsterKilledCount; private Dictionary _uniqueMonsterKilledCount; private int _enemyKilledCount; private Dictionary _monsterWithCategoryKilledCount; private Dictionary _monsterKilledByAnimEventIDCount; private Dictionary _monsterKilledByAttackCategoryTagCount; private Dictionary _triggerAbilityActionCount; public bool missionDataReceived; public MissionModule() { Singleton.Instance.RegisterModule(this); _missionDict = new Dictionary(); monsterKilledCount = new Dictionary(); _uniqueMonsterKilledCount = new Dictionary(); _monsterWithCategoryKilledCount = new Dictionary(); _monsterKilledByAnimEventIDCount = new Dictionary(); _monsterKilledByAttackCategoryTagCount = new Dictionary(); _triggerAbilityActionCount = new Dictionary(); missionDataReceived = false; } public Dictionary GetMissionDict() { return _missionDict; } public MissionDataItem GetMissionDataItem(int missionID) { MissionDataItem value; _missionDict.TryGetValue(missionID, out value); return value; } public override bool OnPacket(NetPacketV1 pkt) { switch (pkt.getCmdId()) { case 113: return OnGetMissionDataRsp(pkt.getData()); case 115: return OnGetMissionRewardRsp(pkt.getData()); case 116: return OnDelMissionNotify(pkt.getData()); case 118: return OnUpdateMissionProgressRsp(pkt.getData()); default: return false; } } public void TryToUpdateKillMonsterMission(int monsterId) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 6 || value.metaData.finishParaInt != monsterId) { continue; } if (monsterKilledCount.ContainsKey(monsterId)) { Dictionary dictionary2; Dictionary dictionary = (dictionary2 = monsterKilledCount); int key2; int key = (key2 = monsterId); key2 = dictionary2[key2]; dictionary[key] = key2 + 1; } else { monsterKilledCount[monsterId] = 1; } if (value.progress + monsterKilledCount[monsterId] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)6, (uint)monsterId, string.Empty, (uint)monsterKilledCount[monsterId]); monsterKilledCount.Remove(monsterId); } break; } } public void TryToUpdateKillUniqueMonsterMission(uint uniqueMonsterId) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 7 || value.metaData.finishParaInt != (int)uniqueMonsterId) { continue; } if (_uniqueMonsterKilledCount.ContainsKey(uniqueMonsterId)) { Dictionary uniqueMonsterKilledCount; Dictionary dictionary = (uniqueMonsterKilledCount = _uniqueMonsterKilledCount); uint key2; uint key = (key2 = uniqueMonsterId); int num = uniqueMonsterKilledCount[key2]; dictionary[key] = num + 1; } else { _uniqueMonsterKilledCount[uniqueMonsterId] = 1; } if (value.progress + _uniqueMonsterKilledCount[uniqueMonsterId] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)7, uniqueMonsterId, string.Empty, (uint)_uniqueMonsterKilledCount[uniqueMonsterId]); _uniqueMonsterKilledCount.Remove(uniqueMonsterId); } break; } } public void TryToUpdateKillAnyEnemy() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 8) { continue; } _enemyKilledCount++; if (value.progress + _enemyKilledCount >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)8, 0u, string.Empty, (uint)_enemyKilledCount); _enemyKilledCount = 0; } break; } } public void TryToUpdateKillMonsterWithCategoryName(string categoryName) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 9 || !(value.metaData.finishParaStr == categoryName)) { continue; } if (_monsterWithCategoryKilledCount.ContainsKey(categoryName)) { Dictionary monsterWithCategoryKilledCount; Dictionary dictionary = (monsterWithCategoryKilledCount = _monsterWithCategoryKilledCount); string key2; string key = (key2 = categoryName); int num = monsterWithCategoryKilledCount[key2]; dictionary[key] = num + 1; } else { _monsterWithCategoryKilledCount[categoryName] = 1; } if (value.progress + _monsterWithCategoryKilledCount[categoryName] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)9, 0u, categoryName, (uint)_monsterWithCategoryKilledCount[categoryName]); _monsterWithCategoryKilledCount.Remove(categoryName); } break; } } public void TryToUpdateTriggerAbilityAction(uint finishParaInt) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 10 || value.metaData.finishParaInt != (int)finishParaInt) { continue; } if (_triggerAbilityActionCount.ContainsKey(finishParaInt)) { Dictionary triggerAbilityActionCount; Dictionary dictionary = (triggerAbilityActionCount = _triggerAbilityActionCount); uint key2; uint key = (key2 = finishParaInt); int num = triggerAbilityActionCount[key2]; dictionary[key] = num + 1; } else { _triggerAbilityActionCount[finishParaInt] = 1; } if (value.progress + _triggerAbilityActionCount[finishParaInt] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)10, finishParaInt, string.Empty, (uint)_triggerAbilityActionCount[finishParaInt]); _triggerAbilityActionCount.Remove(finishParaInt); } break; } } public void TryToUpdateKillByAnimEventID(uint finishParaInt) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 11 || value.metaData.finishParaInt != finishParaInt) { continue; } if (_monsterKilledByAnimEventIDCount.ContainsKey(finishParaInt)) { Dictionary monsterKilledByAnimEventIDCount; Dictionary dictionary = (monsterKilledByAnimEventIDCount = _monsterKilledByAnimEventIDCount); uint key2; uint key = (key2 = finishParaInt); int num = monsterKilledByAnimEventIDCount[key2]; dictionary[key] = num + 1; } else { _monsterKilledByAnimEventIDCount[finishParaInt] = 1; } if (value.progress + _monsterKilledByAnimEventIDCount[finishParaInt] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)11, finishParaInt, string.Empty, (uint)_monsterKilledByAnimEventIDCount[finishParaInt]); _monsterKilledByAnimEventIDCount.Remove(finishParaInt); } break; } } public void TryToUpdateKillByAttackCategoryTag(AttackResult.AttackCategoryTag[] categoryTags) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 23) { continue; } foreach (AttackResult.AttackCategoryTag attackCategoryTag in categoryTags) { string text = attackCategoryTag.ToString(); if (value.metaData.finishParaStr == text) { if (_monsterKilledByAttackCategoryTagCount.ContainsKey(text)) { Dictionary monsterKilledByAttackCategoryTagCount; Dictionary dictionary = (monsterKilledByAttackCategoryTagCount = _monsterKilledByAttackCategoryTagCount); string key2; string key = (key2 = text); int num = monsterKilledByAttackCategoryTagCount[key2]; dictionary[key] = num + 1; } else { _monsterKilledByAttackCategoryTagCount[text] = 1; } if (value.progress + _monsterKilledByAttackCategoryTagCount[text] >= value.metaData.totalProgress) { Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)23, 0u, text, (uint)_monsterKilledByAttackCategoryTagCount[text]); _monsterKilledByAttackCategoryTagCount.Remove(text); } break; } } } } public void FlushMissionDataToServer() { FlushMonsterMissionProgressToServer(); FlushUniqueMonsterMissionProgressToServer(); FlushKillAnyEnemyProgressToServer(); FlushKillMonsterWithCategoryProgressToServer(); FlushTriggerAbilityActionProgressToServer(); FlushKillWithAnimEventIDProgressToServer(); FlushKillByAttackCategoryTagProgressToServer(); } private void FlushMonsterMissionProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (int key in monsterKilledCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 6 || value.metaData.finishParaInt != key) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)6, (uint)key, string.Empty, (uint)monsterKilledCount[key]); break; } } monsterKilledCount.Clear(); } private void FlushUniqueMonsterMissionProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (uint key in _uniqueMonsterKilledCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 7 || value.metaData.finishParaInt != (int)key) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)7, key, string.Empty, (uint)_uniqueMonsterKilledCount[key]); break; } } _uniqueMonsterKilledCount.Clear(); } private void FlushKillAnyEnemyProgressToServer() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 8) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)8, 0u, string.Empty, (uint)_enemyKilledCount); break; } _enemyKilledCount = 0; } private void FlushKillMonsterWithCategoryProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (string key in _monsterWithCategoryKilledCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 9 || !(value.metaData.finishParaStr == key)) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)9, 0u, key, (uint)_monsterWithCategoryKilledCount[key]); break; } } _monsterWithCategoryKilledCount.Clear(); } private void FlushTriggerAbilityActionProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (uint key in _triggerAbilityActionCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 10 || value.metaData.finishParaInt != (int)key) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)10, key, string.Empty, (uint)_triggerAbilityActionCount[key]); break; } } _triggerAbilityActionCount.Clear(); } private void FlushKillWithAnimEventIDProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (uint key in _monsterKilledByAnimEventIDCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 11 || value.metaData.finishParaInt != (int)key) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)11, key, string.Empty, (uint)_monsterKilledByAnimEventIDCount[key]); break; } } _monsterKilledByAnimEventIDCount.Clear(); } private void FlushKillByAttackCategoryTagProgressToServer() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 foreach (string key in _monsterKilledByAttackCategoryTagCount.Keys) { foreach (MissionDataItem value in _missionDict.Values) { if (value.metaData == null || (int)value.status != 2 || value.metaData.finishWay != 23 || !(value.metaData.finishParaStr == key)) { continue; } Singleton.Instance.RequestUpdateMissionProgress((MissionFinishWay)23, 0u, key, (uint)_monsterKilledByAttackCategoryTagCount[key]); break; } } _monsterKilledByAttackCategoryTagCount.Clear(); } private bool OnGetMissionDataRsp(GetMissionDataRsp rsp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Invalid comparison between Unknown and I4 //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Invalid comparison between Unknown and I4 if ((int)rsp.retcode == 0) { foreach (Mission item in rsp.mission_list) { if (_missionDict.ContainsKey((int)item.mission_id)) { MissionDataItem missionDataItem = _missionDict[(int)item.mission_id]; if (!missionDataItem.IsMissionEqual(item)) { missionDataItem.UpdateFromMission(item); Singleton.Instance.FireNotify(new Notify(NotifyTypes.MissionUpdated, item.mission_id)); } } else { MissionDataItem value = new MissionDataItem(item); _missionDict[(int)item.mission_id] = value; Singleton.Instance.FireNotify(new Notify(NotifyTypes.MissionUpdated, item.mission_id)); } if (((int)item.status == 2 || (int)item.status == 3 || (int)item.status == 5) && Singleton.Instance != null) { Singleton.Instance.TryToDoTutoialWhenUpdateMissionStatus(item); } } missionDataReceived = true; } return false; } private bool OnGetMissionRewardRsp(GetMissionRewardRsp rsp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if ((int)rsp.retcode == 0) { Singleton.Instance.FireNotify(new Notify(NotifyTypes.MissionRewardGot, rsp)); Singleton.Instance.RequestHasGotItemIdList(); } return false; } private bool OnDelMissionNotify(DelMissionNotify rsp) { _missionDict.Remove((int)rsp.mission_id); Singleton.Instance.FireNotify(new Notify(NotifyTypes.MissionDeleted, rsp.mission_id)); return false; } private bool OnUpdateMissionProgressRsp(UpdateMissionProgressRsp rsp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if ((int)rsp.retcode == 0) { } return false; } public bool NeedNotify() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Invalid comparison between Unknown and I4 foreach (MissionDataItem value in _missionDict.Values) { if ((int)value.status == 3) { LinearMissionData linearMissionDataByKey = LinearMissionDataReader.GetLinearMissionDataByKey(value.id); if (linearMissionDataByKey == null || linearMissionDataByKey.IsAchievement == 0) { return true; } } } return false; } public List GetAchievements() { return _missionDict.Values.ToList().FindAll(delegate(MissionDataItem x) { LinearMissionData linearMissionDataByKey = LinearMissionDataReader.GetLinearMissionDataByKey(x.id); if (linearMissionDataByKey == null) { return false; } return (linearMissionDataByKey.IsAchievement != 0) ? true : false; }); } } }