More abilities, refactor stealing held items
All checks were successful
Build / Build (push) Successful in 50s

This commit is contained in:
2025-06-15 11:49:15 +02:00
parent 1b9d137bb0
commit f5d18d7186
22 changed files with 326 additions and 21 deletions

View File

@@ -1,3 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using JetBrains.Annotations;
using PkmnLib.Dynamic.Events;
using PkmnLib.Dynamic.Libraries;
@@ -251,6 +252,12 @@ public interface IPokemon : IScriptSource, IDeepCloneable
/// </remarks>
IItem? RemoveHeldItemForBattle();
/// <summary>
/// Tries to steal the held item of the Pokémon. If successful, the item is removed from the Pokémon and returned.
/// If the Pokémon does not have a held item, or the item is a form changer, this will return false.
/// </summary>
bool TryStealHeldItem([NotNullWhen(true)] out IItem? item);
/// <summary>
/// Restores the held item of a Pokémon if it was temporarily removed.
/// </summary>
@@ -812,6 +819,25 @@ public class PokemonImpl : ScriptSource, IPokemon
return _stolenHeldItem = RemoveHeldItem();
}
/// <inheritdoc />
public bool TryStealHeldItem([NotNullWhen(true)] out IItem? item)
{
if (HeldItem is null || HeldItem.Category == ItemCategory.FormChanger)
{
item = null;
return false;
}
var prevent = false;
this.RunScriptHook(script => script.PreventHeldItemSteal(this, HeldItem, ref prevent));
if (prevent)
{
item = null;
return false;
}
item = RemoveHeldItemForBattle();
return item is not null;
}
/// <inheritdoc />
public void RestoreStolenHeldItem()
{

View File

@@ -812,6 +812,13 @@ public abstract class Script : IDeepCloneable
{
}
/// <summary>
/// This function allows a script to prevent a held item from being stolen by an effect such as Thief or Covet.
/// </summary>
public virtual void PreventHeldItemSteal(IPokemon pokemon, IItem heldItem, ref bool prevent)
{
}
/// <summary>
/// This function allows a script to run after a held item has changed.
/// </summary>