Files
MinFt/Client/Assets/Scripts/Aquarium/DataCenter/AquariumModel.cs
2026-04-27 12:07:32 +08:00

262 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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; }
/// <summary>
/// 是否变异
/// </summary>
public int mutants { set; get; }
/// <summary>
/// maximum quantity 孵化的数量
/// </summary>
public int fishMQ { set; get; }
/// <summary>
/// 鱼卵开始孵化
/// </summary>
public DateTime startTime { set; get; }
/// <summary>
/// 孵化时间
/// </summary>
public float hatchTime { set; get; }
/// <summary>
/// 成长时间
/// </summary>
public float growthTime { set; get; }
/// <summary>
/// 孵化加速时间 每次加量不会超出当前剩余时间
/// </summary>
public float accelerationHatch { set; get; }
/// <summary>
/// 成长加速时间
/// </summary>
public float accelerationGrowth { set; get; }
/// <summary>
/// 多次受伤的恢复时间
/// </summary>
public float allRecoveryTime { set; get; }
public float recoveryTime { set; get; }
/// <summary>
/// 发现受伤时的成长时间 自然时间+加速成长 - 当时全部恢复时间
/// </summary>
public float injuryGrowthTime { set; get; }
/// <summary>
/// 全部结算的钱
/// </summary>
public float allCash { get; set; }
/// <summary>
/// 结算的钱
/// </summary>
public int cash { get; set; }
/// <summary>
/// 鱼从孵化到成熟的时间 孵化间+成长时间-加速孵化-加速成长+恢复时间
/// </summary>
/// <returns></returns>
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
{
/// <summary>
/// lost quantity 被刺数量服务器修改
/// </summary>
public int fishLQ { set; get; }
/// <summary>
/// 服务器标记受伤 injuryTime > slotData.allRecoveryTime 受新伤
/// </summary>
public float injuryTime { set; get; }
}
public class AquariumResultData
{
/// <summary>
/// 如果鱼被刺走
/// </summary>
public string playerID { set; get; }
public string displayName { get; set; }
public bool IsResult()
{
return !string.IsNullOrEmpty(playerID);
}
}
public class AquariumManagerData
{
/// <summary>
/// 客户端维护数据
/// </summary>
//CCCCCCCCCCCCCC客户端维护数据CCCCCCCCCCCCCC
public DateTime startTime { set; get; }
public int mapId { set; get; } = 101;
public int slot { set; get; }
public List<AquariumSlotData> slotDatas { set; get; }
//CCCCCCCCCCCCCC客户端维护数据CCCCCCCCCCCCCC
//SSSSSSSSSSSSSS结算服务器刺鱼刺走SSSSSSSSSSSSSS
public List<AquariumResultData> aquariumResultDatas { set; get; }
public List<AquariumHurtData> 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<AquariumSlotData> slotDatas { set; get; }
public string cardLv { set; get; }
public List<AquariumResultData> aquariumResultDatas { set; get; }
public List<AquariumHurtData> 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<AquariumSlotData> slotDatas { set; get; }
public string cardLv { set; get; }
}
public class RobFishRequest
{
public string playerId { set; get; }
/// <summary>
/// 被抢的人
/// </summary>
public string playFabId { set; get; }
/// <summary>
/// 被抢的槽位
/// </summary>
public int slotIndex { set; get; }
/// <summary>
/// 是否抢走
/// </summary>
public bool isRob { set; get; }
}