少年修仙传客户端代码仓库
client_Zxw
2019-01-23 6e42b7d4f0370f9659aa397ff909aab477a3e676
Merge remote-tracking branch 'origin/master' into SpringFestival
58个文件已添加
89个文件已修改
4914 ■■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Login/LoginStage.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/EquipGSParamConfig.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/EquipGSParamConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FightPowerParamConfig.cs 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FightPowerParamConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastySuitAttrConfig.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastySuitAttrConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastyTowerConfig.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastyTowerConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/WeekPartyConfig.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/WeekPartyConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/ConfigManager.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/PlayerDatas.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/Rank/PlayerRankData.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/tagEquipGSParamConfig.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MapData.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_MapTrigger.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Behavior/Bhv_SceneObjectData.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/Evt.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/Evt_RefreshMonster.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/Evt_RefreshSceneObject.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/Evt_RefreshSceneObject.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/SceneObjectData.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/Event/SceneObjectData.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/MapData.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Data/MapTrigger.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/MapEditor/Editor/MapEditor.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA330_tagCMEquipZhuXianItem.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA330_tagCMEquipZhuXianItem.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA331_tagCMUnEquipZhuXianItem.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA331_tagCMUnEquipZhuXianItem.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA0B_tagMCWeekPartyPlayerInfo.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAD_SaleActivity.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAE_Truck.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAF_Merge.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB0_Event.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB213_tagMCZhuXianTowerInfo.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB213_tagMCZhuXianTowerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA0B_tagMCWeekPartyPlayerInfo.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAD_SaleActivity.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAE_Truck.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAF_Merge.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB0_Event.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB213_tagMCZhuXianTowerInfo.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB213_tagMCZhuXianTowerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/ResModule/InstanceResourcesLoader.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/HeroAI_D5_Hlyy.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GActorPlayerBase.cs 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/PartialModelResConfig.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCtrl.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/RankingWin.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DailyQuestWin.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonFightWin.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonVictoryWin.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TargetBriefInfoWin.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyFeastTransmitShow.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/DemonJarBossLifeBarWin.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/GMCommand/GMInputWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyDecomposeLineBeh.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyDecomposeModel.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyDecomposeWin.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyEquipBeh.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyEquipModel.cs 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyEquipModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyEquipWin.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyItemBeh.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastyKnapSackWin.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastySuitAttrBeh.cs 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyKnapSack/JadeDynastySuitAttrWin.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillCell.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillModel.cs 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillWin.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastySkill/JadeDynastySkillWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerBehaviour.cs 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerFloorBehaviour.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerFloorBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerHintWin.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerHintWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerModel.cs 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerRankBehaviour.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerRankBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerRewardBehaviour.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerRewardBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerUnLockWin.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerUnLockWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerWin.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadyDynastyTowerVictoryWin.cs 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadyDynastyTowerVictoryWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/TowerWin.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/TowerWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/EquipTip.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemTipsModel.cs 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PackModelInterface.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PackSendQuestMgr.cs 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PlayerPackModels.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/SinglePackModel.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/CommonItemBaisc.cs 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/FairyWearWin.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/HighSettingTip.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/LowSettingTip.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/MainInterfaceWin.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Message/ColorAnalysis.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Message/RichTableEvent.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServiceAchievementCell.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServiceAchievementModel.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServiceAchievementWin.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankHeadCell.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankModel.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankPanel.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/ActivateShow.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmBossShow.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmPropertyUpWin.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/RuneNewGotWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/RuneTowerWin.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/SkillDetails.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/SkillDetailsWin.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowJump/WindowJumpMgr.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/FrameEffect.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/FuncOpen.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DShowHero.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/HUD/PopUpNum.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/UIHelper.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/UIUtility.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -25,6 +25,7 @@
    public static void Init()
    {
        // 登记相应的数据体及对应的数据转逻辑类
        Register(typeof(HB213_tagMCZhuXianTowerInfo), typeof(DTCB213_tagMCZhuXianTowerInfo));
        Register(typeof(HB413_tagMCPlayerSkills), typeof(DTCB413_tagMCPlayerSkills));
        Register(typeof(HB212_tagMCZhuXianBossCnt), typeof(DTCB212_tagMCZhuXianBossCnt));
        Register(typeof(H0208_tagTalkCountry), typeof(DTC0208_tagTalkCountry));
Core/GameEngine/Login/LoginStage.cs
@@ -115,10 +115,19 @@
    float checkAssetVersionTimer = 0f;
    private void CheckClientAssets()
    {
        if (Time.time > checkAssetVersionTimer)
        {
            checkAssetVersionTimer += Time.time + 5f;
            if (VersionUtility.Instance.NeedDownAsset())
            var check = true;
            if (Application.platform == RuntimePlatform.IPhonePlayer && VersionUtility.Instance.InIosAuditTime())
            {
                check = false;
            }
            if (check && VersionUtility.Instance.NeedDownAsset())
            {
                checkAssetVersionTimer += Time.time + 10f;
                var assetVersionUrl = StringUtility.Contact(VersionUtility.Instance.versionInfo.GetResourcesURL(VersionConfig.Get().branch), "/", "AssetsVersion.txt");
Core/GameEngine/Model/Config/EquipGSParamConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Wednesday, September 26, 2018
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -39,7 +39,21 @@
        public int AtkSpeedC { get ; private set ; }
        public int SkillAtkRateReduceC { get ; private set ; }
        public int HitC { get ; private set ; }
        public int MissC { get ; private set ; }
        public int MissC { get ; private set ; }
        public int SkillAddPer1C { get ; private set ; }
        public int SkillAddPer2C { get ; private set ; }
        public int SkillAddPer3C { get ; private set ; }
        public int SkillAddPer4C { get ; private set ; }
        public int SkillAddPer5C { get ; private set ; }
        public int SkillAddPer6C { get ; private set ; }
        public int SkillAddPer7C { get ; private set ; }
        public int SkillReducePer1C { get ; private set ; }
        public int SkillReducePer2C { get ; private set ; }
        public int SkillReducePer3C { get ; private set ; }
        public int SkillReducePer4C { get ; private set ; }
        public int SkillReducePer5C { get ; private set ; }
        public int SkillReducePer6C { get ; private set ; }
        public int SkillReducePer7C { get ; private set ; }
        public override string getKey()
        {
@@ -105,7 +119,35 @@
            
                HitC=IsNumeric(rawContents[27]) ? int.Parse(rawContents[27]):0; 
            
                MissC=IsNumeric(rawContents[28]) ? int.Parse(rawContents[28]):0;
                MissC=IsNumeric(rawContents[28]) ? int.Parse(rawContents[28]):0;
                SkillAddPer1C=IsNumeric(rawContents[29]) ? int.Parse(rawContents[29]):0;
                SkillAddPer2C=IsNumeric(rawContents[30]) ? int.Parse(rawContents[30]):0;
                SkillAddPer3C=IsNumeric(rawContents[31]) ? int.Parse(rawContents[31]):0;
                SkillAddPer4C=IsNumeric(rawContents[32]) ? int.Parse(rawContents[32]):0;
                SkillAddPer5C=IsNumeric(rawContents[33]) ? int.Parse(rawContents[33]):0;
                SkillAddPer6C=IsNumeric(rawContents[34]) ? int.Parse(rawContents[34]):0;
                SkillAddPer7C=IsNumeric(rawContents[35]) ? int.Parse(rawContents[35]):0;
                SkillReducePer1C=IsNumeric(rawContents[36]) ? int.Parse(rawContents[36]):0;
                SkillReducePer2C=IsNumeric(rawContents[37]) ? int.Parse(rawContents[37]):0;
                SkillReducePer3C=IsNumeric(rawContents[38]) ? int.Parse(rawContents[38]):0;
                SkillReducePer4C=IsNumeric(rawContents[39]) ? int.Parse(rawContents[39]):0;
                SkillReducePer5C=IsNumeric(rawContents[40]) ? int.Parse(rawContents[40]):0;
                SkillReducePer6C=IsNumeric(rawContents[41]) ? int.Parse(rawContents[41]):0;
                SkillReducePer7C=IsNumeric(rawContents[42]) ? int.Parse(rawContents[42]):0;
            }
            catch (Exception ex)
            {
Core/GameEngine/Model/Config/EquipGSParamConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: e238f9455d4062c4c867b41cfea2f046
timeCreated: 1537960022
timeCreated: 1548160973
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/Config/FightPowerParamConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Friday, June 01, 2018
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -9,8 +9,8 @@
namespace TableConfig {
    
    public partial class FightPowerParamConfig : ConfigBase {
    public partial class FightPowerParamConfig : ConfigBase {
        public int LV { get ; private set ; }
        public int Hit { get ; private set ; }
        public int Miss { get ; private set ; }
@@ -31,15 +31,24 @@
        public int FaintDefRate { get ; private set ; }
        public int AtkSpeedParameter { get ; private set ; }
        public int LuckyHitParameter { get ; private set ; }
        public int SpeedPerParameter { get ; private set ; }
        public int AtkPerParameter { get ; private set ; }
        public int MaxHPPerParameter { get ; private set ; }
        public int JobAHurtAddPer { get ; private set ; }
        public int JobBHurtAddPer { get ; private set ; }
        public int JobCHurtAddPer { get ; private set ; }
        public int JobAAtkReducePer { get ; private set ; }
        public int JobBAtkReducePer { get ; private set ; }
        public int JobCAtkReducePer { get ; private set ; }
        public override string getKey()
        {
            return LV.ToString();
        public override string getKey()
        {
            return LV.ToString();
        }
        public override void Parse() {
            try
            {
            try
            {
                LV=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; 
            
                Hit=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
@@ -79,10 +88,28 @@
                AtkSpeedParameter=IsNumeric(rawContents[18]) ? int.Parse(rawContents[18]):0; 
            
                LuckyHitParameter=IsNumeric(rawContents[19]) ? int.Parse(rawContents[19]):0; 
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
                SpeedPerParameter=IsNumeric(rawContents[20]) ? int.Parse(rawContents[20]):0;
                AtkPerParameter=IsNumeric(rawContents[21]) ? int.Parse(rawContents[21]):0;
                MaxHPPerParameter=IsNumeric(rawContents[22]) ? int.Parse(rawContents[22]):0;
                JobAHurtAddPer=IsNumeric(rawContents[23]) ? int.Parse(rawContents[23]):0;
                JobBHurtAddPer=IsNumeric(rawContents[24]) ? int.Parse(rawContents[24]):0;
                JobCHurtAddPer=IsNumeric(rawContents[25]) ? int.Parse(rawContents[25]):0;
                JobAAtkReducePer=IsNumeric(rawContents[26]) ? int.Parse(rawContents[26]):0;
                JobBAtkReducePer=IsNumeric(rawContents[27]) ? int.Parse(rawContents[27]):0;
                JobCAtkReducePer=IsNumeric(rawContents[28]) ? int.Parse(rawContents[28]):0;
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    
Core/GameEngine/Model/Config/FightPowerParamConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 81c3ee0874f68494d9284a3240009448
timeCreated: 1527846597
timeCreated: 1548149194
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/Config/JadeDynastySuitAttrConfig.cs
New file
@@ -0,0 +1,60 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using UnityEngine;
using System;
namespace TableConfig {
    public partial class JadeDynastySuitAttrConfig : ConfigBase {
        public int id { get ; private set ; }
        public int suiteType { get ; private set ; }
        public int suiteLV { get ; private set ; }
        public int[] attrIDList;
        public int[] attrValueList;
        public override string getKey()
        {
            return id.ToString();
        }
        public override void Parse() {
            try
            {
                id=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
                suiteType=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
                suiteLV=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
                string[] attrIDListStringArray = rawContents[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                attrIDList = new int[attrIDListStringArray.Length];
                for (int i=0;i<attrIDListStringArray.Length;i++)
                {
                     int.TryParse(attrIDListStringArray[i],out attrIDList[i]);
                }
                string[] attrValueListStringArray = rawContents[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                attrValueList = new int[attrValueListStringArray.Length];
                for (int i=0;i<attrValueListStringArray.Length;i++)
                {
                     int.TryParse(attrValueListStringArray[i],out attrValueList[i]);
                }
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    }
}
Core/GameEngine/Model/Config/JadeDynastySuitAttrConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f24aa247ff2e2e24bb6798ab57e55bfb
timeCreated: 1548124957
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/Config/JadeDynastyTowerConfig.cs
New file
@@ -0,0 +1,101 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using UnityEngine;
using System;
namespace TableConfig {
    public partial class JadeDynastyTowerConfig : ConfigBase {
        public int floorId { get ; private set ; }
        public int floorIndex { get ; private set ; }
        public string floorName { get ; private set; }
        public int[] rewardIdsLevelS;
        public int[] rewardCountsLevelS;
        public int[] rewardIdsLevelA;
        public int[] rewardCountsLevelA;
        public int[] rewardIdsLevelB;
        public int[] rewardCountsLevelB;
        public int unLockEquipPlace { get ; private set ; }
        public string specialRewardDescription { get ; private set; }
        public int fightPower { get ; private set ; }
        public override string getKey()
        {
            return floorId.ToString();
        }
        public override void Parse() {
            try
            {
                floorId=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
                floorIndex=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
                floorName = rawContents[2].Trim();
                string[] rewardIdsLevelSStringArray = rawContents[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardIdsLevelS = new int[rewardIdsLevelSStringArray.Length];
                for (int i=0;i<rewardIdsLevelSStringArray.Length;i++)
                {
                     int.TryParse(rewardIdsLevelSStringArray[i],out rewardIdsLevelS[i]);
                }
                string[] rewardCountsLevelSStringArray = rawContents[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardCountsLevelS = new int[rewardCountsLevelSStringArray.Length];
                for (int i=0;i<rewardCountsLevelSStringArray.Length;i++)
                {
                     int.TryParse(rewardCountsLevelSStringArray[i],out rewardCountsLevelS[i]);
                }
                string[] rewardIdsLevelAStringArray = rawContents[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardIdsLevelA = new int[rewardIdsLevelAStringArray.Length];
                for (int i=0;i<rewardIdsLevelAStringArray.Length;i++)
                {
                     int.TryParse(rewardIdsLevelAStringArray[i],out rewardIdsLevelA[i]);
                }
                string[] rewardCountsLevelAStringArray = rawContents[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardCountsLevelA = new int[rewardCountsLevelAStringArray.Length];
                for (int i=0;i<rewardCountsLevelAStringArray.Length;i++)
                {
                     int.TryParse(rewardCountsLevelAStringArray[i],out rewardCountsLevelA[i]);
                }
                string[] rewardIdsLevelBStringArray = rawContents[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardIdsLevelB = new int[rewardIdsLevelBStringArray.Length];
                for (int i=0;i<rewardIdsLevelBStringArray.Length;i++)
                {
                     int.TryParse(rewardIdsLevelBStringArray[i],out rewardIdsLevelB[i]);
                }
                string[] rewardCountsLevelBStringArray = rawContents[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                rewardCountsLevelB = new int[rewardCountsLevelBStringArray.Length];
                for (int i=0;i<rewardCountsLevelBStringArray.Length;i++)
                {
                     int.TryParse(rewardCountsLevelBStringArray[i],out rewardCountsLevelB[i]);
                }
                unLockEquipPlace=IsNumeric(rawContents[9]) ? int.Parse(rawContents[9]):0;
                specialRewardDescription = rawContents[10].Trim();
                fightPower=IsNumeric(rawContents[11]) ? int.Parse(rawContents[11]):0;
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    }
}
Core/GameEngine/Model/Config/JadeDynastyTowerConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: bcb7d8fc32f347441a4024465ce1df51
timeCreated: 1548127880
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs
New file
@@ -0,0 +1,47 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using UnityEngine;
using System;
namespace TableConfig {
    public partial class SkillFrameAnimationConfig : ConfigBase {
        public int skillTypeId { get ; private set ; }
        public int totalTime { get ; private set ; }
        public string[] spriteKeys;
        public string descriptionIcon { get ; private set; }
        public override string getKey()
        {
            return skillTypeId.ToString();
        }
        public override void Parse() {
            try
            {
                skillTypeId=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
                totalTime=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
                spriteKeys = rawContents[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                descriptionIcon = rawContents[3].Trim();
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    }
}
Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d2052f17dcdee634082ca8f214df0ecd
timeCreated: 1548156734
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/Config/WeekPartyConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Thursday, January 10, 2019
//    [  Date ]:           Wednesday, January 23, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -16,7 +16,8 @@
        public string Description { get ; private set; } 
        public int jump { get ; private set ; }
        public int order { get ; private set ; }
        public int DailyQusetId { get ; private set ; }
        public int DailyQusetId { get ; private set ; }
        public int SpecialDisplayType { get ; private set ; }
        public override string getKey()
        {
@@ -36,7 +37,9 @@
            
                order=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0; 
            
                DailyQusetId=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0;
                DailyQusetId=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0;
                SpecialDisplayType=IsNumeric(rawContents[6]) ? int.Parse(rawContents[6]):0;
            }
            catch (Exception ex)
            {
Core/GameEngine/Model/Config/WeekPartyConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 59a36668b02da3d4fb47cbc1579228be
timeCreated: 1547105026
timeCreated: 1548209403
licenseType: Free
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/ConfigManager.cs
@@ -225,7 +225,10 @@
        AddAsyncTask<FashionDressConfig>();
        AddAsyncTask<WeekPartyPointConfig>();
        AddAsyncTask<SceneReplaceConfig>();
        AddAsyncTask<JadeDynastyTowerConfig>();
        AddAsyncTask<JadeDynastyBossConfig>();
        AddAsyncTask<JadeDynastySuitAttrConfig>();
        AddAsyncTask<SkillFrameAnimationConfig>();
        while (!AllCompleted())
        {
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -595,6 +595,7 @@
                        GameNetSystem.Instance.crossServerConnected_Loigc = false;
                        LoadingWin.targetMapResId = 1;
                        WindowCenter.Instance.Open<LoadingWin>();
                        GameNetSystem.Instance.DisconnectCrossServer();
                        var sendInfo = new CA108_tagCMRefreshMainServerRole();
                        GameNetSystem.Instance.SendInfo(sendInfo);
Core/GameEngine/Model/Player/Rank/PlayerRankData.cs
@@ -123,6 +123,7 @@
        OpenServerGodWeapon = 20,
        OpenServerRecharge = 21,
        OpenServerPet = 22,
        JadeDynastyTower=23,//诛仙塔排行榜
    }
    public class RankData
Core/GameEngine/Model/TelPartialConfig/tagEquipGSParamConfig.cs
@@ -54,6 +54,19 @@
            _tagGsProValueDict.Add(AttrEnum.SkillHurtPrecent, gsModel.SkillAtkRateReduceC);
            _tagGsProValueDict.Add(AttrEnum.HIT, gsModel.HitC);
            _tagGsProValueDict.Add(AttrEnum.MISS, gsModel.MissC);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer1, gsModel.SkillAddPer1C);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer2, gsModel.SkillAddPer2C);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer3, gsModel.SkillAddPer3C);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer4, gsModel.SkillAddPer4C);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer5, gsModel.SkillAddPer5C);
            _tagGsProValueDict.Add(AttrEnum.SkillAddPer6, gsModel.SkillAddPer6C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer1, gsModel.SkillReducePer1C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer2, gsModel.SkillReducePer2C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer3, gsModel.SkillReducePer3C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer4, gsModel.SkillReducePer4C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer5, gsModel.SkillReducePer5C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer6, gsModel.SkillReducePer6C);
            _tagGsProValueDict.Add(AttrEnum.SkillReducePer7, gsModel.SkillReducePer7C);
            return _tagGsProValueDict;
        }
    }
Core/MapEditor/Behavior/Bhv_Evt.cs
@@ -43,7 +43,9 @@
        public virtual void Export(BinaryWriter bw)
        {
            bw.Write((byte)type);
            Debug.LogFormat("type: {0}", type);
            bw.Write(id);
            Debug.LogFormat("id: {0}", id);
        }
#endif
    }
Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs
@@ -34,6 +34,7 @@
        {
            base.Export(bw);
            bw.Write(sceneObjList.Count);
            Debug.LogFormat("sceneObjList.Count: {0}", sceneObjList.Count);
            foreach (var _sceneObject in sceneObjList)
            {
                _sceneObject.Export(bw);
@@ -48,8 +49,8 @@
            {
                string _resName = br.ReadString();
                var _sceneData = CreateSceneObject(_resName);
                _sceneData.transform.SetParent(transform);
                _sceneData.Load(br);
                _sceneData.transform.SetParent(transform);
                sceneObjList.Add(_sceneData);
            }
Core/MapEditor/Behavior/Bhv_MapData.cs
@@ -51,17 +51,21 @@
        public void Export(BinaryWriter bw)
        {
            bw.Write(id);
            Debug.LogFormat("id: {0}", id);
            bw.Write(triggerList.Count);
            Debug.LogFormat("triggerList.Count: {0}", triggerList.Count);
            foreach (var _trigger in triggerList)
            {
                _trigger.Export(bw);
            }
            bw.Write(eventList.Count);
            Debug.LogFormat("eventList.Count: {0}", eventList.Count);
            foreach (var _event in eventList)
            {
                _event.Export(bw);
            }
            bw.Write(transferList.Count);
            Debug.LogFormat("transferList.Count: {0}", transferList.Count);
            foreach (var _transfer in transferList)
            {
                _transfer.Export(bw);
Core/MapEditor/Behavior/Bhv_MapTrigger.cs
@@ -10,16 +10,10 @@
{
    public class Bhv_MapTrigger : MonoBehaviour
    {
        public enum E_TriggerType
        {
            Trigger,
            EnterStage
        }
        [HideInInspector]
        public int id;
        [HideInInspector]
        public E_TriggerType triggerType = E_TriggerType.Trigger;
        public MapTrigger.E_TriggerType triggerType = MapTrigger.E_TriggerType.Trigger;
        [HideInInspector]
        public Evt.E_EventType type = Evt.E_EventType.Enemy;
        [HideInInspector]
@@ -62,7 +56,7 @@
        public void Load(BinaryReader br)
        {
            id = br.ReadInt32();
            triggerType = (E_TriggerType)br.ReadByte();
            triggerType = (MapTrigger.E_TriggerType)br.ReadByte();
            type = (Evt.E_EventType)br.ReadByte();
            prevID = br.ReadInt32();
            float _pX = br.ReadSingle();
@@ -107,7 +101,7 @@
                EditorGUILayout.LabelField("前置触发器", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80));
                prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20));
                EditorGUILayout.LabelField("触发器类型", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80));
                triggerType = (E_TriggerType)EditorGUILayout.EnumPopup(triggerType, guiSkin.customStyles[1], GUILayout.Height(20), GUILayout.Width(100));
                triggerType = (MapTrigger.E_TriggerType)EditorGUILayout.EnumPopup(triggerType, guiSkin.customStyles[1], GUILayout.Height(20), GUILayout.Width(100));
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
Core/MapEditor/Behavior/Bhv_SceneObjectData.cs
@@ -15,11 +15,17 @@
    public void Save(BinaryWriter bw)
    {
        bw.Write(resName);
        Debug.LogFormat("resName: {0}", resName);
        bw.Write(isObstacle);
        Debug.LogFormat("isObstacle: {0}", isObstacle);
        bw.Write((float)System.Math.Round(transform.position.x, 2));
        Debug.LogFormat("x: {0}", (float)System.Math.Round(transform.position.x, 2));
        bw.Write((float)System.Math.Round(transform.position.y, 2));
        Debug.LogFormat("y: {0}", (float)System.Math.Round(transform.position.y, 2));
        bw.Write((float)System.Math.Round(transform.position.z, 2));
        Debug.LogFormat("z: {0}", (float)System.Math.Round(transform.position.z, 2));
        bw.Write((float)System.Math.Round(transform.eulerAngles.y, 2));
        Debug.LogFormat("angle: {0}", transform.eulerAngles.y);
    }
    public void Load(BinaryReader br)
Core/MapEditor/Data/Event/Evt.cs
@@ -1,4 +1,5 @@
using System.IO;
using UnityEngine;
namespace H2Engine
{
Core/MapEditor/Data/Event/Evt_RefreshMonster.cs
@@ -1,4 +1,5 @@
using System.IO;
using UnityEngine;
namespace H2Engine
{
Core/MapEditor/Data/Event/Evt_RefreshSceneObject.cs
New file
@@ -0,0 +1,22 @@
using System.IO;
using UnityEngine;
namespace H2Engine
{
    public class Evt_RefreshSceneObject : Evt
    {
        public SceneObjectData[] sceneObjects;
        public override void Load(BinaryReader br)
        {
            base.Load(br);
            int _count = br.ReadInt32();
            sceneObjects = new SceneObjectData[_count];
            for (int i = 0; i < _count; ++i)
            {
                sceneObjects[i] = new SceneObjectData();
                sceneObjects[i].Load(br);
            }
        }
    }
}
Core/MapEditor/Data/Event/Evt_RefreshSceneObject.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f8ba8ee83584f0d459528aa89f8a405d
timeCreated: 1548142374
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/MapEditor/Data/Event/SceneObjectData.cs
New file
@@ -0,0 +1,22 @@
using System.IO;
using UnityEngine;
public class SceneObjectData
{
    public string resName;
    public bool isObstacle = false;
    public Vector3 position;
    public Vector3 eulerAngles;
    public void Load(BinaryReader br)
    {
        resName = br.ReadString();
        isObstacle = br.ReadBoolean();
        float _x = br.ReadSingle();
        float _y = br.ReadSingle();
        float _z = br.ReadSingle();
        float _eulerAngle = br.ReadSingle();
        position = new Vector3(_x, _y, _z);
        eulerAngles = new Vector3(0, _eulerAngle, 0);
    }
}
Core/MapEditor/Data/Event/SceneObjectData.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a361d7d0c92eed0439c8c475e611243b
timeCreated: 1548142387
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/MapEditor/Data/MapData.cs
@@ -20,13 +20,16 @@
            if (AssetSource.refdataFromEditor)
            {
#if UNITY_EDITOR
                _path = ResourcesPath.ResourcesOutPath + "Refdata/ScriptableObject/MapData/" + mapID + ".gd";
                _path = StringUtility.Contact(ResourcesPath.CONFIG_FODLER,
                                              "/",
                                              MapEditorData_Suffix,
                                              mapID,
                                              ".bytes");
#endif
            }
            else
            {
                _path = AssetVersionUtility.GetAssetFilePath(StringUtility.Contact("mapdata/", mapID, ".gd"));
                _path = AssetVersionUtility.GetAssetFilePath(StringUtility.Contact("config/", MapEditorData_Suffix, mapID, ".bytes"));
            }
            MapData _mapData = null;
            if (File.Exists(_path))
@@ -62,8 +65,13 @@
                {
                    _event = new Evt_RefreshMonster();
                }
                else if (_type == Evt.E_EventType.SceneObject)
                {
                    _event = new Evt_RefreshSceneObject();
                }
                if (_event != null)
                {
                    _event.type = _type;
                    _event.Load(br);
                    eventDict[_event.id] = _event;
                }
Core/MapEditor/Data/MapTrigger.cs
@@ -6,7 +6,14 @@
    [System.Serializable]
    public class MapTrigger
    {
        public enum E_TriggerType
        {
            Trigger,
            EnterStage
        }
        public Evt.E_EventType type;
        public E_TriggerType triggerType;
        public int prevID;
        public int id;
        public int[] evevntIDs;
@@ -17,6 +24,7 @@
        public void Load(BinaryReader br)
        {
            id = br.ReadInt32();
            triggerType = (E_TriggerType)br.ReadByte();
            type = (Evt.E_EventType)br.ReadByte();
            prevID = br.ReadInt32();
            float _pX = br.ReadSingle();
Core/MapEditor/Editor/MapEditor.cs
@@ -93,6 +93,10 @@
            {
                Export();
            }
            if (GUILayout.Button("导入", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
            {
                MapData.LoadFormFile(10010);
            }
            EditorGUILayout.EndHorizontal();
            /// --------------------------------------------------------------------------------
@@ -296,6 +300,7 @@
                using (var _binaryWriter = new BinaryWriter(_fileStream))
                {
                    _mapData.Save(_binaryWriter);
                    EditorPrefs.SetString(LS_KEY_SAVEPATH, Directory.GetParent(_path).FullName);
                }
            }
        }
@@ -304,7 +309,7 @@
        {
            var _mapData = target as Bhv_MapData;
            string _defaultPath = EditorPrefs.GetString(LS_KEY_SAVEPATH, System.Environment.CurrentDirectory);
            string _path = EditorUtility.SaveFilePanel("导出数据", _defaultPath, "map_" + _mapData.id, "bytes");
            string _path = EditorUtility.SaveFilePanel("导出数据", _defaultPath, MapData.MapEditorData_Suffix + _mapData.id, "bytes");
            if (string.IsNullOrEmpty(_path))
            {
                return;
@@ -313,7 +318,7 @@
            {
                using (var _binaryWriter = new BinaryWriter(_fileStream))
                {
                    _mapData.Save(_binaryWriter);
                    _mapData.Export(_binaryWriter);
                }
            }
        }
@@ -335,6 +340,7 @@
                using (var _binaryReader = new BinaryReader(_fileStream))
                {
                    _mapData.Load(_binaryReader);
                    EditorPrefs.SetString(LS_KEY_SAVEPATH, Directory.GetParent(_path).FullName);
                }
            }
        }
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA330_tagCMEquipZhuXianItem.cs
New file
@@ -0,0 +1,20 @@
using UnityEngine;
using System.Collections;
// A3 30 装备诛仙装备 #tagCMEquipZhuXianItem
public class CA330_tagCMEquipZhuXianItem : GameNetPackBasic {
    public byte EquipIndex;    //装备在诛仙装备背包中的索引
    public byte ItemIndex;    //装备在诛仙物品背包中的索引
    public CA330_tagCMEquipZhuXianItem () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA330;
    }
    public override void WriteToBytes () {
        WriteBytes (EquipIndex, NetDataType.BYTE);
        WriteBytes (ItemIndex, NetDataType.BYTE);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA330_tagCMEquipZhuXianItem.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: fe3f6d53f831c9342b06158619949c27
timeCreated: 1548121806
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA331_tagCMUnEquipZhuXianItem.cs
New file
@@ -0,0 +1,18 @@
using UnityEngine;
using System.Collections;
// A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem
public class CA331_tagCMUnEquipZhuXianItem : GameNetPackBasic {
    public byte EquipIndex;    //装备在诛仙装备背包中的索引
    public CA331_tagCMUnEquipZhuXianItem () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA331;
    }
    public override void WriteToBytes () {
        WriteBytes (EquipIndex, NetDataType.BYTE);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA331_tagCMUnEquipZhuXianItem.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c42dab7b9edaa2743a3c60e26fbeb981
timeCreated: 1548121806
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -152,6 +152,9 @@
                case RuneTowerModel.RUNETOWER_MAPID:
                    StageManager.Instance.Load<RuneTowerDungeonStage>(_mapConfig.MapID, vNetData.socketType);
                    break;
                case JadeDynastyTowerModel.DATA_MAPID:
                    StageManager.Instance.Load<JadeDynastyTowerDungeonStage>(_mapConfig.MapID, vNetData.socketType);
                    break;
                case DemonJarModel.DEMONJAR_SINGLEMAPID:
                    StageManager.Instance.Load<FakeDemonJarDungeonStage>(_mapConfig.MapID, vNetData.socketType);
                    break;
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
@@ -42,6 +42,7 @@
        model.UpdateTreasurePotentialInfo(vNetData.OldSkillID, vNetData.NewSkillID);
        ModelCenter.Instance.GetModel<TalentModel>().UpdateTalentSkill(vNetData.OldSkillID, vNetData.NewSkillID);
        ModelCenter.Instance.GetModel<JadeDynastySkillModel>().OnReceivePackage(vNetData);
        if (vNetData != null)
        {
            //  horsemodel.MountSkill0310(vNetData.NewSkillID);
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
@@ -17,6 +17,7 @@
        var vNetData = vNetPack as H0403_tagPlayerLoginLoadOK;
        GameNetSystem.Instance.netState = GameNetSystem.NetState.Connected;
        finishedLogin = true;
        GA_Hero.s_MapSwitching = false;
        NetLinkWin.Hide();
@@ -80,7 +81,6 @@
        MapTransferUtility.Instance.CheckMap(PlayerDatas.Instance.baseData.MapID);
        GA_Hero.s_MapSwitching = false;
        if (MapTransferUtility.Instance.MapTransferDoType == MapTransferUtility.E_MapTransferDoType.Npc)
        {
            MapTransferUtility.Instance.MoveToNPC(MapTransferUtility.Instance.NpcID);
@@ -107,13 +107,5 @@
            PlayerDatas.Instance.hero.EnterArea((int)MapArea.E_Type.Boss);
        }
    }
    IEnumerator DelayNpcHandler(int npcID)
    {
        yield return WaitingForSecondConst.WaitMS200;
        GA_Hero.s_MapSwitching = false;
    }
}
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -7,8 +7,7 @@
public class DTC0418_tagObjInfoRefresh : DtcBasic
{
    StoreModel _storeModel;
    StoreModel m_storeModel
    {
    StoreModel m_storeModel {
        get { return _storeModel ?? (_storeModel = ModelCenter.Instance.GetModel<StoreModel>()); }
    }
    // TCDBPlayerRefresh tCDBPlayerRefresh;
@@ -22,6 +21,17 @@
        if (vNetData == null)
        {
            return;
        }
        if (vNetData.socketType == GameNetSystem.SocketType.CrossSever)
        {
            if (vNetData.RefreshType == (int)PlayerDataRefresh.FightPower
                || vNetData.RefreshType == (int)PlayerDataRefresh.ExpPoint
                || vNetData.RefreshType == (int)PlayerDataRefresh.LV
                || vNetData.RefreshType == (int)PlayerDataRefresh.VIPLv)
            {
                return;
            }
        }
        if (CrossServerUtility.IsCrossServer())
@@ -36,13 +46,6 @@
                    return;
                }
            }
        }
        if (vNetData.socketType == GameNetSystem.SocketType.CrossSever)
        {
            if (vNetData.RefreshType == (int)PlayerDataRefresh.FightPower)
            {
                return;
            }
        }
        if (vNetData.RefreshType == (int)PlayerDataRefresh.OfficialRank)
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -623,7 +623,16 @@
                    int _effectID = 0;
                    if (int.TryParse(_funcConfig.Numerical1, out _effectID))
                    {
                        SFXPlayUtility.Instance.PlayBattleEffect(_effectID, _cTarget.Root);
                        var _effect = SFXPlayUtility.Instance.PlayBattleEffect(_effectID, _cTarget.Pos, Vector3.forward);
                        var _facing = _effect.AddMissingComponent<FacingTargetY>();
                        _facing.target = CameraController.Instance.CameraObject.transform;
                    }
                    if (int.TryParse(_funcConfig.Numerical2, out _effectID))
                    {
                        if (_effectID != 0)
                        {
                            EffectMgr.Instance.PlayUIEffect(_effectID, 2500, Snxxz.UI.WindowCenter.Instance.uiRoot.normalCanvas, true);
                        }
                    }
                }
            }
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
@@ -32,16 +32,12 @@
        }
        var _key = _realMapDataID * 1000 + LineID;
        int _id;
        if (mapIdDict.TryGetValue(_key, out _id))
        MapResourcesConfig _config = GetMapResourcesConfig(_realMapDataID, LineID);
        if (_config == null)
        {
            return Config.Instance.Get<MapResourcesConfig>(_id);
            _config = GetMapResourcesConfig(_realMapDataID, 0);
        }
        else
        {
            LineID = 0;
            return GetMapResourcesConfig(_realMapDataID, LineID);
        }
        return _config;
    }
    public override void Done(GameNetPackBasic vNetPack)
@@ -183,6 +179,9 @@
            case RuneTowerModel.RUNETOWER_MAPID:
                StageManager.Instance.Load<RuneTowerDungeonStage>(_mapConfig.MapID, package.socketType);
                break;
            case JadeDynastyTowerModel.DATA_MAPID:
                StageManager.Instance.Load<JadeDynastyTowerDungeonStage>(_mapConfig.MapID, package.socketType);
                break;
            case DemonJarModel.DEMONJAR_SINGLEMAPID:
                StageManager.Instance.Load<FakeDemonJarDungeonStage>(_mapConfig.MapID, package.socketType);
                break;
Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA0B_tagMCWeekPartyPlayerInfo.cs
@@ -6,14 +6,15 @@
public class DTCAA0B_tagMCWeekPartyPlayerInfo : DtcBasic {
public class DTCAA0B_tagMCWeekPartyPlayerInfo : DtcBasic
{
    OpenServiceAchievementModel model { get { return ModelCenter.Instance.GetModel<OpenServiceAchievementModel>(); } }
    public override void Done(GameNetPackBasic vNetPack) {
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        HAA0B_tagMCWeekPartyPlayerInfo vNetData = vNetPack as HAA0B_tagMCWeekPartyPlayerInfo;         if (vNetData == null)
        {
            return;
        }         model.WeekPartyPlayerInfo(vNetData);
    }
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HAD_SaleActivity.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 3e05761d690b75440a6be79207d0fb01
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAE_Truck.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 1d70ccd06161e0443b7a802ad94292f8
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAF_Merge.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 71e878ac60c49ad4f964dd2dbc725739
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HB0_Event.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: eed34091b0568664b9fb42f0634496c1
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB213_tagMCZhuXianTowerInfo.cs
New file
@@ -0,0 +1,12 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
public class DTCB213_tagMCZhuXianTowerInfo : DtcBasic {
    JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        var  vNetData = vNetPack as HB213_tagMCZhuXianTowerInfo;         model.UpdateHighestPassFloor(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB213_tagMCZhuXianTowerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: de61b4ddcb3826a46bedb2c821df0d52
timeCreated: 1548062939
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA0B_tagMCWeekPartyPlayerInfo.cs
@@ -24,8 +24,8 @@
            for (int j = 0; j < DayInfoList[i].ACount; j ++) {
                DayInfoList[i].TaskList[j] = new tagMCWeekPartyTaskInfo();
                TransBytes (out DayInfoList[i].TaskList[j].TemplateID, vBytes, NetDataType.WORD);
                TransBytes (out DayInfoList[i].TaskList[j].CurTimes, vBytes, NetDataType.WORD);
                TransBytes (out DayInfoList[i].TaskList[j].GotTimes, vBytes, NetDataType.WORD);
                TransBytes (out DayInfoList[i].TaskList[j].CurTimes, vBytes, NetDataType.DWORD);
                TransBytes (out DayInfoList[i].TaskList[j].GotTimes, vBytes, NetDataType.DWORD);
            }
        }
    }
@@ -40,8 +40,8 @@
    public struct tagMCWeekPartyTaskInfo {
        public ushort TemplateID;        // 模板ID
        public ushort CurTimes;        //已完成次数
        public ushort GotTimes;        //已领取次数
        public uint CurTimes;        //已完成次数
        public uint GotTimes;        //已领取次数
    }
}
Core/NetworkPackage/ServerPack/HAD_SaleActivity.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 32ceb8b7faf99f84a8b73ce53c5e3e4d
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAE_Truck.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 77f69c2b862d1704299a32d0d8eeb71e
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAF_Merge.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: fa14960fa44b0d1439bab471a764e34f
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HB0_Event.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d914565b65f8e8145988734c4d915834
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB213_tagMCZhuXianTowerInfo.cs
New file
@@ -0,0 +1,17 @@
using UnityEngine;
using System.Collections;
// B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
public class HB213_tagMCZhuXianTowerInfo : GameNetPackBasic {
    public uint Floor;    // 已通关层
    public HB213_tagMCZhuXianTowerInfo () {
        _cmd = (ushort)0xB213;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out Floor, vBytes, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB213_tagMCZhuXianTowerInfo.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 1796d4c1af065814eb764a01e6066e76
timeCreated: 1548062938
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/ResModule/InstanceResourcesLoader.cs
@@ -265,7 +265,7 @@
        return _gameObject;
    }
    private static GameObject LoadModelPrefab(string _suffix, string name, bool _ui)
    public static GameObject LoadModelPrefab(string _suffix, string name, bool _ui)
    {
        var prefab = LoadModelPrefab(_suffix, _ui ? name + "_UI" : name);
        if (prefab == null)
Fight/Actor/AI/HeroAI_D5_Hlyy.cs
@@ -63,7 +63,8 @@
        }
        m_HandupRange = 10;
        if (PlayerDatas.Instance.baseData.MapID == 31340)
        if (PlayerDatas.Instance.baseData.MapID == 31340
         || CrossServerUtility.IsCrossServerOneVsOne())
        {
            m_HandupRange = 100;
        }
Fight/GameActor/GActorPlayerBase.cs
@@ -236,65 +236,10 @@
        HideSecondaryEffect();
        HideHorseEffect();
        m_EquipDict.Clear();
        if (m_HorseModel)
        {
            HorseConfig _horseConfig = Config.Instance.Get<HorseConfig>((int)HorseID);
            _prefab = InstanceResourcesLoader.LoadModelRes(_horseConfig.Model);
            GameObjectPoolManager.Instance.ReleaseGameObject(_prefab, m_HorseModel);
            m_HorseModel = null;
            if (m_HorseAnimator)
            {
                m_HorseAnimator.SetInteger(GAStaticDefine.Param_Action, 0);
                m_HorseAnimator.enabled = false;
                m_HorseAnimator = null;
            }
            m_HorseBindNode = null;
        }
        if (null != m_Guard)
        {
            m_Guard.UnInit();
            m_Guard = null;
        }
        int _resID = 0;
        ItemConfig _itemConfig = null;
        if (m_ClothesModel)
        {
            SFXController[] _ctrls = m_ClothesModel.GetComponentsInChildren<SFXController>();
            if (_ctrls != null && _ctrls.Length > 0)
            {
                for (int i = 0; i < _ctrls.Length; ++i)
                {
                    SFXPlayUtility.Instance.Release(_ctrls[i]);
                }
            }
            _resID = JobSetup.BaseEquip[0];
            if (ClothesItemID != 0)
            {
                _itemConfig = Config.Instance.Get<ItemConfig>((int)ClothesItemID);
                _resID = _itemConfig.ChangeOrd;
            }
            if (TryRelease(_resID, m_ClothesModel))
            {
                m_ClothesModel = null;
                if (m_ClothesAnimator)
                {
                    m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Normal);
                    m_ClothesAnimator.enabled = false;
                    m_ClothesAnimator = null;
                }
            }
        }
        m_EquipDict.Clear();
        if (m_WeaponModel)
        {
            _resID = JobSetup.BaseEquip[1];
@@ -343,6 +288,60 @@
                    m_WingAnimator = null;
                }
            }
        }
        if (m_HorseModel)
        {
            HorseConfig _horseConfig = Config.Instance.Get<HorseConfig>((int)HorseID);
            _prefab = InstanceResourcesLoader.LoadModelRes(_horseConfig.Model);
            GameObjectPoolManager.Instance.ReleaseGameObject(_prefab, m_HorseModel);
            m_HorseModel = null;
            if (m_HorseAnimator)
            {
                m_HorseAnimator.SetInteger(GAStaticDefine.Param_Action, 0);
                m_HorseAnimator.enabled = false;
                m_HorseAnimator = null;
            }
            m_HorseBindNode = null;
        }
        if (null != m_Guard)
        {
            m_Guard.UnInit();
            m_Guard = null;
        }
        if (m_ClothesModel)
        {
            SFXController[] _ctrls = m_ClothesModel.GetComponentsInChildren<SFXController>();
            if (_ctrls != null && _ctrls.Length > 0)
            {
                for (int i = 0; i < _ctrls.Length; ++i)
                {
                    SFXPlayUtility.Instance.Release(_ctrls[i]);
                }
            }
            _resID = JobSetup.BaseEquip[0];
            if (ClothesItemID != 0)
            {
                _itemConfig = Config.Instance.Get<ItemConfig>((int)ClothesItemID);
                _resID = _itemConfig.ChangeOrd;
            }
            if (TryRelease(_resID, m_ClothesModel))
            {
                m_ClothesModel = null;
                if (m_ClothesAnimator)
                {
                    m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Normal);
                    m_ClothesAnimator.enabled = false;
                    m_ClothesAnimator = null;
                }
            }
        }
@@ -777,8 +776,8 @@
            }
        }
        ShowSecondaryEffect();
        SecondaryID = itemID;
        ShowSecondaryEffect();
        RequestShadow();
    }
@@ -1606,7 +1605,7 @@
    {
        HideSecondaryEffect();
        if (SecondaryID <= 0)
        if (SecondaryID <= 0 || !m_SecondaryModel)
        {
            return;
        }
@@ -1652,7 +1651,7 @@
            return;
        }
        var _itemConfig = Config.Instance.Get<ItemConfig>((int)WeaponItemID);
        if (_itemConfig != null)
        if (_itemConfig == null)
        {
            return;
        }
Fight/GameActor/PartialModelResConfig.cs
@@ -33,16 +33,18 @@
            }
            if (Type == (int)E_ModelResType.Horse
             || Type == (int)E_ModelResType.Pet)
             || Type == (int)E_ModelResType.Pet
             || Type == (int)E_ModelResType.Weapon
             || Type == (int)E_ModelResType.Secondary)
            {
                if (!string.IsNullOrEmpty(boneNameList))
                if (!string.IsNullOrEmpty(EffFileName))
                {
                    var _bones = boneNameList.Split('|');
                    var _effects = EffFileName.Split('|');
                    if (_bones.Length != _effects.Length)
                    {
                        Debug.LogWarningFormat("{0} 绑定骨骼的数量和特效的数量无法对应 {1} != {2}", ID, _bones.Length, _effects.Length);
                        Debug.LogWarningFormat("{0} �󶨹�������������Ч�������޷���Ӧ {1} != {2}", ID, _bones.Length, _effects.Length);
                    }
                    var _boneList = new List<string>();
@@ -50,7 +52,7 @@
                    for (int i = 0; i < _effects.Length; ++i)
                    {
                        if (i < _bones.Length)
                        if (i < _bones.Length && !string.IsNullOrEmpty(_bones[i]))
                        {
                            _boneList.Add(_bones[i]);
                        }
@@ -60,7 +62,10 @@
                        }
                        _effectList.Add(int.Parse(_effects[i]));
                        // Debug.LogFormat("设置特效配置: {0} => {1}", _bones[i], _dict[_bones[i]]);
                        // if (Type == (int)E_ModelResType.Weapon)
                        // {
                        //     Debug.LogFormat("设置了啊   : {0} => {1}", _bones[i], _effects[i]);
                        // }
                    }
                    effectBoneDict[ResourcesName] = _boneList;
@@ -118,13 +123,13 @@
        {
            if (id <= 0)
            {
                id = 4100;// 默认值
                id = 4100;// Ĭ��ֵ
            }
            var _config = Config.Instance.Get<ModelResConfig>(id);
            if (_config == null)
            {
                return 7000;// 默认值
                return 7000;// Ĭ��ֵ
            }
            return _config.RelatedPartID;
Fight/Stage/Dungeon/DungeonStage.cs
@@ -9,6 +9,7 @@
{
    public static Dictionary<MapArea.E_Type, List<MapArea>> s_MapAreaDict;
    public static MapType CurrentMapType;
    private H2Engine.MapData mapData;
    public override void Initialize()
    {
@@ -106,12 +107,16 @@
            _hero.SkillMgr.ResetAllCD();
        }
        HandleMapData();
        GA_Hero.s_MapSwitching = false;
    }
    public override void UnInitialize()
    {
        base.UnInitialize();
        mapData = null;
        if (s_MapAreaDict != null)
        {
@@ -254,6 +259,47 @@
        }
    }
    private void HandleMapData()
    {
        mapData = H2Engine.MapData.LoadFormFile(PlayerDatas.Instance.baseData.MapID);
        if (mapData == null)
        {
            Debug.LogFormat("------------------ 数据是空的");
            return;
        }
        // 目前版本只处理刷场景物件
        foreach (var _trigger in mapData.triggers)
        {
            if (_trigger.triggerType != H2Engine.MapTrigger.E_TriggerType.EnterStage)
            {
                Debug.Log("_trigger.triggerType: " + _trigger.triggerType);
                continue;
            }
            foreach (var _id in _trigger.evevntIDs)
            {
                var _event = mapData.eventDict[_id];
                if (_event.type == H2Engine.Evt.E_EventType.SceneObject)
                {
                    var _refreshSceneObject = _event as H2Engine.Evt_RefreshSceneObject;
                    if (_refreshSceneObject != null)
                    {
                        foreach (var _sceneObjData in _refreshSceneObject.sceneObjects)
                        {
                            var _prefab = InstanceResourcesLoader.LoadModelPrefab(InstanceResourcesLoader.raceSuffix, _sceneObjData.resName, false);
                            if (_prefab)
                            {
                                var _go = GameObject.Instantiate(_prefab);
                                _go.transform.position = _sceneObjData.position;
                                _go.transform.eulerAngles = _sceneObjData.eulerAngles;
                            }
                        }
                    }
                }
            }
        }
    }
    private void HandleAutoFight()
    {
        DungeonModel _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs
New file
@@ -0,0 +1,57 @@
using Snxxz.UI;
using System.Collections;
using TableConfig;
using UnityEngine;
public class JadeDynastyTowerDungeonStage : DungeonStage
{
    Animator m_TowerAnimator;
    Camera m_ShowCamera;
    Vector3 defaultShowCameraPosition;
    Quaternion defaultShowCameraRotation;
    float defaultFov;
    JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
    public override void Initialize()
    {
        base.Initialize();
    }
    public override void UnInitialize()
    {
        StopAllCoroutines();
        base.UnInitialize();
    }
    protected override void OnStageLoadFinish()
    {
        base.OnStageLoadFinish();
        WindowCenter.Instance.Open<JadeDynastyTowerHintWin>();
    }
    public void PerformChallengeNextLevel()
    {
        WindowCenter.Instance.Close<DungeonGradeWin>();
        WindowCenter.Instance.Close<MapNameHintWin>();
        WindowCenter.Instance.Close<JadeDynastyTowerHintWin>();
        WindowCenter.Instance.Close<DemonJarBossLifeBarWin>();
        model.RequestRefreshMonster();
        if (PlayerDatas.Instance.hero != null)
        {
            PlayerDatas.Instance.hero.Behaviour.StartHandupAI();
        }
        var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
        SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
        WindowCenter.Instance.Open<DungeonEndCoolDownWin>();
        WindowCenter.Instance.Open<MapNameHintWin>();
        WindowCenter.Instance.Open<JadeDynastyTowerHintWin>();
    }
}
Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: eafd24ea78eb761498952163bd245977
timeCreated: 1547780317
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Chat/ChatCtrl.cs
@@ -488,6 +488,10 @@
        {
            return;
        }
        if (!FuncOpen.Instance.IsFuncOpen(162))
        {
            return;
        }
        ChatData chatData = new ChatCrossServerData(package.Content, (int)package.PlayerID, package.Name, package.Extras);
        LocalChatHistory.Save(chatData as ChatUeseData);
        KeepChatInfo(chatData);
System/CrossServerOneVsOne/RankingWin.cs
@@ -106,7 +106,9 @@
        {
            SetZoneAndSeasonNum();
            OnCreateGridLineCell(m_ScrollerController);
            OnCreateGridLineCell_S(m_ScrollerController2);
            SetTextMyRank();
            ZoneAndSeasonpanel();
            m_ScrollerController.JumpIndex(0);
        }
@@ -322,8 +324,21 @@
            else
            {
                m_DivisionObj.gameObject.SetActive(false);
            }
            if (CrossServerOneVsOnePKSeason.Instance.SeasonID > 1)//赛季
            bool isBool = false;
            for (int i = 0; i < CrossServerOneVsOnePKSeason.Instance.ZoneCount; i++)
            {
                if (CrossServerOneVsOnePKSeason.Instance.ZoneIDList[i].ZoneID == crossServerRewardModel.ZoneID)
                {
                    var list = CrossServerOneVsOnePKSeason.Instance.ZoneIDList[i].SeasonList;
                    if (list.Count > 1)
                    {
                        isBool = true;
                    }
                }
            }
            if (isBool)//赛季
            {
                m_SeasonObj.gameObject.SetActive(true);
                if (m_ClickScreenOtherSpace2.activeSelf)
System/DailyQuest/DailyQuestWin.cs
@@ -269,7 +269,7 @@
                case DailyQuestType.RuneTowerSweep:
                    RuneTowerWin.guideSweep = true;
                    WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
                    WindowCenter.Instance.Open<RuneTowerWin>();
                    WindowCenter.Instance.Open<TowerWin>(false,0);
                    break;
                case DailyQuestType.BossHome:
                    WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
@@ -285,7 +285,7 @@
                    break;
                case DailyQuestType.RuneTower:
                    WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
                    WindowCenter.Instance.Open<RuneTowerWin>();
                    WindowCenter.Instance.Open<TowerWin>(false, 0);
                    break;
                case DailyQuestType.TreasureCollectSoul:
                    GotoTreasureCollectSoul();
@@ -319,6 +319,10 @@
                    WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
                    WindowCenter.Instance.Open<LootPreciousFrameWin>(false, 3);
                    break;
                case DailyQuestType.JadeDynastyTower:
                    WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
                    WindowCenter.Instance.Open<TowerWin>(false, 1);
                    break;
                default:
                    CSharpCallLua.GotoLuaDailyQuest(_id);
                    break;
System/Dungeon/DungeonFightWin.cs
@@ -78,7 +78,7 @@
                && !CrossServerUtility.IsCrossServerOneVsOne());
            m_ContainerAncient.gameObject.SetActive(dataMapId == 31160);
            m_BossInfosContainer.gameObject.SetActive(
                dataMapId == ElderGodAreaModel.ELDERGODAREA_MAPID
                dataMapId == ElderGodAreaModel.ELDERGODAREA_MAPID
                || dataMapId == BossHomeModel.BOSSHOME_MAPID);
            m_GatherSoulDungeonBehaviour.gameObject.SetActive(dataMapId == GatherSoulDungeonModel.DUNGEON_MAPID);
@@ -260,7 +260,7 @@
                {
                    if (_ok)
                    {
                        if (dataMapId==CrossServerBossModel.DATA_MAPID)
                        if (dataMapId == CrossServerBossModel.DATA_MAPID)
                        {
                            var crossServerBossModel = ModelCenter.Instance.GetModel<CrossServerBossModel>();
                            crossServerBossModel.RequestExit();
@@ -434,6 +434,30 @@
                        model.ExitCurrentDungeon();
                    }
                    break;
                case JadeDynastyTowerModel.DATA_MAPID:
                    var jadeDynastyTowerModel = ModelCenter.Instance.GetModel<JadeDynastyTowerModel>();
                    jadeDynastyTowerModel.RequestAward();
                    if (model.dungeonResult.grade == 5)
                    {
                        if (!jadeDynastyTowerModel.IsTopFloor(jadeDynastyTowerModel.currentFloor))
                        {
                            var dungeonStage = StageManager.Instance.CurrentStage as JadeDynastyTowerDungeonStage;
                            dungeonStage.PerformChallengeNextLevel();
                            model.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
                            model.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
                        }
                        else
                        {
                            model.ExitCurrentDungeon();
                        }
                    }
                    else
                    {
                        model.ExitCurrentDungeon();
                    }
                    WindowCenter.Instance.Close<JadyDynastyTowerVictoryWin>();
                    break;
                default:
                    model.ExitCurrentDungeon();
                    break;
System/Dungeon/DungeonModel.cs
@@ -306,7 +306,7 @@
            var send = new CA505_tagCMBeginFBWipeOut();
            send.MapID = (ushort)_dungeon.mapId;
            send.LineID = (ushort)_dungeon.lineId;
            send.LineID = (ushort)_dungeon.lineId;
            send.Cnt = 1;
            send.IsFinish = 1;
@@ -526,7 +526,7 @@
            if (ruinsTranscriptMapId == _dungeon.mapId)
            {
                OpenFloorChooseWin();
            }
            else
            {
@@ -539,7 +539,7 @@
            var mainModel = ModelCenter.Instance.GetModel<PlayerMainDate>();
            int WhyjNuber = mainModel.GetWHYJNum();
            mainModel.LayerNumberNow = WhyjNuber - 1;
            RequestChallangeDungeon(ruinsTranscriptMapId, WhyjNuber-1);
            RequestChallangeDungeon(ruinsTranscriptMapId, WhyjNuber - 1);
        }
        public void GroupChallenge(int _dungeonId, int _lineId = 0)
@@ -712,10 +712,10 @@
                        break;
                }
                switch(_type)
                switch (_type)
                {
                    case DungeonCoolDownType.WaitPlayer:
                        if(!WindowCenter.Instance.IsOpen<CrossServerOneVsOneWaitPlayerCoolDownWin>())
                        if (!WindowCenter.Instance.IsOpen<CrossServerOneVsOneWaitPlayerCoolDownWin>())
                        {
                            WindowCenter.Instance.Open<CrossServerOneVsOneWaitPlayerCoolDownWin>();
                        }
@@ -1052,6 +1052,9 @@
                        case GatherSoulDungeonModel.DUNGEON_MAPID:
                            WindowCenter.Instance.Open<DungeonGatherSoulVictoryWin>();
                            break;
                        case JadeDynastyTowerModel.DATA_MAPID:
                            WindowCenter.Instance.Open<JadyDynastyTowerVictoryWin>();
                            break;
                        default:
                            WindowCenter.Instance.Open<DungeonVictoryWin>();
                            break;
System/Dungeon/DungeonVictoryWin.cs
@@ -28,7 +28,7 @@
        [SerializeField] Text m_MagicEssence;
        [SerializeField, Header("仙缘币")] protected Transform m_ContainerXianyuanCoins;
        [SerializeField] Text m_XianyuanCoins;
        [SerializeField, Header("退出按钮")] ButtonEx m_Exit;
        [SerializeField, Header("退出按钮")] protected ButtonEx m_Exit;
        [SerializeField] protected Text m_ExitTimer;
        [SerializeField, Header("评级")] GameObject m_GradeBottom;
        [SerializeField] Image m_Grade;
@@ -108,13 +108,13 @@
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
            var iceCrystalVeinModel = ModelCenter.Instance.GetModel<IceCrystalVeinModel>();
            if (iceCrystalVeinModel.IsIceCrystalVein_Copy)
            {
                iceCrystalVeinModel.IsIceCrystalVein_Copy = false;
@@ -149,7 +149,7 @@
            }
        }
        private void ExitDungeon()
        protected virtual void ExitDungeon()
        {
            dungeonModel.ExitCurrentDungeon();
        }
@@ -373,7 +373,7 @@
            var fbEndInfo = dungeonModel.dungeonResult;
            var results = fbEndInfo.xianyuanCoin;
            bool isShow = true;
            if (fbEndInfo.dataMapID == 51010)
            {
                if (m_ContainerXianyuanCoins == null)
@@ -383,7 +383,7 @@
            }
            else
            {
                if(m_ContainerXianyuanCoins == null
                if (m_ContainerXianyuanCoins == null
                   || results == null || results.Length < 1)
                {
                    isShow = false;
@@ -394,19 +394,19 @@
            int getCoins = 0;
            int reason = 0;
            if(results != null && results.Length > 1)
            if (results != null && results.Length > 1)
            {
                getCoins = results[0];
                reason = results[1];
            }
            if(getCoins > 0 && reason == 0)
            if (getCoins > 0 && reason == 0)
            {
                m_XianyuanCoins.text = UIHelper.ReplaceLargeNum((ulong)getCoins);
            }
            else
            {
                switch(reason)
                switch (reason)
                {
                    case 1:
                        m_XianyuanCoins.text = UIHelper.AppendStringColor(TextColType.Red, Language.Get("DungeonAssist145"));
@@ -415,9 +415,9 @@
                        m_XianyuanCoins.text = UIHelper.AppendStringColor(TextColType.Red, Language.Get("DungeonAssist144"));
                        break;
                    default:
                        if(fbEndInfo.dataMapID == 51010)
                        if (fbEndInfo.dataMapID == 51010)
                        {
                            if(fbEndInfo.startRewardLineID != 0)
                            if (fbEndInfo.startRewardLineID != 0)
                            {
                                m_XianyuanCoins.text = UIHelper.AppendStringColor(TextColType.Red, Language.Get("DungeonAssist146"));
                            }
System/Dungeon/TargetBriefInfoWin.cs
@@ -13,6 +13,8 @@
public class TargetBriefInfo
{
    public static int selectedNpcId { get; private set; }
    public static void Init()
    {
        GA_NpcFightBoss.s_OnSelect += OnShowBossLifeBar;
@@ -32,10 +34,20 @@
            return;
        }
        if (_show)
        {
            selectedNpcId = _npcId;
        }
        else
        {
            selectedNpcId = 0;
        }
        var mapId = PlayerDatas.Instance.baseData.MapID;
        var dataMapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDataMapIdByMapId(mapId);
        if (dataMapId == DemonJarModel.DEMONJAR_MAPID
            || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP)
            || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP
            || dataMapId == JadeDynastyTowerModel.DATA_MAPID)
        {
            if (_show)
            {
@@ -76,10 +88,12 @@
            return;
        }
        selectedNpcId = _npcId;
        var mapId = PlayerDatas.Instance.baseData.MapID;
        var dataMapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDataMapIdByMapId(mapId);
        if (dataMapId == DemonJarModel.DEMONJAR_MAPID
            || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP)
            || dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP
            || dataMapId == JadeDynastyTowerModel.DATA_MAPID)
        {
            DemonJarBossLifeBarWin win;
            if (!WindowCenter.Instance.IsOpen<DemonJarBossLifeBarWin>())
@@ -110,7 +124,6 @@
                win.RefreshBossLifeBar(_instanceId, _npcId, _hp, _maxHp);
            }
        }
    }
System/FairyAu/FairyFeastTransmitShow.cs
@@ -410,7 +410,9 @@
                        }
                    }
                    if (secondaryResId == 0 || (data.fashionClothesId != 0 && data.fashionSecondaryId > 0))
                    if (secondaryResId == 0
                    || (data.fashionClothesId != 0 && data.fashionSecondaryId > 0)
                    || (data.fashionClothesId == 0 && data.fashionSecondaryId > 0))
                    {
                        PutOnExtraSecondary(job, extraSecondaryId);
                    }
@@ -516,6 +518,9 @@
                        secondaryModel.layer = LayerUtility.BossShow;
                        var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                        secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                        var _resConfig = Config.Instance.Get<ModelResConfig>(secondaryResId);
                        ShowSecondaryEffect(secondaryModel.transform, _resConfig.ResourcesName);
                    }
                }
            }
@@ -581,7 +586,78 @@
                    }
                }
            }
            private List<SFXController> m_WeaponEffectList = new List<SFXController>();
            private List<SFXController> m_SecondaryEffectList = new List<SFXController>();
            private void ShowWeaponEffect(Transform parent, string modelName)
            {
                HideWeaponEffect();
                var _boneList = ModelResConfig.GetBoneList(modelName);
                var _effectlist = ModelResConfig.GetEffectList(modelName);
                if (_boneList != null && _effectlist != null)
                {
                    for (int i = 0; i < _boneList.Count; ++i)
                    {
                        if (_boneList[i].Equals("null"))
                        {
                            var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
                            m_WeaponEffectList.Add(_ctrl);
                        }
                        else
                        {
                            var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
                            m_WeaponEffectList.Add(_ctrl);
                        }
                    }
                }
            }
            private void ShowSecondaryEffect(Transform parent, string modelName)
            {
                HideWeaponEffect();
                var _boneList = ModelResConfig.GetBoneList(modelName);
                var _effectlist = ModelResConfig.GetEffectList(modelName);
                if (_boneList != null && _effectlist != null)
                {
                    for (int i = 0; i < _boneList.Count; ++i)
                    {
                        if (_boneList[i].Equals("null"))
                        {
                            var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
                            m_SecondaryEffectList.Add(_ctrl);
                        }
                        else
                        {
                            var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
                            m_SecondaryEffectList.Add(_ctrl);
                        }
                    }
                }
            }
            private void HideSecondaryEffect()
            {
                foreach (var _ctrl in m_SecondaryEffectList)
                {
                    SFXPlayUtility.Instance.Release(_ctrl);
                }
                m_SecondaryEffectList.Clear();
            }
            private void HideWeaponEffect()
            {
                foreach (var _ctrl in m_WeaponEffectList)
                {
                    SFXPlayUtility.Instance.Release(_ctrl);
                }
                m_WeaponEffectList.Clear();
            }
            public void Transmit()
            {
                if (clothesAnimator)
@@ -600,6 +676,9 @@
            public void Dispose()
            {
                HideSecondaryEffect();
                HideWeaponEffect();
                if (clothesModel != null)
                {
                    var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
System/FindPrecious/DemonJarBossLifeBarWin.cs
@@ -108,10 +108,9 @@
        public void InitBossLifeBar()
        {
            m_BossLifeBar.gameObject.SetActive(true);
            var bossId = demonJarModel.GetBossIdByLine(model.mission.lineID);
            var npcConfig = Config.Instance.Get<NPCConfig>(bossId);
            var npcConfig = Config.Instance.Get<NPCConfig>(TargetBriefInfo.selectedNpcId);
            currentHp = (long)(model.mission.remainHPPer * 0.01f * BOSSHP_TOTAL);
            m_BossLifeBar.SetBaseInfo(bossId, (ulong)currentHp, BOSSHP_TOTAL, npcConfig.NPCLV);
            m_BossLifeBar.SetBaseInfo(TargetBriefInfo.selectedNpcId, (ulong)currentHp, BOSSHP_TOTAL, npcConfig.NPCLV);
            inited = true;
        }
System/GMCommand/GMInputWin.cs
@@ -91,10 +91,6 @@
            {
                OnClickSendBtn();
            }
            if (Input.GetKeyDown(KeyCode.P))
            {
                WindowCenter.Instance.Open<JadeDynastyKnapSackWin>();
            }
        }
        private void CreateCmdCell()
System/JadeDynastyKnapSack/JadeDynastyDecomposeLineBeh.cs
@@ -46,6 +46,7 @@
            public void SetDisplay(ItemModel itemModel,List<string> selectGuids)
            {
                itemBaisc.cellBtn.RemoveAllListeners();
                if (itemModel == null || selectGuids == null)
                {
                    itemBaisc.gameObject.SetActive(false);
@@ -55,11 +56,10 @@
                {
                    itemBaisc.gameObject.SetActive(true);
                    selectObj.SetActive(selectGuids.Contains(itemModel.itemInfo.ItemGUID));
                    itemBaisc.Init(itemModel);
                    itemBaisc.cellBtn.RemoveAllListeners();
                    itemBaisc.Init(itemModel,true);
                    itemBaisc.cellBtn.AddListener(()=>
                    {
                        if(selectObj.activeInHierarchy)
                        if (selectObj.activeInHierarchy)
                        {
                            this.decomposeModel.RemoveSelectModel(itemModel.itemInfo.ItemGUID);
                        }
System/JadeDynastyKnapSack/JadeDynastyDecomposeModel.cs
@@ -16,6 +16,8 @@
        public event Action UpdateSelectItemEvent;
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel<PackModelInterface>(); } }
        public override void Init()
        {
            selectGuids = new List<string>();
@@ -98,7 +100,8 @@
                if(model != null)
                {
                    if (selectEquipLv != 0
                   && model.chinItemModel.LV <= selectEquipLv)
                       && model.chinItemModel.LV <= selectEquipLv
                       && modelInterface.IsFightUp(model.itemId,model.equipScore) != 1)
                    {
                        selectGuids.Add(model.itemInfo.ItemGUID);
                    }
@@ -117,10 +120,6 @@
            if(!selectGuids.Contains(guid))
            {
                selectGuids.Add(guid);
                if(UpdateSelectItemEvent != null)
                {
                    UpdateSelectItemEvent();
                }
            }
        }
@@ -131,10 +130,6 @@
            if(selectGuids.Contains(guid))
            {
                selectGuids.Remove(guid);
                if (UpdateSelectItemEvent != null)
                {
                    UpdateSelectItemEvent();
                }
            }
        }
System/JadeDynastyKnapSack/JadeDynastyDecomposeWin.cs
@@ -14,7 +14,8 @@
        [SerializeField] Button selectBtn;
        [SerializeField] Image autoDecomposeImg;
        [SerializeField] Transform sortArrow;
        [SerializeField] int initCount = 100;
        JadeDynastyDecomposeModel decomposeModel { get { return ModelCenter.Instance.GetModel<JadeDynastyDecomposeModel>(); } }
        #region Built-in
        protected override void BindController()
@@ -67,8 +68,9 @@
        {
            decomposeModel.UpdateDecomposeModels();
            decomposeModel.UpdateSelectModels();
            int line = initCount / 5;
            decomposeCtrl.Refresh();
            for(int i = 0; i < decomposeModel.allGuids.Count; i++)
            for(int i = 0; i < line; i++)
            {
                decomposeCtrl.AddCell(ScrollerDataType.Header,i);
            }
System/JadeDynastyKnapSack/JadeDynastyEquipBeh.cs
@@ -15,6 +15,7 @@
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        JadeDynastyEquipModel equipModel { get { return ModelCenter.Instance.GetModel<JadeDynastyEquipModel>(); } }
        private void OnEnable()
        {
@@ -31,24 +32,22 @@
        public void SetDisplay()
        {
            bool islock = false;
            int towerLayer = 1;
            lockObj.SetActive(islock);
            lockText.gameObject.SetActive(islock);
            bool islock = equipModel.IsLockEquipPlace((int)equipType);
            nameText.text = string.Empty;
            lockText.gameObject.SetActive(false);
            nameText.gameObject.SetActive(false);
            lockObj.SetActive(islock);
            equipBtn.RemoveAllListeners();
            itemCell.cellBtn.RemoveAllListeners();
            if(islock)
            {
                itemCell.gameObject.SetActive(false);
                lockText.text = StringUtility.Contact("诛仙塔/n",towerLayer,"层解锁");
            }
            else
            {
                ItemModel itemModel = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip,(int)equipType);
                ItemModel itemModel = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)equipType);
                itemCell.gameObject.SetActive(itemModel != null);
                if(itemModel != null)
                if (itemModel != null)
                {
                    itemCell.Init(itemModel);
                    itemCell.cellBtn.AddListener(() => { ClickItemCell(itemModel); });
@@ -58,14 +57,18 @@
        private void PutOffEquip(PackType type, int index, int id)
        {
            if (type != PackType.rptJadeDynastyEquip || index != (int)equipType) return;
            int equipIndex = 0;
            equipModel.TryGetJadeDynastyEquipIndex((int)equipType, out equipIndex);
            if (type != PackType.rptJadeDynastyEquip || index != equipIndex) return;
            SetDisplay();
        }
        private void PutOnEquip(PackType type, int index, int id)
        {
            if (type != PackType.rptJadeDynastyEquip || index != (int)equipType) return;
            int equipIndex = 0;
            equipModel.TryGetJadeDynastyEquipIndex((int)equipType, out equipIndex);
            if (type != PackType.rptJadeDynastyEquip || index != equipIndex) return;
            SetDisplay();
        }
@@ -75,7 +78,9 @@
        {
            if (item == null) return;
            tipsModel.SetItemTipsModel(item.packType,item.itemInfo.ItemGUID);
            tipsModel.SetItemTipsModel(item.packType,item.itemInfo.ItemGUID,false);
            tipsModel.SetPutOnTipsBtn(tipsModel.curAttrData);
            tipsModel.ShowUICtrl();
        }
    }
}
System/JadeDynastyKnapSack/JadeDynastyEquipModel.cs
New file
@@ -0,0 +1,388 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TableConfig;
using LitJson;
namespace Snxxz.UI
{
    public class JadeDynastyEquipModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk
    {
        JadeDynastyTowerModel towerModel { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        public int UnlockTowerLayer
        {
            get { return towerModel.highestPassFloor; }
        }
        public override void Init()
        {
            ParseFuncConfig();
            ParseSuitAttrConfig();
        }
        public void OnBeforePlayerDataInitialize()
        {
        }
        public void OnAfterPlayerDataInitialize()
        {
        }
        public void OnPlayerLoginOk()
        {
        }
        public override void UnInit()
        {
        }
        #region 解析表数据
        public Dictionary<int, int> lockEquipLayerDict { get; private set; }
        public Dictionary<int, List<int>> suitTypeDict { get; private set;}
        public void ParseFuncConfig()
        {
            lockEquipLayerDict = new Dictionary<int, int>();
            suitTypeDict = new Dictionary<int, List<int>>();
            var equipZhuXian = Config.Instance.Get<FuncConfigConfig>("EquipZhuXian");
            var lockEquipData = JsonMapper.ToObject(equipZhuXian.Numerical1);
            foreach(var key in lockEquipData.Keys)
            {
                int equipPlace = int.Parse(key);
                int towerLayer = int.Parse(lockEquipData[key].ToString());
                lockEquipLayerDict.Add(equipPlace,towerLayer);
            }
            var suitGroupData = JsonMapper.ToObject(equipZhuXian.Numerical2);
            foreach(var key in suitGroupData.Keys)
            {
                int groupType = int.Parse(key);
                var equipPlaces = suitGroupData[key];
                if(equipPlaces.IsArray)
                {
                    List<int> list = new List<int>();
                    suitTypeDict.Add(groupType,list);
                    for(int i = 0; i < equipPlaces.Count; i++)
                    {
                        var equipPlace = equipPlaces[i];
                        list.Add(int.Parse(equipPlace.ToString()));
                    }
                }
            }
        }
        public Dictionary<int, Dictionary<int, JadeDynastySuitAttrData>> suitAttrDict { get; private set; }
        public void ParseSuitAttrConfig()
        {
            suitAttrDict = new Dictionary<int, Dictionary<int, JadeDynastySuitAttrData>>();
            var suitConfigs = Config.Instance.GetAllValues<JadeDynastySuitAttrConfig>();
            foreach(var config in suitConfigs)
            {
                int suitLv = config.suiteLV;
                int type = config.suiteType;
                var suitAttrData = new JadeDynastySuitAttrData(config.id);
                if (!suitAttrDict.ContainsKey(type))
                {
                    var dict = new Dictionary<int, JadeDynastySuitAttrData>();
                    dict.Add(suitLv,suitAttrData);
                    suitAttrDict.Add(type,dict);
                }
                else
                {
                    var dict = suitAttrDict[type];
                    if(!dict.ContainsKey(suitLv))
                    {
                        dict.Add(suitLv, suitAttrData);
                    }
                }
            }
        }
        public class JadeDynastySuitAttrData
        {
            public int suitLv { get; private set; }
            public Dictionary<int, int> attrDict { get; private set; }
            public JadeDynastySuitAttrConfig suitAttrConfig { get; private set; }
            public JadeDynastySuitAttrData(int id)
            {
                suitLv = 0;
                attrDict = new Dictionary<int, int>();
                suitAttrConfig = Config.Instance.Get<JadeDynastySuitAttrConfig>(id);
                if(suitAttrConfig != null)
                {
                    suitLv = suitAttrConfig.suiteLV;
                    int[] attrIds = suitAttrConfig.attrIDList;
                    int[] attrValues = suitAttrConfig.attrValueList;
                    if(attrIds != null && attrValues != null)
                    {
                        for(int i = 0; i < attrIds.Length; i++)
                        {
                            int attrId = attrIds[i];
                            int attrValue = attrValues[i];
                            if(!attrDict.ContainsKey(attrId))
                            {
                                attrDict.Add(attrId, attrValue);
                            }
                            else
                            {
                                attrDict[attrId] += attrValue;
                            }
                        }
                    }
                }
            }
        }
        #endregion
        #region 封包
        #endregion
        public bool TryGetJadeDynastyEquipIndex(int equipPlace,out int equipIndex)
        {
            equipIndex = 0;
            if(equipPlace >= (int)RoleEquipType.JadeDynasty_Cloak && equipPlace <= (int)RoleEquipType.JadeDynasty_Sword4)
            {
                equipIndex = equipPlace - 121;
                return true;
            }
            return false;
        }
        public bool TryGetLockTowerLayer(int equipPlace,out int towerLayer)
        {
            towerLayer = 0;
            return lockEquipLayerDict.TryGetValue(equipPlace,out towerLayer);
        }
        public bool TryGetSuitType(int equipPlace,out int suitType)
        {
            suitType = 0;
            foreach(var type in suitTypeDict.Keys)
            {
                var equipPlaces = suitTypeDict[type];
                if(equipPlaces.Contains(equipPlace))
                {
                    suitType = type;
                    return true;
                }
            }
            return false;
        }
        public bool TryGetEquipPlaces(int equipPlace,out List<int> equipPlaces)
        {
            int suitType = 0;
            equipPlaces = null;
            bool isSuit = TryGetSuitType(equipPlace,out suitType);
            if(isSuit)
            {
                equipPlaces = suitTypeDict[suitType];
                return true;
            }
            return false;
        }
        public bool TryGetSuitAttrData(int equipPlace,int suitLv,out JadeDynastySuitAttrData suitAttrData)
        {
            suitAttrData = null;
            int suitType = 0;
            TryGetSuitType(equipPlace,out suitType);
            if(suitAttrDict.ContainsKey(suitType))
            {
                var dict = suitAttrDict[suitType];
                return dict.TryGetValue(suitLv,out suitAttrData);
            }
            return false;
        }
        public bool IsWillUnlockEquipPlace(int equipPlace)
        {
            int willUnlockPlace = 0;
            int unlockTowerLayer = UnlockTowerLayer;
            int minTowerLayer = 0;
            foreach(var key in lockEquipLayerDict.Keys)
            {
                int lockTowerLayer = lockEquipLayerDict[key];
                if (lockTowerLayer > unlockTowerLayer
                    && (minTowerLayer > lockTowerLayer || minTowerLayer == 0))
                {
                    willUnlockPlace = key;
                    minTowerLayer = lockTowerLayer;
                }
            }
            return willUnlockPlace == equipPlace && willUnlockPlace != 0;
        }
        public bool IsLockEquipPlace(int equipPlace)
        {
            int unlockTowerLayer = UnlockTowerLayer;
            int towerLayer = 0;
            bool isLock = TryGetLockTowerLayer(equipPlace,out towerLayer);
            if(isLock && towerLayer > unlockTowerLayer)
            {
                return true;
            }
            return false;
        }
        public bool TryGetMaxSuitLV(int equipPlace,out int maxSuitLv)
        {
            maxSuitLv = 0;
            var suitLvs = GetSuitLvList(equipPlace);
            if(suitLvs != null && suitLvs.Count > 0)
            {
                maxSuitLv = suitLvs[suitLvs.Count - 1];
                return true;
            }
            return false;
        }
        public List<int> GetSuitLvList(int equipPlace)
        {
            int suitType = 0;
            bool isSuit = TryGetSuitType(equipPlace,out suitType);
            if(suitAttrDict.ContainsKey(suitType))
            {
                var dict = suitAttrDict[suitType];
                return dict.Keys.ToList();
            }
            return null;
        }
        public bool TryGetIsActiveSuit(int equipPlace,int suitLV,out List<int> activeEquips)
        {
            activeEquips = new List<int>();
            List<int> equipPlaces = null;
            bool isSuit = TryGetEquipPlaces(equipPlace, out equipPlaces);
            bool isActive = true;
            if(equipPlaces != null)
            {
                foreach(var key in equipPlaces)
                {
                    var model = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip,key);
                    if(model != null)
                    {
                        int equipLv = model.chinItemModel.LV;
                        if (equipLv >= suitLV)
                        {
                            activeEquips.Add(key);
                        }
                        else
                        {
                            isActive = false;
                        }
                    }
                    else
                    {
                        isActive = false;
                    }
                }
            }
            else
            {
                isActive = false;
            }
            return isActive;
        }
        public bool TryGetSuitLV(int equipPlace,PackType type,out int curSuitLv,out int nextSuitLV)
        {
            curSuitLv = 0;
            nextSuitLV = 0;
            int maxSuitLv = 0;
            bool isMax = TryGetMaxSuitLV(equipPlace,out maxSuitLv);
            switch(type)
            {
                case PackType.rptJadeDynastyItem:
                    if(isMax)
                    {
                        curSuitLv = maxSuitLv;
                        return true;
                    }
                    break;
                case PackType.rptJadeDynastyEquip:
                    int minEquipLv = 0;
                    var suitLvs = GetSuitLvList(equipPlace);
                    List<int> equipPlaces = null;
                    bool isSuit = TryGetEquipPlaces(equipPlace, out equipPlaces);
                    if (isSuit && equipPlaces != null)
                    {
                        foreach (var key in equipPlaces)
                        {
                            var model = playerPack.GetItemModelByIndex(type,key);
                            if(model != null
                                && (minEquipLv > model.chinItemModel.LV
                                || minEquipLv == 0))
                            {
                                minEquipLv = model.chinItemModel.LV;
                            }
                            else if(model == null)
                            {
                                minEquipLv = 0;
                                break;
                            }
                        }
                    }
                    if(suitLvs != null)
                    {
                        if (minEquipLv != 0)
                        {
                            for (int i = suitLvs.Count - 1; i > -1; i--)
                            {
                                int suitLv = suitLvs[i];
                                if (minEquipLv >= suitLv)
                                {
                                    curSuitLv = suitLv;
                                    break;
                                }
                            }
                        }
                        foreach (var suitLv in suitLvs)
                        {
                            if (suitLv > minEquipLv)
                            {
                                nextSuitLV = suitLv;
                                break;
                            }
                        }
                    }
                    if (curSuitLv != 0 || nextSuitLV != 0)
                    {
                        return true;
                    }
                    break;
            }
            return false;
        }
        public bool TryGetSumSuitAttr(int suitType,PackType type,out JadeDynastySuitAttrData activeSuit,out JadeDynastySuitAttrData nextSuit)
        {
            activeSuit = null;
            nextSuit = null;
            if (!suitTypeDict.ContainsKey(suitType)) return false;
            int equipPlace = suitTypeDict[suitType][0];
            int curSuitLv = 0;
            int nextSuitLv = 0;
            bool isSuitLv = TryGetSuitLV(equipPlace,type,out curSuitLv,out nextSuitLv);
            TryGetSuitAttrData(equipPlace,curSuitLv,out activeSuit);
            TryGetSuitAttrData(equipPlace,nextSuitLv,out nextSuit);
            return activeSuit != null || nextSuit != null;
        }
    }
}
System/JadeDynastyKnapSack/JadeDynastyEquipModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 31f790a2de0a97348bd308662d37e513
timeCreated: 1548123671
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyKnapSack/JadeDynastyEquipWin.cs
@@ -10,6 +10,7 @@
        [Header("诛仙装备位")]
        [SerializeField] Button stoneAttrBtn;
        [SerializeField] Button suitAttrBtn;
        [SerializeField] RawImage playerModel;
        [Header("诛仙背包")]
        [SerializeField] ScrollerController itemCtrl;
        [SerializeField] int initCount = 100;
@@ -41,6 +42,7 @@
        protected override void OnPreClose()
        {
            playerPack.RefreshItemCountAct -= UpdateJadeDynastyItem;
            UI3DModelExhibition.Instance.StopShow();
        }
        protected override void OnAfterClose()
@@ -52,6 +54,7 @@
        private void SetDisplay()
        {
            CreateItemLine();
            UpdatePlayerUI3DModel();
        }
        private void CreateItemLine()
@@ -69,7 +72,15 @@
        {
            if (type != PackType.rptJadeDynastyItem) return;
            UpdateItemLine();
            switch(type)
            {
                case PackType.rptJadeDynastyItem:
                    UpdateItemLine();
                    break;
                case PackType.rptJadeDynastyEquip:
                    UpdatePlayerUI3DModel();
                    break;
            }
        }
        private void UpdateItemLine()
@@ -77,6 +88,11 @@
            itemCtrl.m_Scorller.RefreshActiveCellViews();
        }
        private void UpdatePlayerUI3DModel()
        {
            UI3DModelExhibition.Instance.ShowPlayer(playerModel, PlayerDatas.Instance.baseData.Job);
        }
        private void ClickSuitAttr()
        {
            WindowCenter.Instance.Open<JadeDynastySuitAttrWin>();
System/JadeDynastyKnapSack/JadeDynastyItemBeh.cs
@@ -25,7 +25,9 @@
                itemCell.cellBtn.RemoveAllListeners();
                itemCell.cellBtn.AddListener(()=>
                {
                    tipsModel.SetItemTipsModel(itemModel.packType,itemModel.itemInfo.ItemGUID);
                    tipsModel.SetItemTipsModel(itemModel.packType,itemModel.itemInfo.ItemGUID,false,true);
                    tipsModel.SetBagTipsBtn(tipsModel.curAttrData);
                    tipsModel.ShowUICtrl();
                });
            }
System/JadeDynastyKnapSack/JadeDynastyKnapSackWin.cs
@@ -7,6 +7,7 @@
    public class JadeDynastyKnapSackWin : Window
    {
        [SerializeField] FunctionButton funcEquip;
        [SerializeField] FunctionButton m_JadeDynastySkill;
        [SerializeField] FunctionButtonGroup funcGroup;
        [SerializeField] Button closeBtn;
        [SerializeField] Button leftBtn;
@@ -19,11 +20,13 @@
        }
        protected override void AddListeners()
        {
            closeBtn.AddListener(CloseClick);
            closeBtn.AddListener(ClickClose);
            leftBtn.AddListener(ClickLeft);
            rightBtn.AddListener(ClickRight);
            funcEquip.AddListener(ClickFuncEquip);
            m_JadeDynastySkill.AddListener(OpenJadeDynastySkill);
        }
        protected override void OnPreOpen()
        {
@@ -64,14 +67,32 @@
            CloseSubWindows();
            if (windowState == WindowState.Opened)
            {
                WindowCenter.Instance.OpenWithoutAnimation<JadeDynastyKnapSackWin>();
                WindowCenter.Instance.OpenWithoutAnimation<JadeDynastyEquipWin>();
            }
            else
            {
                WindowCenter.Instance.Open<JadeDynastyKnapSackWin>();
                WindowCenter.Instance.Open<JadeDynastyEquipWin>();
            }
            functionOrder = funcEquip.order;
        }
        private void OpenJadeDynastySkill()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<JadeDynastySkillWin>();
            functionOrder = m_JadeDynastySkill.order;
        }
        private void ClickClose()
        {
            CloseSubWindows();
            CloseImmediately();
            if(!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows(this.GetType().Name);
System/JadeDynastyKnapSack/JadeDynastySuitAttrBeh.cs
@@ -3,6 +3,7 @@
using UnityEngine.UI;
using System.Collections.Generic;
using TableConfig;
using System.Linq;
namespace Snxxz.UI
{
@@ -12,70 +13,195 @@
        [SerializeField] List<SuitAttr> suitAttrs = new List<SuitAttr>();
        [SerializeField] GameObject noneActive;
        public void SetDisplay(int suitLv,bool isNext = false)
        JadeDynastyEquipModel equipModel { get { return ModelCenter.Instance.GetModel<JadeDynastyEquipModel>(); } }
        public void SetDisplay(PackType type,bool isNext = false,int equipPlace = 0)
        {
            bool isShowNoneActive = false;
           if(equipPlace == 0)
            {
                UpdateSumSuitAttr(type, isNext);
            }
           else
            {
                UpdateEquipSuitAttr(type,isNext,equipPlace);
            }
        }
        private void UpdateEquipSuitAttr(PackType type,bool isNext,int equipPlace)
        {
            bool isNoneActive = true;
            bool isMaxSuitLv = true;
            int suitType = 0;
            bool isSuit = equipModel.TryGetSuitType(equipPlace,out suitType);
            for(int i = 0; i < suitAttrs.Count; i++)
            {
                var suitAttr = suitAttrs[i];
                if(i > 0)
                {
                    suitAttr.attrTypeObj.SetActive(false);
                }
                else
                {
                    suitAttr.attrTypeObj.SetActive(true);
                    JadeDynastyEquipModel.JadeDynastySuitAttrData curAttrData = null;
                    JadeDynastyEquipModel.JadeDynastySuitAttrData nextAttrData = null;
                    equipModel.TryGetSumSuitAttr(suitType, type, out curAttrData, out nextAttrData);
                    if (isNext)
                    {
                        if (nextAttrData != null)
                        {
                            isMaxSuitLv = false;
                        }
                    }
                    else
                    {
                        if (curAttrData != null)
                        {
                            isNoneActive = false;
                        }
                    }
                    suitAttr.SetDisplay(suitType, type, isNext);
                }
            }
            if (noneActive != null)
            {
                if (isNext && isMaxSuitLv)
                {
                    noneActive.SetActive(true);
                }
                else if (!isNext && isNoneActive)
                {
                    noneActive.SetActive(true);
                }
                else
                {
                    noneActive.SetActive(false);
                }
            }
        }
        private void UpdateSumSuitAttr(PackType type,bool isNext)
        {
            if (!isNext)
            {
                bool isActive = true;
                isShowNoneActive = !isActive;
                titleText.text = StringUtility.Contact("套装总属性");
            }
            else
            {
                bool isMaxSuitLv = false;
                isShowNoneActive = isMaxSuitLv;
                titleText.text = StringUtility.Contact("进阶属性");
            }
            if(noneActive != null)
            {
                noneActive.SetActive(isShowNoneActive);
            }
            for(int i = 0; i < suitAttrs.Count; i++)
            List<int> suitTypes = equipModel.suitTypeDict.Keys.ToList();
            bool isNoneActive = true;
            bool isMaxSuitLv = true;
            for (int i = 0; i < suitAttrs.Count; i++)
            {
                var suitAttr = suitAttrs[i];
                suitAttr.SetDisplay(i,1,null,null);
                if (i < suitTypes.Count)
                {
                    suitAttr.attrTypeObj.SetActive(true);
                    int suitType = suitTypes[i];
                    JadeDynastyEquipModel.JadeDynastySuitAttrData curAttrData = null;
                    JadeDynastyEquipModel.JadeDynastySuitAttrData nextAttrData = null;
                    equipModel.TryGetSumSuitAttr(suitType, type, out curAttrData, out nextAttrData);
                    if (isNext)
                    {
                        if (nextAttrData != null)
                        {
                            isMaxSuitLv = false;
                        }
                    }
                    else
                    {
                        if (curAttrData != null)
                        {
                            isNoneActive = false;
                        }
                    }
                    suitAttr.SetDisplay(suitType, type, isNext);
                }
                else
                {
                    suitAttr.attrTypeObj.SetActive(false);
                }
            }
            if (noneActive != null)
            {
                if (isNext && isMaxSuitLv)
                {
                    noneActive.SetActive(true);
                }
                else if (!isNext && isNoneActive)
                {
                    noneActive.SetActive(true);
                }
                else
                {
                    noneActive.SetActive(false);
                }
            }
        }
        [Serializable]
        public class SuitAttr
        {
            [SerializeField] public GameObject attrTypeObj;
            [SerializeField] Text suitTypeText;
            [SerializeField] List<GameObject> attrObjlist = new List<GameObject>();
            [SerializeField] List<Text> attrTextlist = new List<Text>();
            [SerializeField] Text activeText;
            [SerializeField] GameObject activeObj;
            ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
            public void SetDisplay(int suitType,int suitLv,List<int> ids,List<int> values)
            {
                if (ids == null || values == null) return;
                bool isActive = true;
                switch(suitType)
            ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
            JadeDynastyEquipModel equipModel { get { return ModelCenter.Instance.GetModel<JadeDynastyEquipModel>(); } }
            public void SetDisplay(int suitType,PackType type,bool isNext)
            {
                JadeDynastyEquipModel.JadeDynastySuitAttrData curAttrData = null;
                JadeDynastyEquipModel.JadeDynastySuitAttrData nextAttrData = null;
                JadeDynastyEquipModel.JadeDynastySuitAttrData suitAttrData = null;
                equipModel.TryGetSumSuitAttr(suitType,type,out curAttrData,out nextAttrData);
                suitAttrData = isNext ? nextAttrData : curAttrData;
                if(suitAttrData == null)
                {
                    case 0:
                        suitTypeText.text = StringUtility.Contact("诛仙守护LV." + suitLv);
                        break;
                    case 1:
                        suitTypeText.text = StringUtility.Contact("诛仙之力LV." + suitLv);
                        break;
                    case 2:
                        suitTypeText.text = StringUtility.Contact("诛仙剑阵LV." + suitLv);
                        break;
                    attrTypeObj.SetActive(false);
                    return;
                }
                else
                {
                    attrTypeObj.SetActive(true);
                    switch (suitType)
                    {
                        case 1:
                            suitTypeText.text = StringUtility.Contact("诛仙守护LV." + suitAttrData.suitLv);
                            break;
                        case 2:
                            suitTypeText.text = StringUtility.Contact("诛仙之力LV." + suitAttrData.suitLv);
                            break;
                        case 3:
                            suitTypeText.text = StringUtility.Contact("诛仙剑阵LV." + suitAttrData.suitLv);
                            break;
                    }
                }
                int[] ids = suitAttrData.suitAttrConfig.attrIDList;
                int[] values = suitAttrData.suitAttrConfig.attrValueList;
                int equipPlace = equipModel.suitTypeDict[suitType][0];
                List<int> activeEquips = null;
                bool isActive = equipModel.TryGetIsActiveSuit(equipPlace,suitAttrData.suitLv,out activeEquips);
                activeObj.SetActive(!isActive);
                if(!isActive)
                {
                    string conditionSB = StringUtility.Contact("达到8阶激活");
                    string conditionSB = StringUtility.Contact("达到",suitAttrData.suitLv,"阶激活");
                    activeText.text = conditionSB;
                }
                for (int i = 0; i < attrObjlist.Count; i++)
                {
                    var attrObj = attrObjlist[i];
                    attrObj.SetActive(i < ids.Count);
                    if(i < ids.Count)
                    attrObj.SetActive(i < ids.Length);
                    if(i < ids.Length)
                    {
                        var attrId = ids[i];
                        var attrValue = values[i];
System/JadeDynastyKnapSack/JadeDynastySuitAttrWin.cs
@@ -40,19 +40,8 @@
        private void SetDisplay()
        {
            int curSuitLv = 0;
            int nextSuitLv = 1;
            bool isMaxSuitLv = false;
            nextSuitAttrBeh.gameObject.SetActive(!isMaxSuitLv);
            if(isMaxSuitLv)
            {
                curSuitAttrBeh.SetDisplay(curSuitLv);
            }
            else
            {
                curSuitAttrBeh.SetDisplay(curSuitLv);
                nextSuitAttrBeh.SetDisplay(nextSuitLv,true);
            }
            curSuitAttrBeh.SetDisplay(PackType.rptJadeDynastyEquip);
            nextSuitAttrBeh.SetDisplay(PackType.rptJadeDynastyEquip, true);
        }
    }
}
System/JadeDynastySkill.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 2f9ea79536d2476479a4288b9329e172
folderAsset: yes
timeCreated: 1548126896
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastySkill/JadeDynastySkillCell.cs
New file
@@ -0,0 +1,107 @@
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class JadeDynastySkillCell : CellView
    {
        [SerializeField] Transform m_ContainerSelect;
        [SerializeField] Button m_ViewSkill;
        [SerializeField] Image m_SkillIcon;
        [SerializeField] Text m_SkillName;
        [SerializeField] Transform m_ContainerSkillLock;
        [SerializeField] Text m_Condition;
        [SerializeField] Text[] m_EquipPlaceNames;
        [SerializeField] Transform m_ContainerLock;
        [SerializeField] Transform m_ContainerUnlockable;
        [SerializeField] Button m_Unlock;
        [SerializeField] Transform m_ContainerUnlocked;
        JadeDynastySkillModel model
        {
            get { return ModelCenter.Instance.GetModel<JadeDynastySkillModel>(); }
        }
        public Transform flyPoint
        {
            get
            {
                return m_SkillIcon.transform;
            }
        }
        public Transform skillLock
        {
            get
            {
                return m_ContainerSkillLock;
            }
        }
        public void Display(int skillId)
        {
            m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill);
            m_Unlock.RemoveAllListeners();
            m_ViewSkill.RemoveAllListeners();
            var skillConfig = Config.Instance.Get<SkillConfig>(skillId);
            if (skillConfig != null)
            {
                m_SkillIcon.SetSprite(skillConfig.IconName);
                m_SkillName.text = skillConfig.SkillName;
                m_ViewSkill.AddListener(() =>
                {
                    SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.JadeDynastySkill,
                        skillConfig.FightPower);
                });
            }
            var skillState = model.GetSkillState(skillId);
            m_ContainerSkillLock.gameObject.SetActive(skillState != JadeDynastySkillState.Unlocked);
            JadeDynastySkillCondition condition;
            var index = 0;
            if (model.TryGetSkillCondition(skillId, out condition))
            {
                m_Condition.text = Language.Get("JadeDynastySkillContition", condition.level);
                foreach (var equipPlace in condition.equipPlaces)
                {
                    if (index < m_EquipPlaceNames.Length)
                    {
                        m_EquipPlaceNames[index].gameObject.SetActive(true);
                        m_EquipPlaceNames[index].text = Language.Get(((RoleEquipType)equipPlace).ToString());
                        m_EquipPlaceNames[index].color = skillState == JadeDynastySkillState.Unlocked || model.IsSatisfyEquipLevel(equipPlace, condition.level) ?
                            UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.White, true);
                    }
                    index++;
                }
            }
            for (int i = index; i < m_EquipPlaceNames.Length; i++)
            {
                m_EquipPlaceNames[i].gameObject.SetActive(false);
            }
            m_ContainerLock.gameObject.SetActive(skillState == JadeDynastySkillState.Lock);
            m_ContainerUnlockable.gameObject.SetActive(skillState == JadeDynastySkillState.Unlockable);
            m_ContainerUnlocked.gameObject.SetActive(skillState == JadeDynastySkillState.Unlocked);
            if (skillState == JadeDynastySkillState.Unlockable)
            {
                m_Unlock.AddListener(() =>
                {
                    C0304_tagCAddSkillPoint pak = new C0304_tagCAddSkillPoint();
                    pak.SkillID = (ushort)skillId;
                    GameNetSystem.Instance.SendInfo(pak);
                });
            }
        }
    }
}
System/JadeDynastySkill/JadeDynastySkillCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 173092759a751964e8bce56c5d62f138
timeCreated: 1548143731
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastySkill/JadeDynastySkillModel.cs
New file
@@ -0,0 +1,263 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TableConfig;
using UnityEngine;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    [XLua.LuaCallCSharp]
    public class JadeDynastySkillModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        Dictionary<int, List<int>> jadeDynastySkills = new Dictionary<int, List<int>>();
        Dictionary<int, JadeDynastySkillCondition> skillConditions = new Dictionary<int, JadeDynastySkillCondition>();
        Dictionary<int, Sprite[]> skillFrames = new Dictionary<int, Sprite[]>();
        List<int> alreadyUnlockSkills = new List<int>();
        bool serverInited = false;
        public List<int> mySkills
        {
            get
            {
                var job = PlayerDatas.Instance.baseData.Job;
                var key = (int)Mathf.Pow(2, job);
                if (jadeDynastySkills.ContainsKey(key))
                {
                    return jadeDynastySkills[key];
                }
                else
                {
                    jadeDynastySkills[key] = new List<int>();
                }
                return jadeDynastySkills[key];
            }
        }
        public readonly Redpoint redpoint = new Redpoint(117, 11702);
        int m_SelectSkill;
        public int selectSkill
        {
            get { return m_SelectSkill; }
            set
            {
                if (m_SelectSkill != value)
                {
                    m_SelectSkill = value;
                    if (selectSkillRefresh != null)
                    {
                        selectSkillRefresh(value);
                    }
                }
            }
        }
        public event Action<int> skillRefresh;
        public event Action<int> selectSkillRefresh;
        PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        public override void Init()
        {
            ParseConfig();
            packModel.RefreshItemCountAct += RefreshItemCountAct;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        }
        public void OnBeforePlayerDataInitialize()
        {
            alreadyUnlockSkills.Clear();
            serverInited = false;
        }
        public void OnPlayerLoginOk()
        {
            serverInited = true;
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            packModel.RefreshItemCountAct -= RefreshItemCountAct;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        }
        void ParseConfig()
        {
            {
                var config = Config.Instance.Get<FuncConfigConfig>("EquipZhuXian");
                var json = LitJson.JsonMapper.ToObject(config.Numerical3);
                foreach (var skillIdKey in json.Keys)
                {
                    var skillTypeId = int.Parse(skillIdKey);
                    var skillConfig = Config.Instance.Get<SkillConfig>(skillTypeId);
                    if (skillConfig == null)
                    {
                        continue;
                    }
                    List<int> list;
                    if (!jadeDynastySkills.TryGetValue(skillConfig.UseType, out list))
                    {
                        list = new List<int>();
                        jadeDynastySkills.Add(skillConfig.UseType, list);
                    }
                    list.Add(skillTypeId);
                    var levelKey = json[skillIdKey].Keys.First();
                    var level = int.Parse(levelKey);
                    skillConditions.Add(skillTypeId, new JadeDynastySkillCondition()
                    {
                        level = level,
                        equipPlaces = new List<int>(LitJson.JsonMapper.ToObject<int[]>(json[skillIdKey][levelKey].ToJson())),
                    });
                }
            }
            foreach (var skills in jadeDynastySkills.Values)
            {
                skills.Sort(Compare);
            }
        }
        public bool IsSatisfyEquipLevel(int equipPlace, int level)
        {
            var itemModel = packModel.GetItemModelByIndex(PackType.rptJadeDynastyEquip, equipPlace);
            if (itemModel != null)
            {
                return itemModel.chinItemModel.LV >= level;
            }
            return false;
        }
        public JadeDynastySkillState GetSkillState(int skillId)
        {
            if (alreadyUnlockSkills.Contains(skillId))
            {
                return JadeDynastySkillState.Unlocked;
            }
            JadeDynastySkillCondition condition;
            if (TryGetSkillCondition(skillId, out condition))
            {
                foreach (var equipPlace in condition.equipPlaces)
                {
                    if (!IsSatisfyEquipLevel(equipPlace, condition.level))
                    {
                        return JadeDynastySkillState.Lock;
                    }
                }
            }
            return JadeDynastySkillState.Unlockable;
        }
        public bool TryGetSkillCondition(int skillId, out JadeDynastySkillCondition condition)
        {
            return skillConditions.TryGetValue(skillId, out condition);
        }
        public bool TryGetSkillFrames(int skillId, out Sprite[] _sprites)
        {
            if (!skillFrames.ContainsKey(skillId))
            {
                var config = Config.Instance.Get<SkillFrameAnimationConfig>(skillId);
                if (config != null)
                {
                    Sprite[] sprites = new Sprite[config.spriteKeys.Length];
                    for (int i = 0; i < config.spriteKeys.Length; i++)
                    {
                        var sprite = UILoader.LoadSprite(config.spriteKeys[i]);
                        sprites[i] = sprite;
                    }
                    skillFrames.Add(skillId, sprites);
                }
            }
            return skillFrames.TryGetValue(skillId, out _sprites);
        }
        public void OnReceivePackage(H0310_tagRoleSkillChange package)
        {
            var skillConfig = Config.Instance.Get<SkillConfig>(package.NewSkillID);
            if (skillConfig != null &&
                mySkills.Contains(skillConfig.SkillTypeID))
            {
                if (!alreadyUnlockSkills.Contains(skillConfig.SkillTypeID))
                {
                    alreadyUnlockSkills.Add(skillConfig.SkillTypeID);
                    if (skillRefresh != null)
                    {
                        skillRefresh(skillConfig.SkillTypeID);
                    }
                    if (serverInited)
                    {
                        if (!NewBieCenter.Instance.inGuiding
                            && !WindowCenter.Instance.IsOpen<RealmPropertyUpWin>()
                            && WindowCenter.Instance.IsOpen<JadeDynastySkillWin>())
                        {
                            ActivateShow.JadeDynastySkillUnlock(skillConfig.SkillTypeID);
                        }
                    }
                }
                UpdateRedpoint();
            }
        }
        private int Compare(int lhs, int rhs)
        {
            if (skillConditions.ContainsKey(lhs)
                && skillConditions.ContainsKey(rhs))
            {
                return skillConditions[lhs].level.CompareTo(skillConditions[rhs].level);
            }
            return 0;
        }
        private void RefreshItemCountAct(PackType packType, int arg2, int arg3)
        {
            if (packType == PackType.rptJadeDynastyEquip)
            {
                UpdateRedpoint();
            }
        }
        private void OnFuncStateChangeEvent(int id)
        {
            if (id == 167)
            {
                UpdateRedpoint();
            }
        }
        void UpdateRedpoint()
        {
            var unlockable = false;
            if (FuncOpen.Instance.IsFuncOpen(167))
            {
                foreach (var skill in mySkills)
                {
                    var state = GetSkillState(skill);
                    if (state == JadeDynastySkillState.Unlockable)
                    {
                        unlockable = true;
                        break;
                    }
                }
            }
            redpoint.state = unlockable ? RedPointState.Simple : RedPointState.None;
        }
    }
    public struct JadeDynastySkillCondition
    {
        public int level;
        public List<int> equipPlaces;
    }
    public enum JadeDynastySkillState
    {
        Lock,
        Unlockable,
        Unlocked,
    }
}
System/JadeDynastySkill/JadeDynastySkillModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 54964ff87641376429f6b467cf990d8e
timeCreated: 1548127288
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastySkill/JadeDynastySkillWin.cs
New file
@@ -0,0 +1,193 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class JadeDynastySkillWin : Window
    {
        [SerializeField] Text m_SkillDescription;
        [SerializeField] Text m_SkillFightPower;
        [SerializeField] Image m_SkillDescriptionIcon;
        [SerializeField] FrameEffect m_SkillFrame;
        [SerializeField] ScrollerController m_ScrollerControl;
        FunctionUnlockFlyObjectTarget flyObjectTarget;
        JadeDynastySkillModel model
        {
            get { return ModelCenter.Instance.GetModel<JadeDynastySkillModel>(); }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_ScrollerControl.OnRefreshCell += OnRefreshCell;
        }
        protected override void OnPreOpen()
        {
            if (flyObjectTarget != null)
            {
                Destroy(flyObjectTarget);
            }
            SetDefaultSelect();
            Display();
            model.selectSkillRefresh += SelectSkillRefresh;
            model.skillRefresh += SkillRefresh;
            ActivateShow.prepareFlySkillEvent += PrepareFlySkillEvent;
            ActivateShow.complelteFlySkillEvent += ComplelteFlySkillEvent;
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.selectSkillRefresh -= SelectSkillRefresh;
            model.skillRefresh -= SkillRefresh;
            ActivateShow.prepareFlySkillEvent -= PrepareFlySkillEvent;
            ActivateShow.complelteFlySkillEvent -= ComplelteFlySkillEvent;
            if (flyObjectTarget != null)
            {
                Destroy(flyObjectTarget);
            }
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void SetDefaultSelect()
        {
            foreach (var skill in model.mySkills)
            {
                if (model.GetSkillState(skill) == JadeDynastySkillState.Unlockable)
                {
                    model.selectSkill = skill;
                    return;
                }
            }
            model.selectSkill = model.mySkills[0];
        }
        void Display()
        {
            DisplaySkills();
            DisplaySkillDetail();
        }
        void DisplaySkills()
        {
            m_ScrollerControl.Refresh();
            foreach (var skill in model.mySkills)
            {
                m_ScrollerControl.AddCell(ScrollerDataType.Header, skill, OnSelectSkill);
            }
            m_ScrollerControl.Restart();
            var index = model.mySkills.IndexOf(model.selectSkill);
            if (index != -1)
            {
                m_ScrollerControl.JumpIndex(index);
            }
        }
        void DisplaySkillDetail()
        {
            var skillConfig = Config.Instance.Get<SkillConfig>(model.selectSkill);
            if (skillConfig != null)
            {
                m_SkillDescription.text = skillConfig.Description;
                m_SkillFightPower.text = StringUtility.Contact("+", skillConfig.FightPower);
                Sprite[] sprites;
                if (model.TryGetSkillFrames(model.selectSkill, out sprites))
                {
                    var config = Config.Instance.Get<SkillFrameAnimationConfig>(model.selectSkill);
                    m_SkillFrame.SetSprites(sprites, (float)config.totalTime / 1000);
                    m_SkillDescriptionIcon.SetSprite(config.descriptionIcon);
                }
            }
        }
        private void PrepareFlySkillEvent(ActivateShow.ActivateFunc type, int skillId)
        {
            if (type == ActivateShow.ActivateFunc.JadeDynastySkill)
            {
                var index = model.mySkills.IndexOf(skillId);
                if (index != -1)
                {
                    m_ScrollerControl.JumpIndex(index);
                    var cell = m_ScrollerControl.GetActiveCellView(skillId);
                    if (cell != null)
                    {
                        var skillCell = cell as JadeDynastySkillCell;
                        flyObjectTarget = skillCell.flyPoint.AddMissingComponent<FunctionUnlockFlyObjectTarget>();
                        flyObjectTarget.IdList = new int[] { skillId };
                        flyObjectTarget.Z_UnLockType = FunctionUnlockType.Skill;
                        FunctionUnlockFlyObjectTargetCenter.Register(FunctionUnlockType.Skill, new int[] { skillId }, flyObjectTarget);
                    }
                }
            }
        }
        private void ComplelteFlySkillEvent(ActivateShow.ActivateFunc type)
        {
            if (type == ActivateShow.ActivateFunc.JadeDynastySkill)
            {
                if (flyObjectTarget != null)
                {
                    Destroy(flyObjectTarget);
                }
                m_ScrollerControl.m_Scorller.RefreshActiveCellViews();
            }
        }
        private void SelectSkillRefresh(int skillId)
        {
            DisplaySkillDetail();
            m_ScrollerControl.m_Scorller.RefreshActiveCellViews();
        }
        private void OnSelectSkill(CellView cell)
        {
            model.selectSkill = cell.index;
        }
        private void SkillRefresh(int id)
        {
            m_ScrollerControl.RefreshSingleCellView(id);
        }
        private void OnRefreshCell(ScrollerDataType type, CellView cell)
        {
            var skillCell = cell as JadeDynastySkillCell;
            skillCell.Display(cell.index);
        }
    }
}
System/JadeDynastySkill/JadeDynastySkillWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6ed84d1a53f9ac844be81ad82535b43e
timeCreated: 1548139898
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 8f2922f78b99e304fb72e1cabe552f93
folderAsset: yes
timeCreated: 1547780194
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerBehaviour.cs
New file
@@ -0,0 +1,161 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerBehaviour : MonoBehaviour
    {
        [SerializeField] ScrollRect m_Tower;
        RectTransform m_RectTransform;
        RectTransform rectTransform { get { return m_RectTransform ?? (this.transform as RectTransform); } }
        float topHeight = 0f;
        float floorHeight = 0f;
        float bottomHeight = 0f;
        GameObject towerTop = null;
        GameObject towerBottom = null;
        JadeDynastyTowerFloorBehaviour towerTopBehaviour;
        bool hasCreateTowerResources = false;
        List<JadeDynastyTowerFloorBehaviour> floorBehaviours = new List<JadeDynastyTowerFloorBehaviour>();
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        public void Display()
        {
            var scrollRectTransform = m_Tower.transform as RectTransform;
            scrollRectTransform.localScale = Vector3.one;
            scrollRectTransform.anchoredPosition = Vector2.zero;
            DisplayTowerBaseInfo();
            MoveToTargetFloor(model.currentFloor);
        }
        public void Dispose()
        {
            m_Tower.scrollSensitivity = 1f;
        }
        void MoveToTargetFloor(int floor)
        {
            var floors = model.GetShowFloors();
            var floorConfig = Config.Instance.Get<JadeDynastyTowerConfig>(floor);
            var floorIndex = floors.IndexOf(floor);
            if (floorIndex < 2)
            {
                m_Tower.verticalNormalizedPosition = 0f;
            }
            else if (floorIndex >= floors.Count - 2)
            {
                var hasTop = model.IsTopFloor(floors[floors.Count - 1]);
                if (hasTop)
                {
                    if (floorIndex >= floors.Count - 1)
                    {
                        m_Tower.verticalNormalizedPosition = 1f;
                    }
                    else
                    {
                        m_Tower.verticalNormalizedPosition = 0.5f;
                    }
                }
                else
                {
                    m_Tower.verticalNormalizedPosition = 1f;
                }
            }
            else
            {
                m_Tower.verticalNormalizedPosition = 0.5f;
            }
        }
        private void DisplayTowerBaseInfo()
        {
            CreateTowerResources();
            var floors = model.GetShowFloors();
            var hasTop = model.IsTopFloor(floors[floors.Count - 1]);
            var normalCount = hasTop ? floors.Count - 1 : floors.Count;
            if (hasTop)
            {
                towerTopBehaviour.gameObject.SetActive(true);
                towerTopBehaviour.Display(floors[floors.Count - 1]);
            }
            else
            {
                towerTopBehaviour.gameObject.SetActive(false);
            }
            for (var i = 0; i < floorBehaviours.Count; i++)
            {
                var behaviour = floorBehaviours[i];
                if (i < normalCount)
                {
                    behaviour.gameObject.SetActive(true);
                    behaviour.Display(floors[floors.Count - (i + (hasTop ? 2 : 1))]);
                }
                else
                {
                    behaviour.gameObject.SetActive(false);
                }
            }
            var hasBottom = model.IsBottomFloor(floors[0]);
            towerBottom.gameObject.SetActive(hasBottom);
        }
        private void CreateTowerResources()
        {
            if (hasCreateTowerResources)
            {
                return;
            }
            towerTop = UIUtility.CreateWidget("JadeDynastyTower_Top", "Top");
            towerTop.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
            towerTop.transform.SetAsFirstSibling();
            topHeight = ((RectTransform)towerTop.transform).rect.height;
            towerTopBehaviour = towerTop.AddMissingComponent<JadeDynastyTowerFloorBehaviour>();
            var floorPrefab = UILoader.LoadPrefab("JadeDynastyTower_Floor");
            floorHeight = ((RectTransform)floorPrefab.transform).rect.height;
            for (int i = 0; i < 5; i++)
            {
                var instance = Instantiate<GameObject>(floorPrefab);
                var floorBehaviour = instance.AddMissingComponent<JadeDynastyTowerFloorBehaviour>();
                instance.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
                floorBehaviours.Add(floorBehaviour);
            }
            towerBottom = UIUtility.CreateWidget("JadeDynastyTower_Bottom", "Bottom");
            towerBottom.transform.SetParentEx(m_Tower.content, Vector3.zero, Quaternion.identity, Vector3.one);
            towerBottom.transform.SetAsLastSibling();
            bottomHeight = ((RectTransform)towerBottom.transform).rect.height;
            hasCreateTowerResources = true;
        }
        private void OnDisable()
        {
            StopAllCoroutines();
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c138ff352bc67574abd362aee0fc583d
timeCreated: 1548050025
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerFloorBehaviour.cs
New file
@@ -0,0 +1,64 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerFloorBehaviour : MonoBehaviour
    {
        [SerializeField] Image m_Floor;
        [SerializeField] Button m_Selected;
        [SerializeField] TextEx m_FloorName;
        [SerializeField] Image m_Challenge;
        [SerializeField] Image m_Cover;
        [SerializeField] RectTransform m_ContainerSelected;
        [SerializeField] UIEffect m_GateEffect;
        RectTransform m_RectTransform;
        RectTransform rectTransform { get { return m_RectTransform ?? (this.transform as RectTransform); } }
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        int floorId = 0;
        public void Display(int _floorId)
        {
            this.floorId = _floorId;
            var isOpened = this.model.currentFloor >= this.floorId;
            var config = Config.Instance.Get<JadeDynastyTowerConfig>(floorId);
            m_FloorName.text = config.floorName;
            m_Cover.gameObject.SetActive(this.model.currentFloor > this.floorId);
            if (this.model.currentFloor == this.floorId)
            {
                m_GateEffect.Play();
                m_Challenge.gameObject.SetActive(true);
                m_ContainerSelected.gameObject.SetActive(true);
                m_FloorName.color = UIHelper.GetUIColor(TextColType.NavyYellow);
            }
            else
            {
                m_GateEffect.Stop();
                m_Challenge.gameObject.SetActive(false);
                m_ContainerSelected.gameObject.SetActive(false);
                m_FloorName.color = UIHelper.s_LightYellow;
            }
        }
        public void Dispose()
        {
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerFloorBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 1e7ee76654016d1448b8fd5f9f680822
timeCreated: 1548051421
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerHintWin.cs
New file
@@ -0,0 +1,90 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerHintWin : Window
    {
        [SerializeField] Text m_Floor;
        [SerializeField] ItemBehaviour m_Reward;
        [SerializeField] RectTransform m_UnLockEquipPlace;
        [SerializeField] Text m_Description;
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
            Display();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void Display()
        {
            var config = Config.Instance.Get<JadeDynastyTowerConfig>(model.currentFloor);
            m_Floor.text = config.floorName;
            var isLastFloor = model.IsTopFloor(model.currentFloor);
            if (isLastFloor && model.currentFloor == model.highestPassFloor)
            {
                m_Reward.gameObject.SetActive(true);
                m_UnLockEquipPlace.gameObject.SetActive(false);
                m_Reward.SetItem(config.rewardIdsLevelS[0], config.rewardCountsLevelS[0]);
            }
            else
            {
                var isSpecialFloor = config.unLockEquipPlace > 0;
                if (isSpecialFloor)
                {
                    m_UnLockEquipPlace.gameObject.SetActive(true);
                    m_Reward.gameObject.SetActive(false);
                }
                else
                {
                    m_UnLockEquipPlace.gameObject.SetActive(false);
                    m_Reward.gameObject.SetActive(true);
                    m_Reward.SetItem(config.rewardIdsLevelS[0], config.rewardCountsLevelS[0]);
                }
            }
            m_Description.text = config.specialRewardDescription;
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerHintWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: b81f1f23b9a4ed14aadd6d8281558a6b
timeCreated: 1548076363
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerModel.cs
New file
@@ -0,0 +1,206 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerModel : Model, IPlayerLoginOk, IMapInitOk, IBeforePlayerDataInitialize
    {
        public const int DATA_MAPID = 31370;
        const int REDPOINTID = 1;
        const int FUNCTIONID = 164;
        public int highestPassFloor { get; private set; }
        public int currentFloor {
            get {
                if (IsTopFloor(highestPassFloor))
                {
                    return highestPassFloor;
                }
                else
                {
                    return highestPassFloor + 1;
                }
            }
        }
        public int specialUnLockFloor {
            get { return LocalSave.GetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "_JadeDynastyTowerUnLockFloor")); }
            set { LocalSave.SetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "_JadeDynastyTowerUnLockFloor"), value); }
        }
        public bool openJadeDynastyTower { get; set; }
        bool serverInited = false;
        Redpoint redpoint = new Redpoint(REDPOINTID);
        List<int> sortedFloors = new List<int>();
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public override void Init()
        {
            ParseConfig();
        }
        public override void UnInit()
        {
        }
        public void RequestChallenge()
        {
            var error = GetErrorOfChallenge();
            if (error == 0)
            {
                dungeonModel.RequestChallangeDungeon(DATA_MAPID, 0);
            }
            else
            {
                switch (error)
                {
                    case 1:
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    default:
                        break;
                }
            }
        }
        public bool IsChallengable()
        {
            return GetErrorOfChallenge() == 0;
        }
        private int GetErrorOfChallenge()
        {
            if (!FuncOpen.Instance.IsFuncOpen(FUNCTIONID))
            {
                return 1;
            }
            var coolDown = dungeonModel.GetEnterCoolDown(JadeDynastyTowerModel.DATA_MAPID);
            if (coolDown != null && coolDown.suplursSeconds > 0)
            {
                return 2;
            }
            var enterTimes = dungeonModel.GetEnterTimes(DATA_MAPID);
            var totalTimes = dungeonModel.GetTotalTimes(DATA_MAPID);
            if (enterTimes >= totalTimes)
            {
                return 3;
            }
            return 0;
        }
        public void RequestAward()
        {
            var sendInfo = new CA508_tagCMDoFBAction();
            sendInfo.ActionType = 1;
            sendInfo.ActionInfo = (uint)currentFloor;
            GameNetSystem.Instance.SendInfo(sendInfo);
        }
        public void RequestRefreshMonster()
        {
            var sendInfo = new CA508_tagCMDoFBAction();
            sendInfo.ActionType = 0;
            sendInfo.ActionInfo = (uint)currentFloor;
            GameNetSystem.Instance.SendInfo(sendInfo);
        }
        public void SetOpenJadeDynastyTowerWinDirty()
        {
            openJadeDynastyTower = true;
        }
        public List<int> GetShowFloors()
        {
            var currentIndex = sortedFloors.IndexOf(currentFloor);
            var floors = new List<int>();
            if (currentIndex < 2)
            {
                for (var i = 0; i <= 4; i++)
                {
                    floors.Add(sortedFloors[i]);
                }
            }
            else if (currentIndex >= sortedFloors.Count - 2)
            {
                for (var i = sortedFloors.Count - 3; i <= sortedFloors.Count - 1; i++)
                {
                    floors.Add(sortedFloors[i]);
                }
            }
            else
            {
                for (var i = currentIndex - 2; i <= currentIndex + 2; i++)
                {
                    floors.Add(sortedFloors[i]);
                }
            }
            return floors;
        }
        public bool IsTopFloor(int floor)
        {
            return floor == sortedFloors[sortedFloors.Count - 1];
        }
        public bool IsBottomFloor(int floor)
        {
            return floor == sortedFloors[0];
        }
        public void UpdateHighestPassFloor(HB213_tagMCZhuXianTowerInfo info)
        {
            var oldRecorder = highestPassFloor;
            highestPassFloor = (int)info.Floor;
            if (serverInited && highestPassFloor > oldRecorder)
            {
                var config = Config.Instance.Get<JadeDynastyTowerConfig>(highestPassFloor);
                if (config.unLockEquipPlace > 0)
                {
                    specialUnLockFloor = highestPassFloor;
                }
            }
        }
        public void OnPlayerLoginOk()
        {
            serverInited = true;
        }
        public void OnMapInitOk()
        {
            switch (PlayerDatas.Instance.baseData.MapID)
            {
                case DATA_MAPID:
                    RequestRefreshMonster();
                    break;
            }
        }
        private void ParseConfig()
        {
            var configs = Config.Instance.GetAllKeys<JadeDynastyTowerConfig>();
            foreach (var item in configs)
            {
                sortedFloors.Add(int.Parse(item));
            }
        }
        public void OnBeforePlayerDataInitialize()
        {
            serverInited = false;
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 16f4d5f3b87a83c428ab29e4ce24d4c1
timeCreated: 1547780261
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerRankBehaviour.cs
New file
@@ -0,0 +1,78 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class JadeDynastyTowerRankBehaviour : MonoBehaviour
    {
        [SerializeField] RankCell[] m_RankCells;
        [SerializeField] Text m_MyRank;
        [SerializeField] Button m_ViewRank;
        public void Display(RankInfo[] rankInfos, int myRank)
        {
            for (var i = 0; i < m_RankCells.Length; i++)
            {
                var cell = m_RankCells[i];
                if (i < rankInfos.Length)
                {
                    var rankInfo = rankInfos[i];
                    cell.container.SetActive(true);
                    cell.name.text = string.IsNullOrEmpty(rankInfo.name) ? Language.Get("L1046") : rankInfo.name;
                    cell.floor.text = rankInfo.floor == 0 ? "" : Language.Get("JadeDynastyLayer", rankInfo.floor);
                    cell.time.text = rankInfo.time == 0 ? "" : Language.Get("JadeDynastyTime", 10000 - rankInfo.time);
                }
                else
                {
                    m_RankCells[i].container.SetActive(false);
                }
            }
            if (myRank == -1)
            {
                m_MyRank.text = Language.Get("L1045");
            }
            else
            {
                m_MyRank.text = Language.Get("L1092", myRank);
            }
        }
        private void Start()
        {
            m_ViewRank.SetListener(ViewRank);
        }
        private void ViewRank()
        {
        }
        public struct RankInfo
        {
            public string name;
            public int floor;
            public int time;
        }
        [System.Serializable]
        public struct RankCell
        {
            public GameObject container;
            public Text name;
            public Text floor;
            public Text time;
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerRankBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f17f9c2e8f2d51b4696795c4088005e0
timeCreated: 1548056029
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerRewardBehaviour.cs
New file
@@ -0,0 +1,92 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerRewardBehaviour : MonoBehaviour
    {
        [SerializeField] ItemBehaviour[] m_RewardsLevelS;
        [SerializeField] ItemBehaviour[] m_RewardsLevelA;
        [SerializeField] ItemBehaviour[] m_RewardsLevelB;
        [SerializeField] RectTransform m_ExtraRewardContainer;
        [SerializeField] Text m_ExtraRewardFloor;
        [SerializeField] Text m_ExtraRewardDescription;
        public void Display(int floor)
        {
            var config = Config.Instance.Get<JadeDynastyTowerConfig>(floor);
            for (var i = 0; i < m_RewardsLevelS.Length; i++)
            {
                var behaviour = m_RewardsLevelS[i];
                if (i < config.rewardIdsLevelS.Length)
                {
                    var id = config.rewardIdsLevelS[i];
                    var count = config.rewardCountsLevelS[i];
                    behaviour.gameObject.SetActive(true);
                    behaviour.SetItem(id, count);
                }
                else
                {
                    behaviour.gameObject.SetActive(false);
                }
            }
            for (var i = 0; i < m_RewardsLevelA.Length; i++)
            {
                var behaviour = m_RewardsLevelA[i];
                if (i < config.rewardIdsLevelA.Length)
                {
                    var id = config.rewardIdsLevelA[i];
                    var count = config.rewardIdsLevelS[i];
                    behaviour.gameObject.SetActive(true);
                    behaviour.SetItem(id, count);
                }
                else
                {
                    behaviour.gameObject.SetActive(false);
                }
            }
            for (var i = 0; i < m_RewardsLevelB.Length; i++)
            {
                var behaviour = m_RewardsLevelB[i];
                if (i < config.rewardIdsLevelB.Length)
                {
                    var id = config.rewardIdsLevelB[i];
                    var count = config.rewardCountsLevelB[i];
                    behaviour.gameObject.SetActive(true);
                    behaviour.SetItem(id, count);
                }
                else
                {
                    behaviour.gameObject.SetActive(false);
                }
            }
            if (config.unLockEquipPlace != 0)
            {
                m_ExtraRewardContainer.gameObject.SetActive(true);
                m_ExtraRewardFloor.text = Language.Get("JadeDynastyExtraReward", config.floorIndex);
                m_ExtraRewardDescription.text = config.specialRewardDescription;
            }
            else
            {
                m_ExtraRewardContainer.gameObject.SetActive(false);
            }
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerRewardBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e88c84b0168d5e04797b1964fd51f8db
timeCreated: 1548056741
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerUnLockWin.cs
New file
@@ -0,0 +1,90 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerUnLockWin : Window
    {
        [SerializeField] Text m_UnLockDescription;
        [SerializeField] Button m_Close;
        [SerializeField] Text m_CoolDown;
        float timer = 0f;
        float autoCloseTime = 0f;
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Close.AddListener(Ensure);
        }
        protected override void OnPreOpen()
        {
            var config = Config.Instance.Get<JadeDynastyTowerConfig>(model.specialUnLockFloor);
            m_UnLockDescription.text = config.specialRewardDescription;
            autoCloseTime = Time.time + 10;
            m_CoolDown.text = Language.Get("RuneTower9", 10);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.specialUnLockFloor = 0;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        protected override void LateUpdate()
        {
            base.LateUpdate();
            timer += Time.deltaTime;
            if (timer > 1f)
            {
                timer = 0f;
                m_CoolDown.text = Language.Get("RuneTower9", Mathf.RoundToInt(autoCloseTime - Time.time));
            }
            if (Time.time > autoCloseTime)
            {
                Ensure();
            }
        }
        private void Ensure()
        {
            CloseClick();
            WindowCenter.Instance.Close<MainInterfaceWin>();
            WindowCenter.Instance.Open<TowerWin>(false, 1);
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerUnLockWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2eb5042a4c4698048a3548f4dfd13f85
timeCreated: 1548060437
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadeDynastyTowerWin.cs
New file
@@ -0,0 +1,165 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, January 18, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyTowerWin : Window
    {
        [SerializeField] JadeDynastyTowerBehaviour m_TowerBehaviour;
        [SerializeField] JadeDynastyTowerRankBehaviour m_RankBehaviour;
        [SerializeField] JadeDynastyTowerRewardBehaviour m_RewardBehaviour;
        [SerializeField] TextEx m_FightPower;
        [SerializeField] TextEx m_ChallengeTimes;
        [SerializeField] Button m_Challenge;
        [SerializeField] TextEx m_ChallengeTitle;
        [SerializeField] ImageEx m_ChallengeImage;
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        ChallengeButtonShowState challengeButtonShowState = ChallengeButtonShowState.Normal;
        float timer = 0f;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Challenge.SetListener(Challenge);
        }
        protected override void OnPreOpen()
        {
            ModelCenter.Instance.GetModel<RankModel>().SendBegRank(PlayerRankData.RankType.JadeDynastyTower);
        }
        protected override void OnAfterOpen()
        {
            PlayerDatas.Instance.rank.OnRefreshRank += DisplayRankInfo;
        }
        protected override void OnPreClose()
        {
            PlayerDatas.Instance.rank.OnRefreshRank -= DisplayRankInfo;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            DisplayBaseInfo();
            DisplayChallengeTimes();
            DisplayChallengeButton();
            DisplayFightPower();
            DisplayRankInfo(23);
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            timer += Time.deltaTime;
            if (timer > 1f)
            {
                timer = 0f;
                DisplayChallengeButton();
            }
        }
        #endregion
        private void DisplayBaseInfo()
        {
            m_TowerBehaviour.Display();
            m_RewardBehaviour.Display(model.currentFloor);
        }
        private void DisplayChallengeTimes()
        {
            var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyTowerModel.DATA_MAPID);
            var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyTowerModel.DATA_MAPID);
            m_ChallengeTimes.text = StringUtility.Contact(totalTimes - enterTimes, "/", totalTimes);
            m_ChallengeTimes.colorType = enterTimes >= totalTimes ? TextColType.Red : TextColType.DarkGreen;
        }
        private void DisplayChallengeButton()
        {
            var suplursSeconds = 0f;
            var coolDown = dungeonModel.GetEnterCoolDown(JadeDynastyTowerModel.DATA_MAPID);
            suplursSeconds = coolDown != null ? coolDown.suplursSeconds : 0f;
            if (suplursSeconds > 0)
            {
                m_ChallengeTitle.text = Language.Get("JadeDynastyCD", Mathf.RoundToInt(suplursSeconds));
                challengeButtonShowState = ChallengeButtonShowState.CoolDown;
            }
            else
            {
                m_ChallengeTitle.text = Language.Get("Multiple_Challenge");
                challengeButtonShowState = ChallengeButtonShowState.Normal;
            }
            m_ChallengeImage.gray = !model.IsChallengable();
        }
        private void DisplayFightPower()
        {
            var config = Config.Instance.Get<JadeDynastyTowerConfig>(model.currentFloor);
            m_FightPower.text = config.fightPower.ToString();
            var reached = PlayerDatas.Instance.baseData.FightPoint >= config.fightPower;
            m_FightPower.colorType = reached ? TextColType.Green : TextColType.Red;
        }
        private void DisplayRankInfo(int type)
        {
            var rankInfos = new JadeDynastyTowerRankBehaviour.RankInfo[3];
            var rankDatas = PlayerDatas.Instance.rank.GetRankList(23);
            if (rankDatas != null)
            {
                for (var i = 0; i < Mathf.Min(3, rankDatas.Count); i++)
                {
                    var data = rankDatas[i];
                    rankInfos[i] = new JadeDynastyTowerRankBehaviour.RankInfo()
                    {
                        name = data.Name1,
                        floor = (int)data.cmpValue,
                        time = (int)data.cmpValue2
                    };
                }
            }
            var myRank = PlayerDatas.Instance.rank.GetSelfRank(23);
            m_RankBehaviour.Display(rankInfos, myRank);
        }
        private void Challenge()
        {
            model.RequestChallenge();
        }
        enum ChallengeButtonShowState
        {
            Normal,
            CoolDown,
        }
    }
}
System/JadeDynastyTower/JadeDynastyTowerWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: bae03e23d1b1dca4b95782067bbf6855
timeCreated: 1547780514
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/JadyDynastyTowerVictoryWin.cs
New file
@@ -0,0 +1,125 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class JadyDynastyTowerVictoryWin : DungeonVictoryWin
    {
        [SerializeField] RectTransform m_AwardContainer;
        [SerializeField] Button m_Award;
        [SerializeField] Text m_AwardTimer;
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Award.SetListener(Award);
        }
        protected override void OnPreOpen()
        {
            m_ContainerPoivt.gameObject.SetActive(false);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        protected override void Display()
        {
            base.RequireDungeonExit();
            m_ContainerPoivt.gameObject.SetActive(true);
            base.DrawPassTime();
            base.DrawGetExp();
            base.DrawItemRewards();
            base.DrawPassGrade();
            DisplayAwardAndExitButton();
        }
        protected override void ExitDungeon()
        {
            base.ExitDungeon();
            model.SetOpenJadeDynastyTowerWinDirty();
        }
        protected override void DrawExitTimer(int seconds)
        {
            if (m_ExitTimer.gameObject.activeInHierarchy)
            {
                m_AwardTimer.text = Language.Get("CoinTaskWin_Btn_Receive");
                m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp(seconds, 0, int.MaxValue));
            }
            else
            {
                m_AwardTimer.text = Language.Get("JadeDynastyRewardTime", Mathf.Clamp(seconds, 0, int.MaxValue));
                m_ExitTimer.text = Language.Get("DemonDungeonExit");
            }
        }
        private void ChallengeNextRuneTower()
        {
            var dungeonStage = StageManager.Instance.CurrentStage as JadeDynastyTowerDungeonStage;
            dungeonStage.PerformChallengeNextLevel();
            dungeonModel.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
            dungeonModel.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
            CloseClick();
        }
        private void DisplayAwardAndExitButton()
        {
            if (dungeonModel.dungeonResult.grade == 5)
            {
                m_Exit.gameObject.SetActive(false);
            }
            else
            {
                m_Exit.gameObject.SetActive(true);
            }
        }
        private void Award()
        {
            model.RequestAward();
            if (model.IsTopFloor(model.currentFloor))
            {
                dungeonModel.ExitCurrentDungeon();
            }
            else
            {
                ChallengeNextRuneTower();
            }
        }
    }
}
System/JadeDynastyTower/JadyDynastyTowerVictoryWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 89e8fcf205119574cba510641f9efe0f
timeCreated: 1548121676
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyTower/TowerWin.cs
New file
@@ -0,0 +1,93 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class TowerWin : Window
    {
        [SerializeField] FunctionButtonGroup m_FunctionGroup;
        [SerializeField] FunctionButton m_RuneTower;
        [SerializeField] FunctionButton m_JadeDynastyTower;
        [SerializeField] Button m_Close;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_RuneTower.SetListener(OpenRuneTower);
            m_JadeDynastyTower.SetListener(OpenJadeDynastyTower);
            m_Close.SetListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            CloseSubWindows();
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            m_FunctionGroup.TriggerByOrder(functionOrder);
        }
        #endregion
        private void OpenRuneTower()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<RuneTowerWin>(true);
            functionOrder = m_RuneTower.order;
        }
        private void OpenJadeDynastyTower()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<JadeDynastyTowerWin>(true);
            functionOrder = m_JadeDynastyTower.order;
        }
        private void CloseSubWindows()
        {
            var windows = WindowConfig.Get().FindChildWindows("TowerWin");
            foreach (var item in windows)
            {
                WindowCenter.Instance.Close(item);
            }
        }
    }
}
System/JadeDynastyTower/TowerWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8cc7d59e2c390fc45b2f054b45bdc4c7
timeCreated: 1548042171
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/KnapSack/Logic/EquipTip.cs
@@ -141,6 +141,7 @@
        }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        JadeDynastyEquipModel equipModel { get { return ModelCenter.Instance.GetModel<JadeDynastyEquipModel>(); } }
        ItemAttrData itemAttrData;
@@ -189,7 +190,8 @@
            if(itemAttrData.isCompare)
            {
                if (itemAttrData.packType != PackType.rptEquip
                    && itemAttrData.packType != PackType.rptDogzEquip)
                    && itemAttrData.packType != PackType.rptDogzEquip
                    && itemAttrData.packType != PackType.rptJadeDynastyEquip)
                {
                    itemTipsModel.SetCurTips(this.GetComponent<RectTransform>());
                }
@@ -216,7 +218,8 @@
                itemAttrData.guid,itemAttrData.packType,itemAttrData.isCompare, itemAttrData.useDataDict);
            itemCell.Init(cellModel);
            if(itemAttrData.packType == PackType.rptEquip
                || itemAttrData.packType == PackType.rptDogzEquip)
                || itemAttrData.packType == PackType.rptDogzEquip
                || itemAttrData.packType == PackType.rptJadeDynastyEquip)
            {
                putOnIcon.SetActive(true);
            }
@@ -545,6 +548,18 @@
                    case 9:
                    case 10:
                    case 12:
                    case 121:
                    case 122:
                    case 123:
                    case 124:
                    case 125:
                    case 126:
                    case 127:
                    case 128:
                    case 129:
                    case 130:
                    case 131:
                    case 132:
                        legendCntPreview.text = itemTipsModel.GetEquipLegendAttrCntPreview(itemAttrData);
                        break;
                    case 101:
@@ -863,21 +878,8 @@
                jadeDynastySuitObj.SetActive(false);
                return;
            }
            bool isMaxSuitLv = false;
            int maxSuitLv = 1;
            int curSuitLv = itemAttrData.packType == PackType.rptJadeDynastyItem ? maxSuitLv : 0;
            bool isShowNext = !isMaxSuitLv && itemAttrData.packType == PackType.rptJadeDynastyItem;
            nextJadeDynastySuitAttr.gameObject.SetActive(isShowNext);
            if(isShowNext)
            {
                curJadeDynastySuitAttr.SetDisplay(curSuitLv);
                nextJadeDynastySuitAttr.SetDisplay(curSuitLv + 1);
            }
            else
            {
                curJadeDynastySuitAttr.SetDisplay(curSuitLv);
            }
            curJadeDynastySuitAttr.SetDisplay(itemAttrData.packType,false,itemAttrData.itemConfig.EquipPlace);
            nextJadeDynastySuitAttr.SetDisplay(itemAttrData.packType, true, itemAttrData.itemConfig.EquipPlace);
        }
        private void SetMidUIHeight(float midHeight)
@@ -915,6 +917,18 @@
                case 9:
                case 10:
                case 12:
                case 121:
                case 122:
                case 123:
                case 124:
                case 125:
                case 126:
                case 127:
                case 128:
                case 129:
                case 130:
                case 131:
                case 132:
                    if (dogzEquipDesText != null)
                    {
                        dogzEquipDesText.gameObject.SetActive(false);
System/KnapSack/Logic/ItemTipsModel.cs
@@ -532,15 +532,18 @@
                if (isCompare)
                {
                   if(type != PackType.rptDogzItem)
                    switch(type)
                    {
                        SetCompareAttrData(PackType.rptEquip, itemModel.chinItemModel.EquipPlace);
                        case PackType.rptDogzItem:
                            SetCompareAttrData(PackType.rptDogzEquip, itemModel.chinItemModel.EquipPlace);
                            break;
                        case PackType.rptJadeDynastyItem:
                            SetCompareAttrData(PackType.rptJadeDynastyEquip, itemModel.chinItemModel.EquipPlace);
                            break;
                        default:
                            SetCompareAttrData(PackType.rptEquip, itemModel.chinItemModel.EquipPlace);
                            break;
                    }
                   else
                    {
                        SetCompareAttrData(PackType.rptDogzEquip, itemModel.chinItemModel.EquipPlace);
                    }
                }
            }
@@ -564,13 +567,17 @@
            if (itemAttrData.isCompare)
            {
                if (itemAttrData.packType != PackType.rptDogzItem)
                switch (itemAttrData.packType)
                {
                    SetCompareAttrData(PackType.rptEquip, itemAttrData.itemConfig.EquipPlace);
                }
                else
                {
                    SetCompareAttrData(PackType.rptDogzEquip, itemAttrData.itemConfig.EquipPlace);
                    case PackType.rptDogzItem:
                        SetCompareAttrData(PackType.rptDogzEquip, itemAttrData.itemConfig.EquipPlace);
                        break;
                    case PackType.rptJadeDynastyItem:
                        SetCompareAttrData(PackType.rptJadeDynastyEquip, itemAttrData.itemConfig.EquipPlace);
                        break;
                    default:
                        SetCompareAttrData(PackType.rptEquip, itemAttrData.itemConfig.EquipPlace);
                        break;
                }
            }
@@ -608,28 +615,69 @@
                    var dogzModel = ModelCenter.Instance.GetModel<DogzModel>();
                    dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz,equipPlace,out itemModel);
                    break;
                case PackType.rptJadeDynastyEquip:
                    itemModel = playerPack.GetItemModelByIndex(type, equipPlace);
                    break;
            }
          
            if (itemModel == null) return;
            if (equipPlace == (int)RoleEquipType.retFairyCan)
            ItemModel fairyModel2 = null;
            switch ((RoleEquipType)equipPlace)
            {
                ItemModel fairyModel2 = playerPack.GetItemModelByIndex(type,(int)RoleEquipType.retFairyCan2);
                if (fairyModel2 != null)
                {
                    if (itemModel != null)
                case RoleEquipType.retFairyCan:
                    fairyModel2 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.retFairyCan2);
                    if (fairyModel2 != null)
                    {
                        if (fairyModel2.equipScore < itemModel.equipScore)
                        if (itemModel != null)
                        {
                            itemModel = fairyModel2;
                            if (fairyModel2.equipScore < itemModel.equipScore)
                            {
                                itemModel = fairyModel2;
                            }
                        }
                    }
                }
                else
                {
                    itemModel = fairyModel2;
                }
                    else
                    {
                        itemModel = fairyModel2;
                    }
                    break;
                case RoleEquipType.JadeDynasty_Glove1:
                    fairyModel2 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Glove2);
                    if (fairyModel2 != null)
                    {
                        if (itemModel != null)
                        {
                            if (fairyModel2.equipScore < itemModel.equipScore)
                            {
                                itemModel = fairyModel2;
                            }
                        }
                    }
                    else
                    {
                        itemModel = fairyModel2;
                    }
                    break;
                case RoleEquipType.JadeDynasty_Ring1:
                    fairyModel2 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Ring2);
                    if (fairyModel2 != null)
                    {
                        if (itemModel != null)
                        {
                            if (fairyModel2.equipScore < itemModel.equipScore)
                            {
                                itemModel = fairyModel2;
                            }
                        }
                    }
                    else
                    {
                        itemModel = fairyModel2;
                    }
                    break;
            }
            if (itemModel != null)
            {
                compareAttrData = new ItemAttrData(itemModel.itemInfo.ItemID, false, (ulong)itemModel.itemInfo.ItemCount
System/KnapSack/Logic/PackModelInterface.cs
@@ -1618,30 +1618,70 @@
            ItemConfig chinItemModel = Config.Instance.Get<ItemConfig>(_itemID);
            if (chinItemModel != null)
            {
                if (chinItemModel.EquipPlace < 1 || chinItemModel.EquipPlace > 12) return 0;
                ItemModel model = playerPack.GetItemModelByIndex(PackType.rptEquip, chinItemModel.EquipPlace);
                if (chinItemModel.EquipPlace == (int)RoleEquipType.retFairyCan)
                ItemModel putOnModel = null;
                switch((RoleEquipType)chinItemModel.EquipPlace)
                {
                    ItemModel fairyModel2 = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retFairyCan2);
                    if (fairyModel2 != null)
                    case RoleEquipType.retClothes:
                    case RoleEquipType.retFairyCan:
                    case RoleEquipType.retBelt:
                    case RoleEquipType.retHat:
                    case RoleEquipType.retNeck:
                    case RoleEquipType.retShoes:
                    case RoleEquipType.retSpiritAnimal:
                    case RoleEquipType.retTrousers:
                    case RoleEquipType.retWeapon:
                    case RoleEquipType.retWeapon2:
                    case RoleEquipType.retWing:
                        putOnModel = playerPack.GetItemModelByIndex(PackType.rptEquip, chinItemModel.EquipPlace);
                        break;
                    case RoleEquipType.JadeDynasty_Cloak:
                    case RoleEquipType.JadeDynasty_FaceMask:
                    case RoleEquipType.JadeDynasty_Glove1:
                    case RoleEquipType.JadeDynasty_Pendant:
                    case RoleEquipType.JadeDynasty_Ring1:
                    case RoleEquipType.JadeDynasty_Ruyi:
                    case RoleEquipType.JadeDynasty_Sword1:
                    case RoleEquipType.JadeDynasty_Sword2:
                    case RoleEquipType.JadeDynasty_Sword3:
                    case RoleEquipType.JadeDynasty_Sword4:
                        putOnModel = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, chinItemModel.EquipPlace);
                        break;
                    default:
                        return 0;
                }
                ItemModel putOnModel2 = null;
                switch((RoleEquipType)chinItemModel.EquipPlace)
                {
                    case RoleEquipType.retFairyCan:
                        putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retFairyCan2);
                        break;
                    case RoleEquipType.JadeDynasty_Glove1:
                        putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Glove2);
                        break;
                    case RoleEquipType.JadeDynasty_Ring1:
                        putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Ring2);
                        break;
                }
                if (putOnModel2 != null)
                {
                    if (putOnModel != null)
                    {
                        if (model != null)
                        if (putOnModel2.equipScore < putOnModel.equipScore)
                        {
                            if (fairyModel2.equipScore < model.equipScore)
                            {
                                model = fairyModel2;
                            }
                            putOnModel = putOnModel2;
                        }
                    }
                    else
                    {
                        model = fairyModel2;
                    }
                }
                int equipScore1 = 0;
                if (model != null)
                else
                {
                    equipScore1 = (int)model.equipScore;
                    putOnModel = putOnModel2;
                }
                int equipScore1 = 0;
                if (putOnModel != null)
                {
                    equipScore1 = (int)putOnModel.equipScore;
                }
                int playerJob = PlayerDatas.Instance.baseData.Job;
System/KnapSack/Logic/PackSendQuestMgr.cs
@@ -165,6 +165,19 @@
                        break;
                }
            }
            if(config.EquipPlace >= (int)RoleEquipType.JadeDynasty_Cloak
                && config.EquipPlace <= (int)RoleEquipType.JadeDynasty_Sword4)
            {
                var jadeDynastyModel = ModelCenter.Instance.GetModel<JadeDynastyEquipModel>();
                bool islock = jadeDynastyModel.IsLockEquipPlace(config.EquipPlace);
                isCanPut = !islock;
                if(islock)
                {
                    MessageWin.Inst.ShowFixedTip("请解锁诛仙塔");
                }
            }
            if(isCanPut)
            {
                CheckPutOnPlace();
@@ -422,12 +435,30 @@
        /// </summary>
        private void CheckPutOnPlace()
        {
            if ((RoleEquipType)sendItemConfig.EquipPlace == RoleEquipType.retFairyCan)
            ItemModel putOnModel1 = null;
            ItemModel putOnModel2 = null;
            bool isSameEquip = false;
            switch ((RoleEquipType)sendItemConfig.EquipPlace)
            {
                SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptEquip);
                case RoleEquipType.retFairyCan:
                    isSameEquip = true;
                    putOnModel1 = playerPack.GetItemModelByIndex(PackType.rptEquip,sendItemConfig.EquipPlace);
                    putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retFairyCan2);
                    break;
                case RoleEquipType.JadeDynasty_Glove1:
                    isSameEquip = true;
                    putOnModel1 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, sendItemConfig.EquipPlace);
                    putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Glove2);
                    break;
                case RoleEquipType.JadeDynasty_Ring1:
                    isSameEquip = true;
                    putOnModel1 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, sendItemConfig.EquipPlace);
                    putOnModel2 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Ring2);
                    break;
            }
                ItemModel putOnModel1 = singlePack.GetItemModelByIndex(sendItemConfig.EquipPlace);
                ItemModel putOnModel2 = singlePack.GetItemModelByIndex((int)RoleEquipType.retFairyCan2);
            if(isSameEquip)
            {
                if (putOnModel1 != null || putOnModel2 != null)
                {
                    WindowCenter.Instance.Open<FairyWearWin>();
@@ -543,14 +574,44 @@
        public void SendPutOnQuest(int equipPlace, int itemIndex)
        {
            EquipAttrShift(equipPlace);
            switch((RoleEquipType)equipPlace)
            {
                case RoleEquipType.JadeDynasty_Cloak:
                case RoleEquipType.JadeDynasty_FaceMask:
                case RoleEquipType.JadeDynasty_Glove1:
                case RoleEquipType.JadeDynasty_Glove2:
                case RoleEquipType.JadeDynasty_Pendant:
                case RoleEquipType.JadeDynasty_Ring1:
                case RoleEquipType.JadeDynasty_Ring2:
                case RoleEquipType.JadeDynasty_Ruyi:
                case RoleEquipType.JadeDynasty_Sword1:
                case RoleEquipType.JadeDynasty_Sword2:
                case RoleEquipType.JadeDynasty_Sword3:
                case RoleEquipType.JadeDynasty_Sword4:
                    SendPutOnJadeDynastyEquip(equipPlace,itemIndex);
                    break;
                default:
                    SendPutOnNormalEquip(equipPlace,itemIndex);
                    break;
            }
            SoundPlayer.Instance.PlayUIAudio(24);
        }
        private void SendPutOnNormalEquip(int equipPlace, int itemIndex)
        {
            C0703_tagCEquipItem putOnEquip = new C0703_tagCEquipItem();
            putOnEquip.RoleEquipType = (byte)equipPlace;
            putOnEquip.ItemIndex = (byte)itemIndex;
            GameNetSystem.Instance.SendInfo(putOnEquip);
            SoundPlayer.Instance.PlayUIAudio(24);
        }
        private void SendPutOnJadeDynastyEquip(int equipPlace, int itemIndex)
        {
            CA330_tagCMEquipZhuXianItem equipZhuXianItem = new CA330_tagCMEquipZhuXianItem();
            equipZhuXianItem.EquipIndex = (byte)(equipPlace - 121);
            equipZhuXianItem.ItemIndex = (byte)itemIndex;
            GameNetSystem.Instance.SendInfo(equipZhuXianItem);
        }
        /// <summary>
        /// 替换装备时属性转移提示
@@ -620,24 +681,71 @@
        public void SendPutOffQuest(ItemWinBtnType btnType,string guid)
        {
            ItemModel putOnModel = playerPack.GetItemModelByGUID(guid);
            if (putOnModel == null || putOnModel.packType != PackType.rptEquip) return;
            if (putOnModel == null) return;
            SinglePackModel rptItemPack = playerPack.GetSinglePackModel(PackType.rptItem);
            if (rptItemPack == null) return;
            if (rptItemPack.GetRemainGridCount() < 1)
            SinglePackModel singlePack = null;
            int remainGrid = 0;
            int equipPlace = putOnModel.itemInfo.ItemPlace;
            equipPlace = putOnModel.packType == PackType.rptJadeDynastyEquip ? equipPlace + 121 : equipPlace;
            switch ((RoleEquipType)equipPlace)
            {
                SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_998371");
            }
            else
            {
                C0704_tagCUnEquipItem putOffEquip = new C0704_tagCUnEquipItem();
                putOffEquip.EquipIndex = (byte)putOnModel.itemInfo.ItemPlace;
                putOffEquip.PackIndex = (byte)rptItemPack.GetNullGridIndex();
                GameNetSystem.Instance.SendInfo(putOffEquip);
                SoundPlayer.Instance.PlayUIAudio(25);
                case RoleEquipType.JadeDynasty_Cloak:
                case RoleEquipType.JadeDynasty_FaceMask:
                case RoleEquipType.JadeDynasty_Glove1:
                case RoleEquipType.JadeDynasty_Glove2:
                case RoleEquipType.JadeDynasty_Pendant:
                case RoleEquipType.JadeDynasty_Ring1:
                case RoleEquipType.JadeDynasty_Ring2:
                case RoleEquipType.JadeDynasty_Ruyi:
                case RoleEquipType.JadeDynasty_Sword1:
                case RoleEquipType.JadeDynasty_Sword2:
                case RoleEquipType.JadeDynasty_Sword3:
                case RoleEquipType.JadeDynasty_Sword4:
                    remainGrid = playerPack.GetReaminGridCount(PackType.rptJadeDynastyItem);
                    if(remainGrid < 1)
                    {
                        SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_998371");
                    }
                    else
                    {
                        SendPutOffJadeDynastyEquip(equipPlace);
                        SoundPlayer.Instance.PlayUIAudio(25);
                    }
                    break;
                default:
                    singlePack = playerPack.GetSinglePackModel(PackType.rptItem);
                    remainGrid = playerPack.GetReaminGridCount(PackType.rptItem);
                    if (remainGrid < 1)
                    {
                        SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_998371");
                    }
                    else
                    {
                        if(singlePack != null)
                        {
                            int gridIndex = singlePack.GetNullGridIndex();
                            SendPutOffNormalEquip(equipPlace,gridIndex);
                            SoundPlayer.Instance.PlayUIAudio(25);
                        }
                    }
                    break;
            }
        }
        private void SendPutOffNormalEquip(int equipPlace,int itemIndex)
        {
            C0704_tagCUnEquipItem putOffEquip = new C0704_tagCUnEquipItem();
            putOffEquip.EquipIndex = (byte)equipPlace;
            putOffEquip.PackIndex = (byte)itemIndex;
            GameNetSystem.Instance.SendInfo(putOffEquip);
        }
        private void SendPutOffJadeDynastyEquip(int equipPlace)
        {
            CA331_tagCMUnEquipZhuXianItem unEquipZhuXianItem = new CA331_tagCMUnEquipZhuXianItem();
            unEquipZhuXianItem.EquipIndex = (byte)(equipPlace - 121);
            GameNetSystem.Instance.SendInfo(unEquipZhuXianItem);
        }
        #endregion
        #region 发送放入仓库请求
System/KnapSack/Logic/PlayerPackModels.cs
@@ -845,6 +845,16 @@
        public ItemModel GetItemModelByIndex(PackType type, int index)
        {
            switch(type)
            {
                case PackType.rptJadeDynastyEquip:
                    if(index >= 121)
                    {
                        index = index - 121;
                    }
                    break;
            }
            ItemModel itemModel = null;
            if (playerPackDict.ContainsKey(type))
            {
System/KnapSack/Logic/SinglePackModel.cs
@@ -59,7 +59,16 @@
        public ItemModel GetItemModelByIndex(int index)
        {
        {
            switch (packType)
            {
                case PackType.rptJadeDynastyEquip:
                    if (index >= 121)
                    {
                        index = index - 121;
                    }
                    break;
            }
            ItemModel itemModel = null;
            packModelIndexDict.TryGetValue(index, out itemModel);
            return itemModel;
System/KnapSack/New/CommonItemBaisc.cs
@@ -219,7 +219,8 @@
            ItemConfig config = Config.Instance.Get<ItemConfig>(itemId);
            int playerJob = PlayerDatas.Instance.baseData.Job;
            if (config == null || (!isCompare && compareSocre == 0) || config.EquipPlace == 0 
                || (score == compareSocre && compareSocre != 0) || (compareSocre <= 0 && (type == PackType.rptEquip || type == PackType.rptDogzEquip))) return 0;
                || (score == compareSocre && compareSocre != 0) || (compareSocre <= 0 && (type == PackType.rptEquip || type == PackType.rptDogzEquip
                 || type == PackType.rptJadeDynastyEquip))) return 0;
            ItemModel model = playerPack.GetItemModelByGUID(guid);
            if (model != null && modelInterface.IsOverdue(guid, itemId, model.useDataDict)) return 1;
@@ -227,13 +228,17 @@
            if (isCompare)
            {
               if(type != PackType.rptDogzItem)
                switch(type)
                {
                    compareSocre = GetCompareSocre(PackType.rptEquip,config.EquipPlace);
                }
               else
                {
                    compareSocre = GetCompareSocre(PackType.rptDogzEquip, config.EquipPlace);
                    case PackType.rptDogzItem:
                        compareSocre = GetCompareSocre(PackType.rptDogzEquip, config.EquipPlace);
                        break;
                    case PackType.rptJadeDynastyItem:
                        compareSocre = GetCompareSocre(PackType.rptJadeDynastyEquip, config.EquipPlace);
                        break;
                    default:
                        compareSocre = GetCompareSocre(PackType.rptEquip, config.EquipPlace);
                        break;
                }
            }
@@ -250,14 +255,16 @@
        public int GetCompareSocre(PackType type,int equipPlace)
        {
            ItemModel fairy01 = null;
            ItemModel fairy02 = null;
            switch (type)
            {
                case PackType.rptEquip:
                    switch ((RoleEquipType)equipPlace)
                    {
                        case RoleEquipType.retFairyCan:
                            ItemModel fairy01 = playerPack.GetItemModelByIndex(type,(int)RoleEquipType.retFairyCan);
                            ItemModel fairy02 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.retFairyCan2);
                             fairy01 = playerPack.GetItemModelByIndex(type,(int)RoleEquipType.retFairyCan);
                             fairy02 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.retFairyCan2);
                            if(fairy01 == null || fairy02 == null)
                            {
                                return 0;
@@ -275,6 +282,36 @@
                    ItemModel putOnModel = null;
                    dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz, equipPlace, out putOnModel);
                    return putOnModel == null ? 0 : putOnModel.equipScore;
                case PackType.rptJadeDynastyEquip:
                    switch ((RoleEquipType)equipPlace)
                    {
                        case RoleEquipType.JadeDynasty_Glove1:
                            fairy01 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Glove1);
                            fairy02 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Glove2);
                            if (fairy01 == null || fairy02 == null)
                            {
                                return 0;
                            }
                            else
                            {
                                return fairy01.equipScore >= fairy02.equipScore ? fairy02.equipScore : fairy01.equipScore;
                            }
                        case RoleEquipType.JadeDynasty_Ring1:
                            fairy01 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Ring1);
                            fairy02 = playerPack.GetItemModelByIndex(type, (int)RoleEquipType.JadeDynasty_Ring2);
                            if (fairy01 == null || fairy02 == null)
                            {
                                return 0;
                            }
                            else
                            {
                                return fairy01.equipScore >= fairy02.equipScore ? fairy02.equipScore : fairy01.equipScore;
                            }
                        default:
                            ItemModel model = playerPack.GetItemModelByIndex(type, equipPlace);
                            return model == null ? 0 : model.equipScore;
                    }
            }
            return 0;
        }
System/KnapSack/New/FairyWearWin.cs
@@ -41,6 +41,7 @@
            get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>()); }
        }
        ItemModel curItemModel;
        #region Built-in
        protected override void BindController()
        {
@@ -62,12 +63,29 @@
        protected override void OnPreOpen()
        {
            SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptEquip);
            if (singlePack == null)
                return;
            _itemModel01 = singlePack.GetItemModelByIndex((int)RoleEquipType.retFairyCan);
            _itemModel02 = singlePack.GetItemModelByIndex((int)RoleEquipType.retFairyCan2);
            curItemModel = PackSendQuestMgr.Instance.sendItemModel;
            if(curItemModel != null)
            {
               switch(curItemModel.packType)
                {
                    case PackType.rptItem:
                        _itemModel01 = playerPack.GetItemModelByIndex(PackType.rptEquip,(int)RoleEquipType.retFairyCan);
                        _itemModel02 = playerPack.GetItemModelByIndex(PackType.rptEquip,(int)RoleEquipType.retFairyCan2);
                        break;
                    case PackType.rptJadeDynastyItem:
                        if(curItemModel.chinItemModel.EquipPlace == (int)RoleEquipType.JadeDynasty_Glove1)
                        {
                            _itemModel01 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Glove1);
                            _itemModel02 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Glove2);
                        }
                        else if(curItemModel.chinItemModel.EquipPlace == (int)RoleEquipType.JadeDynasty_Ring1)
                        {
                            _itemModel01 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Ring1);
                            _itemModel02 = playerPack.GetItemModelByIndex(PackType.rptJadeDynastyEquip, (int)RoleEquipType.JadeDynasty_Ring2);
                        }
                        break;
                }
            }
        }
        protected override void OnAfterOpen()
@@ -133,14 +151,29 @@
        public void OnClickWear01Btn()
        {
            if (curItemModel == null) return;
            PackSendQuestMgr.Instance.CheckSuitReplaceInfo((int)RoleEquipType.retFairyCan);
            int equipType = curItemModel.chinItemModel.EquipPlace;
            PackSendQuestMgr.Instance.CheckSuitReplaceInfo(equipType);
            Close();
        }
        public void OnClickWear02Btn()
        {
            PackSendQuestMgr.Instance.CheckSuitReplaceInfo((int)RoleEquipType.retFairyCan2);
            if (curItemModel == null) return;
            switch ((RoleEquipType)curItemModel.chinItemModel.EquipPlace)
            {
                case RoleEquipType.retFairyCan:
                    PackSendQuestMgr.Instance.CheckSuitReplaceInfo((int)RoleEquipType.retFairyCan2);
                    break;
                case RoleEquipType.JadeDynasty_Glove1:
                    PackSendQuestMgr.Instance.CheckSuitReplaceInfo((int)RoleEquipType.JadeDynasty_Glove2);
                    break;
                case RoleEquipType.JadeDynasty_Ring1:
                    PackSendQuestMgr.Instance.CheckSuitReplaceInfo((int)RoleEquipType.JadeDynasty_Ring2);
                    break;
            }
            Close();
        }
System/MainInterfacePanel/HighSettingTip.cs
@@ -293,7 +293,7 @@
        void RuneTaButton()//符印塔
        {
            WindowCenter.Instance.Close<MainInterfaceWin>();
            WindowCenter.Instance.Open<RuneTowerWin>();
            WindowCenter.Instance.Open<TowerWin>(false, 0);
        }
        void OpenTreasure()
        {
System/MainInterfacePanel/LowSettingTip.cs
@@ -26,7 +26,7 @@
        [SerializeField] Button m_TreasureSoulBtn;//觉醒按钮
        [SerializeField] Button m_GodBeastBtn;//神兽按钮
        [SerializeField] Button m_JadeDynastyBtn;//诛仙装备按钮
        FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
        public void Init()
        {
@@ -43,6 +43,7 @@
            m_BagualuBtn.AddListener(OnClickBagualuBtn);
            m_TreasureSoulBtn.AddListener(OnClickTreasureSoul);
            m_GodBeastBtn.AddListener(GodBeastBtn);
            m_JadeDynastyBtn.AddListener(JadeDynastyButton);
        }
        public void UnInit()
@@ -59,6 +60,7 @@
            _RankingListBtn.onClick.RemoveAllListeners();
            m_BagualuBtn.RemoveAllListeners();
            m_GodBeastBtn.RemoveAllListeners();
            m_JadeDynastyBtn.RemoveAllListeners();
        }
        void Role1Button()
@@ -101,7 +103,12 @@
            WindowCenter.Instance.Open<EquipReinforceWin>();
            //DesignDebug.Log("强化按钮");
        }
        void JadeDynastyButton()
        {
            WindowCenter.Instance.Close<MainInterfaceWin>();
            WindowCenter.Instance.Open<JadeDynastyKnapSackWin>();
            //DesignDebug.Log("诛仙装备");
        }
        void Asuram1Button()
System/MainInterfacePanel/MainInterfaceWin.cs
@@ -147,8 +147,9 @@
        DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel<DungeonAssistModel>(); } }
        IceCrystalVeinModel m_IceCrystalVeinModel;
        IceCrystalVeinModel iceCrystalVeinModel { get { return m_IceCrystalVeinModel ?? (m_IceCrystalVeinModel = ModelCenter.Instance.GetModel<IceCrystalVeinModel>()); } }
        JadeDynastyTowerModel jadeDynastyTowerModel { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        #region Built-in
        private bool IsUpdateBool=true;
        private bool IsUpdateBool = true;
        protected override void BindController()
        {
            m_MapSwitchingBehaviour.InitAwake();
@@ -251,7 +252,7 @@
            ChatTip.OnChatUpEvent += RefreshAdaptiveChat;
            GlobalTimeEvent.Instance.secondEvent += secondEvent;
            IsCrossServerOneVsOne();
        }
        private void CompletionOfTaskEvent(int obj)
@@ -671,6 +672,41 @@
                    }
                }
            }
            if (jadeDynastyTowerModel.specialUnLockFloor > 0 && !IsDungeon())
            {
                if (!WindowCenter.Instance.IsOpen("NewBieWin") && !WindowCenter.Instance.IsOpen("TreasureNewGotWin"))
                {
                    if (!WindowCenter.Instance.IsOpen("JadeDynastyTowerUnLockWin"))
                    {
                        WindowCenter.Instance.Open<JadeDynastyTowerUnLockWin>();
                    }
                }
            }
            if (jadeDynastyTowerModel.specialUnLockFloor > 0 && !IsDungeon())
            {
                if (!WindowCenter.Instance.IsOpen("NewBieWin") && !WindowCenter.Instance.IsOpen("TreasureNewGotWin"))
                {
                    if (!WindowCenter.Instance.IsOpen("JadeDynastyTowerUnLockWin"))
                    {
                        WindowCenter.Instance.Open<JadeDynastyTowerUnLockWin>();
                    }
                }
            }
            if (jadeDynastyTowerModel.openJadeDynastyTower && !IsDungeon())
            {
                if (!WindowCenter.Instance.IsOpen("NewBieWin") && !WindowCenter.Instance.IsOpen("TreasureNewGotWin"))
                {
                    if (!WindowCenter.Instance.IsOpen("TowerWin"))
                    {
                        WindowCenter.Instance.Open<TowerWin>(false, 1);
                        jadeDynastyTowerModel.openJadeDynastyTower = false;
                    }
                }
            }
            if (iceCrystalVeinModel.IsIceCrystalVeinCopy && !IsDungeon())//是否再次打开冰晶矿脉面板
            {
                if (!WindowCenter.Instance.IsOpen("NewBieWin") && !WindowCenter.Instance.IsOpen("TreasureNewGotWin"))
@@ -1048,7 +1084,7 @@
            ArticleExperience();//关于经验条
            if (_tCDBPlayerRefresh == PlayerDataRefresh.LV)
            {
                IsUpdateBool = true;
                IsUpdateBool = true;
            }
            if (_tCDBPlayerRefresh == PlayerDataRefresh.ExAttr5)//判断是否再跨服
            {
System/Message/ColorAnalysis.cs
@@ -1,61 +1,79 @@
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
public class ColorAnalysis : TRichAnalysis<ColorAnalysis>
{
    public static Regex Color_Start_Regex = new Regex(@"<color=#([0-9a-zA-Z]+)>", RegexOptions.Singleline);
    public override string Analysis(string val, bool IsRich)
    {
        if (!Color_Start_Regex.IsMatch(val) || RichTextMgr.Inst.presentRichText == null)
        {
            return val;
        }
        int index = 0;
        m_StringBuilder.Length = 0;
        var _text = RichTextMgr.Inst.presentRichText;
        if (_text.colorType == RichText.ColorType.Bright)
        {
            return val;
        }
        foreach (Match match in Color_Start_Regex.Matches(val))
        {
            m_StringBuilder.Append(val.Substring(index, match.Groups[1].Index - index));
            m_StringBuilder.Append(GetColorMap(match.Groups[1].Value));
            index = match.Groups[1].Index + match.Groups[1].Length;
        }
        m_StringBuilder.Append(val.Substring(index, val.Length - index));
        return m_StringBuilder.ToString();
    }
    private string GetColorMap(string _value)
    {
        if (_value.Length > 6)
        {
            _value = _value.Substring(0, 6);
        }
        switch (_value.ToLower())
        {
            case "109d06":
                return "35e122";
            case "ff6701":
                return "f8983b";
            case "006be3":
                return "31cefb";
            case "ff0303":
                return "fa0101";
            case "12a199":
                return "13a199";
            case "686868":
                return "f7f7f7";
        }
        return _value;
    }
    public override string CalculateTextIndex(string val, int index)
    {
        return string.Empty;
    }
}
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
public class ColorAnalysis : TRichAnalysis<ColorAnalysis>
{
    public static Regex Color_Start_Regex = new Regex(@"<color=#([0-9a-zA-Z]+)>", RegexOptions.Singleline);
    public override string Analysis(string val, bool IsRich)
    {
        if (!Color_Start_Regex.IsMatch(val) || RichTextMgr.Inst.presentRichText == null)
        {
            return val;
        }
        int index = 0;
        m_StringBuilder.Length = 0;
        var _text = RichTextMgr.Inst.presentRichText;
        if (_text.colorType == RichText.ColorType.Bright)
        {
            return val;
        }
        foreach (Match match in Color_Start_Regex.Matches(val))
        {
            m_StringBuilder.Append(val.Substring(index, match.Groups[1].Index - index));
            m_StringBuilder.Append(GetColorMap(match.Groups[1].Value));
            index = match.Groups[1].Index + match.Groups[1].Length;
        }
        m_StringBuilder.Append(val.Substring(index, val.Length - index));
        return m_StringBuilder.ToString();
    }
    private string GetColorMap(string _value)
    {
        if (_value.Length > 6)
        {
            _value = _value.Substring(0, 6);
        }
        switch (_value.ToLower())
        {
            case "109d06":
                return "35e122";
            case "ff6701":
                return "f8983b";
            case "006be3":
                return "31cefb";
            case "ff0303":
                return "fa0101";
            case "12a199":
                return "13a199";
            case "686868":
                return "f7f7f7";
            case "da48d5":
                return "ec4bf6";
            case "f6408d":
                return "ff7c7c";
            case "bb8800":
                return "ffde00";
            case "666666":
                return "dddddd";
            case "9460ff":
                return "7999ff";
            case "0066ff":
                return "00c6ff";
            case "00b337":
                return "66ff00";
            case "ff6600":
                return "ff9000";
            case "ff00f6":
                return "f000ff";
        }
        return _value;
    }
    public override string CalculateTextIndex(string val, int index)
    {
        return string.Empty;
    }
}
System/Message/RichTableEvent.cs
@@ -391,6 +391,19 @@
                                    }
                                }
                                break;
                            case "jadedynastytower":
                                {
                                    var _id = 0;
                                    if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id))
                                    {
                                        var config = Config.Instance.Get<JadeDynastyTowerConfig>(_id);
                                        if (config != null)
                                        {
                                            return config.floorName;
                                        }
                                    }
                                }
                                break;
                        }
                    }
                }
System/OpenServerActivity/OpenServiceAchievementCell.cs
@@ -219,7 +219,7 @@
            int rewardNum = model.GetRewardNumber(model.SelectedNow, ID);//已领奖次数
            int carryOutNum = model.GetCarryOutNum(model.SelectedNow, ID);//已完成次数
            var config = Config.Instance.Get<WeekPartyConfig>(ID);
            if (config != null && config.ActionType == 13)
            if (config != null && config.SpecialDisplayType==1)
            {
                if (carryOutNum > 0)
System/OpenServerActivity/OpenServiceAchievementModel.cs
@@ -67,7 +67,7 @@
    private const int Redpoint_key = 214;//周狂欢红点
    public Redpoint redPointStre = new Redpoint(2, Redpoint_key);
    private const int Redpoint_key1 = 21401;//周狂欢红点
    public Redpoint redPointStre1 = new Redpoint(214, Redpoint_key1);
    public Redpoint redPointStre1 = new Redpoint(Redpoint_key, Redpoint_key1);
    private int _SelectedNow = 0;
    private int ResetType = 0;// 重置类型,0-0点重置;1-5点重置
    private int AdvanceMinutes = 0;//提前显示分钟
@@ -167,15 +167,15 @@
                   int Index = dit.ActionType.FindIndex(s=>s.TemplateID== taskList.TemplateID);
                    if (Index != -1)
                    {
                        dit.ActionType[Index].CurTimes = taskList.CurTimes;
                        dit.ActionType[Index].GotTimes = taskList.GotTimes;
                        dit.ActionType[Index].CurTimes = (int)taskList.CurTimes;
                        dit.ActionType[Index].GotTimes = (int)taskList.GotTimes;
                    }
                    else
                    {
                        ActionTypeClass ActionType = new ActionTypeClass();
                        ActionType.TemplateID = taskList.TemplateID;
                        ActionType.CurTimes = taskList.CurTimes;
                        ActionType.GotTimes = taskList.GotTimes;
                        ActionType.CurTimes = (int)taskList.CurTimes;
                        ActionType.GotTimes = (int)taskList.GotTimes;
                        dit.ActionType.Add(ActionType);
                    }
                }
@@ -189,8 +189,8 @@
                    var Task = DayInfo.TaskList[k];
                    ActionTypeClass ActionType = new ActionTypeClass();
                    ActionType.TemplateID = Task.TemplateID;
                    ActionType.CurTimes = Task.CurTimes;
                    ActionType.GotTimes = Task.GotTimes;
                    ActionType.CurTimes = (int)Task.CurTimes;
                    ActionType.GotTimes = (int)Task.GotTimes;
                    WeekPartyDayInfo.ActionType.Add(ActionType);
                }
                WeekPartyDayInfoDic.Add((int)DayInfo.DayIndex, WeekPartyDayInfo);
@@ -448,7 +448,7 @@
    private RedPointState SetRedPointState(int day)//红点状态设置
    {
        if (!WeekPartyDayDic.ContainsKey(day) || !WeekPartyDayInfoDic.ContainsKey(day))
        if (!WeekPartyDayDic.ContainsKey(day) || !WeekPartyDayInfoDic.ContainsKey(day)|| day>DayNow)
        {
            return RedPointState.None;
        }
@@ -485,7 +485,7 @@
                {
                    TaypeNumber = (carryOutNum - rewardNum) / WeekPartyAction.SingleTimes;
                }
                if (TaypeNumber > 0 && rewardNum< number)
                if (TaypeNumber > 0 && carryOutNum <= WeekPartyAction.TotalTimes)
                {
                    return RedPointState.GetReward;
                }
System/OpenServerActivity/OpenServiceAchievementWin.cs
@@ -354,8 +354,16 @@
            {
                m_One.SetActive(false);
                m_Two.SetActive(true);
                m_OpenServiceItemA1.SetReward(model.SelectedNow, ItemDayList[0], 0, 2);
                m_OpenServiceItemB1.SetReward(model.SelectedNow, ItemDayList[1], 1, 2);
                if (ItemDayList[0].NeedPoint > ItemDayList[1].NeedPoint)
                {
                    m_OpenServiceItemA1.SetReward(model.SelectedNow, ItemDayList[1], 0, 2);
                    m_OpenServiceItemB1.SetReward(model.SelectedNow, ItemDayList[0], 1, 2);
                }
                else
                {
                    m_OpenServiceItemA1.SetReward(model.SelectedNow, ItemDayList[0], 0, 2);
                    m_OpenServiceItemB1.SetReward(model.SelectedNow, ItemDayList[1], 1, 2);
                }
            }
            else
            {
System/Rank/RankHeadCell.cs
@@ -110,6 +110,10 @@
                        //rankWhat.text = data.cmpValue2.ToString();
                        realmLv = (int)data.cmpValue;
                        break;
                    case PlayerRankData.RankType.JadeDynastyTower:
                        jobText.text = data.cmpValue +Language.Get("JadeDynastyBossDungeon_Floor") ;
                        rankWhat.text =(10000-data.cmpValue2) +Language.Get("RealmWin_Bewrite_35") ;
                        break;
                    default:
                        rankWhat.text = data.cmpValue.ToString();
                        realmLv = (int)data.value1;
System/Rank/RankModel.cs
@@ -1,30 +1,47 @@
using System.Collections;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    public class RankModel : Model
    [XLua.LuaCallCSharp]
    public class RankModel : Model, IPlayerLoginOk
    {
        private int m_RankType = 0;
        public int rankType {
        public int rankType
        {
            get { return m_RankType; }
            set {
            set
            {
                m_RankType = value;
                rankList = PlayerDatas.Instance.rank.GetRankList(value);
            }
        }
        public List<PlayerRankData.RankData> rankList { get;private set; }
        public List<PlayerRankData.RankData> rankList { get; private set; }
        public int jumpRankType { get; set; }
        public override void Init()
        {
        }
            jumpRankType = -1;
        }
        public void OnPlayerLoginOk()
        {
            SendBegRank(PlayerRankData.RankType.JadeDynastyTower);
        }
        public override void UnInit()
        {
        }
        public void SendBegRank(PlayerRankData.RankType rankType)
        {
            C1001_tagCWatchBillboard rankPack = new C1001_tagCWatchBillboard();
            rankPack.Type = (byte)rankType;
            GameNetSystem.Instance.SendInfo(rankPack);
        }
    }
}
System/Rank/RankPanel.cs
@@ -91,11 +91,14 @@
        private void OnRankTypeClick(int type)
        {
            if (type == sltRankType && RankListConfig.GetAllSubRank(type) == null) return;
            if (type == sltRankType && RankListConfig.GetAllSubRank(type) == null)
            {
                return;
            }
            if (RankListConfig.GetAllSubRank(type) != null)
            {
                bool _same = sltRankType == type;
                if (!_same)
                if (!_same && m_SubRankSpread.ContainsKey(sltRankType))
                {
                    m_SubRankSpread[sltRankType] = !m_SubRankSpread[sltRankType];
                }
@@ -309,14 +312,32 @@
        {
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList;
            if (funcRankCnt == null) funcRankCnt = Config.Instance.Get<FuncConfigConfig>("RankListCnt");
            if (funcRankCnt == null)
            {
                funcRankCnt = Config.Instance.Get<FuncConfigConfig>("RankListCnt");
            }
            sltRankType = 0;
            sltSubRank = 0;
            var clickRankType = 1;
            var index = -1;
            if (model.jumpRankType != -1)
            {
                var list = RankListConfig.GetAllRankType().Keys.ToList();
                index = list.IndexOf(model.jumpRankType);
            }
            if (index != -1)
            {
                clickRankType = model.jumpRankType;
                model.jumpRankType = -1;
            }
            index = index == -1 ? 0 : index;
            OnRefreshRankType();
            rankTypeCtrl.JumpIndex(0);
            OnRankTypeClick(1);
            rankTypeCtrl.JumpIndex(index);
            OnRankTypeClick(clickRankType);
        }
        protected override void OnActived()
System/Realm/ActivateShow.cs
@@ -4,6 +4,7 @@
using UnityEngine;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public static class ActivateShow
    {
        public static ActivateFunc activateType { get; private set; }
@@ -361,6 +362,26 @@
            }
        }
        public static void JadeDynastySkillUnlock(int skillId)
        {
            activateType = ActivateFunc.JadeDynastySkill;
            skills.Clear();
            fightPower = 0;
            skills.Add(skillId);
            titleIconKey = "UI_JH_6";
            var config = Config.Instance.Get<SkillConfig>(skillId);
            if (config != null)
            {
                fightPower = config.FightPower;
            }
            if (!WindowCenter.Instance.IsOpen<RealmPropertyUpWin>())
            {
                WindowCenter.Instance.Open<RealmPropertyUpWin>();
            }
        }
        public static void PrepareSkillFly()
        {
            if (prepareFlySkillEvent != null)
@@ -384,6 +405,7 @@
            Stove, //炼丹炉升级
            TreasureSoul,//法宝魂领取属性
            GodWeaponEffect,
            JadeDynastySkill,
        }
        public struct PropertyCompare
System/Realm/RealmBossShow.cs
@@ -272,7 +272,9 @@
                    }
                }
                if (secondaryResId == 0 || (fashionClothesId != 0 && fashionSecondaryId > 0))
                if (secondaryResId == 0
                || (fashionClothesId != 0 && fashionSecondaryId > 0)
                || (fashionClothesId == 0 && fashionSecondaryId > 0))
                {
                    PutOnExtraSecondary(job, extraSecondaryId);
                }
System/Realm/RealmPropertyUpWin.cs
@@ -30,6 +30,7 @@
        [SerializeField] SkillBehaviour[] m_Skills;
        [SerializeField] RectTransform m_ContainerNewGotSkill;
        [SerializeField] SkillBehaviour m_NewGotSkill;
        [SerializeField] FrameEffect m_NewGotSkillFrame;
        [SerializeField] RectTransform m_NewGotSkillPoint;
        [SerializeField] RectTransform m_ContainerRealm;
        [SerializeField] RectTransform m_ContainerRealmUp;
@@ -73,6 +74,7 @@
            m_ContainerRealm.gameObject.SetActive(false);
            m_ContainerTreasureSoul.gameObject.SetActive(false);
            m_ContainerGodWeaponEffect.gameObject.SetActive(false);
            m_NewGotSkillFrame.gameObject.SetActive(false);
            m_DisplayAlphaTween.SetStartState();
            flying = false;
            startFly = false;
@@ -162,6 +164,10 @@
                    DisplayFightPower();
                    DisplayLv();
                    DisplayGodWeaponEffect();
                    DisplayNewGotSkill();
                    break;
                case ActivateShow.ActivateFunc.JadeDynastySkill:
                    DisplayFightPower();
                    DisplayNewGotSkill();
                    break;
            }
@@ -365,6 +371,16 @@
                        }
                    }
                    break;
                case ActivateShow.ActivateFunc.JadeDynastySkill:
                    m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0);
                    if (ActivateShow.skills.Count == 0)
                    {
                        return;
                    }
                    m_NewGotSkill.DisplayNewGot(ActivateShow.skills[0]);
                    DisplaySkillFrame(ActivateShow.skills[0]);
                    PrepareFly(ActivateShow.skills[0]);
                    break;
                default:
                    {
                        m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0);
@@ -398,6 +414,18 @@
            var config = GodWeaponConfig.GetConfig(ActivateShow.godWeaponType, 1);
            var stage = model.GetGodWeaponStage(ActivateShow.godWeaponType);
            m_GodWeaponStage.text = Language.Get("MagicWin_9", config.Name, stage);
        }
        void DisplaySkillFrame(int skillId)
        {
            m_NewGotSkillFrame.gameObject.SetActive(true);
            var model = ModelCenter.Instance.GetModel<JadeDynastySkillModel>();
            Sprite[] sprites;
            if (model.TryGetSkillFrames(skillId, out sprites))
            {
                var config = Config.Instance.Get<SkillFrameAnimationConfig>(skillId);
                m_NewGotSkillFrame.SetSprites(sprites, (float)config.totalTime / 1000);
            }
        }
        void PrepareFly(int _skillId)
@@ -452,6 +480,7 @@
                    }
                    break;
                case ActivateShow.ActivateFunc.GodWeaponEffect:
                case ActivateShow.ActivateFunc.JadeDynastySkill:
                    {
                        if (startFly)
                        {
System/RuneTower/RuneNewGotWin.cs
@@ -87,7 +87,7 @@
            CloseClick();
            WindowCenter.Instance.Close<MainInterfaceWin>();
            WindowCenter.Instance.Open<RuneTowerWin>();
            WindowCenter.Instance.Open<TowerWin>(false, 0);
        }
    }
System/RuneTower/RuneTowerWin.cs
@@ -49,7 +49,6 @@
        [SerializeField] Button m_Sweep;
        [SerializeField] Text m_SweepButtonDescription;
        [SerializeField] Text m_SweepTip;
        [SerializeField] Button m_Close;
        ShowType showType = ShowType.RewardInfo;
        int runeSweepActionId = 0;
@@ -65,7 +64,6 @@
        protected override void AddListeners()
        {
            m_Close.AddListener(CloseClick);
            m_ViewBoss.AddListener(PopupBossInfo);
            m_ViewReward.AddListener(PopupRewardInfo);
            m_ViewPassedInfo.AddListener(PopupTowerPassInfo);
System/Tip/SkillDetails.cs
@@ -87,6 +87,11 @@
                        skillDescriptions.Add(skillConfig.Description);
                    }
                    break;
                case SkillSourceType.JadeDynastySkill:
                    {
                        skillDescriptions.Add(skillConfig.Description);
                    }
                    break;
            }
            if (!WindowCenter.Instance.IsOpen<SkillDetailsWin>())
            {
@@ -123,6 +128,7 @@
            BlastFurnace,
            ViewHorsePet,
            DogzSkill,
            JadeDynastySkill,
        }
    }
}
System/Tip/SkillDetailsWin.cs
@@ -124,6 +124,12 @@
                        m_SkillInfo2.text = Language.Get("PlayerDetail_Level", SkillDetails.skillConfig.SkillLV);
                    }
                    break;
                case SkillDetails.SkillSourceType.JadeDynastySkill:
                    {
                        m_SkillInfo1.text = SkillDetails.skillConfig.SkillName;
                        m_SkillInfo2.gameObject.SetActive(false);
                    }
                    break;
            }
            DisplayDescriptions();
System/WindowBase/ModelCenter.cs
@@ -223,6 +223,9 @@
            RegisterModel<FashionDressModel>();
            RegisterModel<LoginRewardModel>();
            RegisterModel<JadeDynastyBossModel>();
            RegisterModel<JadeDynastyDecomposeModel>();
            RegisterModel<JadeDynastyTowerModel>();
            RegisterModel<JadeDynastyEquipModel>();
            inited = true;
        }
System/WindowJump/WindowJumpMgr.cs
@@ -406,11 +406,11 @@
                SetJumpLogic<VipExperienceWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.RuneTower:
                SetJumpLogic<RuneTowerWin>(_tagWinSearchModel.TABID);
                SetJumpLogic<TowerWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.RuneTowerSpec:
                RuneTowerWin.guideChallenge = true;
                SetJumpLogic<RuneTowerWin>(_tagWinSearchModel.TABID);
                SetJumpLogic<TowerWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.WelfareFunc1:
            case JumpUIType.WelfareFunc2:
@@ -702,6 +702,11 @@
                break;
            case JumpUIType.PrayforDrug:
                SetJumpLogic<PrayforDrugWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.JadeDynastyTowerRank:
                var rankModel = ModelCenter.Instance.GetModel<RankModel>();
                rankModel.jumpRankType = int.Parse(_tagWinSearchModel.SelectActive);
                SetJumpLogic<RankPanel>(_tagWinSearchModel.TABID);
                break;
            default:
                DebugEx.Log("未添加此跳转界面:" + jumpType);
@@ -1593,6 +1598,7 @@
    SevenDaysTour285 = 285, //七日巡礼
    SevenDaysTour286 = 286, //七日巡礼
    SevenDaysTour287 = 287, //七日巡礼
    JadeDynastyTowerRank = 289,//排行榜-诛仙塔
    DhszTs = 1001,//定海神针功法提升界面
    HyqTs = 1002,//皓月枪功法提升界面
UI/Common/FrameEffect.cs
@@ -45,6 +45,11 @@
            timer += Time.deltaTime;
            tempSumTime -= Time.deltaTime;
            if (m_Sprites == null || m_Sprites.Length == 0)
            {
                return;
            }
            if(tempSumTime > 0)
            {
                if (timer > interval)
@@ -68,6 +73,23 @@
            }
        }
        public void SetSprites(Sprite[] sprites,float _totalTime)
        {
            m_Sprites = sprites;
            onceTime = _totalTime;
            sumTime = _totalTime;
            if (m_Sprites != null && m_Sprites.Length > 0)
            {
                interval = onceTime / m_Sprites.Length;
                index = 0;
                timer = 0f;
                tempSumTime = sumTime;
                m_Behaviour.overrideSprite = m_Sprites[index];
                m_Behaviour.SetNativeSize();
            }
        }
    }
}
UI/Common/FuncOpen.cs
@@ -166,6 +166,9 @@
                            var treasureConfig = Config.Instance.Get<TreasureConfig>(config.LimitMagicWeapon / 100);
                            SysNotifyMgr.Instance.ShowTip(config.Tip, Language.Get("OpenFunc1", treasureConfig != null ? treasureConfig.Name : string.Empty));
                            break;
                        case 3:
                            SysNotifyMgr.Instance.ShowTip(config.Tip, UIHelper.GetRealmName(config.LimiRealmLV, true));
                            break;
                        case 4:
                            if (config.LimitLV > 0)
                            {
UI/Common/UI3DShowHero.cs
@@ -79,6 +79,10 @@
                    {
                        secondaryResId = ModelResConfig.GetHandByClothesID(clothesId);
                    }
                    else if (this.job == 2)
                    {
                        secondaryResId = jobConfig.BaseEquip[2];
                    }
                }
            }
            else
@@ -116,7 +120,9 @@
                    }
                }
                if (secondaryResId == 0 || (data.fashionClothesId != 0 && data.fashionSecondaryId > 0))
                if (secondaryResId == 0
                 || (data.fashionClothesId != 0 && data.fashionSecondaryId > 0)
                 || (data.fashionClothesId == 0 && data.fashionSecondaryId > 0))
                {
                    PutOnExtraSecondary(job, extraSecondaryId);
                }
@@ -153,6 +159,9 @@
        {
            GameObject prefab = null;
            GameObjectPoolManager.GameObjectPool pool = null;
            HideWeaponEffect();
            HideSecondaryEffect();
            if (weaponId != 0)
            {
@@ -437,6 +446,9 @@
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
                    weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
                var _resConfig = Config.Instance.Get<ModelResConfig>(resoureceId);
                ShowSecondaryEffect(weaponModel.transform, _resConfig.ResourcesName);
            }
            weaponId = resoureceId;
@@ -505,6 +517,7 @@
            if (secondaryResId != 0)
            {
                var _resConfig = Config.Instance.Get<ModelResConfig>(secondaryResId);
                prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
                if (!prefab)
                {
@@ -521,6 +534,8 @@
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                    secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
                ShowSecondaryEffect(secondaryModel.transform, _resConfig.ResourcesName);
            }
            secondaryId = secondaryResId;
@@ -709,6 +724,79 @@
            SwitchMaterial(_suitCount >= 5);
        }
        private List<SFXController> m_WeaponEffectList = new List<SFXController>();
        private List<SFXController> m_SecondaryEffectList = new List<SFXController>();
        private void ShowWeaponEffect(Transform parent, string modelName)
        {
            HideWeaponEffect();
            var _boneList = ModelResConfig.GetBoneList(modelName);
            var _effectlist = ModelResConfig.GetEffectList(modelName);
            if (_boneList != null && _effectlist != null)
            {
                for (int i = 0; i < _boneList.Count; ++i)
                {
                    if (_boneList[i].Equals("null"))
                    {
                        var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
                        m_WeaponEffectList.Add(_ctrl);
                    }
                    else
                    {
                        var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
                        m_WeaponEffectList.Add(_ctrl);
                    }
                }
            }
        }
        private void ShowSecondaryEffect(Transform parent, string modelName)
        {
            HideWeaponEffect();
            var _boneList = ModelResConfig.GetBoneList(modelName);
            var _effectlist = ModelResConfig.GetEffectList(modelName);
            if (_boneList != null && _effectlist != null)
            {
                for (int i = 0; i < _boneList.Count; ++i)
                {
                    if (_boneList[i].Equals("null"))
                    {
                        var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
                        m_SecondaryEffectList.Add(_ctrl);
                    }
                    else
                    {
                        var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
                        m_SecondaryEffectList.Add(_ctrl);
                    }
                }
            }
        }
        private void HideSecondaryEffect()
        {
            foreach (var _ctrl in m_SecondaryEffectList)
            {
                SFXPlayUtility.Instance.Release(_ctrl);
            }
            m_SecondaryEffectList.Clear();
        }
        private void HideWeaponEffect()
        {
            foreach (var _ctrl in m_WeaponEffectList)
            {
                SFXPlayUtility.Instance.Release(_ctrl);
            }
            m_WeaponEffectList.Clear();
        }
        public void SwitchMaterial(bool isSuit)
        {
            if (clothesModel == null)
UI/HUD/PopUpNum.cs
@@ -327,6 +327,10 @@
            PetZhanSha = 35,                        //宠物斩杀                      
            EnemyZhanSha = 36,                   //敌人斩杀
            PlayerZhuXian = 37,                    //玩家诛仙
            PetZhuXian = 38,                        //宠物诛仙
            EnemyZhuXian = 39,                   //敌人诛仙
            BuffAddDefense = 101,//+防御buff
            BuffAddAttack = 102,//+攻击buff
            BuffAddAttackSpeed = 103,//+攻速buff
@@ -342,6 +346,7 @@
            BuffReduceDodge = 205,//-闪避Buff
            BuffReduceMaxHp = 206,//-血量上限buff
            BuffReduceMoveSpeed = 207,//-移动速度buff
        }
        public enum AttackObject
Utility/EnumHelper.cs
@@ -327,6 +327,7 @@
    GatherSoulDungeon = 30,
    CrossServerPk = 31,
    JadeDynastyBoss = 32,
    JadeDynastyTower=33,
}
public enum ActivityPrepareType
@@ -1014,6 +1015,32 @@
    SuiteBasePer = 87, //套装基础属性  
    PlusBaseAtkPer = 88,  //强化攻击
    NpcHurtAddPer = 89,//对怪物伤害加成
    JobAHurtAddPer = 90,//对龙魂伤害增加百分比
    JobBHurtAddPer = 91,//对灵瑶伤害增加百分比
    JobCHurtAddPer = 92,//对弓箭手伤害增加百分比
    JobAAtkReducePer = 93,//承受龙魂伤害减少百分比
    JobBAtkReducePer = 94,//承受灵瑶伤害减少百分比
    JobCAtkReducePer = 95, //承受弓箭手伤害减少百分比
    ZXCloakAttrPer = 96, //诛仙·披风属性百分比
    ZXMaskAttrPer = 97, //诛仙·面罩属性百分比
    ZXGloveAttrPer = 98,//诛仙·手套属性百分比
    ZXRuyiAttrPer = 99,//诛仙·如意属性百分比
    ZXPendantAttrPer = 100, //诛仙·吊坠属性百分比
    ZXRingAttrPer = 101, //诛仙·戒指属性百分比
    SkillAddPer1 = 102,//定海神针技能伤害百分比
    SkillAddPer2 = 103, //皓月枪技能伤害百分比
    SkillAddPer3 = 104, //鬼牙刃技能伤害百分比
    SkillAddPer4 = 105, //磐龙印技能伤害百分比
    SkillAddPer5 = 106, //杏黄旗技能伤害百分比
    SkillAddPer6 = 107,//嗜天斧技能伤害百分比
    SkillAddPer7 = 108, //射日神弓技能伤害百分比
    SkillReducePer1 = 109, //定海神针技能减伤百分比
    SkillReducePer2 = 110, //皓月枪技能减伤百分比
    SkillReducePer3 = 111, //鬼牙刃技能减伤百分比
    SkillReducePer4 = 112, //磐龙印技能减伤百分比
    SkillReducePer5 = 113, //杏黄旗技能减伤百分比
    SkillReducePer6 = 114, //嗜天斧技能减伤百分比
    SkillReducePer7 = 115, //射日神弓技能减伤百分比
}
//UI图标类型
public enum SpriteFileType
Utility/UIHelper.cs
@@ -807,7 +807,24 @@
                return paramConfig.AtkSpeedParameter;
            case "LuckyHitParameter":
                return paramConfig.LuckyHitParameter;
            case "SpeedPerParameter":
                return paramConfig.SpeedPerParameter;
            case "AtkPerParameter":
                return paramConfig.AtkPerParameter;
            case "MaxHPPerParameter":
                return paramConfig.MaxHPPerParameter;
            case "JobAHurtAddPer":
                return paramConfig.JobAHurtAddPer;
            case "JobBHurtAddPer":
                return paramConfig.JobBHurtAddPer;
            case "JobCHurtAddPer":
                return paramConfig.JobCHurtAddPer;
            case "JobAAtkReducePer":
                return paramConfig.JobAAtkReducePer;
            case "JobBAtkReducePer":
                return paramConfig.JobBAtkReducePer;
            case "JobCAtkReducePer":
                return paramConfig.JobCAtkReducePer;
        }
        return 0;
Utility/UIUtility.cs
@@ -210,14 +210,21 @@
            return false;
        }
        var eventData = new PointerEventData(EventSystem.current);
        eventData.pressPosition = Input.mousePosition;
        eventData.position = Input.mousePosition;
        if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            var eventData = new PointerEventData(EventSystem.current);
            eventData.pressPosition = Input.mousePosition;
            eventData.position = Input.mousePosition;
        var list = new List<RaycastResult>();
        EventSystem.current.RaycastAll(eventData, list);
            var list = new List<RaycastResult>();
            EventSystem.current.RaycastAll(eventData, list);
        return list.Count > 0;
            return list.Count > 0;
        }
        else
        {
            return EventSystem.current.IsPointerOverGameObject();
        }
    }
    struct Quadrangle