FunGame-Testing/Library/Tests/CharacterTest.cs
2025-07-29 00:53:12 +08:00

420 lines
25 KiB
C#

using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
using Oshima.Core.Constant;
using Oshima.FunGame.OshimaModules.Characters;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
using Oshima.FunGame.OshimaModules.Models;
using Oshima.FunGame.OshimaModules.Regions;
using Oshima.FunGame.OshimaModules.Skills;
using Oshima.FunGame.OshimaServers.Model;
using Oshima.FunGame.OshimaServers.Service;
namespace Milimoe.FunGame.Testing.Tests
{
internal class CharacterTest
{
public static async Task CharacterTest1()
{
GamingQueue queue = new(Console.WriteLine);
Character character = new CustomCharacter(0, "");
character.SetLevel(60);
Console.WriteLine(character.GetInfo());
Item item = FunGameConstant.Equipment.Where(i => i.Id == 12515).First();
character.Equip(item);
Console.WriteLine(character.GetInfo());
Character teammate = new MagicalGirl();
Console.ReadKey();
teammate.SetLevel(60);
Skill skill = new (teammate);
teammate.Skills.Add(skill);
skill.GamingQueue = queue;
skill.Character = teammate;
skill.Level++;
skill = new (teammate);
teammate.Skills.Add(skill);
skill.GamingQueue = queue;
skill.Character = teammate;
skill.Level += 6;
skill.OnSkillCasted(queue, teammate, [character]);
skill.OnSkillCasted(queue, teammate, [character]);
Character enemy = new CustomCharacter(1, "敌人");
Console.ReadKey();
enemy.SetLevel(60);
skill = new (enemy);
skill.GamingQueue = queue;
skill.Level += 8;
skill.OnSkillCasted(queue, enemy, [teammate]);
queue.CharacterStatistics[teammate] = new CharacterStatistics();
queue.AddCharacter(teammate, 10);
await queue.TimeLapse();
Console.WriteLine(teammate.GetInfo());
skill = new (enemy);
skill.GamingQueue = queue;
skill.Level += 8;
skill.OnSkillCasted(queue, enemy, [character]);
character.UnEquip(EquipSlotType.Armor);
Console.WriteLine(character.GetInfo());
Console.ReadKey();
character.Equip(item);
Console.WriteLine(character.GetInfo());
Console.ReadKey();
Effect e = character.Effects.First(e => e is );
character.Effects.Remove(e);
e.OnEffectLost(character);
Console.WriteLine(character.GetInfo());
Console.ReadKey();
character.UnEquip(EquipSlotType.Armor);
Console.WriteLine(character.GetInfo());
Console.ReadKey();
}
public static async Task CharacterTest2()
{
int times = 0;
int approval = 0;
InstanceType instanceType = InstanceType.Explore;
Character character1 = new CustomCharacter(1, "测试1-Carry", primaryAttribute: PrimaryAttribute.AGI)
{
Id = 2,
Level = 50,
FirstRoleType = RoleType.Core,
InitialHP = 65,
};
Character character2 = new CustomCharacter(1, "测试A-Tank", primaryAttribute: PrimaryAttribute.STR)
{
Id = 3,
Level = 50,
FirstRoleType = RoleType.Guardian,
InitialHP = 85,
};
Character character3 = new CustomCharacter(1, "测试α-Support", primaryAttribute: PrimaryAttribute.INT)
{
Id = 10,
Level = 50,
FirstRoleType = RoleType.Support,
SecondRoleType = RoleType.Vanguard,
InitialHP = 65,
};
Character character4 = new CustomCharacter(1, "测试Ⅰ-Medic", primaryAttribute: PrimaryAttribute.INT)
{
Id = 4,
Level = 50,
FirstRoleType = RoleType.Medic,
InitialHP = 65,
};
character1.NormalAttack.Level = 8;
character2.NormalAttack.Level = 8;
character3.NormalAttack.Level = 8;
character4.NormalAttack.Level = 8;
character1.Recovery();
character2.Recovery();
character3.Recovery();
character4.Recovery();
FunGameService.AddCharacterSkills(character1, 1, 6, 6);
FunGameService.AddCharacterSkills(character2, 1, 6, 6);
FunGameService.AddCharacterSkills(character3, 1, 6, 6);
FunGameService.AddCharacterSkills(character4, 1, 6, 6);
DropItemByCharacterRoleType(character1);
DropItemByCharacterRoleType(character2);
DropItemByCharacterRoleType(character3);
DropItemByCharacterRoleType(character4);
FunGameService.SetCharacterPrimaryAttribute(character1);
FunGameService.SetCharacterPrimaryAttribute(character2);
FunGameService.SetCharacterPrimaryAttribute(character3);
FunGameService.SetCharacterPrimaryAttribute(character4);
Console.WriteLine(character1.GetInfo());
Console.WriteLine(character2.GetInfo());
Console.WriteLine(character3.GetInfo());
Console.WriteLine(character4.GetInfo());
User user = Factory.GetUser(1, "测试用户");
if (character1.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character1.EquipSlot.MagicCardPack);
if (character1.EquipSlot.Weapon != null) user.Inventory.Items.Add(character1.EquipSlot.Weapon);
if (character1.EquipSlot.Armor != null) user.Inventory.Items.Add(character1.EquipSlot.Armor);
if (character1.EquipSlot.Shoes != null) user.Inventory.Items.Add(character1.EquipSlot.Shoes);
if (character1.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character1.EquipSlot.Accessory1);
if (character1.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character1.EquipSlot.Accessory2);
if (character2.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character2.EquipSlot.MagicCardPack);
if (character2.EquipSlot.Weapon != null) user.Inventory.Items.Add(character2.EquipSlot.Weapon);
if (character2.EquipSlot.Armor != null) user.Inventory.Items.Add(character2.EquipSlot.Armor);
if (character2.EquipSlot.Shoes != null) user.Inventory.Items.Add(character2.EquipSlot.Shoes);
if (character2.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character2.EquipSlot.Accessory1);
if (character2.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character2.EquipSlot.Accessory2);
if (character3.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character3.EquipSlot.MagicCardPack);
if (character3.EquipSlot.Weapon != null) user.Inventory.Items.Add(character3.EquipSlot.Weapon);
if (character3.EquipSlot.Armor != null) user.Inventory.Items.Add(character3.EquipSlot.Armor);
if (character3.EquipSlot.Shoes != null) user.Inventory.Items.Add(character3.EquipSlot.Shoes);
if (character3.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character3.EquipSlot.Accessory1);
if (character3.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character3.EquipSlot.Accessory2);
if (character4.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character4.EquipSlot.MagicCardPack);
if (character4.EquipSlot.Weapon != null) user.Inventory.Items.Add(character4.EquipSlot.Weapon);
if (character4.EquipSlot.Armor != null) user.Inventory.Items.Add(character4.EquipSlot.Armor);
if (character4.EquipSlot.Shoes != null) user.Inventory.Items.Add(character4.EquipSlot.Shoes);
if (character4.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character4.EquipSlot.Accessory1);
if (character4.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character4.EquipSlot.Accessory2);
user.Inventory.Characters.Add(character1);
user.Inventory.Characters.Add(character2);
user.Inventory.Characters.Add(character3);
user.Inventory.Characters.Add(character4);
user.Inventory.Squad = [character1.Id, character2.Id, character3.Id, character4.Id];
Character[] squad = [character1, character2, character3, character4];
while (true)
{
character1.Recovery();
character2.Recovery();
character3.Recovery();
character4.Recovery();
RemoveEffect(character1);
RemoveEffect(character2);
RemoveEffect(character3);
RemoveEffect(character4);
times++;
Console.WriteLine($"账户金币:{user.Inventory.Credits},钻石:{user.Inventory.Materials}.");
if (instanceType == InstanceType.Explore)
{
OshimaRegion region = FunGameConstant.Regions.OrderBy(o => Random.Shared.Next()).First();
ExploreModel model = new()
{
RegionId = region.Id,
CharacterIds = [1, 2, 3, 4],
StartTime = DateTime.Now
};
approval += ((int)region.Difficulty + 1) * 4;
Console.WriteLine($"第 {times} 次探索,难度:{CharacterSet.GetRarityTypeName(region.Difficulty)},消耗 {((int)region.Difficulty + 1) * 4} 探索许可,累计已消耗 {approval} 探索许可。");
await FunGameService.GenerateExploreModel(model, region, [1, 2, 3, 4], user);
Console.WriteLine(FunGameService.GetExploreInfo(model, user.Inventory.Characters, FunGameConstant.Regions));
Console.WriteLine(model.String);
PluginConfig pc2 = new("exploring", user.Id.ToString());
pc2.LoadConfig();
FunGameService.SettleExploreAll(pc2, user, true);
pc2.SaveConfig();
}
else if (instanceType == InstanceType.Currency)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:金币秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
else if (instanceType == InstanceType.Material)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:钻石秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
else if (instanceType == InstanceType.EXP)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:经验秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
else if (instanceType == InstanceType.RegionItem)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:地区锻造材料秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
else if (instanceType == InstanceType.CharacterLevelBreak)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:角色突破材料秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
else if (instanceType == InstanceType.SkillLevelUp)
{
int difficulty = Random.Shared.Next(1, 6);
approval += difficulty * 4;
Console.WriteLine($"第 {times} 次探索,秘境:技能升级材料秘境,难度:{CharacterSet.GetRarityTypeName((RarityType)(difficulty - 1))},消耗 {difficulty * 4} 探索许可,累计已使用 {approval} 探索许可。");
Console.WriteLine(await FunGameService.FightInstance(instanceType, difficulty, user, squad));
}
Console.WriteLine($"账户金币:{user.Inventory.Credits},钻石:{user.Inventory.Materials}.");
ConsoleKey key = Console.ReadKey().Key;
if (key == ConsoleKey.Escape)
{
break;
}
else if (key == ConsoleKey.F3)
{
character1.Items.Clear();
character2.Items.Clear();
character3.Items.Clear();
character4.Items.Clear();
DropItemByCharacterRoleType(character1);
DropItemByCharacterRoleType(character2);
DropItemByCharacterRoleType(character3);
DropItemByCharacterRoleType(character4);
FunGameService.SetCharacterPrimaryAttribute(character1);
FunGameService.SetCharacterPrimaryAttribute(character2);
FunGameService.SetCharacterPrimaryAttribute(character3);
FunGameService.SetCharacterPrimaryAttribute(character4);
Console.WriteLine(character1.GetInfo());
Console.WriteLine(character2.GetInfo());
Console.WriteLine(character3.GetInfo());
Console.WriteLine(character4.GetInfo());
if (character1.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character1.EquipSlot.MagicCardPack);
if (character1.EquipSlot.Weapon != null) user.Inventory.Items.Add(character1.EquipSlot.Weapon);
if (character1.EquipSlot.Armor != null) user.Inventory.Items.Add(character1.EquipSlot.Armor);
if (character1.EquipSlot.Shoes != null) user.Inventory.Items.Add(character1.EquipSlot.Shoes);
if (character1.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character1.EquipSlot.Accessory1);
if (character1.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character1.EquipSlot.Accessory2);
if (character2.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character2.EquipSlot.MagicCardPack);
if (character2.EquipSlot.Weapon != null) user.Inventory.Items.Add(character2.EquipSlot.Weapon);
if (character2.EquipSlot.Armor != null) user.Inventory.Items.Add(character2.EquipSlot.Armor);
if (character2.EquipSlot.Shoes != null) user.Inventory.Items.Add(character2.EquipSlot.Shoes);
if (character2.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character2.EquipSlot.Accessory1);
if (character2.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character2.EquipSlot.Accessory2);
if (character3.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character3.EquipSlot.MagicCardPack);
if (character3.EquipSlot.Weapon != null) user.Inventory.Items.Add(character3.EquipSlot.Weapon);
if (character3.EquipSlot.Armor != null) user.Inventory.Items.Add(character3.EquipSlot.Armor);
if (character3.EquipSlot.Shoes != null) user.Inventory.Items.Add(character3.EquipSlot.Shoes);
if (character3.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character3.EquipSlot.Accessory1);
if (character3.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character3.EquipSlot.Accessory2);
if (character4.EquipSlot.MagicCardPack != null) user.Inventory.Items.Add(character4.EquipSlot.MagicCardPack);
if (character4.EquipSlot.Weapon != null) user.Inventory.Items.Add(character4.EquipSlot.Weapon);
if (character4.EquipSlot.Armor != null) user.Inventory.Items.Add(character4.EquipSlot.Armor);
if (character4.EquipSlot.Shoes != null) user.Inventory.Items.Add(character4.EquipSlot.Shoes);
if (character4.EquipSlot.Accessory1 != null) user.Inventory.Items.Add(character4.EquipSlot.Accessory1);
if (character4.EquipSlot.Accessory2 != null) user.Inventory.Items.Add(character4.EquipSlot.Accessory2);
}
else if (key == ConsoleKey.Z)
{
instanceType = InstanceType.Explore;
Console.WriteLine("已切换至探索模式。");
}
else if (key == ConsoleKey.X)
{
instanceType = InstanceType.Currency;
Console.WriteLine("已切换至金币秘境模式。");
}
else if (key == ConsoleKey.C)
{
instanceType = InstanceType.Material;
Console.WriteLine("已切换至钻石秘境模式。");
}
else if (key == ConsoleKey.A)
{
instanceType = InstanceType.EXP;
Console.WriteLine("已切换至经验秘境模式。");
}
else if (key == ConsoleKey.S)
{
instanceType = InstanceType.RegionItem;
Console.WriteLine("已切换至地区锻造材料秘境模式。");
}
else if (key == ConsoleKey.D)
{
instanceType = InstanceType.CharacterLevelBreak;
Console.WriteLine("已切换至角色突破材料秘境模式。");
}
else if (key == ConsoleKey.F)
{
instanceType = InstanceType.SkillLevelUp;
Console.WriteLine("已切换至技能升级材料秘境模式。");
}
}
}
public static void RemoveEffect(Character character)
{
Effect[] effects = [.. character.Effects];
foreach (Effect effect in effects)
{
if (effect.IsInEffect && effect.DurativeWithoutDuration || (effect.Durative && effect.Duration > 0) || effect.DurationTurn > 0)
{
character.Effects.Remove(effect);
effect.OnEffectLost(character);
}
}
}
public static void DropItemByCharacterRoleType(Character character)
{
long[] magicIds;
(int str, int agi, int intelligence)[] values;
Item? m, w, a, s, ac1, ac2;
switch (character.FirstRoleType)
{
case RoleType.Core:
// 核心
magicIds = [1031, 1002, 1003];
values = [(0, 39, 0), (0, 40, 0), (0, 41, 0)];
m = FunGameService.GenerateMagicCardPack(3, QualityType.Gold, magicIds, values);
if (m != null) character.Equip(m);
w = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 11573);
if (w != null) character.Equip(w);
a = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 12526);
if (a != null) character.Equip(a);
s = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 13525);
if (s != null) character.Equip(s);
ac1 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14545);
if (ac1 != null) character.Equip(ac1);
ac2 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14545);
if (ac2 != null) character.Equip(ac2);
break;
case RoleType.Guardian:
// 近卫
magicIds = [1004, 1038, 1010];
values = [(39, 0, 0), (40, 0, 0), (41, 0, 0)];
m = FunGameService.GenerateMagicCardPack(3, QualityType.Gold, magicIds, values);
if (m != null) character.Equip(m);
w = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 11579);
if (w != null) character.Equip(w);
a = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 12525);
if (a != null) character.Equip(a);
s = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 13526);
if (s != null) character.Equip(s);
ac1 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14552);
if (ac1 != null) character.Equip(ac1);
ac2 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14552);
if (ac2 != null) character.Equip(ac2);
break;
case RoleType.Support:
// 辅助
magicIds = [1049, 1020, 1031];
values = [(37, 0, 2), (0, 10, 30), (0, 10, 31)];
m = FunGameService.GenerateMagicCardPack(3, QualityType.Gold, magicIds, values);
if (m != null) character.Equip(m);
w = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 11578);
if (w != null) character.Equip(w);
a = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 12526);
if (a != null) character.Equip(a);
s = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 13523);
if (s != null) character.Equip(s);
ac1 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14542);
if (ac1 != null) character.Equip(ac1);
ac2 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14542);
if (ac2 != null) character.Equip(ac2);
break;
case RoleType.Medic:
// 治疗
magicIds = [1012, 1044, 1045];
values = [(0, 0, 39), (0, 0, 40), (0, 0, 41)];
m = FunGameService.GenerateMagicCardPack(3, QualityType.Gold, magicIds, values);
if (m != null) character.Equip(m);
w = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 11578);
if (w != null) character.Equip(w);
a = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 12525);
if (a != null) character.Equip(a);
s = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 13523);
if (s != null) character.Equip(s);
ac1 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14548);
if (ac1 != null) character.Equip(ac1);
ac2 = FunGameConstant.Equipment.FirstOrDefault(i => i.Id == 14548);
if (ac2 != null) character.Equip(ac2);
break;
default:
break;
}
foreach (Skill magic in character.Skills)
{
if (magic.IsMagic) magic.Level = 8;
}
}
}
}