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

【N6E】三花22炮 脚本

2022-12-30 16:30 作者:--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-PPDD 1663
cc(BB)AA'ddc
NSSDDD
PP[dd]
IPPdd-cccB-PP 1672
I3PP(dd)-cccB-PPdd 1550
PPSSDDA
*/

FodderR f({APUFF_SHROOM, ASUN_SHROOM, ASCAREDY_SHROOM, AFLOWER_POT});

ARelOp Ending(int n) {
    return -373_cs[AMkRelOp(
        set<int> plantable;
        for(int i = 0; i < 6; i++)
            if(AAsm::GetPlantRejectType(APUFF_SHROOM, i, 8) == AAsm::NIL)
                plantable.insert(i + 1);
        int row;
        auto t = ANow + 373_cs;
        if(AIsZombieExist(AGIGA_GARGANTUAR, 6) && plantable.contains(6)) {
            row = 6;
            t[FireR(24, 9)];
        } else if(AIsZombieExist(AGIGA_GARGANTUAR, 5) && plantable.contains(5)) {
            row = 5;
            t[FireR(13, 9)];
        } else if(AIsZombieExist(AGIGA_GARGANTUAR, 1) && plantable.contains(1)) {
            row = 1;
            t[FireR(35, 9)];
        } else {
            ANow[InfoR("无法收尾")];
            return;
        }
        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, AGRAVE_BUSTER});
    *(uint16_t*)0x46d672 = 0x9700;

    AWave(1, 10)[
        MaidCheatsR::Stop(),
        318_cs[FireR(25, 9)],
        359_cs[FireR(25, 9), 260_cs[FireR(25, 3.5)]]
    ].AssumeWaveLength(601);

    AWave(2, 11)[
        249_cs[FireR(2255, 9)],
        359_cs[FireR(135, 9)]
    ].AssumeWaveLength(601);

    AWave(3, 12)[
        1_cs[IceNightR(4, 4)],
        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[IceNightR(4, 4)],
        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)[
        300_cs[f({5, 6}, 1)],
        232_cs[
            -100_cs[CardR({{AJALAPENO, 1, 9}, {ACHERRY_BOMB, 2, 9}})],
            FireR(35, 8.75),
            261_cs[FireR(25, 3.5)]
        ]
    ].AssumeWaveLength(601);

    AWave(6)[
        0_cs[f({6}, 1)],
        246_cs - 100_cs[CardR(ADOOM_SHROOM, 3, 9)],
        245_cs[FireR(25, 9)],
        359_cs[FireR(135, 8.75)]
    ].AssumeWaveLength(601);

    AWave(15)[
        0_cs[f({1}, 1)],
        246_cs - 100_cs[CardR(ADOOM_SHROOM, 4, 9)],
        245_cs[FireR(25, 9)],
        359_cs[FireR(135, 8.75)]
    ].AssumeWaveLength(601);

    AWave(7, 16)[
        318_cs[FireR(25, 9) + 260_cs[FireR(25, 3.5)]]
    ].AssumeWaveLength(601);

    AWave(8, 17)[
        1_cs[IceNightR(4, 4)],
        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[IceNightR(4, 4)],
        579_cs[FireR(25, 9), 360_cs[FireR(25, 4)]],
        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[
        MaidCheatsR::Stop(),
        341_cs[FireR(25, 9)],
        446_cs[FireR(2255, 9), 260_cs[FireR(25, 3.5)]],
        1000_cs[Ending(9)],
        1000_cs[AMkRelOp(
            for(int r = 1; r <= 6; r++)
                if(AAsm::GetPlantRejectType(AGRAVE_BUSTER, r - 1, 8) == AAsm::NIL)
                    ACard(AGRAVE_BUSTER, r, 9);
        )]
    ];
}


【N6E】三花22炮 脚本的评论 (共 条)

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