mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-22 03:59:35 +08:00
为技能和物品添加更多的序列化内容
This commit is contained in:
parent
671e3eee40
commit
0e6e64a638
@ -347,12 +347,12 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
if (Skills.Active != null) builder.AppendLine($"{Skills.Active.ToString()}");
|
if (Skills.Active != null) builder.AppendLine($"{Skills.Active.ToString()}");
|
||||||
foreach (Skill skill in Skills.Passives)
|
foreach (Skill skill in Skills.Passives)
|
||||||
{
|
{
|
||||||
builder.AppendLine($"{skill.ToString()}");
|
builder.Append($"{skill.ToString()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BackgroundStory != "")
|
if (BackgroundStory != "")
|
||||||
{
|
{
|
||||||
builder.AppendLine("\r\n" + BackgroundStory);
|
builder.AppendLine($"\"{BackgroundStory}\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
@ -369,21 +369,21 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置一些属性给从 <see cref="ItemModule"/> 新建来的 <paramref name="item"/><para/>
|
/// 设置一些属性给从 <see cref="ItemModule"/> 新建来的 <paramref name="newbyItemModule"/><para/>
|
||||||
/// 通常,在使用 JSON 反序列化 Item,且从 <see cref="ItemModule.GetItem(long, string, ItemType)"/> 中获取了实例后,需要使用此方法复制给新实例
|
/// 对于还原存档而言,在使用 JSON 反序列化 Item,且从 <see cref="ItemModule.GetItem"/> 中获取了实例后,需要使用此方法复制给新实例
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item"></param>
|
/// <param name="newbyItemModule"></param>
|
||||||
public void SetPropertyToItemModuleNew(Item item)
|
public void SetPropertyToItemModuleNew(Item newbyItemModule)
|
||||||
{
|
{
|
||||||
item.WeaponType = WeaponType;
|
newbyItemModule.WeaponType = WeaponType;
|
||||||
item.EquipSlotType = EquipSlotType;
|
newbyItemModule.EquipSlotType = EquipSlotType;
|
||||||
item.Equipable = Equipable;
|
newbyItemModule.Equipable = Equipable;
|
||||||
item.IsPurchasable = IsPurchasable;
|
newbyItemModule.IsPurchasable = IsPurchasable;
|
||||||
item.Price = Price;
|
newbyItemModule.Price = Price;
|
||||||
item.IsSellable = IsSellable;
|
newbyItemModule.IsSellable = IsSellable;
|
||||||
item.NextSellableTime = NextSellableTime;
|
newbyItemModule.NextSellableTime = NextSellableTime;
|
||||||
item.IsTradable = IsTradable;
|
newbyItemModule.IsTradable = IsTradable;
|
||||||
item.NextTradableTime = NextTradableTime;
|
newbyItemModule.NextTradableTime = NextTradableTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Milimoe.FunGame.Core.Api.Utility;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
using Milimoe.FunGame.Core.Interface.Base;
|
using Milimoe.FunGame.Core.Interface.Base;
|
||||||
using Milimoe.FunGame.Core.Interface.Entity;
|
using Milimoe.FunGame.Core.Interface.Entity;
|
||||||
|
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
|
|
||||||
namespace Milimoe.FunGame.Core.Entity
|
namespace Milimoe.FunGame.Core.Entity
|
||||||
@ -47,7 +48,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// 技能类型 [ 此项为最高优先级 ]
|
/// 技能类型 [ 此项为最高优先级 ]
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[InitRequired]
|
[InitRequired]
|
||||||
public SkillType SkillType { get; set; }
|
public SkillType SkillType { get; set; } = SkillType.Passive;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否是主动技能 [ 此项为高优先级 ]
|
/// 是否是主动技能 [ 此项为高优先级 ]
|
||||||
@ -168,6 +169,18 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal Skill() { }
|
internal Skill() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置一些属性给从 <see cref="SkillModule"/> 新建来的 <paramref name="newbySkillModule"/><para/>
|
||||||
|
/// 对于还原存档而言,在使用 JSON 反序列化 Skill,且从 <see cref="SkillModule.GetSkill"/> 中获取了实例后,需要使用此方法复制给新实例
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="newbySkillModule"></param>
|
||||||
|
public void SetPropertyToItemModuleNew(Skill newbySkillModule)
|
||||||
|
{
|
||||||
|
newbySkillModule.Enable = Enable;
|
||||||
|
newbySkillModule.IsInEffect = IsInEffect;
|
||||||
|
newbySkillModule.CurrentCD = CurrentCD;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 触发技能升级
|
/// 触发技能升级
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -243,7 +256,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
string type = IsSuperSkill ? "【爆发技】" : (IsMagic ? "【魔法】" : (IsActive ? "【主动】" : "【被动】"));
|
string type = IsSuperSkill ? "【爆发技】" : (IsMagic ? "【魔法】" : (IsActive ? "【主动】" : "【被动】"));
|
||||||
string level = Level > 0 ? " - 等级 " + Level : " - 尚未学习";
|
string level = Level > 0 ? " - 等级 " + Level : " - 尚未学习";
|
||||||
builder.AppendLine(type + Name + level);
|
builder.AppendLine(type + Name + level);
|
||||||
builder.AppendLine("技能描述:" + Description);
|
builder.AppendLine("技能描述:" + (Level == 0 && GeneralDescription.Trim() != "" ? GeneralDescription : Description));
|
||||||
if (CurrentCD > 0)
|
if (CurrentCD > 0)
|
||||||
{
|
{
|
||||||
builder.AppendLine($"正在冷却:剩余 {CurrentCD:0.##} 时间");
|
builder.AppendLine($"正在冷却:剩余 {CurrentCD:0.##} 时间");
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Milimoe.FunGame.Core.Entity;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
|
using Milimoe.FunGame.Core.Entity;
|
||||||
using Milimoe.FunGame.Core.Interface.Addons;
|
using Milimoe.FunGame.Core.Interface.Addons;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
|
|
||||||
@ -37,13 +38,16 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon
|
|||||||
private bool IsLoaded = false;
|
private bool IsLoaded = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 必须重写此方法,用于还原物品后获取还原详细信息
|
/// [可选实现] 在使用 <see cref="EntityModuleConfig{Item}"/> 后,可以按 id + name + type 来匹配已编码的物品
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <param name="type"></param>
|
/// <param name="type"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public abstract Item? GetItem(long id, string name, ItemType type);
|
public virtual Item? GetItem(long id, string name, ItemType type)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载模组
|
/// 加载模组
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Milimoe.FunGame.Core.Entity;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
|
using Milimoe.FunGame.Core.Entity;
|
||||||
using Milimoe.FunGame.Core.Interface.Addons;
|
using Milimoe.FunGame.Core.Interface.Addons;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
|
|
||||||
@ -37,13 +38,16 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon
|
|||||||
private bool IsLoaded = false;
|
private bool IsLoaded = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 必须重写此方法,用于还原技能后获取还原详细信息
|
/// [可选实现] 在使用 <see cref="EntityModuleConfig{Skill}"/> 后,可以按 id + name + type 来匹配已编码的技能
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <param name="type"></param>
|
/// <param name="type"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public abstract Skill? GetSkill(long id, string name, SkillType type);
|
public virtual Skill? GetSkill(long id, string name, SkillType type)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载模组
|
/// 加载模组
|
||||||
|
@ -23,6 +23,15 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
case nameof(Item.Name):
|
case nameof(Item.Name):
|
||||||
result.Name = reader.GetString() ?? "";
|
result.Name = reader.GetString() ?? "";
|
||||||
break;
|
break;
|
||||||
|
case nameof(Item.Description):
|
||||||
|
result.Description = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
|
case nameof(Item.GeneralDescription):
|
||||||
|
result.GeneralDescription = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
|
case nameof(Item.BackgroundStory):
|
||||||
|
result.BackgroundStory = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
case nameof(Item.ItemType):
|
case nameof(Item.ItemType):
|
||||||
result.ItemType = (ItemType)reader.GetInt32();
|
result.ItemType = (ItemType)reader.GetInt32();
|
||||||
break;
|
break;
|
||||||
@ -32,6 +41,9 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
case nameof(Item.EquipSlotType):
|
case nameof(Item.EquipSlotType):
|
||||||
result.EquipSlotType = (EquipSlotType)reader.GetInt32();
|
result.EquipSlotType = (EquipSlotType)reader.GetInt32();
|
||||||
break;
|
break;
|
||||||
|
case nameof(Item.IsInGameItem):
|
||||||
|
result.IsInGameItem = reader.GetBoolean();
|
||||||
|
break;
|
||||||
case nameof(Item.Equipable):
|
case nameof(Item.Equipable):
|
||||||
result.Equipable = reader.GetBoolean();
|
result.Equipable = reader.GetBoolean();
|
||||||
break;
|
break;
|
||||||
@ -46,24 +58,30 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
break;
|
break;
|
||||||
case nameof(Item.NextSellableTime):
|
case nameof(Item.NextSellableTime):
|
||||||
string dateString = reader.GetString() ?? "";
|
string dateString = reader.GetString() ?? "";
|
||||||
if (DateTime.TryParseExact(dateString, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime date))
|
if (DateTime.TryParseExact(dateString, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime sellableDate))
|
||||||
{
|
{
|
||||||
result.NextSellableTime = date;
|
result.NextSellableTime = sellableDate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.NextSellableTime = DateTime.MinValue;
|
||||||
}
|
}
|
||||||
else result.NextSellableTime = DateTime.MinValue;
|
|
||||||
break;
|
break;
|
||||||
case nameof(Item.IsTradable):
|
case nameof(Item.IsTradable):
|
||||||
result.IsTradable = reader.GetBoolean();
|
result.IsTradable = reader.GetBoolean();
|
||||||
break;
|
break;
|
||||||
case nameof(Item.NextTradableTime):
|
case nameof(Item.NextTradableTime):
|
||||||
dateString = reader.GetString() ?? "";
|
dateString = reader.GetString() ?? "";
|
||||||
if (DateTime.TryParseExact(dateString, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out date))
|
if (DateTime.TryParseExact(dateString, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime tradableDate))
|
||||||
{
|
{
|
||||||
result.NextTradableTime = date;
|
result.NextTradableTime = tradableDate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.NextTradableTime = DateTime.MinValue;
|
||||||
}
|
}
|
||||||
else result.NextTradableTime = DateTime.MinValue;
|
|
||||||
break;
|
break;
|
||||||
case nameof(Character.Skills):
|
case nameof(Item.Skills):
|
||||||
SkillGroup skills = NetworkUtility.JsonDeserialize<SkillGroup>(ref reader, options) ?? new();
|
SkillGroup skills = NetworkUtility.JsonDeserialize<SkillGroup>(ref reader, options) ?? new();
|
||||||
result.Skills.Active = skills.Active;
|
result.Skills.Active = skills.Active;
|
||||||
result.Skills.Passives = skills.Passives;
|
result.Skills.Passives = skills.Passives;
|
||||||
@ -77,16 +95,26 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
|
|
||||||
writer.WriteNumber(nameof(Item.Id), (int)value.Id);
|
writer.WriteNumber(nameof(Item.Id), (int)value.Id);
|
||||||
writer.WriteString(nameof(Item.Name), value.Name);
|
writer.WriteString(nameof(Item.Name), value.Name);
|
||||||
|
writer.WriteString(nameof(Item.Description), value.Description);
|
||||||
|
writer.WriteString(nameof(Item.GeneralDescription), value.GeneralDescription);
|
||||||
|
writer.WriteString(nameof(Item.BackgroundStory), value.BackgroundStory);
|
||||||
writer.WriteNumber(nameof(Item.ItemType), (int)value.ItemType);
|
writer.WriteNumber(nameof(Item.ItemType), (int)value.ItemType);
|
||||||
writer.WriteNumber(nameof(Item.WeaponType), (int)value.WeaponType);
|
writer.WriteNumber(nameof(Item.WeaponType), (int)value.WeaponType);
|
||||||
writer.WriteNumber(nameof(Item.EquipSlotType), (int)value.EquipSlotType);
|
writer.WriteNumber(nameof(Item.EquipSlotType), (int)value.EquipSlotType);
|
||||||
|
writer.WriteBoolean(nameof(Item.IsInGameItem), value.IsInGameItem);
|
||||||
writer.WriteBoolean(nameof(Item.Equipable), value.Equipable);
|
writer.WriteBoolean(nameof(Item.Equipable), value.Equipable);
|
||||||
writer.WriteBoolean(nameof(Item.IsPurchasable), value.IsPurchasable);
|
writer.WriteBoolean(nameof(Item.IsPurchasable), value.IsPurchasable);
|
||||||
writer.WriteNumber(nameof(Item.Price), value.Price);
|
writer.WriteNumber(nameof(Item.Price), value.Price);
|
||||||
|
if (!value.IsSellable)
|
||||||
|
{
|
||||||
writer.WriteBoolean(nameof(Item.IsSellable), value.IsSellable);
|
writer.WriteBoolean(nameof(Item.IsSellable), value.IsSellable);
|
||||||
writer.WriteString(nameof(Item.NextSellableTime), value.NextSellableTime.ToString(General.GeneralDateTimeFormat));
|
writer.WriteString(nameof(Item.NextSellableTime), value.NextSellableTime.ToString(General.GeneralDateTimeFormat));
|
||||||
|
}
|
||||||
|
if (!value.IsTradable)
|
||||||
|
{
|
||||||
writer.WriteBoolean(nameof(Item.IsTradable), value.IsTradable);
|
writer.WriteBoolean(nameof(Item.IsTradable), value.IsTradable);
|
||||||
writer.WriteString(nameof(Item.NextTradableTime), value.NextTradableTime.ToString(General.GeneralDateTimeFormat));
|
writer.WriteString(nameof(Item.NextTradableTime), value.NextTradableTime.ToString(General.GeneralDateTimeFormat));
|
||||||
|
}
|
||||||
writer.WritePropertyName(nameof(Item.Skills));
|
writer.WritePropertyName(nameof(Item.Skills));
|
||||||
JsonSerializer.Serialize(writer, value.Skills, options);
|
JsonSerializer.Serialize(writer, value.Skills, options);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
using Milimoe.FunGame.Core.Entity;
|
using Milimoe.FunGame.Core.Entity;
|
||||||
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
@ -22,9 +23,56 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
case nameof(Skill.Name):
|
case nameof(Skill.Name):
|
||||||
result.Name = reader.GetString() ?? "";
|
result.Name = reader.GetString() ?? "";
|
||||||
break;
|
break;
|
||||||
|
case nameof(Skill.Description):
|
||||||
|
result.Description = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
|
case nameof(Skill.GeneralDescription):
|
||||||
|
result.GeneralDescription = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
|
case nameof(Skill.Level):
|
||||||
|
result.Level = reader.GetInt32();
|
||||||
|
break;
|
||||||
case nameof(Skill.SkillType):
|
case nameof(Skill.SkillType):
|
||||||
result.SkillType = (SkillType)reader.GetInt32();
|
result.SkillType = (SkillType)reader.GetInt32();
|
||||||
break;
|
break;
|
||||||
|
case nameof(Skill.Enable):
|
||||||
|
result.Enable = reader.GetBoolean();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.IsInEffect):
|
||||||
|
result.IsInEffect = reader.GetBoolean();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.MPCost):
|
||||||
|
result.MPCost = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.EPCost):
|
||||||
|
result.EPCost = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.CastTime):
|
||||||
|
result.CastTime = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.CD):
|
||||||
|
result.CD = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.CurrentCD):
|
||||||
|
result.CurrentCD = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.HardnessTime):
|
||||||
|
result.HardnessTime = reader.GetDouble();
|
||||||
|
break;
|
||||||
|
case nameof(Skill.Effects):
|
||||||
|
HashSet<Effect> effects = NetworkUtility.JsonDeserialize<HashSet<Effect>>(ref reader, options) ?? [];
|
||||||
|
foreach (Effect effect in effects)
|
||||||
|
{
|
||||||
|
result.Effects.Add(effect);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case nameof(Skill.OtherArgs):
|
||||||
|
Dictionary<string, object> others = NetworkUtility.JsonDeserialize<Dictionary<string, object>>(ref reader, options) ?? [];
|
||||||
|
foreach (string key in others.Keys)
|
||||||
|
{
|
||||||
|
result.OtherArgs.Add(key, others[key]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +82,22 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
|
|
||||||
writer.WriteNumber(nameof(Skill.Id), (int)value.Id);
|
writer.WriteNumber(nameof(Skill.Id), (int)value.Id);
|
||||||
writer.WriteString(nameof(Skill.Name), value.Name);
|
writer.WriteString(nameof(Skill.Name), value.Name);
|
||||||
|
writer.WriteString(nameof(Skill.Description), value.Description);
|
||||||
|
if (value.GeneralDescription.Length > 0) writer.WriteString(nameof(Skill.GeneralDescription), value.GeneralDescription);
|
||||||
|
if (value.Level > 0) writer.WriteNumber(nameof(Skill.Level), value.Level);
|
||||||
writer.WriteNumber(nameof(Skill.SkillType), (int)value.SkillType);
|
writer.WriteNumber(nameof(Skill.SkillType), (int)value.SkillType);
|
||||||
|
if (!value.Enable) writer.WriteBoolean(nameof(Skill.Enable), value.Enable);
|
||||||
|
if (value.IsInEffect) writer.WriteBoolean(nameof(Skill.IsInEffect), value.IsInEffect);
|
||||||
|
if (value.MPCost > 0) writer.WriteNumber(nameof(Skill.MPCost), value.MPCost);
|
||||||
|
if (value.EPCost > 0) writer.WriteNumber(nameof(Skill.EPCost), value.EPCost);
|
||||||
|
if (value.CastTime > 0) writer.WriteNumber(nameof(Skill.CastTime), value.CastTime);
|
||||||
|
if (value.CD > 0) writer.WriteNumber(nameof(Skill.CD), value.CD);
|
||||||
|
if (value.CurrentCD > 0) writer.WriteNumber(nameof(Skill.CurrentCD), value.CurrentCD);
|
||||||
|
if (value.HardnessTime > 0) writer.WriteNumber(nameof(Skill.HardnessTime), value.HardnessTime);
|
||||||
|
writer.WritePropertyName(nameof(Skill.Effects));
|
||||||
|
JsonSerializer.Serialize(writer, value.Effects, options);
|
||||||
|
writer.WritePropertyName(nameof(Skill.OtherArgs));
|
||||||
|
JsonSerializer.Serialize(writer, value.OtherArgs, options);
|
||||||
|
|
||||||
writer.WriteEndObject();
|
writer.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
@ -40,5 +40,10 @@ namespace Milimoe.FunGame.Core.Library.SQLScript.Common
|
|||||||
{
|
{
|
||||||
return $"{Command_Insert} {Command_Into} {TableName} ({Column_ServerName}, {Column_ServerKey}, {Column_LoginTime}) {Command_Values} ('{ServerName}', '{ServerKey}', '{DateTime.Now}')";
|
return $"{Command_Insert} {Command_Into} {TableName} ({Column_ServerName}, {Column_ServerKey}, {Column_LoginTime}) {Command_Values} ('{ServerName}', '{ServerKey}', '{DateTime.Now}')";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string Select_GetLastLoginTime()
|
||||||
|
{
|
||||||
|
return $"{Command_Select} Max({Column_LoginTime}) {Command_From} {TableName}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user