using Cal.DataTable; using System; using System.Collections.Generic; using ET.EventType; namespace ET { [ActorMessageHandler] public class C2M_ClickNPCHandler: AMActorLocationRpcHandler { protected override async ETTask Run(Unit unit, C2M_ClickNPC request, M2C_ClickNPC response, Action reply) { Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team.TeamState == TeamState.Fight) { response.Message = "战斗中..."; reply(); return; } UnitScene unitScene = unit.GetComponent(); NPCBase nPCBase = DataTableHelper.Get(request.NPCId); if (unitScene.MapId != nPCBase.SceneId * 100 + nPCBase.MapLayer) { Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】点击NPC场景{unitScene.MapId}错误"); response.Message = "系统错误"; reply(); return; } if ((unitScene.Position - new UnityEngine.Vector2(nPCBase.PosX, nPCBase.PosY)).sqrMagnitude > (MoveHelper.AtkDis)) { Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】点击NPC位置{unitScene.Position}错误"); response.Message = "系统错误"; reply(); return; } switch (request.NPCId) { case 1001: //爱神 break; case 1002: //炼金术士 break; case 1003: //博士 int cardCount = QuestComponent.instance.CheckAnswerCard(unit.Id); MessageHelper.SendActor(unit, new M2C_OpenQuestUI { Card = cardCount }); break; case 1004: //管家 MessageHelper.SendActor(unit, new M2C_OpenStoreUI()); break; case 1008: //普通商店 MessageHelper.SendActor(unit, new M2C_OpenShopUI()); break; case 1009: //寄售 { M2C_OpenConsignmentUI ret = new M2C_OpenConsignmentUI(); ret.TotalPage = await ConsignmentComponent.Instance.GetConsignmet(unit, ret.ConsignMapList); MessageHelper.SendActor(unit, ret); } break; case 1010: //合成 { M2C_OpenForgeUI ret = new M2C_OpenForgeUI(); MessageHelper.SendActor(unit, ret); } break; case 1011: //炼化 MessageHelper.SendActor(unit, new M2C_OpenMeltEquipUI()); break; case 1005: //练级任务 case 1006: //每日任务 case 1007: //冲级任务 case 1012: //第1层JJ case 1013: //第2层JJ case 1014: //第3层JJ case 1015: //第4层JJ case NPCBaseId.创世女神: { List taskList = TaskComponent.Instance.CanAcceptTask(unit, request.NPCId); if (taskList.Count == 0) break; M2C_OpenTaskUI ret = new M2C_OpenTaskUI(); ret.TaskList.AddRange(taskList); MessageHelper.SendActor(unit, ret); } break; case NPCBaseId.毁灭天使: break; case NPCBaseId.时空旅人: StartSpaceTravel(unit); break; } await Game.EventSystem.Publish(new EventType.UpdateTaskState { unit = unit, type = TaskTargetType.DialogTask, value = request.NPCId }); reply(); await ETTask.CompletedTask; } private void StartSpaceTravel(Unit unit) { MessageHelper.SendActor(unit, new M2C_OpenSpaceTravelNpcUI()); } } }