From 8e65183dc510f88f056f6d66e0edac621d3d0e6f Mon Sep 17 00:00:00 2001 From: milimoe Date: Sun, 13 Apr 2025 01:16:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=8C=E5=8A=A8=E9=A1=BA=E5=BA=8F=E8=A1=A8?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E4=BC=98=E5=8C=96=EF=BC=9B=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B5=84=E6=96=99=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Entity/Item/Item.cs | 2 +- Entity/Skill/NormalAttack.cs | 27 ++++++- Entity/Skill/OpenSkill.cs | 2 +- Entity/Skill/Skill.cs | 6 +- Entity/User/User.cs | 32 ++++++++ Entity/User/UserProfile.cs | 47 +++++++++++ Interface/Entity/Typical/ISkill.cs | 30 +++++++ Library/Constant/ConstantSet.cs | 4 +- Library/Constant/TypeEnum.cs | 11 ++- Model/ActionQueue.cs | 122 ++++++++++++++++------------- 10 files changed, 221 insertions(+), 62 deletions(-) create mode 100644 Entity/User/UserProfile.cs create mode 100644 Interface/Entity/Typical/ISkill.cs diff --git a/Entity/Item/Item.cs b/Entity/Item/Item.cs index 7e14082..d20aecb 100644 --- a/Entity/Item/Item.cs +++ b/Entity/Item/Item.cs @@ -218,7 +218,7 @@ namespace Milimoe.FunGame.Core.Entity { if (!skill.IsActive && skill.Level > 0) { - foreach (Effect e in skill.AddInactiveEffectToCharacter()) + foreach (Effect e in skill.AddPassiveEffectToCharacter()) { e.GamingQueue = skill.GamingQueue; if (Character != null && !Character.Effects.Contains(e)) diff --git a/Entity/Skill/NormalAttack.cs b/Entity/Skill/NormalAttack.cs index 46b1657..3ff8446 100644 --- a/Entity/Skill/NormalAttack.cs +++ b/Entity/Skill/NormalAttack.cs @@ -5,7 +5,7 @@ using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Entity { - public class NormalAttack(Character character, bool isMagic = false, MagicType magicType = MagicType.None) : BaseEntity + public class NormalAttack(Character character, bool isMagic = false, MagicType magicType = MagicType.None) : BaseEntity, ISkill { /// /// 普通攻击名称 @@ -57,6 +57,31 @@ namespace Milimoe.FunGame.Core.Entity /// public double HardnessTime { get; set; } = 10; + /// + /// 可选取自身 + /// + public bool CanSelectSelf { get; set; } = false; + + /// + /// 可选取敌对角色 + /// + public bool CanSelectEnemy { get; set; } = true; + + /// + /// 可选取友方角色 + /// + public bool CanSelectTeammate { get; set; } = false; + + /// + /// 可选取的作用目标数量 + /// + public int CanSelectTargetCount { get; set; } = 1; + + /// + /// 可选取的作用范围 + /// + public double CanSelectTargetRange { get; set; } = 0; + /// /// 对目标(或多个目标)发起普通攻击 /// diff --git a/Entity/Skill/OpenSkill.cs b/Entity/Skill/OpenSkill.cs index 5293faa..22ae70b 100644 --- a/Entity/Skill/OpenSkill.cs +++ b/Entity/Skill/OpenSkill.cs @@ -110,7 +110,7 @@ namespace Milimoe.FunGame.Core.Entity } } - public override IEnumerable AddInactiveEffectToCharacter() + public override IEnumerable AddPassiveEffectToCharacter() { return Effects; } diff --git a/Entity/Skill/Skill.cs b/Entity/Skill/Skill.cs index 84a78f4..4e51b5a 100644 --- a/Entity/Skill/Skill.cs +++ b/Entity/Skill/Skill.cs @@ -9,7 +9,7 @@ namespace Milimoe.FunGame.Core.Entity /// /// 与 不同,构造技能时,建议继承此类再构造 /// - public class Skill : BaseEntity, IActiveEnable + public class Skill : BaseEntity, ISkill, IActiveEnable { /// /// 唯一标识符 [ 只有物品技能需要赋值,用于表示与其关联的物品: ] @@ -253,7 +253,7 @@ namespace Milimoe.FunGame.Core.Entity { if (!IsActive && Level > 0) { - foreach (Effect e in AddInactiveEffectToCharacter()) + foreach (Effect e in AddPassiveEffectToCharacter()) { e.GamingQueue = GamingQueue; if (Character != null && !Character.Effects.Contains(e)) @@ -374,7 +374,7 @@ namespace Milimoe.FunGame.Core.Entity /// 被动技能,需要重写此方法,返回被动特效给角色 [ 此方法会在技能学习时触发 ] /// /// - public virtual IEnumerable AddInactiveEffectToCharacter() + public virtual IEnumerable AddPassiveEffectToCharacter() { return []; } diff --git a/Entity/User/User.cs b/Entity/User/User.cs index de0d214..323928c 100644 --- a/Entity/User/User.cs +++ b/Entity/User/User.cs @@ -1,3 +1,4 @@ +using System.Text; using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Library.Constant; @@ -9,6 +10,7 @@ namespace Milimoe.FunGame.Core.Entity public string Username { get; set; } = ""; public DateTime RegTime { get; set; } public DateTime LastTime { get; set; } + public OnlineState OnlineState { get; set; } = OnlineState.Offline; public string Email { get; set; } = ""; public string NickName { get; set; } = ""; public bool IsAdmin { get; set; } = false; @@ -16,11 +18,13 @@ namespace Milimoe.FunGame.Core.Entity public bool IsEnable { get; set; } = true; public double GameTime { get; set; } = 0; public string AutoKey { get; set; } = ""; + public UserProfile Profile { get; } public UserStatistics Statistics { get; } public Inventory Inventory { get; } internal User() { + Profile = new(); Statistics = new(this); Inventory = new(this); } @@ -38,6 +42,7 @@ namespace Milimoe.FunGame.Core.Entity this.IsEnable = IsEnable; this.GameTime = GameTime; this.AutoKey = AutoKey; + Profile = new(); Statistics = new(this); Inventory = new(this); } @@ -58,6 +63,7 @@ namespace Milimoe.FunGame.Core.Entity Username = UserSet.LocalUserName; break; } + Profile = new(); Statistics = new(this); Inventory = new(this); } @@ -76,5 +82,31 @@ namespace Milimoe.FunGame.Core.Entity } return str; } + + public string GetUserInfo() + { + StringBuilder builder = new(); + + builder.AppendLine($" {Username}Ĵ浵Ϣ "); + builder.AppendLine($" ID{Id}"); + builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameCurrency}{Inventory.Credits:0.00}"); + builder.AppendLine($"{General.GameplayEquilibriumConstant.InGameMaterial}{Inventory.Materials:0.00}"); + builder.AppendLine($"ɫ{Inventory.Characters.Count}"); + builder.AppendLine($"սɫ{Inventory.MainCharacter.ToStringWithLevelWithOutUser()}"); + Character[] squad = [.. Inventory.Characters.Where(c => Inventory.Squad.Contains(c.Id))]; + Dictionary characters = Inventory.Characters + .Select((character, index) => new { character, index }) + .ToDictionary(x => x.character, x => x.index + 1); + builder.AppendLine($"СӳԱ{(squad.Length > 0 ? string.Join(" / ", squad.Select(c => $"[#{characters[c]}]{c.NickName}({c.Level})")) : "")}"); + if (Inventory.Training.Count > 0) + { + builder.AppendLine($"{string.Join(" / ", Inventory.Characters.Where(c => Inventory.Training.ContainsKey(c.Id)).Select(c => c.ToStringWithLevelWithOutUser()))}"); + } + builder.AppendLine($"Ʒ{Inventory.Items.Count}"); + builder.AppendLine($"עʱ䣺{RegTime.ToString(General.GeneralDateTimeFormatChinese)}"); + builder.AppendLine($"ʣ{LastTime.ToString(General.GeneralDateTimeFormatChinese)}"); + + return builder.ToString(); + } } } diff --git a/Entity/User/UserProfile.cs b/Entity/User/UserProfile.cs new file mode 100644 index 0000000..6c34e27 --- /dev/null +++ b/Entity/User/UserProfile.cs @@ -0,0 +1,47 @@ +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Core.Entity +{ + public class UserProfile + { + /// + /// 头像链接 + /// + public string AvatarUrl { get; set; } = ""; + + /// + /// 签名 + /// + public string Signature { get; set; } = ""; + + /// + /// 性别 + /// + public string Gender { get; set; } = ""; + + /// + /// 生日 + /// + public DateTime BirthDay { get; set; } = General.DefaultTime; + + /// + /// 关注者 + /// + public int Followers { get; set; } = 0; + + /// + /// 正在关注 + /// + public int Following { get; set; } = 0; + + /// + /// 头衔 + /// + public string Title { get; set; } = ""; + + /// + /// 用户组 + /// + public string Group { get; set; } = ""; + } +} diff --git a/Interface/Entity/Typical/ISkill.cs b/Interface/Entity/Typical/ISkill.cs new file mode 100644 index 0000000..9fae0a4 --- /dev/null +++ b/Interface/Entity/Typical/ISkill.cs @@ -0,0 +1,30 @@ +namespace Milimoe.FunGame.Core.Interface.Entity +{ + public interface ISkill + { + /// + /// 可选取自身 + /// + public bool CanSelectSelf { get; } + + /// + /// 可选取敌对角色 + /// + public bool CanSelectEnemy { get; } + + /// + /// 可选取友方角色 + /// + public bool CanSelectTeammate { get; } + /// + /// 可选取的作用目标数量 + /// + public int CanSelectTargetCount { get; } + + /// + /// 可选取的作用范围 + /// + public double CanSelectTargetRange { get; } + + } +} diff --git a/Library/Constant/ConstantSet.cs b/Library/Constant/ConstantSet.cs index 9f06bf7..6b89770 100644 --- a/Library/Constant/ConstantSet.cs +++ b/Library/Constant/ConstantSet.cs @@ -145,7 +145,7 @@ namespace Milimoe.FunGame.Core.Library.Constant /** * Room */ - public const string Room_GetRoomSettings = "Room::GetRoomSettings"; + public const string Room_UpdateRoomSettings = "Room::UpdateRoomSettings"; public const string Room_GetRoomPlayerCount = "Room::GetRoomPlayerCount"; public const string Room_UpdateRoomMaster = "Room::UpdateRoomMaster"; /** @@ -197,7 +197,7 @@ namespace Milimoe.FunGame.Core.Library.Constant DataRequestType.Login_Login => Login_Login, DataRequestType.Login_GetFindPasswordVerifyCode => Login_GetFindPasswordVerifyCode, DataRequestType.Login_UpdatePassword => Login_UpdatePassword, - DataRequestType.Room_GetRoomSettings => Room_GetRoomSettings, + DataRequestType.Room_UpdateRoomSettings => Room_UpdateRoomSettings, DataRequestType.Room_GetRoomPlayerCount => Room_GetRoomPlayerCount, DataRequestType.Room_UpdateRoomMaster => Room_UpdateRoomMaster, DataRequestType.UserCenter_GetUserProfile => UserCenter_GetUserProfile, diff --git a/Library/Constant/TypeEnum.cs b/Library/Constant/TypeEnum.cs index eb95d71..f9936f4 100644 --- a/Library/Constant/TypeEnum.cs +++ b/Library/Constant/TypeEnum.cs @@ -102,7 +102,7 @@ namespace Milimoe.FunGame.Core.Library.Constant Login_Login, Login_GetFindPasswordVerifyCode, Login_UpdatePassword, - Room_GetRoomSettings, + Room_UpdateRoomSettings, Room_GetRoomPlayerCount, Room_UpdateRoomMaster, UserCenter_GetUserProfile, @@ -893,4 +893,13 @@ namespace Milimoe.FunGame.Core.Library.Constant /// OffereeReject } + + public enum QueueUpdatedReason + { + None, + Action, + Special, + PreCastSuperSkill, + Respawn + } } diff --git a/Model/ActionQueue.cs b/Model/ActionQueue.cs index b878476..dfe2322 100644 --- a/Model/ActionQueue.cs +++ b/Model/ActionQueue.cs @@ -30,6 +30,11 @@ namespace Milimoe.FunGame.Core.Model /// public List Queue => _queue; + /// + /// 硬直时间表 + /// + public Dictionary HardnessTime => _hardnessTimes; + /// /// 当前已死亡的角色顺序(第一个是最早死的) /// @@ -103,6 +108,11 @@ namespace Milimoe.FunGame.Core.Model /// public List Rounds { get; } = []; + /// + /// 自定义数据 + /// + public Dictionary CustomData { get; } = []; + /// /// 原始的角色字典 /// @@ -344,6 +354,7 @@ namespace Milimoe.FunGame.Core.Model public void ClearQueue() { FirstKiller = null; + CustomData.Clear(); _original.Clear(); _queue.Clear(); _hardnessTimes.Clear(); @@ -600,7 +611,11 @@ namespace Milimoe.FunGame.Core.Model // 作出了什么行动 CharacterActionType type = CharacterActionType.None; - while (!decided && cancelTimes > 0) + // 循环条件: + // AI 控制下:未决策、取消次数大于0 + // 手动控制下:未决策 + bool isAI = _charactersInAI.Contains(character); + while (!decided && (!isAI || cancelTimes > 0)) { type = CharacterActionType.None; @@ -987,7 +1002,7 @@ namespace Milimoe.FunGame.Core.Model LastRound.CastTime = newHardnessTime; } AddCharacter(character, newHardnessTime, isCheckProtected); - await OnQueueUpdatedAsync(_queue, character, "设置角色行动后的硬直时间。"); + await OnQueueUpdatedAsync(_queue, character, QueueUpdatedReason.Action, "设置角色行动后的硬直时间。"); LastRound.HardnessTime = newHardnessTime; effects = [.. character.Effects.Where(e => e.Level > 0)]; @@ -2252,7 +2267,7 @@ namespace Milimoe.FunGame.Core.Model character.Respawn(_original[character.Guid]); WriteLine($"[ {character} ] 已复活!获得 {hardnessTime} {GameplayEquilibriumConstant.InGameTime}的硬直时间。"); AddCharacter(character, hardnessTime, false); - await OnQueueUpdatedAsync(_queue, character, "设置角色复活后的硬直时间。"); + await OnQueueUpdatedAsync(_queue, character, QueueUpdatedReason.Respawn, "设置角色复活后的硬直时间。"); LastRound.Respawns.Add(character); _respawnCountdown.Remove(character); if (!_respawnTimes.TryAdd(character, 1)) @@ -2275,7 +2290,7 @@ namespace Milimoe.FunGame.Core.Model _queue.Remove(character); _cutCount.Remove(character); AddCharacter(character, 0, false); - await OnQueueUpdatedAsync(_queue, character, "设置角色预释放爆发技的硬直时间。"); + await OnQueueUpdatedAsync(_queue, character, QueueUpdatedReason.PreCastSuperSkill, "设置角色预释放爆发技的硬直时间。"); WriteLine("[ " + character + " ] 预释放了爆发技!!"); foreach (Character c in _hardnessTimes.Keys) { @@ -2342,7 +2357,7 @@ namespace Milimoe.FunGame.Core.Model #region 事件 - public delegate Task TurnStartEventHandler(Character character, List enemys, List teammates, List skills, List items); + public delegate Task TurnStartEventHandler(ActionQueue queue, Character character, List enemys, List teammates, List skills, List items); /// /// 回合开始事件 /// @@ -2356,12 +2371,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnTurnStartAsync(Character character, List enemys, List teammates, List skills, List items) + protected async Task OnTurnStartAsync(Character character, List enemys, List teammates, List skills, List items) { - return await (TurnStart?.Invoke(character, enemys, teammates, skills, items) ?? Task.FromResult(true)); + return await (TurnStart?.Invoke(this, character, enemys, teammates, skills, items) ?? Task.FromResult(true)); } - public delegate Task TurnEndEventHandler(Character character); + public delegate Task TurnEndEventHandler(ActionQueue queue, Character character); /// /// 回合结束事件 /// @@ -2371,12 +2386,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnTurnEndAsync(Character character) + protected async Task OnTurnEndAsync(Character character) { - await (TurnEnd?.Invoke(character) ?? Task.CompletedTask); + await (TurnEnd?.Invoke(this, character) ?? Task.CompletedTask); } - public delegate Task DecideActionEventHandler(Character character, List enemys, List teammates, List skills, List items); + public delegate Task DecideActionEventHandler(ActionQueue queue, Character character, List enemys, List teammates, List skills, List items); /// /// 决定角色的行动事件 /// @@ -2390,12 +2405,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnDecideActionAsync(Character character, List enemys, List teammates, List skills, List items) + protected async Task OnDecideActionAsync(Character character, List enemys, List teammates, List skills, List items) { - return await (DecideAction?.Invoke(character, enemys, teammates, skills, items) ?? Task.FromResult(CharacterActionType.None)); + return await (DecideAction?.Invoke(this, character, enemys, teammates, skills, items) ?? Task.FromResult(CharacterActionType.None)); } - public delegate Task SelectSkillEventHandler(Character character, List skills); + public delegate Task SelectSkillEventHandler(ActionQueue queue, Character character, List skills); /// /// 角色需要选择一个技能 /// @@ -2406,12 +2421,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnSelectSkillAsync(Character character, List skills) + protected async Task OnSelectSkillAsync(Character character, List skills) { - return await (SelectSkill?.Invoke(character, skills) ?? Task.FromResult(null)); + return await (SelectSkill?.Invoke(this, character, skills) ?? Task.FromResult(null)); } - public delegate Task SelectItemEventHandler(Character character, List items); + public delegate Task SelectItemEventHandler(ActionQueue queue, Character character, List items); /// /// 角色需要选择一个物品 /// @@ -2422,12 +2437,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnSelectItemAsync(Character character, List items) + protected async Task OnSelectItemAsync(Character character, List items) { - return await (SelectItem?.Invoke(character, items) ?? Task.FromResult(null)); + return await (SelectItem?.Invoke(this, character, items) ?? Task.FromResult(null)); } - public delegate Task> SelectSkillTargetsEventHandler(Character caster, Skill skill, List enemys, List teammates); + public delegate Task> SelectSkillTargetsEventHandler(ActionQueue queue, Character caster, Skill skill, List enemys, List teammates); /// /// 选取技能目标事件 /// @@ -2440,12 +2455,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task> OnSelectSkillTargetsAsync(Character caster, Skill skill, List enemys, List teammates) + protected async Task> OnSelectSkillTargetsAsync(Character caster, Skill skill, List enemys, List teammates) { - return await (SelectSkillTargets?.Invoke(caster, skill, enemys, teammates) ?? Task.FromResult(new List())); + return await (SelectSkillTargets?.Invoke(this, caster, skill, enemys, teammates) ?? Task.FromResult(new List())); } - public delegate Task> SelectNormalAttackTargetsEventHandler(Character character, NormalAttack attack, List enemys, List teammates); + public delegate Task> SelectNormalAttackTargetsEventHandler(ActionQueue queue, Character character, NormalAttack attack, List enemys, List teammates); /// /// 选取普通攻击目标事件 /// @@ -2458,12 +2473,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task> OnSelectNormalAttackTargetsAsync(Character character, NormalAttack attack, List enemys, List teammates) + protected async Task> OnSelectNormalAttackTargetsAsync(Character character, NormalAttack attack, List enemys, List teammates) { - return await (SelectNormalAttackTargets?.Invoke(character, attack, enemys, teammates) ?? Task.FromResult(new List())); + return await (SelectNormalAttackTargets?.Invoke(this, character, attack, enemys, teammates) ?? Task.FromResult(new List())); } - public delegate Task InterruptCastingEventHandler(Character cast, Skill? skill, Character interrupter); + public delegate Task InterruptCastingEventHandler(ActionQueue queue, Character cast, Skill? skill, Character interrupter); /// /// 打断施法事件 /// @@ -2475,12 +2490,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnInterruptCastingAsync(Character cast, Skill? skill, Character interrupter) + protected async Task OnInterruptCastingAsync(Character cast, Skill? skill, Character interrupter) { - await (InterruptCasting?.Invoke(cast, skill, interrupter) ?? Task.CompletedTask); + await (InterruptCasting?.Invoke(this, cast, skill, interrupter) ?? Task.CompletedTask); } - public delegate Task DeathCalculationEventHandler(Character killer, Character death); + public delegate Task DeathCalculationEventHandler(ActionQueue queue, Character killer, Character death); /// /// 死亡结算事件 /// @@ -2491,12 +2506,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnDeathCalculationAsync(Character killer, Character death) + protected async Task OnDeathCalculationAsync(Character killer, Character death) { - return await (DeathCalculation?.Invoke(killer, death) ?? Task.FromResult(true)); + return await (DeathCalculation?.Invoke(this, killer, death) ?? Task.FromResult(true)); } - public delegate Task CharacterDeathEventHandler(Character current, Character death); + public delegate Task CharacterDeathEventHandler(ActionQueue queue, Character current, Character death); /// /// 角色死亡事件,此事件位于 之后 /// @@ -2507,12 +2522,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnCharacterDeathAsync(Character current, Character death) + protected async Task OnCharacterDeathAsync(Character current, Character death) { - return await (CharacterDeath?.Invoke(current, death) ?? Task.FromResult(true)); + return await (CharacterDeath?.Invoke(this, current, death) ?? Task.FromResult(true)); } - public delegate Task HealToTargetEventHandler(Character actor, Character target, double heal, bool isRespawn); + public delegate Task HealToTargetEventHandler(ActionQueue queue, Character actor, Character target, double heal, bool isRespawn); /// /// 治疗事件 /// @@ -2525,12 +2540,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnHealToTargetAsync(Character actor, Character target, double heal, bool isRespawn) + protected async Task OnHealToTargetAsync(Character actor, Character target, double heal, bool isRespawn) { - await (HealToTarget?.Invoke(actor, target, heal, isRespawn) ?? Task.CompletedTask); + await (HealToTarget?.Invoke(this, actor, target, heal, isRespawn) ?? Task.CompletedTask); } - public delegate Task DamageToEnemyEventHandler(Character actor, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult); + public delegate Task DamageToEnemyEventHandler(ActionQueue queue, Character actor, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult); /// /// 造成伤害事件 /// @@ -2546,12 +2561,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnDamageToEnemyAsync(Character actor, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult) + protected async Task OnDamageToEnemyAsync(Character actor, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult) { - await (DamageToEnemy?.Invoke(actor, enemy, damage, isNormalAttack, isMagicDamage, magicType, damageResult) ?? Task.CompletedTask); + await (DamageToEnemy?.Invoke(this, actor, enemy, damage, isNormalAttack, isMagicDamage, magicType, damageResult) ?? Task.CompletedTask); } - public delegate Task CharacterActingEventHandler(Character actor, CharacterActionType type, params object[] args); + public delegate Task CharacterActingEventHandler(ActionQueue queue, Character actor, CharacterActionType type, params object[] args); /// /// 角色行动事件 /// @@ -2563,12 +2578,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnCharacterActingAsync(Character actor, CharacterActionType type, params object[] args) + protected async Task OnCharacterActingAsync(Character actor, CharacterActionType type, params object[] args) { - await (CharacterActing?.Invoke(actor, type, args) ?? Task.CompletedTask); + await (CharacterActing?.Invoke(this, actor, type, args) ?? Task.CompletedTask); } - public delegate Task GameEndEventHandler(Character winner); + public delegate Task GameEndEventHandler(ActionQueue queue, Character winner); /// /// 游戏结束事件 /// @@ -2578,12 +2593,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnGameEndAsync(Character winner) + protected async Task OnGameEndAsync(Character winner) { - return await (GameEnd?.Invoke(winner) ?? Task.FromResult(true)); + return await (GameEnd?.Invoke(this, winner) ?? Task.FromResult(true)); } - public delegate Task GameEndTeamEventHandler(Team winner); + public delegate Task GameEndTeamEventHandler(ActionQueue queue, Team winner); /// /// 游戏结束事件(团队版) /// @@ -2593,12 +2608,12 @@ namespace Milimoe.FunGame.Core.Model /// /// /// - public async Task OnGameEndTeamAsync(Team winner) + protected async Task OnGameEndTeamAsync(Team winner) { - return await (GameEndTeam?.Invoke(winner) ?? Task.FromResult(true)); + return await (GameEndTeam?.Invoke(this, winner) ?? Task.FromResult(true)); } - public delegate Task QueueUpdatedEventHandler(List queue, Character character, string reason); + public delegate Task QueueUpdatedEventHandler(ActionQueue queue, List characters, Character character, QueueUpdatedReason reason, string msg); /// /// 行动顺序表更新事件 /// @@ -2606,13 +2621,14 @@ namespace Milimoe.FunGame.Core.Model /// /// 行动顺序表更新事件 /// - /// + /// /// /// + /// /// - public async Task OnQueueUpdatedAsync(List queue, Character character, string reason) + protected async Task OnQueueUpdatedAsync(List characters, Character character, QueueUpdatedReason reason, string msg = "") { - await (QueueUpdated?.Invoke(queue, character, reason) ?? Task.CompletedTask); + await (QueueUpdated?.Invoke(this, characters, character, reason, msg) ?? Task.CompletedTask); } #endregion