Beispiel #1
0
        //数据变化
        public void PushDataChange(FriendManager _this, ulong uId, CharacterSimpleData info)
        {
            var isFind = false;
            var f      = GetFriend(_this, uId);

            if (f != null)
            {
                f.PushInfoData(info);
                isFind = true;
            }
            f = GetEnemy(_this, uId);
            if (f != null)
            {
                f.PushInfoData(info);
                isFind = true;
            }
            f = GetShield(_this, uId);
            if (f != null)
            {
                f.PushInfoData(info);
                isFind = true;
            }
            if (isFind)
            {
                _this.Changes.Characters.Add(info);
                if (_this.ChangesTrigger == null)
                {
                    _this.ChangesTrigger = LogicServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(3),
                                                                                  () => { SendChanges(_this); });
                }
            }
        }
Beispiel #2
0
        //通知某个队员,进行了某个排队
        private void SendTeamMemberMatch(CharacterSimpleData data, QueueCharacter character)
        {
            TeamCharacterProxy toCharacterProxy;

            if (TeamServer.Instance.ServerControl.Proxys.TryGetValue(data.Id, out toCharacterProxy))
            {
                var info = new QueueInfo();
                info.QueueId     = character.mLogic.mQueueId;
                info.NeedSeconds = character.mLogic.GetAverageTime();
                info.StartTime   = character.StartTime.ToBinary();

                var ChattoCharacterProxy = toCharacterProxy as TeamProxy;
                ChattoCharacterProxy.NotifyMatchingData(info);
            }
        }
Beispiel #3
0
        public void PushSimpleData(FriendData _this, SceneSimpleData result, bool isOnline)
        {
            var temp = new CharacterSimpleData
            {
                Id         = result.Id,
                TypeId     = result.TypeId,
                Name       = result.Name,
                SceneId    = result.SceneId,
                FightPoint = result.FightPoint,
                Level      = result.Level,
                Ladder     = result.Ladder,
                ServerId   = result.ServerId
            };

            if (isOnline)
            {
                temp.Online = 1;
            }
            else
            {
                temp.Online = 0;
            }
            _this.InfoData = temp;
        }
Beispiel #4
0
        //把一个新的characterId 加入到 character 里
        private IEnumerator PushOneCharacterCoroutine(Coroutine co, ulong characterId, QueueCharacter character)
        {
            if (character.result != null)
            {
                yield break;
            }
            PlayerLog.WriteLog((int)LogType.QueueMessage, "PushOnCharacter character={0}", characterId);

            //在线检查
            if (!TeamServer.Instance.ServerControl.Proxys.ContainsKey(characterId))
            {
                Logger.Error("PushOneCharacterCoroutine(), character {0} not online", characterId);
                yield break;
            }
            //检查进入条件
            if (QueueManager.Characters.ContainsKey(characterId))
            {
                Logger.Error("PushOneCharacterCoroutine(), character {0} already in queue", characterId);
                yield break;
            }
            //确定玩家的进入条件满足
            var tbQueue     = character.mLogic.tbQueue;
            var logicResult = TeamServer.Instance.LogicAgent.CheckCharacterInFuben(characterId, tbQueue.Param);

            yield return(logicResult.SendAndWaitUntilDone(co));

            if (logicResult.State != MessageState.Reply)
            {
                Logger.Error(
                    "PushOneCharacterCoroutine(), CheckCharacterInFuben not replied! character = {0},fubenid = {1}",
                    characterId, tbQueue.Id);
                yield break;
            }
            if (logicResult.ErrorCode != (int)ErrorCodes.OK)
            {
                Logger.Debug("PushOneCharacterCoroutine(), character {0} already in queue", characterId);
                yield break;
            }
            //从scene获取simpledata
            var dbSceneSimple = TeamServer.Instance.SceneAgent.GetSceneSimpleData(characterId, 0);

            yield return(dbSceneSimple.SendAndWaitUntilDone(co));

            if (dbSceneSimple.State != MessageState.Reply)
            {
                Logger.Error("PushOnCharacter Error! GetSceneSimpleData not replied! Id = {0}", characterId);
                yield break;
            }
            if (dbSceneSimple.ErrorCode != (int)ErrorCodes.OK)
            {
                Logger.Error("PushOnCharacter Error! GetSceneSimpleData return with err = {0}", dbSceneSimple.ErrorCode);
                yield break;
            }
            var data = new CharacterSimpleData
            {
                Id         = dbSceneSimple.Response.Id,
                TypeId     = dbSceneSimple.Response.TypeId,
                Name       = dbSceneSimple.Response.Name,
                SceneId    = dbSceneSimple.Response.SceneId,
                FightPoint = dbSceneSimple.Response.FightPoint,
                Level      = dbSceneSimple.Response.Level,
                Ladder     = dbSceneSimple.Response.Ladder,
                ServerId   = dbSceneSimple.Response.ServerId
            };

            if (character.result != null)
            {
                yield break;
            }
            character.mDatas.Add(data);
            SendTeamMemberMatch(data, character);
#if DEBUG
            PlayerLog.WriteLog((int)LogType.QueueMessage, "PushOneCharacterCoroutine().Matching Add c={0}, ids={1}",
                               character.Guid, character.mDatas.Select(d => d.Id).GetDataString());
#endif
            QueueManager.Characters.Add(characterId, character);
        }
Beispiel #5
0
    public void SyncAddFriend(int type, CharacterSimpleData character)
    {
        var e = new FriendAddSyncEvent(type, character);

        EventDispatcher.Instance.DispatchEvent(e);
    }
Beispiel #6
0
 public void PushInfoData(CharacterSimpleData info)
 {
     mImpl.PushInfoData(this, info);
 }
Beispiel #7
0
 //数据变化
 public void PushDataChange(ulong uId, CharacterSimpleData info)
 {
     mImpl.PushDataChange(this, uId, info);
 }
Beispiel #8
0
 public void PushInfoData(FriendData _this, CharacterSimpleData info)
 {
     _this.InfoData = info;
 }
Beispiel #9
0
        //重新组织新队长
        private void ResetNewLeader(QueueResultBase _this)
        {
            foreach (var list in _this.mTeamList)
            {
                //筛选队长
                CharacterSimpleData LeaderCharacter = null;
                var maxCount   = 0;
                var FightPoint = 0;
                foreach (var qCharacters in list)
                {
                    foreach (var matchingCharacter in qCharacters.mDatas)
                    {
                        var character = TeamManager.GetCharacterTeam(matchingCharacter.Id);
                        if (character != null)
                        {
                            if (character.TeamState == TeamState.Leader)
                            {
                                if (character.team.GetTeamCount() > maxCount)
                                {
                                    maxCount        = character.team.GetTeamCount();
                                    LeaderCharacter = matchingCharacter;
                                    FightPoint      = matchingCharacter.FightPoint;
                                }
                                else if (character.team.GetTeamCount() == maxCount)
                                {
                                    if (matchingCharacter.FightPoint > FightPoint)
                                    {
                                        FightPoint      = matchingCharacter.FightPoint;
                                        LeaderCharacter = matchingCharacter;
                                    }
                                }
                                //character.team.Disband();
                            }
                        }
                        else
                        {
                            if (matchingCharacter.FightPoint > FightPoint && LeaderCharacter == null)
                            {
                                FightPoint      = matchingCharacter.FightPoint;
                                LeaderCharacter = matchingCharacter;
                            }
                        }
                    }
                }
                if (LeaderCharacter == null)
                {
                    return;
                }
                //组队
                var tempTeam = QueueTeamManager.CreateTeam(_this.mQueue.mQueueId);
                _this.newTeams.Add(tempTeam);
                tempTeam.PushCharacter(LeaderCharacter.Id);

                foreach (var qCharacters in list)
                {
                    qCharacters.team = tempTeam;
                    foreach (var matchingCharacter in qCharacters.mDatas)
                    {
                        if (LeaderCharacter != matchingCharacter)
                        {
                            tempTeam.PushCharacter(matchingCharacter.Id);
                        }
                    }
                }
            }
        }