예제 #1
0
 //开始创建副本
 public static IEnumerator AskEnterDungeonByTeamCoroutine(Coroutine co,
                                                          List <ulong> characters,
                                                          int serverId,
                                                          FubenRecord tbFuben,
                                                          ulong sceneGuid)
 {
     return(mImpl.AskEnterDungeonByTeamCoroutine(co, characters, serverId, tbFuben, sceneGuid));
 }
예제 #2
0
    private void SetChooseCell(int index)
    {
        if (index < 0 || index >= m_DataModel.BattleCells.Count)
        {
            return;
        }

        foreach (var battleCell in m_DataModel.BattleCells)
        {
            battleCell.IsSelect = battleCell.Index == index;
        }

        var _cellData = m_DataModel.BattleCells[index];

        m_DataModel.SelectCell = _cellData;

        var _battleId    = _cellData.Id;
        var _tbPvpBattle = Table.GetPVPBattle(_battleId);
        var _playerCount = 0;
        var _playerData  = PlayerDataManager.Instance;

        FubenRecord tbDungeon = null;

        for (var i = _tbPvpBattle.Fuben.Length - 1; i >= 0; i--)
        {
            var _dungeonId = _tbPvpBattle.Fuben[i];
            if (_dungeonId != -1)
            {
                tbDungeon = Table.GetFuben(_dungeonId);
                if (tbDungeon == null)
                {
                    continue;
                }
                if (_playerData.CheckCondition(tbDungeon.EnterConditionId) == 0 || i == 0)
                {
                    m_DataModel.DungeonId = _dungeonId;
                    var _tbFuben = Table.GetFuben(_dungeonId);
                    if (_tbFuben != null)
                    {
                        var _tbQueue = Table.GetQueue(_tbFuben.QueueParam);
                        _playerCount = _tbQueue.CountLimit;

                        m_DataModel.SceneId = _tbFuben.SceneId;
                    }
                    break;
                }
            }
        }

        m_DataModel.PlayerCount = _playerCount;
        m_DataModel.CanAccept   = PlayerDataManager.Instance.GetFlag(tbDungeon.ScriptId);
        m_DataModel.HasAccept   = PlayerDataManager.Instance.GetFlag(tbDungeon.FlagId);

        RenewalQueueMsg();
        RenewalStateType();
        RefreshRemuneration();
    }
예제 #3
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)));
        }
예제 #4
0
        public void RefreshData(UIInitArguments data)
        {
            DataModel.ViewState  = 0;
            DataModel.QueueState = 0;

            FubenRecord fuben = Table.GetFuben(30000);
            SceneRecord scene = Table.GetScene(fuben.SceneId);

            var _queueUpData = PlayerDataManager.Instance.PlayerDataModel.QueueUpData;

            if (_queueUpData.QueueId != -1 && _queueUpData.QueueId == fuben.QueueParam)
            {
                DataModel.QueueState = 1;
            }

            if (DataModel.Reward.Count <= 0)
            {
                DataModel.NeedLevel = scene.LevelLimit;
                for (int i = 0; i < fuben.RewardId.Count && i < fuben.RewardCount.Count; i++)
                {
                    if (fuben.RewardId[i] > 0 && fuben.RewardCount[i] > 0)
                    {
                        ItemIdDataModel model = new ItemIdDataModel();
                        model.ItemId = fuben.RewardId[i];
                        model.Count  = fuben.RewardCount[i];
                        DataModel.Reward.Add(model);
                    }
                }
            }


            if (DataModel.TotalRewardRank == null)
            {
                DataModel.TotalRewardRank =
                    new System.Collections.ObjectModel.ObservableCollection <GongxianJianliItem>();

                for (int i = 0; ; i++)
                {
                    CheckenFinalRewardRecord dcrr = Table.GetCheckenFinalReward(i + 1);
                    if (dcrr == null)
                    {
                        break;
                    }
                    string[]           rank        = dcrr.Rank.Split('|');
                    GongxianJianliItem jiangliItem = new GongxianJianliItem();
                    if (rank.Length > 0)
                    {
                        if (int.Parse(rank[0]) <= 3)
                        {
                            jiangliItem.NubIcon = dcrr.RankIcon;
                        }
                        else
                        {
                            jiangliItem.Numb = string.Format("{0} - {1}", dcrr.Rank[0], dcrr.Rank[dcrr.Rank.Length - 1]);
                        }

                        for (int j = 0; j < dcrr.RankItemCount.Length; j++)
                        {
                            if (dcrr.RankItemID[j] > 0)
                            {
                                GongxianJianliItem.JiangliItem item = new GongxianJianliItem.JiangliItem();
                                item.IconId = dcrr.RankItemID[j];
                                ItemBaseRecord dbd = Table.GetItemBase(dcrr.RankItemID[j]);
                                item.Icon  = dbd.Icon;
                                item.count = dcrr.RankItemCount[j].ToString();
                                jiangliItem.Rewards.Add(item);
                            }
                        }
                    }
                    DataModel.TotalRewardRank.Add(jiangliItem);
                }
            }
        }
예제 #5
0
 public ChickenFightController()
 {
     CleanUp();
     fuben = Table.GetFuben(30000);
     EventDispatcher.Instance.AddEventListener(ChickenFightChoosePageEvent.EVENT_TYPE, OnChoosePageEvent);
 }
예제 #6
0
        //扣除进入副本需要的材料,并从characters中,剔除材料不足的玩家
        private IEnumerator DeleteDungeonMaterialCoroutine(Coroutine co, List <ulong> characters, FubenRecord tbFuben)
        {
            List <ulong> removes = new List <ulong>();

            foreach (var character in characters)
            {
                var removeThisOne = false;
                //消耗
                for (int i = 0, jmax = tbFuben.NeedItemId.Length; i != jmax; ++i)
                {
                    var itemId    = tbFuben.NeedItemId[i];
                    var itemCount = tbFuben.NeedItemCount[i];
                    if (itemId == -1)
                    {
                        break;
                    }
                    var delItemMsg = TeamServer.Instance.LogicAgent.DeleteItem(character, itemId, itemCount, (int)eDeleteItemType.EnterFuBen);
                    yield return(delItemMsg.SendAndWaitUntilDone(co));

                    if (delItemMsg.State != MessageState.Reply)
                    {
                        removeThisOne = true;
                        PlayerLog.WriteLog((ulong)LogType.TeamEnterDungeonDelItems,
                                           "delItemMsg not replied! playerId = {0}, itemId = {1}, itemCount = {2}", character,
                                           itemId, itemCount);
                        break;
                    }
                    if (delItemMsg.ErrorCode != (int)ErrorCodes.OK)
                    {
                        removeThisOne = true;
                        PlayerLog.WriteLog((ulong)LogType.TeamEnterDungeonDelItems,
                                           "delItemMsg return with ERROR[{3}]! playerId = {0}, itemId = {1}, itemCount = {2}",
                                           character, itemId, itemCount, delItemMsg.ErrorCode);
                        break;
                    }
                }
                if (removeThisOne)
                {
                    removes.Add(character);
                }
            }

            characters.RemoveAll(id => removes.Contains(id));
        }