430 lines
17 KiB
C#
430 lines
17 KiB
C#
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<int> HuntResult { get; private set; }
|
||
public List<int> DropID { get; private set; }
|
||
|
||
public AquariumShooterFishManager()
|
||
{
|
||
_tables = GContext.container.Resolve<Tables>();
|
||
// [REMOVED] CustomServerMgr deleted
|
||
}
|
||
|
||
void RobotSetFish(MapData mapData, AquariumSlotData aquariumSlotData, AquariumEgg tankEgg)
|
||
{
|
||
//权重取鱼
|
||
List<int> FishIDList;
|
||
|
||
List<FishItemList> 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<cfg.Robot>(_tables.TbRobot.DataList);
|
||
var robot = robots[UnityEngine.Random.Range(0, robots.Count)];
|
||
var slotDatas = serverData.slotDatas;
|
||
List<int> cardLv = new List<int>();
|
||
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<AquariumServerData>(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<SmallGameData>().RobotMapId;
|
||
localServerData.startTime = ZZTimeHelper.UtcNow();
|
||
localServerData.slot = robot.HatchEggPots;
|
||
|
||
List<AquariumSlotData> slotData = new List<AquariumSlotData>();
|
||
List<AquariumResultData> aquariumResultDatas = new List<AquariumResultData>();
|
||
List<AquariumHurtData> aquariumHurtDatas = new List<AquariumHurtData>();
|
||
|
||
List<AquariumEgg> 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<PlayerFishData>();
|
||
List<int> cardLv = new List<int>();
|
||
|
||
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<int> Fishlist = inti.Fishlist;
|
||
List<int> FishQuatitylist = inti.FishQuatitylist;
|
||
List<int> FishQualitylist = inti.FishQualitylist;
|
||
List<int> FishMutantlist = inti.FishMutantlist;
|
||
List<float> FishGrowthlist = inti.FishGrowthlist;
|
||
localServerData.slot = Fishlist.Count;
|
||
|
||
List<AquariumSlotData> slotData = new List<AquariumSlotData>();
|
||
List<AquariumResultData> aquariumResultDatas = new List<AquariumResultData>();
|
||
List<AquariumHurtData> aquariumHurtDatas = new List<AquariumHurtData>();
|
||
List<int> cardLv = new List<int>();
|
||
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<AquariumServerData> 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<AquariumSlotData> slotDatas = new List<AquariumSlotData>();
|
||
List<AquariumHurtData> aquariumHurtDatas = new List<AquariumHurtData>();
|
||
List<AquariumResultData> aquariumResultDatas = new List<AquariumResultData>();
|
||
DateTime dateTime = ZZTimeHelper.UtcNow();
|
||
|
||
List<int> Egglist = init.Egglist;
|
||
List<int> FishQualitylist = init.FishQualitylist;
|
||
List<int> FishList = init.Fishlist;
|
||
List<int> FishQuatitylist = init.FishQuatitylist;
|
||
List<int> 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<SmallGameData>().SaveFishHuntGameCount();
|
||
// GContext.container.Resolve<OfferRushDataProvider>().UpdateTaskData(0, multiple);
|
||
//礼包加分
|
||
SideGameFromFishingManager.AddFishRaidProgress(multiple);
|
||
|
||
AquariumSlotData slotData = serverData.slotDatas[groupId];
|
||
AquariumFish aquariumFish = _tables.TbAquariumFish.GetOrDefault(slotData.aquariumFishID);
|
||
SuperHunt superHunt = GContext.container.Resolve<BuffDataCenter>().GetWeelyBuffTimeData<SuperHunt>();
|
||
float superCashBonus = 0;
|
||
if (superHunt != null)
|
||
{
|
||
superCashBonus = superHunt.CashBonus;
|
||
}
|
||
//itemDatas.count *= (1 + superCashBonus);
|
||
//获取奖励
|
||
GContext.container.Resolve<PlayerItemData>().AddItemCount(1002, getGlodCount, null);
|
||
int addRankCount = 0;
|
||
var _fishingEventData = GContext.container.Resolve<FishingEventData>();
|
||
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<IUserService>().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;
|
||
}
|
||
}
|