public IEnumerator SSNotifyCharacterOnConnet(Coroutine coroutine,
                                                     RankService _this,
                                                     SSNotifyCharacterOnConnetInMessage msg)
        {
            var characterId = msg.Request.CharacterId;
            var clientId    = msg.Request.ClientId;
            var proxy       = new RankProxy(_this, characterId, clientId);

            _this.Proxys[characterId] = proxy;

            var ret = AsyncReturnValue <bool> .Create();

            var subCo = CoroutineFactory.NewSubroutine(OnConnected, coroutine, proxy, ret);

            if (subCo.MoveNext())
            {
                yield return(subCo);
            }
            var isOk = ret.Value;

            ret.Dispose();
            if (isOk)
            {
                msg.Reply((int)ErrorCodes.OK);
            }
            else
            {
                msg.Reply((int)ErrorCodes.ConnectFail);
            }
        }
示例#2
0
        /// <summary>
        ///     买满了,等待揭晓结果
        /// </summary>
        /// <returns></returns>
        private void WaitResult(GroupShopOne _this)
        {
            GroupShop.Dirty = true;
            _this.State     = (int)eGroupShopItemState.WaitResult;

            //流拍逻辑
            if (_this.NowCount < _this.tbGroupShop.LimitMinCount)
            {
                CoroutineFactory.NewCoroutine(PassIn, _this).MoveNext();
                return;
            }

            var t = DateTime.Now.AddMinutes(GroupShopOne.OverTimeMinutes);

            _this.OverTime = t;
            if (_this.overTrigger != null)
            {
                TeamServerControl.tm.DeleteTrigger(_this.overTrigger);
            }
            _this.overTrigger = TeamServerControl.tm.CreateTrigger(t, () => GiveItem(_this));

            var characterId = _this.BuyCharacterList.Range();
            var count       = _this.CharactersCount[characterId];

            _this.mDbData.LuckyId    = characterId;
            _this.mDbData.LuckyCount = count;
            CoroutineFactory.NewCoroutine(GetLogicSimpleDataCoroutine, _this).MoveNext();

            var item = _this.mDbData.ItemData;

            PlayerLog.WriteLog((ulong)LogType.GroupShopOldDatasKeySame,
                               "WaitResult, luckyId = {0}, luckyCount = {1}, item id = {2}, count = {3}", characterId, count,
                               item.ItemId, item.Count);
        }
示例#3
0
        public IEnumerator BSNotifyCharacterOnLost(Coroutine coroutine,
                                                   ChatService _this,
                                                   BSNotifyCharacterOnLostInMessage msg)
        {
            var characterId = msg.Request.CharacterId;
            ChatCharacterProxy charProxy;

            if (!_this.Proxys.TryGetValue(characterId, out charProxy))
            {
                yield break;
            }
            var proxy = (ChatProxy)charProxy;

            if (proxy.Character != null)
            {
                proxy.Character.Proxy = null;
            }
            var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.RemoveCharacter, coroutine,
                                                    proxy.CharacterId);

            if (co.MoveNext())
            {
                yield return(co);
            }
            AnchorManager.Instance.CharOffline(characterId);
            proxy.Connected = false;
        }
示例#4
0
        public IEnumerator CreateCharacter(Coroutine coroutine, ChatService _this, CreateCharacterInMessage msg)
        {
            var characterId = msg.CharacterId;

            PlayerLog.WriteLog(characterId, "----------PrepareDataForCreateCharacter----------{0}", characterId);

            var result = AsyncReturnValue <ChatCharacterController> .Create();

            var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.CreateCharacterController, coroutine,
                                                    characterId, result,
                                                    new object[] { msg.Request.Type });

            if (co.MoveNext())
            {
                yield return(co);
            }
            var retValue = result.Value;

            result.Dispose();
            if (retValue == null)
            {
                msg.Reply((int)ErrorCodes.Error_PrepareEnterGameFailed);
                yield break;
            }

            var co1 = CoroutineFactory.NewSubroutine(CharacterManager.Instance.RemoveCharacter, coroutine, characterId);

            if (co1.MoveNext())
            {
                yield return(co1);
            }

            msg.Reply();
        }
示例#5
0
        public override void Init()
        {
            base.Init();
            Cleanup();
            if (0 == ServerList.Count)
            {
                Table.ForeachServerName((tb) =>
                {
                    ServerList.Add(tb.Id);
                    return(true);
                });
            }

            if (eRechargeActivityOpenRule.NewServerAuto == OpenRule)
            {
                foreach (var id in ServerList)
                {
                    var time = DateTime.Parse(Table.GetServerName(id).OpenTime).Date.AddHours(ScoreDelayHours);
                    var list = new List <int>();
                    list.Add(id);

                    //实际计算时间往后推延个ScoreDelayMinutes
                    var trigger = LogicServerControl.Timer.CreateTrigger(time.AddMinutes(ScoreDelayMinutes), () =>
                    {
                        CoroutineFactory.NewCoroutine(GetRankData, list, time.Date).MoveNext();
                    });

                    mTriggers.Add(trigger);
                }
            }

            //现在Reload ServerName,会重刷一边运营活动
            //EventDispatcher.Instance.AddEventListener(ReloadTableEvent.EVENT_TYPE, ReloadTable);
        }
示例#6
0
//         public override void OnPlayerEnter(ObjPlayer player)
//         {
//             base.OnPlayerEnter(player);
//
//         }

        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            base.OnPlayerEnterOver(player);
            Dirty = true;
            CoroutineFactory.NewCoroutine(ApplyPlayerExdata, player).MoveNext();
            player.SyncCharacterPostion();
        }
示例#7
0
        //重新排序
        private void SortAndSave(Ranking _this)
        {
            if (_this.Dirty == false)
            {
                return;
            }
            var result = Sort(_this);

            CoroutineFactory.NewCoroutine(Save, _this, _this.DBKeyName).MoveNext();

            // 后台统计
            try
            {
                if (result != null)
                {
                    var saveCount = Math.Min(20, result.Count);
                    for (int i = result.Count - 1; i >= result.Count - saveCount && saveCount > 0; i--)
                    {
                        string v = string.Format("Rank_info#{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                 result[i].Value.ServerId,
                                                 0,
                                                 result[i].Value.Name,
                                                 _this.RankType,
                                                 result[i].Value.Value,
                                                 result[i].Value.Rank,
                                                 DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间
                        PlayerLog.Kafka(v);
                    }
                }
            }
            catch (Exception)
            {
            }
        }
示例#8
0
        public static IEnumerator GmSyncMail(Coroutine coroutine, CharacterController character)
        {
            var characterGmMailId = character.mMail.GmGuid;
            var GmMailGuid        = GetNowGmMailGuid(character.serverId);

            if (characterGmMailId == 0)
            {
                characterGmMailId = 100000000;
                //       character.mMail.GmGuid = GmMailGuid;
                //       yield break;
            }
            Dictionary <ulong, DBMail_One> serverMail = null;

            for (var i = characterGmMailId + 1; i <= GmMailGuid; i++)
            {
                if (serverMail == null)
                {
                    serverMail = GetServerMail(character.serverId);
                }
                if (GetMail(serverMail, i) != null)
                {
                    PushMail(character, i);
                    continue;
                }
                var result = CoroutineFactory.NewSubroutine(ReadMail, coroutine, character.serverId, i);
                if (result.MoveNext())
                {
                    yield return(result);
                }
                PushMail(character, i);
            }
            character.mMail.GmGuid = GmMailGuid;
        }
示例#9
0
 private void SetTrigger()
 {
     if (ServerMysteryStoreManager.Trigger != null)
     {
         ActivityServerControl.Timer.DeleteTrigger(ServerMysteryStoreManager.Trigger);
         ServerMysteryStoreManager.Trigger = null;
     }
     if (DateTime.Now < DateTime.Now.Date.AddHours(11.5))
     {
         ServerMysteryStoreManager.Trigger = ActivityServerControl.Timer.CreateTrigger(
             DateTime.Now.Date.AddHours(11.5),
             ResetStore);
     }
     else if (DateTime.Now < DateTime.Now.Date.AddHours(17.5))
     {
         ServerMysteryStoreManager.Trigger = ActivityServerControl.Timer.CreateTrigger(
             DateTime.Now.Date.AddHours(17.5),
             ResetStore);
     }
     else if (DateTime.Now < DateTime.Now.Date.AddHours(24))
     {
         ServerMysteryStoreManager.Trigger = ActivityServerControl.Timer.CreateTrigger(
             DateTime.Now.Date.AddHours(24),
             ResetStore);
     }
     CoroutineFactory.NewCoroutine(RefreshAll).MoveNext();
 }
示例#10
0
        public void OverCopy(GroupShopOne _this, GroupShopOne one)
        {
            if (_this.mDbData == null)
            {
                _this.mDbData = new DBGroupShopOne();
                if (_this.mDbData.ItemData == null)
                {
                    _this.mDbData.ItemData = new ItemBaseData();
                }
            }
            _this.Guid        = one.Guid;
            _this.tbGroupShop = one.tbGroupShop;
            _this.State       = (int)eGroupShopItemState.Sold;
            _this.CharactersCount.AddRange(one.CharactersCount);
            _this.mDbData.Characters.AddRange(one.mDbData.Characters);
            _this.mDbData.GroupShopId     = one.tbGroupShop.Id;
            _this.mDbData.OverTime        = one.mDbData.OverTime;
            _this.mDbData.ItemData.ItemId = one.mDbData.ItemData.ItemId;
            _this.mDbData.ItemData.Count  = one.mDbData.ItemData.Count;
            _this.mDbData.ItemData.Exdata.AddRange(one.mDbData.ItemData.Exdata);
            _this.mDbData.BuyCount      = one.NowCount;
            _this.mDbData.LuckyId       = one.mDbData.LuckyId;
            _this.mDbData.LuckyCount    = one.mDbData.LuckyCount;
            _this.mDbData.LuckyName     = one.mDbData.LuckyName;
            _this.mDbData.LuckyServerId = one.mDbData.LuckyServerId;

            if (_this.mDbData.LuckyId > 0)
            {
                CoroutineFactory.NewCoroutine(SendChatNotify, _this).MoveNext();
            }
        }
示例#11
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            base.OnPlayerLeave(player);
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------OnPlayerLeave----------");

            if (mBattleState == BattleState.None)
            {
                if (mQuitPlayers.Contains(player.ObjId))
                {
                    mQuitPlayers.Remove(player.ObjId);
                    CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                }
                else
                {
                    var leave = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(60.0f), () =>
                    {
                        CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                        mLeaveTrigger.Remove(player.ObjId);
                    });
                    mLeaveTrigger.Add(player.ObjId, leave);
                }
            }
            else
            {
                ResetPlayer(player);
            }
        }
示例#12
0
        public Scene EnterScene(SceneManager _this, ObjPlayer obj, ulong guid)
        {
            var scene = GetScene(_this, guid);

            if (scene == null)
            {
                Logger.Error("EnterScene Error sceneGuid={0},objGuid={1}", guid, obj.ObjId);
                return(null);
            }
            scene.EnterScene(obj);
            if (obj.GetAllianceId() != 0)
            {
                CoroutineFactory.NewCoroutine(NotifyChangeScene, obj, scene.TypeId).MoveNext();
            }
            //后台统计
            try
            {
                string v = string.Format("scene#{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                         obj.ServerId,
                                         obj.ObjId,
                                         obj.GetLevel(),
                                         obj.Attr.GetFightPoint(),                      //战力
                                         obj.Scene.TypeId,
                                         0,                                             //0:进入  1:离开
                                         DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间
                PlayerLog.Kafka(v);
            }
            catch (Exception)
            {
            }
            return(scene);
        }
示例#13
0
        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            if (player == null)
            {
                return;
            }

            base.OnPlayerEnterOver(player);
            CoroutineFactory.NewCoroutine(GetPlayerTili, player.ObjId).MoveNext();

            TimerState outValue = null;

            if (StateDic.TryGetValue(player.ObjId, out outValue))
            {
                StateDic[player.ObjId].state = 1;
                StateDic[player.ObjId].time  = DateTime.MaxValue;
            }
            else
            {
                StateDic.Add(player.ObjId, new TimerState(1));
            }

            DateTime outData;

            if (EnterTimeDic.TryGetValue(player.ObjId, out outData))
            {
                EnterTimeDic[player.ObjId] = DateTime.Now;
            }
            else
            {
                EnterTimeDic.Add(player.ObjId, DateTime.Now);
            }
        }
示例#14
0
        public override void ExitDungeon(ObjPlayer player)
        {
            CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext();

            // 玩家手动退出副本?
            player.ExitDungeon();
        }
示例#15
0
        public void Tick()
        {
            mRemoveList.Clear();
            foreach (var item in mDictionary)
            {
                if (item.Value.Controller == null)
                {
                    if ((DateTime.Now - item.Value.LastSaveTime).TotalMinutes > 30)
                    {
                        mRemoveList.Add(item.Key);
                    }
                    continue;
                }

                item.Value.Controller.Tick();
                try
                {
                    if (DateTime.Now - item.Value.LastSaveTime > TimeSpan.FromSeconds(60))
                    {
                        CoroutineFactory.NewCoroutine(SaveData, item.Key, item.Value, false).MoveNext();
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "Save data for character {0} error", item.Key);
                }
            }

            foreach (var id in mRemoveList)
            {
                Remove(id);
            }
        }
示例#16
0
 private IEnumerator MoveElevator(int i, int currentFloor)
 {
     return(CoroutineFactory.Create(Mathf.Abs(i - currentFloor) * duration, time =>
     {
         transform.position = Vector3.Lerp(startPosition, endPosition, time);
     }));
 }
示例#17
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            base.OnPlayerLeave(player);

            //恢复满血满蓝
            if (player.IsDead())
            {
                player.Relive();
            }
            else
            {
                player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
                player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
            }

            var campId = player.GetCamp();

            if (campId == -1)
            {
                player.SetCamp(0);
                return;
            }
            var camp = Camps[campId];

            camp.Players.Remove(player);
            player.SetCamp(0);

            CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
        }
示例#18
0
        public IEnumerator SaveDataForClone(Coroutine coroutine, ulong id, DataItem item, bool forceSave = false)
        {
            if (item.Controller == null)
            {
                yield break;
            }

            if (forceSave || item.Controller.DbDirty)
            {
                Logger.Info("Save data for character {0}.", id);


                item.SimpleData = item.Controller.GetSimpleData();
                var data = item.Controller.GetData();
                item.Controller.OnSaveData(data, item.SimpleData);

                item.Controller.CleanDbDirty();

                item.LastSaveTime = DateTime.Now;

                var co = CoroutineFactory.NewSubroutine(SaveData, coroutine, mCategory, id.ToString(), data);
                if (co.MoveNext())
                {
                    yield return(co);
                }

                co = CoroutineFactory.NewSubroutine(SaveData, coroutine, mCategory, "__s_:" + id, item.SimpleData);
                if (co.MoveNext())
                {
                    yield return(co);
                }
                //重要,克隆出来的不存cache
                Remove(id);
            }
        }
示例#19
0
        public IEnumerator CreateCharacterController(Coroutine coroutine,
                                                     ulong characterId,
                                                     AsyncReturnValue <CT> controller,
                                                     object[] args)
        {
            controller.Value = null;
            DataItem dataItem;

            if (mDictionary.TryGetValue(characterId, out dataItem))
            {
                Logger.Error("Item already exist.");
                controller.Value = dataItem.Controller;
                yield break;
            }

            dataItem = new DataItem();

            dataItem.Controller       = new CT();
            dataItem.Controller.State = CharacterState.Created;
            dataItem.Controller.InitByBase(characterId, args);
            dataItem.SimpleData   = dataItem.Controller.GetSimpleData();
            dataItem.LastSaveTime = DateTime.Now;

            mDictionary.Add(characterId, dataItem);

            var co = CoroutineFactory.NewSubroutine(SaveData, coroutine, characterId, dataItem, true);

            if (co.MoveNext())
            {
                yield return(co);
            }

            controller.Value = dataItem.Controller;
        }
示例#20
0
 public void FinalActivity()
 {
     if (ChickenManager.mDbData == null)
     {
         return;
     }
     for (int i = 0; i < ChickenManager.mDbData.Count; i++)
     {
         var tbReward = GetCheckenReward(ChickenManager.mDbData[i].Rank);
         if (tbReward != null)
         {
             var tbMail = Table.GetMail(97);
             if (tbMail == null)
             {
                 return;
             }
             var reward = new Dictionary <int, int>();
             for (int j = 0; j < tbReward.RankItemID.Length && j < tbReward.RankItemCount.Length; j++)
             {
                 if (tbReward.RankItemID[j] > 0 && tbReward.RankItemCount[j] > 0)
                 {
                     reward.Add(tbReward.RankItemID[j], tbReward.RankItemCount[j]);
                 }
             }
             string content = string.Format(tbMail.Text, i);
             var    items   = new Dict_int_int_Data();
             items.Data.AddRange(reward);
             CoroutineFactory.NewCoroutine(SendMailCoroutine, ChickenManager.mDbData[i].Guid, tbMail.Title, content, items).MoveNext();
         }
     }
 }
示例#21
0
        //战斗结束
        private void BattleOver(int campId)
        {
            //关闭所有的timer
            foreach (var c in Camps)
            {
                DeleteTimer(c.Value.Timer);
            }
            foreach (var sp in StrongPoints)
            {
                DeleteTimer(sp.Timer);
            }

            var winCamp = Camps[campId];
            var result  = new FubenResult();

            result.Args.Add(winCamp.AllianceId);
            PushActionToAllPlayer(p =>
            {
                result.CompleteType = (int)(p.GetCamp() == campId
                    ? eDungeonCompleteType.Success
                    : eDungeonCompleteType.Failed);
                Complete(p.ObjId, result);
            });

            EnterAutoClose();

            CoroutineFactory.NewCoroutine(NotifyResultToTeamServer, winCamp.AllianceId).MoveNext();
        }
示例#22
0
 public void Init(GeneralActivity _this, int serverId)
 {
     _this.serverId = serverId;
     CoroutineFactory.NewCoroutine(ReadDb, _this, serverId).MoveNext();
     ActivityServerControl.Timer.CreateTrigger(DateTime.Now.Date.AddDays(1).AddSeconds(5), () => { OnDayTimer(_this); }, 60 * 60 * 24 * 1000);
     OnDayTimer(_this);
 }
示例#23
0
        protected IEnumerator GetDbBossLevelCoroutine(Coroutine co)
        {
            var dbBossLevel = SceneServer.Instance.DB.Get <DBInt>(co, DataCategory.SceneWorldBoss,
                                                                  DbKey + ServerId);

            yield return(dbBossLevel);

            if (dbBossLevel.Status != DataStatus.Ok)
            {
                Logger.Fatal("GetDbBossLevel get data from db faild!");
                var subco = CoroutineFactory.NewSubroutine(CloseDungeon, co);
                if (subco.MoveNext())
                {
                    yield return(subco);
                }
                yield break;
            }
            if (dbBossLevel.Data != null)
            {
                BossLevel = dbBossLevel.Data.Value;
            }
            else
            {
                BossLevel = 0;
            }
            if (State == eDungeonState.Start)
            {
                CreateBoss();
            }
        }
 /// <summary>
 /// Do the fade out. Can be called manually or if fadeOnTrigger is true when the trigger is hit.
 /// </summary>
 public void DoFade()
 {
     StartCoroutine(CoroutineFactory.Create(duration, time =>
     {
         targetCanvasGroup.alpha = time;
     }));
 }
示例#25
0
        public IEnumerator SaveAllCharacter(Coroutine coroutine, TimeSpan s = default(TimeSpan))
        {
            var clone = new Dictionary <ulong, DataItem>(mDictionary);

            foreach (var ct in clone)
            {
                var id   = ct.Key;
                var item = ct.Value;
                if (item.Controller != null)
                {
                    if (item.Controller.DbDirty)
                    {
                        Logger.Info("Save data for character {0}.", id);

                        var co = CoroutineFactory.NewSubroutine(SaveData, coroutine, ct.Key, item, true);
                        if (co.MoveNext())
                        {
                            yield return(co);
                        }

                        if (s != default(TimeSpan))
                        {
                            yield return(DB.Wait(coroutine, s));
                        }
                    }
                }
            }
        }
示例#26
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext();

            // 是否需要延时几秒再退出场景??
            // 离开副本
            mDeadWaitExitTrigger = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(2.0f), () => { OnDeadExit(player); });
        }
示例#27
0
        public override void OnCreate()
        {
            base.OnCreate();

            var characterId = Guid; //这里潜规则一下,家园场景的Guid就是家园拥有者的CharacterId

            CoroutineFactory.NewCoroutine(GetCity, characterId).MoveNext();
        }
示例#28
0
 public void Save()
 {
     if (ChickenManager.SaveTrigger == null)
     {
         return;
     }
     CoroutineFactory.NewCoroutine(FlushAll).MoveNext();
 }
示例#29
0
 private void PetIslandReduceTili(ulong playerObjId, int exdataId, int num)
 {
     if (-1 == exdataId || num <= 0)
     {
         return;
     }
     CoroutineFactory.NewCoroutine(PetIslandReduceTili, playerObjId, exdataId, num).MoveNext();
 }
示例#30
0
 public void FlushAll()
 {
     if (!GroupShop.Dirty)
     {
         return;
     }
     CoroutineFactory.NewCoroutine(SaveDB).MoveNext();
 }