using asap.core; using cfg; using game; using GameCore; using Newtonsoft.Json; using Spine; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using SideGameFromFishing; using UnityEngine; public class AquariumShooterFishManager { private cfg.Tables _tables; public AquariumServerData serverData { get; private set; } public int MapId => serverData?.mapId ?? 101; public List HuntResult { get; private set; } public List DropID { get; private set; } public AquariumShooterFishManager() { _tables = GContext.container.Resolve(); // [REMOVED] CustomServerMgr deleted } void RobotSetFish(MapData mapData, AquariumSlotData aquariumSlotData, AquariumEgg tankEgg) { //权重取鱼 List FishIDList; List fishList = mapData.DropFishList; float allProb = tankEgg.HatchFishQualityProb.Sum(); float prob = UnityEngine.Random.Range(0, allProb); float curProb = 0; int fishQuality = tankEgg.HatchFishQuality[^1]; for (int k = 0; k < tankEgg.HatchFishQuality.Count; k++) { curProb += tankEgg.HatchFishQualityProb[k]; if (curProb > prob) { fishQuality = tankEgg.HatchFishQuality[k]; break; } } //品质大于6??? if (6 > fishQuality) { FishIDList = fishList[fishQuality - 1].FishIDList; aquariumSlotData.fishItemID = FishIDList[UnityEngine.Random.Range(0, FishIDList.Count)]; } else { FishIDList = _tables.TbAquariumConfig.AquariumSpFishList; aquariumSlotData.fishItemID = FishIDList[UnityEngine.Random.Range(0, FishIDList.Count)]; } aquariumSlotData.aquariumFishID = fishQuality; } void RobotSetFishCount(AquariumSlotData aquariumSlotData, AquariumEgg tankEgg) { int allProb = tankEgg.HatchFishQuantityProb.Sum(); int prob = UnityEngine.Random.Range(0, allProb); int curProb = 0; int fishCount = tankEgg.HatchFishQuantity[0]; for (int k = 0; k < tankEgg.HatchFishQuantity.Count; k++) { curProb += tankEgg.HatchFishQuantityProb[k]; if (curProb > prob) { fishCount = tankEgg.HatchFishQuantity[k]; break; } } aquariumSlotData.fishMQ = fishCount; } void RobotSetTime(AquariumSlotData aquariumSlotData, AquariumEgg tankEgg) { AquariumFish tankFish = _tables.TbAquariumFish.GetOrDefault(aquariumSlotData.aquariumFishID); aquariumSlotData.growthTime = UnityEngine.Random.Range(tankFish.GrowthTime[0], tankFish.GrowthTime[1]); aquariumSlotData.hatchTime = UnityEngine.Random.Range(tankEgg.HatchTime[0], tankEgg.HatchTime[1]); aquariumSlotData.mutants = 0; for (int j = 0; j < aquariumSlotData.fishMQ; j++) { if (UnityEngine.Random.Range(0, 1f) < tankFish.MutantProb) { aquariumSlotData.mutants++; } } } public string[] GetCardLv() { if (string.IsNullOrEmpty(serverData.cardLv)) { var robots = new List(_tables.TbRobot.DataList); var robot = robots[UnityEngine.Random.Range(0, robots.Count)]; var slotDatas = serverData.slotDatas; List cardLv = new List(); for (int i = 0; i < slotDatas.Count; i++) { var fishItem = _tables.TbItem.GetOrDefault(slotDatas[i].fishItemID); if (fishItem.Quality <= robot.FishcardLevel.Count) { cardLv.Add(robot.FishcardLevel[fishItem.Quality - 1]); } else { cardLv.Add(0); } } serverData.cardLv = string.Join(",", cardLv); } return serverData.cardLv.Split(','); } AquariumServerData SetRobot(string playFabId) { int b = Convert.ToInt32(playFabId, 16); Robot robot = _tables.TbRobot.GetOrDefault(b); string AquariumServerDataStr = PlayerPrefs.GetString("AquariumServerData" + playFabId[^1]); DateTime dateTime = ZZTimeHelper.UtcNow(); AquariumServerData localServerData = new AquariumServerData(); if (!string.IsNullOrEmpty(AquariumServerDataStr)) { try { localServerData = JsonConvert.DeserializeObject(AquariumServerDataStr); //防止改时间导致的机器人数据错误(蛋未孵化) if (localServerData.startTime < ZZTimeHelper.UtcNow()) { Debug.Log($"nextOpponent InitFish SetRobotMapId {localServerData.mapId}"); return localServerData; } } catch (Exception) { Debug.LogError("AquariumServerDataStr Error"); } } localServerData.mapId = GContext.container.Resolve().RobotMapId; localServerData.startTime = ZZTimeHelper.UtcNow(); localServerData.slot = robot.HatchEggPots; List slotData = new List(); List aquariumResultDatas = new List(); List aquariumHurtDatas = new List(); List TankEggList = _tables.TbAquariumEgg.DataList; float eggAllWeight = -0.0001f; for (int i = 0; i < TankEggList.Count; i++) { eggAllWeight += TankEggList[i].Weight; } bool isGrowth = false; MapData mapData = _tables.TbMapData.GetOrDefault(localServerData.mapId); PlayerFishData playerFishData = GContext.container.Resolve(); List cardLv = new List(); for (int i = 0; i < localServerData.slot; i++) { AquariumSlotData aquariumSlotData = new AquariumSlotData(); //权重取蛋 float eggWeight = UnityEngine.Random.Range(0, eggAllWeight); float curEggWeight = 0; AquariumEgg tankEgg = TankEggList[0]; foreach (var item in TankEggList) { curEggWeight += item.Weight; if (curEggWeight > eggWeight) { tankEgg = item; break; } } aquariumSlotData.eggId = tankEgg.ID; RobotSetFish(mapData, aquariumSlotData, tankEgg); //取鱼的数量 RobotSetFishCount(aquariumSlotData, tankEgg); RobotSetTime(aquariumSlotData, tankEgg); aquariumSlotData.startTime = dateTime; if (robot != null) { if (robot.HatchProb > UnityEngine.Random.Range(0, 1f)) { isGrowth = true; aquariumSlotData.accelerationHatch = aquariumSlotData.hatchTime + 1; aquariumSlotData.accelerationGrowth = aquariumSlotData.growthTime * UnityEngine.Random.Range(robot.MatureProgress[0], robot.MatureProgress[1]); } } aquariumSlotData.index = i; slotData.Add(aquariumSlotData); //机器人鱼卡等级 var fishItem = _tables.TbItem.GetOrDefault(aquariumSlotData.fishItemID); if (fishItem.Quality <= robot.FishcardLevel.Count) { cardLv.Add(robot.FishcardLevel[fishItem.Quality - 1]); } else { cardLv.Add(0); } aquariumResultDatas.Add(new AquariumResultData()); aquariumHurtDatas.Add(new AquariumHurtData()); } if (!isGrowth) { slotData[0].accelerationHatch = slotData[0].hatchTime + 1; slotData[0].accelerationGrowth = slotData[0].growthTime * UnityEngine.Random.Range(robot.MatureProgress[0], robot.MatureProgress[1]); } localServerData.slotDatas = slotData; localServerData.cardLv = string.Join(",", cardLv); localServerData.aquariumResultDatas = aquariumResultDatas; localServerData.aquariumHurtDatas = aquariumHurtDatas; PlayerPrefs.SetString("AquariumServerData" + playFabId[^1], JsonConvert.SerializeObject(localServerData)); //保存 数据 return localServerData; } public AquariumServerData GetDataFishHuntInit(string playFabId, FishHuntInit inti) { int b = Convert.ToInt32(playFabId, 16); Robot robot = _tables.TbRobot.GetOrDefault(b); HuntResult = inti.HuntResult; DropID = inti.DropID; DateTime dateTime = ZZTimeHelper.UtcNow(); AquariumServerData localServerData = new AquariumServerData(); localServerData.mapId = inti.MapID; localServerData.startTime = ZZTimeHelper.UtcNow(); List Fishlist = inti.Fishlist; List FishQuatitylist = inti.FishQuatitylist; List FishQualitylist = inti.FishQualitylist; List FishMutantlist = inti.FishMutantlist; List FishGrowthlist = inti.FishGrowthlist; localServerData.slot = Fishlist.Count; List slotData = new List(); List aquariumResultDatas = new List(); List aquariumHurtDatas = new List(); List cardLv = new List(); for (int i = 0; i < localServerData.slot; i++) { AquariumSlotData aquariumSlotData = new AquariumSlotData(); aquariumSlotData.eggId = 1; aquariumSlotData.fishItemID = Fishlist[i]; aquariumSlotData.aquariumFishID = FishQualitylist[i]; aquariumSlotData.fishMQ = FishQuatitylist[i]; aquariumSlotData.startTime = dateTime; aquariumSlotData.hatchTime = 1; aquariumSlotData.growthTime = 1; aquariumSlotData.accelerationHatch = 1.1f; aquariumSlotData.accelerationGrowth = aquariumSlotData.growthTime * FishGrowthlist[i]; aquariumSlotData.mutants = FishMutantlist[i]; aquariumSlotData.index = i; slotData.Add(aquariumSlotData); var fishItem = _tables.TbItem.GetOrDefault(aquariumSlotData.fishItemID); if (fishItem.Quality <= robot.FishcardLevel.Count) { cardLv.Add(robot.FishcardLevel[fishItem.Quality - 1]); } else { cardLv.Add(0); } aquariumResultDatas.Add(new AquariumResultData()); aquariumHurtDatas.Add(new AquariumHurtData()); } localServerData.slotDatas = slotData; localServerData.cardLv = string.Join(",", cardLv); localServerData.aquariumResultDatas = aquariumResultDatas; localServerData.aquariumHurtDatas = aquariumHurtDatas; serverData = localServerData; //保存 数据 return serverData; } public async Task GetData(string playFabId, bool isRobot, bool canEmpty) { HuntResult = null; DropID = null; if (isRobot) { serverData = SetRobot(playFabId); return serverData; } GetAquariumDataRequest request = new GetAquariumDataRequest(); request.playFabId = playFabId; // [REMOVED] CustomServerMgr deleted return serverData; } void NewSlotInitData(AquariumInit init, AquariumServerData data) { data.mapId = init.MapID; List slotDatas = new List(); List aquariumHurtDatas = new List(); List aquariumResultDatas = new List(); DateTime dateTime = ZZTimeHelper.UtcNow(); List Egglist = init.Egglist; List FishQualitylist = init.FishQualitylist; List FishList = init.Fishlist; List FishQuatitylist = init.FishQuatitylist; List FishMutantlist = init.FishMutantlist; for (int i = 0; i < data.slot; i++) { AquariumSlotData aquariumSlotData = new AquariumSlotData(); aquariumSlotData.eggId = Egglist[i]; aquariumSlotData.aquariumFishID = FishQualitylist[i]; aquariumSlotData.fishMQ = FishQuatitylist[i]; aquariumSlotData.fishItemID = FishList[i]; var tankEgg = _tables.TbAquariumEgg.GetOrDefault(Egglist[i]); aquariumSlotData.startTime = dateTime; aquariumSlotData.hatchTime = UnityEngine.Random.Range(tankEgg.HatchTime[0], tankEgg.HatchTime[1]); AquariumFish aquariumFish = _tables.TbAquariumFish.GetOrDefault(FishQualitylist[i]); aquariumSlotData.growthTime = UnityEngine.Random.Range(aquariumFish.GrowthTime[0], aquariumFish.GrowthTime[1]); aquariumSlotData.mutants = FishMutantlist[i]; aquariumSlotData.index = i; slotDatas.Add(aquariumSlotData); AquariumHurtData aquariumHurtData = new AquariumHurtData(); aquariumHurtDatas.Add(aquariumHurtData); AquariumResultData aquariumResultData = new AquariumResultData(); aquariumResultDatas.Add(aquariumResultData); } data.slotDatas = slotDatas; data.aquariumHurtDatas = aquariumHurtDatas; data.aquariumResultDatas = aquariumResultDatas; } public int RobFishRequest(int changeTargetCount, int multiple, string playFabId, int groupId, int index, int getGlodCount, bool isRob, OpponentItemData opponentItemData) { GContext.container.Resolve().SaveFishHuntGameCount(); // GContext.container.Resolve().UpdateTaskData(0, multiple); //礼包加分 SideGameFromFishingManager.AddFishRaidProgress(multiple); AquariumSlotData slotData = serverData.slotDatas[groupId]; AquariumFish aquariumFish = _tables.TbAquariumFish.GetOrDefault(slotData.aquariumFishID); SuperHunt superHunt = GContext.container.Resolve().GetWeelyBuffTimeData(); float superCashBonus = 0; if (superHunt != null) { superCashBonus = superHunt.CashBonus; } //itemDatas.count *= (1 + superCashBonus); //获取奖励 GContext.container.Resolve().AddItemCount(1002, getGlodCount, null); int addRankCount = 0; var _fishingEventData = GContext.container.Resolve(); if (_fishingEventData.rankInit != null) { int point = _fishingEventData.rankInit.PointRobbery[1]; if (isRob) { point = _fishingEventData.rankInit.PointRobbery[2]; } if (index < slotData.mutants) { point += _fishingEventData.rankInit.PointRobbery[3]; } addRankCount = point * multiple; _fishingEventData.AddRankTarget(addRankCount); } else { addRankCount = 0; } if (opponentItemData.isRobot) { int i = groupId; //鱼被刺走 if (isRob) { PlayerPrefs.DeleteKey("AquariumServerData" + playFabId[^1]); } } else if (playFabId.Length > 10) { //通知服务器刺伤谁的鱼 RobFishRequest request = new RobFishRequest(); request.playFabId = playFabId; request.slotIndex = groupId; if (UnityEngine.Random.Range(0, 1f) <= aquariumFish.RealStealProb) { request.isRob = isRob; } request.playerId = GContext.container.Resolve().UserId; // [REMOVED] CustomServerMgr deleted // customServerMgr?.CustomServerPost("aquarium/RobFish", Newtonsoft.Json.JsonConvert.SerializeObject(request)); } #if AGG using (var e = GEvent.GameEvent("fish_raid")) { Item item = _tables.TbItem.GetOrDefault(slotData.fishItemID); e.AddContent("fish_id", item.RedirectID) .AddContent("fish_quality", slotData.aquariumFishID) .AddContent("is_mutant", slotData.mutants > index) .AddContent("result", isRob ? 1 : 0) .AddContent("target_accountid", opponentItemData.isRobot ? "-1" : playFabId) .AddContent("target_group", opponentItemData.target_group) .AddContent("target_source", opponentItemData.target_source) .AddContent("fish_multiple", multiple) .AddContent("target_change_count", changeTargetCount) .AddContent("reward_cash", getGlodCount); } #endif return addRankCount; } }