public static void Attach(PokemonProxy pm) { if (pm.ItemE(Is.LEPPA_BERRY)) { foreach (var m in pm.Moves) { if (m.PP == 0) { m.PP += 10; pm.ConsumeItem(); pm.ShowLogPm("ItemPPRecover", Is.LEPPA_BERRY, m.MoveE.Id); return; } } } else { WhiteHerb(pm); HpChanged.Execute(pm); StateAdded.Execute(pm); } }
private static void AddStateImplement(this PokemonProxy pm, PokemonProxy by, AttachedState state, int turn, string log, int arg1) { switch (state) { case AttachedState.BRN: pm.Pokemon.State = PokemonState.BRN; goto POKEMON_STATE; case AttachedState.FRZ: pm.Pokemon.State = PokemonState.FRZ; pm.ShowLogPm(log ?? "EnFRZ", arg1); if (pm.CanChangeForm(492, 0)) { pm.ChangeForm(0, true); } goto DONE; case AttachedState.PAR: pm.Pokemon.State = PokemonState.PAR; goto POKEMON_STATE; case AttachedState.PSN: if (turn == 0) { pm.Pokemon.State = PokemonState.PSN; } else { pm.Pokemon.State = PokemonState.BadlyPSN; pm.OnboardPokemon.SetCondition(Cs.BadlyPSN, pm.Controller.TurnNumber); } goto POKEMON_STATE; case AttachedState.SLP: pm.Pokemon.State = PokemonState.SLP; pm.Pokemon.SLPTurn = turn == 0 ? pm.Controller.GetRandomInt(2, 4) : turn; goto POKEMON_STATE; case AttachedState.Confuse: pm.OnboardPokemon.SetCondition(Cs.Confuse, turn == 0 ? pm.Controller.GetRandomInt(2, 5) : turn); pm.ShowLogPm(log ?? "Confuse"); goto DONE; case AttachedState.Attract: pm.OnboardPokemon.SetCondition(Cs.Attract, by); pm.ShowLogPm(log ?? "EnAttract", arg1); ITs.DestinyKnot(pm, by); goto DONE; case AttachedState.Trap: { var move = by.AtkContext.Move; var c = new Condition(); c.By = by; c.Turn = pm.Controller.TurnNumber + (turn == 0 ? pm.Controller.GetRandomInt(4, 5) : turn) - 1; c.Move = move; c.Bool = by.Item == Is.BINDING_BAND; pm.OnboardPokemon.SetCondition(Cs.Trap, c); pm.ShowLogPm("EnTrap" + move.Id.ToString(), by.Id); } goto DONE; case AttachedState.Nightmare: pm.OnboardPokemon.SetCondition(Cs.Nightmare); pm.ShowLogPm("EnNightmare"); goto DONE; case AttachedState.Torment: pm.OnboardPokemon.SetCondition(Cs.Torment, by); pm.ShowLogPm("EnTorment"); goto DONE; case AttachedState.Disable: { var c = new Condition(); c.Move = pm.LastMove; c.Turn = pm.Controller.TurnNumber + 3; //4 - 1 pm.OnboardPokemon.SetCondition(Cs.Disable, c); pm.ShowLogPm("EnDisable", c.Move.Id); } goto DONE; case AttachedState.Yawn: { var o = new Condition(); o.Turn = pm.Controller.TurnNumber + 1; o.By = by; //睡眠规则 pm.OnboardPokemon.AddCondition(Cs.Yawn, o); } pm.ShowLogPm("EnYawn"); goto DONE; case AttachedState.HealBlock: { var o = new Condition(); o.Turn = pm.Controller.TurnNumber + 5; o.By = by; pm.OnboardPokemon.SetCondition(Cs.HealBlock, o); } pm.ShowLogPm("EnHealBlock"); goto DONE; case AttachedState.SoundBlock: { var o = new Condition(); o.Turn = pm.Controller.TurnNumber + 2; o.By = by; pm.OnboardPokemon.SetCondition(Cs.SoundBlock, o); } pm.ShowLogPm("EnSoundBlock"); goto DONE; case AttachedState.CanAttack: { var o = new Condition(); o.BattleType = by.AtkContext.Move.Id == Ms.MIRACLE_EYE ? BattleType.Dark : BattleType.Ghost; o.By = by; pm.OnboardPokemon.SetCondition(Cs.CanAttack, o); pm.ShowLogPm("CanAttack"); } goto DONE; case AttachedState.LeechSeed: pm.OnboardPokemon.SetCondition(Cs.LeechSeed, by.Tile); pm.ShowLogPm("EnLeechSeed"); goto DONE; case AttachedState.Embargo: pm.OnboardPokemon.SetCondition(Cs.Embargo); pm.ShowLogPm("EnEmbargo"); goto DONE; case AttachedState.PerishSong: pm.OnboardPokemon.SetCondition(Cs.PerishSong, 3); goto DONE; case AttachedState.Ingrain: pm.OnboardPokemon.SetCondition(Cs.Ingrain); pm.ShowLogPm("EnIngrain"); goto DONE; #if DEBUG default: System.Diagnostics.Debugger.Break(); return; #endif } POKEMON_STATE: pm.ShowLogPm(log ?? "En" + state.ToString(), arg1); if (state != AttachedState.FRZ && state != AttachedState.SLP) { ATs.Synchronize(pm, by, state, turn); } DONE: StateAdded.Execute(pm); }