物品添加分类和标签属性;修复AI自动化死循环问题;活动和任务系统改进

This commit is contained in:
milimoe 2025-12-24 00:35:30 +08:00
parent 82d8f927fe
commit 11afb4dc95
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
6 changed files with 59 additions and 14 deletions

View File

@ -86,21 +86,22 @@ namespace Milimoe.FunGame.Core.Entity
if (Status != newState) if (Status != newState)
{ {
Status = newState; Status = newState;
foreach (Quest quest in Quests) }
foreach (Quest quest in Quests)
{
if (Status == ActivityState.InProgress)
{ {
if (newState == ActivityState.InProgress) if (quest.Status == QuestState.NotStarted && quest.QuestType == QuestType.Progressive)
{ {
if (quest.Status == QuestState.NotStarted && quest.QuestType == QuestType.Progressive) quest.Status = QuestState.InProgress;
{
quest.Status = QuestState.InProgress;
}
} }
else if (newState == ActivityState.Ended) }
else if (Status == ActivityState.Ended)
{
if (quest.Status == QuestState.NotStarted || quest.Status == QuestState.InProgress)
{ {
if (quest.Status == QuestState.NotStarted || quest.Status == QuestState.InProgress) quest.Status = QuestState.Missed;
{
quest.Status = QuestState.Missed;
}
} }
} }
} }
@ -149,15 +150,23 @@ namespace Milimoe.FunGame.Core.Entity
UserGetActivityInfo?.Invoke(args); UserGetActivityInfo?.Invoke(args);
} }
public string ToString(bool showQuests) public string ToString(bool showQuests, bool isSubActivity = false)
{ {
UpdateState(); UpdateState();
StringBuilder builder = new(); StringBuilder builder = new();
builder.AppendLine($"☆--- {Name} ---☆"); if (!isSubActivity)
{
builder.AppendLine($"☆--- {Name} ---☆");
}
else
{
builder.AppendLine($"==[ {Name} ]==");
}
builder.AppendLine($"{Description}"); builder.AppendLine($"{Description}");
builder.AppendLine($"活动状态:{CommonSet.GetActivityStatus(Status)}"); builder.AppendLine($"活动状态:{CommonSet.GetActivityStatus(Status)}");
builder.AppendLine(GetTimeString()); builder.AppendLine(GetTimeString(!isSubActivity));
if (showQuests && Quests.Count > 0) if (showQuests && Quests.Count > 0)
{ {

View File

@ -7,6 +7,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
public string Description { get; set; } = ""; public string Description { get; set; } = "";
public QuestState Status { get; set; } = QuestState.NotStarted; public QuestState Status { get; set; } = QuestState.NotStarted;
public bool Global { get; set; } = false;
public long CharacterId { get; set; } = 0; public long CharacterId { get; set; } = 0;
public long RegionId { get; set; } = 0; public long RegionId { get; set; } = 0;
public string NeedyExploreCharacterName { get; set; } = ""; public string NeedyExploreCharacterName { get; set; } = "";

View File

@ -32,6 +32,16 @@ namespace Milimoe.FunGame.Core.Entity
/// </summary> /// </summary>
public virtual string BackgroundStory { get; set; } = ""; public virtual string BackgroundStory { get; set; } = "";
/// <summary>
/// 物品的分类
/// </summary>
public virtual string Category { get; set; } = "";
/// <summary>
/// 物品的标签
/// </summary>
public virtual List<string> Tags { get; set; } = [];
/// <summary> /// <summary>
/// 物品类型 /// 物品类型
/// </summary> /// </summary>
@ -448,6 +458,7 @@ namespace Milimoe.FunGame.Core.Entity
if (itemtype != "") itemtype = $" {itemtype}"; if (itemtype != "") itemtype = $" {itemtype}";
builder.AppendLine($"{itemquality + itemtype}"); builder.AppendLine($"{itemquality + itemtype}");
if (!string.IsNullOrWhiteSpace(Category)) builder.AppendLine(Category);
if (isShowInStore && Price > 0) if (isShowInStore && Price > 0)
{ {
@ -593,6 +604,7 @@ namespace Milimoe.FunGame.Core.Entity
if (sellandtrade.Count > 0) builder.AppendLine(string.Join(" ", sellandtrade).Trim()); if (sellandtrade.Count > 0) builder.AppendLine(string.Join(" ", sellandtrade).Trim());
if (Description != "") builder.AppendLine($"{Description}"); if (Description != "") builder.AppendLine($"{Description}");
if (IsEquipment && Character != null) builder.AppendLine($"装备于:{Character.ToStringWithLevelWithOutUser()}"); if (IsEquipment && Character != null) builder.AppendLine($"装备于:{Character.ToStringWithLevelWithOutUser()}");
if (Tags.Count > 0) builder.AppendLine($"标签:{string.Join("", Tags)}");
} }
return builder.ToString(); return builder.ToString();

View File

@ -35,6 +35,16 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
case nameof(Item.BackgroundStory): case nameof(Item.BackgroundStory):
result.BackgroundStory = reader.GetString() ?? ""; result.BackgroundStory = reader.GetString() ?? "";
break; break;
case nameof(Item.Category):
result.Category = reader.GetString() ?? "";
break;
case nameof(Item.Tags):
string[] tags = NetworkUtility.JsonDeserialize<string[]>(ref reader, options) ?? [];
foreach (string tag in tags)
{
result.Tags.Add(tag);
}
break;
case nameof(Item.ItemType): case nameof(Item.ItemType):
result.ItemType = (ItemType)reader.GetInt32(); result.ItemType = (ItemType)reader.GetInt32();
break; break;
@ -129,6 +139,9 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
writer.WriteString(nameof(Item.Description), value.Description); writer.WriteString(nameof(Item.Description), value.Description);
writer.WriteString(nameof(Item.GeneralDescription), value.GeneralDescription); writer.WriteString(nameof(Item.GeneralDescription), value.GeneralDescription);
writer.WriteString(nameof(Item.BackgroundStory), value.BackgroundStory); writer.WriteString(nameof(Item.BackgroundStory), value.BackgroundStory);
writer.WriteString(nameof(Item.Category), value.Category);
writer.WritePropertyName(nameof(Item.Tags));
JsonSerializer.Serialize(writer, value.Tags, options);
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);

View File

@ -32,6 +32,9 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
case nameof(Quest.Status): case nameof(Quest.Status):
result.Status = (QuestState)reader.GetInt32(); result.Status = (QuestState)reader.GetInt32();
break; break;
case nameof(Quest.Global):
result.Global = reader.GetBoolean();
break;
case nameof(Quest.CharacterId): case nameof(Quest.CharacterId):
result.CharacterId = reader.GetInt64(); result.CharacterId = reader.GetInt64();
break; break;
@ -109,6 +112,7 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
writer.WriteString(nameof(Quest.Name), value.Name); writer.WriteString(nameof(Quest.Name), value.Name);
writer.WriteString(nameof(Quest.Description), value.Description); writer.WriteString(nameof(Quest.Description), value.Description);
writer.WriteNumber(nameof(Quest.Status), (int)value.Status); writer.WriteNumber(nameof(Quest.Status), (int)value.Status);
writer.WriteBoolean(nameof(Quest.Global), value.Global);
writer.WriteNumber(nameof(Quest.CharacterId), value.CharacterId); writer.WriteNumber(nameof(Quest.CharacterId), value.CharacterId);
writer.WriteNumber(nameof(Quest.RegionId), value.RegionId); writer.WriteNumber(nameof(Quest.RegionId), value.RegionId);
writer.WriteString(nameof(Quest.NeedyExploreCharacterName), value.NeedyExploreCharacterName); writer.WriteString(nameof(Quest.NeedyExploreCharacterName), value.NeedyExploreCharacterName);

View File

@ -1486,6 +1486,12 @@ namespace Milimoe.FunGame.Core.Model
} }
} }
if (!decided && (isAI || cancelTimes == 0))
{
baseTime += 5;
type = CharacterActionType.EndTurn;
}
if (type == CharacterActionType.None) if (type == CharacterActionType.None)
{ {
WriteLine($"[ {character} ] 放弃了行动!"); WriteLine($"[ {character} ] 放弃了行动!");