Esempio n. 1
0
        /// <summary>
        /// 大波开始刷怪前,挑选路线,初始化刷怪列表,计算本波的最大大波间隔
        /// </summary>
        /// <param name="scene"></param>
        public static void InitNextWaveMonsterList(LuoLanFaZhenCopySence scene)
        {
            if (scene.m_CreateMonsterWave >= 0 && scene.m_CreateMonsterWave < LuoLanFaZhenCopySencedata.TotalWave)
            {
                int delay2   = 1;
                int totalNum = 0;

                scene.m_CreateWaveMonsterList.Clear();
                foreach (var m in LuoLanFaZhenCopySencedata.EMoLaiXiCopySenceMonsterData)
                {
                    if (m.m_Wave == scene.m_CreateMonsterWave + 1)
                    {
                        LuoLanFaZhenCopySenceMonster em = null;// m.CloneMini();
                        scene.m_CreateWaveMonsterList.Add(em);

                        int random = Global.GetRandomNumber(0, em.PathIDArray.Length);
                        int pathID = em.PathIDArray[random];
                        em.PatrolPath = LuoLanFaZhenCopySencedata.m_MonsterPatorlPathLists[pathID];
                        delay2        = Global.GMax(delay2, em.m_Delay2);
                        totalNum     += em.m_Num;
                    }
                }

                scene.m_Delay2                    = delay2;
                scene.m_TotalMonsterCount         = totalNum;
                scene.m_TotalMonsterCountAllWave += totalNum;
            }
        }
Esempio n. 2
0
        public LuoLanFaZhenCopySenceMonster CloneMini()
        {
            LuoLanFaZhenCopySenceMonster em = new LuoLanFaZhenCopySenceMonster()
            {
                m_ID                 = m_ID,
                m_Wave               = m_Wave,
                PathIDArray          = PathIDArray,
                m_Num                = m_Num,
                m_MonsterID          = m_MonsterID,
                m_Delay1             = m_Delay1,
                m_CreateMonsterTick1 = m_CreateMonsterTick1,
                m_CreateMonsterCount = m_CreateMonsterCount,
                m_Delay2             = m_Delay2,
            };

            return(em);
        }
Esempio n. 3
0
        /// <summary>
        /// 金币副本数据 [6/11/2014 LiaoWei]
        /// </summary>
        public static void LoadLuoLanFaZhenCopySceneInfo()
        {
            try
            {
                int totalWave = 0;//最大波数
                LuoLanFaZhenCopySencedata.FaildEscapeMonsterNum = (int)GameManager.systemParamsList.GetParamValueIntByName("BaoWeiZhan");

                XElement xmlFile = null;
                xmlFile = Global.GetGameResXml(string.Format("Config/LuoLanFaZhenLuXian.xml"));
                foreach (var args in xmlFile.Elements("Path"))
                {
                    int          id            = (int)Global.GetSafeAttributeLong(args, "ID");
                    string       sPatorlPathID = Global.GetSafeAttributeStr(args, "Path");
                    List <int[]> pointList     = new List <int[]>();
                    if (string.IsNullOrEmpty(sPatorlPathID))
                    {
                        LogManager.WriteLog(LogTypes.Warning, string.Format("金币副本怪路径为空"));
                    }
                    else
                    {
                        string[] fields = sPatorlPathID.Split('|');
                        if (fields.Length <= 0)
                        {
                            LogManager.WriteLog(LogTypes.Warning, string.Format("金币副本怪路径为空"));
                        }
                        else
                        {
                            for (int i = 0; i < fields.Length; i++)
                            {
                                string[] sa = fields[i].Split(',');
                                if (sa.Length != 2)
                                {
                                    LogManager.WriteLog(LogTypes.Warning, string.Format("解析{0}文件中的奖励项时失败,坐标有误", "Config/LuoLanFaZhenLuXian.xml"));
                                    continue;
                                }
                                int[] pos = Global.StringArray2IntArray(sa);
                                pointList.Add(pos);
                            }
                        }
                    }
                    LuoLanFaZhenCopySencedata.m_MonsterPatorlPathLists.Add(id, pointList);
                }

                xmlFile = Global.GetGameResXml(string.Format("Config/LuoLanFaZhen.xml"));
                IEnumerable <XElement> MonstersXEle = xmlFile.Elements("FuBen");
                foreach (var xmlItem in MonstersXEle)
                {
                    if (null != xmlItem)
                    {
                        LuoLanFaZhenCopySenceMonster tmpLuoLanFaZhenCopySceneMon = new LuoLanFaZhenCopySenceMonster();

                        tmpLuoLanFaZhenCopySceneMon.m_MonsterID = new List <int>();
                        int id = (int)Global.GetSafeAttributeLong(xmlItem, "ID");

                        tmpLuoLanFaZhenCopySceneMon.m_ID   = id;
                        tmpLuoLanFaZhenCopySceneMon.m_Wave = (int)Global.GetSafeAttributeLong(xmlItem, "WaveID");
                        //tmpLuoLanFaZhenCopySceneMon.m_Num = (int)Global.GetSafeAttributeLong(xmlItem, "Num");
                        tmpLuoLanFaZhenCopySceneMon.m_Delay1 = (int)Global.GetSafeAttributeLong(xmlItem, "Delay1");
                        tmpLuoLanFaZhenCopySceneMon.m_Delay2 = (int)Global.GetSafeAttributeLong(xmlItem, "Delay2");
                        string pathIDArray = Global.GetSafeAttributeStr(xmlItem, "PathID");;
                        tmpLuoLanFaZhenCopySceneMon.PathIDArray = Global.String2IntArray(pathIDArray);

                        string sMonstersID = Global.GetSafeAttributeStr(xmlItem, "MonsterList");
                        if (string.IsNullOrEmpty(sMonstersID))
                        {
                            LogManager.WriteLog(LogTypes.Warning, string.Format("金币副本怪ID为空"));
                        }
                        else
                        {
                            string[] fields = sMonstersID.Split('|');
                            if (fields.Length <= 0)
                            {
                                LogManager.WriteLog(LogTypes.Warning, string.Format("金币副本怪ID为空"));
                            }
                            else
                            {
                                for (int i = 0; i < fields.Length; i++)
                                {
                                    int[] Monsters = Global.String2IntArray(fields[i]);
                                    if (null != Monsters && Monsters.Length == 2 && Monsters[0] > 0 && Monsters[1] > 0)
                                    {
                                        for (int j = 0; j < Monsters[1]; j++)
                                        {
                                            tmpLuoLanFaZhenCopySceneMon.m_MonsterID.Add(Monsters[0]);
                                            tmpLuoLanFaZhenCopySceneMon.m_Num++;
                                        }
                                    }
                                }
                            }
                        }
                        //LuoLanFaZhenCopySencedata.EMoLaiXiCopySenceMonsterData.Add(tmpLuoLanFaZhenCopySceneMon);
                        totalWave = Global.GMax(totalWave, tmpLuoLanFaZhenCopySceneMon.m_Wave);
                    }
                }
                LuoLanFaZhenCopySencedata.TotalWave = totalWave;
            }
            catch (Exception)
            {
                throw new Exception(string.Format("启动时加载xml文件: {0} 失败", string.Format("Config/JinBiFuBen.xml")));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 处理刷怪,失败等活动逻辑
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="clientList"></param>
        /// <param name="copyMap"></param>
        /// <param name="nowTicks"></param>
        public static void OnSceneTimer(LuoLanFaZhenCopySence scene, List <GameClient> clientList, CopyMap copyMap, long nowTicks)
        {
            int nWave  = scene.m_CreateMonsterWave;
            int nCount = LuoLanFaZhenCopySencedata.TotalWave;

            bool notifyWaveAndNum = false;
            bool notifyEnd        = false;
            int  escapeCount      = GetEscapeCount(scene.m_CopyMapID);

            if (escapeCount > 0)
            {
                scene.m_EscapedMonsterNum += escapeCount;
                notifyWaveAndNum           = true;
            }

            if (scene.m_LoginEnterFlag == 1)
            {
                if (nowTicks - scene.m_LoginEnterTimer > m_DelayTime)
                {
                    scene.m_LoginEnterFlag = 0;
                    notifyWaveAndNum       = true;
                }
            }

            if (scene.m_EscapedMonsterNum >= LuoLanFaZhenCopySencedata.FaildEscapeMonsterNum)
            {
                if (!scene.m_bFinished)
                {
                    GameManager.CopyMapMgr.CopyMapFaildForAll(clientList, copyMap);
                    scene.m_bFinished = true;
                }
                GameManager.CopyMapMgr.KillAllMonster(copyMap);
                notifyWaveAndNum = true;
            }
            else if (scene.m_bAllMonsterCreated)
            {
                if (!scene.m_bFinished)
                {
                    if (copyMap.KilledDynamicMonsterNum + scene.m_EscapedMonsterNum >= scene.m_TotalMonsterCountAllWave)
                    {
                        if (null != clientList && clientList.Count > 0)
                        {
                            notifyWaveAndNum = true;
                            GameManager.CopyMapMgr.CopyMapPassAwardForAll(clientList[0], copyMap, true);
                            scene.m_bFinished = true;

                            if (copyMap.KilledDynamicMonsterNum > copyMap.TotalDynamicMonsterNum)
                            {
                                try
                                {
                                    string log = string.Format("恶魔来袭已成功,但杀怪计数异常,结束时间{0},KilledDynamicMonsterNum:{1},m_EscapedMonsterNum:{2},m_TotalMonsterCountAllWave:{3}",
                                                               new DateTime(nowTicks * 10000), copyMap.KilledDynamicMonsterNum, scene.m_EscapedMonsterNum, scene.m_TotalMonsterCountAllWave);
                                    LogManager.WriteLog(LogTypes.Error, log);
                                } catch { }
                            }
                        }
                    }
                }
            }
            else
            {
                // 延迟间隔判断
                if (nowTicks - scene.m_CreateMonsterTick2 > scene.m_Delay2 * 1000)       // 大波间隔时间判断
                {
                    if (scene.m_CreateMonsterWaveNotify == 0)
                    {
                        scene.m_CreateMonsterWaveNotify = 1;
                        notifyWaveAndNum = true;
                    }

                    //刷怪
                    for (int i = 0; i < scene.m_CreateWaveMonsterList.Count; i++)
                    {
                        LuoLanFaZhenCopySenceMonster tmpInfo = scene.m_CreateWaveMonsterList[i];

                        if (tmpInfo.m_CreateMonsterCount < tmpInfo.m_Num)
                        {
                            if (nowTicks - tmpInfo.m_CreateMonsterTick1 > tmpInfo.m_Delay1 * 1000)   // 小波间隔时间判断
                            {
                                // 怪在列表中的索引
                                int nIndex = tmpInfo.m_CreateMonsterCount;

                                // 在起点刷怪
                                int[] pos = tmpInfo.PatrolPath[0];
                                GameManager.MonsterZoneMgr.AddDynamicMonsters(scene.m_MapCodeID, tmpInfo.m_MonsterID[nIndex], scene.m_CopyMapID, 1, pos[0], pos[1], 0, 0, SceneUIClasses.EMoLaiXiCopy, tmpInfo.PatrolPath);

                                tmpInfo.m_CreateMonsterCount++;
                                scene.m_CreateMonsterCount++;

                                tmpInfo.m_CreateMonsterTick1 = nowTicks; // 小波刷怪时间设定
                            }
                        }
                    }

                    // 第N大波刷完了
                    if (scene.m_CreateMonsterCount >= scene.m_TotalMonsterCount)
                    {
                        scene.m_CreateMonsterTick2 = nowTicks; // 设定大波刷完时间
                        scene.m_CreateMonsterWave++;
                        scene.m_CreateMonsterCount      = 0;
                        scene.m_CreateMonsterWaveNotify = 0;
                        scene.m_Delay2   = 0;
                        notifyWaveAndNum = true;
                        copyMap.TotalDynamicMonsterNum = scene.m_TotalMonsterCountAllWave;
                        if (scene.m_CreateMonsterWave >= LuoLanFaZhenCopySencedata.TotalWave)
                        {
                            scene.m_Delay2             = int.MaxValue;
                            scene.m_bAllMonsterCreated = true;
                            notifyEnd = true;
                        }
                    }
                }
            }

            if (notifyWaveAndNum)
            {
                SendMsgToClientForLuoLanFaZhenCopySceneMonsterWave(clientList, scene.m_EscapedMonsterNum, scene.m_CreateMonsterWave, LuoLanFaZhenCopySencedata.TotalWave, LuoLanFaZhenCopySencedata.FaildEscapeMonsterNum);
            }
            if (notifyEnd && null != clientList)
            {
                foreach (var client in clientList)
                {
                    GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client,
                                                             StringUtil.substitute(Global.GetLang("恶魔来袭副本 刷怪结束了")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.None);
                }
            }
        }