//发送动画消息 public void SendAnimMsg(WarMsg_Type type) { animParam.cmdType = type; animParam.Sender = UniqueID; animParam.Receiver = UniqueID; WarServerManager.Instance.npcMgr.SendMessage(UniqueID, UniqueID, animParam); }
/// <summary> /// 删除NPC身上特定的触发器 /// </summary> /// <returns>The trigger.</returns> /// <param name="TriggerId">Trigger identifier.</param> /// <param name="NPCId">NPC identifier.</param> public ITriggerItem RemoveTrigger(WarMsg_Type care, int TriggerId, int npcId) { ITriggerItem one = null; List <ITriggerItem> list = null; //有队列 if (OnWork.TryGetValue(care, out list)) { int count = list.Count; if (count > 0) { int idx = -1; for (int i = 0; i < count; ++i) { if (list[i].GetID() == TriggerId) { idx = i; one = list[i]; break; } } //删除管理器里面的 if (idx >= 0) { list.RemoveAt(idx); //移回Idle List <ITriggerItem> idleList = null; if (!OnIdle.TryGetValue(care, out idleList)) { idleList = new List <ITriggerItem>(); OnIdle[care] = idleList; } one.OnRest(); OnIdle[care].Add(one); } } } //挂在Npc上删除 ServerNPC npc = WarServerManager.Instance.npcMgr.GetNPCByUniqueID(npcId); npc.rmTrigger(TriggerId); return(one); }
//奈河桥的模式 public void NeheQiaoModeComplete(MsgParam msg, WarServerNpcMgr npcMgr) { NeHeQiaoNpcMgr mgr = npcMgr as NeHeQiaoNpcMgr; if (mgr != null) { ServerNPC selfBase = mgr.SelfMilitaryBase; ServerNPC enemyBase = mgr.EnemyMilitaryBase; WarAnimParam warMsg = msg as WarAnimParam; if (warMsg != null && warMsg.described != null) { int deadNpcId = warMsg.described.srcEnd.param2; WarMsg_Type enemyRes = WarMsg_Type.Lose; WarMsg_Type selfRes = WarMsg_Type.Lose; if (deadNpcId == selfBase.UniqueID) { //我方基地死亡 enemyRes = WarMsg_Type.Win; } else if (deadNpcId == enemyBase.UniqueID) { //敌方基地死亡 selfRes = WarMsg_Type.Win; } /// /// ------ 确实是基地死亡了 ----------- /// if (enemyRes != WarMsg_Type.Lose || selfRes != WarMsg_Type.Lose) { WarCampMsg eParam = new WarCampMsg(); eParam.SendCamp = CAMP.Enemy; eParam.ReceCamp = CAMP.Enemy; eParam.cmdType = enemyRes; mgr.SendMessageAsync(CAMP.Enemy, CAMP.Enemy, eParam, false); WarCampMsg sParam = new WarCampMsg(); sParam.SendCamp = CAMP.Player; sParam.ReceCamp = CAMP.Player; sParam.cmdType = selfRes; mgr.SendMessageAsync(CAMP.Player, CAMP.Player, sParam, false); } } } }
ITriggerItem CreateNewTrigger(WarMsg_Type care, int trCfgNum) { ITriggerItem imp = null; Type created = null; if (Worker.TryGetValue(care, out created)) { imp = (ITriggerItem)Activator.CreateInstance(created); TriggerConfigData cfg = null; if (trCfgNum > 0) { cfg = triggerLoader.get(trCfgNum); } ((Trigger)imp).Init(cfg, allocIdx++); } return(imp); }
/// <summary> /// 创建触发器, /// </summary> private ITriggerItem CreateTrigger(WarMsg_Type care, int npcId, int trCfgNum, RtBufData buff) { int id = 0; ITriggerItem one = null; List <ITriggerItem> idleList = null; if (OnIdle.TryGetValue(care, out idleList)) { one = idleList.Count > 0 ? idleList[0] : null; if (one == null) { //Create the new one one = CreateNewTrigger(care, trCfgNum); } else { idleList.RemoveAt(0); TriggerConfigData cfg = null; if (trCfgNum > 0) { cfg = triggerLoader.get(trCfgNum); } ((Trigger)one).Init(cfg, -1); } } else { //Create the new one one = CreateNewTrigger(care, trCfgNum); } id = one.GetID(); List <ITriggerItem> workList = null; if (OnWork.TryGetValue(care, out workList)) { workList.Add(one); } else { workList = new List <ITriggerItem>(); workList.Add(one); OnWork[care] = workList; } //挂在Npc上 ServerNPC npc = WarServerManager.Instance.npcMgr.GetNPCByUniqueID(npcId); npc.addTrigger(id); ((Trigger)one).HangUpNpcId = npcId; //关联的Buff是否存在 if (buff != null) { ((Trigger)one).HangUpBuffId = buff.ID; buff.TriggerID = id; } return(one); }
/// <summary> /// 没有TriggerConfigData的触发器 /// 这个偏向于更加底层的逻辑 /// </summary> /// <returns>The trigger.</returns> /// <param name="care">Care.</param> /// <param name="npcId">Npc identifier.</param> public ITriggerItem CreateTrigger(WarMsg_Type care, int npcId) { return(CreateTrigger(care, npcId, -1, null)); }