using System.Collections.Generic; using System; using System.Linq; public class AquariumSlotData { public int index { get; set; } public int eggId { set; get; } public int fishItemID { set; get; } public int aquariumFishID { set; get; } /// /// 是否变异 /// public int mutants { set; get; } /// /// maximum quantity 孵化的数量 /// public int fishMQ { set; get; } /// /// 鱼卵开始孵化 /// public DateTime startTime { set; get; } /// /// 孵化时间 /// public float hatchTime { set; get; } /// /// 成长时间 /// public float growthTime { set; get; } /// /// 孵化加速时间 每次加量不会超出当前剩余时间 /// public float accelerationHatch { set; get; } /// /// 成长加速时间 /// public float accelerationGrowth { set; get; } /// /// 多次受伤的恢复时间 /// public float allRecoveryTime { set; get; } public float recoveryTime { set; get; } /// /// 发现受伤时的成长时间 自然时间+加速成长 - 当时全部恢复时间 /// public float injuryGrowthTime { set; get; } /// /// 全部结算的钱 /// public float allCash { get; set; } /// /// 结算的钱 /// public int cash { get; set; } /// /// 鱼从孵化到成熟的时间 孵化间+成长时间-加速孵化-加速成长+恢复时间 /// /// public DateTime FishGrowthTime() { return startTime.AddHours(hatchTime + growthTime - accelerationHatch - accelerationGrowth + allRecoveryTime); } public DateTime FishHatchTime() { return startTime.AddHours(hatchTime - accelerationHatch); } public bool IsResult() { return cash > 0; } public string Serialize() { return $"{index}:{eggId}:{fishItemID}:{aquariumFishID}:{mutants}:{fishMQ}:{startTime.ToBinary()}:{hatchTime}:{growthTime}:{accelerationHatch}:{accelerationGrowth}:{allRecoveryTime}:{recoveryTime}:{injuryGrowthTime}:{allCash}:{cash}"; } public static AquariumSlotData Deserialize(string s) { var parts = s.Split(':'); return new AquariumSlotData { index = int.Parse(parts[0]), eggId = int.Parse(parts[1]), fishItemID = int.Parse(parts[2]), aquariumFishID = int.Parse(parts[3]), mutants = int.Parse(parts[4]), fishMQ = int.Parse(parts[5]), startTime = DateTime.FromBinary(long.Parse(parts[6])), hatchTime = float.Parse(parts[7]), growthTime = float.Parse(parts[8]), accelerationHatch = float.Parse(parts[9]), accelerationGrowth = float.Parse(parts[10]), allRecoveryTime = float.Parse(parts[11]), recoveryTime = float.Parse(parts[12]), injuryGrowthTime = float.Parse(parts[13]), allCash = float.Parse(parts[14]), cash = int.Parse(parts[15]), }; } } public class AquariumHurtData { /// /// lost quantity 被刺数量服务器修改 /// public int fishLQ { set; get; } /// /// 服务器标记受伤 injuryTime > slotData.allRecoveryTime 受新伤 /// public float injuryTime { set; get; } } public class AquariumResultData { /// /// 如果鱼被刺走 /// public string playerID { set; get; } public string displayName { get; set; } public bool IsResult() { return !string.IsNullOrEmpty(playerID); } } public class AquariumManagerData { /// /// 客户端维护数据 /// //CCCCCCCCCCCCCC客户端维护数据CCCCCCCCCCCCCC public DateTime startTime { set; get; } public int mapId { set; get; } = 101; public int slot { set; get; } public List slotDatas { set; get; } //CCCCCCCCCCCCCC客户端维护数据CCCCCCCCCCCCCC //SSSSSSSSSSSSSS结算,服务器刺鱼刺走SSSSSSSSSSSSSS public List aquariumResultDatas { set; get; } public List aquariumHurtDatas { set; get; } //SSSSSSSSSSSSSS被刺鱼受伤SSSSSSSSSSSSSS public int adCount { set; get; } public bool isHome { set; get; } public int startCount { set; get; } public int refreshCount { set; get; } public int refreshDay { set; get; } public string Serialize() { string slotDataStr = string.Join(',', slotDatas.Select(s => s.Serialize())); string resultDatas = string.Join(',', aquariumResultDatas.Select(s => $"{s.playerID}:{s.displayName}")); string hurtDatas = string.Join(',', aquariumHurtDatas.Select(s => $"{s.fishLQ}:{s.injuryTime}")); return $"{startTime.ToBinary()}|{mapId}|{slot}|{slotDataStr}|{resultDatas}|{hurtDatas}|{adCount}|{isHome}|{startCount}|{refreshCount}|{refreshDay}"; } public static AquariumManagerData Deserialize(string s) { var parts = s.Split('|'); var slotDataStrs = parts[3].Split(new char[] { ',' }); var resultDataStrs = parts[4].Split(new char[] { ',' }); var hurtDataStrs = parts[5].Split(new char[] { ',' }); return new AquariumManagerData { startTime = DateTime.FromBinary(long.Parse(parts[0])), mapId = int.Parse(parts[1]), slot = int.Parse(parts[2]), slotDatas = slotDataStrs.Select(s => AquariumSlotData.Deserialize(s)).ToList(), aquariumResultDatas = resultDataStrs.Select(s => { var rParts = s.Split(':'); return new AquariumResultData { playerID = rParts[0], displayName = rParts.Length > 1 ? rParts[1] : "" }; }).ToList(), aquariumHurtDatas = hurtDataStrs.Select(s => { var hParts = s.Split(':'); return new AquariumHurtData { fishLQ = int.Parse(hParts[0]), injuryTime = float.Parse(hParts[1]) }; }).ToList(), adCount = int.Parse(parts[6]), isHome = bool.Parse(parts[7]), startCount = int.Parse(parts[8]), refreshCount = int.Parse(parts[9]), refreshDay = int.Parse(parts[10]), }; } } public class AquariumServerData { public DateTime startTime { set; get; } public int mapId { set; get; } public int slot { set; get; } public List slotDatas { set; get; } public string cardLv { set; get; } public List aquariumResultDatas { set; get; } public List aquariumHurtDatas { set; get; } } public class UpdateAquariumAllDataRequest { public string playFabId { set; get; } public AquariumServerData data { get; set; } } public class GetAquariumDataRequest { public string playFabId { set; get; } } public class GetAquariumDataResp { public int code { set; get; } public string playFabId { set; get; } public AquariumServerData data { get; set; } } public class UpdateSlotDatasRequest { public string playFabId { set; get; } public List slotDatas { set; get; } public string cardLv { set; get; } } public class RobFishRequest { public string playerId { set; get; } /// /// 被抢的人 /// public string playFabId { set; get; } /// /// 被抢的槽位 /// public int slotIndex { set; get; } /// /// 是否抢走 /// public bool isRob { set; get; } }