コード例 #1
0
        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
                    });
                }
            }
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
 public void Construct(CreateSpeMonsterNotifier _this, MonsterConfig config, eSpeMonsterType type)
 {
     _this.TableIds = _this.Config.Records.Select(r => r.Id).ToList();
 }