static void tp(int p, int s, BS &b) { if (!b.isOut(s)) { return; } int berry = b.poke(s).item(); QVector<int> stats; for (int i = Attack; i <= Evasion; i++) { if (fpoke(b,s).boosts[i] < 6) { stats.push_back(i); } } if (stats.empty()) return; if (!testpinch(p, s, b, 4, false)) return; int stat = stats[b.randint(stats.size())]; if (b.hasWorkingAbility(s, Ability::Contrary)) { b.sendBerryMessage(9,s,1,s, berry, stat); } else { b.sendBerryMessage(9,s,0,s, berry, stat); } b.inflictStatMod(s, stat, 2, s, false); }
static void aaf(int t, int, BS &b) { if (turn(b,t)["RedCardCount"] != slot(b,t)["SwitchCount"]) return; int s = turn(b,t)["RedCardUser"].toInt(); if (b.koed(s) || b.koed(t) || turn(b,t)["RedCardGiverCount"] != slot(b,s)["SwitchCount"]) return; if (!b.hasWorkingItem(s, Item::RedCard)) return; int target = b.player(t); if (b.countBackUp(target) == 0) { return; } b.sendItemMessage(38, s, 0, t); b.disposeItem(s); /* ingrain & suction cups */ if (poke(b,t).value("Rooted").toBool()) { b.sendMoveMessage(107, 1, s, Pokemon::Grass,t); return; } else if (b.hasWorkingAbility(t,Ability::SuctionCups)) { b.sendMoveMessage(107, 0, s, 0,t); return; } QList<int> switches; for (int i = 0; i < 6; i++) { if (!b.isOut(target, i) && !b.poke(target,i).ko()) { switches.push_back(i); } } b.sendBack(t, true); b.sendPoke(t, switches[b.randint(switches.size())], true); b.sendMoveMessage(107,2,s,0,t); b.callEntryEffects(t); turn(b,t).remove("RedCardUser"); }