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); } }
/// <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); }
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; }
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(); }
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); }
// 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(); }
//重新排序 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) { } }
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; }
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(); }
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(); } }
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); } }
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); }
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); } }
public override void ExitDungeon(ObjPlayer player) { CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext(); // 玩家手动退出副本? player.ExitDungeon(); }
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); } }
private IEnumerator MoveElevator(int i, int currentFloor) { return(CoroutineFactory.Create(Mathf.Abs(i - currentFloor) * duration, time => { transform.position = Vector3.Lerp(startPosition, endPosition, time); })); }
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(); }
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); } }
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; }
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(); } } }
//战斗结束 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(); }
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); }
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; })); }
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)); } } } } }
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); }); }
public override void OnCreate() { base.OnCreate(); var characterId = Guid; //这里潜规则一下,家园场景的Guid就是家园拥有者的CharacterId CoroutineFactory.NewCoroutine(GetCity, characterId).MoveNext(); }
public void Save() { if (ChickenManager.SaveTrigger == null) { return; } CoroutineFactory.NewCoroutine(FlushAll).MoveNext(); }
private void PetIslandReduceTili(ulong playerObjId, int exdataId, int num) { if (-1 == exdataId || num <= 0) { return; } CoroutineFactory.NewCoroutine(PetIslandReduceTili, playerObjId, exdataId, num).MoveNext(); }
public void FlushAll() { if (!GroupShop.Dirty) { return; } CoroutineFactory.NewCoroutine(SaveDB).MoveNext(); }