Implements burn

This commit is contained in:
Deukhoofd 2025-05-19 15:19:35 +02:00
parent eea5697109
commit 0d03a8f28d
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
3 changed files with 43 additions and 4 deletions

View File

@ -30,4 +30,9 @@ public enum DamageSource
/// The damage is done because of the weather. /// The damage is done because of the weather.
/// </summary> /// </summary>
Weather = 4, Weather = 4,
/// <summary>
/// The damage is done because of a status condition.
/// </summary>
Status = 5,
} }

View File

@ -7,6 +7,11 @@ namespace PkmnLib.Dynamic.ScriptHandling.Registry;
/// </summary> /// </summary>
public interface IPlugin public interface IPlugin
{ {
/// <summary>
/// The configuration for the plugin. This is used to pass in any configuration options.
/// </summary>
IPluginConfiguration Configuration { get; }
/// <summary> /// <summary>
/// The name of the plugin. Mostly used for debugging purposes. /// The name of the plugin. Mostly used for debugging purposes.
/// </summary> /// </summary>
@ -28,9 +33,10 @@ public interface IPlugin
[UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)] [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)]
public abstract class Plugin<TConfiguration> : IPlugin where TConfiguration : IPluginConfiguration public abstract class Plugin<TConfiguration> : IPlugin where TConfiguration : IPluginConfiguration
{ {
/// <summary> /// <inheritdoc />
/// The configuration for the plugin. This is used to pass in any configuration options. IPluginConfiguration IPlugin.Configuration => Configuration;
/// </summary>
/// <inheritdoc cref="IPlugin.Configuration"/>
public TConfiguration Configuration { get; } public TConfiguration Configuration { get; }
/// <inheritdoc cref="Plugin{TConfiguration}"/> /// <inheritdoc cref="Plugin{TConfiguration}"/>

View File

@ -1,7 +1,35 @@
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Status; namespace PkmnLib.Plugin.Gen7.Scripts.Status;
[Script(ScriptCategory.Status, "burned")] [Script(ScriptCategory.Status, "burned")]
public class Burned : Script public class Burned : Script
{ {
// TODO: Implement the Burned status effect. private IPokemon? _target;
/// <inheritdoc />
public override void OnAddedToParent(IScriptSource source)
{
if (source is not IPokemon pokemon)
throw new ArgumentException("Burned script can only be added to a Pokemon");
_target = pokemon;
}
/// <inheritdoc />
public override void ChangeMoveDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage)
{
if (move.UseMove.Category == MoveCategory.Physical)
{
damage = (uint)(damage / 2f);
}
}
/// <inheritdoc />
public override void OnEndTurn(IBattle battle)
{
if (_target == null)
return;
var damage = (uint)(_target.MaxHealth / 16f);
_target.Damage(damage, DamageSource.Status);
}
} }