少年修仙传客户端代码仓库
leonard Wu
2018-08-03 c2d2d5d3a840bf50968b3f95e304929bc62a7b70
更新代码
66个文件已修改
13个文件已添加
2963 ■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/A3_Item.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA32F_tagCMTrialExchange.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA32F_tagCMTrialExchange.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0419_tagPlayerReborn.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0602_tagObjBaseAttack.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/HeroAI_Base.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/HeroBehaviour.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/Skill.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/StatusMgr.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/Status_Base.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/Bhv_FindEnemy.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GAMgr.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GAStaticDefine.cs 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcFightNorm.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcFunc.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_Player.cs 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GActorPlayerBase.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/BlastFurnaceWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/GetEquipPathTips.cs 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/GetEquipPathWin.cs 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/GetItemPathWin.cs 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BossReborn/BossRebornBehaviour.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatCtrl.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Chat/ChatRecently.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DailyQuestBehaviour.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DailyQuestModel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/DailyQuest/DayRemind.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialClassSelectCell.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialClassSelectCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialDungeonModel.cs 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialDungeonModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialDungeonSelectWin.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialExchangeCell.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialExchangeCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialExchangeWin.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialExchangeWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialSelectClassBehaviour.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/TrialSelectClassBehaviour.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FriendSystem/New/FriendsModel.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/GeneralConfig/GeneralConfig.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HappyXB/BestXBWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HappyXB/HappyXBModel.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HappyXB/RuneXBWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/BoxInfoWin.cs 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/EquipTip.cs 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemInfoWin.cs 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemTipsModel.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PackSendQuestMgr.cs 416 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/UnionWarehouseEquipTip.cs 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/WingsTip.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Message/RichTableEvent.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Message/WordAnalysis.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Pet/PetAttributeMethods.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RoleParticulars/ViewPetHorseStoneWin.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RolePromote/RolePromoteModel.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rune/RuneModel.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rune/RuneMosaicWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Sound/SoundUtility.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/Logic/BuyBoxInfoWin.cs 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/Logic/BuyEquipTip.cs 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/Logic/BuyItemInfoWin.cs 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/Logic/BuyWingsTip.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Store/StoreModel.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Strengthening/EquipSuit/PlayerSuitModel.cs 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SystemSetting/SystemSetting.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Team/TeammateBriefInfoBehaviour.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Team/TeammateInteractPanel.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/PromoteDetailsWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/UI3DTreasureSelectStage.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/FairyJadeInvestmentModel.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/LimitedTimePackageModel.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/LimitedTimePackageWin.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipInvest/VipInvestModel.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/MultipleExpModel.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/NPracticePointWin.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/WelfareWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/HUD/FacingCamera.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/A3_Item.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d4bbed9a14bff5e48b2bdd4df9dd3485
folderAsset: yes
timeCreated: 1501209136
licenseType: Free
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA32F_tagCMTrialExchange.cs
New file
@@ -0,0 +1,18 @@
using UnityEngine;
using System.Collections;
// A3 2F 宗门试炼兑换 #tagCMTrialExchange
public class CA32F_tagCMTrialExchange : GameNetPackBasic {
    public uint ID;    //兑换ID
    public CA32F_tagCMTrialExchange () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA32F;
    }
    public override void WriteToBytes () {
        WriteBytes (ID, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA32F_tagCMTrialExchange.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8f81b18420742e246bd051d0a2fda8f8
timeCreated: 1533199906
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0419_tagPlayerReborn.cs
@@ -1,5 +1,6 @@
using Snxxz.UI;
using TableConfig;
using UnityEngine;
//04 19 玩家重生#tagPlayerReborn
@@ -48,25 +49,30 @@
                PlayerDatas.Instance.baseData.PosX = vNetData.PosX;
                PlayerDatas.Instance.baseData.PosY = vNetData.PosY;
                _hero.LockTarget = null;
                if (vNetData.Type != 2)
                // 副本中 或者 非副本中但是勾选了自动复活
                if (DungeonStage.CurrentMapType != MapType.OpenCountry
                 || (DungeonStage.CurrentMapType == MapType.OpenCountry
                  && HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoReborn)))
                {
                    _hero.Behaviour.StopHandupAI();
                    _hero.Behaviour.StopKillUntilDieAI();
                }
                else
                {
                    if (DTC0609_tagPlayerDie.isAutoFight)
                    switch (vNetData.Type)
                    {
                        _hero.Behaviour.StartHandupAI();
                        case 0:// 安全区复活
                            _hero.Behaviour.StopHandupAI();
                            _hero.Behaviour.StopKillUntilDieAI();
                            break;
                        case 2:// 花钱复活
                        case 3:// 道具复活
                            if (DTC0609_tagPlayerDie.isAutoFight)
                            {
                                _hero.Behaviour.StartHandupAI();
                            }
                            break;
                    }
                }
                if (DungeonStage.CurrentMapType != MapType.OpenCountry)
                {
                    _hero.Behaviour.StartHandupAI();
                }
            }
        }
    }
}
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0602_tagObjBaseAttack.cs
@@ -40,6 +40,12 @@
                _startLockTarget = true;
            }
#if UNITY_EDITOR
            if (!RuntimeLogUtility.s_forceAutoFight)
            {
                _startLockTarget = false;
            }
#endif
            // 满足血量
            if (_startLockTarget)
            {
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -397,6 +397,12 @@
    private void CheckFanJi(GActorFight _attacker, H0614_tagUseSkillPos.tagSkillPosHurtObj _sTarget, GActorFight _cTarget)
    {
#if UNITY_EDITOR
        if (!RuntimeLogUtility.s_forceAutoFight)
        {
            return;
        }
#endif
        // 是否反击
        if (_sTarget.ObjID == PlayerDatas.Instance.PlayerId)
        {
Fight/Actor/AI/HeroAI_Base.cs
@@ -219,6 +219,7 @@
        DropItemManager.DropObject _obj = null;
        if (DropItemManager.HandupTryGetHeroItem(out _obj))
        {
            _hero.StopRush();
            Vector3 _targetPosition = _obj.dropItem.transform.position;
            float _chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _targetPosition);
            if (_chkDistSqrt > 0.5f)
Fight/Actor/HeroBehaviour.cs
@@ -950,6 +950,12 @@
            }
            float _chkDistance = soSkill.chkDistance;
            if (!PreFightMission.Instance.IsFinished())
            {
                _chkDistance = GeneralConfig.Instance.PrefightAtkRange;
            }
            SkillHelper.EffectValue _effectValue;
            List<SkillHelper.SkillInfo> _spSkillInfo = SkillHelper.Instance.GetSpSkill(skill.id);
            if (_spSkillInfo != null)
Fight/Actor/Skill/Skill.cs
@@ -181,11 +181,18 @@
                OnSkillCast(userSID, id);
            }
            if (!PreFightMission.Instance.IsFinished()
              || PlayerDatas.Instance.baseData.MapID == 52020)
            bool _clientRefreshCD = !PreFightMission.Instance.IsFinished()
              || PlayerDatas.Instance.baseData.MapID == 52020
              || userSID != PlayerDatas.Instance.PlayerId;
            if (_clientRefreshCD)
            {
                cd = skillInfo.config.CoolDownTime * Constants.F_GAMMA;
            }
            if (_clientRefreshCD = !PreFightMission.Instance.IsFinished()
              || PlayerDatas.Instance.baseData.MapID == 52020)
            {
                if (RefreshCD != null)
                {
                    RefreshCD(cd, cd);
@@ -216,9 +223,12 @@
            if (cd <= 0)
            {
                cd = 0;
                if (OnSkillCDFinished != null)
                if (OwnerID == PlayerDatas.Instance.PlayerId)
                {
                    OnSkillCDFinished(id);
                    if (OnSkillCDFinished != null)
                    {
                        OnSkillCDFinished(id);
                    }
                }
            }
        }
Fight/Actor/Status/StatusMgr.cs
@@ -220,6 +220,7 @@
        }
        Status_Base _status = Get(h0606.ObjID, h0606.SkillID);
        var _skillInfo = SkillHelper.Instance.Get(h0606.SkillID);
        if (_status == null)
        {
@@ -243,6 +244,15 @@
        if (m_OwnerList.Contains(h0606.ObjID))
        {
            m_OwnerList.Remove(h0606.ObjID);
        }
        if (_skillInfo.effectValue.ContainsKey(2004))
        {
            if (PlayerDatas.Instance.hero != null
             && PlayerDatas.Instance.hero.SelectTarget == _actor)
            {
                PlayerDatas.Instance.ReCheckAttackTarget();
            }
        }
    }
@@ -534,8 +544,7 @@
            for (int i = 0; i < _list.Count; ++i)
            {
                _skillInfo = SkillHelper.Instance.Get(_list[i].h0605.SkillID);
                if (_skillInfo.effectValue.ContainsKey(2004)
                 || _skillInfo.effectValue.ContainsKey(1302))
                if (_skillInfo.effectValue.ContainsKey(2004))
                {
                    return true;
                }
Fight/Actor/Status/Status_Base.cs
@@ -113,10 +113,10 @@
            m_Effect = null;
        }
        GActorFight _target = GAMgr.Instance.GetBySID(objID) as GActorFight;
        if (buffType == (int)E_BuffType.bfActionBuff)
        {
            GActorFight _target = GAMgr.Instance.GetBySID(objID) as GActorFight;
            // 调用动作
            if (m_SkillConfig.CtrlActionID != 0)
            {
@@ -124,6 +124,7 @@
                _target.IdleImmediate();
            }
        }
        h0605 = null;
    }
Fight/GameActor/Bhv_FindEnemy.cs
@@ -73,7 +73,7 @@
        float _distSqrt = MathUtility.DistanceSqrtXZ(_targetPos, _heroPos);
        if (_distSqrt > Mathf.Pow(reSetLockTargetDist, 2)
         || StatusMgr.Instance.IsInvincible(_hero.LockTarget.ServerInstID))
         || StatusMgr.Instance.IsInvisible(_hero.LockTarget.ServerInstID))
        {
            _hero.LockTarget = null;
        }
Fight/GameActor/GAMgr.cs
@@ -676,13 +676,32 @@
        return null;
    }
    public GActor GetCloserFightNpc(Vector3 center)
    {
        List<GActor> _list = GetTypeList(E_ActorClassType.NpcFightNorm);
        if (_list == null)
        {
            return null;
        }
        _list.Sort((GActor a1, GActor a2) =>
        {
            float _d1 = MathUtility.DistanceSqrtXZ(center, a1.Pos);
            float _d2 = MathUtility.DistanceSqrtXZ(center, a2.Pos);
            return _d1 < _d2 ? -1 : 1;
        });
        return _list[0];
    }
    /// <summary>
    /// 获取离给定坐标最近的NPC对象
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="npcID"></param>
    /// <returns></returns>
    public GActor GetCloserNPC(Vector3 pos, int npcID)
    public GActor GetCloserNPC(Vector3 pos, int npcID = 0)
    {
        m_AllList.Sort((GActor a1, GActor a2) =>
        {
@@ -712,9 +731,13 @@
            if (_npcConfig.NPCType == (int)E_NpcType.Fight)
            {
                GActorNpcFight _fight = m_AllList[i] as GActorNpcFight;
                if (_fight != null)
                if (_fight != null && !_fight.ActorInfo.serverDie)
                {
                    if (_fight.NpcConfig.NPCID == npcID)
                    if (npcID == 0)
                    {
                        return _fight;
                    }
                    else if (_fight.NpcConfig.NPCID == npcID)
                    {
                        return _fight;
                    }
Fight/GameActor/GAStaticDefine.cs
@@ -335,18 +335,72 @@
            var damageNum = value;
            var camera = CameraController.Instance.CameraObject;
            var mountPoint= (target is GA_NpcFightBoss || target is GA_NpcClientFightBoss) ? target.MP_Stun : target.MP_Name;
            var realmSuppress = false;
            var mountPoint = (target is GA_NpcFightBoss || target is GA_NpcClientFightBoss) ? target.MP_Stun : target.MP_Name;
            var _casterRealm = 0;
            var _targetRealm = 0;
            if (caster is GA_Hero)
            {
                if (target is GActorPlayerBase)
                {
                    int[] _grounp = GeneralConfig.Instance.RealmGroup;
                    for (int i = 0; i < _grounp.Length; ++i)
                    {
                        if (PlayerDatas.Instance.baseData.realmLevel > _grounp[i])
                        {
                            _casterRealm = i + 1;
                        }
                        if (target.ActorInfo.realm > _grounp[i])
                        {
                            _targetRealm = i + 1;
                        }
                    }
                }
                else if (target is GA_NpcFightNorm)
                {
                    _casterRealm = PlayerDatas.Instance.baseData.realmLevel;
                    _targetRealm = (int)target.ActorInfo.realm;
                }
            }
            else if (target is GA_Hero)
            {
                if (caster is GActorPlayerBase)
                {
                    int[] _grounp = GeneralConfig.Instance.RealmGroup;
                    for (int i = 0; i < _grounp.Length; ++i)
                    {
                        if (caster.ActorInfo.realm > _grounp[i])
                        {
                            _casterRealm = i + 1;
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel > _grounp[i])
                        {
                            _targetRealm = i + 1;
                        }
                    }
                }
                else if (caster is GA_NpcFightNorm)
                {
                    _casterRealm = (int)caster.ActorInfo.realm;
                    _targetRealm = PlayerDatas.Instance.baseData.realmLevel;
                }
            }
            //Debug.LogFormat("{0} 攻击 {1}, 境界: {2} <=> {3}, 是否产生了压制: {4}",
            //    caster.ServerInstID, target.ServerInstID, _casterRealm, _targetRealm, _casterRealm > _targetRealm);
            var popupInfo = new PopUpNum.PopupInfo()
            {
               pattern= _pattern+_base,
               num=damageNum,
               camera=camera,
               direction=direction,
               target=mountPoint,
               isPlayer=target is GA_Hero,
                realmSuppress= realmSuppress,
                pattern = _pattern + _base,
                num = damageNum,
                camera = camera,
                direction = direction,
                target = mountPoint,
                isPlayer = target is GA_Hero,
                realmSuppress = _casterRealm > _targetRealm
            };
            PopUpNum.RecordPopup(popupInfo);
Fight/GameActor/GA_NpcFightNorm.cs
@@ -35,6 +35,7 @@
        ActorInfo.HpEx = (ushort)_h0406.NPCHPEx;
        ActorInfo.MaxHp = _h0406.MaxHP;
        ActorInfo.MaxHpEx = (ushort)_h0406.MaxHPEx;
        ActorInfo.realm = (uint)NpcConfig.Realm;
        // 初始化移动速度
        ActorInfo.moveSpeed = 500f / _h0406.Speed;
Fight/GameActor/GA_NpcFunc.cs
@@ -148,7 +148,7 @@
        }
        else
        {
            m_HeadUpName.SetNPCName(ActorInfo.PlayerName);
            m_HeadUpName.SetNPCName(NpcConfig.NPCID);
        }
    }
Fight/GameActor/GA_Player.cs
@@ -19,6 +19,8 @@
    private H0434_tagAreaPlayerAppearEx m_H0434;
    private CmdManager m_CmdManager;
    private int m_ComAtkIndex;// 普攻索引
    private Skill m_CastSkill;// 要释放的技能
    protected sealed override void OnInit(GameNetPackBasic package)
    {
@@ -193,30 +195,122 @@
            {
                case 0:
                    m_DestPos = m_RecordBornPos + Quaternion.Euler(0, Random.Range(0, 359), 0) * Vector3.forward * Random.Range(1f, 2f);
                    TryGetValidPos(m_DestPos, ref m_DestPos);
                    //m_DestPos = m_RecordBornPos + Quaternion.Euler(0, Random.Range(0, 359), 0) * Vector3.forward * Random.Range(1f, 2f);
                    //TryGetValidPos(m_DestPos, ref m_DestPos);
                    if (SelectTarget == null)
                    {
                        SelectTarget = GAMgr.Instance.GetCloserFightNpc(Pos);
                    }
                    if (SelectTarget != null)
                    {
                        destForward = Forward = MathUtility.ForwardXZ(SelectTarget.Pos, Pos);
                    }
                    m_Step = 1;
                    break;
                case 1:
                    float _distSqrt = MathUtility.DistanceSqrtXZ(Pos, m_DestPos);
                    if (_distSqrt > 0.25f)
                    m_CastSkill = null;
                    for (int i = 0; i < JobSetup.HangupSkillList.Length; ++i)
                    {
                        if (State != E_ActorState.AutoRun)
                        if (SkillMgr.Get(JobSetup.HangupSkillList[i]).IsValid())
                        {
                            MoveToPosition(m_DestPos);
                            m_CastSkill = SkillMgr.Get(JobSetup.HangupSkillList[i]);
                            break;
                        }
                    }
                    else
                    if (m_CastSkill == null)
                    {
                        m_Step = 2;
                        if (m_ComAtkIndex > JobSetup.ComAtkIdList.Length - 1)
                        {
                            m_ComAtkIndex = 0;
                        }
                        int _comSkillId = JobSetup.ComAtkIdList[m_ComAtkIndex];
                        m_CastSkill = SkillMgr.Get(_comSkillId);
                        m_ComAtkIndex += 1;
                    }
                    m_Step = 2;
                    break;
                case 2:
                    Play(GAStaticDefine.State_Attack1Hash);
                    if (m_CastSkill != null)
                    {
                        SkillMgr.CastSkill(ServerInstID, m_CastSkill.id, true);
                        Vector3 _targetPosition = Pos + Forward * (m_CastSkill.skillInfo.config.AtkDist * .5f);
                        _targetPosition.y = 0;
                        UnityEngine.AI.NavMeshHit _navMeshHit;
                        if (UnityEngine.AI.NavMesh.Raycast(Pos, _targetPosition, out _navMeshHit, -1))
                        {
                            _targetPosition = _navMeshHit.position;
                        }
                        _targetPosition.y = Pos.y;
                        m_CastSkill.targetPosition = _targetPosition;
                        if (m_CastSkill.skillInfo.config.Skillactmark > 0
                         && m_CastSkill.skillInfo.config.Skillactmark < 20)
                        {
                            switch (m_CastSkill.skillInfo.config.Skillactmark)
                            {
                                case 10:
                                    Play(GAStaticDefine.State_Attack1Hash, 0);
                                    break;
                                case 11:
                                    Play(GAStaticDefine.State_Attack2Hash, 0);
                                    break;
                                case 12:
                                    Play(GAStaticDefine.State_Attack3Hash, 0);
                                    break;
                                case 13:
                                    Play(GAStaticDefine.State_Attack4Hash, 0);
                                    break;
                            }
                        }
                        else
                        {
                            switch (m_CastSkill.skillInfo.config.Skillactmark)
                            {
                                case 21:
                                    Play(GAStaticDefine.State_Skill21, 0);
                                    break;
                                case 22:
                                    Play(GAStaticDefine.State_Skill22, 0);
                                    break;
                                case 23:
                                    Play(GAStaticDefine.State_Skill23, 0);
                                    break;
                                case 24:
                                    Play(GAStaticDefine.State_Skill24, 0);
                                    break;
                                case 25:
                                    Play(GAStaticDefine.State_Skill25, 0);
                                    break;
                                case 26:
                                    Play(GAStaticDefine.State_Skill26, 0);
                                    break;
                                case 27:
                                    Play(GAStaticDefine.State_Skill27, 0);
                                    break;
                                case 28:
                                    Play(GAStaticDefine.State_Skill28, 0);
                                    break;
                                case 29:
                                    Play(GAStaticDefine.State_Skill29, 0);
                                    break;
                                case 99:
                                    Play(GAStaticDefine.State_RollHash, 0);
                                    break;
                            }
                        }
                    }
                    m_Step = 3;
                    break;
@@ -225,17 +319,7 @@
                    if (IsIdle())
                    {
                        m_Step = 4;
                    }
                    break;
                case 4:
                    m_WaitTime += Time.deltaTime;
                    if (m_WaitTime > 2)
                    {
                        m_Step = 0;
                        m_WaitTime = 0;
                    }
                    break;
@@ -259,7 +343,7 @@
    {
        ActorInfo.moveSpeed = 500f / speed;
        m_StartMove = startOrStop;
        m_TargetPos = pos;
        TryGetValidPos(pos, ref m_TargetPos);
        _dir = MathUtility.ForwardXZ(m_TargetPos, Pos);
        if (m_StartMove)
@@ -529,7 +613,7 @@
            return false;
        }
        if (StatusMgr.Instance.IsInvincible(ServerInstID))
        if (StatusMgr.Instance.IsInvisible(ServerInstID))
        {
            return false;
        }
Fight/GameActor/GActorPlayerBase.cs
@@ -24,9 +24,11 @@
    public int EquipSuitID { get; private set; }
    private E_MovingState m_MovingState;
    public E_MovingState MovingState {
    public E_MovingState MovingState
    {
        get { return m_MovingState; }
        private set {
        private set
        {
            m_MovingState = value;
            // Debug.LogFormat("设置 {0} 的移动状态为 {1}", ServerInstID, value);
        }
@@ -40,8 +42,10 @@
    public JobSetupConfig JobSetup { get; protected set; }
    public override int NextAction {
        get {
    public override int NextAction
    {
        get
        {
            if (!m_ClothesAnimator)
            {
                return -1;
@@ -49,7 +53,8 @@
            return m_ClothesAnimator.GetInteger(GAStaticDefine.Param_Action);
        }
        set {
        set
        {
            if (m_ClothesAnimator)
            {
                m_ClothesAnimator.SetInteger(GAStaticDefine.Param_Action, value);
@@ -1157,13 +1162,16 @@
    }
    private PlayerSuitModel _suitModel;
    private PlayerSuitModel SuitModel {
    private PlayerSuitModel SuitModel
    {
        get { return _suitModel ?? (_suitModel = ModelCenter.Instance.GetModel<PlayerSuitModel>()); }
    }
    private PlayerPackModel m_PlayerBackModel;
    private PlayerPackModel PlayerBackModel {
        get {
    private PlayerPackModel PlayerBackModel
    {
        get
        {
            return m_PlayerBackModel ?? (m_PlayerBackModel = ModelCenter.Instance.GetModel<PlayerPackModel>());
        }
    }
@@ -2000,6 +2008,14 @@
            }
            RequestShadow();
            var _equipModel = PlayerBackModel.GetSinglePackModel(PackType.rptEquip);
            var _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
            if (_itemModel != null)
            {
                SwitchGuard((uint)_itemModel.itemInfo.ItemID);
            }
        }
        else
        {
@@ -2040,6 +2056,8 @@
                m_HeadUpName.target = MP_Name;
            }
            SwitchGuard(0);
            ReleaseShadow();
        }
@@ -2048,6 +2066,8 @@
        {
            _pet.ShowOrHideModel(showOrHide);
        }
        ShowOrHide = showOrHide;
    }
@@ -2110,8 +2130,10 @@
    #region 战前冲锋
    private bool m_IsRushing = false;
    public bool IsRushing {
        get {
    public bool IsRushing
    {
        get
        {
            return m_IsRushing;
        }
    }
System/BlastFurnace/BlastFurnaceWin.cs
@@ -65,13 +65,13 @@
        protected override void OnActived()
        {
            base.OnActived();
            if(!WindowJumpMgr.Instance.IsJumpState)
            if (!WindowJumpMgr.Instance.IsJumpState && functionOrder == 0)
            {
                if(FurnaceModel.lingDanRedpoint.state != RedPointState.None)
                if (FurnaceModel.lingDanRedpoint.state != RedPointState.None)
                {
                    functionOrder = _lingDanTitle.order;
                }
                else if(ModelCenter.Instance.GetModel<RoleModel>().MakeDrugRedpoint.state != RedPointState.None)
                else if (ModelCenter.Instance.GetModel<RoleModel>().MakeDrugRedpoint.state != RedPointState.None)
                {
                    functionOrder = _treasureRefineTitle.order;
                }
System/BlastFurnace/GetEquipPathTips.cs
@@ -33,6 +33,10 @@
        List<Text> needPointNumlist = new List<Text>();
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        protected Button _closeBtn;
        [SerializeField]
@@ -225,39 +229,88 @@
            _nameText.color = UIHelper.GetUIColor(itemAttrData.itemConfig.ItemColor);
            equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
            equipScoreValue.text = itemAttrData.score.ToString();
            RefreshNeedPointUI();
            needLvDes.text = Language.Get("KnapS110");
            if (itemAttrData.itemConfig.UseLV > 1)
            CheckUselimit();
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            needLvValue.gameObject.SetActive(false);
            needLvDes.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < needPointTextlist.Count; i++)
            {
                needLvDes.gameObject.SetActive(true);
                needLvValue.gameObject.SetActive(true);
                needPointTextlist[i].gameObject.SetActive(false);
                needPointNumlist[i].gameObject.SetActive(false);
            }
            else
            for (int i = 0; i < uselimits.Length; i++)
            {
                needLvDes.gameObject.SetActive(false);
                needLvValue.gameObject.SetActive(false);
                switch (uselimits[i])
                {
                    case 0:
                        if (itemAttrData.itemConfig.UseLV > 1)
                        {
                            needLvValue.gameObject.SetActive(true);
                            needLvDes.gameObject.SetActive(true);
                        }
                        needLvDes.text = Language.Get("KnapS110");
                        if (itemAttrData.isHavePutLimit)
                        {
                            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                            if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                            {
                                needLvValue.color = conditionColor;
                                needLvDes.color = conditionColor;
                            }
                            else
                            {
                                needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                                needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                            }
                        }
                        else
                        {
                            needLvValue.text = 1.ToString();
                            needLvDes.color = conditionColor;
                            needLvValue.color = conditionColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemAttrData.itemConfig.RealmLimit);
                        if (itemAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = UIHelper.GetUIColor(TextColType.Red);
                        }
                        break;
                    case 2:
                        RefreshNeedPointUI();
                        break;
                }
            }
            if (itemAttrData.isHavePutLimit)
            {
                needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                {
                    needLvDes.color = conditionColor;
                    needLvValue.color = conditionColor;
                }
                else
                {
                    needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                    needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                }
            }
            else
            {
                needLvValue.text = 1.ToString();
                needLvDes.color = conditionColor;
                needLvValue.color = conditionColor;
            }
        }
        private void RefreshNeedPointUI()
System/BlastFurnace/GetEquipPathWin.cs
@@ -28,6 +28,10 @@
        [SerializeField]
        Text needLvValue;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        List<Text> needPointTextlist = new List<Text>();
        [SerializeField]
        List<Text> needPointNumlist = new List<Text>();
@@ -228,39 +232,88 @@
            _nameText.color = UIHelper.GetUIColor(itemAttrData.itemConfig.ItemColor);
            equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
            equipScoreValue.text = itemAttrData.score.ToString();
            RefreshNeedPointUI();
            needLvDes.text = Language.Get("KnapS110");
            if (itemAttrData.itemConfig.UseLV > 1)
            CheckUselimit();
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            needLvValue.gameObject.SetActive(false);
            needLvDes.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < needPointTextlist.Count; i++)
            {
                needLvDes.gameObject.SetActive(true);
                needLvValue.gameObject.SetActive(true);
                needPointTextlist[i].gameObject.SetActive(false);
                needPointNumlist[i].gameObject.SetActive(false);
            }
            else
            for (int i = 0; i < uselimits.Length; i++)
            {
                needLvDes.gameObject.SetActive(false);
                needLvValue.gameObject.SetActive(false);
                switch (uselimits[i])
                {
                    case 0:
                        if (itemAttrData.itemConfig.UseLV > 1)
                        {
                            needLvValue.gameObject.SetActive(true);
                            needLvDes.gameObject.SetActive(true);
                        }
                        needLvDes.text = Language.Get("KnapS110");
                        if (itemAttrData.isHavePutLimit)
                        {
                            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                            if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                            {
                                needLvValue.color = conditionColor;
                                needLvDes.color = conditionColor;
                            }
                            else
                            {
                                needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                                needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                            }
                        }
                        else
                        {
                            needLvValue.text = 1.ToString();
                            needLvDes.color = conditionColor;
                            needLvValue.color = conditionColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemAttrData.itemConfig.RealmLimit);
                        if (itemAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = UIHelper.GetUIColor(TextColType.Red);
                        }
                        break;
                    case 2:
                        RefreshNeedPointUI();
                        break;
                }
            }
            if (itemAttrData.isHavePutLimit)
            {
                needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                {
                    needLvDes.color = conditionColor;
                    needLvValue.color = conditionColor;
                }
                else
                {
                    needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                    needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                }
            }
            else
            {
                needLvValue.text = 1.ToString();
                needLvDes.color = conditionColor;
                needLvValue.color = conditionColor;
            }
        }
        private void RefreshNeedPointUI()
System/BlastFurnace/GetItemPathWin.cs
@@ -23,6 +23,11 @@
        [SerializeField]
        private Text needLvText;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        private Text _itemTypeText;
@@ -49,6 +54,9 @@
        [SerializeField]
        protected RectTransform _itemInfoTips;
        [SerializeField]
        protected RectTransform _getWaysPosTips;
        [SerializeField]
        protected CanvasGroup _getWaysTips;
@@ -169,8 +177,20 @@
        IEnumerator SetPanelScale()
        {
            yield return null;
            if(!modelShow.gameObject.activeInHierarchy)
            {
                startPosX = -476;
                endPosX = -668;
                _getWaysPosTips.anchoredPosition3D = new Vector3(670,0,0);
            }
            else
            {
                startPosX = -270;
                endPosX = -476;
                _getWaysPosTips.anchoredPosition3D = new Vector3(860,0,0);
            }
            _itemInfoTips.anchoredPosition3D = new Vector3(startPosX, 0, 0);
            _itemPathModel.SetInfoTipsPos(_itemInfoTips.GetComponent<RectTransform>(), _getWaysTips.GetComponent<RectTransform>());
            _itemPathModel.SetInfoTipsPos(_itemInfoTips,_getWaysPosTips);
            tipAlpha.alpha = 1;
        }
@@ -211,30 +231,75 @@
            _nameText.text = itemPathModel.chinItemModel.ItemName;
            _nameText.color = UIHelper.GetUIColor(itemPathModel.chinItemModel.ItemColor);
            _itemTypeText.text = itemPathModel.chinItemModel.ItemTypeName.ToString();
            _conditionText.text = Language.Get("KnapS110");
            needLvText.text = itemPathModel.chinItemModel.UseLV.ToString();
            CheckUselimit();
        }
            if (itemPathModel.chinItemModel.UseLV > 1)
        private void CheckUselimit()
        {
            int[] uselimits = itemPathModel.chinItemModel.UseCondiType;
            if (uselimits == null) return;
            _conditionText.gameObject.SetActive(false);
            needLvText.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < uselimits.Length; i++)
            {
                _conditionText.gameObject.SetActive(true);
                needLvText.gameObject.SetActive(true);
            }
            else
            {
                _conditionText.gameObject.SetActive(false);
                needLvText.gameObject.SetActive(false);
                switch (uselimits[i])
                {
                    case 0:
                        if (itemPathModel.chinItemModel.UseLV > 1)
                        {
                            _conditionText.gameObject.SetActive(true);
                            needLvText.gameObject.SetActive(true);
                        }
                        _conditionText.text = Language.Get("KnapS110");
                        needLvText.text = itemPathModel.chinItemModel.UseLV.ToString();
                        if (PlayerDatas.Instance.baseData.LV >= itemPathModel.chinItemModel.UseLV)
                        {
                            _conditionText.color = conditionColor;
                            needLvText.color = conditionColor;
                        }
                        else
                        {
                            _conditionText.color = conditionRedColor;
                            needLvText.color = conditionRedColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemPathModel.chinItemModel.RealmLimit);
                        if (itemPathModel.chinItemModel.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemPathModel.chinItemModel.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = conditionRedColor;
                        }
                        break;
                    case 2:
                        break;
                }
            }
            if (PlayerDatas.Instance.baseData.LV >= itemPathModel.chinItemModel.UseLV)
            {
                _conditionText.color = conditionColor;
                needLvText.color = conditionColor;
            }
            else
            {
                _conditionText.color = conditionRedColor;
                needLvText.color = conditionRedColor;
            }
        }
        private void SetMidUI()
System/BossReborn/BossRebornBehaviour.cs
@@ -57,7 +57,7 @@
        private void DisplayBaseInfo()
        {
            var config = ConfigManager.Instance.GetTemplate<BossRebornConfig>(rebornTask.id);
            var surplusTime = config.TotalTimes == 0 ? -1 : config.TotalTimes - rebornTask.completedTimes;
            var surplusTime = config.TotalTimes == 0 ? -1 : ((config.TotalTimes - rebornTask.gotRewardTimes) / config.SingleTimes);
            var surplusTimeString = UIHelper.GetTextColorByItemColor(surplusTime == 0 ? TextColType.Red : TextColType.Green,
                surplusTime == -1 ? Language.Get("BossFHLanguage4") : surplusTime.ToString());
@@ -76,22 +76,19 @@
            }
            var items = new List<Item>();
            for (int i = 0; i <= rewardIndex; i++)
            if (config.Reward1.Length > rewardIndex && config.Reward1[rewardIndex] != 0)
            {
                if (config.Reward1.Length > i && config.Reward1[i] != 0)
                {
                    items.Add(new Item(config.Reward1[i], config.RewardCount1[i]));
                }
                items.Add(new Item(config.Reward1[rewardIndex], config.RewardCount1[rewardIndex]));
            }
                if (config.Reward2.Length > i && config.Reward2[i] != 0)
                {
                    items.Add(new Item(config.Reward2[i], config.RewardCount2[i]));
                }
            if (config.Reward2.Length > rewardIndex && config.Reward2[rewardIndex] != 0)
            {
                items.Add(new Item(config.Reward2[rewardIndex], config.RewardCount2[rewardIndex]));
            }
                if (config.Reward3.Length > i && config.Reward3[i] != 0)
                {
                    items.Add(new Item(config.Reward3[i], config.RewardCount3[i]));
                }
            if (config.Reward3.Length > rewardIndex && config.Reward3[rewardIndex] != 0)
            {
                items.Add(new Item(config.Reward3[rewardIndex], config.RewardCount3[rewardIndex]));
            }
            m_Rewards.Display(items);
@@ -114,6 +111,12 @@
            m_GotoOrGetReward.gameObject.SetActive(
                state == BossRebornTask.State.Normal || state == BossRebornTask.State.Rewardable);
            var config = ConfigManager.Instance.GetTemplate<BossRebornConfig>(rebornTask.id);
            var surplusTime = config.TotalTimes == 0 ? -1 : ((config.TotalTimes - rebornTask.gotRewardTimes) / config.SingleTimes);
            var surplusTimeString = UIHelper.GetTextColorByItemColor(surplusTime == 0 ? TextColType.Red : TextColType.Green,
                surplusTime == -1 ? Language.Get("BossFHLanguage4") : surplusTime.ToString());
            m_surplusTimes.text = Language.Get("BossFHLanguage3", surplusTimeString);
            m_Goto.gameObject.SetActive(state == BossRebornTask.State.Normal);
            m_GetReward.gameObject.SetActive(state == BossRebornTask.State.Rewardable);
            m_GotReward.gameObject.SetActive(state == BossRebornTask.State.Completed);
System/Chat/ChatCtrl.cs
@@ -63,6 +63,7 @@
    #region 私聊
    private Dictionary<int, List<ChatFriendData>> pteChatDics = new Dictionary<int, List<ChatFriendData>>();
    public event Action OnPteChatChangeEvent;
    public event Action<int> SelectRecentlyEvent;
    public static event OnChatPteRefresh OnRefreshPteChat;
    private int pteChatId = 0;
    public int PteChatID
@@ -110,6 +111,14 @@
            }
        }
    }
    public void SelectRecentlyChat(int playerId)
    {
        if (SelectRecentlyEvent != null)
        {
            SelectRecentlyEvent(playerId);
        }
    }
    #endregion
    private List<ChatData> chatlist = new List<ChatData>();
System/Chat/ChatRecently.cs
@@ -59,6 +59,7 @@
            if(_cell.index!= ChatCtrl.Inst.PteChatID)
            {
                ChatCtrl.Inst.PteChatID = _cell.index;
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
                m_RecentlyControl.m_Scorller.RefreshActiveCellViews();
            }
        }
@@ -76,12 +77,14 @@
            if (friendModel.tempFriendData != null)
            {
                ChatCtrl.Inst.PteChatID = (int)friendModel.tempFriendData.PlayerID;
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
                return;
            }
            var _dict = friendModel.GetFriendInfoDict((byte)GroupType.RecentContact);
            if (_dict != null && _dict.Count > 0)
            {
                ChatCtrl.Inst.PteChatID = (int)_dict.Keys.First();
                ChatCtrl.Inst.SelectRecentlyChat(ChatCtrl.Inst.PteChatID);
            }
        }
    }
System/DailyQuest/DailyQuestBehaviour.cs
@@ -24,9 +24,12 @@
        [SerializeField] Image m_Icon;
        [SerializeField] Button m_Details;
        [SerializeField] Button m_Goto;
        [SerializeField] Button m_Func;
        [SerializeField] Text m_FuncDisplay;
        [SerializeField] Transform m_Complete;
        [SerializeField] Transform m_Locked;
        [SerializeField] RedpointBehaviour m_RedpointBehaviour;
        [SerializeField] RedpointBehaviour m_FuncRedpointBehaviour;
        AchievementGuideEffect m_AchievementEffect;
@@ -59,6 +62,9 @@
            m_Goto.RemoveAllListeners();
            m_Goto.AddListener(GotoDailyQuest);
            m_Func.RemoveAllListeners();
            m_Func.AddListener(GotoFunc);
            m_Details.RemoveAllListeners();
            m_Details.AddListener(ShowDetails);
@@ -70,6 +76,16 @@
            else
            {
                m_RedpointBehaviour.gameObject.SetActive(false);
            }
            switch ((DailyQuestType)data.id)
            {
                case DailyQuestType.Trial:
                    m_FuncRedpointBehaviour.redpointId = model.trialExchangeRedpoint.id;
                    break;
                default:
                    m_FuncRedpointBehaviour.redpointId = 0;
                    break;
            }
            CheckAchievementGuide();
@@ -114,6 +130,19 @@
                else
                {
                    dailyQuestWin.GotoDailyQuest(data.id);
                }
            }
        }
        private void GotoFunc()
        {
            if (data != null)
            {
                switch ((DailyQuestType)data.id)
                {
                    case DailyQuestType.Trial:
                        WindowCenter.Instance.Open<TrialExchangeWin>();
                        break;
                }
            }
        }
@@ -230,6 +259,17 @@
                    break;
            }
            switch ((DailyQuestType)data.id)
            {
                case DailyQuestType.Trial:
                    m_Func.gameObject.SetActive(state != DailyQuestModel.DailyQuestState.Locked);
                    m_FuncDisplay.text = Language.Get("ItemHandle_exchange");
                    break;
                default:
                    m_Func.gameObject.SetActive(false);
                    break;
            }
        }
        private void OnTotalTimeChange()
System/DailyQuest/DailyQuestModel.cs
@@ -20,12 +20,14 @@
        const int ACTIVEVALUE_REDPOINT = 78004;
        const int REALMPOINT_REPOINT = 78005;
        const int DAILYQUEST_REDPOINTIDBASE = 78100;
        const int TRIALEXCHANGE_REDPOINTID = 78006;
        Redpoint dailyQuestRedpoint = new Redpoint(DAILYQUEST_REDPOINTID);
        public Redpoint everyDayRedpoint = new Redpoint(DAILYQUEST_REDPOINTID, EVERYDAY_REDPOINTID);
        public Redpoint timeLimitRedpoint = new Redpoint(DAILYQUEST_REDPOINTID, TIMELIMIT_REDPOINTID);
        Redpoint activeValueRedpoint = new Redpoint(EVERYDAY_REDPOINTID, ACTIVEVALUE_REDPOINT);
        Redpoint realmPointRedpoint = new Redpoint(EVERYDAY_REDPOINTID, REALMPOINT_REPOINT);
        public Redpoint trialExchangeRedpoint = new Redpoint(EVERYDAY_REDPOINTID, TRIALEXCHANGE_REDPOINTID);
        int m_DailyQuestTotalActiveValue = 150;
        public int dailyQuestTotalActiveValue {
System/DailyQuest/DayRemind.cs
@@ -39,10 +39,10 @@
    public const string LOGIN_AD_TIP = "LoginAdTip";
    public const string PASS_SKILL_REDPOINT = "PassSkillRedpoint";
    public const string VIP_GIFT_REDPOINT = "VipGiftRedpoint";
    public const string MULTIPLE_EXP_REDPOINT = "MultipleExpRedpoint";
    public const string POTENTIAL_NO_NOTIFY = "PotentialNoNotify";
    public const string FLASHSALE_REDPOINT = "FlashSale_Redpoint";
    public const string OSTIMEGIFT_REDPOINT = "OSTimeGift_Redpoint";
    public const string TRIALEXCHANGE_REDPOINT = "TrialExchange_Redpoint";
    public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
    public bool GetDayRemind(string _remindKey)
@@ -90,10 +90,10 @@
        SetDayRemind(LOGIN_AD_TIP);
        SetDayRemind(PASS_SKILL_REDPOINT);
        SetDayRemind(VIP_GIFT_REDPOINT);
        SetDayRemind(MULTIPLE_EXP_REDPOINT);
        SetDayRemind(POTENTIAL_NO_NOTIFY);
        SetDayRemind(FLASHSALE_REDPOINT);
        SetDayRemind(OSTIMEGIFT_REDPOINT);
        SetDayRemind(TRIALEXCHANGE_REDPOINT);
    }
    private void SetDayRemind(string _key)
System/Dungeon/TrialClassSelectCell.cs
New file
@@ -0,0 +1,25 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class TrialClassSelectCell : CellView
    {
        [SerializeField] Text m_Class;
        public void Display(int _class)
        {
            if (_class == 1)
            {
                m_Class.text = Language.Get("TrialClassClearSelect");
            }
            else
            {
                m_Class.text = Language.Get("EquipSuitLV", Language.Get(StringUtility.Contact("Num_CHS_", _class)));
            }
        }
    }
}
System/Dungeon/TrialClassSelectCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 04abed3d281446d47bc5d2edcafc7137
timeCreated: 1533196718
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Dungeon/TrialDungeonModel.cs
New file
@@ -0,0 +1,176 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TableConfig;
using UnityEngine;
namespace Snxxz.UI
{
    public class TrialDungeonModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        Dictionary<int, List<TrialExchangeConfig>> trialTokenExchangeDict = new Dictionary<int, List<TrialExchangeConfig>>();
        Dictionary<int, int> lineToTokenClassDict;
        public List<int> trialTokens = new List<int>();
        DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
        PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        public event Action SelectEquipClassEvent;
        bool serverInited = false;
        public override void Init()
        {
            ParseConfig();
            dailyQuestModel.dailyQuestProgressUpdateEvent += DailyQuestProgressUpdateEvent;
            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
        }
        public void OnBeforePlayerDataInitialize()
        {
            serverInited = false;
        }
        public void OnPlayerLoginOk()
        {
            serverInited = true;
            UpdateRedpoint();
        }
        void ParseConfig()
        {
            var configs = ConfigManager.Instance.GetAllValues<TrialExchangeConfig>();
            for (int i = 0; i < configs.Count; i++)
            {
                List<TrialExchangeConfig> list;
                var itemConfig = ConfigManager.Instance.GetTemplate<ItemConfig>(configs[i].tokenId);
                if (!trialTokenExchangeDict.TryGetValue(itemConfig.LV, out list))
                {
                    list = new List<TrialExchangeConfig>();
                    trialTokenExchangeDict.Add(itemConfig.LV, list);
                }
                list.Add(configs[i]);
                if (!trialTokens.Contains(configs[i].tokenId))
                {
                    trialTokens.Add(configs[i].tokenId);
                }
            }
            var funcConfig = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("LineToItemStage");
            lineToTokenClassDict = ConfigParse.GetDic<int, int>(funcConfig.Numerical1);
        }
        public override void UnInit()
        {
            dailyQuestModel.dailyQuestProgressUpdateEvent -= DailyQuestProgressUpdateEvent;
        }
        private void DailyQuestProgressUpdateEvent(int _id)
        {
            if (_id == (int)DailyQuestType.Trial)
            {
                UpdateRedpoint();
            }
        }
        int m_SelectEquipClass = 0;//1-全部阶数
        public int selectEquipClass
        {
            get { return m_SelectEquipClass; }
            set
            {
                if (m_SelectEquipClass != value && SelectEquipClassEvent != null)
                {
                    m_SelectEquipClass = value;
                    SelectEquipClassEvent();
                }
                m_SelectEquipClass = value;
            }
        }
        public int GetTrialTokenCount(int itemId)
        {
            var count = 0;
            count += packModel.GetSinglePackModel(PackType.rptItem).GetItemCountByID(itemId);
            return count;
        }
        public int LineToTokenClass(int line)
        {
            if (lineToTokenClassDict != null && lineToTokenClassDict.ContainsKey(line))
            {
                return lineToTokenClassDict[line];
            }
            return lineToTokenClassDict != null ? lineToTokenClassDict.Values.Last() : 0;
        }
        public bool TryGetTrialExchanges(int lv, out List<TrialExchangeConfig> list)
        {
            return trialTokenExchangeDict.TryGetValue(lv, out list);
        }
        public bool TrialSendExchange(int _id, out int error)
        {
            error = 0;
            if (!FuncOpen.Instance.IsFuncOpen(88))
            {
                error = 2;
                return false;
            }
            var config = ConfigManager.Instance.GetTemplate<TrialExchangeConfig>(_id);
            if (config == null)
            {
                return false;
            }
            var count = GetTrialTokenCount(config.tokenId);
            if (count < config.tokenCount)
            {
                error = 1;
                return false;
            }
            CA32F_tagCMTrialExchange pak = new CA32F_tagCMTrialExchange();
            pak.ID = (uint)_id;
            GameNetSystem.Instance.SendInfo(pak);
            return true;
        }
        public void ProcessTrialError(int error)
        {
            switch (error)
            {
                case 1:
                    SysNotifyMgr.Instance.ShowTip("TrialTokenCountError");
                    break;
                case 2:
                    FuncOpen.Instance.ProcessorFuncErrorTip(88);
                    break;
            }
        }
        #region 红点
        public void SetDayRemind()
        {
            if (dailyQuestModel.trialExchangeRedpoint.state == RedPointState.Simple)
            {
                DayRemind.Instance.SetDayRemind(DayRemind.TRIALEXCHANGE_REDPOINT, true);
                UpdateRedpoint();
            }
        }
        private void SecondEvent()
        {
            if (serverInited && !DayRemind.Instance.GetDayRemind(DayRemind.TRIALEXCHANGE_REDPOINT))
            {
                UpdateRedpoint();
            }
        }
        void UpdateRedpoint()
        {
            var state = dailyQuestModel.GetQuestState((int)DailyQuestType.Trial);
            dailyQuestModel.trialExchangeRedpoint.state = state == DailyQuestModel.DailyQuestState.Completed
                && !DayRemind.Instance.GetDayRemind(DayRemind.TRIALEXCHANGE_REDPOINT) ?
                RedPointState.Simple : RedPointState.None;
        }
        #endregion
    }
}
System/Dungeon/TrialDungeonModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 96b0937bcc556844cbb107fea132a1e8
timeCreated: 1533104394
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Dungeon/TrialDungeonSelectWin.cs
@@ -26,6 +26,7 @@
        Button m_Close;
        [SerializeField]
        Text trialChallengeCntTxt;
        [SerializeField] Button m_Exchange;
        public event Action<Dungeon> dungeonSelectEvent;
        Dungeon m_CurrentSelectDungeon;
@@ -61,6 +62,7 @@
        {
            //m_Confirm.AddListener(ChallengeDungeon);
            m_Close.AddListener(CloseClick);
            m_Exchange.AddListener(Exchange);
        }
        protected override void OnPreOpen()
@@ -116,6 +118,11 @@
            currentSelectDungeon = dungeons.Count > 0 ? dungeons[0] : default(Dungeon);
        }
        private void Exchange()
        {
            WindowCenter.Instance.Open<TrialExchangeWin>();
        }
    }
}
System/Dungeon/TrialExchangeCell.cs
New file
@@ -0,0 +1,67 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
using System;
namespace Snxxz.UI
{
    public class TrialExchangeCell : CellView
    {
        [SerializeField] ItemCell m_Item;
        [SerializeField] Text m_Description;
        [SerializeField] ItemBehaviour m_Token;
        [SerializeField] Button m_Exchange;
        TrialDungeonModel model { get { return ModelCenter.Instance.GetModel<TrialDungeonModel>(); } }
        int trialExchangeId = 0;
        private void Awake()
        {
            m_Exchange.AddListener(Exchange);
        }
        private void Exchange()
        {
            if (trialExchangeId != 0)
            {
                int error = 0;
                if (!model.TrialSendExchange(trialExchangeId, out error))
                {
                    if (error == 1)
                    {
                        var config = ConfigManager.Instance.GetTemplate<TrialExchangeConfig>(trialExchangeId);
                        if (config != null)
                        {
                            ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(config.tokenId);
                        }
                    }
                    model.ProcessTrialError(error);
                }
            }
        }
        public void Display(int id)
        {
            trialExchangeId = id;
            var config = ConfigManager.Instance.GetTemplate<TrialExchangeConfig>(id);
            if (config == null)
            {
                trialExchangeId = 0;
                return;
            }
            m_Item.cellBtn.RemoveAllListeners();
            m_Item.gameObject.SetActive(true);
            ItemCellModel cellModel = new ItemCellModel(config.exchangeItemID, true, (ulong)config.exchangeItemCount, config.exchangeItemIsBind);
            m_Item.Init(cellModel);
            m_Item.cellBtn.AddListener(() =>
            {
                ItemAttrData itemAttrData = new ItemAttrData(config.exchangeItemID, true, (ulong)config.exchangeItemCount, -1, config.exchangeItemIsBind);
                ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemAttrData);
            });
            m_Description.text = config.description;
            m_Token.SetItem(config.tokenId, config.tokenCount);
        }
    }
}
System/Dungeon/TrialExchangeCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 9ebb65b796d3424439f2dff414553268
timeCreated: 1533181655
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Dungeon/TrialExchangeWin.cs
New file
@@ -0,0 +1,152 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, August 01, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
    public class TrialExchangeWin : Window
    {
        [SerializeField] ScrollerController m_Controller;
        [SerializeField] Text m_SelectClass;
        [SerializeField] Button m_SelectClassUp;
        [SerializeField] TrialSelectClassBehaviour m_SelectClassBehaviour;
        [SerializeField] Button m_Close;
        TrialDungeonModel model { get { return ModelCenter.Instance.GetModel<TrialDungeonModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Controller.OnRefreshCell += OnRefreshCell;
            m_Close.onClick.AddListener(CloseClick);
            m_SelectClassUp.onClick.AddListener(SelectClassUp);
        }
        protected override void OnPreOpen()
        {
            model.SetDayRemind();
            model.selectEquipClass = 1;
            m_SelectClassBehaviour.gameObject.SetActive(false);
            m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(180);
            foreach (var mapID in dungeonModel.DungeonMapDungeons(60010))
            {
                DungeonConfig _tagDungeonModel = ConfigManager.Instance.GetTemplate<DungeonConfig>(mapID);
                DungeonRecord dungeonRecord;
                if (dungeonModel.TryGetDungeonRecord(60010, out dungeonRecord))
                {
                    if (dungeonRecord.lineGrades != null && dungeonRecord.lineGrades.ContainsKey(_tagDungeonModel.LineID))
                    {
                        model.selectEquipClass = model.LineToTokenClass(_tagDungeonModel.LineID);
                    }
                }
            }
            model.SelectEquipClassEvent += SelectEquipClassEvent;
            packModel.RefreshItemCountAct += RefreshItemCountAct;
            Display();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.SelectEquipClassEvent -= SelectEquipClassEvent;
            packModel.RefreshItemCountAct -= RefreshItemCountAct;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void OnRefreshCell(ScrollerDataType type, CellView cell)
        {
            TrialExchangeCell trialExchangeCell = cell as TrialExchangeCell;
            trialExchangeCell.Display(cell.index);
        }
        private void SelectClassUp()
        {
            bool _up = m_SelectClassBehaviour.gameObject.activeSelf;
            m_SelectClassBehaviour.gameObject.SetActive(!_up);
            if (!_up)
            {
                m_SelectClassBehaviour.Display();
            }
            m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(_up ? 180 : 0);
        }
        void Display()
        {
            DisplayTrialExchanges();
            DisplaySelectClass();
        }
        void DisplayTrialExchanges()
        {
            m_Controller.Refresh();
            if (model.selectEquipClass == 1)
            {
                var configs = ConfigManager.Instance.GetAllValues<TrialExchangeConfig>();
                for (int i = 0; i < configs.Count; i++)
                {
                    m_Controller.AddCell(ScrollerDataType.Header, configs[i].id);
                }
            }
            else
            {
                List<TrialExchangeConfig> list;
                if (model.TryGetTrialExchanges(model.selectEquipClass, out list))
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        m_Controller.AddCell(ScrollerDataType.Header, list[i].id);
                    }
                }
            }
            m_Controller.Restart();
        }
        private void RefreshItemCountAct(PackType packtype, int arg2, int itemId)
        {
            if (packtype == PackType.rptItem && model.trialTokens.Contains(itemId))
            {
                m_Controller.m_Scorller.RefreshActiveCellViews();
            }
        }
        void DisplaySelectClass()
        {
            m_SelectClass.text = model.selectEquipClass == 1 ? Language.Get("TrialClassSeleclAll") :
                Language.Get("EquipSuitLV", Language.Get(StringUtility.Contact("Num_CHS_", model.selectEquipClass)));
        }
        private void SelectEquipClassEvent()
        {
            DisplayTrialExchanges();
            DisplaySelectClass();
            bool _up = m_SelectClassBehaviour.gameObject.activeSelf;
            m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(_up ? 0 : 180);
        }
    }
}
System/Dungeon/TrialExchangeWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: b54a5d314f590f24a964f47ff2adcee5
timeCreated: 1533115845
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Dungeon/TrialSelectClassBehaviour.cs
New file
@@ -0,0 +1,46 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
namespace Snxxz.UI
{
    public class TrialSelectClassBehaviour : MonoBehaviour
    {
        [SerializeField] ScrollerController m_Controller;
        TrialDungeonModel model { get { return ModelCenter.Instance.GetModel<TrialDungeonModel>(); } }
        private void Awake()
        {
            m_Controller.OnRefreshCell += OnRefreshCell;
        }
        private void OnRefreshCell(ScrollerDataType type, CellView cell)
        {
            TrialClassSelectCell trialClassSelectCell = cell as TrialClassSelectCell;
            trialClassSelectCell.Display(cell.index);
        }
        public void Display()
        {
            if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) <= 0)
            {
                m_Controller.Refresh();
                m_Controller.AddCell(ScrollerDataType.Header, 1, SelectClass);
                for (int i = 0; i < model.trialTokens.Count; i++)
                {
                    var config = ConfigManager.Instance.GetTemplate<ItemConfig>(model.trialTokens[i]);
                    m_Controller.AddCell(ScrollerDataType.Header, config.LV, SelectClass);
                }
                m_Controller.Restart();
            }
        }
        private void SelectClass(CellView cell)
        {
            model.selectEquipClass = cell.index;
            gameObject.SetActive(false);
        }
    }
}
System/Dungeon/TrialSelectClassBehaviour.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 16a96c2e07e1e24458fa86cd651074f5
timeCreated: 1533196158
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FriendSystem/New/FriendsModel.cs
@@ -102,12 +102,14 @@
    public override void UnInit()
    {
        ChatCtrl.OnRefreshPteChat -= FriendChatRedPointCtrl;
        ChatCtrl.Inst.SelectRecentlyEvent -= PrivateSomeone;
        GA_Hero.OnKillPlayer -= RefreshKillOtherPlayer;
    }
    public void OnBeforePlayerDataInitialize()
    {
        ChatCtrl.OnRefreshPteChat -= FriendChatRedPointCtrl;
        ChatCtrl.Inst.SelectRecentlyEvent -= PrivateSomeone;
        _groupDict.Clear();
        _friendQuestDict.Clear();
        _friendRecommendDict.Clear();
@@ -119,8 +121,8 @@
    public void OnAfterPlayerDataInitialize()
    {
        ChatCtrl.OnRefreshPteChat += FriendChatRedPointCtrl;
        ChatCtrl.Inst.SelectRecentlyEvent += PrivateSomeone;
    }
    private void RefreshKillOtherPlayer(uint id, string name)
    {
@@ -516,6 +518,12 @@
        DesignDebug.Log("FriendChatRedPointCtrl");
    }
    private void PrivateSomeone(int playerId)
    {
        RemoveFriendRed(GroupType.RecentContact, playerId);
    }
    public void RemoveFriendRed(GroupType type,int id)
    {
        if (friendRedDict.ContainsKey(type))
System/GeneralConfig/GeneralConfig.cs
@@ -120,7 +120,10 @@
    public List<int> demonJarNoRebornRemindMaps = null;
    public string[][] ModeDefaultConfig { get; private set; }
    public int[] RealmGroup { get; private set; }
    public float PrefightAtkRange { get; private set; }
    public Dictionary<int, string> multipleRealmImgDict { get; private set; }
    public void Init()
    {
        try
@@ -224,6 +227,20 @@
                _pos[0] = (double)_data[_key][0];
                _pos[1] = (double)_data[_key][1];
                NpcPosOffset.Add(_npcID, new Vector3((float)_pos[0], 0, (float)_pos[1]));
            }
            FuncConfigConfig nxxdImg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("NXXDPicture");
            LitJson.JsonData nxxdData = LitJson.JsonMapper.ToObject(nxxdImg.Numerical1);
            multipleRealmImgDict = new Dictionary<int, string>();
            if (nxxdData.IsArray)
            {
                for (i = 0; i < nxxdData.Count; i++)
                {
                    if (nxxdData[i].IsArray)
                    {
                        multipleRealmImgDict.Add(int.Parse(nxxdData[i][0].ToString()), nxxdData[i][1].ToString());
                    }
                }
            }
            bossShuntMaps = new List<int>(GetIntArray("BossShunt"));
@@ -395,6 +412,20 @@
                ModeDefaultConfig[2] = _pet;
                ModeDefaultConfig[3] = _horse;
            }
            if (RealmGroup == null)
            {
                func = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("RealmGroup");
                string[] _group = func.Numerical1.Split('|');
                RealmGroup = new int[_group.Length];
                for (int j = 0; j < _group.Length; ++j)
                {
                    int.TryParse(_group[j], out RealmGroup[j]);
                }
            }
            func = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("PrefightAtkRange");
            PrefightAtkRange = float.Parse(func.Numerical1);
        }
        catch (Exception ex)
        {
System/HappyXB/BestXBWin.cs
@@ -285,7 +285,7 @@
            {
                xbResultItemBasiclist[index].gameObject.SetActive(true);
                xbResultItemBasiclist[index].transform.DOScale(new Vector3(1, 1, 1), scaleTime);
                XBModel.GetNotifyResult(xbResultItemBasiclist[index].itemConfig.ID);
                XBModel.GetNotifyResult(xbResultItemBasiclist[index].itemConfig.ID, int.Parse(xbResultItemBasiclist[index].countText.text));
            }
        }
System/HappyXB/HappyXBModel.cs
@@ -90,7 +90,7 @@
        /// <returns></returns>
        private bool SatisfyNotifyCondition(string key, ArrayList paramArray)
        {
            XBNotifyParms.Add(paramArray);
            XBNotifyParms.Add(new ArrayList(paramArray));
            if (paramArray != null && paramArray.Count > 0 &&
                paramArray[0].Equals(UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName)))
            {
@@ -99,16 +99,18 @@
            return true;
        }
        public void GetNotifyResult(int itemId)
        public void GetNotifyResult(int itemId, int itemCount)
        {
            DesignDebug.Log("GetNotifyResult" + XBNotifyParms.Count);
            for(int i = 0; i < XBNotifyParms.Count; i++)
            for (int i = 0; i < XBNotifyParms.Count; i++)
            {
                if(XBNotifyParms[i] != null && XBNotifyParms[i].Count > 1)
                if (XBNotifyParms[i] != null && XBNotifyParms[i].Count > 3)
                {
                    int notifyItemId = 0;
                    int.TryParse(XBNotifyParms[i][1].ToString(),out notifyItemId);
                    if (notifyItemId == itemId)
                    int.TryParse(XBNotifyParms[i][1].ToString(), out notifyItemId);
                    int notifyItemCnt = 0;
                    int.TryParse(XBNotifyParms[i][3].ToString(), out notifyItemCnt);
                    if (notifyItemId == itemId && notifyItemCnt == itemCount)
                    {
                        SysNotifyMgr.Instance.ShowTip("HappyXB", XBNotifyParms[i].ToArray());
                        break;
@@ -339,7 +341,7 @@
                for (int i = 0; i < xbItemlist.Count; i++)
                {
                    string log = Language.Get("HappyXBGetItemTime", xbItemlist[i].createTimeStr, UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName),
                        xbItemlist[i].itemId);
                        xbItemlist[i].itemId, xbItemlist[i].count);
                    getNewItemLoglist.Add(log);
                }
                if (getNewItemLoglist.Count > 0)
System/HappyXB/RuneXBWin.cs
@@ -295,7 +295,7 @@
                xbResultItemBasiclist[index].transform.DOScale(new Vector3(1, 1, 1), scaleTime);
                if(xbResultItemBasiclist[index].itemConfig != null)
                {
                    XBModel.GetNotifyResult(xbResultItemBasiclist[index].itemConfig.ID);
                    XBModel.GetNotifyResult(xbResultItemBasiclist[index].itemConfig.ID, int.Parse(xbResultItemBasiclist[index].countText.text));
                }
            }
        }
System/KnapSack/Logic/BoxInfoWin.cs
@@ -21,6 +21,11 @@
        [SerializeField]
        Text conditionText;
        [SerializeField] Text needLvText;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        Text itemTypeText;
@@ -134,57 +139,35 @@
            ItemCellModel cellModel = new ItemCellModel(itemTipsModel.curAttrData.itemId, itemTipsModel.curAttrData.isPreview, (ulong)itemTipsModel.curAttrData.count, itemTipsModel.curAttrData.isBind,
                itemTipsModel.curAttrData.guid, itemTipsModel.curAttrData.packType, false);
            itemCell.Init(cellModel);
            conditionText.text = Language.Get("KnapS110");
            string conditionStr = StringUtility.Contact(Language.Get("KnapS110"), itemTipsModel.curAttrData.itemConfig.UseLV);
            conditionText.gameObject.SetActive(false);
            needLvText.gameObject.SetActive(false);
            if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
            {
                conditionText.text = Language.Get("KnapS110");
                needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            if (chestsConfig != null && chestsConfig.OpenMoney > 0)
            {
                conditionText.gameObject.SetActive(true);
                needLvText.gameObject.SetActive(true);
                if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
                ulong haveMoney = UIHelper.GetMoneyCnt(1);
                if (haveMoney >= (ulong)chestsConfig.OpenMoney)
                {
                    conditionText.color = conditionColor;
                    needLvText.color = conditionColor;
                    conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Green, chestsConfig.OpenMoney.ToString()));
                }
                else
                {
                    conditionText.color = conditionRedColor;
                    needLvText.color = conditionRedColor;
                }
            }
            if(chestsConfig != null)
            {
                if (chestsConfig.OpenMoney > 0)
                {
                    conditionText.gameObject.SetActive(true);
                    needLvText.gameObject.SetActive(false);
                    ulong haveMoney = UIHelper.GetMoneyCnt(1);
                    if(haveMoney >= (ulong)chestsConfig.OpenMoney)
                    {
                        conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Green, chestsConfig.OpenMoney.ToString()));
                    }
                    else
                    {
                        conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Red,chestsConfig.OpenMoney.ToString()));
                    }
                    conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Red, chestsConfig.OpenMoney.ToString()));
                }
            }
            else
            {
                DesignDebug.LogError("宝箱开启表里没有这个宝箱ID:" + itemTipsModel.curAttrData.itemId);
                CheckUselimit();
            }
            itemDesText.text = itemTipsModel.curAttrData.GetAllInfoDes();
            operateBtn.SetActive(false);
            CreateFuncBtn();
            if (itemTipsModel.curAttrData.itemConfig.ExpireTime > 0)
            {
@@ -205,6 +188,69 @@
            }
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemTipsModel.curAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
                        {
                            conditionText.gameObject.SetActive(true);
                            needLvText.gameObject.SetActive(true);
                        }
                        conditionText.text = Language.Get("KnapS110");
                        needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
                        if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
                        {
                            conditionText.color = conditionColor;
                            needLvText.color = conditionColor;
                        }
                        else
                        {
                            conditionText.color = conditionRedColor;
                            needLvText.color = conditionRedColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemTipsModel.curAttrData.itemConfig.RealmLimit);
                        if (itemTipsModel.curAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemTipsModel.curAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = conditionRedColor;
                        }
                        break;
                    case 2:
                        break;
                }
            }
        }
        private void RefreshUseCnt(int id)
        {
            if (itemTipsModel.curAttrData == null || id != itemTipsModel.curAttrData.itemId)
System/KnapSack/Logic/EquipTip.cs
@@ -34,6 +34,11 @@
        Text dateText;
        [SerializeField]
        ItemCell itemCell;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        #endregion
        #region MidUI
@@ -148,6 +153,19 @@
        {
            bottomPart.gameObject.SetActive(false);
            StartCoroutine(SetScrollSize());
            StartCoroutine(CheckPlayerIsReborn());
        }
        IEnumerator CheckPlayerIsReborn()
        {
            int questTimes = 0;
            while (questTimes < 5)
            {
                DesignDebug.Log("CheckPlayerIsReborn:开始");
                yield return new WaitForSeconds(1);
                questTimes += 1;
                DesignDebug.Log("CheckPlayerIsReborn:结束");
            }
        }
        IEnumerator SetScrollSize()
@@ -210,42 +228,8 @@
            equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
            equipScoreValue.text = itemAttrData.score.ToString();
            RefreshNeedPointUI();
            needLvDes.text = Language.Get("KnapS110");
            if (itemAttrData.itemConfig.UseLV > 1)
            {
                needLvDes.gameObject.SetActive(true);
                needLvValue.gameObject.SetActive(true);
            }
            else
            {
                needLvDes.gameObject.SetActive(false);
                needLvValue.gameObject.SetActive(false);
            }
            if(itemAttrData.isHavePutLimit)
            {
                needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                {
                    needLvDes.color = conditionColor;
                    needLvValue.color = conditionColor;
                }
                else
                {
                    needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                    needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                }
            }
            else
            {
                needLvValue.text = 1.ToString();
                needLvDes.color = conditionColor;
                needLvValue.color = conditionColor;
            }
            CheckUselimit();
            if (itemAttrData.itemConfig.ExpireTime > 0)
            {
@@ -302,6 +286,87 @@
            #endregion
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            needLvValue.gameObject.SetActive(false);
            needLvDes.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for(int i = 0; i < needPointTextlist.Count;i++)
            {
                needPointTextlist[i].gameObject.SetActive(false);
                needPointNumlist[i].gameObject.SetActive(false);
            }
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemAttrData.itemConfig.UseLV > 1)
                        {
                            needLvValue.gameObject.SetActive(true);
                            needLvDes.gameObject.SetActive(true);
                        }
                        needLvDes.text = Language.Get("KnapS110");
                        if (itemAttrData.isHavePutLimit)
                        {
                            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                            if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                            {
                                needLvValue.color = conditionColor;
                                needLvDes.color = conditionColor;
                            }
                            else
                            {
                                needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                                needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                            }
                        }
                        else
                        {
                            needLvValue.text = 1.ToString();
                            needLvDes.color = conditionColor;
                            needLvValue.color = conditionColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemAttrData.itemConfig.RealmLimit);
                        if (itemAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = UIHelper.GetUIColor(TextColType.Red);
                        }
                        break;
                    case 2:
                        RefreshNeedPointUI();
                        break;
                }
            }
        }
        private void OnDisable()
        {
            suirAttrCtrl.OnRefreshCell -= RefreshSuitProCell;
System/KnapSack/Logic/ItemInfoWin.cs
@@ -19,9 +19,15 @@
        Button closeBtn;
        [SerializeField]
        Text dateText;
        [SerializeField]
        Text conditionText;
        [SerializeField] Text needLvText;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        Text itemTypeText;
@@ -136,31 +142,7 @@
                itemTipsModel.curAttrData.guid, itemTipsModel.curAttrData.packType, false);
            itemCell.Init(cellModel);
            if(itemTipsModel.curAttrData.itemConfig.UseLV > 1)
            {
                conditionText.gameObject.SetActive(true);
                needLvText.gameObject.SetActive(true);
            }
            else
            {
                conditionText.gameObject.SetActive(false);
                needLvText.gameObject.SetActive(false);
            }
            conditionText.text = Language.Get("KnapS110");
            needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
            if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
            {
                conditionText.color = conditionColor;
                needLvText.color = conditionColor;
            }
            else
            {
                conditionText.color = conditionRedColor;
                needLvText.color = conditionRedColor;
            }
            CheckUselimit();
            if(itemTipsModel.curAttrData.itemConfig.Effect1 != 215)
            {
                itemDesText.text = itemTipsModel.curAttrData.GetAllInfoDes();
@@ -217,6 +199,73 @@
            }
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemTipsModel.curAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            conditionText.gameObject.SetActive(false);
            needLvText.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch(uselimits[i])
                {
                    case 0:
                        if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
                        {
                            conditionText.gameObject.SetActive(true);
                            needLvText.gameObject.SetActive(true);
                        }
                        conditionText.text = Language.Get("KnapS110");
                        needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
                        if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
                        {
                            conditionText.color = conditionColor;
                            needLvText.color = conditionColor;
                        }
                        else
                        {
                            conditionText.color = conditionRedColor;
                            needLvText.color = conditionRedColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemTipsModel.curAttrData.itemConfig.RealmLimit);
                        if(itemTipsModel.curAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                          if(realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemTipsModel.curAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = conditionRedColor;
                        }
                        break;
                    case 2:
                        break;
                }
            }
        }
        private void RefreshUseCnt(int id)
        {
System/KnapSack/Logic/ItemTipsModel.cs
@@ -1561,6 +1561,9 @@
        }
        #endregion
        #region 设置物品使用的限制条件
        #endregion
    }
    public class ItemAttrData
System/KnapSack/Logic/PackSendQuestMgr.cs
@@ -121,28 +121,51 @@
                }
                else
                {
                    if(sendItemConfig.EquipPlace != (int)RoleEquipType.retWing)
                    {
                        CheckPutOnNeed();
                    }
                    else
                    {
                        CheckPutOnRealm();
                    }
                    CheckEquipUselimit(sendItemConfig);
                }
            }
            else
            {
                if (sendItemConfig.EquipPlace != (int)RoleEquipType.retWing)
                CheckEquipUselimit(sendItemConfig);
            }
        }
        public bool CheckEquipUselimit(ItemConfig config)
        {
            int[] uselimits = config.UseCondiType;
            if (uselimits == null || uselimits.Length < 1)
            {
                CheckPutOnPlace();
                return true;
            }
            bool isCanPut = true;
            for(int i = 0; i < uselimits.Length; i++)
            {
                switch(uselimits[i])
                {
                    CheckPutOnNeed();
                }
                else
                {
                    CheckPutOnRealm();
                    case 0:
                        int playerLv = PlayerDatas.Instance.baseData.LV;
                        if (playerLv < config.UseLV)
                        {
                            isCanPut = false;
                            int remainLv = config.UseLV - playerLv;
                            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("EquipWinLevelLimit", config.UseLV, remainLv));
                        }
                        break;
                    case 1:
                        isCanPut = CheckPutOnRealm(config);
                        break;
                    case 2:
                        isCanPut = CheckPutOnNeed();
                        break;
                }
            }
            if(isCanPut)
            {
                CheckPutOnPlace();
            }
            return isCanPut;
        }
        /// <summary>
@@ -155,202 +178,188 @@
        private Dictionary<AttrEnum, int> sumNeedlist = new Dictionary<AttrEnum, int>();
        private float sumOffsetPoint = 0;
        private int sumNeedPoint = 0;
        private void CheckPutOnNeed()
        private bool CheckPutOnNeed()
        {
            int playerJob = PlayerDatas.Instance.baseData.Job;
            if (playerJob != Math.Floor((double)sendItemConfig.JobLimit / 100) && sendItemConfig.JobLimit != 0)
            {
                SysNotifyMgr.Instance.ShowTip("GeRen_lhs_31379");
                return;
                return false;
            }
            int jobRank = sendItemConfig.JobLimit % 10;
            int playerLv = PlayerDatas.Instance.baseData.LV;
            if (playerLv < sendItemConfig.UseLV)
            offsetConditionStr.Length = 0;
            sumOffsetlist.Clear();
            sumNeedlist.Clear();
            sumOffsetPoint = 0;
            sumNeedPoint = 0;
            needConditionStr.Length = 0;
            upgradConditionStr.Length = 0;
            float offset = 0;
            if (sendItemConfig.LimitSTR != 0)
            {
                int remainLv = sendItemConfig.UseLV - playerLv;
                ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("EquipWinLevelLimit", sendItemConfig.UseLV,remainLv));
            }
            else
            {
                offsetConditionStr.Length = 0;
                sumOffsetlist.Clear();
                sumNeedlist.Clear();
                sumOffsetPoint = 0;
                sumNeedPoint = 0;
                needConditionStr.Length = 0;
                upgradConditionStr.Length = 0;
                float offset = 0;
                if (sendItemConfig.LimitSTR != 0)
                offset = sendItemConfig.LimitSTR - UIHelper.GetPropertyMapPlayerData(AttrEnum.POWER);
                if (offset > 0)
                {
                    offset = sendItemConfig.LimitSTR - UIHelper.GetPropertyMapPlayerData(AttrEnum.POWER);
                    if (offset > 0)
                    if (offsetConditionStr.Length > 0)
                    {
                        if (offsetConditionStr.Length > 0)
                        {
                            offsetConditionStr.Append("\n" + Language.Get("KnapS136", offset));
                        }
                        else
                        {
                            offsetConditionStr.Append(Language.Get("KnapS136", offset));
                        }
                        if(upgradConditionStr.Length > 0)
                        {
                            upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS136", sendItemConfig.LimitSTR), offset));
                        }
                        else
                        {
                            upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS136", sendItemConfig.LimitSTR), offset));
                        }
                        sumOffsetPoint += offset;
                        sumNeedPoint += sendItemConfig.LimitSTR;
                        sumOffsetlist.Add(AttrEnum.POWER, offset);
                    }
                    sumNeedlist.Add(AttrEnum.POWER, sendItemConfig.LimitSTR);
                    if (needConditionStr.Length > 0)
                    {
                        needConditionStr.Append("\n" + Language.Get("KnapS136", sendItemConfig.LimitSTR));
                        offsetConditionStr.Append("\n" + Language.Get("KnapS136", offset));
                    }
                    else
                    {
                        needConditionStr.Append(Language.Get("KnapS136", sendItemConfig.LimitSTR));
                        offsetConditionStr.Append(Language.Get("KnapS136", offset));
                    }
                    if (upgradConditionStr.Length > 0)
                    {
                        upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS136", sendItemConfig.LimitSTR), offset));
                    }
                    else
                    {
                        upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS136", sendItemConfig.LimitSTR), offset));
                    }
                    sumOffsetPoint += offset;
                    sumNeedPoint += sendItemConfig.LimitSTR;
                    sumOffsetlist.Add(AttrEnum.POWER, offset);
                }
                if (sendItemConfig.LimitPHY != 0)
                sumNeedlist.Add(AttrEnum.POWER, sendItemConfig.LimitSTR);
                if (needConditionStr.Length > 0)
                {
                    offset = sendItemConfig.LimitPHY - UIHelper.GetPropertyMapPlayerData(AttrEnum.AGILITY);
                    if (offset > 0)
                    {
                        if (offsetConditionStr.Length > 0)
                        {
                            offsetConditionStr.Append("\n" + Language.Get("KnapS135", offset));
                        }
                        else
                        {
                            offsetConditionStr.Append(Language.Get("KnapS135", offset));
                        }
                        if (upgradConditionStr.Length > 0)
                        {
                            upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS135", sendItemConfig.LimitPHY), offset));
                        }
                        else
                        {
                            upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS135", sendItemConfig.LimitPHY), offset));
                        }
                        sumOffsetPoint += offset;
                        sumNeedPoint += sendItemConfig.LimitPHY;
                        sumOffsetlist.Add(AttrEnum.AGILITY, offset);
                    }
                    sumNeedlist.Add(AttrEnum.AGILITY, sendItemConfig.LimitPHY);
                    if (needConditionStr.Length > 0)
                    {
                        needConditionStr.Append("\n" + Language.Get("KnapS135", sendItemConfig.LimitPHY));
                    }
                    else
                    {
                        needConditionStr.Append(Language.Get("KnapS135", sendItemConfig.LimitPHY));
                    }
                }
                if (sendItemConfig.LimitPNE != 0)
                {
                    offset = sendItemConfig.LimitPNE - UIHelper.GetPropertyMapPlayerData(AttrEnum.MENTALITY);
                    if (offset > 0)
                    {
                        if (offsetConditionStr.Length > 0)
                        {
                            offsetConditionStr.Append("\n" + Language.Get("KnapS137", offset));
                        }
                        else
                        {
                            offsetConditionStr.Append(Language.Get("KnapS137", offset));
                        }
                        if (upgradConditionStr.Length > 0)
                        {
                            upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS137", sendItemConfig.LimitPNE), offset));
                        }
                        else
                        {
                            upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS137", sendItemConfig.LimitPNE), offset));
                        }
                        sumOffsetPoint += offset;
                        sumOffsetlist.Add(AttrEnum.MENTALITY, offset);
                        sumNeedPoint += sendItemConfig.LimitPNE;
                    }
                    sumNeedlist.Add(AttrEnum.MENTALITY, sendItemConfig.LimitPNE);
                    if (needConditionStr.Length > 0)
                    {
                        needConditionStr.Append("\n" + Language.Get("KnapS137", sendItemConfig.LimitPNE));
                    }
                    else
                    {
                        needConditionStr.Append(Language.Get("KnapS137", sendItemConfig.LimitPNE));
                    }
                }
                if (offsetConditionStr.Length > 0)
                {
                    if (sumOffsetPoint <= PlayerDatas.Instance.baseData.FreePoint)
                    {
                        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS132", offsetConditionStr.ToString()), (bool isOk) => {
                            if (isOk)
                            {
                                if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.AddPoint))
                                {
                                    foreach (var key in sumOffsetlist.Keys)
                                    {
                                        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshFreePoint;
                                        rolePointModel.SendAddPoint((int)key, (int)sumOffsetlist[key]);
                                    }
                                }
                                else
                                {
                                    FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.AddPoint);
                                }
                            }
                        });
                    }
                    else
                    {
                        FuncConfigConfig addPointFunc = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("LVUPAddPoint");
                        int[] rankValue = ConfigParse.GetMultipleStr<int>(addPointFunc.Numerical1);
                        if (addPointFunc != null)
                        {
                            double needUpgradLV = System.Math.Ceiling((sumOffsetPoint - PlayerDatas.Instance.baseData.FreePoint) / rankValue[jobRank - 1]);
                            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS134",upgradConditionStr.ToString(), needUpgradLV.ToString()));
                        }
                    }
                    needConditionStr.Append("\n" + Language.Get("KnapS136", sendItemConfig.LimitSTR));
                }
                else
                {
                    CheckPutOnPlace();
                    needConditionStr.Append(Language.Get("KnapS136", sendItemConfig.LimitSTR));
                }
            }
            if (sendItemConfig.LimitPHY != 0)
            {
                offset = sendItemConfig.LimitPHY - UIHelper.GetPropertyMapPlayerData(AttrEnum.AGILITY);
                if (offset > 0)
                {
                    if (offsetConditionStr.Length > 0)
                    {
                        offsetConditionStr.Append("\n" + Language.Get("KnapS135", offset));
                    }
                    else
                    {
                        offsetConditionStr.Append(Language.Get("KnapS135", offset));
                    }
                    if (upgradConditionStr.Length > 0)
                    {
                        upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS135", sendItemConfig.LimitPHY), offset));
                    }
                    else
                    {
                        upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS135", sendItemConfig.LimitPHY), offset));
                    }
                    sumOffsetPoint += offset;
                    sumNeedPoint += sendItemConfig.LimitPHY;
                    sumOffsetlist.Add(AttrEnum.AGILITY, offset);
                }
                sumNeedlist.Add(AttrEnum.AGILITY, sendItemConfig.LimitPHY);
                if (needConditionStr.Length > 0)
                {
                    needConditionStr.Append("\n" + Language.Get("KnapS135", sendItemConfig.LimitPHY));
                }
                else
                {
                    needConditionStr.Append(Language.Get("KnapS135", sendItemConfig.LimitPHY));
                }
            }
            if (sendItemConfig.LimitPNE != 0)
            {
                offset = sendItemConfig.LimitPNE - UIHelper.GetPropertyMapPlayerData(AttrEnum.MENTALITY);
                if (offset > 0)
                {
                    if (offsetConditionStr.Length > 0)
                    {
                        offsetConditionStr.Append("\n" + Language.Get("KnapS137", offset));
                    }
                    else
                    {
                        offsetConditionStr.Append(Language.Get("KnapS137", offset));
                    }
                    if (upgradConditionStr.Length > 0)
                    {
                        upgradConditionStr.Append("\n" + Language.Get("KnapS141", Language.Get("KnapS137", sendItemConfig.LimitPNE), offset));
                    }
                    else
                    {
                        upgradConditionStr.Append(Language.Get("KnapS141", Language.Get("KnapS137", sendItemConfig.LimitPNE), offset));
                    }
                    sumOffsetPoint += offset;
                    sumOffsetlist.Add(AttrEnum.MENTALITY, offset);
                    sumNeedPoint += sendItemConfig.LimitPNE;
                }
                sumNeedlist.Add(AttrEnum.MENTALITY, sendItemConfig.LimitPNE);
                if (needConditionStr.Length > 0)
                {
                    needConditionStr.Append("\n" + Language.Get("KnapS137", sendItemConfig.LimitPNE));
                }
                else
                {
                    needConditionStr.Append(Language.Get("KnapS137", sendItemConfig.LimitPNE));
                }
            }
            if (offsetConditionStr.Length > 0)
            {
                if (sumOffsetPoint <= PlayerDatas.Instance.baseData.FreePoint)
                {
                    ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS132", offsetConditionStr.ToString()), (bool isOk) => {
                        if (isOk)
                        {
                            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.AddPoint))
                            {
                                foreach (var key in sumOffsetlist.Keys)
                                {
                                    PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshFreePoint;
                                    rolePointModel.SendAddPoint((int)key, (int)sumOffsetlist[key]);
                                }
                            }
                            else
                            {
                                FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.AddPoint);
                            }
                        }
                    });
                }
                else
                {
                    FuncConfigConfig addPointFunc = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("LVUPAddPoint");
                    int[] rankValue = ConfigParse.GetMultipleStr<int>(addPointFunc.Numerical1);
                    if (addPointFunc != null)
                    {
                        double needUpgradLV = System.Math.Ceiling((sumOffsetPoint - PlayerDatas.Instance.baseData.FreePoint) / rankValue[jobRank - 1]);
                        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS134", upgradConditionStr.ToString(), needUpgradLV.ToString()));
                    }
                }
                return false;
            }
            return true;
        }
        private StringBuilder curRealmImgStr = new StringBuilder();
        private StringBuilder needRealmImgStr = new StringBuilder();
        private void CheckPutOnRealm()
        private bool CheckPutOnRealm(ItemConfig config)
        {
            curRealmImgStr.Length = 0;
            needRealmImgStr.Length = 0;
            var _realmLv = 1;
            GeneralConfig.Instance.wingEquipLimits.TryGetValue(sendItemConfig.ID, out _realmLv);
            var _realmLv = config.RealmLimit;
            var needRealmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(_realmLv);
            var curRealmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(PlayerDatas.Instance.baseData.realmLevel);
@@ -365,12 +374,10 @@
                {
                    curRealmImgStr.Append(Language.Get("Market_Text_33"));
                }
                ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS142",needRealmImgStr.ToString(),curRealmImgStr.ToString()));
                ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("KnapS142",needRealmImgStr.ToString(),curRealmImgStr.ToString()));
                return false;
            }
            else
            {
                CheckPutOnPlace();
            }
            return true;
        }
        private void RefreshFreePoint(PlayerDataRefresh refreshType)
@@ -677,12 +684,7 @@
            if(playerPack.CheckIsDrugById(useItemModel.itemInfo.ItemID))
            {
                if (PlayerDatas.Instance.baseData.LV < useItemModel.chinItemModel.UseLV)
                {
                    MessageWin.Inst.ShowFixedTip(Language.Get("MakeUseItem101", useItemModel.chinItemModel.UseLV));
                }
                else
                if(CheckItemUselimit(useItemModel.chinItemModel))
                {
                    WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.MakeDrug);
                }
@@ -731,14 +733,38 @@
            }
        }
        public void CheckUseCondition(ItemModel itemModel)
        public bool CheckItemUselimit(ItemConfig config)
        {
            if (PlayerDatas.Instance.baseData.LV < itemModel.chinItemModel.UseLV)
            int[] uselimits = config.UseCondiType;
            if (uselimits == null) return true;
            for (int i = 0; i < uselimits.Length; i++)
            {
                MessageWin.Inst.ShowFixedTip(Language.Get("MakeUseItem101", itemModel.chinItemModel.UseLV));
                return;
                switch (uselimits[i])
                {
                    case 0:
                        int playerLv = PlayerDatas.Instance.baseData.LV;
                        if (playerLv < config.UseLV)
                        {
                            MessageWin.Inst.ShowFixedTip(Language.Get("MakeUseItem101", useItemModel.chinItemModel.UseLV));
                            return false;
                        }
                        break;
                    case 1:
                         return CheckPutOnRealm(config);
                }
            }
            return true;
        }
        public void CheckUseCondition(ItemModel itemModel)
        {
            if(!CheckItemUselimit(itemModel.chinItemModel))
            {
                return;
            }
            if(itemModel.chinItemModel.Type == 59)
            {
                playerPack.SetWashAttrPointModel(itemModel.itemInfo.ItemGUID);
System/KnapSack/Logic/UnionWarehouseEquipTip.cs
@@ -32,6 +32,10 @@
        Text dateText;
        [SerializeField]
        ItemCell itemCell;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        #endregion
        #region MidUI
@@ -178,42 +182,7 @@
            itemCell.Init(cellModel);
            equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
            equipScoreValue.text = itemAttrData.score.ToString();
            RefreshNeedPointUI();
            needLvDes.text = Language.Get("KnapS110");
            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
            if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
            {
                needLvDes.gameObject.SetActive(true);
                needLvValue.gameObject.SetActive(true);
            }
            else
            {
                needLvDes.gameObject.SetActive(false);
                needLvValue.gameObject.SetActive(false);
            }
            if (itemAttrData.isHavePutLimit)
            {
                needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                {
                    needLvDes.color = conditionColor;
                    needLvValue.color = conditionColor;
                }
                else
                {
                    needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                    needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                }
            }
            else
            {
                needLvValue.text = 1.ToString();
                needLvDes.color = conditionColor;
                needLvValue.color = conditionColor;
            }
            CheckUselimit();
            if (itemAttrData.itemConfig.ExpireTime > 0)
            {
                List<int> itemEffectTime = itemAttrData.GetUseDataModel((int)ItemUseDataKey.Def_IudetCreateTime);
@@ -274,6 +243,87 @@
            KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct -= RefreshRemainTime;
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            needLvValue.gameObject.SetActive(false);
            needLvDes.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < needPointTextlist.Count; i++)
            {
                needPointTextlist[i].gameObject.SetActive(false);
                needPointNumlist[i].gameObject.SetActive(false);
            }
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemAttrData.itemConfig.UseLV > 1)
                        {
                            needLvValue.gameObject.SetActive(true);
                            needLvDes.gameObject.SetActive(true);
                        }
                        needLvDes.text = Language.Get("KnapS110");
                        if (itemAttrData.isHavePutLimit)
                        {
                            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                            if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                            {
                                needLvValue.color = conditionColor;
                                needLvDes.color = conditionColor;
                            }
                            else
                            {
                                needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                                needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                            }
                        }
                        else
                        {
                            needLvValue.text = 1.ToString();
                            needLvDes.color = conditionColor;
                            needLvValue.color = conditionColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemAttrData.itemConfig.RealmLimit);
                        if (itemAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = UIHelper.GetUIColor(TextColType.Red);
                        }
                        break;
                    case 2:
                        RefreshNeedPointUI();
                        break;
                }
            }
        }
        private void RefreshRemainTime(string guid)
        {
            if (guid != itemAttrData.guid)
System/KnapSack/Logic/WingsTip.cs
@@ -25,7 +25,7 @@
        [SerializeField]
        Text conditionText;
        [SerializeField]
        Text conditionValueText;
        Image conditionValueText;
        [SerializeField]
        Text dateText;
        [SerializeField]
@@ -173,29 +173,27 @@
            {
                conditionText.gameObject.SetActive(true);
                conditionValueText.gameObject.SetActive(true);
                var _realmLv = 1;
                GeneralConfig.Instance.wingEquipLimits.TryGetValue(itemAttrData.itemConfig.ID, out _realmLv);
                var _realmLv = itemAttrData.itemConfig.RealmLimit;
                var _realmCfg = ConfigManager.Instance.GetTemplate<RealmConfig>(_realmLv);
                if (PlayerDatas.Instance.baseData.realmLevel < _realmLv)
                {
                    conditionText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, Language.Get("RealmLimit1"));
                    if (_realmLv != 0)
                    {
                        conditionValueText.text = _realmCfg.Name;
                        conditionValueText.SetSprite(_realmCfg.Img);
                    }
                    else
                    {
                        conditionText.gameObject.SetActive(false);
                        conditionValueText.gameObject.SetActive(false);
                    }
                    conditionValueText.color = UIHelper.GetUIColor(TextColType.Red);
                }
                else
                {
                    if(_realmLv != 0)
                    {
                        conditionText.text = StringUtility.Contact("<color=#FFF4CDFF>", Language.Get("RealmLimit1"), "</color>");
                        conditionValueText.text = StringUtility.Contact("<color=#FFF4CDFF>",_realmCfg.Name, "</color>");
                        conditionValueText.SetSprite(_realmCfg.Img);
                    }
                    else
                    {
System/Message/RichTableEvent.cs
@@ -97,6 +97,15 @@
                                            {
                                                itemName = StringUtility.Contact("[", itemName, "]");
                                            }
                                            if (_dict != null && _dict.ContainsKey("count"))
                                            {
                                                var count = 0;
                                                int.TryParse(_dict["count"], out count);
                                                if (count > 0)
                                                {
                                                    itemName = StringUtility.Contact(itemName, "x", count);
                                                }
                                            }
                                            return GetTextColorByItemColor(itemName, _itemColor, _dict);
                                        }
                                        else
System/Message/WordAnalysis.cs
@@ -137,6 +137,11 @@
                        displayDic.Add(split_value, array[1].ToLower());
                    }
                    break;
                case "count":
                    {
                        displayDic.Add(split_value, array[1].ToLower());
                    }
                    break;
                default:
                    {
                        displayDic.Add(split_value, array[1]);
System/Pet/PetAttributeMethods.cs
@@ -343,15 +343,13 @@
            }
            else
            {
                int _MinNunber = 0;
                int _MaxNumber = 0;
                foreach (var key in petmodel._DicPetBack.Keys)
                {
                    PetClassCostConfig _tagPetClass = PetClassCostConfig.GetPetIdAndRank(key, petmodel._DicPetBack[key].PetClass);
                    _MinNunber += _tagPetClass.AtkAdd;
                    _MaxNumber += _tagPetClass.AtkAdd;
                }
                allAttackText.text = /*_MinNunber.ToString() + "-" +*/ ((int)(_MaxNumber + ridingModel.GetAllPetAddLife())).ToString();
                allAttackText.text =((int)(_MaxNumber + ridingModel.GetAllPetAddAttack())).ToString();
                int sumFight = 0;
                int InitFightPower = 0;
                foreach (var petId in petmodel._DicPetBack.Keys)
System/RoleParticulars/ViewPetHorseStoneWin.cs
@@ -74,6 +74,7 @@
            m_Controller.Refresh();
            if (petHorseStones != null)
            {
                petHorseStones.Sort(Compare);
                for (int i = 0; i < petHorseStones.Count; i++)
                {
                    m_Controller.AddCell(ScrollerDataType.Header, i);
@@ -92,6 +93,11 @@
            }
        }
        int Compare(RoleParticularModel.PetHorseStone x, RoleParticularModel.PetHorseStone y)
        {
            return -x.item.CompareTo(y.item);
        }
    }
}
System/RolePromote/RolePromoteModel.cs
@@ -130,6 +130,8 @@
        BlastFurnaceModel blastFurnaceModel { get { return ModelCenter.Instance.GetModel<BlastFurnaceModel>(); } }
        RoleModel roleModel { get { return ModelCenter.Instance.GetModel<RoleModel>(); } }
        #region 配置
        public Dictionary<int, int> wingLv2GenerDict = new Dictionary<int, int>();
        public Dictionary<int, List<RoleStrongerConfig>> roleStrongerDic = new Dictionary<int, List<RoleStrongerConfig>>();
@@ -758,7 +760,7 @@
                _id == methodData.fairyHeartRedpoint.id ||
                _id == realmModel.realmRedpoint.id ||
                _id == gemModel.gemTagRedPoint.id ||
                _id == blastFurnaceModel.blastRedpoint.id ||
                _id == roleModel.MakeDrugRedpoint.id ||
                IsTreasureRedpoint(_id))
            {
                CheckPromoteDetailEffect();
@@ -832,7 +834,7 @@
                case PromoteDetailType.FairyHeart:
                    return ModelCenter.Instance.GetModel<PlayerMethodData>().fairyHeartRedpoint.state == RedPointState.Simple;
                case PromoteDetailType.BlastFurnace:
                    return blastFurnaceModel.blastRedpoint.state == RedPointState.Simple;
                    return roleModel.MakeDrugRedpoint.state == RedPointState.Simple;
                case PromoteDetailType.max:
                    break;
            }
System/Rune/RuneModel.cs
@@ -4,6 +4,7 @@
using TableConfig;
using System;
using System.Text;
using System.Linq;
namespace Snxxz.UI
{
@@ -54,6 +55,7 @@
        public Dictionary<int, float> runeAttrAdditionDic = new Dictionary<int, float>();
        public Dictionary<int, float> runeExpDic = new Dictionary<int, float>();
        public Dictionary<int, float> runeEliteAdditonDic = new Dictionary<int, float>();
        Dictionary<int, int> runeQualityMaxLevel;
        public int[] runeUnlockArray { get; private set; }
        public float runeExpAddition { get; private set; }
        public string runeExpFormula { get; private set; }
@@ -83,7 +85,12 @@
                    cfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("RunePackageNum");
                    runePackMaxNum = int.Parse(cfg.Numerical1);
                    for (int i = 1; i < RuneMaxLevel; i++)
                    var config = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("RuneMaxLV");
                    runeQualityMaxLevel = ConfigParse.GetDic<int, int>(config.Numerical1);
                    var maxlevel = runeQualityMaxLevel != null ? runeQualityMaxLevel.Values.Last() : 0;
                    for (int i = 1; i < maxlevel; i++)
                    {
                        Equation.Instance.Clear();
                        Equation.Instance.AddKeyValue(replaceValStr, i + 1);
@@ -106,6 +113,26 @@
        private static StringBuilder _textBuilder = new StringBuilder();
        static readonly string replaceValStr = "level";
        public int GetRuneMaxLevel(int _itemColor)
        {
            if (runeQualityMaxLevel != null && runeQualityMaxLevel.ContainsKey(_itemColor))
            {
                return runeQualityMaxLevel[_itemColor];
            }
            if (runeQualityMaxLevel != null)
            {
                return runeQualityMaxLevel.Values.Last();
            }
            return 0;
        }
        public int GetRuneMaxLevelByItem(int _itemId)
        {
            var config = ConfigManager.Instance.GetTemplate<ItemConfig>(_itemId);
            return config == null ? 0 : GetRuneMaxLevel(config.ItemColor);
        }
        public string GetRuneAttrStr(int id, int level)
        {
            _textBuilder.Length = 0;
@@ -172,7 +199,8 @@
        public int GetRuneNeedExp(int id, int level)
        {
            float _levelUpExp = 0;
            if (level < RuneMaxLevel)
            ItemConfig _tagChinModel = ConfigManager.Instance.GetTemplate<ItemConfig>(id);
            if (level < GetRuneMaxLevel(_tagChinModel.ItemColor))
            {
                float _result = 0;
                if (runeExpResultDict.ContainsKey(level + 1))
@@ -187,7 +215,6 @@
                    runeExpResultDict.Add(level + 1, _result);
                }
                RuneConfig cfg = ConfigManager.Instance.GetTemplate<RuneConfig>(id);
                ItemConfig _tagChinModel = ConfigManager.Instance.GetTemplate<ItemConfig>(id);
                if (cfg.AttrType.Length > 1)
                {
                    _levelUpExp = _result * runeExpDic[_tagChinModel.ItemColor] * runeExpAddition;
@@ -242,7 +269,8 @@
        public int GetRuneLevelByExp(int id, float _exp)
        {
            float _totalExp = 0;
            for (int i = 1; i < RuneMaxLevel; i++)
            var maxlevel = runeQualityMaxLevel != null ? runeQualityMaxLevel.Values.Last() : 0;
            for (int i = 1; i < maxlevel; i++)
            {
                _totalExp += GetRuneNeedExp(id, i);
                if (_totalExp > _exp)
@@ -250,7 +278,7 @@
                    return i;
                }
            }
            return RuneMaxLevel;
            return maxlevel;
        }
        #endregion
        public const int RUNE_REDPOINT_INTERVAL = 100;
@@ -353,7 +381,7 @@
            {
                var _data = GetHoleRune(i);
                if (_data != null && RuneSplinters >= GetRuneNeedExp(_data.id, _data.lv)
                       && _data.lv < RuneMaxLevel)
                       && _data.lv < GetRuneMaxLevelByItem(_data.id))
                {
                    runelevelUpSorts.Add(i);
                }
@@ -408,7 +436,7 @@
            if (runeData != null)
            {
                if (RuneSplinters > GetRuneNeedExp(runeData.id, runeData.lv)
                    && runeData.lv < RuneMaxLevel)
                    && runeData.lv < GetRuneMaxLevelByItem(runeData.id))
                {
                    return true;
                }
@@ -946,16 +974,7 @@
            }
            return Cnt;
        }
        private int rune_max_level = 0;
        public int RuneMaxLevel {
            get {
                if (rune_max_level == 0)
                {
                    rune_max_level = int.Parse(ConfigManager.Instance.GetTemplate<FuncConfigConfig>("RuneMaxLV").Numerical1);
                }
                return rune_max_level;
            }
        }
        public void ClearRuneData()
        {
            runePackData.Clear();
System/Rune/RuneMosaicWin.cs
@@ -264,7 +264,7 @@
            runeLevelUpAttr1.text = StringUtility.Contact(_propertyCfg.Name, "  ", "+", UIHelper.ReplacePercentage(_propertyValue, _propertyCfg.ISPercentage),
                _propertyCfg.ISPercentage == 1 ? "%" : string.Empty);
            bool _isRuneMaxLv = data.lv >= model.RuneMaxLevel;
            bool _isRuneMaxLv = data.lv >= model.GetRuneMaxLevelByItem(data.id);
            runeLevelUpAttrNum1.gameObject.SetActive(!_isRuneMaxLv);
            if (!_isRuneMaxLv)
            {
@@ -382,7 +382,7 @@
            }
            var _runeCfg = ConfigManager.Instance.GetTemplate<RuneConfig>(data.id);
            var _itemCfg = ConfigManager.Instance.GetTemplate<ItemConfig>(data.id);
            if (data.lv >= model.RuneMaxLevel)
            if (data.lv >= model.GetRuneMaxLevelByItem(data.id))
            {
                return;
            }
System/Sound/SoundUtility.cs
@@ -161,11 +161,11 @@
            {
                var audio = audios[audioIndex];
                SoundPlayer.Instance.PlayAudio(_audioSource, audio);
                stateFootAudioLastPlayTimes[stateInt] = DateTime.Now;
                audioIndex++;
            }
            if (audioIndex > audios.Length)
            if (audioIndex >= audios.Length)
            {
                audioIndex = 0;
            }
System/Store/Logic/BuyBoxInfoWin.cs
@@ -4,6 +4,7 @@
using Snxxz.UI;
using System.Collections.Generic;
using System;
using TableConfig;
namespace Snxxz.UI
{
@@ -24,6 +25,9 @@
        Text conditionText;
        [SerializeField]
        Text needLvText;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        Text itemTypeText;
@@ -150,31 +154,31 @@
            ItemCellModel cellModel = new ItemCellModel(itemTipsModel.curAttrData.itemId, itemTipsModel.curAttrData.isPreview, (ulong)itemTipsModel.curAttrData.count,itemTipsModel.curAttrData.isBind
                ,itemTipsModel.curAttrData.guid, itemTipsModel.curAttrData.packType,false);
            itemCell.Init(cellModel);
            conditionText.text = Language.Get("KnapS110");
            needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
            if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
            conditionText.gameObject.SetActive(false);
            needLvText.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            ChestsConfig chestsConfig = ConfigManager.Instance.GetTemplate<ChestsConfig>(itemTipsModel.curAttrData.itemId);
            if (chestsConfig != null && chestsConfig.OpenMoney > 0)
            {
                conditionText.gameObject.SetActive(true);
                needLvText.gameObject.SetActive(true);
                ulong haveMoney = UIHelper.GetMoneyCnt(1);
                if (haveMoney >= (ulong)chestsConfig.OpenMoney)
                {
                    conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Green, chestsConfig.OpenMoney.ToString()));
                }
                else
                {
                    conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Red, chestsConfig.OpenMoney.ToString()));
                }
            }
            else
            {
                conditionText.gameObject.SetActive(false);
                needLvText.gameObject.SetActive(false);
                CheckUselimit();
            }
            if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
            {
                conditionText.color = conditionColor;
                needLvText.color = conditionColor;
            }
            else
            {
                conditionText.color = conditionRedColor;
                needLvText.color = conditionRedColor;
            }
            itemDesText.text = itemTipsModel.curAttrData.itemConfig.Description;
            if (itemTipsModel.curAttrData.itemConfig.ExpireTime > 0)
@@ -187,6 +191,69 @@
            }
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemTipsModel.curAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
                        {
                            conditionText.gameObject.SetActive(true);
                            needLvText.gameObject.SetActive(true);
                        }
                        conditionText.text = Language.Get("KnapS110");
                        needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
                        if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
                        {
                            conditionText.color = conditionColor;
                            needLvText.color = conditionColor;
                        }
                        else
                        {
                            conditionText.color = conditionRedColor;
                            needLvText.color = conditionRedColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemTipsModel.curAttrData.itemConfig.RealmLimit);
                        if (itemTipsModel.curAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemTipsModel.curAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = conditionRedColor;
                        }
                        break;
                    case 2:
                        break;
                }
            }
        }
        private void SetDateLimitUI(double time)
        {
            dateText.gameObject.SetActive(true);
System/Store/Logic/BuyEquipTip.cs
@@ -32,6 +32,9 @@
        Text dateText;
        [SerializeField]
        ItemCell itemCell;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        #endregion
        #region MidUI
@@ -217,41 +220,7 @@
            itemCell.Init(cellModel);
            equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1");
            equipScoreValue.text = itemAttrData.score.ToString();
            RefreshNeedPointUI();
            needLvDes.text = Language.Get("KnapS110");
            if (itemAttrData.itemConfig.UseLV > 1)
            {
                needLvDes.gameObject.SetActive(true);
                needLvValue.gameObject.SetActive(true);
            }
            else
            {
                needLvDes.gameObject.SetActive(false);
                needLvValue.gameObject.SetActive(false);
            }
            if (itemAttrData.isHavePutLimit)
            {
                needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                {
                    needLvDes.color = conditionColor;
                    needLvValue.color = conditionColor;
                }
                else
                {
                    needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                    needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                }
            }
            else
            {
                needLvValue.text = 1.ToString();
                needLvDes.color = conditionColor;
                needLvValue.color = conditionColor;
            }
            CheckUselimit();
            if (itemAttrData.itemConfig.ExpireTime > 0)
            {
                SetDateLimitUI(itemAttrData.itemConfig.ExpireTime);
@@ -295,6 +264,87 @@
            numKeyboard.onValueChange.RemoveAllListeners();
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            needLvValue.gameObject.SetActive(false);
            needLvDes.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < needPointTextlist.Count; i++)
            {
                needPointTextlist[i].gameObject.SetActive(false);
                needPointNumlist[i].gameObject.SetActive(false);
            }
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemAttrData.itemConfig.UseLV > 1)
                        {
                            needLvValue.gameObject.SetActive(true);
                            needLvDes.gameObject.SetActive(true);
                        }
                        needLvDes.text = Language.Get("KnapS110");
                        if (itemAttrData.isHavePutLimit)
                        {
                            needLvValue.text = itemAttrData.itemConfig.UseLV.ToString();
                            if (PlayerDatas.Instance.baseData.LV >= itemAttrData.itemConfig.UseLV)
                            {
                                needLvValue.color = conditionColor;
                                needLvDes.color = conditionColor;
                            }
                            else
                            {
                                needLvValue.color = UIHelper.GetUIColor(TextColType.Red);
                                needLvDes.color = UIHelper.GetUIColor(TextColType.Red);
                            }
                        }
                        else
                        {
                            needLvValue.text = 1.ToString();
                            needLvDes.color = conditionColor;
                            needLvValue.color = conditionColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemAttrData.itemConfig.RealmLimit);
                        if (itemAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = UIHelper.GetUIColor(TextColType.Red);
                        }
                        break;
                    case 2:
                        RefreshNeedPointUI();
                        break;
                }
            }
        }
        private void SetDateLimitUI(double time)
        {
            dateText.gameObject.SetActive(true);
System/Store/Logic/BuyItemInfoWin.cs
@@ -4,6 +4,7 @@
using Snxxz.UI;
using System.Collections.Generic;
using System;
using TableConfig;
namespace Snxxz.UI
{
@@ -22,6 +23,9 @@
        Text conditionText;
        [SerializeField] Text needLvText;
        [SerializeField]
        Text realmTitleText;
        [SerializeField] Image realmImg;
        [SerializeField]
        Text itemTypeText;
@@ -150,29 +154,7 @@
                ,itemTipsModel.curAttrData.guid, itemTipsModel.curAttrData.packType,false);
            itemCell.Init(cellModel);
            if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
            {
                conditionText.gameObject.SetActive(true);
                needLvText.gameObject.SetActive(true);
            }
            else
            {
                conditionText.gameObject.SetActive(false);
                needLvText.gameObject.SetActive(false);
            }
            conditionText.text = Language.Get("KnapS110");
            needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
            if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
            {
                conditionText.color = conditionColor;
                needLvText.color = conditionColor;
            }
            else
            {
                conditionText.color = conditionRedColor;
                needLvText.color = conditionRedColor;
            }
            CheckUselimit();
            if (itemTipsModel.curAttrData.itemConfig.Effect1 != 215)
            {
@@ -194,6 +176,74 @@
            }
        }
        private void CheckUselimit()
        {
            int[] uselimits = itemTipsModel.curAttrData.itemConfig.UseCondiType;
            if (uselimits == null) return;
            conditionText.gameObject.SetActive(false);
            needLvText.gameObject.SetActive(false);
            realmTitleText.gameObject.SetActive(false);
            realmImg.gameObject.SetActive(false);
            for (int i = 0; i < uselimits.Length; i++)
            {
                switch (uselimits[i])
                {
                    case 0:
                        if (itemTipsModel.curAttrData.itemConfig.UseLV > 1)
                        {
                            conditionText.gameObject.SetActive(true);
                            needLvText.gameObject.SetActive(true);
                        }
                        conditionText.text = Language.Get("KnapS110");
                        needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString();
                        if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV)
                        {
                            conditionText.color = conditionColor;
                            needLvText.color = conditionColor;
                        }
                        else
                        {
                            conditionText.color = conditionRedColor;
                            needLvText.color = conditionRedColor;
                        }
                        break;
                    case 1:
                        realmTitleText.gameObject.SetActive(true);
                        realmImg.gameObject.SetActive(true);
                        realmTitleText.text = Language.Get("RealmLimit1");
                        RealmConfig realmConfig = ConfigManager.Instance.GetTemplate<RealmConfig>(itemTipsModel.curAttrData.itemConfig.RealmLimit);
                        if (itemTipsModel.curAttrData.itemConfig.RealmLimit <= 0)
                        {
                            realmImg.SetSprite("NoRealm");
                        }
                        else
                        {
                            if (realmConfig != null)
                            {
                                realmImg.SetSprite(realmConfig.Img);
                            }
                        }
                        if (PlayerDatas.Instance.baseData.realmLevel >= itemTipsModel.curAttrData.itemConfig.RealmLimit)
                        {
                            realmTitleText.color = conditionColor;
                        }
                        else
                        {
                            realmTitleText.color = conditionRedColor;
                        }
                        break;
                    case 2:
                        break;
                }
            }
        }
        private void SetDateLimitUI(double time)
        {
            dateText.gameObject.SetActive(true);
System/Store/Logic/BuyWingsTip.cs
@@ -23,7 +23,7 @@
        [SerializeField]
        Text conditionText;
        [SerializeField]
        Text conditionValueText;
        Image conditionValueText;
        [SerializeField]
        Text dateText;
        [SerializeField]
@@ -207,29 +207,27 @@
            {
                conditionText.gameObject.SetActive(true);
                conditionValueText.gameObject.SetActive(true);
                var _realmLv = 1;
                GeneralConfig.Instance.wingEquipLimits.TryGetValue(itemAttrData.itemConfig.ID, out _realmLv);
                var _realmLv = itemAttrData.itemConfig.RealmLimit;
                var _realmCfg = ConfigManager.Instance.GetTemplate<RealmConfig>(_realmLv);
                if (PlayerDatas.Instance.baseData.realmLevel < _realmLv)
                {
                    conditionText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, Language.Get("RealmLimit1"));
                    if (_realmLv != 0)
                    {
                        conditionValueText.text = _realmCfg.Name;
                        conditionValueText.SetSprite(_realmCfg.Img);
                    }
                    else
                    {
                        conditionText.gameObject.SetActive(false);
                        conditionValueText.gameObject.SetActive(false);
                    }
                    conditionValueText.color = UIHelper.GetUIColor(TextColType.Red);
                }
                else
                {
                    if(_realmLv != 0)
                    {
                        conditionText.text = StringUtility.Contact("<color=#FFF4CDFF>", Language.Get("RealmLimit1"), "</color>");
                        conditionValueText.text = StringUtility.Contact("<color=#FFF4CDFF>", _realmCfg == null ? string.Empty : _realmCfg.Name, "</color>");
                        conditionValueText.SetSprite(_realmCfg.Img);
                    }
                    else
                    {
System/Store/StoreModel.cs
@@ -412,13 +412,14 @@
        StoreConfig tagStore = ConfigManager.Instance.GetTemplate<StoreConfig>((int)result.ItemIndex);
        if (tagStore != null)
        {
            ItemConfig chinModel = ConfigManager.Instance.GetTemplate<ItemConfig>(ReplaceItemIdByJob(tagStore.ID, tagStore.ItemID));
            if (!normalBuyCoinsTypes.Contains(tagStore.MoneyType))
            {
                if (tagStore.RemindSuccess == 0)
                {
                    return;
                }
                BuySuccessModel.Instance.SetBuySuccessModel(tagStore.ItemID, (int)result.ItemCnt, tagStore.IsBind);
                BuySuccessModel.Instance.SetBuySuccessModel(chinModel.ID, (int)result.ItemCnt, tagStore.IsBind);
                if (!WindowCenter.Instance.CheckOpen<BuySuccessWin>())
                {
                    WindowCenter.Instance.Open<BuySuccessWin>();
@@ -427,13 +428,12 @@
            else
            {
                float costMoney = tagStore.MoneyNumber;
                ItemConfig itemConfig = ConfigManager.Instance.GetTemplate<ItemConfig>(tagStore.ItemID);
                SysNotifyMgr.Instance.ShowTip("BuyItemHinit",costMoney,tagStore.MoneyType,itemConfig.ItemName);
                SysNotifyMgr.Instance.ShowTip("BuyItemHinit",costMoney,tagStore.MoneyType, chinModel.ItemName);
            }
           
            if (RefreshBuyResultEvent != null)
            {
                RefreshBuyResultEvent(tagStore.ItemID);
                RefreshBuyResultEvent(chinModel.ID);
            }
        }
    }
System/Strengthening/EquipSuit/PlayerSuitModel.cs
@@ -900,14 +900,18 @@
                return false;
            bool isAdapt = true;
            DesignDebug.Log("groupType:" + groupType + "NowSuitCnt:" + nowSuitCnt + "willSuitCnt:" + willSuitCnt);
            if (nowSuitCnt == attrConfig.count1 || nowSuitCnt == attrConfig.count2 || nowSuitCnt == attrConfig.count3)
            if (willSuitCnt != attrConfig.count1 && willSuitCnt != attrConfig.count2 && willSuitCnt != attrConfig.count3)
            {
                if (willSuitCnt != attrConfig.count1 && willSuitCnt != attrConfig.count2 && willSuitCnt != attrConfig.count3)
                {
                    isAdapt = false;
                }
                isAdapt = false;
            }
            //DesignDebug.Log("groupType:" + groupType + "NowSuitCnt:" + nowSuitCnt + "willSuitCnt:" + willSuitCnt);
            //if (nowSuitCnt == attrConfig.count1 || nowSuitCnt == attrConfig.count2 || nowSuitCnt == attrConfig.count3)
            //{
            //    if (willSuitCnt != attrConfig.count1 && willSuitCnt != attrConfig.count2 && willSuitCnt != attrConfig.count3)
            //    {
            //        isAdapt = false;
            //    }
            //}
            return isAdapt;
        }
@@ -919,7 +923,7 @@
            Dictionary<int, Dictionary<int, int>> needMatCntDict = new Dictionary<int, Dictionary<int, int>>(); //群组 id 数量
            Dictionary<int, int> minActiveSuitCntDic = new Dictionary<int, int>();
            Dictionary<int, List<int>> activeEquipPlaceDict = new Dictionary<int, List<int>>();
            Dictionary<int, List<int>> upgradEquipPlaceDict = new Dictionary<int, List<int>>();
            for (int i = 0; i < partlist.Count; i++)
            {
                int groupType = GetGroupType(partlist[i]);
@@ -940,60 +944,60 @@
                            if (!needMatCntDict.ContainsKey(groupType))
                            {
                                Dictionary<int, int> matCntDict = new Dictionary<int, int>();
                                needMatCntDict.Add(groupType,matCntDict);
                                minActiveSuitCntDic.Add(groupType,1);
                                needMatCntDict.Add(groupType, matCntDict);
                                //minActiveSuitCntDic.Add(groupType, 1);
                                List<int> equipPlacelist = new List<int>();
                                activeEquipPlaceDict.Add(groupType, equipPlacelist);
                                upgradEquipPlaceDict.Add(groupType, equipPlacelist);
                            }
                            if (minActiveSuitCntDic[groupType] <= attrConfig.count1)
                            int[] matIds = matConfig.CostItemID;
                            int[] matCnts = matConfig.CostItemCnt;
                            for (int j = 0; j < matIds.Length; j++)
                            {
                                int[] matIds = matConfig.CostItemID;
                                int[] matCnts = matConfig.CostItemCnt;
                                for (int j = 0; j < matIds.Length; j++)
                                if (!needMatCntDict[groupType].ContainsKey(matIds[j]))
                                {
                                    if (!needMatCntDict[groupType].ContainsKey(matIds[j]))
                                    {
                                        needMatCntDict[groupType].Add(matIds[j], matCnts[j]);
                                    }
                                    else
                                    {
                                        needMatCntDict[groupType][matIds[j]] += matCnts[j];
                                    }
                                    needMatCntDict[groupType].Add(matIds[j], matCnts[j]);
                                }
                                activeEquipPlaceDict[groupType].Add(partlist[i]);
                                minActiveSuitCntDic[groupType] += 1;
                                else
                                {
                                    needMatCntDict[groupType][matIds[j]] += matCnts[j];
                                }
                            }
                            else
                            bool isReach = true;
                            foreach(var id in needMatCntDict[groupType].Keys)
                            {
                                break;
                                int haveCnt = playerPack.GetItemCountByID(PackType.rptItem, id);
                                if(haveCnt < needMatCntDict[groupType][id])
                                {
                                    isReach = false;
                                    break;
                                }
                            }
                            if(isReach)
                            {
                                upgradEquipPlaceDict[groupType].Add(partlist[i]);
                            }
                        }
                    }
                }
            }
            foreach (var type in needMatCntDict.Keys)
            foreach(var type in upgradEquipPlaceDict.Keys)
            {
                bool isReach = true;
                foreach (var id in needMatCntDict[type].Keys)
                if(upgradEquipPlaceDict[type].Count > 0)
                {
                    int haveCnt = playerPack.GetItemCountByID(PackType.rptItem, id);
                    if (haveCnt < needMatCntDict[type][id])
                    ItemModel itemModel = playerPack.GetItemModelByIndex(PackType.rptEquip, upgradEquipPlaceDict[type][0]);
                    EquipSuitAttrConfig attrConfig = EquipSuitAttrConfig.GetSuitAttrConfig(type
                        , (int)suitType, 1, GetEquipJob(itemModel.itemId));
                    if (upgradEquipPlaceDict[type].Count >= attrConfig.count1)
                    {
                        isReach = false;
                        break;
                        equipPlace = upgradEquipPlaceDict[type][0];
                        return true;
                    }
                }
                if (isReach)
                {
                    equipPlace = activeEquipPlaceDict[type][0];
                    return true;
                }
            }
            return false;
        }
        #endregion
System/SystemSetting/SystemSetting.cs
@@ -110,7 +110,7 @@
    public void SetQualityLevel(GameQuality _quality, bool _disabeCamera = true)
    {
        LocalSave.SetInt(QUALITY_LEVEL_KEY, Mathf.Clamp((int)_quality, 0, 2));
        QualitySettings.SetQualityLevel((int)_quality);
        QualitySettings.SetQualityLevel((int)GameQuality.High);
        switch (_quality)
        {
System/Team/TeammateBriefInfoBehaviour.cs
@@ -16,8 +16,7 @@
        [SerializeField] TextEx m_Level;
        [SerializeField] Transform m_Matching;
        TeamModel m_Model;
        TeamModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<TeamModel>()); } }
        TeamModel model { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
        Teammate teammate = null;
        public void Display(Teammate _mate)
System/Team/TeammateInteractPanel.cs
@@ -17,6 +17,7 @@
        [SerializeField] Button m_AddFriend;
        [SerializeField] Button m_SetCaptainer;
        [SerializeField] Button m_AddFairy;
        [SerializeField] Button m_Chat;
        int playerId = 0;
        public event Action<bool> activeOrDeActiveEvent;
@@ -69,12 +70,46 @@
            this.gameObject.SetActive(false);
        }
        private void Chat()
        {
            Teammate mate;
            if (model.myTeam.TryGetMemberByPlayerId(playerId, out mate))
            {
                if (mate.online)
                {
                    if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Friend))
                    {
                        FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.Friend);
                    }
                    else
                    {
                        var playerId = (uint)mate.id;
                        var playerName = mate.mateName;
                        var job = (byte)mate.job;
                        var playerLv = (ushort)mate.level;
                        var realmLv = (ushort)mate.realm;
                        var onLine = mate.online;
                        friendsModel.SetPlayerShortInfo(playerId, playerName, job, playerLv, realmLv, (byte)(onLine ? 1 : 0), true);
                        WindowCenter.Instance.Close<TeamFrameWin>();
                        WindowCenter.Instance.Open<MainInterfaceWin>();
                    }
                }
                else
                {
                    SysNotifyMgr.Instance.ShowTip("Friend_OffLine");
                }
            }
        }
        private void Awake()
        {
            m_ViewBaseInfo.AddListener(ViewBaseInfo);
            m_AddFriend.AddListener(AddFriend);
            m_SetCaptainer.AddListener(SetCaptainer);
            m_AddFairy.AddListener(FairyInvite);
            m_Chat.AddListener(Chat);
        }
        private void OnEnable()
System/Tip/PromoteDetailsWin.cs
@@ -106,7 +106,7 @@
                    WindowCenter.Instance.Open<EquipReinforceWin>(false, 1);
                    break;
                case RolePromoteModel.PromoteDetailType.BlastFurnace:
                    WindowCenter.Instance.Open<BlastFurnaceWin>();
                    WindowCenter.Instance.Open<BlastFurnaceWin>(false, 1);
                    break;
            }
            CloseClick();
System/Treasure/UI3DTreasureSelectStage.cs
@@ -320,6 +320,11 @@
        {
            HideAllTreasure();
            CloseRenderCamera();
            var movecomponent = m_CameraControl.GetComponent<SmoothMove>();
            if (movecomponent != null)
            {
                DestroyImmediate(movecomponent);
            }
            m_CameraControl.localPosition = m_StartPosition;
            IsCloser = false;
@@ -868,6 +873,10 @@
        private void OnCloserComplete()
        {
            if (!IsOpen)
            {
                return;
            }
            CloserComplete = true;
            OpenRenderCamera();
            m_Treasures[currentCategory][presentSelectIndex].SetLayer(LayerUtility.DefaultLayer);
@@ -897,6 +906,10 @@
        private void CameraBackComplete()
        {
            if (!IsOpen)
            {
                return;
            }
            IsCloser = false;
            if (OnCameraBackComplete != null)
            {
System/Vip/FairyJadeInvestmentModel.cs
@@ -60,7 +60,7 @@
            if (PlayerDatas.Instance.baseData.LV >= 30)
            {
                RedPointSate();
            }
            }
        }
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;
@@ -75,7 +75,7 @@
    private void Updatefighting(PlayerDataRefresh _tCDBPlayerRefresh)
    {
        if (_tCDBPlayerRefresh == PlayerDataRefresh.LV && InvestGold>0)
        if (_tCDBPlayerRefresh == PlayerDataRefresh.LV && InvestGold > 0)
        {
            InvestmentRedPoint();
        }
@@ -86,7 +86,7 @@
                if (IsRedpoint)
                {
                    RedPointSate();
                }
                }
            }
        }
    }
@@ -247,7 +247,20 @@
            }
        }
        int type1 = -1;
        if (JumpInedx == 0 && InvestmentGrade != 0)
        {
            foreach (var key in FairyJadeInvestmentDic.Keys)
            {
                type1 += 1;
                if (key > PlayerLV)
                {
                    JumpInedx = type1;
                    return;
                }
            }
        }
    }
    private void RedPointSate()//月卡投资创角前三天红点
    {
System/Vip/LimitedTimePackageModel.cs
@@ -70,7 +70,6 @@
                DicBuyPackage.Add((int)Info.BuyCountList[i].GiftbagID, (int)Info.BuyCountList[i].BuyCount);
            }
        }
        DesignDebug.LogError(DicBuyPackage);
        if (UpdateLimitedTimePackageItem != null)
        {
            UpdateLimitedTimePackageItem();
@@ -83,13 +82,13 @@
            WindowCenter.Instance.Open<GotoChargeWin>(true);
        }
        SDKUtility.Instance.FreePlatformPay(Title, RMBNum, OrderInfo);
        DesignDebug.LogErrorFormat("礼包标题{0},所需金额{1},商品编号{2}", Title, RMBNum, OrderInfo);
      //  DesignDebug.LogErrorFormat("礼包标题{0},所需金额{1},商品编号{2}", Title, RMBNum, OrderInfo);
    }
    public bool IsExpired()
    {
        bool IsBool = false;
        IsBool = OperationTimeHepler.Instance.InOperationTime(Operation.GiftPackage);
        IsBool = OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.GiftPackage);
        return IsBool;
    }
}
System/Vip/LimitedTimePackageWin.cs
@@ -57,8 +57,7 @@
        protected override void OnAfterOpen()
        {
            OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
            limitedTimePackageItemModel.UpdateLimitedTimePackageItem -= UpdateLimitedTimePackageItem;
        }
        private void UpdateLimitedTimePackageItem()
@@ -101,15 +100,17 @@
                        m_Buy_Btn.RemoveAllListeners();
                        m_Buy_Btn.AddListener(()=> 
                        {
                            m_Buy_Btn.interactable = false;
                            time = 0;
                            if (limitedTimePackageItemModel.IsExpired())
                            {
                                m_Buy_Btn.interactable = false;
                                time = 0;
                                limitedTimePackageItemModel.OpenFreePlat(str, giftpackage.gifts[0].rmb, giftpackage.gifts[0].OrderInfo);
                            }
                            else
                            {
                                SysNotifyMgr.Instance.ShowTip("LimitGift9");
                                return;
                            }
                            
                        });
@@ -161,6 +162,8 @@
        protected override void OnPreClose()
        {
            OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
            limitedTimePackageItemModel.UpdateLimitedTimePackageItem -= UpdateLimitedTimePackageItem;
        }
        protected override void OnAfterClose()
System/Vip/VipInvest/VipInvestModel.cs
@@ -414,6 +414,20 @@
                    return;
                }
            }
            if (JumpIndex == 0)
            {
                for (int j = 0; j < configlist.Count; j++)
                {
                    InvestConfig config = configlist[j];
                    RewardRecordState recordState = GetRecordByIndex((int)InvestType.Vip, config.needDay);
                    if (recordState == RewardRecordState.NoShow)
                    {
                        JumpIndex = j;
                        return;
                    }
                }
            }
        }
        private void RedPointSate()//Vip投资红点前三天
System/Welfare/MultipleExpModel.cs
@@ -7,6 +7,7 @@
    public class MultipleExpModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
    {
        private bool showTip = false;
        private bool todayRemind = false;
        public override void Init()
        {
            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
@@ -21,6 +22,7 @@
            if (!(StageManager.Instance.CurrentStage is DungeonStage))
            {
                showTip = true;
                todayRemind = false;
            }
        }
@@ -94,7 +96,7 @@
        {
            if (multipleExpRedpoint.state == RedPointState.Simple)
            {
                DayRemind.Instance.SetDayRemind(DayRemind.MULTIPLE_EXP_REDPOINT, true);
                todayRemind = true;
                UpdateRedpoint();
            }
        }
@@ -109,8 +111,7 @@
        private void UpdateRedpoint()
        {
            multipleExpRedpoint.state = RedPointState.None;
            if (DayRemind.Instance.GetDayRemind(DayRemind.MULTIPLE_EXP_REDPOINT)
                || !Open())
            if (todayRemind || !Open())
            {
                multipleExpRedpoint.state = RedPointState.None;
                return;
System/Welfare/NPracticePointWin.cs
@@ -1,6 +1,7 @@
using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
namespace Snxxz.UI
{
@@ -8,7 +9,9 @@
    {
        [SerializeField] Text remainTimeText;
        [SerializeField] Button gotoBtn;
        [SerializeField] Image multipleRealmImg;
        [SerializeField] Text activeRuleText;
        OperationBase operation;
        protected override void BindController()
        {
@@ -42,6 +45,18 @@
        private void InitUI()
        {
            RefreshSecond();
            operation = null;
            OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipRealmPoint, out operation);
            if(operation != null)
            {
                int multipleRealm = (operation as OperationMultipleRealmPoint).multiplePractice;
                if (GeneralConfig.Instance.multipleRealmImgDict.ContainsKey(multipleRealm))
                {
                    multipleRealmImg.SetSprite(GeneralConfig.Instance.multipleRealmImgDict[multipleRealm]);
                }
                activeRuleText.text = Language.Get("MultipleXXDRemind", Language.Get(StringUtility.Contact("Num_CHS_",multipleRealm)));
            }
        }
        private void ClickGotoBtn()
System/Welfare/WelfareWin.cs
@@ -294,7 +294,7 @@
            m_NpracticeBtn.gameObject.SetActive(isOpen);
            if (isOpen)
            {
                m_MultipleRealmPointTitle.text = Language.Get("MultipleRealmPoint", (operation as OperationMultipleRealmPoint).multiplePractice);
                m_MultipleRealmPointTitle.text = Language.Get("MultipleRealmPoint", Language.Get(StringUtility.Contact("Num_CHS_", (operation as OperationMultipleRealmPoint).multiplePractice)));
            }
        }
System/WindowBase/ModelCenter.cs
@@ -184,6 +184,7 @@
            RegisterModel<LimitedTimePackageItemClassModel>();
            RegisterModel<FlashSaleModel>();
            RegisterModel<FairylandCeremonyModel>();
            RegisterModel<TrialDungeonModel>();
            inited = true;
        }
UI/HUD/FacingCamera.cs
@@ -8,11 +8,14 @@
        [SerializeField]
        Camera m_Camera;
        public new Camera camera {
            get {
        public new Camera camera
        {
            get
            {
                return m_Camera;
            }
            set {
            set
            {
                m_Camera = value;
            }
        }