using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System.Text; 
 | 
using System; 
 | 
using System.Text.RegularExpressions; 
 | 
/// <summary> 
 | 
/// 服务端Setting配置,存储一些快捷设置,目前长度为100 
 | 
/// </summary> 
 | 
  
 | 
public class QuickSetting : Singleton<QuickSetting> 
 | 
{ 
 | 
    public QuickSetting() 
 | 
    { 
 | 
        //自动战斗 几倍消耗 几倍速度 是否高战力停止 是否开启自动战斗 
 | 
        quickSettingDic.Add(QuickSettingType.AutoFight_Cost, new QuickSettingRange(QuickSettingType.AutoFight_Cost, 0, 1)); 
 | 
        quickSettingDic.Add(QuickSettingType.AutoFight_Speed, new QuickSettingRange(QuickSettingType.AutoFight_Speed, 1, 1)); 
 | 
        quickSettingDic.Add(QuickSettingType.AutoFight_FightPower, new QuickSettingRange(QuickSettingType.AutoFight_FightPower, 2, 1)); 
 | 
        quickSettingDic.Add(QuickSettingType.AutoFight_Open, new QuickSettingRange(QuickSettingType.AutoFight_Open, 3, 1)); 
 | 
        quickSettingDic.Add(QuickSettingType.AutoGoldRush, new QuickSettingRange(QuickSettingType.AutoGoldRush, 4, 10, 1));  //自动淘金,9个物品值,1个自动刷新开关 
 | 
        quickSettingDic.Add(QuickSettingType.BattleSpeed, new QuickSettingRange(QuickSettingType.BattleSpeed, 14, 1)); 
 | 
        quickSettingDic.Add(QuickSettingType.HeroCountLock, new QuickSettingRange(QuickSettingType.HeroCountLock, 15, 2)); 
 | 
  
 | 
        setting = new string(UCharacter, 100); 
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; 
 | 
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; 
 | 
    } 
 | 
  
 | 
    public Dictionary<QuickSettingType, QuickSettingRange> quickSettingDic = new Dictionary<QuickSettingType, QuickSettingRange>(); 
 | 
    public const char UCharacter = '*'; 
 | 
    private string setting; 
 | 
    private string cacheSetting; 
 | 
    private StringBuilder textBuilder = new StringBuilder(); 
 | 
  
 | 
    public event Action onQuickSettingUpdate; 
 | 
  
 | 
    public void SetQuickSetting<T>(QuickSettingType type, T value, int index = 0) where T : struct 
 | 
    { 
 | 
        SetQuickSetting(type, value.ToString(), index); 
 | 
    } 
 | 
    public void SetQuickSetting(QuickSettingType type, bool value, int index = 0) 
 | 
    { 
 | 
        SetQuickSetting<int>(type, value ? 1 : 0, index); 
 | 
    } 
 | 
  
 | 
    public void SetQuickSetting(int type, string value, int index) 
 | 
    { 
 | 
        SetQuickSetting((QuickSettingType)type, value, index); 
 | 
    } 
 | 
  
 | 
    public void SetQuickSetting(QuickSettingType type, string value, int index) 
 | 
    { 
 | 
        var quickRange = quickSettingDic[type]; 
 | 
  
 | 
  
 | 
        if ((index - quickRange.index) * quickRange.single + value.Length > quickRange.length || value.Length > quickRange.single) 
 | 
        { 
 | 
            Debug.LogErrorFormat("存储的数据超过最大长度!{0}", type); 
 | 
            return; 
 | 
        } 
 | 
        textBuilder.Length = 0; 
 | 
        var start = quickRange.index + index * quickRange.single; 
 | 
        var end = start + value.Length; 
 | 
        if (quickRange.length == quickRange.single) 
 | 
        { 
 | 
            end = start + quickRange.length; 
 | 
        } 
 | 
        textBuilder.Append(setting, 0, start); 
 | 
        textBuilder.Append(value); 
 | 
        if (quickRange.length == quickRange.single 
 | 
            && quickRange.length > value.Length) 
 | 
        { 
 | 
            textBuilder.Append('*', quickRange.length - value.Length); 
 | 
        } 
 | 
        textBuilder.Append(setting, end, setting.Length - end); 
 | 
        setting = textBuilder.ToString(); 
 | 
        PlayerDatas.Instance.baseData.Setting = setting; 
 | 
    } 
 | 
    public void SetQuickSetting(string value) 
 | 
    { 
 | 
        value = UIHelper.ServerStringTrim(value); 
 | 
        if (value != null && value.Length > 0) 
 | 
        { 
 | 
            setting = StringUtility.Contact(value, setting.Substring(value.Length, setting.Length - value.Length)); 
 | 
            cacheSetting = setting; 
 | 
            PlayerDatas.Instance.baseData.Setting = setting; 
 | 
        } 
 | 
  
 | 
        if (onQuickSettingUpdate != null) 
 | 
        { 
 | 
            onQuickSettingUpdate(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public T GetQuickSettingValue<T>(QuickSettingType type, int index) where T : struct 
 | 
    { 
 | 
        string destinationStr = GetQuickSetting(type, index); 
 | 
        if (string.IsNullOrEmpty(destinationStr)) 
 | 
        { 
 | 
            return default(T); 
 | 
        } 
 | 
        return (T)Convert.ChangeType(destinationStr, typeof(T)); 
 | 
    } 
 | 
    public string GetQuickSetting(QuickSettingType type, int index) 
 | 
    { 
 | 
        var quickRange = quickSettingDic[type]; 
 | 
        var start = quickRange.index + index * quickRange.single; 
 | 
        var destinationStr = setting.Substring(start, quickRange.single); 
 | 
        destinationStr = Regex.Replace(destinationStr, @"\*", string.Empty); 
 | 
        return destinationStr; 
 | 
    } 
 | 
    public bool GetQuickSettingBool(QuickSettingType type, int index, bool _default = false) 
 | 
    { 
 | 
        string destinationStr = GetQuickSetting(type, index); 
 | 
        if (string.IsNullOrEmpty(destinationStr)) 
 | 
        { 
 | 
            return _default; 
 | 
        } 
 | 
        int _value = _default ? 1 : 0; 
 | 
        int.TryParse(destinationStr, out _value); 
 | 
        return _value == 1; 
 | 
    } 
 | 
  
 | 
    public string GetQuickSetting(int type, int index) 
 | 
    { 
 | 
        return GetQuickSetting((QuickSettingType)type, index); 
 | 
    } 
 | 
  
 | 
    public void SendPackage() 
 | 
    { 
 | 
        if (cacheSetting != setting) 
 | 
        { 
 | 
            cacheSetting = setting; 
 | 
            C0303_tagCSetShutCutData vNetData = new C0303_tagCSetShutCutData(); 
 | 
            vNetData.Setting = setting; 
 | 
            GameNetSystem.Instance.SendInfo(vNetData); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void BeforePlayerDataInitializeEvent() 
 | 
    { 
 | 
        setting = null; 
 | 
        setting = new string(UCharacter, 100); 
 | 
        PlayerDatas.Instance.baseData.Setting = setting; 
 | 
    } 
 | 
  
 | 
    private void OnPlayerLoginOk() 
 | 
    { 
 | 
        //初始设置 
 | 
        if (PlayerDatas.Instance.baseData.LV == 1 && !AutoFightModel.Instance.isStopFightByBetterEquip) 
 | 
        { 
 | 
            AutoFightModel.Instance.isStopFightByBetterEquip = true; 
 | 
            AutoFightModel.Instance.SaveAutoFightSetting(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
public enum QuickSettingType 
 | 
{ 
 | 
    AutoFight_Cost, //自动战斗 几倍消耗 
 | 
    AutoFight_Speed,    //几倍速度 
 | 
    AutoFight_FightPower,   //是否高战力停止 
 | 
    AutoFight_Open,    //是否开启自动战斗 
 | 
    AutoGoldRush,   //自动淘金 
 | 
    BattleSpeed,    //战斗速度索引  非主线部分 
 | 
    HeroCountLock,  //上阵人数条件锁定 
 | 
} 
 | 
  
 | 
public class QuickSettingRange 
 | 
{ 
 | 
    public QuickSettingType type; 
 | 
    public int index; 
 | 
    public int length; 
 | 
    public int single;  //其中的单个长度,默认和长度一样, 用于多个值合并1个类型中 
 | 
  
 | 
    public QuickSettingRange(QuickSettingType type, int start, int length, int single = 0) 
 | 
    { 
 | 
        this.type = type; 
 | 
        this.index = start; 
 | 
        this.length = length; 
 | 
        this.single = single == 0 ? length : single; 
 | 
    } 
 | 
} 
 |