| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762 | using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using Core.Utility;using Excel2Json;using Fort23.Core;using Fort23.UTool;using GameLogic.Bag;using GameLogic.Hero;using UnityEngine;using UnityEngine.Serialization;using Utility;#if UNITY_WEIXINMINIGAMEusing WeChatWASM;#endifpublic class AccountFileInfo : Singleton<AccountFileInfo>{    public string persistentDataPath = Application.persistentDataPath + "/playerData.txt";    public PlayerData playerData = new PlayerData();    /// <summary>    /// 索引,用于快速查找    /// </summary>    private Dictionary<string, int> itemIndexMap = new Dictionary<string, int>();    public string fileName = "/playerData.txt";    [System.Serializable]    public class PlayerData    {        /// <summary>        /// 神识等级        /// </summary>        public int divineSenseLevel = 1;        /// <summary>        /// 神识点        /// </summary>        public float divineSensePoint = 0;                /// <summary>        /// 今天回复的神识值        /// </summary>        public float todayDivineSensePoint = 0;        /// <summary>        /// 神识经验        /// </summary>        public int divineSenseexp = 0;        //每天刷新时间        public long nextRefence;        /// <summary>        /// 洞府经验丹使用数量        /// </summary>        public int todayUseExpElixrPanelCount = 0;        /// <summary>        /// 英雄信息        /// </summary>        public HeroData heroData;        public int CurrentZuiZhongEventListId;        public List<DaoYouData> daoYouDatas = new List<DaoYouData>();                public List<DaoYouGuaiJiData> daoYouGuaiJiDatas = new List<DaoYouGuaiJiData>();        /// <summary>        /// 道具信息        /// </summary>        public List<ItemData> ItemListData = new List<ItemData>();        //地图区域数据        public List<PlacesData> placesDatas = new List<PlacesData>();        /// <summary>        /// 商店数据        /// </summary>        public List<ShopData> shopDatas = new List<ShopData>();        /// <summary>        /// 功法数据        /// </summary>        public List<SkillData> AllSkillDatas = new List<SkillData>();        /// <summary>        /// 法宝数据        /// </summary>        public List<FaBaoData> AllFaBaoDatas = new List<FaBaoData>();        // /// <summary>        // /// 事件链数据        // /// </summary>        // public List<EventLinkData> eventLinkDatas = new List<EventLinkData>();        // /// <summary>        // ///         // /// </summary>        // public List<EventConditionData> eventConditionDatas = new List<EventConditionData>();        /// <summary>        /// 完成的事件        /// </summary>        public List<EventList> completeEvents = new List<EventList>();        /// <summary>        /// 背包里的事件        ///         /// </summary>        public List<EventList> eventList = new List<EventList>();        public List<SentimentData> SentimentDatas = new List<SentimentData>();        //塔数据        public List<TowerData> TowerDatas = new List<TowerData>();                //掉落数据        public List<QiankundaiData> QiankundaiDatas = new List<QiankundaiData>();                public List<ItemData> QiankundaiItemDatas = new List<ItemData>();                /// <summary>        /// 挂机掉落了多少时间        /// </summary>        public int QiankundaiDropTimer;        /// <summary>        /// 领取挂机每日掉落时间        /// </summary>        public long QiankundaiLingQuDailyDropTime;    }        public class QiankundaiData    {        public int id;        public long refenceTime;        public int dropCount;        public int dropTime;    }    /// <summary>    /// 塔数据    /// </summary>    [System.Serializable]    public class TowerData    {        public int id;        public List<TowerLevelData> towerLevelDatas = new List<TowerLevelData>();        public int GetMaxUlockid()        {            int id = 0;            TowerConfig towerConfig = ConfigComponent.Instance.Get<TowerConfig>(this.id);            List<TowerInfoConfig> towerInfoConfigs = ConfigComponent.Instance.GetAll<TowerInfoConfig>().ToList();            var configs = towerInfoConfigs.Where(c => c.groupId == towerConfig.towerinfoIdGroup).ToList();            foreach (var towerInfoConfig in configs)            {                var lastTowerLevelData = towerLevelDatas.FirstOrDefault(td => td.id == towerInfoConfig.ID - 1);                if ((lastTowerLevelData != null &&                     lastTowerLevelData.finish) ||                    towerInfoConfig.level == 1)                {                    if (towerInfoConfig.ID > id)                    {                        id = towerInfoConfig.ID;                    }                }            }            return id;        }    }    /// <summary>    /// 塔层数据    /// </summary>    [System.Serializable]    public class TowerLevelData    {        public int id;        public bool finish;        public bool reward;    }    /// <summary>    /// 心境数据    /// </summary>    [System.Serializable]    public class SentimentData    {        public int id;        //主属性        public SentimentProperty mainSentiment;        public List<SentimentProperty> sentimentProperties = new List<SentimentProperty>();    }    /// <summary>    /// 心境属性    /// </summary>    [System.Serializable]    public class SentimentProperty    {        // 属性类别        public int groupId;        // 词条档位        public int level = 0;    }    [System.Serializable]    public class DaoYouGuaiJiData    {        public long leaveTime;        public long guajiTime;        public bool isLeave;        public List<ItemData> items = new List<ItemData>();        public int daoyouDataID;    }    /// <summary>    ///  道友数据    /// </summary>    [System.Serializable]    public class DaoYouData    {        public int id;        /// <summary>        /// 喜爱礼物        /// </summary>        public List<int> loveIds = new List<int>();        /// <summary>        /// 好感等级        /// </summary>        public int favorabilityLv;        /// <summary>        /// 经验        /// </summary>        public int exp;        /// <summary>        /// 已经领取奖励的好感等级        /// </summary>        public List<int> awardLevels = new List<int>();        /// <summary>        /// 心情        /// </summary>        public int emotion;        /// <summary>        /// 心情刷新时间        /// </summary>        public long emotionTime;        //心情值        public int emotionValue;    }    //地图区域数据    [System.Serializable]    public class PlacesData    {        //区域Id        public int id;        //地图进度        public int progress;    }    /// <summary>    /// 商店数据    /// </summary>    [System.Serializable]    public class ShopData    {        public int id;        public List<ShopItem> shopItemList = new List<ShopItem>();        // 商店刷新时间        public long refreshTime = 0;    }    [System.Serializable]    public class ShopItem    {        // 商品ID        public int id;        // 商品购买次数        public int buyCount = 0;        // 商品结束时间        public long endTime = -1;    }    [System.Serializable]    public class FaBaoData    {        public int id;        public int level;        public int useIndex;    }    [System.Serializable]    public class SkillData    {        public int id;        public int level;        public int star;        public int useIndex;    }    [System.Serializable]    public class EventData    {        public int eventID;        //完成cishu        public int completeCount = 0;    }    /// <summary>    /// 刷出来的事件列表    /// </summary>    [System.Serializable]    public class EventLinkData    {        public int eventLinkId;        public int eventId;        /// <summary>        /// 事件监听列表        /// </summary>        public List<EventConditionData> eventConditions = new List<EventConditionData>();    }    /// <summary>    /// 刷出来的事件列表    /// </summary>    [System.Serializable]    public class EventConditionData    {        public int eventId;        public int eventCondition;        public int fishCount;    }    /// <summary>    /// 刷出来的事件列表    /// </summary>    [System.Serializable]    public class EventList    {        public int guid;        public int eventID;                public List<ItemData> itemInfos = new List<ItemData>();        public List<EventLinkData> eventLinks = new List<EventLinkData>();        public List<int> selectEventLinkIds = new List<int>();        public int curStep;        public bool isCompleted;    }    /// <summary>    /// 重建索引表    /// 主要给道具用,比较多,调用频繁    /// </summary>    private void RestoreIndexMap()    {        itemIndexMap.Clear();        for (int i = 0; i < playerData.ItemListData.Count; i++)        {            itemIndexMap[playerData.ItemListData[i].guid] = i;        }    }    /// <summary>    /// 加载玩家数据,一切数据:从这里开始    /// </summary>    public void LoadPlayerData()    {#if UNITY_WEIXINMINIGAME && !UNITY_EDITOR        persistentDataPath = WX.env.USER_DATA_PATH + fileName;        WXFileSystemManager wxFileSystemManager = WX.GetFileSystemManager();        if (wxFileSystemManager.AccessSync(persistentDataPath).Equals("access:ok"))        {            string data = wxFileSystemManager.ReadFileSync(persistentDataPath, "utf8");            playerData = new PlayerData();            JsonUtility.FromJsonOverwrite(data, playerData);        }        else        {            ClearInitPlayerData();            SavePlayerData();        }#else        if (!File.Exists(persistentDataPath))        {            LogTool.Log("没有文件: " + persistentDataPath);            ClearInitPlayerData();            // File.Create(persistentDataPath).Close();        }        LogTool.Log("读取=文件: " + persistentDataPath);        StreamReader sr = File.OpenText(persistentDataPath);        string data = sr.ReadToEnd();        sr.Close();        playerData = new PlayerData();        JsonUtility.FromJsonOverwrite(data, playerData);#endif        //初始化索引        RestoreIndexMap();    }    private int lastHeroIdx = 0;    private int lastItemIdx = 0;    /// <summary>    /// 保存item数据    /// </summary>    /// <param name="itemInfo"></param>    /// <param name="now">是否立即保存</param>    /// <param name="zeroDel">count为0时,是否删除</param>    public void SaveItemData(ItemInfo itemInfo, bool now = true)    {        if (itemIndexMap.TryGetValue(itemInfo.guid, out int index))        {            //count为零且需要立即删除时,移除Data并移除索引(也有count为0,不删除的情况,就走else的逻辑)            // if (itemInfo.count.Value == 0 && zeroDel)            // {            //     playerData.ItemListData.RemoveAt(index);            //     itemIndexMap.Remove(itemInfo.guid);            // }            // else            // {            //     // 快速找到索引,直接修改            //     playerData.ItemListData[index] = itemInfo.ToItemData();            // }            // 快速找到索引,直接修改            playerData.ItemListData[index] = itemInfo.ToItemData();        }        else        {            foreach (ItemData itemData in playerData.ItemListData)            {                if (itemData.guid == itemInfo.guid)                {                    LogTool.Error("??? guid重复了" + itemInfo.itemID + "-" + itemData.guid);                }            }            // 添加新数据并更新索引表            playerData.ItemListData.Add(itemInfo.ToItemData());            itemIndexMap[itemInfo.guid] = playerData.ItemListData.Count - 1;        }        if (now)        {            SavePlayerData();        }    }    // public void SaveEqGUID()    // {    //     SavePlayerData();    // }    /// <summary>    /// 清除空数据,重建索引    /// </summary>    private void CleanEmptyData()    {        // 从后往前遍历,这样删除元素,可以边循环,边删除        for (int i = playerData.ItemListData.Count - 1; i >= 0; i--)        {            // string ss = "";            ItemData itemData = playerData.ItemListData[i];            if (itemData.itemCount == 0)            {                //不是装备,删除                if (itemData.eqData == null || itemData.eqData.zyEqId == 0)                {                    playerData.ItemListData.RemoveAt(i);                    // ss = "删除道具:" + itemData.guid;                }                else if (itemData.eqData != null && itemData.eqData.zyEqId != 0 && !itemData.eqData.isEquip)                {                    // ss = "删除装备:" + itemData.guid;                    playerData.ItemListData.RemoveAt(i);                }                // LogTool.Log(ss);            }        }        RestoreIndexMap();    }    public void SavePlayerData(bool clean = false)    {        if (clean)        {            CleanEmptyData();        }        if (!string.IsNullOrEmpty(persistentDataPath))        {            string playerSettingJson = JsonManager.ToJson(playerData);#if UNITY_WEIXINMINIGAME&& !UNITY_EDITOR            WXFileSystemManager wxFileSystemManager = WX.GetFileSystemManager();            wxFileSystemManager.WriteFileSync(persistentDataPath, playerSettingJson, "utf8");#else            File.WriteAllText(persistentDataPath, playerSettingJson);#endif        }    }    public void DeleteFile(string filePath)    {#if UNITY_WEIXINMINIGAME&& !UNITY_EDITOR        playerData = new PlayerData();        SavePlayerData();        ClearInitPlayerData();#else        if (File.Exists(filePath))        {            File.Delete(filePath); // 删除文件            LogTool.Log($"文件已删除:{filePath}");        }        else        {            LogTool.Log($"文件不存在:{filePath}");        }#endif    }    /// <summary>    /// 不要服务器的话,这里初始化玩家的起始数据    /// </summary>    public void ClearInitPlayerData()    {        ItemData coin = new ItemData(GlobalParam.Item_Coin_ID, 0);        ItemData diamond = new ItemData(GlobalParam.Item_Diamond_ID);        ItemData heroExp = new ItemData(GlobalParam.Item_HeroExp_ID, 0);        playerData.ItemListData.Add(coin);        playerData.ItemListData.Add(diamond);        playerData.ItemListData.Add(heroExp);        // DaoYouData daoYouData = new DaoYouData();        // daoYouData.id = 1;        // daoYouData.favorabilityLv = 1;        // playerData.daoYouDatas.Add(daoYouData);        //测试道具        playerData.ItemListData.Add(new ItemData(1201, 10));        playerData.ItemListData.Add(new ItemData(1202, 10));        playerData.ItemListData.Add(new ItemData(1301, 10));        playerData.ItemListData.Add(new ItemData(1302, 10));        playerData.ItemListData.Add(new ItemData(1303, 10));        playerData.ItemListData.Add(new ItemData(1304, 10));        //        playerData.ItemListData.Add(new ItemData(1401, 10));        playerData.ItemListData.Add(new ItemData(1402, 10));        playerData.ItemListData.Add(new ItemData(1403, 10));        playerData.ItemListData.Add(new ItemData(1404, 10));        playerData.ItemListData.Add(new ItemData(1601, 10));                playerData.ItemListData.Add(new ItemData(21012, 10));        playerData.ItemListData.Add(new ItemData(21013, 10));                                playerData.ItemListData.Add(new ItemData(21001, 10));        playerData.ItemListData.Add(new ItemData(21002, 10));        playerData.ItemListData.Add(new ItemData(21003, 10));        // var allSkill = new[] { 1101};        // foreach (var i in allSkill)        // {        //     SkillData skillData = new SkillData();        //     skillData.id = i;        //     skillData.star = 1;        //     skillData.level = 1;        //     skillData.useIndex = -1;        //     playerData.AllSkillDatas.Add(skillData);        // }        //添加所有测试法宝和功法        List<SkillConfig> fabaoPowerupConfigs = ConfigComponent.Instance.GetAll<SkillConfig>().ToList();        List<SkillConfig> gongfa = fabaoPowerupConfigs.Where(s => s.SkillType == 1 || s.SkillType == 2).ToList();        var fanappower = gongfa.GroupBy(f => f.IDGroup).Select(g => new { config = g.OrderBy(f => f.ID).FirstOrDefault() }).ToList();        foreach (var x1 in fanappower)        {            SkillData skillData = new SkillData();            skillData.id = x1.config.IDGroup;            skillData.star = 1;            skillData.level = 1;            skillData.useIndex = -1;            playerData.AllSkillDatas.Add(skillData);        }        FabaoConfig[] fabaoConfig = ConfigComponent.Instance.GetAll<FabaoConfig>();        foreach (var i in fabaoConfig)        {            FaBaoData faaData = new FaBaoData();            faaData.id = i.ID;            faaData.level = 1;            faaData.useIndex = -1;            playerData.AllFaBaoDatas.Add(faaData);        }        HeroData heroData = new HeroData();        playerData.heroData = heroData;        heroData.heroModelId = 101;        heroData.heroPowerId = 1;        heroData.upTime = TimeHelper.ClientNow();        //添加第一关        PlacesData placesData = new PlacesData();        placesData.id = 1;        playerData.placesDatas.Add(placesData);        SavePlayerData();    }    [System.Serializable]    public class HeroData    {        /// <summary>        /// 英雄基础信息        /// </summary>        public int heroModelId;        /// <summary>        /// 英雄等级        /// </summary>        public int heroPowerId;        public float exp;        public long upTime;        public bool isCombat;        public int TaoismSkillId;        public List<int> ImmortalBond = new List<int>();    }    [System.Serializable]    public class ItemData    {        public int itemId;        public long itemCount;        public string guid;        public EqData eqData;        public ItemData(int itemId, long itemCount = 0, string guid = "")        {            this.itemId = itemId;            this.itemCount = itemCount;            if (string.IsNullOrEmpty(guid))            {                this.guid = itemId.ToString();            }            else            {                this.guid = guid;            }            // eqData = null;        }    }    /// <summary>    /// 装备数据    /// </summary>    [System.Serializable]    public class EqData    {        // public string guid;        // public int count;        /// <summary>        /// HeroBasicEquipConfig ID        /// </summary>        public int zyEqId;        // public int dropLv;        public int quality;        /// <summary>        /// 是否穿了(职业装备)        /// </summary>        public bool isEquip;        // /// <summary>        // /// 穿在哪个职业身上        // /// </summary>        // public int zy;    }}
 |