少年修仙传客户端代码仓库
client_Wu Xijin
2018-11-21 9b4626ad65b11699169152f5fffd3b1aad20176e
4747 【前端】【1.3】封魔坛新增自动进入功能(VIP特权),双倍挑战修改
8个文件已修改
6个文件已添加
545 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/HB2_DemonJar/DTCB201_tagMCFMTDoubleState.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_DemonJar/HB201_tagMCFMTDoubleState.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonInspireWin.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoChallengeLogBehaviour.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoChallengeLogBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoChallengeLogWin.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoChallengeLogWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoDoubleSettingWin.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarAutoDoubleSettingWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarModel.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarWin.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/FindPreciousBossRebornBehaviour.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_DemonJar/DTCB201_tagMCFMTDoubleState.cs
@@ -18,6 +18,7 @@
        var package = vNetPack as HB201_tagMCFMTDoubleState;
        demonJarModel.isDoubleAward = package.IsDouble == 1;
        demonJarModel.oldDouble = package.OldDouble == 1;
    }
}
Core/NetworkPackage/ServerPack/HB2_DemonJar/HB201_tagMCFMTDoubleState.cs
@@ -6,6 +6,7 @@
public class HB201_tagMCFMTDoubleState : GameNetPackBasic
{
    public byte IsDouble;    //是否双倍
    public byte OldDouble;    //是否曾经允许双倍
    public HB201_tagMCFMTDoubleState()
    {
@@ -15,6 +16,7 @@
    public override void ReadFromBytes(byte[] vBytes)
    {
        TransBytes(out IsDouble, vBytes, NetDataType.BYTE);
        TransBytes(out OldDouble, vBytes, NetDataType.BYTE);
    }
}
System/Dungeon/DungeonInspireWin.cs
@@ -23,23 +23,19 @@
        [SerializeField] Text m_FairyCost;
        [SerializeField] Text m_InspireLevel;
        [SerializeField] Text m_Remind;
        [SerializeField] Text m_DemonJarDoubleRemind;
        [SerializeField] Button m_Confirm;
        [SerializeField] Button m_Cancel;
        [SerializeField] Button m_Close;
        DungeonModel m_Model;
        DungeonModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<DungeonModel>());
            }
        }
        DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
        private bool coinInspire = false;
        private bool fairyInspire = false;
        private DungeonInspireConfig coinInspireConfig = null;
        private DungeonInspireConfig fairyInspireConfig = null;
        #region Built-in
        protected override void BindController()
        {
@@ -88,8 +84,6 @@
            model.dungeonInspireLvEvent += DungeonEncourageEvent;
        }
        protected override void OnAfterOpen()
        {
@@ -178,9 +172,14 @@
                }
                else
                {
                    var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
                    var isDouble = dataMapId == DemonJarModel.DEMONJAR_MAPID && demonJarModel.isDoubleAward;
                    bool mix = fairyInspireConfig.InspireType == 5 && PlayerDatas.Instance.baseData.GoldPaper < cost
                        && PlayerDatas.Instance.baseData.GoldPaper > 0;
                    var fairyCost = fairyInspireConfig.InspireType == 5 ? cost - PlayerDatas.Instance.baseData.GoldPaper : cost;
                    fairyCost *= isDouble ? 2 : 1;
                    if (fairyCost > 0 && (!model.inspireRemindEffective || !model.inspireNoRemind))
                    {
                        ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"),
@@ -236,19 +235,32 @@
        private void DisplayCost()
        {
            var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
            var isDouble = dataMapId == DemonJarModel.DEMONJAR_MAPID && demonJarModel.isDoubleAward;
            if (coinInspireConfig != null)
            {
                m_CoinCost.text = Language.Get("FairyLand_Func9", model.GetDungeonInspireCost(coinInspireConfig), coinInspireConfig.InspireCount);
                m_CoinCost.text = Language.Get("FairyLand_Func9", model.GetDungeonInspireCost(coinInspireConfig) * (isDouble ? 2 : 1), coinInspireConfig.InspireCount);
            }
            if (fairyInspireConfig != null)
            {
                m_FairyCost.text = Language.Get("FairyLand_Func10", model.GetDungeonInspireCost(fairyInspireConfig));
                m_FairyCost.text = Language.Get("FairyLand_Func10", model.GetDungeonInspireCost(fairyInspireConfig) * (isDouble ? 2 : 1));
            }
        }
        void DisplayRemind()
        {
            m_Remind.gameObject.SetActive(fairyInspireConfig != null && fairyInspireConfig.InspireType == 5);
            if (demonJarModel.isDoubleAward)
            {
                var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
                m_DemonJarDoubleRemind.gameObject.SetActive(dataMapId == DemonJarModel.DEMONJAR_MAPID);
            }
            else
            {
                m_DemonJarDoubleRemind.gameObject.SetActive(false);
            }
        }
        bool InGuiding()
System/Dungeon/DungeonModel.cs
@@ -8,8 +8,8 @@
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    public class DungeonModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize
    [XLua.LuaCallCSharp]
    public class DungeonModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize
    {
        Dictionary<int, Dictionary<int, int>> dungeonMap = new Dictionary<int, Dictionary<int, int>>();//mapid,lineId,DungeonId;
        Dictionary<int, Dictionary<int, int>> dungeonHintMap = new Dictionary<int, Dictionary<int, int>>();
@@ -992,6 +992,16 @@
                            break;
                        case DemonJarModel.DEMONJAR_MAPID:
                            WindowCenter.Instance.Open<DemonJarVictoryWin>();
                            var demonJarModel = ModelCenter.Instance.GetModel<DemonJarModel>();
                            if (demonJarModel.autoChallengeBoss > 0 && demonJarModel.autoChallengeBoss == demonJarModel.GetBossIdByLine(m_DungeonResult.lineID))
                            {
                                var bossId = demonJarModel.autoChallengeBoss;
                                var isDouble = demonJarModel.isDoubleAward;
                                var rank = m_DungeonResult.rank;
                                demonJarModel.AddAutoChallengeLog(bossId, isDouble, rank);
                                demonJarModel.autoChallengeBoss = 0;
                            }
                            break;
                        case FairyLeagueModel.FAIRY_LEAGUE_DUNGEON:
                        case 31160:
System/FindPrecious/DemonJarAutoChallengeLogBehaviour.cs
New file
@@ -0,0 +1,41 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 13, 2018
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class DemonJarAutoChallengeLogBehaviour : ScrollItem
    {
        [SerializeField] Text m_Content;
        public override void Display(object _data)
        {
            base.Display(_data);
            var log = (DemonJarModel.AutoChallengeLog)_data;
            var npcConfig = Config.Instance.Get<NPCConfig>(log.bossId);
            var npcLevel = npcConfig.NPCLV;
            var time = log.time.ToString("yyyy-MM-dd hh:mm:ss");
            var doubleTip = Language.Get(log.isDouble ? "DemonJarAutoDiary2" : "DemonJarAutoDiary1");
            var rankTip = Language.Get(log.rank == 1 ? "DemonJarAutoDiary3" : "DemonJarAutoDiary4");
            m_Content.text = UIHelper.ReplaceNewLine(Language.Get("DemonJarAutoDiary", npcLevel, time, doubleTip, rankTip));
        }
        public override void Dispose()
        {
            base.Dispose();
        }
    }
}
System/FindPrecious/DemonJarAutoChallengeLogBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 082c7575aaf72fa4c9c522f0d5e23e7a
timeCreated: 1542080573
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FindPrecious/DemonJarAutoChallengeLogWin.cs
New file
@@ -0,0 +1,65 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 13, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class DemonJarAutoChallengeLogWin : Window
    {
        [SerializeField] CyclicScroll m_LogsCyclicScroll;
        [SerializeField] Button m_Close;
        DemonJarModel model { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Close.SetListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            m_LogsCyclicScroll.Dispose();
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            m_LogsCyclicScroll.Init(model.GetAutoChallengeLogs());
        }
        #endregion
    }
}
System/FindPrecious/DemonJarAutoChallengeLogWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: cfb20c44b133fc6499596e78102a3b83
timeCreated: 1542080537
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FindPrecious/DemonJarAutoDoubleSettingWin.cs
New file
@@ -0,0 +1,112 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, November 13, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class DemonJarAutoDoubleSettingWin : Window
    {
        [SerializeField] OnOffToggle m_AutoChallenge;
        [SerializeField] OnOffToggle m_DoubleChallenge;
        [SerializeField] Button m_ViewLog;
        [SerializeField] Button m_Close;
        DemonJarModel model { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
        VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_AutoChallenge.AddListener(SetAutoChallenge);
            m_DoubleChallenge.AddListener(SetDoubleChallenge);
            m_ViewLog.SetListener(ViewLog);
            m_Close.SetListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            DisplayAutoChallenge();
            DisplayDoubleChallenge();
        }
        protected override void OnAfterOpen()
        {
            model.autoChallengeChangeEvent += DisplayAutoChallenge;
            model.doubleAwardChangeEvent += DisplayDoubleChallenge;
        }
        protected override void OnPreClose()
        {
            model.autoChallengeChangeEvent -= DisplayAutoChallenge;
            model.doubleAwardChangeEvent -= DisplayDoubleChallenge;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void SetAutoChallenge()
        {
            var autoable = vipModel.GetVipPrivilegeCnt(VipPrivilegeType.DemonJarAuto) >= 1;
            if (autoable || model.oldDouble)
            {
                model.autoChallenge = !model.autoChallenge;
            }
            else
            {
                var needLevel = vipModel.GetPrivilegeVipLv(VipPrivilegeType.DemonJarAuto, 0);
                SysNotifyMgr.Instance.ShowTip("DemonJarAutoVip", needLevel);
            }
        }
        private void SetDoubleChallenge()
        {
            var candouble = vipModel.GetVipPrivilegeCnt(VipPrivilegeType.DemonJarDouble) >= 1;
            if (candouble)
            {
                model.RequestSetDoubleAward(!model.isDoubleAward);
            }
            else
            {
                var needLevel = vipModel.GetPrivilegeVipLv(VipPrivilegeType.DemonJarDouble, 0);
                SysNotifyMgr.Instance.ShowTip("DemonJarDoubleVip", needLevel);
            }
        }
        private void ViewLog()
        {
            WindowCenter.Instance.Open<DemonJarAutoChallengeLogWin>();
        }
        private void DisplayAutoChallenge()
        {
            m_AutoChallenge.isOn = model.autoChallenge;
        }
        private void DisplayDoubleChallenge()
        {
            m_DoubleChallenge.isOn = model.isDoubleAward;
        }
    }
}
System/FindPrecious/DemonJarAutoDoubleSettingWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5916d9cbfc9a60446b98ea2c009dde97
timeCreated: 1542074967
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FindPrecious/DemonJarModel.cs
@@ -7,21 +7,23 @@
using System.Collections.Generic;
using System;
using TableConfig;
using LitJson;
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    public class DemonJarModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, ISwitchAccount, IPlayerLoginOk
    public class DemonJarModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, ISwitchAccount, IPlayerLoginOk
    {
        public const int TOTALTIME_LIMIT = 5;
        public const int DEMONJAR_SINGLEMAPID = 52020;
        public const int DEMONJAR_MAPID = 52010;
        public const int DEMONJAR_REDPOINTID = 77001;
        public Redpoint redpoint = new Redpoint(FindPreciousModel.LOOTPRECIOUs_REDPOINTID, DEMONJAR_REDPOINTID);
        public bool oldDouble = false;
        bool m_IsDoubleAward = false;
        public bool isDoubleAward {
@@ -39,8 +41,23 @@
            }
        }
        public bool doubleToKillLowerBossHint { get; set; }
        bool m_AutoChallenge = false;
        public bool autoChallenge {
            get { return m_AutoChallenge; }
            set {
                if (m_AutoChallenge != value)
                {
                    m_AutoChallenge = value;
                    if (autoChallengeChangeEvent != null)
                    {
                        autoChallengeChangeEvent();
                    }
                }
            }
        }
        public int autoChallengeBoss { get; set; }
        public bool doubleToKillLowerBossHint { get; set; }
        public bool lockSelectedBoss = false;
        int m_SelectedBoss = 0;
@@ -66,15 +83,17 @@
        public event Action<int> bossSelectedEvent;
        public event Action<int> participantChangeEvent;
        public event Action doubleAwardChangeEvent;
        public event Action autoChallengeChangeEvent;
        List<int> sortedBossIds = new List<int>();
        Dictionary<int, DemonJarBossData> demonBosses = new Dictionary<int, DemonJarBossData>();
        Dictionary<int, int> lineToBoss = new Dictionary<int, int>();
        List<AutoChallengeLog> autoChallengeLogs = new List<AutoChallengeLog>();
        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        TreasureSoulModel treasureSoulModel { get { return ModelCenter.Instance.GetModel<TreasureSoulModel>(); } }
        public override void Init()
@@ -117,11 +136,13 @@
            var bossId = GetLatestUnLockBoss();
            AutoSubscribeLastUnLockBoss(bossId);
            ParseLocalSaveAutoChallengeLogs();
        }
        public void OnSwitchAccount()
        {
            doubleToKillLowerBossHint = true;
            autoChallenge = false;
        }
        public bool TryGetBossData(int _bossId, out DemonJarBossData _data)
@@ -250,6 +271,58 @@
            }
            return records;
        }
        public void UpdateAutoChallengeLogs()
        {
            autoChallengeLogs.Sort(AutoChallengeLog.SortPredicate);
        }
        private void ParseLocalSaveAutoChallengeLogs()
        {
            autoChallengeLogs.Clear();
            var localSaves = LocalSave.GeStringArray(StringUtility.Contact("DemonJarAutoChallengeLog_", PlayerDatas.Instance.PlayerId));
            if (localSaves != null)
            {
                for (var i = 0; i < localSaves.Length; i++)
                {
                    autoChallengeLogs.Add(JsonMapper.ToObject<AutoChallengeLog>(localSaves[i]));
                }
            }
        }
        public void AddAutoChallengeLog(int bossId, bool isDouble, int rank)
        {
            var newLog = new AutoChallengeLog()
            {
                bossId = bossId,
                isDouble = isDouble,
                rank = rank,
                time = TimeUtility.ServerNow
            };
            autoChallengeLogs.Add(newLog);
            for (var i = autoChallengeLogs.Count - 1; i >= 0; i--)
            {
                var log = autoChallengeLogs[i];
                if ((TimeUtility.ServerNow - log.time).TotalDays > 2)
                {
                    autoChallengeLogs.RemoveAt(i);
                }
            }
            var jsons = new string[autoChallengeLogs.Count];
            for (var i = 0; i < autoChallengeLogs.Count; i++)
            {
                jsons[i] = JsonMapper.ToJson(autoChallengeLogs[i]);
            }
            LocalSave.SetStringArray(StringUtility.Contact("DemonJarAutoChallengeLog_", PlayerDatas.Instance.PlayerId), jsons);
        }
        public List<AutoChallengeLog> GetAutoChallengeLogs()
        {
            return new List<AutoChallengeLog>(autoChallengeLogs);
        }
        public void UpdateDemonJarSoul()
@@ -430,6 +503,29 @@
            }
        }
        public struct AutoChallengeLog
        {
            public int bossId;
            public DateTime time;
            public bool isDouble;
            public int rank;
            public AutoChallengeLog(string dateTime)
            {
                this.bossId = 1000000;
                DateTime.TryParse("", out time);
                this.isDouble = true;
                this.rank = 1;
            }
            public static int SortPredicate(AutoChallengeLog lhs, AutoChallengeLog rhs)
            {
                return lhs.time < rhs.time ? -1 : 1;
            }
        }
    }
    public class DemonJarBossData
@@ -449,6 +545,8 @@
        }
    }
}
System/FindPrecious/DemonJarWin.cs
@@ -12,7 +12,6 @@
namespace Snxxz.UI
{
    public class DemonJarWin : Window
    {
        public static bool guideChallenge = false;
@@ -29,11 +28,13 @@
        [SerializeField] ToggleButton m_Subscribe;
        [SerializeField] RectTransform m_ContainerDouble;
        [SerializeField] ToggleButton m_ToggleDouble;
        [SerializeField] Button m_BtnAutoAndDouble;
        [SerializeField] Text m_AutoAndDoubleTitle;
        DemonJarModel model { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        int enterTimes = 0;
        int totalTimes = 0;
@@ -48,7 +49,7 @@
            m_KillRecord.AddListener(ShowSkillRecord);
            m_Subscribe.AddListener(SwitchSubscribeBoss);
            m_BuyTimes.AddListener(BuyTimes);
            m_ToggleDouble.AddListener(SwitchDoubleAward);
            m_BtnAutoAndDouble.AddListener(OpenAutoDuoubleSettingWin);
        }
        protected override void OnPreOpen()
@@ -58,7 +59,7 @@
            m_Times.text = StringUtility.Contact(totalTimes - enterTimes, "/", DemonJarModel.TOTALTIME_LIMIT);
            OnRemaintimeUpdate(DemonJarModel.DEMONJAR_MAPID);
            ModelCenter.Instance.GetModel<MapModel>().RequestQueryMapLineState(DemonJarModel.DEMONJAR_MAPID);
            mapModel.RequestQueryMapLineState(DemonJarModel.DEMONJAR_MAPID);
        }
        protected override void OnAfterOpen()
@@ -69,6 +70,7 @@
            dungeonModel.countRemainTimeChangeEvent += OnRemaintimeUpdate;
            dungeonModel.updateDungeonBuyCnt += OnBuyTimesOk;
            model.doubleAwardChangeEvent += OnDoubleAwardChange;
            model.autoChallengeChangeEvent += OnAutoChallengeChange;
        }
        protected override void OnPreClose()
@@ -80,6 +82,7 @@
            dungeonModel.countRemainTimeChangeEvent -= OnRemaintimeUpdate;
            dungeonModel.updateDungeonBuyCnt -= OnBuyTimesOk;
            model.doubleAwardChangeEvent -= OnDoubleAwardChange;
            model.autoChallengeChangeEvent -= OnAutoChallengeChange;
        }
        protected override void OnAfterClose()
@@ -92,6 +95,7 @@
            ShowBosses();
            model.lockSelectedBoss = false;
            DisplayAutoAndDoubleTitle();
            CheckTaskGuide();
            CheckAchievementGuideByTimes();
            CheckAchievementGuideKillBoss();
@@ -134,15 +138,6 @@
            m_SurpassLevel.gameObject.SetActive(npcDropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > npcDropConfig.MaxLV);
            m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
            var demonJarConfig = Config.Instance.Get<DemonJarConfig>(model.selectedBoss);
            var doubleShowable = demonJarConfig.CanEnterTimes == 0;
            m_ContainerDouble.gameObject.SetActive(doubleShowable);
            if (doubleShowable)
            {
                m_ToggleDouble.isOn = model.isDoubleAward;
            }
            m_BossIntroduce.Display(model.selectedBoss, true);
            m_Bosses.Init(bosses);
            m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));
@@ -184,32 +179,37 @@
            m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
        }
        private void SwitchDoubleAward()
        private void OpenAutoDuoubleSettingWin()
        {
            var vipModel = ModelCenter.Instance.GetModel<VipModel>();
            var privilege = vipModel.GetVipPrivilegeCnt(VipPrivilegeType.DemonJarDouble) == 1;
            if (privilege)
            var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
            if (dataMapId == DemonJarModel.DEMONJAR_MAPID)
            {
                var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
                if (dataMapId == DemonJarModel.DEMONJAR_MAPID)
                {
                    SysNotifyMgr.Instance.ShowTip("CantChangeInDemon");
                }
                else
                {
                    model.RequestSetDoubleAward(!model.isDoubleAward);
                }
                SysNotifyMgr.Instance.ShowTip("CantChangeInDemon");
            }
            else
            {
                var vipLevel = vipModel.GetPrivilegeVipLv(VipPrivilegeType.DemonJarDouble, 0);
                SysNotifyMgr.Instance.ShowTip("DemonJarDoubleVip", vipLevel);
                WindowCenter.Instance.Open<DemonJarAutoDoubleSettingWin>();
            }
        }
        private void OnDoubleAwardChange()
        {
            m_ToggleDouble.isOn = model.isDoubleAward;
            DisplayAutoAndDoubleTitle();
        }
        private void OnAutoChallengeChange()
        {
            DisplayAutoAndDoubleTitle();
        }
        private void DisplayAutoAndDoubleTitle()
        {
            var config = Config.Instance.Get<DemonJarConfig>(model.selectedBoss);
            var doubleAllow = config.CanEnterTimes == 0;
            var doubleString = UIHelper.AppendStringColor(model.isDoubleAward && doubleAllow ? TextColType.Green : TextColType.NavyBrown, Language.Get("DemonJarDoubleWord"), true);
            var autoString = UIHelper.AppendStringColor(model.autoChallenge ? TextColType.Green : TextColType.NavyBrown, Language.Get("DemonJarAutoWord"), true);
            m_AutoAndDoubleTitle.text = StringUtility.Contact(autoString, "/", doubleString);
        }
        private void GotoKillBoss()
@@ -391,12 +391,7 @@
            var demonJarConfig = Config.Instance.Get<DemonJarConfig>(model.selectedBoss);
            m_RewardDescription.text = Language.Get(demonJarConfig.RewardDescription);
            var doubleShowable = demonJarConfig.CanEnterTimes == 0;
            m_ContainerDouble.gameObject.SetActive(doubleShowable);
            if (doubleShowable)
            {
                m_ToggleDouble.isOn = model.isDoubleAward;
            }
            DisplayAutoAndDoubleTitle();
        }
        private void CheckAchievementGuideByTimes()
System/FindPrecious/FindPreciousBossRebornBehaviour.cs
@@ -59,15 +59,24 @@
        {
            if (model.currentBossNotify != 0)
            {
                m_ContainerBossReborn.gameObject.SetActive(true);
                var bossId = model.currentBossNotify;
                var config = Config.Instance.Get<NPCConfig>(bossId);
                if (config != null)
                var type = model.GetBossFindPreciousType(bossId);
                if (type == FindPreciousType.DemonJar && AutoGotoSkillDemonJarBoss(bossId))
                {
                    m_BossIcon.SetSprite(config.HeadPortrait);
                    m_BossName.text = config.charName;
                    m_BossLevel.text = Language.Get("FindPrecious_11", config.NPCLV);
                    m_ContainerBossReborn.gameObject.SetActive(false);
                    ReportConfirmBossRebornNotify();
                }
                else
                {
                    m_ContainerBossReborn.gameObject.SetActive(true);
                    var config = Config.Instance.Get<NPCConfig>(bossId);
                    if (config != null)
                    {
                        m_BossIcon.SetSprite(config.HeadPortrait);
                        m_BossName.text = config.charName;
                        m_BossLevel.text = Language.Get("FindPrecious_11", config.NPCLV);
                    }
                }
            }
            else
@@ -118,6 +127,49 @@
            }
        }
        private bool AutoGotoSkillDemonJarBoss(int bossId)
        {
            if (!demonJarModel.autoChallenge)
            {
                return false;
            }
            var surplusTimes = demonJarModel.GetSurplusTimes();
            var needTimes = demonJarModel.isDoubleAward ? 2 : 1;
            if (surplusTimes < needTimes)
            {
                return false;
            }
            var mapId = PlayerDatas.Instance.baseData.MapID;
            var mapConfig = Config.Instance.Get<MapConfig>(mapId);
            if (mapConfig.MapFBType != (int)MapType.OpenCountry)
            {
                return false;
            }
            if (PlayerDatas.Instance.extersion.bossState == 1)
            {
                return false;
            }
            if (PlayerDatas.Instance.extersion.pkState == 1)
            {
                return false;
            }
            if (WindowCenter.Instance.IsOpen("DemonJarWin") || WindowCenter.Instance.IsOpen("DemonJarAutoDoubleSettingWin"))
            {
                return false;
            }
            var config = Config.Instance.Get<DemonJarConfig>(bossId);
            dungeonModel.SingleChallenge(DemonJarModel.DEMONJAR_MAPID, config.LineID);
            demonJarModel.autoChallengeBoss = bossId;
            return true;
        }
        private void GotoKillDemonJarBoss(int _bossId)
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
Utility/EnumHelper.cs
@@ -1113,6 +1113,7 @@
    DemonJarDouble = 28,
    BindJadeWheel=30,
    PrayForDrug = 31,
    DemonJarAuto=32,
}