Items can be used on Pokemon outside of battle, and we want the user of the library to be able to check for what changed. This allows for example a heal event to be sent back to the user of the library after using an item.
This commit is contained in:
7 files changed
+21
-17
No files matched your search
@@ -174,6 +174,6 @@ public static class TurnRunner
|
|||||||
var side = battle.Sides[itemChoice.TargetSide.Value];
|
var side = battle.Sides[itemChoice.TargetSide.Value];
|
||||||
target = side.Pokemon[itemChoice.TargetPosition.Value];
|
target = side.Pokemon[itemChoice.TargetPosition.Value];
|
||||||
}
|
}
|
||||||
itemChoice.Item.RunItemScript(battle.Library.ScriptResolver, target ?? user);
|
itemChoice.Item.RunItemScript(battle.Library.ScriptResolver, target ?? user, battle.EventHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -340,7 +340,8 @@ public interface IPokemon : IScriptSource, IDeepCloneable
|
|||||||
/// Heals the Pokemon by a specific amount. Unless allow_revive is set to true, this will not
|
/// Heals the Pokemon by a specific amount. Unless allow_revive is set to true, this will not
|
||||||
/// heal if the Pokemon has 0 health. If the amount healed is 0, this will return false.
|
/// heal if the Pokemon has 0 health. If the amount healed is 0, this will return false.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool Heal(uint heal, bool allowRevive = false, EventBatchId batchId = default, bool forceHeal = false);
|
bool Heal(uint heal, bool allowRevive = false, EventBatchId batchId = default, bool forceHeal = false,
|
||||||
|
EventHook? customEventHook = null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Restores all PP of the Pokemon.
|
/// Restores all PP of the Pokemon.
|
||||||
@@ -1118,7 +1119,8 @@ public class PokemonImpl : ScriptSource, IPokemon
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Heal(uint heal, bool allowRevive, EventBatchId batchId = default, bool forceHeal = false)
|
public bool Heal(uint heal, bool allowRevive, EventBatchId batchId = default, bool forceHeal = false,
|
||||||
|
EventHook? customEventHook = null)
|
||||||
{
|
{
|
||||||
if (IsFainted && !allowRevive)
|
if (IsFainted && !allowRevive)
|
||||||
return false;
|
return false;
|
||||||
@@ -1137,7 +1139,8 @@ public class PokemonImpl : ScriptSource, IPokemon
|
|||||||
}
|
}
|
||||||
|
|
||||||
var newHealth = CurrentHealth + heal;
|
var newHealth = CurrentHealth + heal;
|
||||||
BattleData?.Battle.EventHook.Invoke(new HealEvent(this, CurrentHealth, newHealth)
|
customEventHook ??= BattleData?.Battle.EventHook;
|
||||||
|
customEventHook?.Invoke(new HealEvent(this, CurrentHealth, newHealth)
|
||||||
{
|
{
|
||||||
BatchId = batchId,
|
BatchId = batchId,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using PkmnLib.Dynamic.Events;
|
||||||
using PkmnLib.Dynamic.Models;
|
using PkmnLib.Dynamic.Models;
|
||||||
using PkmnLib.Static;
|
using PkmnLib.Static;
|
||||||
using PkmnLib.Static.Utils;
|
using PkmnLib.Static.Utils;
|
||||||
@@ -55,15 +56,14 @@ public abstract class ItemScript : IDeepCloneable
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the use of the item.
|
/// Handles the use of the item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual void OnUse()
|
public virtual void OnUse(EventHook eventHook)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the use of the item on the given target.
|
/// Handles the use of the item on the given target.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target"></param>
|
public virtual void OnUseWithTarget(IPokemon target, EventHook eventHook)
|
||||||
public virtual void OnUseWithTarget(IPokemon target)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using PkmnLib.Dynamic.Events;
|
||||||
using PkmnLib.Dynamic.Models;
|
using PkmnLib.Dynamic.Models;
|
||||||
using PkmnLib.Static;
|
using PkmnLib.Static;
|
||||||
|
|
||||||
@@ -19,12 +20,10 @@ public abstract class PokeballScript : ItemScript
|
|||||||
public abstract byte GetCatchRate(IPokemon target);
|
public abstract byte GetCatchRate(IPokemon target);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void OnUseWithTarget(IPokemon target)
|
public override void OnUseWithTarget(IPokemon target, EventHook eventHook)
|
||||||
{
|
{
|
||||||
var battleData = target.BattleData;
|
var battleData = target.BattleData;
|
||||||
if (battleData == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
battleData.Battle.AttempCapture(battleData.SideIndex, battleData.Position, Item);
|
battleData?.Battle.AttempCapture(battleData.SideIndex, battleData.Position, Item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using PkmnLib.Dynamic.Events;
|
||||||
using PkmnLib.Dynamic.Models;
|
using PkmnLib.Dynamic.Models;
|
||||||
using PkmnLib.Static;
|
using PkmnLib.Static;
|
||||||
|
|
||||||
@@ -95,7 +96,8 @@ public static class ScriptExecution
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Executes a script on an item.
|
/// Executes a script on an item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void RunItemScript(this IItem item, ScriptResolver scriptResolver, IPokemon? target)
|
public static void RunItemScript(this IItem item, ScriptResolver scriptResolver, IPokemon? target,
|
||||||
|
EventHook eventHook)
|
||||||
{
|
{
|
||||||
if (!scriptResolver.TryResolveBattleItemScript(item, out var itemScript))
|
if (!scriptResolver.TryResolveBattleItemScript(item, out var itemScript))
|
||||||
{
|
{
|
||||||
@@ -110,11 +112,11 @@ public static class ScriptExecution
|
|||||||
{
|
{
|
||||||
if (target == null)
|
if (target == null)
|
||||||
throw new ArgumentNullException(nameof(target), "Item script requires a target.");
|
throw new ArgumentNullException(nameof(target), "Item script requires a target.");
|
||||||
itemScript.OnUseWithTarget(target);
|
itemScript.OnUseWithTarget(target, eventHook);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
itemScript.OnUse();
|
itemScript.OnUse(eventHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,8 +34,8 @@ public class HealingItem : ItemScript
|
|||||||
public override bool IsTargetValid(IPokemon target) => !target.IsFainted;
|
public override bool IsTargetValid(IPokemon target) => !target.IsFainted;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void OnUseWithTarget(IPokemon target)
|
public override void OnUseWithTarget(IPokemon target, EventHook eventHook)
|
||||||
{
|
{
|
||||||
target.Heal(_healAmount);
|
target.Heal(_healAmount, customEventHook: eventHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,6 @@ public class BugBite : Script
|
|||||||
}
|
}
|
||||||
|
|
||||||
_ = target.SetHeldItem(null);
|
_ = target.SetHeldItem(null);
|
||||||
targetHeldItem.RunItemScript(battleData.Battle.Library.ScriptResolver, user);
|
targetHeldItem.RunItemScript(battleData.Battle.Library.ScriptResolver, user, move.Battle.EventHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user