欢迎光临散文网 会员登陆 & 注册

【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)]
    ];
}


【N6E】四花22炮(探索)脚本的评论 (共 条)

分享到微博请遵守国家法律