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; }
}