private static void StarfBerry(PokemonProxy pm) { if (ATs.Gluttony(pm)) { var ss = new List <StatType>(5); if (pm.CanChangeLv7D(pm, StatType.Atk, 2, false) != 0) { ss.Add(StatType.Atk); } if (pm.CanChangeLv7D(pm, StatType.Def, 2, false) != 0) { ss.Add(StatType.Def); } if (pm.CanChangeLv7D(pm, StatType.SpAtk, 2, false) != 0) { ss.Add(StatType.SpAtk); } if (pm.CanChangeLv7D(pm, StatType.SpDef, 2, false) != 0) { ss.Add(StatType.SpDef); } if (pm.CanChangeLv7D(pm, StatType.Speed, 2, false) != 0) { ss.Add(StatType.Speed); } var n = ss.Count; if (n != 0) { ITs.ChangeLv5D(pm, ss[pm.Controller.GetRandomInt(0, n - 1)], 2); } } }
private static void Up1Berry(PokemonProxy pm, StatType stat) { if (ATs.Gluttony(pm)) { ITs.ChangeLv5D(pm, stat, 1); } }
void UnloadPlugins() { foreach (Assembly_Threads at in ATs) { UnloadDLL(at); /// Add notification to the GUI listBoxLoadedPlugins.Items.Add("Plugin: " + at.asm.FullName.Split(',')[0] + " unloaded."); } ATs.Clear(); tabControl1.TabPages.Clear();//panelPlugins.Controls.Clear(); }
private static void TastyBerry(PokemonProxy pm) { if (ATs.Gluttony(pm) && pm.CanHpRecover(false)) { pm.HpRecoverByOneNth(2, false, Ls.ItemHpRecover, pm.Pokemon.Item, true); if (pm.Pokemon.Nature.DislikeTaste(ITs.GetTaste(pm.Pokemon.Item))) { pm.AddState(pm, AttachedState.Confuse, false); } } }
void LoadPlugins(string path) { int i = 0; foreach (Assembly asm in EnumPluginFiles(path))//@"E:\My Documents\Programming\Projects\Platform_Plugins\Plugins")) { try { Assembly_Threads at = new Assembly_Threads(asm); //GroupBox gb = new GroupBox(); Panel gb = new Panel(); string asmName = at.asm.FullName.Split(',')[0]; Thread curT = LoadDLL(asm, new object[] { gb }); at.Add(curT); ATs.Add(at); curT.Start(); /// Add notification to the GUI //gb.Text = asmName; gb.Width = 600; gb.Height = 400; gb.Margin = new System.Windows.Forms.Padding(3); gb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom; tabControl1.TabPages.Add(asmName);//panelPlugins.Controls.Add(gb); tabControl1.TabPages[i++].Controls.Add(gb); listBoxLoadedPlugins.Items.Add("Plugin: " + asmName + " loaded."); } catch (Exception ex) { MessageBox.Show(ex.Message, asm.FullName.Split(',')[0]); //Console.WriteLine(ex.Message); } finally { //Console.WriteLine("Press Enter to stop."); //Console.Read(); //foreach (Assembly_Threads at in ATs) //{ // UnloadDLL(at); //} //Console.WriteLine("END. Press Enter to exit."); //Console.ReadLine(); } } }
public static void Execute(PokemonProxy pm, int ability) { switch (ability) { case As.ZEN_MODE: if (pm.CanChangeForm(555, 0)) { pm.ChangeForm(0, false, "DeZenMode"); } break; case As.Shields_Down: if (pm.CanChangeForm(774, 0)) { pm.ChangeForm(0, false, "DeShields_Down"); } break; case As.Schooling: if (pm.CanChangeForm(746, 0)) { pm.ChangeForm(0, false, "DeSchooling"); } break; case As.ILLUSION: ATs.DeIllusion(pm); break; case As.FLOWER_GIFT: WeatherObserver(pm, 421); break; case As.FORECAST: WeatherObserver(pm, 351); break; case As.PRIMORDIAL_SEA: ATs.DeSpWeather(pm, ability, Ls.DeHeavyRain); break; case As.DESOLATE_LAND: ATs.DeSpWeather(pm, ability, Ls.DeHarshSunlight); break; case As.DELTA_STREAM: ATs.DeSpWeather(pm, ability, Ls.DeMysteriousAirCurrent); break; } }
private static void Trace(PokemonProxy pm) { var pms = new List <PokemonProxy>(); foreach (var p in pm.Controller.Board[1 - pm.Pokemon.TeamId].GetAdjacentPokemonsByOppositeX(pm.OnboardPokemon.X)) { if (ATs.Trace(p.OnboardPokemon.Ability)) { pms.Add(p); } } var n = pms.Count; if (n != 0) { pm.RaiseAbility(); var target = pms[pm.Controller.GetRandomInt(0, n - 1)]; pm.ChangeAbility(target.OnboardPokemon.Ability); pm.Controller.ReportBuilder.ShowLog("Trace", target.Id, target.OnboardPokemon.Ability); } }
public static void Execute(DefContext def) { var der = def.Defender; var atk = def.AtkContext; var aer = atk.Attacker; var touch = atk.touch; var realHurt = def.Damage != 0; if (touch && aer.AbilityE(As.POISON_TOUCH) && der.Controller.RandomHappen(30) && der.CanAddState(aer, AttachedState.PSN, false)) { aer.RaiseAbility(); der.AddState(aer, AttachedState.PSN, false); } if (der.AtkContext != null && der.AtkContext.HasCondition(Cs.Bide)) { var o = der.AtkContext.GetCondition(Cs.Bide); o.By = aer; o.Damage += def.Damage; } switch (der.OnboardPokemon.Ability) //此时破格不能无视 { case As.ILLUSION: ATs.DeIllusion(def.Defender); break; case As.STATIC: if (touch) { AddState(def, AttachedState.PAR); } break; case As.POISON_POINT: if (touch) { AddState(def, AttachedState.PSN); } break; case As.FLAME_BODY: if (touch) { AddState(def, AttachedState.BRN); } break; case As.CUTE_CHARM: if (touch) { AddState(def, AttachedState.Attract); } break; case As.ROUGH_SKIN: case As.IRON_BARBS: if (touch) { RoughSkin(def); } break; case As.EFFECT_SPORE: if (touch && realHurt) { EffectSpore(def); } break; case As.ANGER_POINT: if (def.IsCt) { der.ChangeLv7D(der, StatType.Atk, 12, false, true, "AngerPoint"); } break; case As.AFTERMATH: if (touch && der.Hp == 0 && aer.CanEffectHurt && aer.Controller.Board.Pokemons.HasAbility(As.DAMP) == null) { der.RaiseAbility(); aer.EffectHurtByOneNthImplement(4); } break; case As.Innards_Out: if (der.Hp == 0) { der.RaiseAbility(); aer.EffectHurt(def.Damage); } break; case As.PICKPOCKET: if (touch) { Pickpocket(def); } break; case As.CURSED_BODY: if (atk.Controller.RandomHappen(30) && aer.CanAddState(der, AttachedState.Disable, false)) { der.RaiseAbility(); aer.AddState(der, AttachedState.Disable, false); } break; case As.WEAK_ARMOR: if (atk.Move.Move.Category == MoveCategory.Physical) { der.ChangeLv7D(der, false, true, 0, -1, 0, 0, 1); } break; case As.MUMMY: var aa = aer.Ability; if (touch && aa != As.MULTITYPE && aa != As.RKS_System && aa != As.Comatose && aa != As.MUMMY) { der.RaiseAbility(); var fa = aer.OnboardPokemon.Ability; aer.ChangeAbility(As.MUMMY); aer.ShowLogPm(Ls.SetAbility, As.MUMMY); aer.Controller.ReportBuilder.ShowLog(Ls.setAbility, fa); } break; case As.JUSTIFIED: if (atk.Type == BattleType.Dark) { der.ChangeLv7D(der, StatType.Atk, 1, false, true); } break; case As.RATTLED: if (atk.Type == BattleType.Dark || atk.Type == BattleType.Ghost || atk.Type == BattleType.Bug) { der.ChangeLv7D(der, StatType.Speed, 1, false, true); } break; case As.GOOEY: if (touch && aer.CanChangeLv7D(der, StatType.Speed, -1, false) != 0) { der.RaiseAbility(); aer.ChangeLv7D(der, StatType.Speed, -1, false); } break; //gen7 case As.Stamina: der.ChangeLv7D(der, StatType.Def, 1, false, true); break; case As.Tangling_Hair: if (touch) { aer.ChangeLv7D(der, StatType.Speed, -1, false); } break; case As.Water_Compaction: if (atk.Type == BattleType.Water) { der.ChangeLv7D(der, StatType.Def, 2, false, true); } break; case As.Berserk: if (der.Hp < der.Pokemon.MaxHp / 2 && der.Hp + atk.TotalDamage >= der.Pokemon.MaxHp / 2) { der.ChangeLv7D(der, StatType.SpAtk, 1, false, true); } break; } var itm = def.Defender.Item; if (def.Defender.Pokemon.Item == Is.ROCKY_HELMET) { itm = Is.ROCKY_HELMET; } switch (itm) { case Is.STICKY_BARB: //65 if (touch && aer.Pokemon.Item == 0 && der.Controller.RandomHappen(10)) { der.RemoveItem(); aer.SetItem(Is.STICKY_BARB); } break; case Is.ROCKY_HELMET: //104 if (touch) { aer.EffectHurtByOneNth(6, Ls.RockyHelmet, 0, 0); } break; case Is.AIR_BALLOON: //105 ITs.AirBalloon(def); break; case Is.ABSORB_BULB: //109 AttackedUpItem(def, BattleType.Water, StatType.SpAtk); break; case Is.CELL_BATTERY: //110 AttackedUpItem(def, BattleType.Electric, StatType.Atk); break; case Is.ENIGMA_BERRY: //188 if (def.EffectRevise > 0) { der.HpRecoverByOneNth(4, false, Ls.ItemHpRecover, Is.ENIGMA_BERRY, true); } break; case Is.JABOCA_BERRY: //191 ReHurtBerry(def, MoveCategory.Physical); break; case Is.ROWAP_BERRY: //192 ReHurtBerry(def, MoveCategory.Special); break; case Is.LUMINOUS_MOSS: AttackedUpItem(def, BattleType.Water, StatType.SpDef); break; case Is.SNOWBALL: AttackedUpItem(def, BattleType.Ice, StatType.Atk); break; case Is.WEAKNESS_POLICY: if (def.EffectRevise > 0 && (der.CanChangeLv7D(der, StatType.Atk, 2, false) != 0 || der.CanChangeLv7D(der, StatType.SpAtk, 2, false) != 0)) { der.ShowLogPm("WeaknessPolicy"); der.ChangeLv7D(der, false, false, 2, 0, 2); der.ConsumeItem(); } break; case Is.KEE_BERRY: AttackedUpItem(def, MoveCategory.Physical, StatType.Def); break; case Is.MARANGA_BERRY: AttackedUpItem(def, MoveCategory.Special, StatType.SpDef); break; } if (der.OnboardPokemon.HasCondition(Cs.Rage)) { der.ChangeLv7D(der, StatType.Atk, 1, false, false, "Rage"); } if (aer.Pokemon.Item == 0 && ITs.CanLostItem(der) && aer.RaiseAbility(As.MAGICIAN)) { var i = der.Pokemon.Item; aer.SetItem(i); der.RemoveItem(); der.ShowLogPm("Magician", i); } if (der.OnboardPokemon.HasCondition(Cs.Beak_Blast) && atk.Move.NeedTouch) { aer.AddState(der, AttachedState.BRN, false); } }
public static void SendingOut(PokemonProxy pm) { pm.Reset(); var o = pm.OnboardPokemon; if (pm.State == PokemonState.BadlyPSN) { o.SetCondition(Cs.BadlyPSN, pm.Controller.TurnNumber); } var pass = pm.Tile.GetCondition <OnboardPokemon>(Cs.BatonPass); if (pass != null) { o.SetLv7D(pass.Lv5D.Atk, pass.Lv5D.Def, pass.Lv5D.SpAtk, pass.Lv5D.SpDef, pass.Lv5D.Speed, pass.AccuracyLv, pass.EvasionLv); pm.Tile.RemoveCondition(Cs.BatonPass); object c; //混乱状态 c = pass.GetCondition <object>(Cs.Confuse); if (c != null) { o.SetCondition(Cs.Confuse, c); } //寄生种子状态 c = pass.GetCondition <object>(Cs.LeechSeed); if (c != null) { o.SetCondition(Cs.LeechSeed, c); } //扣押状态 c = pass.GetCondition <object>(Cs.Embargo); if (c != null) { o.SetCondition(Cs.Embargo, c); } //回复封印状态 c = pass.GetCondition <object>(Cs.HealBlock); if (c != null) { o.SetCondition(Cs.HealBlock, c); } //念动力状态 c = pass.GetCondition <object>(Cs.Telekinesis); if (c != null) { o.SetCondition(Cs.Telekinesis, c); } //胃液状态 if (pass.HasCondition(Cs.GastroAcid)) { o.SetCondition(Cs.GastroAcid); } //扎根状态 if (pass.HasCondition(Cs.Ingrain)) { o.SetCondition(Cs.Ingrain); } //液态圈状态 if (pass.HasCondition(Cs.AquaRing)) { o.SetCondition(Cs.AquaRing); } //蓄气状态 if (pass.HasCondition(Cs.FocusEnergy)) { o.SetCondition(Cs.FocusEnergy); } //替身状态 c = pass.GetCondition <object>(Cs.Substitute); if (c != null) { o.SetCondition(Cs.Substitute, c); } //电磁浮游状态 c = pass.GetCondition <object>(Cs.MagnetRise); if (c != null) { o.SetCondition(Cs.MagnetRise, c); } //灭亡之歌状态 c = pass.GetCondition <object>(Cs.PerishSong); if (c != null) { o.SetCondition(Cs.PerishSong, c); } } ATs.Illusion(pm);//幻影特性以交换前的队伍顺序决定 }
public static void Execute(PokemonProxy pm) { switch (pm.Ability) { case As.DRIZZLE: //2 STs.SetWeather(pm, Weather.Rain, true, false); break; case As.DROUGHT: STs.SetWeather(pm, Weather.IntenseSunlight, true, false); break; case As.SAND_STREAM: STs.SetWeather(pm, Weather.Sandstorm, true, false); break; case As.SNOW_WARNING: STs.SetWeather(pm, Weather.Hailstorm, true, false); break; case As.PRIMORDIAL_SEA: SpWeather(pm, Weather.Rain, Ls.EnHeavyRain); break; case As.DESOLATE_LAND: SpWeather(pm, Weather.IntenseSunlight, Ls.EnHarshSunlight); break; case As.DELTA_STREAM: SpWeather(pm, Weather.Normal, Ls.EnMysteriousAirCurrent); break; case As.LIMBER: //7 CantAddState(pm, PokemonState.PAR); break; case As.INSOMNIA: //15 case As.VITAL_SPIRIT: //72 CantAddState(pm, PokemonState.SLP); break; case As.MAGMA_ARMOR: //40 CantAddState(pm, PokemonState.FRZ); break; case As.WATER_VEIL: //41 CantAddState(pm, PokemonState.BRN); break; case As.OBLIVIOUS: //12 if (pm.OnboardPokemon.RemoveCondition(Cs.Attract)) { pm.RaiseAbility(); pm.ShowLogPm("DeAttract"); } break; case As.IMMUNITY: //17 if (pm.State == PokemonState.PSN || pm.State == PokemonState.BadlyPSN) { pm.RaiseAbility(); pm.DeAbnormalState(); } break; case As.OWN_TEMPO: //20 if (pm.OnboardPokemon.RemoveCondition(Cs.Confuse)) { pm.RaiseAbility(); pm.ShowLogPm("DeConfuse"); } break; case As.IMPOSTER: Imposter(pm); break; case As.FRISK: Frisk(pm); break; case As.FLOWER_GIFT: WeatherObserver(pm, 421, pm.Controller.Weather == Weather.IntenseSunlight ? 1 : 0); break; case As.FORECAST: { var form = (int)pm.Controller.Weather; WeatherObserver(pm, 351, form > 3 ? 0 : form); } break; case As.FOREWARN: Forewarn(pm); break; case As.FLASH_FIRE: pm.OnboardPokemon.RemoveCondition(Cs.FlashFire); break; case As.AIR_LOCK: //总觉得多个天气锁的可能会有问题,未测 pm.RaiseAbility(); pm.Controller.ReportBuilder.ShowLog("AirLock"); if (pm.Controller.Board.Weather != Weather.Normal) { ATs.WeatherChanged(pm.Controller); } break; case As.INTIMIDATE: pm.RaiseAbility(); foreach (var p in pm.Controller.Board[1 - pm.Pokemon.TeamId].GetAdjacentPokemonsByOppositeX(pm.OnboardPokemon.X)) { if (p.OnboardPokemon.HasCondition(Cs.Substitute)) { p.ShowLogPm("NoEffect"); } else { p.ChangeLv7D(pm, StatType.Atk, -1, true); } } break; case As.TRACE: Trace(pm); break; case As.PRESSURE: SimpleAttachRaise(pm, "Pressure"); break; case As.MOLD_BREAKER: SimpleAttachRaise(pm, "MoldBreaker"); break; case As.TURBOBLAZE: SimpleAttachRaise(pm, "Turboblaze"); break; case As.TERAVOLT: SimpleAttachRaise(pm, "Teravolt"); break; case As.DOWNLOAD: Download(pm); break; case As.ANTICIPATION: Anticipation(pm); break; case As.SLOW_START: pm.OnboardPokemon.SetCondition(Cs.SlowStart, pm.Controller.TurnNumber + 5); pm.RaiseAbility(); pm.ShowLogPm("EnSlowStart"); break; } }
public static void Execute(DefContext def) { var der = def.Defender; var atk = def.AtkContext; var aer = atk.Attacker; var move = atk.Move; switch (move.Id) { case Ms.TRI_ATTACK: //161 TriAttack(def); break; case Ms.THIEF: //168 case Ms.COVET: //343 Thief(def); break; case Ms.KNOCK_OFF: //282 RemoveItem(def, false, "KnockOff"); break; case Ms.INCINERATE: //510 RemoveItem(def, true, "Incinerate"); break; case Ms.SECRET_POWER: //290 SecretPower(def); break; case Ms.NATURAL_GIFT: //363 def.AtkContext.Attacker.ConsumeItem(false); break; case Ms.PLUCK: //365 case Ms.BUG_BITE: //450 EatDefenderBerry(def); break; case Ms.FLING: //374 { var i = aer.Pokemon.Item; aer.ConsumeItem(false); ITs.RaiseItemByMove(def.Defender, i, aer); } break; case Ms.SHADOW_FORCE: //467 case Ms.PHANTOM_FORCE: case Ms.HYPERSPACE_HOLE: case Ms.HYPERSPACE_FURY: if (def.Defender.OnboardPokemon.RemoveCondition(Cs.Protect)) { def.Defender.ShowLogPm("DeProtect"); } break; case Ms.CLEAR_SMOG: //499 der.OnboardPokemon.SetLv7D(0, 0, 0, 0, 0, 0, 0); der.ShowLogPm("7DReset"); break; case Ms.Core_Enforcer: if (der.LastMoveTurn == der.Controller.TurnNumber && !GameHelper.CantLoseAbility(der.Ability) && der.OnboardPokemon.AddCondition(Cs.GastroAcid)) { der.ShowLogPm("LoseAbility"); } break; default: if (der.Hp > 0) { if (move.Class == MoveClass.AttackWithTargetLv7DChange) { der.ChangeLv7D(def); } else if (move.Class == MoveClass.AttackWithState) { der.AddState(def); } if (!def.AbilityE(As.INNER_FOCUS) && (move.FlinchProbability != 0 && def.RandomHappen(move.FlinchProbability) || ATs.Stench(def) || ITs.CanAttackFlinch(def))) { der.OnboardPokemon.SetTurnCondition(Cs.Flinch); } } break; } switch (move.Id) { case Ms.RELIC_SONG: if (aer.CanChangeForm(648)) { aer.ChangeForm(1 - aer.OnboardPokemon.Form.Index); } break; } }
public static void Execute(PokemonProxy pm) { switch (pm.Item) { case Is.ORAN_BERRY: //135 RecoverBerry(pm, 10); break; case Is.BERRY_JUICE: //194 RecoverBerry(pm, 20); break; case Is.SITRUS_BERRY: //138 if (pm.Hp << 1 < pm.Pokemon.MaxHp) { pm.HpRecoverByOneNth(4, false, Ls.ItemHpRecover, Is.SITRUS_BERRY, true); } break; case Is.FIGY_BERRY: //139 case Is.WIKI_BERRY: //140 case Is.MAGO_BERRY: //141 case Is.AGUAV_BERRY: //142 case Is.IAPAPA_BERRY: //143 TastyBerry(pm); break; case Is.LIECHI_BERRY: //181 Up1Berry(pm, StatType.Atk); break; case Is.GANLON_BERRY: Up1Berry(pm, StatType.Def); break; case Is.SALAC_BERRY: Up1Berry(pm, StatType.Speed); break; case Is.PETAYA_BERRY: Up1Berry(pm, StatType.SpAtk); break; case Is.APICOT_BERRY: //185 Up1Berry(pm, StatType.SpDef); break; case Is.LANSAT_BERRY: //186 if (ATs.Gluttony(pm) && pm.OnboardPokemon.AddCondition(Cs.FocusEnergy)) { pm.ConsumeItem(); pm.ShowLogPm("ItemEnFocusEnergy", Is.LANSAT_BERRY); } break; case Is.STARF_BERRY: //187 StarfBerry(pm); break; case Is.MICLE_BERRY: //189 if (ATs.Gluttony(pm) && pm.OnboardPokemon.AddCondition(Cs.MicleBerry)) { pm.ConsumeItem(); pm.ShowLogPm("MicleBerry", Is.MICLE_BERRY); } break; } }