コード例 #1
0
        public void PushLog()
        {
            var team1Str = "";

            foreach (var c in team1)
            {
                team1Str += string.Format("[{0}={1}]", c.Key, c.Value);
            }

            var team2Str = "";

            foreach (var c in team2)
            {
                team2Str += string.Format("[{0}={1}]", c.Key, c.Value);
            }

            var wait = string.Empty;

            foreach (var character in FollowCharacters)
            {
                wait += character.GetLog();
            }
            PlayerLog.WriteLog((int)LogType.QueueLog, "FightQueueScene QueueId={1} guid={0} t1={2} t2={3} wait={4}",
                               mSceneGuid, QueueId, team1Str, team2Str, wait);
        }
コード例 #2
0
        //log
        public void PushLog()
        {
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager -------------------------");
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.fullScenes count={0}",
                               QueueSceneManager.fullScenes.Count);
            foreach (var fullScene in QueueSceneManager.fullScenes)
            {
                fullScene.Value.PushLog();
            }


            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.noFullScenes count={0}",
                               QueueSceneManager.noFullScenes.Count);
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.characters count={0}",
                               QueueSceneManager.characters.Count);
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.newCreateScenes count={0}",
                               QueueSceneManager.newCreateScenes.Count);
            var count = 0;

            foreach (var i in QueueSceneManager.QueueFight)
            {
                count += i.Value.Count;
            }
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager.QueueFight count={0}", count);
            PlayerLog.WriteLog((int)LogType.QueueLog, "QueueSceneManager -------------------------");
        }
コード例 #3
0
        public void RemoveFollowCharacter(FightQueueScene _this, QueueCharacter c)
        {
#if DEBUG
            PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter(). c={0}, ids={1}", c.Guid,
                               c.mDatas.Select(d => d.Id).GetDataString());
#endif
            _this.FollowCharacters.Remove(c);
            foreach (var data in c.mDatas)
            {
                var id = data.Id;
                QueueSceneManager.characters.Remove(id);
                int state;
                if (_this.team1.TryGetValue(id, out state))
                {
                    _this.team1.Remove(id);
#if DEBUG
                    PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter() team1.Remove id={0}", id);
#endif
                }
                else if (_this.team2.TryGetValue(id, out state))
                {
                    _this.team2.Remove(id);
#if DEBUG
                    PlayerLog.WriteLog((int)LogType.QueueMessage, "RemoveFollowCharacter() team2.Remove id={0}", id);
#endif
                }
                else
                {
                    Logger.Warn("FightMatchingScene LeaveScene cId={0},sceneGuid={1}", id, _this.mSceneGuid);
                }
            }
        }
コード例 #4
0
ファイル: QueueManager.cs プロジェクト: tuita520/mmorpgserver
        //清空某个排队ID下的所有正在排队的玩家
        public static void ClearQueue(int id)
        {
            if (id == -1)
            {
#if DEBUG
                PlayerLog.WriteLog((int)LogType.QueueMessage, "In ClearQueue(). Characters.Clear()");
#endif
                Matchings.Clear();
                Characters.Clear();
                return;
            }
            QueueLogic matching;
            if (!Matchings.TryGetValue(id, out matching))
            {
                return;
            }
            foreach (var character in matching.mCharacters)
            {
                foreach (var data in character.mDatas)
                {
                    Pop(data.Id, eLeaveMatchingType.Cannel);
                }
            }
            matching.mCharacters.Clear();
        }
コード例 #5
0
ファイル: SceneManager.cs プロジェクト: tuita520/mmorpgserver
        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);
        }
コード例 #6
0
 void Update()
 {
     if (!playerLog)
     {
         playerLog = GetComponent <PlayerLog>();
     }
     if (!dead && Input.GetKeyDown(KeyCode.R))
     {
         waitingForInput = true;
         playersTurn     = true;
         playerLog.NewMessage("Restart the game?  (y/n)");
         StartCoroutine(WaitForKeyPress());
     }
     if (!waitingForInput)
     {
         if (playersTurn || enemiesMoving)
         {
             return;
         }
         else
         {
             StartCoroutine(MoveEnemies());
         }
     }
 }
コード例 #7
0
        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            if (mReliveTrigger.ContainsKey(player.ObjId))
            {
                var trigger = mReliveTrigger[player.ObjId];
                mReliveTrigger.Remove(player.ObjId);
                SceneServerControl.Timer.DeleteTrigger(trigger);
                if (DateTime.Now > trigger.Time)
                {
                    FixPostion(player);
                    player.Relive();


                    PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over");
                }
                else
                {
                    var reliveObj = SceneServerControl.Timer.CreateTrigger(trigger.Time, () =>
                    {
                        if (mLeaveTrigger.ContainsKey(player.ObjId))
                        {
                            return;
                        }
                        FixPostion(player);
                        player.Relive();
                        mReliveTrigger.Remove(player.ObjId);

                        PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over");
                    });
                    mReliveTrigger.Add(player.ObjId, reliveObj);
                    //通知死者,复活倒计时
                    player.Proxy.NotifyCountdown((ulong)trigger.Time.ToBinary(), (int)eCountdownType.BattleRelive);
                }
            }
        }
コード例 #8
0
 //
 // when a player joins a game, we create a Player object.  we start with all the Messages for the whole game so that the player can catch up.
 //
 public Player(ConcurrentQueue <CatanMessage> gameLog)
 {
     foreach (var message in gameLog)
     {
         PlayerLog.Enqueue(message);
     }
 }
コード例 #9
0
ファイル: Ranking.cs プロジェクト: tuita520/mmorpgserver
        //重新排序
        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)
            {
            }
        }
コード例 #10
0
ファイル: Ranking.cs プロジェクト: tuita520/mmorpgserver
        public void ShowRank(Ranking _this, ulong rankManager = 20000)
        {
            var rCount  = GetRankCount(_this);
            var rlCount = GetRankListCount(_this);
            var logid   = rankManager + (ulong)_this.RankId * 100 + (ulong)_this.RankType;

            if (rlCount > _this.MaxRankMemberCount)
            {
                PlayerLog.WriteLog(logid, "---------------r={0},t={1},c={2},lc={3}--------------", _this.RankId,
                                   _this.RankType, rCount, rlCount);
            }
            else
            {
                PlayerLog.WriteLog(logid, "---------------r={0},t={1},c={2},lc={3}--------------", _this.RankId,
                                   _this.RankType, rCount, rlCount);
            }

            for (var i = 0; i < rlCount; i++)
            {
                var one = GetRankOneByIndex(_this, i);
                if (one == null)
                {
                    continue;
                }
                PlayerLog.WriteLog(logid, "i={0},n={1},r={2},v={3}", one.Guid, one.Name, one.Rank, one.Value);
            }
        }
コード例 #11
0
ファイル: Ranking.cs プロジェクト: tuita520/mmorpgserver
        public IEnumerator Get(Coroutine coroutine, Ranking _this, int serverId, string DBkeyName)
        {
            PlayerLog.WriteLog((int)LogType.GetRanking, "--------------------rankGet--------------------{0}",
                               GetDbName(_this, serverId, _this.DBKeyName));
            var tasks = RankServer.Instance.DB.Get <DBRank_List>(coroutine, DataCategory.Rank,
                                                                 GetDbName(_this, serverId, _this.DBKeyName));

            yield return(tasks);

            if (tasks.Data == null)
            {
                _this.mDBData[serverId] = new DBRank_List();
                yield break;
            }
            _this.mDBData[serverId] = tasks.Data;
            foreach (var dbRankOne in tasks.Data.mData)
            {
                _this.DBRankCache[dbRankOne.Guid] = dbRankOne;
                //if (StaticData.IsRobot(dbRankOne.Guid))
                //{
                //    dbRankOne.Name =Table.GetJJCRoot((int)dbRankOne.Guid).Name;
                //}
                //rank_old_value[dbRankOne.Id] = dbRankOne.Value; //之后排序的话这里就不用加了
                //RankUUIDIndex[dbRankOne.Rank] = dbRankOne.Guid;
                _this.RankUUIDList.Add(dbRankOne.Guid);
                if (_this.RankType == 3)
                {
                    dbRankOne.Value = 1000000 / dbRankOne.Rank;
                }
            }
            _this.Dirty = true;
            Sort(_this);
        }
コード例 #12
0
ファイル: SkillBase.cs プロジェクト: tuita520/mmorpgserver
        //升级技能
        public void LevelUpSkill(SkillData _this, int nId, int nLevel = 0)
        {
            PlayerLog.WriteLog(_this.mCharacter.mGuid, "----------LevelUpSkill----------skillId={0}:Lv{1}", nId, nLevel);
            var skills = _this.mDbData.Skills;
            int nOldLevel;

            if (!skills.TryGetValue(nId, out nOldLevel))
            {
                Logger.Warn("LevelUpSkill={0} not find !", nId);
                return;
            }
            if (nLevel == 0)
            {
                nLevel = nOldLevel + 1;
            }
            _this.mFlag = true;
            _this.MarkDirty();
            skills[nId] = nLevel;
            if (_this.mDbData.EquipSkills.Contains(nId))
            {
                _this.mCharacter.SkillChange(2, nId, nLevel);
            }
            _this.mCharacter.RefreshSkillTitle();
            Logger.Info("LevelUpSkill={0} is Success! Level={1}", nId, nLevel);
        }
コード例 #13
0
    void Start()
    {
        common = RPC.NetworkingCommon.Instance;

        networkingInfo = GameController.Instance.networkingInfo;
        if (networkingInfo.port == -1)
        {
            networkingInfo.port = RPC.NetworkingInfo.defaultPort;
        }
        if (networkingInfo.address == "")
        {
            networkingInfo.address = RPC.NetworkingInfo.defaultAddress;
        }

        playerLog = GetComponent <PlayerLog>();
        common.RegisterOnConsole(playerLog.AddEvent);

        if (networkingInfo.isServer)
        {
            server = new RPC.Server(networkingInfo);
            server.RegisterOnClient(ClientAvailable);
        }
        client = new RPC.Client(networkingInfo);
        client.RegisterClientShutdown(ShutdownClient);
    }
コード例 #14
0
    void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }

        playerLog = GetComponent <PlayerLog>();
        DontDestroyOnLoad(playerLog);

        if (level == 1)
        {
            playerLog.NewMessage("Welcome to Dungeon Adventure!");
        }

        DontDestroyOnLoad(gameObject);
        boardScript  = GetComponent <BoardManager>();
        PlayerObject = GameObject.FindWithTag("Player");

        enemies      = new List <EnemyController>();
        foundPotions = new Dictionary <int, int>();

        InitGame();
    }
コード例 #15
0
        public void SendClientQueueSuccess(PlayerConnect _this, QueueType type, ulong characterId)
        {
            var data = new QueueSuccessData();

            data.Type = (int)type;
            switch (type)
            {
            case QueueType.Login:
            {
                LoginServerControlDefaultImpl.NotifyGateClientState(LoginServer.Instance.ServerControl,
                                                                    _this.ClientId, 0, GateClientState.Login);
                data.LastServerId = _this.Player.DbData.LastServerId;

                _this.Player.DbData.LoginDay++;
                _this.Player.DbData.LoginTotal++;
            }
            break;

            case QueueType.EnterGame:
                data.CharacterId = characterId;
                break;
            }

            PlayerLog.WriteLog((int)LogType.SendClientQueueSuccess, "SendClientQueueSuccess type = {0}, name = {1}",
                               type, _this.Name);
            LoginServer.Instance.ServerControl.NotifyQueueSuccess(_this.ClientId, data);
        }
コード例 #16
0
        public void StartActivity(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;
            }
            PlayerLog.WriteLog((ulong)LogType.AllianceWar, "StartActivity(), ServerId = {0}", _this.ServerId);
            _this.SetStatus((int)eAllianceWarState.WaitStart);
            var now = DateTime.Now;

            _this.StartHour = now.Hour;
            _this.StartMin  = now.Minute;

            _this.AllianceIds.Clear();
            _this.AlliancePlayers.Clear();
            _this.EnterPlayerCount.Clear();
            _this.AllianceIds.Add(data.Occupant);
            _this.AllianceIds.AddRange(data.Challengers);
            foreach (var id in _this.AllianceIds)
            {
                _this.AlliancePlayers.Add(id, new List <ulong>());
                _this.EnterPlayerCount.Add(id, 0);
            }
        }
コード例 #17
0
        /// <summary>
        ///     买满了,等待揭晓结果
        /// </summary>
        /// <returns></returns>
        private void WaitResult(GroupShopOne _this)
        {
            GroupShop.Dirty = true;
            _this.State     = (int)eGroupShopItemState.WaitResult;

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

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

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

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

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

            var item = _this.mDbData.ItemData;

            PlayerLog.WriteLog((ulong)LogType.GroupShopOldDatasKeySame,
                               "WaitResult, luckyId = {0}, luckyCount = {1}, item id = {2}, count = {3}", characterId, count,
                               item.ItemId, item.Count);
        }
コード例 #18
0
        public void MatchOver(FightQueue _this)
        {
            //检查一次排队是否有问题
            var guids  = new List <ulong>();
            var isHave = new Dictionary <ulong, int>();

            foreach (var character in _this.tempTeam1)
            {
                foreach (var data in character.mDatas)
                {
                    isHave.modifyValue(data.Id, 1);
                    guids.Add(data.Id);
                }
            }

            foreach (var character in _this.tempTeam2)
            {
                foreach (var data in character.mDatas)
                {
                    isHave.modifyValue(data.Id, 1);
                    guids.Add(data.Id);
                }
            }
            PlayerLog.WriteLog((int)LogType.QueueLog, "MatchOver characterids={0}", guids.GetDataString());
            if (isHave.Count != _this.tbQueue.CountLimit * 2)
            {
                PlayerLog.WriteLog((int)LogType.QueueLog, "MatchOver CheckId Count={0}", isHave.Count);
                foreach (var i in isHave)
                {
                    PlayerLog.WriteLog((int)LogType.QueueLog, "cId={0},cValue={1}", i.Key, i.Value);
                    QueueManager.Pop(i.Key, eLeaveMatchingType.TeamChange);
                }
            }
            //执行完毕的结果
            foreach (var character in _this.tempTeam1)
            {
                _this.PushSuccessTime((int)DateTime.Now.GetDiffSeconds(character.StartTime));
                _this.mCharacters.Remove(character);
#if DEBUG
                PlayerLog.WriteLog((int)LogType.QueueMessage, "MatchOver mCharacters.Remove c={0}, ids={1}",
                                   character.Guid, character.mDatas.Select(d => d.Id).GetDataString());
#endif
            }
            foreach (var character in _this.tempTeam2)
            {
                _this.PushSuccessTime((int)DateTime.Now.GetDiffSeconds(character.StartTime));
                _this.mCharacters.Remove(character);
#if DEBUG
                PlayerLog.WriteLog((int)LogType.QueueMessage, "MatchOver mCharacters.Remove c={0}, ids={1}",
                                   character.Guid, character.mDatas.Select(d => d.Id).GetDataString());
#endif
            }
            var result = new QueueResult(_this);
            result.PushCharacter(_this.tempTeam1);
            result.PushCharacter(_this.tempTeam2);
            result.StartTrigger();
            //results.Add(result);
            _this.tempTeam1 = new List <QueueCharacter>();
            _this.tempTeam2 = new List <QueueCharacter>();
        }
コード例 #19
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            base.OnPlayerLeave(player);
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------OnPlayerLeave----------");

            if (mBattleState == BattleState.None)
            {
                if (mQuitPlayers.Contains(player.ObjId))
                {
                    mQuitPlayers.Remove(player.ObjId);
                    CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                }
                else
                {
                    var leave = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(60.0f), () =>
                    {
                        CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                        mLeaveTrigger.Remove(player.ObjId);
                    });
                    mLeaveTrigger.Add(player.ObjId, leave);
                }
            }
            else
            {
                ResetPlayer(player);
            }
        }
コード例 #20
0
ファイル: SceneManager.cs プロジェクト: tuita520/mmorpgserver
        public void LevelScene(SceneManager _this, ObjCharacter obj)
        {
            if (obj == null)
            {
                return;
            }
            var scene = obj.Scene;

            if (scene == null)
            {
                Logger.Info("GetSceneObj null...............");
                return;
            }

            //后台统计
            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,
                                         1,                                             //0:进入  1:离开
                                         DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间
                PlayerLog.Kafka(v);
            }
            catch (Exception)
            {
            }
            scene.LeaveScene(obj);
        }
コード例 #21
0
 public void PlayerEnterSuccess(AllianceWar _this, ulong characterId, int allianceId)
 {
     PlayerLog.WriteLog((ulong)LogType.AllianceWar,
                        "In PlayerEnterSuccess(), characterId = {0}, allianceId = {1}", characterId, allianceId);
     --_this.EnterPlayerCount[allianceId];
     _this.AlliancePlayers[allianceId].Add(characterId);
 }
コード例 #22
0
ファイル: Talent.cs プロジェクト: tuita520/mmorpgserver
        //洗天赋
        public void RefreshTalent(Talent _this, CharacterController character)
        {
            var templist = new List <int>();

            foreach (var i in _this.Talents)
            {
                if (Table.GetTalent(i.Key).ModifySkill == -1)
                {
                    templist.Add(i.Key);
                }
            }
            foreach (var id in templist)
            {
                DeleteTalent(_this, id);
            }
            //foreach (var i in Talents)
            //{
            //    ChangeDistributablePoint(i.Key, i.Value);
            //    //TalentCount += i.Value;
            //}
            //Talents.Clear();
            _this.mFlag = true;
            _this.MarkDirty();
            PlayerLog.WriteLog(_this.mCharacter.mGuid, "----------RefreshTalent----------TalentCount={0}",
                               _this.TalentCount);
            //Logger.Info("RefreshTalent is Success! TalentCount={0}", TalentCount);
            _this.mCharacter.TalentChange(3, -1, -1);
        }
コード例 #23
0
ファイル: AllianceWar.cs プロジェクト: tuita520/mmorpgserver
        private IEnumerator NotifyResultToTeamServer(Coroutine co, int winAlliance)
        {
            var result = new AllianceWarResult();

            result.ServerId = ServerId;
            result.Winner   = winAlliance;
            var teamAgent = SceneServer.Instance.TeamAgent;

            for (var i = 0; i < 5; i++)
            {
                var msg = teamAgent.NotifyAllianceWarResult(0, result);
                yield return(msg.SendAndWaitUntilDone(co));

                if (msg.State != MessageState.Reply)
                {
                    PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "NotifyAllianceWarResult not reply!");
                }
                else if (msg.ErrorCode != (int)ErrorCodes.OK)
                {
                    PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "NotifyAllianceWarResult err = {0}!",
                                       msg.ErrorCode);
                }
                else
                {
                    yield break;
                }
            }
            PlayerLog.WriteLog((ulong)LogType.AllianceWarError, "Fatal error!!!! NotifyAllianceWarResult Failed!!!");
        }
コード例 #24
0
        public IEnumerator CreateCharacter(Coroutine coroutine, ChatService _this, CreateCharacterInMessage msg)
        {
            var characterId = msg.CharacterId;

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

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

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

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

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

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

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

            msg.Reply();
        }
コード例 #25
0
ファイル: PickupData.cs プロジェクト: zckramer/Penguin-Rush
 void Start()
 {
     penguindata = GetComponent <PenguinData>();
     eventLog    = GetComponent <PlayerLog>();
     EarthquakePickup.GetComponent <Earthquake>().enabled = false;
     LeafRaftPickup.GetComponent <LeafRaft>().enabled     = false;
 }
コード例 #26
0
    public void Save()
    {
        Vector3 pos = GameObject.FindWithTag("Player").transform.position;     // guarda posición actual de player

        var player = GameObject.FindWithTag("Player");
        int id     = player.GetComponent <Player>().teamId;

        //TeamManager tm = GameObject.FindWithTag("GameController").GetComponent<TeamManager>();

        bool[] trainersDefeated = new bool[numOfTrainers];        // will iterate ofer TeamManager's trainers array and check their defeated value, save it to an array

        Debug.Log("TM's Trainers count = " + tmanager.Trainers.Count);

        for (int i = 0; i < tmanager.Trainers.Count; i++)
        {
            Debug.Log("Cycle: " + i + " defeated:" + tmanager.Trainers[i]);
            trainersDefeated[i] = tmanager.Trainers[i].defeated;
        }

        PlayerLog plog = new PlayerLog(pos.x, pos.y, pos.z, id, trainersDefeated);

        IFormatter formatter = new BinaryFormatter();

        Debug.Log("Now Saving...");
        Stream stream = new FileStream(path,
                                       FileMode.Create,
                                       FileAccess.Write,
                                       FileShare.None);

        formatter.Serialize(stream, plog);
        stream.Close();
        // se guardan los datos en un archivo
    }
コード例 #27
0
        //通知进入场景
        public void NotifyEnterScene(CharacterSceneInfo info, int changeType, SceneParam sp)
        {
            PlayerLog.WriteLog(888, "NotifyEnterScene characterId={0},SceneId={1},newScene={2}", info.CharacterId,
                               info.SceneInfo.SceneId, info.SceneInfo.SceneGuid);
            mLogger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId,
                         TimeManager.Timer.ElapsedMilliseconds);
            mLogger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint);

            var content =
                new __RPC_Scene_SSEnterScene_ARG_uint64_characterId_uint64_guid_uint64_applyGuid_int32_changeType_SceneParam_sceneParam__
                    ();

            content.CharacterId = info.CharacterId;
            content.Guid        = info.SceneInfo.SceneGuid;
            content.ChangeType  = changeType;
            content.SceneParam  = sp;
            var message = new ServiceDesc();

            message.FuncId      = 3055;
            message.ServiceType = (int)ServiceType.Scene;
            message.PacketId    = mBroker.GetUniquePacketId();
            message.Data        = ProtocolExtension.Serialize(content);
            message.Type        = (int)MessageType.SS;
            message.CharacterId = info.CharacterId;


            info.SceneInfo.Server.SendMessage(message);
        }
コード例 #28
0
ファイル: Ranking.cs プロジェクト: tuita520/mmorpgserver
        public IEnumerator SaveOne <T>(Coroutine coroutine, Ranking _this, DataCategory cat, string key, T v)
            where T : IExtensible
        {
            PlayerLog.WriteLog((int)LogType.SaveRanking, "--------------------RankSave--------------------{0}", key);
            var ret = RankServer.Instance.DB.Set(coroutine, cat, key, v);

            yield return(ret);
        }
コード例 #29
0
ファイル: QueueManager.cs プロジェクト: tuita520/mmorpgserver
        //移除玩家的排队信息
        public void Remove(ulong guid, eLeaveMatchingType type)
        {
            var result = QueueManager.Characters.Remove(guid);

            PlayerLog.WriteLog((int)LogType.QueueMessage, "Remove().Matching remove id={0},type={1},result={2}", guid,
                               type, result);
            TeamServer.Instance.ServerControl.TeamServerMessage(guid, (int)type, string.Empty);
        }
コード例 #30
0
 public bool InitByDb(CharacterController _this, ulong characterId, DBCharacterLogin dbData)
 {
     PlayerLog.WriteLog(characterId, "----------Login--------------------InitByDb--------------------{0}",
                        dbData.SaveCount);
     _this.mDbData      = dbData;
     _this.FirstLanding = false;
     return(true);
 }
コード例 #31
0
 void Start()
 {
     if (instance == null)
     {
         instance = this;
         DontDestroyOnLoad(this);
     }
     else
     {
         Destroy(gameObject);
     }
 }
コード例 #32
0
	void Start () {
		common = RPC.NetworkingCommon.Instance;

		networkingInfo = GameController.Instance.networkingInfo;
		if(networkingInfo.port == -1) networkingInfo.port = RPC.NetworkingInfo.defaultPort;
		if(networkingInfo.address == "") networkingInfo.address = RPC.NetworkingInfo.defaultAddress;

		playerLog = GetComponent<PlayerLog>();
		common.RegisterOnConsole(playerLog.AddEvent);

		if(networkingInfo.isServer) 
		{
			server = new RPC.Server(networkingInfo);
			server.RegisterOnClient(ClientAvailable);
		}
		client = new RPC.Client(networkingInfo);
		client.RegisterClientShutdown(ShutdownClient);
	}
コード例 #33
0
ファイル: PlayerBusiness_Package.cs プロジェクト: abel/sinan
        /// <summary>
        /// 添加物品,包袱是否已经满各模块自己检查
        /// </summary>
        /// <param name="goods">道具</param>
        /// <param name="source">来源</param>
        /// <param name="remark"></param>
        /// <param name="count">
        /// 商城购卖时,记录消费晶币,骨币,战绩数量
        /// 也可以存其它类型
        /// </param>
        /// <returns></returns>
        public Dictionary<string, int> AddGoods(Dictionary<string, Variant> goods, GoodsSource source, string remark = null, int count = 0)
        {
            Dictionary<string, int> v = BurdenManager.BurdenBatchInsert(m_b0, goods);
            if (v == null || v.Count == 0)
            {
                return v;
            }
            UpdateBurden();

            foreach (var item in v)
            {
                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods);
                log.itemcnt = item.Value;
                log.itemtype = item.Key;
                log.reserve_1 = (int)source;
                log.remark = remark;
                log.reserve_2 = count;
                this.WriteLog(log);
                UpdateTaskGoods(item.Key);
            }

            var scene = this.Scene;
            if (scene != null && this.Online && source != GoodsSource.GMGet)
            {
                foreach (string gid in v.Keys)
                {
                    //珍稀物品发送通知:
                    string position = RareGoodsManager.Instance.GetMsgTo(gid);
                    if (!string.IsNullOrEmpty(position))
                    {
                        string msg = RareGoodsManager.Instance.GetMsg(scene.Name, this.Name, gid, source);
                        if (msg != null)
                        {
                            PlayersProxy.CallAll(ClientCommand.SendActivtyR, new object[] { position, msg });
                        }
                    }
                }
            }
            return v;
        }
コード例 #34
0
ファイル: PlayerBusiness_Property.cs プロジェクト: abel/sinan
        /// <summary>
        /// 添加玩家经验
        /// </summary>
        /// <param name="experience">经验值</param>
        /// <param name="eType"></param>
        /// <param name="des"></param>
        /// <returns></returns>
        public int AddExperience(int experience, FinanceType eType, string remark = null)
        {
            if (experience <= 0)
            {
                return 0;
            }
            int upLev = 0;
            int curExp = Interlocked.Add(ref m_exp, experience);
            if (curExp >= m_maxExp)
            {
                upLev = UpLevel();
                if (upLev > 0)
                {
                    UserNote note = new UserNote(this, TaskCommand.PlayerActivation, new object[] { upLev, this.Level });
                    Notifier.Instance.Publish(note);
                    //成就执行
                    this.FinishNote(FinishCommand.RoleUpLev, upLev);
                    //通知场景上的玩家
                    Variant v = new Variant(2);
                    v["ID"] = this.ID;
                    v["Level"] = this.m_level;
                    this.CallAll(ClientCommand.UpdateActorR, v);
                    //获取技能
                    NewSkill(upLev);
                }
            }
            else
            {
                Variant v = new Variant(2);
                v["JingYan"] = new MVPair(this.m_maxExp, this.m_exp);
                UpdataActorR(v);
            }
            PlayerAccess.Instance.Save(this);

            PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.RoleExp);
            log.level = m_level;
            log.modifyexp = experience;
            log.totalexp = curExp;
            log.reserve_1 = (int)eType;
            log.remark = remark;
            this.WriteLog(log);
            return upLev;
        }
コード例 #35
0
ファイル: PlayerBusiness_Pet.cs プロジェクト: abel/sinan
        /// <summary>
        /// 宠物取得经验
        /// </summary>
        /// <param name="pet"></param>
        /// <param name="experience"></param>
        /// <param name="isCall"></param>
        /// <param name="eType">宠物经验来源</param>
        /// <returns></returns>
        public bool AddPetExp(Pet pet, int experience, bool isCall, int eType)
        {
            if (pet == null)
            {
                return false;
            }
            Variant exp = pet.Value.GetVariantOrDefault("Experience");
            if (exp.GetIntOrDefault("V") == int.MaxValue)
            {
                return false;
            }
            int newExp = exp.SetOrInc("V", experience);
            if (newExp < 0)
            {
                newExp = int.MaxValue;
                exp["V"] = newExp;
            }

            int petLev = pet.Value.GetIntOrDefault("PetsLevel");
            if (petLev >= maxLevel)
            {
                pet.Save();
            }
            else
            {
                int max = exp.GetIntOrDefault("M");
                if (newExp >= max)
                {
                    petLev = UpPetLev(pet, newExp, max, petLev);
                    newExp = exp.GetIntOrDefault("V");
                }
                else
                {
                    pet.SaveLife();
                }
            }
            if (isCall)
            {
                Call(PetsCommand.UpdatePetR, true, pet);
            }

            //宠物取得经验
            PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.PetExp);
            log.level = petLev;
            log.modifyexp = experience;
            log.totalexp = newExp;
            log.reserve_1 = eType;
            log.remark = pet.ID;
            log.touid = PID;
            this.WriteLog(log);
            return true;
        }
コード例 #36
0
ファイル: PlayerBusiness_Pet.cs プロジェクト: abel/sinan
        /// <summary>
        /// 坐骑得到经验
        /// </summary>
        /// <param name="exp">得到经验</param>
        /// <param name="gs">经验来源</param>
        /// <returns></returns>
        public bool AddMounts(int exp,GoodsSource gs)
        {
            if (m_mounts == null)
                return false;

            GameConfig gc = GameConfigAccess.Instance.FindOneById(m_mounts.MountsID);
            if (gc == null)
            {
                return false;
            }
            Variant v = gc.Value;
            if (v == null)
            {
                return false;
            }

            Variant ex = v.GetVariantOrDefault("Exp");

            int max = 1;
            foreach (var item in ex)
            {
                int m = Convert.ToInt32(item.Key);
                if (m > max)
                {
                    max = m;
                }
            }
            if (m_mounts.Level >= max)
            {
                //已经升到最高级
                return false;
            }

            m_mounts.Experience += exp;

            int level = m_mounts.Level;

            bool isup = false;
            while (true)
            {
                if (m_mounts.Level >= max)
                    break;
                int maxExp = ex.GetIntOrDefault(m_mounts.Level.ToString());
                if (m_mounts.Experience < maxExp)
                    break;
                m_mounts.Experience -= maxExp;
                m_mounts.Level++;
                m_mounts.Update = DateTime.UtcNow;
                isup = true;
            }

            if (m_mounts.Save())
            {
                //表示升级更新出战宠属性
                if (m_mounts.Status == 1 && isup)
                {
                    PetAccess.PetReset(m_pet, Skill, false, m_mounts);
                }
                MountsUpdate(m_mounts, new List<string>() { "Experience", "Level" });
            }
            //坐骑取得经验 日志
            PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.MountsExp);
            //升到的等级
            log.level = m_mounts.Level;
            log.modifyexp = exp;//得到坐骑经验
            log.reserve_1 = (int)gs;
            //升之前的等级
            log.reserve_2 = level;
            log.remark = m_mounts.ID;
            log.touid = PID;
            this.WriteLog(log);
            return true;
        }
コード例 #37
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 重新进入
        /// </summary>
        /// <param name="member"></param>
        internal void ReInto(PlayerBusiness member)
        {
            if (m_team != null && m_team.TryAddMember(member))
            {
                var members = m_team.AllPlayerDetail;
                member.Call(TeamCommand.IntoTeamR, true, new object[] { m_team, members });
                member.CallAllExcludeOne(member, TeamCommand.NewMemberR, m_team.TeamID, new PlayerDetail(member));

                var apcs = m_currentApcs.FindAll(k => k.State <= 1);
                member.Call(InstanceCommand.NewInstanceR, new object[] { true, apcs, string.Empty });

                // 记录副本进入日志
                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeIn);
                log.itemtype = m_gc.SubType; //副本类型
                log.itemid = m_gc.ID;        //副本ID
                log.remark = m_gc.Name;      //副本名称

                member.WriteLog(log);
            }
        }
コード例 #38
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
        public bool TryInto(PlayerBusiness player)
        {
            PlayerTeam team = player.Team;
            //设置玩家列表.
            string msg;
            if (!FillPlayers(team, player, out msg))
            {
                player.Call(InstanceCommand.NewInstanceR, new object[] { false, msg, string.Empty });
                return false;
            }

            player.TeamInstance = this;
            // 检查副本进入限制
            if (m_intoLimit != null)
            {
                PlayerBusiness member;
                if ((!m_intoLimit.IntoCheck(m_members, out msg, out member))
                    || (!m_intoLimit.IntoDeduct(m_members, out msg, out member)))
                {
                    player.TeamInstance = null;
                    this.CallAll(InstanceCommand.NewInstanceR, new object[] { false, msg, member == null ? string.Empty : member.Name });
                    m_members = Empty;
                    return false;
                }
            }
            m_team = team;
            TeamInstanceProxy.TryAddInstance(this);

            //设置进入次数
            for (int i = 0; i < m_members.Length; i++)
            {
                PlayerBusiness member = m_members[i];
                if (member == null) continue;
                member.TeamInstance = this;
                member.WriteDaily(PlayerBusiness.DailyMap, m_gc.ID);

                //进入秘境通知..
                member.AddAcivity(ActivityType.FuBenCount, 1);

                // 记录副本进入日志
                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeIn);
                log.itemtype = m_difficulty;
                log.itemid = m_gc.ID;
                log.remark = m_gc.Name;
                member.WriteLog(log);
            }

            oldx = player.X;
            oldy = player.Y;
            m_oldScene = player.Scene;
            m_currentScene = m_oldScene;
            Astate = ActionState.Standing;
            return true;
        }
コード例 #39
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 玩家退出
        /// </summary>
        /// <param name="player"></param>
        /// <returns>剩余玩家数</returns>
        public int Exit(PlayerBusiness player, bool online = false)
        {
            int count = 0;
            for (int i = 0; i < m_members.Length; i++)
            {
                PlayerBusiness member = m_members[i];
                if (member != null)
                {
                    if (member != player)
                    {
                        count++;
                    }
                }
            }
            if (count == 0)
            {
                TeamInstanceProxy.TryRemove(m_id);
                m_members = Empty;
            }

            // 记录副本退出日志
            PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeOut);
            log.itemtype = m_difficulty;
            log.itemid = m_gc.ID;
            log.remark = m_gc.Name;
            player.WriteLog(log);

            if (online)
            {
                //转回主场景..
                if (m_currentScene.ExitScene(player))
                {
                    player.TeamInstance = null;
                    UserNote note = new UserNote(player, ClientCommand.IntoSceneSuccess, new object[] { oldx, oldy });
                    m_oldScene.Execute(note);
                }
            }
            return count;
        }
コード例 #40
0
ファイル: PlayerBusiness_Property.cs プロジェクト: abel/sinan
        /// <summary>
        /// 失去经验
        /// </summary>
        /// <param name="b">百分比</param>
        public void LostExperience(double b, FinanceType eType, string remark = null)
        {
            if (b > 0 && b <= 1.0)
            {
                int experience = (int)(m_exp * b);
                if (experience > 0)
                {
                    m_exp -= experience;
                    Variant v = new Variant(2);
                    v["JingYan"] = new MVPair(this.m_maxExp, this.m_exp);
                    UpdataActorR(v);

                    PlayerAccess.Instance.Save(this);

                    PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.RoleExp);
                    log.level = m_level;
                    log.modifyexp = -experience;
                    log.totalexp = m_exp;
                    log.reserve_1 = (int)eType;
                    log.remark = remark;
                    this.WriteLog(log);
                }
            }
        }
コード例 #41
0
ファイル: PlayerBusiness_Package.cs プロジェクト: abel/sinan
        /// <summary>
        /// 添加日志
        /// </summary>
        /// <param name="t">操作类型</param>
        /// <param name="itemtype"></param>
        /// <param name="itemcnt"></param>
        /// <param name="source">来源</param>
        /// <param name="remark">备注</param>
        /// <param name="reserve_2"></param>
        public void AddLog(Actiontype t, string itemtype, int itemcnt, GoodsSource source, string remark, int reserve_2)
        {
            PlayerLog log = new PlayerLog(ServerLogger.zoneid, t);
            log.itemtype = itemtype;
            log.itemcnt = itemcnt;
            log.reserve_1 = (int)source;
            log.remark = remark;
            log.reserve_2 = reserve_2;

            this.WriteLog(log);
        }
コード例 #42
0
ファイル: EmailBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 取出邮件物品
        /// </summary>
        /// <param name="note"></param>
        public static void GetEmailGoods(UserNote note)
        {
            string soleid = note.PlayerID + "GetEmailGoods";
            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                string emailid = note.GetString(0);
                Email model = EmailAccess.Instance.FindOneById(emailid);
                if (model == null)
                {
                    note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoEmail));
                    return;
                }
                //是否操作邮件
                if (model.Ver != 10)
                {
                    if (model.Status > 1)
                    {
                        note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.GetEmailGoods1));
                        // 物品已经提取,不能重复领取
                        return;
                    }
                }

                Variant v = model.Value;
                if (note.PlayerID != v.GetStringOrDefault("ReceiveID"))
                {
                    note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.NoReceiveID));
                    return;
                }
                if (v.GetIntOrDefault("IsHave") != 1)
                {
                    note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.GetEmailGoods2));
                    return;
                }
                PlayerEx b0 = note.Player.B0;
                Variant bv = b0.Value;
                IList c = bv.GetValue<IList>("C");
                IList goodslist = v.GetValue<IList>("GoodsList");
                if (goodslist != null)
                {
                    int count = BurdenManager.BurdenSpace(c);
                    if (goodslist.Count > count)
                    {
                        note.Call(EmailCommand.ExtractGoodsR, false, TipManager.GetMessage(EmailReturn.BurdenFull));
                        return;
                    }
                }

                model.Status = 2;
                if (model.Save())
                {
                    int score = v.GetIntOrDefault("Score");
                    if (score > 0)
                    {
                        note.Player.AddScore(score, FinanceType.ExtractGoods);

                    }

                    if (goodslist != null)
                    {
                        Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
                        foreach (Variant item in goodslist)
                        {
                            string gid = item.GetStringOrDefault("SoleID");
                            if (gid != item.GetStringOrDefault("GoodsID"))
                            {
                                Goods g = GoodsAccess.Instance.FindOneById(item.GetStringOrDefault("SoleID"));
                                if (g == null)
                                    continue;
                                g.PlayerID = note.PlayerID;
                                if (!g.Save())
                                    continue;
                                Variant gv = g.Value;
                                Variant m = BurdenManager.GetBurdenSpace(c);
                                if (m == null)
                                    continue;
                                m["E"] = g.ID;
                                m["G"] = g.GoodsID;
                                m["A"] = 1;//只能一件物品
                                m["S"] = gv.GetIntOrDefault("Sort");
                                m["H"] = 0;
                                m["D"] = 0;
                                m["T"] = null;
                                //任务更新
                                note.Player.UpdateTaskGoods(g.GoodsID);

                                //邮件日志
                                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods);
                                log.itemcnt = 1;
                                log.itemtype = g.GoodsID;
                                log.reserve_1 = (int)GoodsSource.ExtractGoods;

                                log.remark = emailid;
                                note.Player.WriteLog(log);
                            }
                            else
                            {
                                GameConfig gc = GameConfigAccess.Instance.FindOneById(gid);
                                if (gc == null)
                                    continue;
                                int num = item.GetIntOrDefault("Number");
                                int h = item.GetIntOrDefault("H");
                                h = h > 0 ? 1 : 0;
                                Variant tmp;
                                if (dic.TryGetValue(gid, out tmp))
                                {
                                    tmp.SetOrInc("Number" + h, num);
                                }
                                else
                                {
                                    tmp = new Variant();
                                    tmp.SetOrInc("Number" + h, num);
                                    dic.Add(gid, tmp);
                                }
                            }
                        }
                        //判断邮件状态
                        if (model.Ver == 10)
                        {
                            BurdenManager.BurdenBatchInsert(note.Player.B0, dic);
                            model.Ver = 5;
                            model.Save();
                        }
                        else
                        {
                            note.Player.AddGoods(dic, GoodsSource.ExtractGoods, emailid);
                        }
                    }
                    note.Call(EmailCommand.ExtractGoodsR, true, emailid);

                    if (goodslist != null && goodslist.Count > 0)
                    {
                        note.Player.UpdateBurden();
                    }
                }
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
コード例 #43
0
ファイル: DealBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 确定交易
        /// </summary>
        /// <param name="note"></param>
        public static void EnterDeal(UserNote note)
        {
            Variant deal0 = note.Player.Value.GetVariantOrDefault("Deal");
            if (deal0 == null)
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.IsDeal));
                return;
            }

            PlayerBusiness pb = PlayersProxy.FindPlayerByID(deal0.GetStringOrDefault("PlayerID"));
            if (pb == null || (!pb.Online))
            {
                note.Player.Value.Remove("Deal");
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NoLine));
                return;
            }
            //对家
            Variant deal1 = pb.Value.GetVariantOrDefault("Deal");
            if (deal1 == null)
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.IsDeal));
                return;
            }
            if (deal1.GetIntOrDefault("Status") != 3)
            {
                deal0["Status"] = 3;
                pb.Call(DealCommand.EnterDealR, true, note.PlayerID);
                note.Call(DealCommand.EnterDealR, true, note.PlayerID);
                return;
            }

            Variant v0 = deal0.GetVariantOrDefault("Goods");

            Variant v1 = deal1.GetVariantOrDefault("Goods");

            PlayerEx burden0 = note.Player.B0;
            IList c0 = burden0.Value.GetValue<IList>("C");

            PlayerEx burden1 = pb.B0;
            IList c1 = burden1.Value.GetValue<IList>("C");

            //交易双方的道具信息
            IList goods0 = v0.GetValue<IList>("Goods");
            IList goods1 = v1.GetValue<IList>("Goods");

            if (!IsCheck(goods0, c0, note.Player))
            {
                return;
            }

            if (!IsCheck(goods1, c1, pb))
            {
                return;
            }

            //判断包袱是否已经满
            if (BurdenManager.BurdenDealFull(burden0, goods1))
            {
                pb.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.BurdenFull));
                return;
            }

            //判断包袱是否已经满
            if (BurdenManager.BurdenDealFull(burden1, goods0))
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.BurdenFull));
                return;
            }
            //int Coin = v0.GetIntOrDefault("Coin") - v1.GetIntOrDefault("Coin");
            int Score = v0.GetIntOrDefault("Score") - v1.GetIntOrDefault("Score");

            if (!note.Player.AddScore(-Score, FinanceType.EnterDeal))
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NoScore));
                return;
            }

            pb.AddScore(Score, FinanceType.EnterDeal);

            //移除成功后
            if (!BurdenManager.Remove(burden0, goods0))
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NumberError));
                return;
            }

            //移除成功后
            if (!BurdenManager.Remove(burden1, goods1))
            {
                note.Call(DealCommand.EnterDealR, false, TipManager.GetMessage(DealReturn.NumberError));
                return;
            }

            BurdenManager.BurdenInsert(burden0, goods1);
            BurdenManager.BurdenInsert(burden1, goods0);

            foreach (Variant v in goods1)
            {
                //新加道具
                note.Player.UpdateTaskGoods(v.GetStringOrDefault("G"));
                //移除的道具
                pb.UpdateTaskGoods(v.GetStringOrDefault("G"));

                //面对交易日志
                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods);
                log.itemcnt = v.GetIntOrDefault("Count");
                log.itemtype = v.GetStringOrDefault("G");
                log.touid = note.PID;//
                log.toopenid = pb.UserID;
                log.reserve_1 = (int)(FinanceType.EnterDeal);
                log.remark = pb.PID.ToString();//交易者

                note.Player.WriteLog(log);
            }

            foreach (Variant v in goods0)
            {
                //新加道具
                note.Player.UpdateTaskGoods(v.GetStringOrDefault("G"));
                //移除的道具
                pb.UpdateTaskGoods(v.GetStringOrDefault("G"));

                //面对交易日志
                PlayerLog log1 = new PlayerLog(ServerLogger.zoneid, Actiontype.AddGoods);
                log1.itemcnt = v.GetIntOrDefault("Count");
                log1.itemtype = v.GetStringOrDefault("G");
                log1.touid = pb.PID;
                log1.toopenid = note.Player.UserID;
                log1.reserve_1 = (int)(FinanceType.EnterDeal);
                log1.remark = note.PID.ToString();
                pb.WriteLog(log1);
            }

            if (note.Player.Value.ContainsKey("Deal"))
            {
                note.Player.Value.Remove("Deal");
            }

            if (pb.Value.ContainsKey("Deal"))
            {
                pb.Value.Remove("Deal");
            }

            //Variant list0 = new Variant();
            //list0.Add("B0",burden0);
            //note.Call(BurdenCommand.BurdenListR, list0);
            note.Player.UpdateBurden();

            note.Call(DealCommand.EnterDealR, true, note.PlayerID);

            //通知更新另一位的包袱
            //Variant list1 = new Variant();
            //list1.Add("B0",burden1);
            //OnLineBusiness.Call(BurdenCommand.BurdenListR, list1);
            pb.UpdateBurden();

            pb.Call(DealCommand.EnterDealR, true, note.PlayerID);
        }