【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()) // 复制冰可用
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)]
];
}