//处理刷怪事件 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(); }
//处理刷怪事件 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; }