【N6E】四花22炮(探索)腳本
2022-12-30 16:33 作者:--Reisen-- | 我要投稿

可以自由使用,但請注明來源,遵守 License。
使用無盡輔助版(https://tieba.baidu.com/p/7993643531)運行。
AvZ 版本:AvZ2 2.0.0
#include <algorithm>
#include <set>
#include <vector>
#include "avz.h"
#include "AvZDSL/AvZDSL.h"
#include "fodder/fodder.h"
using namespace std;
APvzBase* pb;
AMainObject* mo;
class : AStateHook {
? ?void _BeforeScript() override {
? ? ? ?pb = AGetPvzBase();
? ? ? ?mo = AGetMainObject();
? ?}
} _mo_initializer;
#define CardR(...) AMkRelOp(ACard(__VA_ARGS__))
ARelOp IceDayR() {
? ?ARelTime t = rand() % 2 ? 298 : 299;
? ?return -t[
? ? ? ?AMkRelOp(aIceFiller.Coffee()),
? ? ? ?AMkRelOp(AIce3(int(t)))
? ?];
}
ARelOp UseIceR(int row, int col) {
? ?return -100_cs[
? ? ? ?AMkRelOp(ACard(AICE_SHROOM, row, col))
? ?];
}
ARelOp UseImitatorIceR(int row, int col) {
? ?ARelTime t = rand() % 2 ? 419 : 420; // 模仿者生效時間可能取 319 或 320
? ?return -t[
? ? ? ?CardR(AM_ICE_SHROOM, row, col),
? ? ? ?AMkRelOp(AIce3(int(t)))
? ?];
}
ARelOp IceNightR(int row, int col) {
? ?return -420_cs[AMkRelOp(
? ? ? ?int idx = AGetSeedIndex(AICE_SHROOM, true);
? ? ? ?if(idx != -1 && AGetMainObject()->SeedArray()[idx].IsUsable()) // 復(fù)制冰可用
? ? ? ? ? ?ANow + 420_cs[UseImitatorIceR(row, col)];
? ? ? ?else
? ? ? ? ? ?ANow + 420_cs[UseIceR(row, col)];
? ?)];
}
ARelOp FireR(int row, float col, bool wait_until_recover = false) {
? ?vector<APosition> pos;
? ?while(row) {
? ? ? ?pos.push_back({row % 10, col});
? ? ? ?row /= 10;
? ?}
? ?reverse(pos.begin(), pos.end());
? ?if(wait_until_recover)
? ? ? ?return -373_cs[AMkRelOp(aCobManager.RecoverFire(pos))];
? ?else
? ? ? ?return -373_cs[AMkRelOp(aCobManager.Fire(pos))];
}
class MaidCheatsR {
public:
? ?static ARelOp CallPartner() {
? ? ? ?return AMkRelOp(AMaidCheats::CallPartner());
? ?}
? ?static ARelOp Dancing() {
? ? ? ?return AMkRelOp(AMaidCheats::Dancing());
? ?}
? ?static ARelOp Move() {
? ? ? ?return AMkRelOp(AMaidCheats::Move());
? ?}
? ?static ARelOp Stop() {
? ? ? ?return AMkRelOp(AMaidCheats::Stop());
? ?}
};
ALogger<APvzGui> l;
template <typename... Ts>
ARelOp InfoR(Ts... args) {
? ?return AMkRelOp(l.Info(args...));
}
#define objFilter(type, prop, value) AAliveFilter<type>([](type* x){ return x->prop() == (value); })
// ----------------------------------------------------------------
/*
PPDDdd
PPSSDDD
IPP-cccB-[PP] 1536
I3PPdd-cccB-PPDDcc 1663
cc(BB)AA'ddccc
BBNddcc
PPS[dd]ccc
IPPdd-cccB-PP 1672
I3PP(dd)-cccB-PPdd 1550
PPSSDDA
*/
ARelOp SmartIce() {
? ?return -100_cs[AMkRelOp(
? ? ? ?int min_x[6];
? ? ? ?fill(min_x, min_x + 6, 1000);
? ? ? ?for(auto& z : objFilter(AZombie, Type, AGIGA_GARGANTUAR))
? ? ? ? ? ?if(z.Hp() > 3000)
? ? ? ? ? ? ? ?min_x[z.Row()] = min(min_x[z.Row()], int(z.Abscissa()));
? ? ? ?for(int r = 0; r < 6; r++)
? ? ? ? ? ?if(AAsm::GetPlantRejectType(AICE_SHROOM, r, 8) != AAsm::NIL)
? ? ? ? ? ? ? ?min_x[r] = 0;
? ? ? ?int row = max_element(min_x, min_x + 6) - min_x;
? ? ? ?ACard(AICE_SHROOM, row + 1, 9);
? ?)];
}
FodderR f({APUFF_SHROOM, ASUN_SHROOM, ASCAREDY_SHROOM, AFLOWER_POT, ASUNFLOWER});
ARelOp Ending(int n) {
? ?return -373_cs[AMkRelOp(
? ? ? ?int row;
? ? ? ?auto t = ANow + 373_cs;
? ? ? ?if(AIsZombieExist(AGIGA_GARGANTUAR, 6)) {
? ? ? ? ? ?row = 6;
? ? ? ? ? ?t[FireR(24, 9)];
? ? ? ?} else if(AIsZombieExist(AGIGA_GARGANTUAR, 5)) {
? ? ? ? ? ?row = 5;
? ? ? ? ? ?t[FireR(13, 9)];
? ? ? ?} else if(AIsZombieExist(AGIGA_GARGANTUAR, 1)) {
? ? ? ? ? ?row = 1;
? ? ? ? ? ?t[FireR(35, 9)];
? ? ? ?} else
? ? ? ? ? ?ANow[InfoR("無法收尾")];
? ? ? ?for(int i = 0; i < n; i++)
? ? ? ? ? ?t + ARelTime(207 * i)[f({row}, -1)];
? ? ? ?t + ARelTime(207 * n)[FireR(row, 9)];
? ?)];
}
void AScript() {
? ?ASetReloadMode(AReloadMode::MAIN_UI);
? ?AConnect(AKey('Q'), []{ throw AException(""); });
? ?ASetGameSpeed(1);
? ?ASetZombies({APOLE_VAULTING_ZOMBIE, AJACK_IN_THE_BOX_ZOMBIE, ADANCING_ZOMBIE, ADIGGER_ZOMBIE, APOGO_ZOMBIE, ABUNGEE_ZOMBIE, ALADDER_ZOMBIE, ACATAPULT_ZOMBIE, AGARGANTUAR, AGARGANTUAR, AGIGA_GARGANTUAR, APOLE_VAULTING_ZOMBIE, AJACK_IN_THE_BOX_ZOMBIE, ADANCING_ZOMBIE, ADIGGER_ZOMBIE, APOGO_ZOMBIE, ABUNGEE_ZOMBIE, ALADDER_ZOMBIE, ACATAPULT_ZOMBIE, AGARGANTUAR, AGIGA_GARGANTUAR, AGIGA_GARGANTUAR});
? ?ASelectCards({AICE_SHROOM, AM_ICE_SHROOM, ADOOM_SHROOM, ACHERRY_BOMB, AJALAPENO, APUFF_SHROOM, ASUN_SHROOM, ASCAREDY_SHROOM, AFLOWER_POT, ASUNFLOWER});
? ?*(uint16_t*)0x46d672 = 0x9700;
? ?AWave(1, 10)[
? ? ? ?254_cs[FireR(25, 9)],
? ? ? ?359_cs[FireR(25, 9), 260_cs[FireR(25, 4)]]
? ?].AssumeWaveLength(601);
? ?AWave(2, 11)[
? ? ? ?249_cs[FireR(2255, 9)],
? ? ? ?359_cs[FireR(135, 9)]
? ?].AssumeWaveLength(601);
? ?AWave(3, 12)[
? ? ? ?1_cs[IceNightR(2, 9)],
? ? ? ?301_cs[FireR(25, 9.5)],
? ? ? ?871_cs[f({1, 5, 6})],
? ? ? ?1080_cs[FireR(3, 8.175)],
? ? ? ?1336_cs[FireR(25, 9)]
? ?].AssumeWaveLength(1536);
? ?AWave(4, 13)[
? ? ? ?11_cs[SmartIce()],
? ? ? ?579_cs[FireR(25, 9), 360_cs[FireR(25, 4)]],
? ? ? ?919_cs[f({1, 5, 6})],
? ? ? ?1104_cs[FireR(3, 8.15)],
? ? ? ?1463_cs[FireR(25, 9), 210_cs[FireR(25, 9)]]
? ?].AssumeWaveLength(1663);
? ?AWave(5, 14)[
? ? ? ?232_cs[
? ? ? ? ? ?-42_cs[f({5, 6}, 120)],
? ? ? ? ? ?-99_cs[CardR({{AJALAPENO, 1, 9}, {ACHERRY_BOMB, 2, 9}})],
? ? ? ? ? ?FireR(35, 8.75),
? ? ? ? ? ?261_cs[FireR(25, 3.5)]
? ? ? ?],
? ? ? ?539_cs[f({1, 5, 6}, 100)]
? ?].AssumeWaveLength(601);
? ?AWave(6, 15)[
? ? ? ?359_cs[
? ? ? ? ? ?-105_cs[FireR(2, 9)],
? ? ? ? ? ?-134_cs[FireR(5, 9)],
? ? ? ? ? ?-99_cs[CardR(ADOOM_SHROOM, {{3, 9}, {4, 9}})],
? ? ? ? ? ?255_cs[FireR(25, 3.5)]
? ? ? ?],
? ? ? ?360_cs[f({5, 6}, 134)]
? ?].AssumeWaveLength(601);
? ?AWave(7, 16)[
? ? ? ?275_cs[FireR(235, 9), 260_cs[FireR(25, 3.5)]],
? ? ? ?420_cs[f({1, 5, 6}, 1)]
? ?].AssumeWaveLength(601);
? ?AWave(8, 17)[
? ? ? ?1_cs[IceNightR(2, 9)],
? ? ? ?589_cs[FireR(25, 9), 370_cs[FireR(25, 4)]],
? ? ? ?919_cs[f({1, 5, 6})],
? ? ? ?1114_cs[FireR(3, 8.15)],
? ? ? ?1472_cs[FireR(25, 9)]
? ?].AssumeWaveLength(1672);
? ?AWave(9, 18)[
? ? ? ?11_cs[SmartIce()],
? ? ? ?579_cs[FireR(25, 9) + 360_cs[FireR(25, 3.5)]],
? ? ? ?919_cs[f({1, 5, 6})],
? ? ? ?1104_cs[FireR(3, 8.15)],
? ? ? ?1350_cs[FireR(25, 9)]
? ?].AssumeWaveLength(1550);
? ?9_wave + 1350_cs + 210_cs[
? ? ? ?FireR(25, 9),
? ? ? ?220_cs[FireR(135, 8.75), MaidCheatsR::Dancing()]
? ?];
? ?9_wave + 2100_cs[Ending(9)];
? ?10_wave[MaidCheatsR::Stop()];
? ?18_wave + 1360_cs + 360_cs[FireR(25, 3.5)];
? ?19_wave[
? ? ? ?249_cs[FireR(2255, 9)],
? ? ? ?359_cs[FireR(13, 8.75), MaidCheatsR::Dancing()],
? ? ? ?360_cs - 100_cs[CardR(ACHERRY_BOMB, 5, 9)]
? ?].AssumeWaveLength(601);
? ?19_wave + 1000_cs[Ending(9)];
? ?20_wave[
? ? ? ?0_cs[AMkRelOp(
? ? ? ? ? ?for(auto& pi : objFilter(APlaceItem, Type, 1))
? ? ? ? ? ? ? ?pi.MRef<bool>(0x20) = true;
? ? ? ?)],
? ? ? ?MaidCheatsR::Stop(),
? ? ? ?341_cs[FireR(25, 9)],
? ? ? ?446_cs[FireR(2255, 9), 260_cs[FireR(25, 4)]],
? ? ? ?1000_cs[Ending(9)]
? ?];
}