private IEnumerator NotifyCreateCoroutine(Coroutine co, CreateSpeMonsterNotifier _this) { //通知各服务器生成boss var ids = new Int32Array(); ids.Items.AddRange(_this.TableIds); var notifyMsg = ActivityServer.Instance.SceneAgent.NotifyCreateSpeMonster(ids); yield return(notifyMsg.SendAndWaitUntilDone(co)); Logger.Info("ActivityServer.Instance.SceneAgent.NotifyCreateSpeMonster({0})", ids); var notifyId = DictionaryId[(int)_this.Type]; if (notifyId < 0) { yield break; } var scenes = new Dictionary <int, int>(); foreach (var tableId in _this.TableIds) { var tbBoss = Table.GetWorldBOSS(tableId); if (tbBoss == null) { continue; } var tbSceneNpc = Table.GetSceneNpc(tbBoss.SceneNpc); if (tbSceneNpc == null) { continue; } scenes[tbSceneNpc.SceneID] = 0; } foreach (var s in SpeMonsterManager.ServerSceneMonsters) { var serverId = s.Key; Dictionary <int, int> validScenes; if (SpeMonsterManager.ServerValidScenes.TryGetValue(serverId, out validScenes)) { var createScenes = validScenes.Keys.Intersect(scenes.Keys); if (!createScenes.Any()) { continue; } var args = new List <string>(); args.Add(Utils.AddSceneId(createScenes.ToList())); var str = Utils.WrapDictionaryId(notifyId, args); ActivityServer.Instance.ChatAgent.BroadcastWorldMessage((uint)serverId, (int)eChatChannel.SystemScroll, 0, string.Empty, new ChatMessageContent { Content = str }); } } }
public TimedNotifier GetTimed(CreateSpeMonsterNotifier _this) { if (_this._timed == null) { _this._timed = new TimedNotifier(); _this._timed.Notifier = _this; _this._timed.TargetTime = _this.Config.UseNextTime(); } return(_this._timed); }
public void NotifyCreate(CreateSpeMonsterNotifier _this) { var timed = _this.GetTimed(); //通知各服务器生成boss CoroutineFactory.NewCoroutine(NotifyCreateCoroutine, _this).MoveNext(); SpeMonsterManager.AddToCurAvailableDealers(timed); SpeMonsterManager.CreateMonsterDealers.Delete(timed.Handle); timed.TargetTime = _this.Config.UseNextTime(); SpeMonsterManager.CreateMonsterDealers.Add(ref timed.Handle, timed); }
private void Start() { if (SpeMonsterManager.IsStarted) { return; } SpeMonsterManager.IsStarted = true; var configArrays = SpeMonsterUtil.Instance.SpeMonsterConfigs; for (var i = 0; i < configArrays.Length; ++i) { var configArray = configArrays[i]; for (var j = 0; j < configArray.Count; ++j) { var config = configArray[j]; var notifier = new CreateSpeMonsterNotifier(config, (eSpeMonsterType)i); var timed = notifier.GetTimed(); SpeMonsterManager.CreateMonsterDealers.Add(ref timed.Handle, timed); } } GetNextNotifier(); }
public void Construct(CreateSpeMonsterNotifier _this, MonsterConfig config, eSpeMonsterType type) { _this.TableIds = _this.Config.Records.Select(r => r.Id).ToList(); }