少年修仙传客户端代码仓库
client_linchunjie
2019-01-07 238ed76859a29db4b8283b2610be8f5a0bccc470
Merge branch '【1.5】神兵修改'
2个文件已添加
15个文件已修改
981 ■■■■ 已修改文件
Core/GameEngine/Model/Config/GodWeaponEffectConfig.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/GodWeaponEffectConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/ActivateShow.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmPropertyUpWin.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponPreviewCell.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponPreviewCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponPreviewWin.cs 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/GodWeaponSkillBehaviour.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/MagicianModel.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/MagicianWin.cs 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/PropertyBehaviour.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/SkillBehaviour.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/SkillDetails.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/SkillDetailsWin.cs 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/FunctionUnlockFlyObject.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DModelExhibition.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/GodWeaponEffectConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, December 11, 2018
//    [  Date ]:           Monday, January 07, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -16,7 +16,12 @@
        public int level { get ; private set ; }
        public string effect { get ; private set; } 
        public int fightPower { get ; private set ; }
        public string attr { get ; private set; }
        public string attr { get ; private set; }
        public string icon { get ; private set; }
        public string skillName { get ; private set; }
        public Vector3 effectPosition { get ; private set; }
        public Vector3 effectAngles { get ; private set; }
        public Vector3 effectScale { get ; private set; }
        public override string getKey()
        {
@@ -36,7 +41,17 @@
            
                fightPower=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0; 
            
                attr = rawContents[5].Trim();
                attr = rawContents[5].Trim();
                icon = rawContents[6].Trim();
                skillName = rawContents[7].Trim();
                effectPosition=rawContents[8].Vector3Parse();
                effectAngles=rawContents[9].Vector3Parse();
                effectScale=rawContents[10].Vector3Parse();
            }
            catch (Exception ex)
            {
Core/GameEngine/Model/Config/GodWeaponEffectConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: c7a22e75f9a0eed49aed26e8171f8172
timeCreated: 1544496205
timeCreated: 1546827021
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/Realm/ActivateShow.cs
@@ -14,6 +14,7 @@
        public static int currentLv { get; private set; }
        public static int beforeLv { get; private set; }
        public static int godWeaponType { get; private set; }
        public static int godWeaponStage { get; private set; }
        public static int treasureSoulId { get; private set; }
        private static Dictionary<int, int> lastPropertyDict = new Dictionary<int, int>();
@@ -153,6 +154,7 @@
            activateType = ActivateFunc.GodWeaponEffect;
            currentLv = _level;
            godWeaponType = _type;
            godWeaponStage = stage;
            beforeLv = _beforeLevel;
            skills.Clear();
            propertyCompares.Clear();
@@ -363,7 +365,7 @@
        {
            if (prepareFlySkillEvent != null)
            {
                prepareFlySkillEvent(activateType, skills[0]);
                prepareFlySkillEvent(activateType, skills.Count > 0 ? skills[0] : 0);
            }
        }
System/Realm/RealmPropertyUpWin.cs
@@ -29,6 +29,7 @@
        [SerializeField] SkillBehaviour[] m_Skills;
        [SerializeField] RectTransform m_ContainerNewGotSkill;
        [SerializeField] SkillBehaviour m_NewGotSkill;
        [SerializeField] RectTransform m_NewGotSkillPoint;
        [SerializeField] RectTransform m_ContainerRealm;
        [SerializeField] RectTransform m_ContainerRealmUp;
        [SerializeField] RectTransform m_ContainerRealmActivity;
@@ -158,6 +159,7 @@
                    DisplayFightPower();
                    DisplayLv();
                    DisplayGodWeaponEffect();
                    DisplayNewGotSkill();
                    break;
            }
        }
@@ -230,17 +232,51 @@
        void DisplaySkill()
        {
            m_ContainerSkill.gameObject.SetActive(ActivateShow.skills.Count > 0);
            if (ActivateShow.skills.Count == 0)
            List<int> displaySkills;
            switch (ActivateShow.activateType)
            {
                case ActivateShow.ActivateFunc.GodWeapon:
                    var model = ModelCenter.Instance.GetModel<MagicianModel>();
                    displaySkills = model.TryGetDisplaySkillLevels(ActivateShow.godWeaponType);
                    break;
                default:
                    displaySkills = new List<int>();
                    displaySkills.AddRange(ActivateShow.skills);
                    break;
            }
            m_ContainerSkill.gameObject.SetActive(displaySkills.Count > 0);
            if (displaySkills.Count == 0)
            {
                return;
            }
            for (int i = 0; i < m_Skills.Length; i++)
            {
                if (i < ActivateShow.skills.Count)
                if (i < displaySkills.Count)
                {
                    m_Skills[i].gameObject.SetActive(true);
                    m_Skills[i].Display(ActivateShow.skills[i]);
                    switch (ActivateShow.activateType)
                    {
                        case ActivateShow.ActivateFunc.GodWeapon:
                            var model = ModelCenter.Instance.GetModel<MagicianModel>();
                            Dictionary<int, int> dict;
                            if (model.TryGetGodWeaponSkills(ActivateShow.godWeaponType, out dict)
                                && dict.ContainsKey(displaySkills[i]))
                            {
                                m_Skills[i].Display(dict[displaySkills[i]]);
                            }
                            else
                            {
                                var config = GodWeaponEffectConfig.Get(ActivateShow.godWeaponType, displaySkills[i]);
                                if (config != null)
                                {
                                    m_Skills[i].DisplayGodWeaponEffect(config);
                                }
                            }
                            break;
                        default:
                            m_Skills[i].Display(displaySkills[i]);
                            break;
                    }
                }
                else
                {
@@ -269,13 +305,33 @@
        void DisplayNewGotSkill()
        {
            m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0);
            if (ActivateShow.skills.Count == 0)
            switch (ActivateShow.activateType)
            {
                return;
                case ActivateShow.ActivateFunc.GodWeaponEffect:
                    {
                        m_ContainerNewGotSkill.gameObject.SetActive(true);
                        var model = ModelCenter.Instance.GetModel<MagicianModel>();
                        var requireLevel = model.GetGodWeaponStageRequireLevel(ActivateShow.godWeaponType, ActivateShow.godWeaponStage);
                        var config = GodWeaponEffectConfig.Get(ActivateShow.godWeaponType, requireLevel);
                        if (config != null)
                        {
                            m_NewGotSkill.DisplayGodWeaponEffect(config);
                            PrepareFly(config);
                        }
                    }
                    break;
                default:
                    {
                        m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0);
                        if (ActivateShow.skills.Count == 0)
                        {
                            return;
                        }
                        m_NewGotSkill.DisplayNewGot(ActivateShow.skills[0]);
                        PrepareFly(ActivateShow.skills[0]);
                    }
                    break;
            }
            m_NewGotSkill.DisplayNewGot(ActivateShow.skills[0]);
            PrepareFly(ActivateShow.skills[0]);
        }
        void DisplayTreasureSoul()
@@ -309,6 +365,23 @@
            flyObject.gameObject.SetActive(false);
        }
        void PrepareFly(GodWeaponEffectConfig config)
        {
            ActivateShow.PrepareSkillFly();
            var instance = UIUtility.CreateWidget("SkillUnlockFlyObject", "SkillUnlockFlyObject");
            instance.transform.SetParentEx(m_ContainerNewGotFly, Vector3.zero, Quaternion.identity, Vector3.one);
            flyObject = instance.GetComponent<FunctionUnlockFlyObject>();
            flyObject.SetContent(config);
            flyObject.gameObject.SetActive(false);
        }
        void SetFlyPosition()
        {
            var worldpos = m_NewGotSkillPoint.transform.TransformPoint(Vector3.zero);
            var localpos = transform.InverseTransformPoint(worldpos);
            m_ContainerNewGotFly.transform.localPosition = localpos;
        }
        private bool startFly = false;
        private void OnClickClose()
        {
@@ -333,6 +406,16 @@
                        CloseClick();
                    }
                    break;
                case ActivateShow.ActivateFunc.GodWeaponEffect:
                    {
                        if (startFly)
                        {
                            return;
                        }
                        startFly = true;
                        StartFlySkill();
                    }
                    break;
                default:
                    CloseClick();
                    break;
@@ -341,6 +424,7 @@
        private void StartFlySkill()
        {
            SetFlyPosition();
            if (flyObject != null)
            {
                flyObject.gameObject.SetActive(true);
System/Role/GodWeaponPreviewCell.cs
New file
@@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class GodWeaponPreviewCell : CellView
    {
        [SerializeField] Image m_Select;
        [SerializeField] Text m_GodWeaponName;
        [SerializeField] FunctionButtonConfig buttonConfig;
        public void Display(int type)
        {
            var config = GodWeaponConfig.GetConfig(type, 1);
            m_GodWeaponName.text = config.Name;
            m_Select.SetSprite(GodWeaponPreviewWin.selectGodWeaponType == type ?
                buttonConfig.selected.iconKey : buttonConfig.normal.iconKey);
            m_GodWeaponName.color = GodWeaponPreviewWin.selectGodWeaponType == type ?
                buttonConfig.selected.fontColor : buttonConfig.normal.fontColor;
            m_GodWeaponName.fontSize = GodWeaponPreviewWin.selectGodWeaponType == type ?
                buttonConfig.selected.fontSize : buttonConfig.normal.fontSize;
        }
    }
}
System/Role/GodWeaponPreviewCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c6e8c76f636861144aec0e58c4e7387c
timeCreated: 1546829434
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Role/GodWeaponPreviewWin.cs
@@ -15,13 +15,19 @@
    [XLua.Hotfix]
    public class GodWeaponPreviewWin : Window
    {
        [SerializeField] Text m_Stage;
        [SerializeField] ScrollerController m_Controller;
        [SerializeField] Text m_RequireLevel;
        [SerializeField] Button[] m_SelectStages;
        [SerializeField] Transform[] m_EquipSigns;
        [SerializeField] Image m_Select;
        [SerializeField] RawImage m_RawModel;
        [SerializeField] PropertyBehaviour[] m_Propertys;
        [SerializeField] Text m_FightPower;
        [SerializeField] Text m_EffectName;
        [SerializeField] RawImage m_RawEffect;
        [SerializeField] RectTransform m_ContainerFuncs;
        [SerializeField] Button m_Equip;
        [SerializeField] Button m_Putoff;
        [SerializeField] Button m_Close;
        int selectStage = 1;
@@ -51,13 +57,15 @@
                    }
                });
            }
            m_Controller.OnRefreshCell += OnRefreshCell;
            m_Equip.onClick.AddListener(Equip);
            m_Putoff.onClick.AddListener(PutOff);
        }
        protected override void OnPreOpen()
        {
            var defaultStage = model.GetGodWeaponStage(selectGodWeaponType);
            defaultStage = Mathf.Clamp(defaultStage + 1, 1, 3);
            OnSelectStage(defaultStage);
            Display();
            DisplayGodWeaponTypes();
        }
        protected override void OnAfterOpen()
@@ -67,6 +75,7 @@
        protected override void OnPreClose()
        {
            UI3DModelExhibition.Instance.StopShow();
            UI3DModelExhibition.InstanceClone1.StopShow();
        }
        protected override void OnAfterClose()
@@ -74,21 +83,61 @@
        }
        #endregion
        void Display()
        {
            var defaultStage = model.GetGodWeaponStage(selectGodWeaponType);
            defaultStage = Mathf.Clamp(defaultStage + 1, 1, 3);
            OnSelectStage(defaultStage);
            DisplayEquip();
        }
        void DisplayGodWeaponTypes()
        {
            if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) == 0)
            {
                var list = model.godWeaponSorts;
                m_Controller.Refresh();
                for (int i = 0; i < list.Count; i++)
                {
                    if (model.godWeaponEffectTypes.Contains(list[i]))
                    {
                        m_Controller.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect);
                    }
                }
                m_Controller.Restart();
            }
            else
            {
                m_Controller.m_Scorller.RefreshActiveCellViews();
            }
        }
        private void OnRefreshCell(ScrollerDataType type, CellView cell)
        {
            var godWeaponCell = cell as GodWeaponPreviewCell;
            godWeaponCell.Display(cell.index);
        }
        private void OnGodWeaponSelect(CellView cell)
        {
            var type = cell.index;
            if (type != selectGodWeaponType)
            {
                selectGodWeaponType = type;
                m_Controller.m_Scorller.RefreshActiveCellViews();
                Display();
            }
        }
        private void OnSelectStage(int index)
        {
            m_Select.transform.localPosition = m_SelectStages[index - 1].transform.localPosition;
            selectStage = index;
            DisplayModel();
            DisplayStage();
            DisplayRequireLevel();
            DisplayProperty();
            DisplayFightPower();
        }
        private void DisplayStage()
        {
            var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1);
            m_Stage.text = StringUtility.Contact(config.Name, Language.Get("GodWeaponStage", selectStage));
            DisplayGodWeaponEffect();
        }
        private void DisplayRequireLevel()
@@ -96,6 +145,9 @@
            var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
            var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1);
            m_RequireLevel.text = Language.Get("GodWeaponStageRequireLevel", config.Name, requireLevel);
            var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType);
            m_RequireLevel.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level < requireLevel);
            m_ContainerFuncs.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level >= requireLevel);
        }
        private void DisplayFightPower()
@@ -127,6 +179,42 @@
            {
                m_Propertys[i].gameObject.SetActive(false);
            }
        }
        void DisplayGodWeaponEffect()
        {
            var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
            var config = GodWeaponEffectConfig.Get(selectGodWeaponType, requireLevel);
            if (config != null)
            {
                m_EffectName.text = config.skillName;
            }
            UI3DModelExhibition.InstanceClone1.ShowGodWeaponEffect(selectGodWeaponType, requireLevel, m_RawEffect);
        }
        void DisplayEquip()
        {
            var equipedLevel = 0;
            model.IsGodWeaponEffectEquip(selectGodWeaponType, out equipedLevel);
            for (int i = 0; i < m_EquipSigns.Length; i++)
            {
                var stage = i + 1;
                var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, stage);
                m_EquipSigns[i].gameObject.SetActive(requireLevel == equipedLevel);
            }
            var selectLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
            m_Equip.gameObject.SetActive(selectLevel != equipedLevel);
            m_Putoff.gameObject.SetActive(selectLevel == equipedLevel);
        }
        private void Equip()
        {
        }
        private void PutOff()
        {
        }
        private void DisplayModel()
@@ -167,11 +255,15 @@
            {
                var type = model.godWeaponTypes[i];
                var godWeaponInfo = model.GetGodWeaponInfo(type);
                dict.Add(type, godWeaponInfo == null ? 0 : godWeaponInfo.level);
                var equipedLevel = 0;
                if (type == selectGodWeaponType)
                {
                    dict[type] = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
                }
                else if (model.IsGodWeaponEffectEquip(type, out equipedLevel))
                {
                    dict[type] = equipedLevel;
                }
            }
            UI3DPlayerExhibitionData data = new UI3DPlayerExhibitionData()
System/Role/GodWeaponSkillBehaviour.cs
@@ -16,7 +16,8 @@
        [SerializeField] Button m_Func;
        [SerializeField] UIEffect m_Effect;
        GodWeaponConfig config = null;
        GodWeaponConfig godWeaponConfig = null;
        GodWeaponEffectConfig godWeaponEffectConfig = null;
        MagicianModel model { get { return ModelCenter.Instance.GetModel<MagicianModel>(); } }
@@ -27,13 +28,13 @@
        public void Display(GodWeaponConfig config)
        {
            this.config = config;
            this.godWeaponConfig = config;
            this.godWeaponEffectConfig = null;
            var skillConfig = Config.Instance.Get<SkillConfig>(config.SkillID);
            m_Effect.StopImediatly();
            if (config != null && skillConfig != null)
            {
                m_SkillIcon.SetSprite(skillConfig.IconName);
                m_SkillIcon.gameObject.SetActive(true);
                var active = PlayerDatas.Instance.skill.GetSKillById(skillConfig.SkillID) != null;
                m_ContainerLock.gameObject.SetActive(!active);
                m_SkillCondition.gameObject.SetActive(!active);
@@ -43,24 +44,48 @@
                {
                    m_SkillCondition.text = Language.Get("L1091", config.Lv);
                }
            }
        }
                var effectId = 0;
                if (model.TryGetGodWeaponSkillEffect(config.SkillID, out effectId))
        public void Display(GodWeaponEffectConfig config)
        {
            this.godWeaponEffectConfig = config;
            this.godWeaponConfig = null;
            m_Effect.StopImediatly();
            if (config != null)
            {
                m_SkillIcon.SetSprite(config.icon);
                var weaponInfo = model.GetGodWeaponInfo(config.type);
                bool active = weaponInfo != null && weaponInfo.level >= config.level;
                m_SkillCondition.gameObject.SetActive(!active);
                m_ContainerLock.gameObject.SetActive(!active);
                m_SkillIcon.material = active ? MaterialUtility.GetUIDefaultGraphicMaterial() :
                    MaterialUtility.GetDefaultSpriteGrayMaterial();
                if (!active)
                {
                    m_Effect.effect = effectId;
                    m_Effect.Play();
                    m_SkillCondition.text = Language.Get("L1091", config.level);
                }
                m_Effect.Play();
            }
        }
        private void OnFunc()
        {
            if (config != null)
            if (godWeaponConfig != null)
            {
                string extra = StringUtility.Contact("<color=#fa0101>", Language.Get("L1113", config.Name, config.Lv), "</color>");
                var skillConfig = Config.Instance.Get<SkillConfig>(config.SkillID);
                SkillDetails.ShowSkillDetails(config.SkillID, SkillDetails.SkillSourceType.MagicianSkill,
                    skillConfig != null ? skillConfig.FightPower : 0, config.Name, extra);
                string extra = StringUtility.Contact("<color=#fa0101>", Language.Get("L1113", godWeaponConfig.Name, godWeaponConfig.Lv), "</color>");
                var skillConfig = Config.Instance.Get<SkillConfig>(godWeaponConfig.SkillID);
                SkillDetails.ShowSkillDetails(godWeaponConfig.SkillID, SkillDetails.SkillSourceType.GodWeaponSkill,
                    skillConfig != null ? skillConfig.FightPower : 0, godWeaponConfig.Name, extra);
            }
            else if (godWeaponEffectConfig != null)
            {
                var stage = 0;
                var type = godWeaponEffectConfig.type;
                if (model.TryGetGodWeaponStage(type, godWeaponEffectConfig.level, out stage))
                {
                    SkillDetails.ShowGodWeaponEffectSkill(type, stage);
                }
            }
        }
    }
System/Role/MagicianModel.cs
@@ -78,6 +78,7 @@
        private Dictionary<int, int[]> godWeaponLevelUpCost = new Dictionary<int, int[]>();
        public List<int> godWeaponTypes { get; private set; }
        public List<int> godWeaponEffectTypes { get; private set; }
        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>>();
@@ -91,6 +92,7 @@
        Dictionary<int, List<GodWeaponEffectProperty>> effectPropertyDict =
            new Dictionary<int, List<GodWeaponEffectProperty>>();
        Dictionary<int, Dictionary<int, int>> effectFightPower = new Dictionary<int, Dictionary<int, int>>();
        Dictionary<int, int> godWeaponEffectEquipDict = new Dictionary<int, int>();
        int[] autoHammerExpArea { get; set; }
        int[] autoHammerCount { get; set; }
@@ -224,6 +226,7 @@
                });
            }
            godWeaponEffectTypes = new List<int>();
            var godWeaponEffects = Config.Instance.GetAllValues<GodWeaponEffectConfig>();
            for (int i = 0; i < godWeaponEffects.Count; i++)
            {
@@ -253,6 +256,11 @@
                    effectFightPower.Add(config.type, dict);
                }
                dict.Add(config.level, config.fightPower);
                if (!godWeaponEffectTypes.Contains(config.type))
                {
                    godWeaponEffectTypes.Add(config.type);
                }
            }
            funcConfig = Config.Instance.Get<FuncConfigConfig>("MagicExterior");
@@ -681,6 +689,24 @@
            return 0;
        }
        public bool TryGetGodWeaponStage(int type, int level, out int stage)
        {
            List<int> list;
            stage = 0;
            if (TryGetGodWeaponStages(type, out list))
            {
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i] == level)
                    {
                        stage = i + 1;
                        return true;
                    }
                }
            }
            return false;
        }
        public bool TryGetGodWeaponStages(int type, out List<int> stages)
        {
            return godWeaponStageDict.TryGetValue(type, out stages);
@@ -714,6 +740,17 @@
        public bool TryGetGodWeaponSkillEffect(int skillId, out int effect)
        {
            return godWeaponSkillEffect.TryGetValue(skillId, out effect);
        }
        public bool IsGodWeaponEffectEquip(int type, out int level)
        {
            level = 0;
            if (godWeaponEffectEquipDict.ContainsKey(type))
            {
                level = godWeaponEffectEquipDict[type];
                return true;
            }
            return false;
        }
        public bool TryGetEffectProperty(int type, int level, out Dictionary<int, int> dict)
@@ -783,6 +820,23 @@
            }
            return propertyCacheDict;
        }
        public List<int> TryGetDisplaySkillLevels(int type)
        {
            List<int> displaySkillLevels = new List<int>();
            Dictionary<int, int> dict;
            if (TryGetGodWeaponSkills(type, out dict))
            {
                displaySkillLevels.AddRange(dict.Keys);
            }
            List<int> list;
            if (TryGetGodWeaponStages(type, out list))
            {
                displaySkillLevels.AddRange(list);
            }
            displaySkillLevels.Sort();
            return displaySkillLevels;
        }
    }
    public class GodWeaponInfo
System/Role/MagicianWin.cs
@@ -38,6 +38,11 @@
        [SerializeField] RectTransform m_ContainerSkill;
        [SerializeField] GodWeaponSkillBehaviour[] m_Skills;
        [SerializeField] HorizontalLayoutGroup m_SkillLayout;
        [SerializeField] ContentSizeFitter m_SkillSizeFitter;
        [SerializeField] ScrollRect m_SkillScroller;
        [SerializeField] RectTransform m_EffectPoint;
        [SerializeField] ItemCell[] m_Items;
        [SerializeField] Image m_Select;
@@ -144,6 +149,8 @@
            DisplaySelectItem();
            DisplayGodWeaponModel();
            m_SkillScroller.horizontalNormalizedPosition = 0f;
            if (flyObjectTarget != null)
            {
                Destroy(flyObjectTarget);
@@ -238,7 +245,8 @@
        private void ComplelteFlySkillEvent(ActivateShow.ActivateFunc type)
        {
            if (type == ActivateShow.ActivateFunc.GodWeapon)
            if (type == ActivateShow.ActivateFunc.GodWeapon
                || type == ActivateShow.ActivateFunc.GodWeaponEffect)
            {
                if (flyObjectTarget != null)
                {
@@ -250,19 +258,44 @@
        private void PrepareFlySkillEvent(ActivateShow.ActivateFunc type, int skillId)
        {
            var index = 0;
            if (type == ActivateShow.ActivateFunc.GodWeapon)
            {
                var godWeaponType = 0;
                var index = 0;
                if (TryGetGodWeaponType(skillId, out godWeaponType, out index))
                {
                    model.selectType = godWeaponType;
                    flyObjectTarget = m_Skills[index].AddMissingComponent<FunctionUnlockFlyObjectTarget>();
                    flyObjectTarget = m_EffectPoint.AddMissingComponent<FunctionUnlockFlyObjectTarget>();
                    flyObjectTarget.IdList = new int[] { skillId };
                    flyObjectTarget.Z_UnLockType = FunctionUnlockType.Skill;
                    FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.Skill, new int[] { skillId }, flyObjectTarget);
                }
            }
            else if (type == ActivateShow.ActivateFunc.GodWeaponEffect)
            {
                var list = model.TryGetDisplaySkillLevels(ActivateShow.godWeaponType);
                var godWeaponType = ActivateShow.godWeaponType;
                var godWeaponStage = ActivateShow.godWeaponStage;
                var requireLevel = model.GetGodWeaponStageRequireLevel(godWeaponType, godWeaponStage);
                index = list.IndexOf(requireLevel);
                model.selectType = godWeaponType;
                flyObjectTarget = m_EffectPoint.AddMissingComponent<FunctionUnlockFlyObjectTarget>();
                flyObjectTarget.IdList = new int[] { requireLevel };
                flyObjectTarget.Z_UnLockType = FunctionUnlockType.GodWeaponEffect;
                FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.GodWeaponEffect, new int[] { requireLevel }, flyObjectTarget);
            }
            var rt = m_SkillLayout.transform as RectTransform;
            var rt1 = m_SkillScroller.transform as RectTransform;
            var delta = m_Skills[index].transform.localPosition.x;
            var offset = rt.rect.width - rt1.rect.width;
            delta -= offset;
            m_SkillScroller.horizontalNormalizedPosition = Mathf.Clamp01(delta / offset);
            var worldpos = m_Skills[index].transform.TransformPoint(Vector3.zero);
            var localpos = transform.InverseTransformPoint(worldpos);
            m_EffectPoint.transform.localPosition = localpos;
        }
        private void WindowBeforeCloseEvent(Window window)
@@ -336,6 +369,8 @@
            DisplaySelectItem();
            DisplayGodWeaponModel();
            m_GodWeaponController.m_Scorller.RefreshActiveCellViews();
            m_SkillScroller.horizontalNormalizedPosition = 0f;
        }
        private void GodWeaponUpdate()
@@ -400,26 +435,52 @@
        private void DisplaySkills()
        {
            Dictionary<int, int> skills = null;
            List<int> displaySkillLevels = new List<int>();
            Dictionary<int, int> dict;
            var index = 0;
            if (model.TryGetGodWeaponSkills(model.selectType, out skills))
            if (model.TryGetGodWeaponSkills(model.selectType, out dict))
            {
                foreach (var level in skills.Keys)
                displaySkillLevels.AddRange(dict.Keys);
            }
            List<int> list;
            if (model.TryGetGodWeaponStages(model.selectType, out list))
            {
                displaySkillLevels.AddRange(list);
            }
            displaySkillLevels.Sort();
            foreach (var level in displaySkillLevels)
            {
                if (index < m_Skills.Length)
                {
                    if (index < m_Skills.Length)
                    m_Skills[index].gameObject.SetActive(true);
                    var godWeaponConfig = GodWeaponConfig.GetConfig(model.selectType, level);
                    var godWeaponEffectConfig = GodWeaponEffectConfig.Get(model.selectType, level);
                    if (dict != null && dict.ContainsKey(level))
                    {
                        m_Skills[index].gameObject.SetActive(true);
                        var config = GodWeaponConfig.GetConfig(model.selectType, level);
                        m_Skills[index].Display(config);
                        index++;
                        m_Skills[index].Display(godWeaponConfig);
                    }
                    else if (list != null && list.Contains(level))
                    {
                        m_Skills[index].Display(godWeaponEffectConfig);
                    }
                    index++;
                }
            }
            for (int i = index; i < m_Skills.Length; i++)
            {
                m_Skills[index].gameObject.SetActive(false);
                m_Skills[i].gameObject.SetActive(false);
            }
            m_ContainerSkill.gameObject.SetActive(skills != null && skills.Count > 0);
            m_ContainerSkill.gameObject.SetActive(displaySkillLevels.Count > 0);
            m_SkillSizeFitter.horizontalFit = displaySkillLevels.Count > 4 ?
                ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained;
            m_SkillLayout.childAlignment = displaySkillLevels.Count > 4 ?
                TextAnchor.MiddleLeft : TextAnchor.MiddleCenter;
            m_SkillScroller.horizontal = displaySkillLevels.Count > 4;
            if (displaySkillLevels.Count <= 4)
            {
                var rt = m_SkillLayout.transform as RectTransform;
                rt.sizeDelta = rt.sizeDelta.SetX(m_ContainerSkill.rect.width);
            }
        }
        private void DisplayItems()
@@ -682,7 +743,7 @@
                            addValue = addPropertyDict[key];
                        }
                    }
                    m_Propertys[i].DisplayAdd(displayPropertys[i], currentValue, addValue);
                    m_Propertys[i].DisplayGodWeaponAdd(displayPropertys[i], currentValue, addValue);
                }
                else
                {
@@ -758,15 +819,15 @@
            foreach (var key in model.godWeaponSkillDict.Keys)
            {
                var dict = model.godWeaponSkillDict[key];
                index = 0;
                var list = model.TryGetDisplaySkillLevels(key);
                foreach (var level in dict.Keys)
                {
                    if (dict[level] == skillId)
                    {
                        type = key;
                        index = list.IndexOf(level);
                        return true;
                    }
                    index++;
                }
            }
            return false;
@@ -1088,6 +1149,8 @@
            return false;
        }
        enum AutoHammerState
        {
            None,
System/Role/PropertyBehaviour.cs
@@ -70,6 +70,28 @@
            }
        }
        public void DisplayGodWeaponAdd(int _property, int _value, int _add)
        {
            var config = Config.Instance.Get<PlayerPropertyConfig>(_property);
            if (config != null)
            {
                m_PropertyName.text = config.Name;
                m_PropertyValue.text = StringUtility.Contact(UIHelper.ReplaceLargeNum(
                    UIHelper.ReplacePercentage(_value, config.ISPercentage, UIHelper.GetPropertyDecimalCount(_property))),
                    config.ISPercentage == 1 ? "%" : string.Empty);
                if (_add == 0)
                {
                    m_PropertyAdd.text = string.Empty;
                }
                else
                {
                    m_PropertyAdd.text = StringUtility.Contact("+", UIHelper.ReplaceLargeNum(
                        UIHelper.ReplacePercentage(_add, config.ISPercentage, UIHelper.GetPropertyDecimalCount(_property))),
                       config.ISPercentage == 1 ? "%" : string.Empty);
                }
            }
        }
        public void DisplayCompare(int _property, int _value, int _add)
        {
            var config = Config.Instance.Get<PlayerPropertyConfig>(_property);
System/Skill/SkillBehaviour.cs
@@ -15,6 +15,8 @@
        [SerializeField] Text m_SkillDescription;
        private int skillId = 0;
        GodWeaponEffectConfig godWeaponEffectConfig = null;
        public event Action<int> onClick;
        private void Awake()
@@ -25,6 +27,7 @@
        public void Display(int _skillId)
        {
            var config = Config.Instance.Get<SkillConfig>(_skillId);
            godWeaponEffectConfig = null;
            skillId = 0;
            if (config != null)
            {
@@ -33,9 +36,24 @@
            }
        }
        public void DisplayGodWeaponEffect(GodWeaponEffectConfig config)
        {
            godWeaponEffectConfig = config;
            m_SkillIcon.SetSprite(config.icon);
            if (m_SkillName != null)
            {
                m_SkillName.text = config.skillName;
            }
            if (m_SkillDescription != null)
            {
                m_SkillDescription.text = string.Empty;
            }
        }
        public void DisplayNewGot(int _skillId)
        {
            var config = Config.Instance.Get<SkillConfig>(_skillId);
            godWeaponEffectConfig = null;
            skillId = 0;
            if (config != null)
            {
@@ -67,7 +85,7 @@
                            }
                        }
                        var config = GodWeaponConfig.GetConfig(ActivateShow.godWeaponType, _lv);
                        SkillDetails.ShowSkillDetails(config.SkillID, SkillDetails.SkillSourceType.MagicianSkill, 0, config.Name, string.Empty);
                        SkillDetails.ShowSkillDetails(config.SkillID, SkillDetails.SkillSourceType.GodWeaponSkill, 0, config.Name, string.Empty);
                        break;
                }
@@ -76,6 +94,24 @@
                    onClick(skillId);
                }
            }
            if (godWeaponEffectConfig != null)
            {
                switch (ActivateShow.activateType)
                {
                    case ActivateShow.ActivateFunc.GodWeapon:
                        var _model = ModelCenter.Instance.GetModel<MagicianModel>();
                        if (godWeaponEffectConfig != null)
                        {
                            var stage = 0;
                            if (_model.TryGetGodWeaponStage(ActivateShow.godWeaponType, godWeaponEffectConfig.level, out stage))
                            {
                                SkillDetails.ShowGodWeaponEffectSkill(ActivateShow.godWeaponType, stage);
                            }
                        }
                        break;
                }
            }
        }
    }
}
System/Tip/SkillDetails.cs
@@ -2,70 +2,90 @@
using System.Collections.Generic;
using UnityEngine;
using TableConfig;
using System.Text;
namespace Snxxz.UI
{
    public class SkillDetails
    {
        public static SkillSourceType sourceType { get; private set; }
        public static SkillConfig skillModel { get; private set; }
        public static SkillConfig skillConfig { get; private set; }
        public static List<string> infoList = new List<string>();
        public static int godWeaponType { get; private set; }
        public static int godWeaponEffectStage { get; private set; }
        public static List<string> skillDescriptions = new List<string>();
        public static string skillSource { get; private set; }
        public static int fightPower { get; private set; }
        public static void ShowSkillDetails(int _skillid, SkillSourceType _type, int _fightPower, params string[] _infos)
        static MagicianModel godWeaponModel
        {
            fightPower = _fightPower;
            sourceType = _type;
            skillModel = Config.Instance.Get<SkillConfig>(_skillid);
            infoList.Clear();
            switch (_type)
            get { return ModelCenter.Instance.GetModel<MagicianModel>(); }
        }
        public static void ShowSkillDetails(int skillId, SkillSourceType type, int fightPower, params string[] infos)
        {
            SkillDetails.fightPower = fightPower;
            sourceType = type;
            skillConfig = Config.Instance.Get<SkillConfig>(skillId);
            skillDescriptions.Clear();
            switch (type)
            {
                case SkillSourceType.MagicianSkill:
                case SkillSourceType.GodWeaponSkill:
                    {
                        skillSource = _infos[0];
                        infoList.Add(skillModel.Description);
                        infoList.Add(_infos[1]);
                        skillSource = infos[0];
                        skillDescriptions.Add(skillConfig.Description);
                        skillDescriptions.Add(infos[1]);
                    }
                    break;
                case SkillSourceType.PlayerSkill:
                    skillSource = skillModel.SkillName;
                    infoList.Add(skillModel.Description);
                    {
                        skillSource = skillConfig.SkillName;
                        skillDescriptions.Add(skillConfig.Description);
                    }
                    break;
                case SkillSourceType.PetSkill:
                    if (_infos.Length <= 0)
                    {
                        infoList.Add(skillModel.Description);
                    }
                    else if (_infos.Length == 1)
                    {
                        infoList.Add(_infos[0]);
                    }
                    else if (_infos.Length == 2)
                    {
                        infoList.Add(_infos[0]);
                        infoList.Add(_infos[1]);
                        if (infos.Length <= 0)
                        {
                            skillDescriptions.Add(skillConfig.Description);
                        }
                        else if (infos.Length == 1)
                        {
                            skillDescriptions.Add(infos[0]);
                        }
                        else if (infos.Length == 2)
                        {
                            skillDescriptions.Add(infos[0]);
                            skillDescriptions.Add(infos[1]);
                    }
                    else if (_infos.Length == 3)
                    {
                        infoList.Add(skillModel.Description);
                        infoList.Add(_infos[2]);
                        }
                        else if (infos.Length == 3)
                        {
                            skillDescriptions.Add(skillConfig.Description);
                            skillDescriptions.Add(infos[2]);
                        }
                    }
                    break;
                case SkillSourceType.ViewHorsePet:
                    infoList.Add(skillModel.Description);
                    infoList.Add(_infos[0]);
                    {
                        skillDescriptions.Add(skillConfig.Description);
                        skillDescriptions.Add(infos[0]);
                    }
                    break;
                case SkillSourceType.BlastFurnace:
                    skillSource = _infos[0];
                    infoList.Add(skillModel.Description);
                    {
                        skillSource = infos[0];
                        skillDescriptions.Add(skillConfig.Description);
                    }
                    break;
                case SkillSourceType.DogzSkill:
                    infoList.Add(skillModel.Description);
                    {
                        skillDescriptions.Add(skillConfig.Description);
                    }
                    break;
            }
            if (!WindowCenter.Instance.IsOpen<SkillDetailsWin>())
@@ -74,14 +94,35 @@
            }
        }
        public static void ShowGodWeaponEffectSkill(int godWeaponType, int stage)
        {
            SkillDetails.godWeaponType = godWeaponType;
            godWeaponEffectStage = stage;
            sourceType = SkillSourceType.GodWeaponEffectSkill;
            skillDescriptions.Clear();
            var dict = godWeaponModel.GetEffectPropertyUpper(godWeaponType, stage);
            var level = godWeaponModel.GetGodWeaponStageRequireLevel(godWeaponType, stage);
            fightPower = 0;
            if (dict != null)
            {
                fightPower = UIHelper.GetFightPower(dict);
            }
            if (!WindowCenter.Instance.IsOpen<SkillDetailsWin>())
            {
                WindowCenter.Instance.Open<SkillDetailsWin>();
            }
        }
        public enum SkillSourceType
        {
            MagicianSkill = 0,
            PlayerSkill = 1,
            PetSkill = 2,
            BlastFurnace = 3,
            ViewHorsePet = 4,
            DogzSkill = 5,
            GodWeaponSkill,
            GodWeaponEffectSkill,
            PlayerSkill,
            PetSkill,
            BlastFurnace,
            ViewHorsePet,
            DogzSkill,
        }
    }
}
System/Tip/SkillDetailsWin.cs
@@ -9,120 +9,51 @@
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class SkillDetailsWin : Window
    {
        private RectTransform winRt;
        private Button btnPopSkillClose;
        private Image imgSkill;
        private Text textSkillSource;
        private Text textSkillName;
        private Text destText;
        private ScrollerController m_Control;
        [SerializeField] Button m_Close;
        [SerializeField] Image m_SkillIcon;
        [SerializeField] Text m_SkillInfo1;
        [SerializeField] Text m_SkillInfo2;
        [SerializeField] RectTransform m_ContainerDescription;
        [SerializeField] Text[] m_Descriptions;
        [SerializeField] RectTransform m_ContaienrFightPower;
        [SerializeField] Text m_FightPower;
        [SerializeField] RectTransform m_ContainerGodWeaponEffectSkill;
        [SerializeField] PropertyBehaviour[] m_Propertys;
        [SerializeField] Text m_GodWeaponEffectCondition;
        [SerializeField] RectTransform m_ContainerPlayer;
        [SerializeField] RawImage m_RawPlayer;
        public void ShowSkillDetails()
        {
            textSkillName.gameObject.SetActive(true);
            imgSkill.SetSprite(SkillDetails.skillModel.IconName);
            switch (SkillDetails.sourceType) {
                case SkillDetails.SkillSourceType.MagicianSkill: {
                            textSkillName.text = SkillDetails.skillModel.SkillName;
                            textSkillSource.text = SkillDetails.skillSource;
                    }
                    break;
                case SkillDetails.SkillSourceType.PetSkill: {
                        if (SkillDetails.skillModel.CoolDownTime > 0)
                        {
                            textSkillName.text = StringUtility.Contact("CD:", (float)SkillDetails.skillModel.CoolDownTime / 1000, Language.Get("RealmWin_Bewrite_35"));
                        }
                        else
                        {
                            textSkillName.gameObject.SetActive(false);
                        }
                        textSkillSource.text = SkillDetails.skillModel.SkillName;
                    }
                    break;
                case SkillDetails.SkillSourceType.ViewHorsePet:
                    {
                        if (SkillDetails.skillModel.CoolDownTime > 0)
                        {
                            textSkillName.text = StringUtility.Contact("CD:", (float)SkillDetails.skillModel.CoolDownTime / 1000, Language.Get("RealmWin_Bewrite_35"));
                        }
                        else
                        {
                            textSkillName.gameObject.SetActive(false);
                        }
                        textSkillSource.text = SkillDetails.skillModel.SkillName;
                    }
                    break;
                case SkillDetails.SkillSourceType.BlastFurnace:
                    {
                        textSkillName.text = SkillDetails.skillModel.SkillName;
                        textSkillSource.text = SkillDetails.skillSource;
                    }
                    break;
                case SkillDetails.SkillSourceType.DogzSkill:
                    {
                        textSkillSource.text = SkillDetails.skillModel.SkillName;
                        textSkillName.text = Language.Get("PlayerDetail_Level", SkillDetails.skillModel.SkillLV);
                    }
                    break;
        MagicianModel godWeaponModel { get { return ModelCenter.Instance.GetModel<MagicianModel>(); } }
            }
            m_Control.Refresh();
            for (int i = 0; i < SkillDetails.infoList.Count; i++) {
                m_Control.AddCell(ScrollerDataType.Header, i);
            }
            m_Control.Restart();
            float size = 185;
            m_ContaienrFightPower.gameObject.SetActive(SkillDetails.fightPower > 0);
            if (SkillDetails.fightPower > 0)
            {
                m_FightPower.text = StringUtility.Contact("+", SkillDetails.fightPower);
                size += 100;
            }
            for (int i = 0; i < SkillDetails.infoList.Count; i++) {
                size += m_Control.GetCellViewSize(m_Control.m_Scorller, i);
            }
            if (size < 440) {
                m_Control.maxCellCnt = m_Control.GetNumberOfCells(m_Control.m_Scorller);
            }
            winRt.sizeDelta = new Vector2(winRt.sizeDelta.x, Mathf.Min(540, size));
        }
        #region Built-in
        protected override void BindController()
        {
            winRt = transform.Find("BG") as RectTransform;
            btnPopSkillClose = transform.Find("BG/Close").GetComponent<Button>();
            imgSkill = transform.Find("BG/SkillBG/Skill").GetComponent<Image>();
            textSkillSource = transform.Find("BG/Source").GetComponent<Text>();
            textSkillName = transform.Find("BG/SkillName").GetComponent<Text>();
            destText = this.GetComponent<Text>("BG/InfoCell");
            m_Control = this.GetComponent<ScrollerController>("BG/Controll");
            m_Control.OnRefreshCell += OnRefreshInfoCell;
            m_Control.OnGetDynamicSize += OnGetDynamicSize;
        }
        protected override void AddListeners()
        {
            btnPopSkillClose.onClick.AddListener(CloseClick);
            m_Close.onClick.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            ShowSkillDetails();
            m_ContainerGodWeaponEffectSkill.gameObject.SetActive(false);
            m_ContainerDescription.gameObject.SetActive(false);
            m_ContainerPlayer.gameObject.SetActive(false);
            switch (SkillDetails.sourceType)
            {
                case SkillDetails.SkillSourceType.GodWeaponEffectSkill:
                    DisplayGodWeaponEffectSkill();
                    break;
                default:
                    DisplayNormal();
                    break;
            }
        }
        protected override void OnAfterOpen()
@@ -132,7 +63,7 @@
        protected override void OnPreClose()
        {
            UI3DModelExhibition.Instance.StopShow();
        }
        protected override void OnAfterClose()
@@ -141,20 +72,127 @@
        }
        #endregion
        private void OnRefreshInfoCell(ScrollerDataType type, CellView cell)
        void DisplayNormal()
        {
            if (cell.index < SkillDetails.infoList.Count) {
                Text text = cell.GetComponent<Text>();
                text.text = SkillDetails.infoList[cell.index];
            m_SkillInfo2.gameObject.SetActive(true);
            m_ContainerDescription.gameObject.SetActive(true);
            m_SkillIcon.SetSprite(SkillDetails.skillConfig.IconName);
            switch (SkillDetails.sourceType)
            {
                case SkillDetails.SkillSourceType.GodWeaponSkill:
                    {
                        m_SkillInfo2.text = SkillDetails.skillConfig.SkillName;
                        m_SkillInfo1.text = SkillDetails.skillSource;
                    }
                    break;
                case SkillDetails.SkillSourceType.PetSkill:
                    {
                        if (SkillDetails.skillConfig.CoolDownTime > 0)
                        {
                            m_SkillInfo2.text = StringUtility.Contact("CD:", (float)SkillDetails.skillConfig.CoolDownTime / 1000, Language.Get("RealmWin_Bewrite_35"));
                        }
                        else
                        {
                            m_SkillInfo2.gameObject.SetActive(false);
                        }
                        m_SkillInfo1.text = SkillDetails.skillConfig.SkillName;
                    }
                    break;
                case SkillDetails.SkillSourceType.ViewHorsePet:
                    {
                        if (SkillDetails.skillConfig.CoolDownTime > 0)
                        {
                            m_SkillInfo2.text = StringUtility.Contact("CD:", (float)SkillDetails.skillConfig.CoolDownTime / 1000, Language.Get("RealmWin_Bewrite_35"));
                        }
                        else
                        {
                            m_SkillInfo2.gameObject.SetActive(false);
                        }
                        m_SkillInfo1.text = SkillDetails.skillConfig.SkillName;
                    }
                    break;
                case SkillDetails.SkillSourceType.BlastFurnace:
                    {
                        m_SkillInfo2.text = SkillDetails.skillConfig.SkillName;
                        m_SkillInfo1.text = SkillDetails.skillSource;
                    }
                    break;
                case SkillDetails.SkillSourceType.DogzSkill:
                    {
                        m_SkillInfo1.text = SkillDetails.skillConfig.SkillName;
                        m_SkillInfo2.text = Language.Get("PlayerDetail_Level", SkillDetails.skillConfig.SkillLV);
                    }
                    break;
            }
            DisplayDescriptions();
            DisplayFightPower();
        }
        void DisplayGodWeaponEffectSkill()
        {
            m_ContainerGodWeaponEffectSkill.gameObject.SetActive(true);
            m_ContainerPlayer.gameObject.SetActive(true);
            var level = godWeaponModel.GetGodWeaponStageRequireLevel(SkillDetails.godWeaponType, SkillDetails.godWeaponEffectStage);
            var godWeaponEffectConfig = GodWeaponEffectConfig.Get(SkillDetails.godWeaponType, level);
            var config = GodWeaponConfig.GetConfig(SkillDetails.godWeaponType, 1);
            m_SkillIcon.SetSprite(godWeaponEffectConfig.icon);
            m_SkillInfo1.text = Language.Get("GodWeaponEffectSource", config.Name);
            m_SkillInfo2.text = godWeaponEffectConfig.skillName;
            var dict = godWeaponModel.GetEffectPropertyUpper(SkillDetails.godWeaponType, SkillDetails.godWeaponEffectStage);
            if (dict != null && dict.Count > 0)
            {
                var index = 0;
                foreach (var key in dict.Keys)
                {
                    m_Propertys[index].gameObject.SetActive(true);
                    m_Propertys[index].DisplayUpper(key, dict[key]);
                    index++;
                }
                for (int i = index; i < m_Propertys.Length; i++)
                {
                    m_Propertys[i].gameObject.SetActive(false);
                }
            }
            m_GodWeaponEffectCondition.text = Language.Get("L1113", config.Name, level);
            var job = PlayerDatas.Instance.baseData.Job;
            var godWeaponDict = new Dictionary<int, int>();
            godWeaponDict.Add(SkillDetails.godWeaponType, level);
            var data = new UI3DPlayerExhibitionData()
            {
                job = job,
                godWeapons = godWeaponDict,
            };
            UI3DModelExhibition.Instance.ShowOtherPlayer(m_RawPlayer, data);
            DisplayFightPower();
        }
        void DisplayDescriptions()
        {
            for (int i = 0; i < m_Descriptions.Length; i++)
            {
                m_Descriptions[i].gameObject.SetActive(i < SkillDetails.skillDescriptions.Count);
                if (i < SkillDetails.skillDescriptions.Count)
                {
                    m_Descriptions[i].text = SkillDetails.skillDescriptions[i];
                }
            }
        }
        private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
        void DisplayFightPower()
        {
            var _content=SkillDetails.infoList[index];
            destText.text = _content;
            height = destText.preferredHeight + 3;
            return true;
            m_ContaienrFightPower.gameObject.SetActive(SkillDetails.fightPower > 0);
            if (SkillDetails.fightPower > 0)
            {
                m_FightPower.text = StringUtility.Contact("+", SkillDetails.fightPower);
            }
        }
    }
System/Treasure/FunctionUnlockFlyObject.cs
@@ -106,6 +106,27 @@
            }
        }
        public void SetContent(GodWeaponEffectConfig config)
        {
            m_UnLockType = FunctionUnlockType.GodWeaponEffect;
            m_Id = config.level;
            m_FunctionIcon.SetSprite(config.icon);
            originalScale = 1f;
            this.transform.localScale = Vector3.one * originalScale;
            if (m_Effect != null)
            {
                m_Effect.Play();
            }
            target = FunctionUnlockFlyObjectTargetCenter.GetTarget(m_UnLockType, m_Id);
            if (target != null)
            {
                target.Prepare();
                beginMove = false;
            }
        }
        public void SetSpeed(float _speed)
        {
            speed = _speed;
UI/Common/UI3DModelExhibition.cs
@@ -20,6 +20,7 @@
        [SerializeField] Transform m_NPCShowPoint;
        [SerializeField] Transform m_DialogPoint;
        [SerializeField] Transform m_EquipmentPoint;
        [SerializeField] Transform m_GodWeaponEffectPoint;
        [SerializeField] Camera m_ShowCamera;
        [SerializeField] bool m_Interactable = false;
        [SerializeField] UI3DModelInteractProcessor m_InteractProcessor;
@@ -56,6 +57,8 @@
        int m_EquipmentModelId = 0;
        GameObject equipmentModel = null;
        SFXController godWeaponEffect = null;
        bool isShowingPlayer = false;
        bool isShowingHorse = false;
@@ -616,6 +619,36 @@
        }
        public void ShowGodWeaponEffect(int type, int level, RawImage _rawImage)
        {
            StopShow();
            m_ShowCamera.enabled = true;
            var job = PlayerDatas.Instance.baseData.Job;
            var config = GodWeaponEffectConfig.Get(type, level);
            var effectJson = LitJson.JsonMapper.ToObject(config.effect);
            var effectId = int.Parse(effectJson[job.ToString()].ToString());
            godWeaponEffect = SFXPlayUtility.Instance.PlayBattleEffect(effectId, m_GodWeaponEffectPoint);
            if (godWeaponEffect != null)
            {
                godWeaponEffect.transform.localPosition = config.effectPosition;
                godWeaponEffect.transform.localEulerAngles = config.effectAngles;
                godWeaponEffect.transform.localScale = config.effectScale;
            }
            if (_rawImage != null)
            {
                var x = _rawImage.rectTransform.rect.height * 4f / 3;
                var y = _rawImage.rectTransform.rect.height;
                _rawImage.rectTransform.sizeDelta = new Vector2(x, y);
                _rawImage.texture = m_ShowCamera.targetTexture;
                _rawImage.material = MaterialUtility.GetGUIRenderTextureMaterial();
                m_InteractProcessor.rectTransform = _rawImage.rectTransform;
            }
        }
        public void StopShow()
        {
            m_ShowCamera.enabled = false;
@@ -691,6 +724,12 @@
            }
            m_EquipmentModelId = 0;
            isShowinEquipment = false;
            if (godWeaponEffect != null)
            {
                SFXPlayUtility.Instance.Release(godWeaponEffect);
                godWeaponEffect = null;
            }
            interactable = false;
        }
@@ -837,7 +876,6 @@
        public bool gray;
        public bool isDialogue;
    }
}
Utility/EnumHelper.cs
@@ -1082,6 +1082,7 @@
    TreasureSkill = 3,
    Skill = 4,
    TreasureFunc = 5,
    GodWeaponEffect,
}
public enum RedPointState