//开始创建副本 public IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co, ObjPlayer Character, int scneneId, int x, int y, AsyncReturnValue <ErrorCodes> error) { //GM命令切换场景,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(Character.ServerId); var sceneInfo = new ChangeSceneInfo { SceneId = scneneId, ServerId = serverLogicId, SceneGuid = 0, Type = (int)eScnenChangeType.Position }; sceneInfo.Guids.Add(Character.ObjId); sceneInfo.Pos = new SceneParam(); sceneInfo.Pos.Param.Add(x); sceneInfo.Pos.Param.Add(y); Character.BeginChangeScene(); var msgChgScene = SceneServer.Instance.SceneAgent.SBChangeSceneByTeam(Character.ObjId, sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30))); }
public IEnumerator ApplyPointRankingData(Coroutine coroutine, ActivityCharacterProxy _this, ApplyPointRankingDataInMessage msg) { MieShiManager.GetPointRankingData(SceneExtension.GetServerLogicId(msg.Request.ServerId), msg.Request.ActivityId, _this.CharacterId, msg.Response); msg.Reply(); yield break; }
public void CheckAvgLevelBuff(SceneManager _this, ObjPlayer objPlayer) { objPlayer.DeleteBuff(319, eCleanBuffType.TimeOver); var serverId = SceneExtension.GetServerLogicId(objPlayer.ServerId); var avgLevel = _this.GetAvgLevel(serverId); if (avgLevel <= 150) { return; } var playerLevel = objPlayer.GetLevel(); if (playerLevel < _this.minLevel) { return; } if (playerLevel + _this.minDev > avgLevel) { return; } var a = (_this.maxExpMul - 2.0f) / (_this.maxDev - _this.minDev); var b = _this.maxExpMul - a * _this.maxDev; var buffLevel = ((avgLevel - playerLevel) * a + b); if (buffLevel > _this.maxExpMul) { buffLevel = _this.maxExpMul; } objPlayer.AddBuff(319, (int)buffLevel * 100, objPlayer); }
public IEnumerator ApplyMieshiHeroLogData(Coroutine coroutine, ActivityCharacterProxy _this, ApplyMieshiHeroLogDataInMessage msg) { MieShiManager.ApplyMieshiHeroLogData(SceneExtension.GetServerLogicId(msg.Request.ServerId), msg.Response); msg.Reply(); //var temp = DateTime.FromBinary((long)msg.Response.Datas[0].actiTime); yield break; }
public IEnumerator ApplyPortraitData(Coroutine coroutine, ActivityCharacterProxy _this, ApplyPortraitDataInMessage msg) { PlayerInfoMsg data = new PlayerInfoMsg(); ErrorCodes result = MieShiManager.ApplyPortraitData(SceneExtension.GetServerLogicId(msg.Request.ServerId), ref data); msg.Response = data; msg.Reply((int)result); yield break; }
public IEnumerator ApplyActivityState(Coroutine co, ActivityCharacterProxy _this, ApplyActivityStateInMessage msg) { var state = WorldBossManager.GetState(SceneExtension.GetServerLogicId(msg.Request.ServerId)); msg.Response.Data.Add((int)eActivity.WorldBoss, (int)state); msg.Reply(); yield break; }
//开始创建副本 public IEnumerator AskEnterDungeonByTeamCoroutine(Coroutine co, List <ulong> characters, int serverId, FubenRecord tbFuben, ulong sceneGuid) { PlayerLog.WriteLog((int)LogType.QueueMessage, "NotifyCreateChangeSceneCoroutine Team={0}", characters.GetDataString()); //先把进入副本应扣除的材料,扣除掉 var co1 = CoroutineFactory.NewSubroutine(DeleteDungeonMaterialCoroutine, co, characters, tbFuben); if (co1.MoveNext()) { yield return(co1); } //组队进入副本时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(serverId); var sceneInfo = new ChangeSceneInfo { SceneId = tbFuben.SceneId, ServerId = serverLogicId, SceneGuid = sceneGuid, Type = (int)eScnenChangeType.EnterDungeon }; sceneInfo.Guids.AddRange(characters); if (sceneInfo.Pos == null) { var param = new SceneParam(); sceneInfo.Pos = param; if (tbFuben.OpenTime[0] != -1) { int hour; int min; if (Utils.GetDungeonOpenTime(tbFuben, out hour, out min)) { param.Param.Add(hour); param.Param.Add(min); } else { Logger.Warn("NotifyCreateChangeSceneCoroutine can't enter scene {0}", tbFuben.SceneId); yield break; } } } var msgChgScene = TeamServer.Instance.SceneAgent.SBChangeSceneByTeam(characters[0], sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30))); }
/// <summary> /// 团购物品发出去后,给各个服务器发送通知 /// 对于最高档的物品,通知会发给所有服务器的所有人,否则,就只发给中奖者所在的服务器的所有人 /// </summary> /// <param name="co"></param> /// <param name="_this"></param> /// <returns></returns> private IEnumerator SendChatNotify(Coroutine co, GroupShopOne _this) { var strs = new List <string> { _this.mDbData.LuckyName, _this.mDbData.LuckyCount.ToString(), Utils.AddItemId(_this.mDbData.ItemData.ItemId) }; var exData = new List <int>(_this.mDbData.ItemData.Exdata); var content = Utils.WrapDictionaryId(300409, strs, exData); var chatAgent = TeamServer.Instance.ChatAgent; if (GroupShop.TopItems.Contains(_this.mDbData.GroupShopId)) { //最高档的奖励,发所有服务器的所有人 //缓存一下这条消息 var notifys = GroupShop.DbData.Notifys.Items; if (notifys.Count > 20) { notifys.RemoveAt(0); } notifys.Add(content); //发送给所有服务器的所有人 var serverIds = new List <int>(); Table.ForeachServerName(r => { var serverId = r.LogicID; if (!serverIds.Contains(serverId)) { serverIds.Add(serverId); } return(true); }); foreach (var id in serverIds) { chatAgent.BroadcastWorldMessage((uint)id, (int)eChatChannel.WishingGroup, 0, string.Empty, new ChatMessageContent { Content = content }); yield return(TeamServerControl.Instance.Wait(co, TimeSpan.FromSeconds(3))); } } else { //只发本服务器的人 var serverId = SceneExtension.GetServerLogicId(_this.mDbData.LuckyServerId); chatAgent.BroadcastWorldMessage((uint)serverId, (int)eChatChannel.WishingGroup, 0, string.Empty, new ChatMessageContent { Content = content }); } }
//战斗结束 public ErrorCodes BattleOver(int serverId, int occupantId) { serverId = SceneExtension.GetServerLogicId(serverId); AllianceWar war; if (!AllianceWarManager.WarDatas.TryGetValue(serverId, out war)) { return(ErrorCodes.ServerID); } war.BattleOver(occupantId); return(ErrorCodes.OK); }
public int ApplyStoreInfo(int serverId, List <StoneItem> info) { var logicId = SceneExtension.GetServerLogicId(serverId); var mgr = GetBlackStoreManager(logicId); if (mgr == null) { return((int)ErrorCodes.Unknow); } var result = mgr.ApplyStoreInfo(ref info); return(result); }
public int GetStoreItemCount(int serverId, int storeId, ref int itemCount) { var logicId = SceneExtension.GetServerLogicId(serverId); var mgr = GetBlackStoreManager(logicId); if (mgr == null) { return((int)ErrorCodes.Unknow); } var result = mgr.GetStoreItemCount(storeId, ref itemCount); return(result); }
public void PlayerLeave(ulong characterId) { var alliance = ServerAllianceManager.GetAllianceByCharacterId(characterId); if (alliance == null) { Logger.Error("In PlayerEnterSuccess(). alliance == null! characterId = {0}", characterId); return; } var serverId = alliance.ServerId; serverId = SceneExtension.GetServerLogicId(serverId); var war = AllianceWarManager.WarDatas[serverId]; war.PlayerLeave(characterId, alliance.AllianceId); }
public int ConsumeStoreItem(int serverId, int storeId, int consumeCount) { var logicId = SceneExtension.GetServerLogicId(serverId); var mgr = GetBlackStoreManager(logicId); if (mgr == null) { return((int)ErrorCodes.Unknow); } var result = mgr.ConsumeStoreItem(storeId, consumeCount); if (result == (int)ErrorCodes.OK) { CoroutineFactory.NewCoroutine(mgr.FlushAll).MoveNext(); } return(result); }
public ErrorCodes AllianceWarBid(ulong guid, int value) { var alliance = ServerAllianceManager.GetAllianceByCharacterId(guid); if (alliance == null) { return(ErrorCodes.Error_CharacterNoAlliance); } var allianceId = alliance.AllianceId; var serverId = alliance.ServerId; var logicServerId = SceneExtension.GetServerLogicId(serverId); var allianceManager = ServerAllianceManager.GetAllianceByServer(logicServerId); if (allianceManager == null) { return(ErrorCodes.Error_AllianceState); } var dbAlliance = allianceManager.GetServerData(serverId); if (dbAlliance == null) { return(ErrorCodes.Error_AllianceState); } var dbAllianceNew = allianceManager.GetServerData(logicServerId); if (dbAllianceNew == null) { return(ErrorCodes.Error_AllianceState); } if (allianceId == dbAllianceNew.Occupant) { return(ErrorCodes.Error_OccupantNoNeedBid); } var bidDatas = dbAlliance.BidDatas; int price; bidDatas.TryGetValue(allianceId, out price); price += value; bidDatas[allianceId] = price; return(ErrorCodes.OK); }
private void TryModifyServerScenes(int serverId, int sceneId) { serverId = SceneExtension.GetServerLogicId(serverId); Dictionary <int, int> scenes; if (!SpeMonsterManager.ServerValidScenes.TryGetValue(serverId, out scenes)) { scenes = new Dictionary <int, int>(); SpeMonsterManager.ServerValidScenes.Add(serverId, scenes); } if (scenes.ContainsKey(sceneId)) { return; } scenes.Add(sceneId, 0); if (SpeMonsterManager.SaveTrigger == null) { SpeMonsterManager.SaveTrigger = ActivityServerControl.Timer.CreateTrigger(DateTime.Now.AddMinutes(1), Save); } }
//开始创建副本 private static IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co, FightQueueScene _this, List <ulong> characters, int serverId) { //排队创建场景时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(serverId); PlayerLog.WriteLog((int)LogType.QueueMessage, "NotifyCreateChangeSceneCoroutine Team={0}", characters.GetDataString()); var sceneInfo = new ChangeSceneInfo { SceneId = -1, ServerId = serverLogicId, SceneGuid = _this.mSceneGuid, Type = (int)eScnenChangeType.EnterDungeon }; sceneInfo.Guids.AddRange(characters); var msgChgScene = TeamServer.Instance.SceneAgent.SBChangeSceneByTeam(characters[0], sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co)); if (msgChgScene.State != MessageState.Reply) { yield break; } if (msgChgScene.Response == 0) { foreach (var characterGuid in characters) { PlayerLog.WriteLog((int)LogType.BattleLog, "SSCharacterEnterBattle Faild c={0},s={1}", characterGuid, _this.mSceneGuid); QueueTeamManager.LeaveScene(characterGuid); QueueSceneManager.LeaveScene(characterGuid, _this.mSceneGuid); } } }
// public void BidOver(AllianceWar _this) { var am = ServerAllianceManager.GetAllianceByServer(_this.ServerId); if (am == null) { Logger.Error("StartActivity not find GetAllianceByServer!server={0},", _this.ServerId); return; } DBServerAllianceData data; if (!am.mDBData.TryGetValue(_this.ServerId, out data)) { Logger.Error("In BidOver() can't find data!"); return; } am.BidOver(); var msgData = new AllianceWarChallengerData(); foreach (var id in data.Challengers) { var allliance = ServerAllianceManager.GetAllianceById(id); if (allliance == null) { Logger.Error("In BidOver(). alliance == null!! id = {0}", id); continue; } msgData.ChallengerId.Add(id); msgData.ChallengerName.Add(allliance.Name); } _this.SetStatus((int)eAllianceWarState.WaitEnter); var sId = SceneExtension.GetServerLogicId(_this.ServerId); TeamServer.Instance.TeamAgent.NotifyAllianceWarChallengerData((uint)sId, msgData); PlayerLog.WriteLog((ulong)LogType.AllianceWar, "BidOver(), ServerId = {0}, Challengers = {1}", _this.ServerId, data.Challengers.GetDataString()); }
//获取主城战力排行榜数据 public IEnumerator GetFightRankList(Coroutine coroutine, RankCharacterProxy charProxy, GetFightRankListInMessage msg) { var proxy = charProxy; var serverId = SceneExtension.GetServerLogicId(msg.Request.ServerId); var type = msg.Request.RankType; PlayerLog.WriteLog(proxy.CharacterId, "----------Rank----------GetFightRankList----------{0},{1}", serverId, type); var timeNow = System.DateTime.Now; var record = DataTable.Table.GetServerName(serverId); if (null != record) { var startTime = System.DateTime.Parse(record.OpenTime); System.TimeSpan span = (timeNow - startTime); if (startTime.Date.Equals(timeNow.Date)) { if (timeNow.Day == startTime.Day) { msg.Reply(); yield break; } } } var needServerName = false; List <DBRank_One> tempList = null; tempList = ServerRankManager.GetFightRankList(serverId, type); if (tempList == null) { msg.Reply(); yield break; } msg.Response.RankType = type; List <int> professCount = new List <int>(); foreach (var one in tempList) { if (professCount.Count >= 3) { break; } if (one == null) { Logger.Error("GetRankList serverId={0},type={1}", serverId, type); continue; } var rankMessage = new RankOne { Id = one.Guid, Name = one.Name //ServerRankManager.GetName(serverId, one.Guid), }; if (type == (int)RankType.Level) { rankMessage.Value = (int)(one.Value / Constants.RankLevelFactor); } else if (type == (int)RankType.CityLevel) { rankMessage.Value = (int)(one.Value / Constants.RankLevelFactor); } else if (type == (int)RankType.Arena) { rankMessage.Value = one.FightPoint; } else { rankMessage.Value = (int)one.Value; } if (needServerName && one.ServerId > 0) { var tbServerName = Table.GetServerName(one.ServerId); if (tbServerName != null) { rankMessage.ServerName = tbServerName.Name; } } var dbSceneSimple = RankServer.Instance.SceneAgent.GetSceneSimpleData(rankMessage.Id, 0); yield return(dbSceneSimple.SendAndWaitUntilDone(coroutine)); if (dbSceneSimple.State == MessageState.Reply) { if (dbSceneSimple.ErrorCode == (int)ErrorCodes.OK) { if (rankMessage.Name == "") { rankMessage.Name = dbSceneSimple.Response.Name; one.Name = dbSceneSimple.Response.Name; } int typeId = dbSceneSimple.Response.TypeId; if (!professCount.Contains(typeId)) { professCount.Add(typeId); msg.Response.RankData.Add(rankMessage); } } } else { if (rankMessage.Name == "") { //未找到 rankMessage.Name = "^301036"; one.Name = "^301036"; } } } msg.Reply(); }
//初次整理玩家数据 public override CharacterInfo OnSocketListenerMessageReceivePrepareDataEx(ServerClient client, ServiceDesc desc, bool isNeedSendReply = true) { using (var ms = new MemoryStream(desc.Data, false)) { var msg = Serializer.Deserialize <PrepareDataMessage>(ms); var characterId = msg.CharacterId; var characterInfo = GetCharacter(characterId); if (characterInfo == null) { //Commborker characterInfo = (CharacterSceneInfo)base.OnSocketListenerMessageReceivePrepareDataEx(client, desc, false); //查找目标场景 //PrepareData时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(msg.ServerId); var sceneInfo = mSceneManager.SelectOldScene(msg.SceneGuid, serverLogicId, msg.SceneId, msg.CharacterId); //场景没找到,需要新建场景 if (sceneInfo == null) { //数据层建造场景 sceneInfo = mSceneManager.CreateNewSceneInfo(serverLogicId, msg.SceneId, msg.SceneGuid); sceneInfo.PushCharacter(desc.CharacterId); //通知远端服务器建造场景 mSceneManager.CreateNewScene(sceneInfo); } characterInfo.Server = sceneInfo.Server; //制造函数回调 var act = new Action(() => { //NotifyLoginEnterScene(client, characterInfo, sceneInfo.SceneGuid, desc); //Logger.Fatal("PrepareDataForEnterGame sceneGuid = {0}", sceneInfo.SceneGuid); //var content = new __RPC_Scene_PrepareDataForEnterGame_RET_uint64__(); //content.ReturnValue = sceneInfo.SceneGuid; //desc.Data = ProtocolExtension.Serialize(content); client.SendMessage(desc); }); //把玩家放入场景中 PutCharacterIntoScene(sceneInfo, characterInfo); //判断状态决定回调 何时执行 if (sceneInfo.Status == SceneStatus.ReadyToEnter) { act(); } else { sceneInfo.WaitingActions.Add(act); } return(characterInfo); } Logger.Error("OnSocketListenerMessageReceivePrepareDataEx {0}", characterId); //var sceneInfo = mSceneManager.SelectOldScene(msg.SceneGuid, msg.ServerId, msg.SceneId, msg.CharacterId) ; //characterInfo.ClientId = msg.ClientId; //Logger.Info("Enter Game {0} - PrepareData - 7 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); //// 当前需要的场景不存在,需要制造新场景,并将角色数据分配到其中 //if (sceneInfo == null) //{ // Logger.Info("Enter Game {0} - PrepareData - 8 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // // 只创建非副本场景 // var scene = Table.GetScene(msg.SceneId); // if (SceneManagerBroker.IsNormalScene(scene)) // { // Logger.Info("Enter Game {0} - PrepareData - 9 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // sceneInfo = mSceneManager.CreateNewSceneInfo(msg.ServerId, msg.SceneId, msg.SceneGuid); // sceneInfo.PushCharacter(msg.CharacterId); // // create new scene // mSceneManager.CreateNewScene(sceneInfo); // var oldSceneInfo = characterInfo.SceneInfo; // oldSceneInfo.CharacterIds.Remove(msg.CharacterId); // characterInfo.SceneInfo = sceneInfo; // //Logger.Error("prepare data 6: {0}, {1}, {2}", info.CharacterId, oldSceneInfo.Server.RemoteEndPoint, sceneInfo.Server.RemoteEndPoint); // sceneInfo.WaitingActions.Add(() => // { // Logger.Info("Enter Game {0} - PrepareData - 10 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // if (!CheckSameMachine(sceneInfo, characterInfo)) // { // Logger.Info("Enter Game {0} - PrepareData - 11 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // UnloadData(characterInfo.CharacterId, oldSceneInfo, serviceDesc2 => // { // Logger.Info("Enter Game {0} - PrepareData - 12 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // client.SendMessage(desc); // }); // } // else // { // Logger.Info("Enter Game {0} - PrepareData - 13 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // client.SendMessage(desc); // } // }); // } // else // { // Logger.Info("Enter Game {0} - PrepareData - 14 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // //上线时仍在副本,但是副本已经不存在了 // // create new scene // sceneInfo = mSceneManager.CreateNewSceneInfo(msg.ServerId, 3, 0); // sceneInfo.PushCharacter(msg.CharacterId); // mSceneManager.CreateNewScene(sceneInfo); // var oldSceneInfo = characterInfo.SceneInfo; // oldSceneInfo.CharacterIds.Remove(msg.CharacterId); // characterInfo.SceneInfo = sceneInfo; // //Logger.Error("prepare data 5: {0}, {1}, {2}", info.CharacterId, oldSceneInfo.Server.RemoteEndPoint, sceneInfo.Server.RemoteEndPoint); // sceneInfo.WaitingActions.Add(() => // { // Logger.Info("Enter Game {0} - PrepareData - 15 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // if (!CheckSameMachine(oldSceneInfo, characterInfo)) // { // Logger.Info("Enter Game {0} - PrepareData - 16 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // UnloadData(characterInfo.CharacterId, oldSceneInfo, serviceDesc2 => // { // client.SendMessage(desc); // }); // } // else // { // Logger.Info("Enter Game {0} - PrepareData - 17 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // client.SendMessage(desc); // } // }); // } //} //// 之前玩家数据和分配的服务器不在同一台物理机上,通知之前的机器卸载数据 //else if (!CheckSameMachine(sceneInfo, characterInfo)) //{ // var oldSceneInfo = characterInfo.SceneInfo; // oldSceneInfo.CharacterIds.Remove(msg.CharacterId); // characterInfo.SceneInfo = sceneInfo; // //Logger.Error("prepare data 4: {0}, {1}, {2}", info.CharacterId, oldSceneInfo.Server.RemoteEndPoint, sceneInfo.Server.RemoteEndPoint); // var act = new Action(() => // { // Logger.Info("Enter Game {0} - PrepareData - 18 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // UnloadData(characterInfo.CharacterId, oldSceneInfo, serviceDesc2 => // { // Logger.Info("Enter Game {0} - PrepareData - 19 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // client.SendMessage(desc); // }); // }); // if (sceneInfo.Status == SceneStatus.ReadyToEnter) // { // act(); // } // else // { // sceneInfo.WaitingActions.Add(act); // } //} //else //{ // var oldSceneInfo = characterInfo.SceneInfo; // if (oldSceneInfo != sceneInfo) // { // oldSceneInfo.CharacterIds.Remove(msg.CharacterId); // characterInfo.SceneInfo = sceneInfo; // } // Logger.Info("Enter Game {0} - PrepareData - 20 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); // //Logger.Error("prepare data 3: {0}, {1}, {2}", info.CharacterId, oldSceneInfo.Server.RemoteEndPoint, sceneInfo.Server.RemoteEndPoint); // client.SendMessage(desc); // //NotifyEnterScene(sceneInfo.Server, info.CharacterId, sceneInfo.SceneGuid, (int)eScnenChangePostion.Db, new SceneParam()); //} return(null); } }
public IEnumerator PlayerEnter(Coroutine co, AllianceWar _this, ulong characterId, int allianceId, AsyncReturnValue <ErrorCodes> err) { err.Value = ErrorCodes.OK; if (!_this.AllianceIds.Contains(allianceId)) { Logger.Error("In CheckPlayerEnter().!AllianceIds.Contains(allianceId), characterId = {0}", characterId); err.Value = ErrorCodes.Error_AllianceWarQualification; yield break; } if (_this.GetStatus() < (int)eAllianceWarState.WaitStart) { err.Value = ErrorCodes.Error_FubenNotInOpenTime; yield break; } //锁,避免多进入,且在等待进入的人数不足50时,不锁 var count = _this.AlliancePlayers[allianceId].Count; while (count + _this.EnterPlayerCount[allianceId] >= Constants.AllianceMaxPlayer) { if (count >= Constants.AllianceMaxPlayer) { err.Value = ErrorCodes.Error_AllianceWarFull; yield break; } yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50))); count = _this.AlliancePlayers[allianceId].Count; } ++_this.EnterPlayerCount[allianceId]; var sceneId = -1; var sceneParam = new SceneParam(); if (_this.BattleFieldGuid == 0) { _this.BattleFieldGuid = ulong.MaxValue; sceneId = Constants.AllianceWarSceneId; sceneParam.Param.Add(_this.StartHour); sceneParam.Param.Add(_this.StartMin); sceneParam.Param.AddRange(_this.AllianceIds); while (sceneParam.Param.Count < 5) { sceneParam.Param.Add(-1); } } else if (_this.BattleFieldGuid == ulong.MaxValue) { do { yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50))); } while (_this.BattleFieldGuid == ulong.MaxValue); } //帮战根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(_this.ServerId); var msg = TeamServer.Instance.SceneAgent.SBChangeScene(characterId, characterId, serverLogicId, sceneId, _this.BattleFieldGuid, (int)eScnenChangeType.EnterDungeon, sceneParam); yield return(msg.SendAndWaitUntilDone(co)); if (msg.State != MessageState.Reply) { Logger.Error("In PlayerEnterCoroutine().SBChangeScene not replied!"); err.Value = ErrorCodes.Unknow; yield break; } if (msg.ErrorCode != (int)ErrorCodes.OK) { Logger.Error("In PlayerEnterCoroutine().SBChangeScene error = {0}", msg.ErrorCode); err.Value = (ErrorCodes)msg.ErrorCode; yield break; } if (_this.BattleFieldGuid == ulong.MaxValue) { _this.BattleFieldGuid = msg.Response; } PlayerLog.WriteLog((ulong)LogType.AllianceWar, "In PlayerEnter() player entered, characterId = {0}, allianceId = {1}", characterId, allianceId); err.Value = ErrorCodes.OK; }
//获取排行榜列表 public IEnumerator GetRankList(Coroutine coroutine, RankCharacterProxy charProxy, GetRankListInMessage msg) { var proxy = charProxy; var serverId = SceneExtension.GetServerLogicId(msg.Request.ServerId); var type = msg.Request.RankType; PlayerLog.WriteLog(proxy.CharacterId, "----------Rank----------GetRankList----------{0},{1}", serverId, type); var needServerName = false; List <DBRank_One> tempList = null; if (type == (int)RankType.DailyGift || type == (int)RankType.WeeklyGift || type == (int)RankType.TotalGift) { needServerName = true; tempList = ServerRankManager.GetTotalRankData(type, 1, 100); } else { tempList = ServerRankManager.GetRankDataByServerId(serverId, type, 1, 100); } if (tempList == null) { msg.Reply(); yield break; } msg.Response.RankType = type; foreach (var one in tempList) { if (one == null) { Logger.Error("GetRankList serverId={0},type={1}", serverId, type); continue; } var rankMessage = new RankOne { Id = one.Guid, Name = one.Name //ServerRankManager.GetName(serverId, one.Guid), }; if (type == (int)RankType.Level) { rankMessage.Value = (int)(one.Value / Constants.RankLevelFactor); } else if (type == (int)RankType.CityLevel) { rankMessage.Value = (int)(one.Value / Constants.RankLevelFactor); } else if (type == (int)RankType.Arena) { rankMessage.Value = one.FightPoint; } else { rankMessage.Value = (int)one.Value; } if (needServerName && one.ServerId > 0) { var tbServerName = Table.GetServerName(one.ServerId); if (tbServerName != null) { rankMessage.ServerName = tbServerName.Name; } } if (rankMessage.Name == "") { var dbSceneSimple = RankServer.Instance.SceneAgent.GetSceneSimpleData(rankMessage.Id, 0); yield return(dbSceneSimple.SendAndWaitUntilDone(coroutine)); if (dbSceneSimple.State == MessageState.Reply) { rankMessage.Name = dbSceneSimple.Response.Name; one.Name = dbSceneSimple.Response.Name; } else { //未找到 rankMessage.Name = "^301036"; one.Name = "^301036"; } } msg.Response.RankData.Add(rankMessage); } msg.Reply(); }
public void Init() { DictActivity.Clear(); bool dirty = false; int i = 0; var dict = OperationActivityManager.Instance.DictActivity; foreach (var kv in dict) { var act = kv.Value; if (!act.IsActive) { continue; } if (act.ServerList.Count > 0 && !act.ServerList.Contains(SceneExtension.GetServerLogicId(mCharacter.serverId))) { continue; } if (!act.IsTitle && act.ItemList.Count <= 0) { continue; } DateTime startTime = DateTime.MinValue; DateTime endTime = DateTime.MinValue; if (eRechargeActivityOpenRule.NewServerAuto == act.OpenRule) { DateTime time = DateTime.Now; var table = Table.GetServerName(SceneExtension.GetServerLogicId(mCharacter.serverId)); if (null == table) { Logger.Fatal("PlayerOperationActivityManager.Init mCharacter.serverId={0}", SceneExtension.GetServerLogicId(mCharacter.serverId)); } else { time = DateTime.Parse(table.OpenTime).Date; } startTime = time.AddHours(act.DelayHours); endTime = time.AddHours(act.LastHours); } else { startTime = act.StartTime; endTime = act.EndTime; } if (!(DateTime.Now >= startTime && DateTime.Now < endTime)) { continue; } DBOperationActivityData dbAct = null; for (int j = i; j < mDbData.Data.Count; j++) { var dbData = mDbData.Data[j]; if (null != dbData && dbData.Id == act.Id) { dbAct = dbData; if (j != i) { var temp = mDbData.Data[j]; mDbData.Data[j] = mDbData.Data[i]; mDbData.Data[i] = temp; } break; } } if (null == dbAct) { dbAct = new DBOperationActivityData(); mDbData.Data.Insert(i, dbAct); dirty = true; } PlayerOperationActivity playerAct = null; var type = (OperationActivityType)act.Type; if (type == OperationActivityType.Guide) { playerAct = new PlayerOperationActivityGuide(); } else if (type == OperationActivityType.Recharge) { playerAct = new PlayerOperationActivityRecharge(); } else if (type == OperationActivityType.SpecialEvent) { playerAct = new PlayerOperationActivitySpecialEvent(); } else if (type == OperationActivityType.Investment) { playerAct = new PlayerOperationActivityInvestment(); } else if (type == OperationActivityType.Rank) { var actRank = new PlayerOperationActivityRank(); var temp = act as OperationActivityRank; actRank.RankType = temp.RankType; playerAct = actRank; } else if (type == OperationActivityType.Lottery) { playerAct = new PlayerOperationActivityLottery(); } else { //Error } playerAct.Init(mCharacter, act, dbAct, startTime, endTime); DictActivity.Add(playerAct.Id, playerAct); AddChild(playerAct); i++; } var remCount = mDbData.Data.Count - i; if (remCount > 0) { mDbData.Data.RemoveRange(i, remCount); dirty = true; } if (dirty) { MarkDirty(); } NeedReset = false; }