行动顺序表事件优化;添加用户资料类

This commit is contained in:
milimoe 2025-04-13 01:16:55 +08:00
parent 2c0153ef5f
commit 8e65183dc5
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
10 changed files with 221 additions and 62 deletions

View File

@ -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))

View File

@ -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
{
/// <summary>
/// 普通攻击名称
@ -57,6 +57,31 @@ namespace Milimoe.FunGame.Core.Entity
/// </summary>
public double HardnessTime { get; set; } = 10;
/// <summary>
/// 可选取自身
/// </summary>
public bool CanSelectSelf { get; set; } = false;
/// <summary>
/// 可选取敌对角色
/// </summary>
public bool CanSelectEnemy { get; set; } = true;
/// <summary>
/// 可选取友方角色
/// </summary>
public bool CanSelectTeammate { get; set; } = false;
/// <summary>
/// 可选取的作用目标数量
/// </summary>
public int CanSelectTargetCount { get; set; } = 1;
/// <summary>
/// 可选取的作用范围
/// </summary>
public double CanSelectTargetRange { get; set; } = 0;
/// <summary>
/// 对目标(或多个目标)发起普通攻击
/// </summary>

View File

@ -110,7 +110,7 @@ namespace Milimoe.FunGame.Core.Entity
}
}
public override IEnumerable<Effect> AddInactiveEffectToCharacter()
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return Effects;
}

View File

@ -9,7 +9,7 @@ namespace Milimoe.FunGame.Core.Entity
/// <summary>
/// 与 <see cref="Character"/> 不同,构造技能时,建议继承此类再构造
/// </summary>
public class Skill : BaseEntity, IActiveEnable
public class Skill : BaseEntity, ISkill, IActiveEnable
{
/// <summary>
/// 唯一标识符 [ 只有物品技能需要赋值,用于表示与其关联的物品:<see cref="Item.Guid"/> ]
@ -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
/// 被动技能,需要重写此方法,返回被动特效给角色 [ 此方法会在技能学习时触发 ]
/// </summary>
/// <returns></returns>
public virtual IEnumerable<Effect> AddInactiveEffectToCharacter()
public virtual IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return [];
}

View File

@ -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<Character, int> 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();
}
}
}

View File

@ -0,0 +1,47 @@
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Entity
{
public class UserProfile
{
/// <summary>
/// 头像链接
/// </summary>
public string AvatarUrl { get; set; } = "";
/// <summary>
/// 签名
/// </summary>
public string Signature { get; set; } = "";
/// <summary>
/// 性别
/// </summary>
public string Gender { get; set; } = "";
/// <summary>
/// 生日
/// </summary>
public DateTime BirthDay { get; set; } = General.DefaultTime;
/// <summary>
/// 关注者
/// </summary>
public int Followers { get; set; } = 0;
/// <summary>
/// 正在关注
/// </summary>
public int Following { get; set; } = 0;
/// <summary>
/// 头衔
/// </summary>
public string Title { get; set; } = "";
/// <summary>
/// 用户组
/// </summary>
public string Group { get; set; } = "";
}
}

View File

@ -0,0 +1,30 @@
namespace Milimoe.FunGame.Core.Interface.Entity
{
public interface ISkill
{
/// <summary>
/// 可选取自身
/// </summary>
public bool CanSelectSelf { get; }
/// <summary>
/// 可选取敌对角色
/// </summary>
public bool CanSelectEnemy { get; }
/// <summary>
/// 可选取友方角色
/// </summary>
public bool CanSelectTeammate { get; }
/// <summary>
/// 可选取的作用目标数量
/// </summary>
public int CanSelectTargetCount { get; }
/// <summary>
/// 可选取的作用范围
/// </summary>
public double CanSelectTargetRange { get; }
}
}

View File

@ -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,

View File

@ -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
/// </summary>
OffereeReject
}
public enum QueueUpdatedReason
{
None,
Action,
Special,
PreCastSuperSkill,
Respawn
}
}

View File

@ -30,6 +30,11 @@ namespace Milimoe.FunGame.Core.Model
/// </summary>
public List<Character> Queue => _queue;
/// <summary>
/// 硬直时间表
/// </summary>
public Dictionary<Character, double> HardnessTime => _hardnessTimes;
/// <summary>
/// 当前已死亡的角色顺序(第一个是最早死的)
/// </summary>
@ -103,6 +108,11 @@ namespace Milimoe.FunGame.Core.Model
/// </summary>
public List<RoundRecord> Rounds { get; } = [];
/// <summary>
/// 自定义数据
/// </summary>
public Dictionary<string, object> CustomData { get; } = [];
/// <summary>
/// 原始的角色字典
/// </summary>
@ -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<bool> TurnStartEventHandler(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items);
public delegate Task<bool> TurnStartEventHandler(ActionQueue queue, Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items);
/// <summary>
/// 回合开始事件
/// </summary>
@ -2356,12 +2371,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="skills"></param>
/// <param name="items"></param>
/// <returns></returns>
public async Task<bool> OnTurnStartAsync(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items)
protected async Task<bool> OnTurnStartAsync(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> 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);
/// <summary>
/// 回合结束事件
/// </summary>
@ -2371,12 +2386,12 @@ namespace Milimoe.FunGame.Core.Model
/// </summary>
/// <param name="character"></param>
/// <returns></returns>
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<CharacterActionType> DecideActionEventHandler(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items);
public delegate Task<CharacterActionType> DecideActionEventHandler(ActionQueue queue, Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items);
/// <summary>
/// 决定角色的行动事件
/// </summary>
@ -2390,12 +2405,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="skills"></param>
/// <param name="items"></param>
/// <returns></returns>
public async Task<CharacterActionType> OnDecideActionAsync(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> items)
protected async Task<CharacterActionType> OnDecideActionAsync(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, List<Item> 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<Skill?> SelectSkillEventHandler(Character character, List<Skill> skills);
public delegate Task<Skill?> SelectSkillEventHandler(ActionQueue queue, Character character, List<Skill> skills);
/// <summary>
/// 角色需要选择一个技能
/// </summary>
@ -2406,12 +2421,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="character"></param>
/// <param name="skills"></param>
/// <returns></returns>
public async Task<Skill?> OnSelectSkillAsync(Character character, List<Skill> skills)
protected async Task<Skill?> OnSelectSkillAsync(Character character, List<Skill> skills)
{
return await (SelectSkill?.Invoke(character, skills) ?? Task.FromResult<Skill?>(null));
return await (SelectSkill?.Invoke(this, character, skills) ?? Task.FromResult<Skill?>(null));
}
public delegate Task<Item?> SelectItemEventHandler(Character character, List<Item> items);
public delegate Task<Item?> SelectItemEventHandler(ActionQueue queue, Character character, List<Item> items);
/// <summary>
/// 角色需要选择一个物品
/// </summary>
@ -2422,12 +2437,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="character"></param>
/// <param name="items"></param>
/// <returns></returns>
public async Task<Item?> OnSelectItemAsync(Character character, List<Item> items)
protected async Task<Item?> OnSelectItemAsync(Character character, List<Item> items)
{
return await (SelectItem?.Invoke(character, items) ?? Task.FromResult<Item?>(null));
return await (SelectItem?.Invoke(this, character, items) ?? Task.FromResult<Item?>(null));
}
public delegate Task<List<Character>> SelectSkillTargetsEventHandler(Character caster, Skill skill, List<Character> enemys, List<Character> teammates);
public delegate Task<List<Character>> SelectSkillTargetsEventHandler(ActionQueue queue, Character caster, Skill skill, List<Character> enemys, List<Character> teammates);
/// <summary>
/// 选取技能目标事件
/// </summary>
@ -2440,12 +2455,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <returns></returns>
public async Task<List<Character>> OnSelectSkillTargetsAsync(Character caster, Skill skill, List<Character> enemys, List<Character> teammates)
protected async Task<List<Character>> OnSelectSkillTargetsAsync(Character caster, Skill skill, List<Character> enemys, List<Character> teammates)
{
return await (SelectSkillTargets?.Invoke(caster, skill, enemys, teammates) ?? Task.FromResult(new List<Character>()));
return await (SelectSkillTargets?.Invoke(this, caster, skill, enemys, teammates) ?? Task.FromResult(new List<Character>()));
}
public delegate Task<List<Character>> SelectNormalAttackTargetsEventHandler(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates);
public delegate Task<List<Character>> SelectNormalAttackTargetsEventHandler(ActionQueue queue, Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates);
/// <summary>
/// 选取普通攻击目标事件
/// </summary>
@ -2458,12 +2473,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <returns></returns>
public async Task<List<Character>> OnSelectNormalAttackTargetsAsync(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates)
protected async Task<List<Character>> OnSelectNormalAttackTargetsAsync(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates)
{
return await (SelectNormalAttackTargets?.Invoke(character, attack, enemys, teammates) ?? Task.FromResult(new List<Character>()));
return await (SelectNormalAttackTargets?.Invoke(this, character, attack, enemys, teammates) ?? Task.FromResult(new List<Character>()));
}
public delegate Task InterruptCastingEventHandler(Character cast, Skill? skill, Character interrupter);
public delegate Task InterruptCastingEventHandler(ActionQueue queue, Character cast, Skill? skill, Character interrupter);
/// <summary>
/// 打断施法事件
/// </summary>
@ -2475,12 +2490,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="skill"></param>
/// <param name="interrupter"></param>
/// <returns></returns>
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<bool> DeathCalculationEventHandler(Character killer, Character death);
public delegate Task<bool> DeathCalculationEventHandler(ActionQueue queue, Character killer, Character death);
/// <summary>
/// 死亡结算事件
/// </summary>
@ -2491,12 +2506,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="killer"></param>
/// <param name="death"></param>
/// <returns></returns>
public async Task<bool> OnDeathCalculationAsync(Character killer, Character death)
protected async Task<bool> 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<bool> CharacterDeathEventHandler(Character current, Character death);
public delegate Task<bool> CharacterDeathEventHandler(ActionQueue queue, Character current, Character death);
/// <summary>
/// 角色死亡事件,此事件位于 <see cref="DeathCalculation"/> 之后
/// </summary>
@ -2507,12 +2522,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="current"></param>
/// <param name="death"></param>
/// <returns></returns>
public async Task<bool> OnCharacterDeathAsync(Character current, Character death)
protected async Task<bool> 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);
/// <summary>
/// 治疗事件
/// </summary>
@ -2525,12 +2540,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="heal"></param>
/// <param name="isRespawn"></param>
/// <returns></returns>
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);
/// <summary>
/// 造成伤害事件
/// </summary>
@ -2546,12 +2561,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="magicType"></param>
/// <param name="damageResult"></param>
/// <returns></returns>
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);
/// <summary>
/// 角色行动事件
/// </summary>
@ -2563,12 +2578,12 @@ namespace Milimoe.FunGame.Core.Model
/// <param name="type"></param>
/// <param name="args"></param>
/// <returns></returns>
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<bool> GameEndEventHandler(Character winner);
public delegate Task<bool> GameEndEventHandler(ActionQueue queue, Character winner);
/// <summary>
/// 游戏结束事件
/// </summary>
@ -2578,12 +2593,12 @@ namespace Milimoe.FunGame.Core.Model
/// </summary>
/// <param name="winner"></param>
/// <returns></returns>
public async Task<bool> OnGameEndAsync(Character winner)
protected async Task<bool> OnGameEndAsync(Character winner)
{
return await (GameEnd?.Invoke(winner) ?? Task.FromResult(true));
return await (GameEnd?.Invoke(this, winner) ?? Task.FromResult(true));
}
public delegate Task<bool> GameEndTeamEventHandler(Team winner);
public delegate Task<bool> GameEndTeamEventHandler(ActionQueue queue, Team winner);
/// <summary>
/// 游戏结束事件(团队版)
/// </summary>
@ -2593,12 +2608,12 @@ namespace Milimoe.FunGame.Core.Model
/// </summary>
/// <param name="winner"></param>
/// <returns></returns>
public async Task<bool> OnGameEndTeamAsync(Team winner)
protected async Task<bool> 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<Character> queue, Character character, string reason);
public delegate Task QueueUpdatedEventHandler(ActionQueue queue, List<Character> characters, Character character, QueueUpdatedReason reason, string msg);
/// <summary>
/// 行动顺序表更新事件
/// </summary>
@ -2606,13 +2621,14 @@ namespace Milimoe.FunGame.Core.Model
/// <summary>
/// 行动顺序表更新事件
/// </summary>
/// <param name="queue"></param>
/// <param name="characters"></param>
/// <param name="character"></param>
/// <param name="reason"></param>
/// <param name="msg"></param>
/// <returns></returns>
public async Task OnQueueUpdatedAsync(List<Character> queue, Character character, string reason)
protected async Task OnQueueUpdatedAsync(List<Character> 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