namespace PkmnLib.Plugin.Gen7.Scripts.Moves; [Script(ScriptCategory.Move, "beat_up")] public class BeatUp : Script, IScriptChangeNumberOfHits, IScriptChangeBasePower { private IBattlePokemon[]? _relevantPartyMembers; private static IEnumerable 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) ?? []; } /// public void ChangeNumberOfHits(IMoveChoice choice, ref byte numberOfHits) { var relevantPartyMembers = _relevantPartyMembers ??= GetRelevantPartyMembers(choice.User).ToArray(); numberOfHits = (byte)relevantPartyMembers.Count(); if (numberOfHits == 0) numberOfHits = 1; } /// 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); } }