34 lines
1.3 KiB
C#
34 lines
1.3 KiB
C#
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
|
|
|
|
[Script(ScriptCategory.Move, "beat_up")]
|
|
public class BeatUp : Script, IScriptChangeNumberOfHits, IScriptChangeBasePower
|
|
{
|
|
private IBattlePokemon[]? _relevantPartyMembers;
|
|
|
|
private static IEnumerable<IBattlePokemon> GetRelevantPartyMembers(IBattlePokemon user)
|
|
{
|
|
var party = user.Battle.Parties.FirstOrDefault(x => x.BattlePokemon.Contains(user));
|
|
return party?.BattlePokemon.WhereNotNull().Where(x => x.IsUsable && x.StatusScript.IsEmpty) ?? [];
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void ChangeNumberOfHits(IMoveChoice choice, ref byte numberOfHits)
|
|
{
|
|
var relevantPartyMembers = _relevantPartyMembers ??= GetRelevantPartyMembers(choice.User).ToArray();
|
|
|
|
numberOfHits = (byte)relevantPartyMembers.Count();
|
|
if (numberOfHits == 0)
|
|
numberOfHits = 1;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void ChangeBasePower(IExecutingMove move, IBattlePokemon target, byte hit, ref ushort basePower)
|
|
{
|
|
var relevantPartyMembers = _relevantPartyMembers ??= GetRelevantPartyMembers(move.User).ToArray();
|
|
var hittingPokemon = relevantPartyMembers.ElementAtOrDefault(hit);
|
|
if (hittingPokemon == null)
|
|
return;
|
|
|
|
basePower = (byte)(hittingPokemon.Form.BaseStats.Attack / 10 + 5);
|
|
}
|
|
} |