using System.Collections; using System.Collections.Generic; using System.Linq; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Bag; using GameLogic.Combat.CombatTool; using GameLogic.CombatScenesTool; using GameLogic.Equipment; using GameLogic.Hero; using GameLogic.Player; using UnityEngine; using Utility; public class PlayerManager : Singleton { public GameConstantConfig gameConstantConfig; public GongFaControl GongFaControl; public FaBaoControl FaBaoControl; public BagController BagController; public Map> GuaijiDaoYou = new Map>(); public bool isTest; /// /// 玩家角色属性 /// public HeroInfo myHero; public long serverTime => TimeHelper.ServerNow(); private AccountFileInfo.PlacesData currentPlaces; public AccountFileInfo.PlacesData CurrentPlaces { get { return currentPlaces; } set { currentPlaces = value; } } public float PlacesBl => GetMapBl(CurrentPlaces.id); private TimerEntity _timerEntity; public void Init() { AccountFileInfo.Instance.LoadPlayerData(); SetConfigs(); InitGameData(); // int m = Random.Range(0, 4 * 60 * 1000); RandownDaoYou(gameConstantConfig.Daoyoushowuptime + 1000); } public void RandownDaoYou(int m) { _timerEntity?.Dispose(); _timerEntity = null; _timerEntity = TimerComponent.Instance.AddTimer(m, () => { List daoYouDatas = AccountFileInfo.Instance.playerData.daoYouDatas.ToList(); foreach (var keyValuePair in GuaijiDaoYou) { foreach (var daoYouData in keyValuePair.Value) { if (daoYouDatas.Contains(daoYouData)) { daoYouDatas.Remove(daoYouData); } } } int count = Random.Range(0, daoYouDatas.Count + 1); List daoyou = new List(); for (int i = 0; i < count; i++) { int index = Random.Range(0, daoYouDatas.Count); daoyou.Add(daoYouDatas[index]); daoYouDatas.RemoveAt(index); _timerEntity?.Dispose(); _timerEntity = null; } if (daoyou.Count > 0) { GuaijiDaoYou.Add(TimeHelper.ClientNow() + Random.Range(gameConstantConfig.DaoyouguajiDuration[0], gameConstantConfig.DaoyouguajiDuration[1]) * 1000, daoyou); EventManager.Instance.Dispatch(CustomEventType.DaoYouCounUpdate, null); } RandownDaoYou(gameConstantConfig.Daoyoushowuptime * 1000); }); } public int GetDaoYouLevel(AccountFileInfo.DaoYouData daoYouData) { DaoyouModelConfig daoyouModelConfig = ConfigComponent.Instance.Get(daoYouData.id); int level = (int)(myHero.level.Value * daoyouModelConfig.growupRate * 0.01f); if (level < 1) level = 1; return level; } public int GetBl(AccountFileInfo.DaoYouData daoYouData, int guajibuffId) { DaoyouLevelupConfig daoyouLevelupConfig = ConfigComponent.Instance.Get(daoYouData.favorabilityLv); int level = GetDaoYouLevel(daoYouData); DaoyouguajiResourcLevel daoyouguajiResourcLevel = ConfigComponent.Instance.Get(level); guajibuff guajibuff = ConfigComponent.Instance.Get(guajibuffId); int levelBl = 0; int bl = 0; switch (guajibuff.paraValue) { case 1: levelBl = daoyouguajiResourcLevel.para2; bl = (int)(guajibuff.GivingRate * levelBl * daoyouLevelupConfig.guajiGrowup * 0.01f * 0.01f); return bl; break; case 2: levelBl = daoyouguajiResourcLevel.para2; bl = (int)(guajibuff.GivingRate * levelBl * daoyouLevelupConfig.guajiGrowup * 0.01f * 0.01f); return bl; break; case 3: levelBl = daoyouguajiResourcLevel.para3; bl = (int)(guajibuff.GivingRate * levelBl * daoyouLevelupConfig.guajiGrowup * 0.01f * 0.01f); return bl; break; case 4: levelBl = daoyouguajiResourcLevel.para4; bl = (int)(guajibuff.GivingRate * levelBl * daoyouLevelupConfig.guajiGrowup * 0.01f * 0.01f); return bl; break; case 5: levelBl = daoyouguajiResourcLevel.para1; bl = (int)(guajibuff.GivingRate * levelBl * daoyouLevelupConfig.guajiGrowup * 0.01f * 0.001f); return bl; break; default: return 0; } } private void SetConfigs() { gameConstantConfig = ConfigComponent.Instance.Get(1); } private void InitGameData() { GongFaControl = new GongFaControl(); FaBaoControl = new FaBaoControl(); BagController = new BagController(); HeroInfo heroInfo = new HeroInfo(); AccountFileInfo.Instance.playerData.heroData.TaoismSkillId = 601011; heroInfo.InitHero(AccountFileInfo.Instance.playerData.heroData); myHero = heroInfo; myHero.TaoismSkillId = 601011; BagController.Init(); //初始化关卡 CurrentPlaces = GetPlacesData(GetMaxPlacesId()); StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update); StaticUpdater.Instance.AddRenderUpdateCallBack(Update); } private float timer; public int GetMaxPlacesId() { int placesId = AccountFileInfo.Instance.playerData.placesDatas.Max(p => p.id); return placesId; } public AccountFileInfo.PlacesData GetPlacesData(int placesId) { return AccountFileInfo.Instance.playerData.placesDatas.FirstOrDefault(p => p.id == placesId); } public float GetMapBl(int map) { AccountFileInfo.PlacesData placesData = GetPlacesData(map); if (placesData == null) return 0; PlacesConfig placesConfig = ConfigComponent.Instance.Get(map); if (placesConfig.TotalScore == 0) { return 0; } return ((float)placesData.progress / placesConfig.TotalScore) * 100; // AccountFileInfo.Instance.playerData.completeEvents.Where(ce =>placesConfig.MainTaskID.Contains(ce.eventID) || placesConfig.ZhixianID.Contains(ce.eventID) || placesConfig.ZhixianID.Contains(ce.1001 // )) } List removeKey = new List(); private bool isUpdate = false; private void Update() { timer += Time.deltaTime; if (timer > 1) { timer = 0; // PlayerManager.Instance.myHero.heroData.exp += myHero.powerUpConfig.AutoXiuwei; // AccountFileInfo.Instance.SavePlayerData(); } //每天刷新 if (TimeHelper.ClientNow() > AccountFileInfo.Instance.playerData.nextRefence) { AccountFileInfo.Instance.playerData.nextRefence = TimeHelper.GetBaseRefreshTime(TimeHelper.ClientNow()); AccountFileInfo.Instance.playerData.todayUseExpElixrPanelCount = 0; AccountFileInfo.Instance.SavePlayerData(); } foreach (var keyValuePair in GuaijiDaoYou) { if (TimeHelper.ClientNow() > keyValuePair.Key) { //判断概率给奖励 isUpdate = true; foreach (var daoYouData in keyValuePair.Value) { DaoyouModelConfig daoyouModelConfig = ConfigComponent.Instance.Get(daoYouData.id); int bl = GetBl(daoYouData, daoyouModelConfig.guajiBuffID[0]); int randomValue1 = Random.Range(0, 101); LogTool.Log("道友随机怪率:" + randomValue1 + " 比例:" + bl); if (randomValue1 >= bl) { for (var i = 1; i < daoyouModelConfig.guajiBuffID.Length; i++) { int count = GetBl(daoYouData, daoyouModelConfig.guajiBuffID[i]); guajibuff guajibuff = ConfigComponent.Instance.Get(daoyouModelConfig.guajiBuffID[i]); switch (guajibuff.paraValue) { case 1: BagController.AddItem(1003, count); LogTool.Log("道友获得道具id:" + 1003 + " 数量:" + count); break; case 2: BagController.AddItem(1001, count); LogTool.Log("道友获得道具id:" + 1001 + " 数量:" + count); break; case 3: BagController.AddItem(1005, count); LogTool.Log("道友获得道具id:" + 1005 + " 数量:" + count); break; case 4: BagController.AddItem(1006, count); LogTool.Log("道友获得道具id:" + 1006 + " 数量:" + count); break; } } } } //移除 removeKey.Add(keyValuePair.Key); } } foreach (var l in removeKey) { GuaijiDaoYou.Remove(l); } if (isUpdate) { EventManager.Instance.Dispatch(CustomEventType.DaoYouCounUpdate, null); isUpdate = false; } } public void AddTestHeroInfo(TestCombatHeroConfig.TestHeroInfoConfig testHeroInfoConfig) { isTest = true; GongFaControl.allSkill.Clear(); SkillConfig[] allSkillConfig = ConfigComponent.Instance.GetAll(); for (int i = 0; i < allSkillConfig.Length; i++) { SkillConfig skillConfig = allSkillConfig[i]; if (skillConfig.level == testHeroInfoConfig.skillStart) { SkillInfo skillInfo = new SkillInfo(skillConfig.ID, testHeroInfoConfig.skillLevel); skillInfo.index = -1; GongFaControl.AddSkillInfo(skillInfo); } } AccountFileInfo.HeroData heroData = new AccountFileInfo.HeroData(); heroData.heroModelId = testHeroInfoConfig.heroID; heroData.heroPowerId = testHeroInfoConfig.level; myHero = new HeroInfo(); myHero.InitHero(heroData); if (testHeroInfoConfig.skill.Count > 0) { GongFaControl.allSkill.Clear(); for (int i = 0; i < testHeroInfoConfig.skill.Count; i++) { SkillInfo skillInfo = new SkillInfo(testHeroInfoConfig.skill[i], testHeroInfoConfig.skillLevel, testHeroInfoConfig.skillStart); skillInfo.index = i; GongFaControl.AddSkillInfo(skillInfo); } } else { SkillInfo[] skillInfos = GongFaControl.allUseSkill; for (int i = 0; i < skillInfos.Length; i++) { if (skillInfos[i] != null) { SkillInfo skillInfo = new SkillInfo(skillInfos[i].skillConfig.IDGroup, testHeroInfoConfig.skillLevel, testHeroInfoConfig.skillStart); skillInfo.index = i; GongFaControl.allUseSkill[i] = skillInfo; } } } if (testHeroInfoConfig.magicWeaponId.Count > 0) { int fbLevel = ((testHeroInfoConfig.level - 1) / 10) + 1; if (fbLevel <= 0) { fbLevel = 1; } for (int i = 0; i < testHeroInfoConfig.magicWeaponId.Count; i++) { FaBaoInfo faBaoInfo = new FaBaoInfo(testHeroInfoConfig.magicWeaponId[i], fbLevel); faBaoInfo.FaBaoData.useIndex = i; FaBaoControl.FightFaBao[i] = faBaoInfo; FaBaoControl.AddFaBao(faBaoInfo); } } // for (int i = 0; i < 4; i++) // { // FaBaoControl.FightFaBao[i] = FaBaoControl.myAllFaBao[i]; // } myHero.hp += testHeroInfoConfig.hp; myHero.attack += testHeroInfoConfig.att; myHero.defense += testHeroInfoConfig.def; myHero.Metal += testHeroInfoConfig.jing; myHero.Wood += testHeroInfoConfig.mu; myHero.Water += testHeroInfoConfig.shui; myHero.Fire += testHeroInfoConfig.huo; myHero.Earth += testHeroInfoConfig.tu; myHero.TaoismSkillId = 601011; myHero.MagicWeaponID.Clear(); myHero.MagicWeaponID.AddRange(FaBaoControl.FightFaBao); // for (int i = 0; i < FaBaoControl.FightFaBao.Length; i++) // { // FaBaoInfo faBaoInfo = FaBaoControl.FightFaBao[i]; // if (faBaoInfo != null) // { // foreach (var VARIABLE in faBaoInfo.attriButedIC) // { // switch (VARIABLE.Key) // { // case 1: // myHero.hp += VARIABLE.Value; // break; // case 2: // myHero.defense += VARIABLE.Value; // break; // case 3: // myHero.attack += VARIABLE.Value; // break; // } // } // } // } } /// /// 保存英雄数据 /// /// public void SaveHeroData(HeroInfo heroInfo) { AccountFileInfo.Instance.playerData.heroData = heroInfo.heroData; AccountFileInfo.Instance.SavePlayerData(); } /// /// 时间(秒)转换位小时分钟秒 /// /// /// public static string TimeToHSM(long miao) { long fen = miao / 60; miao = miao % 60; long xiaoShi = fen / 60; long tian = xiaoShi / 24; xiaoShi = xiaoShi % 24; fen = fen % 60; if (tian > 0) { return $"{tian}天{xiaoShi}小時"; // return string.Format(LanguageManager.Instance.Text(818), tian, xiaoShi); } else { if (xiaoShi <= 0 && fen <= 59) { return $"{fen}分{miao}秒"; // return string.Format(LanguageManager.Instance.Text(819), fen, miao); } else { return $"{xiaoShi}小時{fen}分"; // return string.Format(LanguageManager.Instance.Text(820), xiaoShi, fen); } } } }