Example #1
0
        //处理刷怪事件
        private void NextWaveMonster(bool notify = true)
        {
            if (mWaveIndex >= MaxWaveNumber)
            {
                BossEvent();
                return;
            }

            //随机区域
            var area = new int[AreaNumber];

            for (var i = 0; i < AreaNumber; i++)
            {
                area[i] = i;
            }
            for (var i = 0; i < area.Length; i++)
            {
                var r = MyRandom.Random(0, area.Length - 1);
                if (r == i)
                {
                    continue;
                }

                var temp = area[i];
                area[i] = area[r];
                area[r] = temp;
            }

            //清理怪列表
            mMonsterGrop.Clear();
            mMonsterCount = 0;
            //计算该刷哪些怪
            for (var i = 0; i < AreaNumber; i++)
            {
                var areaId = area[i];
                var idx    = areaId * 4 + mWaveIndex;

                var data = new GenerateMonsterData();
                mMonsterGrop.Add(data);

                data.AreaId = areaId;

                var table = Table.GetSkillUpgrading(mMonsterGroup[idx]);
                if (null == table)
                {
                    continue;
                }

                foreach (var value in table.Values)
                {
                    data.SceneNpcList.Add(value);
                    mMonsterCount++;
                }
            }

            //刷怪
            GenerateMonster();

            if (notify)
            {
                //5秒后进入第{0}阶段
                var msg = string.Format("^301001^{0}", mWaveIndex + 1);
                SendNotify2AllPlayer(msg);
            }

            SendDungeonInfo();
        }
Example #2
0
        //处理刷怪事件
        private void NextWaveMonster(bool notify = true)
        {
            for (var i = 0; i < mTimer.Length; i++)
            {
                if (mTimer[i] != null)
                {
                    SceneServerControl.Timer.DeleteTrigger(mTimer[i]);
                    mTimer[i] = null;
                }
            }


            //随机区域
            var area = new int[AreaNumber];

            for (var i = 0; i < AreaNumber; i++)
            {
                area[i] = i;
            }

            for (var i = 0; i < area.Length; i++)
            {
                var r = MyRandom.Random(0, area.Length - 1);
                if (r == i)
                {
                    continue;
                }

                var temp = area[i];
                area[i] = area[r];
                area[r] = temp;
            }

            //清理怪列表
            mMonsterCount = 0;

            for (var i = 0; i < MonsterTimes; i++)
            {
                var monsterGroup = new GenerateMonsterData();
                var area1        = area[i * 2];
                var area2        = area[i * 2 + 1];

                monsterGroup.AreaId1 = area1;
                monsterGroup.AreaId2 = area2;

                var idx1 = area1 * MaxWaveNumber * 2 + mWaveIndex * 2;
                var idx2 = area2 * MaxWaveNumber * 2 + mWaveIndex * 2;

                var tableMonsterGroup = Table.GetSkillUpgrading(mMonsterData[idx1]);
                if (null != tableMonsterGroup)
                {
                    for (var j = 0; j < tableMonsterGroup.Values.Count; j++)
                    {
                        monsterGroup.SceneNpcList1.Add(tableMonsterGroup.GetSkillUpgradingValue(j));
                        mMonsterCount++;
                    }
                }

                tableMonsterGroup = Table.GetSkillUpgrading(mMonsterData[idx2]);
                if (null != tableMonsterGroup)
                {
                    for (var j = 0; j < tableMonsterGroup.Values.Count; j++)
                    {
                        monsterGroup.SceneNpcList2.Add(tableMonsterGroup.GetSkillUpgradingValue(j));
                        mMonsterCount++;
                    }
                }

                var time = DateTime.Now.AddSeconds(WaiteSeconds);

                var idx = i;
                mTimer[idx] = SceneServerControl.Timer.CreateTrigger(time.AddSeconds(WaveWaiteSeconds * i), () =>
                {
                    var list1 = monsterGroup.SceneNpcList1;
                    var list2 = monsterGroup.SceneNpcList2;

                    var has = false;
                    if (list1.Count > 0)
                    {
                        has          = true;
                        var sceneNpc = list1[0];

                        CreateSceneNpc(sceneNpc, default(Vector2), mMonsterLevel);
                        list1.RemoveAt(0);
                    }

                    if (list2.Count > 0)
                    {
                        has          = true;
                        var sceneNpc = list2[0];

                        CreateSceneNpc(sceneNpc, default(Vector2), mMonsterLevel);
                        list2.RemoveAt(0);
                    }

                    if (!has)
                    {
                        SceneServerControl.Timer.DeleteTrigger(mTimer[idx]);
                        mTimer[idx] = null;
                    }
                }, WaveAreaIntervalMillSeconds);
            }
            BossEvent();

            if (notify)
            {
                //5秒后进入第{0}阶段
                var msg = string.Format("^301001^{0}", mWaveIndex + 1);
                SendNotify2AllPlayer(msg);
            }

            mDataDirty = true;
        }