using MoleMole.Config; namespace MoleMole { public class LevelMissionStatisticsPlugin : BaseActorPlugin { private LevelActor _levelActor; public LevelMissionStatisticsPlugin(LevelActor levelActor) { _levelActor = levelActor; } public override void OnAdded() { Singleton.Instance.RegisterEventListener(_levelActor.runtimeID); } public override void OnRemoved() { Singleton.Instance.RemoveEventListener(_levelActor.runtimeID); } public override bool OnEvent(BaseEvent evt) { bool flag = base.OnEvent(evt); if (evt is EvtLevelState) { flag |= OnLevelState((EvtLevelState)evt); } return flag; } public bool OnLevelState(EvtLevelState evt) { if (evt.state == EvtLevelState.State.EndWin || evt.state == EvtLevelState.State.EndLose) { Singleton.Instance.FlushMissionDataToServer(); } return true; } public override bool ListenEvent(BaseEvent evt) { if (evt is EvtKilled) { return ListenKill((EvtKilled)evt); } return false; } private bool ListenKill(EvtKilled evt) { ushort num = Singleton.Instance.ParseCategory(evt.targetID); if (num == 4) { BaseMonoAvatar baseMonoAvatar = Singleton.Instance.TryGetAvatarByRuntimeID(evt.killerID); if (baseMonoAvatar == null) { return true; } Singleton.Instance.TryToUpdateKillAnyEnemy(); MonsterActor monsterActor = (MonsterActor)Singleton.Instance.GetActor(evt.targetID); if (monsterActor != null) { if (monsterActor.uniqueMonsterID != 0) { Singleton.Instance.TryToUpdateKillUniqueMonsterMission(monsterActor.uniqueMonsterID); } else { string subTypeName = monsterActor.metaConfig.subTypeName; MonsterUIMetaData monsterUIMetaDataByName = MonsterUIMetaDataReaderExtend.GetMonsterUIMetaDataByName(subTypeName); int monsterID = monsterUIMetaDataByName.monsterID; Singleton.Instance.TryToUpdateKillMonsterMission(monsterID); } Singleton.Instance.TryToUpdateKillMonsterWithCategoryName(monsterActor.metaConfig.categoryName); } ConfigAvatarAnimEvent configAvatarAnimEvent = SharedAnimEventData.ResolveAnimEvent(baseMonoAvatar.config, evt.killerAnimEventID); if (configAvatarAnimEvent != null && configAvatarAnimEvent.AttackProperty != null && configAvatarAnimEvent.AttackProperty.CategoryTag != null) { AttackResult.AttackCategoryTag[] categoryTag = configAvatarAnimEvent.AttackProperty.CategoryTag; if (categoryTag.Length > 0) { Singleton.Instance.TryToUpdateKillByAttackCategoryTag(categoryTag); } } } return true; } } }