少年修仙传客户端代码仓库
client_linchunjie
2018-11-19 db18e749c47e0e7e994c2a79284293af5a6ea393
4736 【1.3】【前端】神兵系统修改
3个文件已修改
4个文件已添加
675 ■■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/A5_Function/CA555_tagCMGodWeaponPlus.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/AutoHammerWin.cs 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/AutoHammerWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponPreviewWin.cs 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponPreviewWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/MagicianModel.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/MagicianWin.cs 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/A5_Function/CA555_tagCMGodWeaponPlus.cs
@@ -1,37 +1,24 @@
using UnityEngine;
using System.Collections;
// A5 55 神兵升级 #tagCMGodWeaponPlus
public class CA555_tagCMGodWeaponPlus : GameNetPackBasic {
    public uint WeaponType;    // 神兵类型
    public uint ItemID;    //消耗的物品ID
    public CA555_tagCMGodWeaponPlus () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA555;
    }
    public override void WriteToBytes () {
        WriteBytes (WeaponType, NetDataType.DWORD);
        WriteBytes (ItemID, NetDataType.DWORD);
    }
}
using UnityEngine;
using System.Collections;
// A5 55 神兵升级 #tagCMGodWeaponPlus
public class CA555_tagCMGodWeaponPlus : GameNetPackBasic {
    public uint WeaponType;    // 神兵类型
    public uint ItemID;    //消耗的物品ID
    public byte ItemCount;    //消耗个数,默认1
    public byte IsAutoBuy;    //是否自动购买,默认0
    public CA555_tagCMGodWeaponPlus () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA555;
    }
    public override void WriteToBytes () {
        WriteBytes (WeaponType, NetDataType.DWORD);
        WriteBytes (ItemID, NetDataType.DWORD);
        WriteBytes (ItemCount, NetDataType.BYTE);
        WriteBytes (IsAutoBuy, NetDataType.BYTE);
    }
}
System/Role/AutoHammerWin.cs
New file
@@ -0,0 +1,178 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, November 19, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class AutoHammerWin : Window
    {
        [SerializeField] Text m_Level;
        [SerializeField] Button m_Reduce;
        [SerializeField] Button m_Add;
        [SerializeField] Text m_TargetLevel;
        [SerializeField] Text m_Cost;
        [SerializeField] Button m_Confirm;
        [SerializeField] Button m_Cancel;
        [SerializeField] Button m_Close;
        [SerializeField] Button m_OpenNumkeyboard;
        [SerializeField] NumKeyBoard m_NumKeyBoard;
        MagicianModel model
        {
            get { return ModelCenter.Instance.GetModel<MagicianModel>(); }
        }
        public static event Action<bool> onConfirm;
        public static int selectGodWeaponType = 1;
        private int targetLevel = 0;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Reduce.AddListener(Reduce);
            m_Add.AddListener(Add);
            m_Confirm.AddListener(Confirm);
            m_Cancel.AddListener(CloseClick);
            m_Close.AddListener(CloseClick);
            m_OpenNumkeyboard.AddListener(OpenNumkeyboard);
            m_NumKeyBoard.onValueChange.AddListener(OnValueChange);
            m_NumKeyBoard.onConfirm.AddListener(OnNumConfirm);
        }
        protected override void OnPreOpen()
        {
            var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType);
            if (godWeaponInfo != null)
            {
                var configs = GodWeaponConfig.GetConfigs(selectGodWeaponType);
                var maxLevel = configs[configs.Count - 1].Lv;
                m_NumKeyBoard.min = (uint)godWeaponInfo.level + 1;
                m_NumKeyBoard.max = (uint)maxLevel;
                targetLevel = (int)m_NumKeyBoard.min;
            }
            m_NumKeyBoard.gameObject.SetActive(false);
            DisplayLevel();
            DisplayTargetLevel();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void DisplayLevel()
        {
            GodWeaponInfo godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType);
            if (godWeaponInfo != null)
            {
                var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1);
                if (config != null)
                {
                    m_Level.text = StringUtility.Contact(config.Name, ":", Language.Get("GodWeaponLevel", godWeaponInfo.level));
                }
            }
        }
        private void DisplayTargetLevel()
        {
            m_TargetLevel.text = targetLevel.ToString();
            DisplayCost();
        }
        private void Add()
        {
            if (targetLevel + 1 <= m_NumKeyBoard.max)
            {
                targetLevel += 1;
                DisplayTargetLevel();
            }
        }
        private void Reduce()
        {
            if (targetLevel - 1 >= m_NumKeyBoard.min)
            {
                targetLevel -= 1;
                DisplayTargetLevel();
            }
        }
        private void OpenNumkeyboard()
        {
            if (!m_NumKeyBoard.gameObject.activeSelf)
            {
                m_NumKeyBoard.gameObject.SetActive(true);
            }
        }
        private void DisplayCost()
        {
        }
        private void Confirm()
        {
            if (targetLevel >= m_NumKeyBoard.max)
            {
                targetLevel = (int)m_NumKeyBoard.max;
            }
            else if (targetLevel <= m_NumKeyBoard.min)
            {
                targetLevel = (int)m_NumKeyBoard.min;
            }
            model.autoHammerLevel = targetLevel;
            if (onConfirm != null)
            {
                onConfirm(true);
            }
        }
        private void OnNumConfirm(bool isOk)
        {
            m_NumKeyBoard.gameObject.SetActive(false);
        }
        private void OnValueChange()
        {
            var level = targetLevel;
            int.TryParse(m_NumKeyBoard.Value, out level);
            if (level >= m_NumKeyBoard.max)
            {
                level = (int)m_NumKeyBoard.max;
            }
            else if (level <= m_NumKeyBoard.min)
            {
                level = (int)m_NumKeyBoard.min;
            }
            targetLevel = level;
            DisplayTargetLevel();
        }
    }
}
System/Role/AutoHammerWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2a1a00bd8374c7f45bcbf4d4564293f0
timeCreated: 1542593303
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Role/GodWeaponPreviewWin.cs
New file
@@ -0,0 +1,98 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, November 19, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
    public class GodWeaponPreviewWin : Window
    {
        [SerializeField] Text m_Stage;
        [SerializeField] Text m_RequireLevel;
        [SerializeField] Button[] m_SelectStages;
        [SerializeField] Image m_Select;
        [SerializeField] RawImage m_RawModel;
        [SerializeField] Button m_Close;
        int selectStage = 1;
        public static int selectGodWeaponType = 1;
        MagicianModel model
        {
            get { return ModelCenter.Instance.GetModel<MagicianModel>(); }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Close.onClick.AddListener(CloseClick);
            for (int i = 0; i < m_SelectStages.Length; i++)
            {
                var index = i + 1;
                m_SelectStages[i].AddListener(() =>
                {
                    OnSelectStage(index);
                });
            }
        }
        protected override void OnPreOpen()
        {
            OnSelectStage(1);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void OnSelectStage(int index)
        {
            m_Select.transform.localPosition = m_SelectStages[index - 1].transform.localPosition;
            selectStage = index;
            DisplayModel();
            DisplayStage();
            DisplayRequireLevel();
        }
        private void DisplayStage()
        {
            var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1);
            m_Stage.text = StringUtility.Contact(config.Name, Language.Get("GodWeaponStage", selectStage));
        }
        private void DisplayRequireLevel()
        {
        }
        private void DisplayModel()
        {
        }
    }
}
System/Role/GodWeaponPreviewWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6971b7c6ed2acd441aa0ff78f1998dcd
timeCreated: 1542616197
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Role/MagicianModel.cs
@@ -70,6 +70,10 @@
        public Dictionary<int, string> godWeaponIcons { get; private set; }
        public Dictionary<int, Dictionary<int, int>> godWeaponSkillDict = new Dictionary<int, Dictionary<int, int>>();
        Dictionary<int, List<GodWeaponCondition>> godWeaponConditions = new Dictionary<int, List<GodWeaponCondition>>();
        public List<int> godWeaponSorts = new List<int>();
        int[] autoHammerExpArea { get; set; }
        int[] autoHammerCount { get; set; }
        int m_SelectType = 0;
        public int selectType
@@ -90,6 +94,8 @@
        public int selectItemIndex = 0;
        public int gotoType = 0;
        public int autoHammerLevel { get; set; }
        void ParseConfig()
        {
            godWeaponTypes = GodWeaponConfig.GetGodWeaponType();
@@ -163,6 +169,16 @@
                        level = condition[1],
                    });
                }
            }
            var sortConfig = Config.Instance.Get<FuncConfigConfig>("GodWeaponSort");
            godWeaponSorts.AddRange(ConfigParse.GetMultipleStr<int>(sortConfig.Numerical1));
            var autoHammerConfig = Config.Instance.Get<FuncConfigConfig>("GodWeaponAutoHammer");
            if (autoHammerConfig != null)
            {
                autoHammerExpArea = ConfigParse.GetMultipleStr<int>(autoHammerConfig.Numerical1);
                autoHammerCount = ConfigParse.GetMultipleStr<int>(autoHammerConfig.Numerical2);
            }
        }
@@ -252,10 +268,12 @@
                }
                return;
            }
            CA555_tagCMGodWeaponPlus _pak = new CA555_tagCMGodWeaponPlus();
            _pak.WeaponType = (uint)type;
            _pak.ItemID = (uint)itemId;
            GameNetSystem.Instance.SendInfo(_pak);
            CA555_tagCMGodWeaponPlus pak = new CA555_tagCMGodWeaponPlus();
            pak.WeaponType = (uint)type;
            pak.ItemID = (uint)itemId;
            pak.ItemCount = 1;
            pak.IsAutoBuy = 0;
            GameNetSystem.Instance.SendInfo(pak);
        }
        public event Action godWeaponUpdate;
@@ -289,6 +307,10 @@
                if (WindowCenter.Instance.IsOpen<MagicianWin>()
                    && !NewBieCenter.Instance.inGuiding)
                {
                    if (WindowCenter.Instance.IsOpen<GodWeaponPreviewWin>())
                    {
                        WindowCenter.Instance.CloseImmediately<GodWeaponPreviewWin>();
                    }
                    ActivateShow.GodWeaponActivate(_type, _nowLv, _beforeLv);
                }
            }
@@ -375,6 +397,36 @@
            return true;
        }
        public int GetAutoHammerCount(int type)
        {
            ulong totalExp = 0;
            var godWeaponInfo = GetGodWeaponInfo(type);
            if (godWeaponInfo == null || autoHammerExpArea == null || autoHammerCount == null)
            {
                return 1;
            }
            totalExp += godWeaponInfo.exp;
            for (int i = 1; i < godWeaponInfo.level; i++)
            {
                var config = GodWeaponConfig.GetConfig(type, i);
                totalExp += (ulong)config.NeedExp;
            }
            var index = 0;
            for (int i = 0; i < autoHammerExpArea.Length; i++)
            {
                if (totalExp < (ulong)autoHammerExpArea[i])
                {
                    index = i;
                    break;
                }
            }
            if (index < autoHammerCount.Length)
            {
                return autoHammerCount[index];
            }
            return autoHammerCount[autoHammerCount.Length - 1];
        }
        public bool ContainsCondition(int type)
        {
            return godWeaponConditions.ContainsKey(type);
System/Role/MagicianWin.cs
@@ -15,11 +15,15 @@
        [SerializeField] ScrollerController m_GodWeaponController;
        [SerializeField] LongPressButton m_Hammer;
        [SerializeField] Text m_HammerLabel;
        [SerializeField] Button m_AutoHammer;
        [SerializeField] Text m_AutoHammerLabel;
        [SerializeField] Button m_Preview;
        [SerializeField] Text m_PropertyTitle;
        [SerializeField] Text m_CostItemTitle;
        [SerializeField] RectTransform m_ContainerUnlock;
        [SerializeField] RectTransform m_ContainerSlider;
        [SerializeField] IntensifySmoothSlider m_ExpSlider;
        [SerializeField] Text m_Exp;
        [SerializeField] PropertyBehaviour[] m_Propertys;
@@ -50,7 +54,40 @@
        }
        int selectItemCount = 0;
        bool moneyHammer = false;
        bool lockGodWeaponUpdate = false;
        bool lockItemUpdate = false;
        AutoHammerState m_LastAutoHammerState = AutoHammerState.None;
        AutoHammerState m_AutoHammerState = AutoHammerState.None;
        AutoHammerState autoHammerState
        {
            get { return m_AutoHammerState; }
            set
            {
                m_LastAutoHammerState = m_AutoHammerState;
                m_AutoHammerState = value;
                switch (m_AutoHammerState)
                {
                    case AutoHammerState.None:
                        OnExitAutoHammer();
                        break;
                    case AutoHammerState.Hammer:
                        OnHammer();
                        break;
                    case AutoHammerState.WaitAnimation:
                        break;
                    case AutoHammerState.WaitServer:
                        OnWaitServer();
                        break;
                }
                DisplayAutoHammerLabel();
            }
        }
        FunctionUnlockFlyObjectTarget flyObjectTarget;
        float waitServerTimer = 0f;
        const float WaitServerTime = 5.0f;
        static Dictionary<int, int> currentPropertyDict = new Dictionary<int, int>();
        static List<int> displayPropertys = new List<int>();
@@ -66,6 +103,8 @@
            m_GodWeaponController.OnRefreshCell += OnRefreshCell;
            m_Hammer.onClick.AddListener(Hammer);
            m_Hammer.onPress.AddListener(PressHammer);
            m_Preview.onClick.AddListener(Preview);
            m_AutoHammer.onClick.AddListener(AutoHammer);
            for (int i = 0; i < m_Items.Length; i++)
            {
                var index = i;
@@ -78,6 +117,12 @@
        protected override void OnPreOpen()
        {
            autoHammerState = AutoHammerState.None;
            m_LastAutoHammerState = AutoHammerState.None;
            moneyHammer = false;
            lockGodWeaponUpdate = false;
            lockItemUpdate = false;
            DisplayGodWeaponTypes();
            if (!HandleAchievement())
@@ -102,9 +147,11 @@
            model.onSelectUpdate += OnSelectUpdate;
            model.godWeaponUpdate += GodWeaponUpdate;
            packModel.RefreshItemCountAct += RefreshItemCountAct;
            WindowCenter.Instance.windowBeforeOpenEvent += WindowBeforeOpenEvent;
            WindowCenter.Instance.windowBeforeCloseEvent += WindowBeforeCloseEvent;
            ActivateShow.prepareFlySkillEvent += PrepareFlySkillEvent;
            ActivateShow.complelteFlySkillEvent += ComplelteFlySkillEvent;
            AutoHammerWin.onConfirm += OnAutoHammerConfirm;
        }
        protected override void OnAfterOpen()
@@ -119,14 +166,34 @@
        protected override void OnPreClose()
        {
            autoHammerState = AutoHammerState.None;
            SysNotifyMgr.Instance.sysNotifyEvent -= SysNotifyEvent;
            model.onSelectUpdate -= OnSelectUpdate;
            model.godWeaponUpdate -= GodWeaponUpdate;
            packModel.RefreshItemCountAct -= RefreshItemCountAct;
            WindowCenter.Instance.windowBeforeOpenEvent -= WindowBeforeOpenEvent;
            WindowCenter.Instance.windowBeforeCloseEvent -= WindowBeforeCloseEvent;
            ActivateShow.prepareFlySkillEvent -= PrepareFlySkillEvent;
            ActivateShow.complelteFlySkillEvent -= ComplelteFlySkillEvent;
            AutoHammerWin.onConfirm -= OnAutoHammerConfirm;
            UI3DTreasureExhibition.Instance.StopShow();
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            switch (autoHammerState)
            {
                case AutoHammerState.Hammer:
                    break;
                case AutoHammerState.WaitServer:
                    waitServerTimer += Time.deltaTime;
                    if (waitServerTimer >= WaitServerTime)
                    {
                        autoHammerState = AutoHammerState.Hammer;
                    }
                    break;
            }
        }
        #endregion
@@ -186,6 +253,25 @@
            if (window is RealmPropertyUpWin)
            {
                DisplayGodWeaponModel();
                if (autoHammerState == AutoHammerState.WaitAnimation)
                {
                    autoHammerState = AutoHammerState.Hammer;
                }
            }
            else if (window is GodWeaponPreviewWin)
            {
                DisplayGodWeaponModel();
            }
        }
        private void WindowBeforeOpenEvent(Window window)
        {
            if (window is RealmPropertyUpWin)
            {
                if (autoHammerState != AutoHammerState.None)
                {
                    autoHammerState = AutoHammerState.WaitAnimation;
                }
            }
        }
@@ -208,6 +294,15 @@
                {
                    OnSelectItem(GetItemIndex(model.selectType, model.selectItemIndex));
                }
                if (model.IsGodWeaponHammerItem(model.selectType, itemId))
                {
                    lockItemUpdate = false;
                    if (!moneyHammer && autoHammerState == AutoHammerState.WaitServer
                        && !lockItemUpdate && !lockGodWeaponUpdate)
                    {
                        autoHammerState = AutoHammerState.Hammer;
                    }
                }
            }
        }
@@ -220,12 +315,35 @@
            DisplaySelectItem();
            DisplayGodWeaponModel();
            m_GodWeaponController.m_Scorller.RefreshActiveCellViews();
            if (autoHammerState != AutoHammerState.None)
            {
                autoHammerState = AutoHammerState.None;
            }
        }
        private void GodWeaponUpdate()
        {
            m_GodWeaponController.m_Scorller.RefreshActiveCellViews();
            DisplayGodWeaponInfo(false);
            lockGodWeaponUpdate = false;
            if (!lockGodWeaponUpdate)
            {
                if (moneyHammer)
                {
                    if (autoHammerState == AutoHammerState.WaitServer)
                    {
                        autoHammerState = AutoHammerState.Hammer;
                    }
                }
                else
                {
                    if (!lockItemUpdate && autoHammerState == AutoHammerState.WaitServer)
                    {
                        autoHammerState = AutoHammerState.Hammer;
                    }
                }
            }
        }
        private void DisplayGodWeaponInfo(bool immediatly)
@@ -233,6 +351,9 @@
            bool active = model.IsGodWeaponUnlock(model.selectType);
            m_ContainerLock.gameObject.SetActive(!active);
            m_ContainerUnlock.gameObject.SetActive(active);
            m_ContainerSlider.gameObject.SetActive(active);
            m_AutoHammer.gameObject.SetActive(active);
            m_Hammer.gameObject.SetActive(active || model.SatisfyUnlockCondition(model.selectType));
            if (!active)
            {
                m_CostItemTitle.text = Language.Get("L1049");
@@ -243,6 +364,7 @@
            }
            else
            {
                m_ContainerProgress.gameObject.SetActive(false);
                m_CostItemTitle.text = Language.Get("L1052");
                m_PropertyTitle.text = Language.Get("L1051");
                m_HammerLabel.text = Language.Get("L1131");
@@ -509,11 +631,14 @@
        {
            if (m_GodWeaponController.GetNumberOfCells(m_GodWeaponController.m_Scorller) == 0)
            {
                var list = model.godWeaponTypes;
                var list = model.godWeaponSorts;
                m_GodWeaponController.Refresh();
                for (int i = 0; i < list.Count; i++)
                {
                    m_GodWeaponController.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect);
                    if (model.godWeaponTypes.Contains(list[i]))
                    {
                        m_GodWeaponController.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect);
                    }
                }
                m_GodWeaponController.Restart();
            }
@@ -608,6 +733,123 @@
            }
        }
        private void OnAutoHammerConfirm(bool isOk)
        {
            if (isOk && autoHammerState == AutoHammerState.None)
            {
                moneyHammer = true;
                autoHammerState = AutoHammerState.Hammer;
            }
        }
        private void AutoHammer()
        {
            if (autoHammerState != AutoHammerState.None)
            {
                autoHammerState = AutoHammerState.None;
            }
            else
            {
                var index = 0;
                if (model.IsGodWeaponMaxLevel(model.selectType))
                {
                    return;
                }
                if (ExistAnyHammerItem(model.selectType, out index))
                {
                    autoHammerState = AutoHammerState.Hammer;
                    moneyHammer = false;
                }
                else
                {
                    AutoHammerWin.selectGodWeaponType = model.selectType;
                    WindowCenter.Instance.Open<AutoHammerWin>();
                }
            }
        }
        private void OnHammer()
        {
            if (model.IsGodWeaponMaxLevel(model.selectType))
            {
                autoHammerState = AutoHammerState.None;
                return;
            }
            var index = 0;
            if (!moneyHammer)
            {
                if (!ExistAnyHammerItem(model.selectType, out index))
                {
                    autoHammerState = AutoHammerState.None;
                    return;
                }
                var items = model.GetLevelUpItemByType(model.selectType);
                CA555_tagCMGodWeaponPlus pak = new CA555_tagCMGodWeaponPlus();
                pak.ItemID = (uint)items[index];
                pak.WeaponType = (uint)model.selectType;
                pak.IsAutoBuy = 1;
                pak.ItemCount = 1;
                GameNetSystem.Instance.SendInfo(pak);
            }
            else
            {
            }
            lockGodWeaponUpdate = true;
            lockItemUpdate = true;
            autoHammerState = AutoHammerState.WaitServer;
        }
        private void DisplayAutoHammerLabel()
        {
            switch (autoHammerState)
            {
                case AutoHammerState.None:
                    m_AutoHammerLabel.text = "自动锤炼";
                    break;
                case AutoHammerState.Hammer:
                case AutoHammerState.WaitAnimation:
                case AutoHammerState.WaitServer:
                    m_AutoHammerLabel.text = "取消锤炼";
                    break;
            }
        }
        private void OnExitAutoHammer()
        {
            if (m_LastAutoHammerState != AutoHammerState.None)
            {
                DisplayExp(true);
            }
        }
        private void OnWaitServer()
        {
            waitServerTimer = 0f;
        }
        private void Preview()
        {
            GodWeaponPreviewWin.selectGodWeaponType = model.selectType;
            WindowCenter.Instance.Open<GodWeaponPreviewWin>();
        }
        bool ExistAnyHammerItem(int type, out int index)
        {
            var items = model.GetLevelUpItemByType(type);
            index = 0;
            for (int i = items.Length - 1; i >= 0; i--)
            {
                var count = packModel.GetItemCountByID(PackType.rptItem, items[i]);
                if (count > 0)
                {
                    index = i;
                    return true;
                }
            }
            return false;
        }
        bool HandleAchievement()
        {
            if (AchievementGoto.achievementType == AchievementGoto.GodWeapon)
@@ -631,6 +873,14 @@
            }
            return false;
        }
        enum AutoHammerState
        {
            None,
            Hammer,
            WaitAnimation,
            WaitServer,
        }
    }
}