Exemplo n.º 1
0
 //发送动画消息
 public void SendAnimMsg(WarMsg_Type type)
 {
     animParam.cmdType  = type;
     animParam.Sender   = UniqueID;
     animParam.Receiver = UniqueID;
     WarServerManager.Instance.npcMgr.SendMessage(UniqueID, UniqueID, animParam);
 }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        //奈河桥的模式
        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);
                    }
                }
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
 /// <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));
 }