FunGame-Testing/Library/Tests/ActivityExample.cs
2025-01-22 01:23:02 +08:00

110 lines
4.1 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 Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Testing.Solutions;
using ActivityState = Milimoe.FunGame.Testing.Solutions.ActivityState;
using RedeemResult = Milimoe.FunGame.Testing.Solutions.RedeemResult;
namespace Milimoe.FunGame.Testing.Tests
{
public class ActivityExample
{
public ActivityExample()
{
// 创建活动
Activity activity = new(1, "新年活动", new DateTime(2025, 1, 1, 0, 0, 0), new DateTime(2025, 1, 15, 23, 59, 59));
// 添加任务
Quest continuousQuest = new()
{
Id = 1,
Name = "每日登录",
Description = "每日登录游戏",
EstimatedMinutes = 1,
Awards = new Dictionary<string, int> { { "积分", 10 } },
QuestType = QuestType.Continuous
};
Quest immediateQuest = new()
{
Id = 2,
Name = "新手引导",
Description = "完成新手引导",
Awards = new Dictionary<string, int> { { "积分", 20 } },
QuestType = QuestType.Immediate
};
Quest progressiveQuest = new()
{
Id = 3,
Name = "击败Boss",
Description = "击败Boss",
Awards = new Dictionary<string, int> { { "积分", 30 } },
QuestType = QuestType.Progressive,
MaxProgress = 10,
Progress = 5
};
activity.AddQuest(continuousQuest);
activity.AddQuest(immediateQuest);
activity.AddQuest(progressiveQuest);
// 添加商店物品
Item item1 = Factory.GetItem();
item1.Id = 1;
item1.Name = "金币";
item1.Description = "游戏金币";
Item item2 = Factory.GetItem();
item2.Id = 2;
item2.Name = "道具";
item2.Description = "游戏道具";
activity.Store.AddItem(item1, 100, 10);
activity.Store.AddItem(item2, 200, 10);
// 订阅用户访问检查事件
activity.UserAccessCheck += (sender, e) =>
{
if (e.ActivityState == ActivityState.InProgress)
{
e.AllowAccess = true; // 只有进行中状态才允许访问
}
else
{
Console.WriteLine($"用户 {e.UserId} 尝试访问活动,但当前状态为 {e.ActivityState},不允许访问。");
}
};
// 模拟用户访问
long userId = 123;
Points points = new(userId, 30000);
while (true)
{
activity.UpdateState(); // 定时更新活动状态
if (activity.AllowUserAccess(userId))
{
Console.WriteLine(string.Join("\r\n", activity.Quests));
Console.WriteLine($"用户 {userId} 成功访问活动!");
// 模拟用户兑换物品
RedeemResult result = activity.Store.TryRedeemItem(points, 1);
switch (result)
{
case RedeemResult.Success:
Console.WriteLine($"用户 {userId} 成功兑换了 {item1.Name}");
break;
case RedeemResult.StockNotEnough:
Console.WriteLine($"用户 {userId} 兑换 {item1.Name} 失败,库存不足!");
break;
case RedeemResult.PointsNotEnough:
Console.WriteLine($"用户 {userId} 兑换 {item1.Name} 失败,积分不足!");
break;
}
Console.WriteLine($"用户 {userId} 当前积分:{points.Amount}");
}
//Thread.Sleep(1000); // 每秒检查一次
Console.ReadLine();
}
}
}
}