Exemplo n.º 1
0
        //开始创建副本
        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)));
        }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        //开始创建副本
        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)));
        }
Exemplo n.º 8
0
        /// <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
                });
            }
        }
Exemplo n.º 9
0
        //战斗结束
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
            }
        }
Exemplo n.º 16
0
        //开始创建副本
        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);
                }
            }
        }
Exemplo n.º 17
0
        //
        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());
        }
Exemplo n.º 18
0
        //获取主城战力排行榜数据
        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();
        }
Exemplo n.º 19
0
        //初次整理玩家数据
        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);
            }
        }
Exemplo n.º 20
0
        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;
        }
Exemplo n.º 21
0
        //获取排行榜列表
        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();
        }
Exemplo n.º 22
0
        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;
        }