├── .gitignore ├── Dicot ├── DE前置八炮 │ ├── DE前置八炮.png │ ├── de_forward_8_cob.cpp │ └── game1_13.dat ├── FE二十二炮 │ ├── FE二十二炮.png │ ├── fe_22_cob.cpp │ └── game1_13.dat ├── ME十三炮 │ ├── ME十三炮.png │ ├── game1_13.dat │ └── me_13_cob.cpp ├── NE十五炮 │ ├── NE十五炮.png │ ├── game1_13.dat │ └── ne_15_cob.cpp ├── PE二十四炮 │ ├── PE二十四炮.png │ ├── game1_13.dat │ └── pe_24_cob.cpp ├── PE半场十二炮 │ ├── PE半场十二炮.png │ ├── game1_13.dat │ └── pe_half_12_cob.cpp ├── PE最后之作 │ ├── PE最后之作.png │ ├── game1_13.dat │ └── pe_last_order.cpp ├── PE裸奔十六炮 │ ├── PE裸奔十六炮.png │ ├── game1_13.dat │ └── pe_streaking_16_cob.cpp ├── RE十六炮 │ ├── RE十六炮.png │ ├── game1_13.dat │ └── re_16_cob.cpp └── RE椭盘十四炮 │ ├── RE椭盘十四炮.png │ ├── game1_13.dat │ └── re_ellipse_14_cob.cpp ├── README.md ├── alterit └── PE.经典十二炮 │ ├── PE.经典12炮.cpp │ ├── PE.经典12炮.png │ └── 特殊处理说明 ├── qrmd ├── BeghouledTwist │ ├── BeghouledTwist.cpp │ ├── README.txt │ └── bin │ │ ├── BeghouledTwist.dll │ │ ├── BeghouledTwist.exe │ │ ├── README.md │ │ └── 使用说明.txt ├── DE前置八炮 │ ├── DEQianZhi8.cpp │ ├── DE前置八炮.png │ └── game1_11.dat ├── DE双冰六炮 │ ├── DEShuangBing6.cpp │ ├── DE双冰六炮.png │ └── game1_11.dat ├── DE守城十二炮 │ ├── DEShouCheng12.cpp │ ├── DE守城十二炮.png │ └── game1_11.dat ├── FE二十四炮 │ ├── FE24.cpp │ ├── FE二十四炮.png │ └── game1_14.dat ├── FE弦十四炮 │ ├── FEXian14.cpp │ ├── FE弦十四炮.png │ └── game1_14.dat ├── FE新磁铁四炮 │ ├── FEXinCiTie4.cpp │ ├── FE新磁铁四炮.png │ └── game1_14.dat ├── FE神之八炮 │ ├── FEShenZhi8.cpp │ ├── FE神之八炮.png │ └── game1_14.dat ├── FE神之四炮 │ ├── FEShenZhi4.cpp │ ├── FE神之四炮.png │ └── game1_14.dat ├── ME核聚变六炮 │ ├── MEHeJuBian6.cpp │ ├── ME核聚变六炮.png │ └── game1_15.dat ├── ME田八炮 │ ├── METian8.cpp │ ├── ME田八炮.png │ └── game1_15.dat ├── ME神之六炮 │ ├── MEHeJuBian6.cpp │ ├── ME神之六炮.png │ └── game1_15.dat ├── NE压碑五炮 │ ├── NEYaBei5.cpp │ ├── NE压碑五炮.png │ └── game1_12.dat ├── NE土豆四炮 │ ├── NETuDou4.cpp │ ├── NE土豆四炮.png │ └── game1_12.dat ├── NE核代十炮·改 │ ├── NEHeDai10_Gai.cpp │ ├── NE核代十炮·改.png │ └── game1_12.dat ├── NE舞夜惊魂 │ ├── NEWuYeJingHun12.cpp │ ├── NE舞夜惊魂.png │ └── game1_12.dat ├── PE&FE垫材十二炮 │ ├── FE垫材十二炮.png │ ├── PE&FEDianCai12.cpp │ ├── PE垫材十二炮.png │ ├── README.md │ ├── bin │ │ ├── 十倍速版 │ │ │ ├── PE&FEDianCai12.dll │ │ │ └── PE&FEDianCai12.exe │ │ ├── 原速版 │ │ │ ├── PE&FEDianCai12.dll │ │ │ └── PE&FEDianCai12.exe │ │ └── 极速跳帧版 │ │ │ ├── PE&FEDianCai12.dll │ │ │ └── PE&FEDianCai12.exe │ ├── game1_13.dat │ └── game1_14.dat ├── PEC2八炮 │ ├── PEC28.cpp │ ├── PEC2八炮.png │ └── game1_13.dat ├── PE②炮 │ ├── PEXiao②10.cpp │ ├── PE②炮.png │ └── game1_13.dat ├── PE二十四炮 │ ├── PE24.cpp │ └── README.md ├── PE全金属四炮 │ ├── PEQuanJinShu4.cpp │ ├── PE全金属四炮.png │ └── game1_13.dat ├── PE冰心灯十四炮 │ └── PEBingXinDeng14.png ├── PE冰雨十二炮·改 │ ├── PEBingYu12_Gai.cpp │ ├── PE冰雨十二炮·改.png │ └── game1_13.dat ├── PE半场十二炮 │ ├── PEBanChang12.cpp │ ├── PE半场十二炮.png │ └── game1_13.dat ├── PE单紫卡十二炮 │ ├── PEDanZiKa12.cpp │ ├── PE单紫卡十二炮.png │ └── game1_13.dat ├── PE双冰十六炮·改 │ ├── PEShuangBing16_Gai.cpp │ ├── PE双冰十六炮·改.png │ └── game1_13.dat ├── PE变奏二十二炮 │ ├── PEBianZou22.cpp │ ├── PE变奏二十二炮.png │ └── game1_13.dat ├── PE无冰瓜二十炮 │ ├── PEWuBingGua20.cpp │ ├── PE无冰瓜二十炮.png │ └── game1_13.dat ├── PE玉米八炮 │ ├── PEYuMi8.cpp │ ├── PE玉米八炮.png │ └── game1_13.dat ├── PE神之六炮·改 │ ├── PEShenZhi6_Gai.cpp │ ├── PE神之六炮·改.png │ └── game1_13.dat ├── PE空炸十八炮 │ ├── PEKongZha18.cpp │ ├── PE空炸十八炮.png │ └── game1_13.dat ├── PE经典八炮 │ ├── PEJingDian8.cpp │ ├── PE经典八炮.png │ └── game1_13.dat ├── PE经典十二炮 │ ├── PEJingDian12.cpp │ ├── PE经典十二炮.png │ └── game1_13.dat ├── PE经典十八炮 │ ├── PEJingDian18.cpp │ ├── PE经典十八炮.png │ └── game1_13.dat ├── PE经典十炮·改 │ ├── PEJingDian10_Gai.cpp │ ├── PE经典十炮·改.png │ └── game1_13.dat ├── PE经典四炮 │ ├── PEJingDian4.cpp │ ├── PE经典四炮.png │ ├── README.md │ ├── bin │ │ ├── 十倍速版 │ │ │ ├── PEJingDian4.dll │ │ │ └── PEJingDian4.exe │ │ ├── 原速版 │ │ │ ├── PEJingDian4.dll │ │ │ └── PEJingDian4.exe │ │ └── 极速跳帧版 │ │ │ ├── PEJingDian4.dll │ │ │ └── PEJingDian4.exe │ └── game1_13.dat ├── RE中开六炮 │ ├── RE中开六炮.png │ └── game1_15.dat ├── RE天台十炮 │ ├── RETianTai10.cpp │ ├── RE天台十炮.png │ └── game1_15.dat ├── RE椭盘十四炮 │ ├── RETuoPan14.cpp │ ├── RE椭盘十四炮.png │ └── game1_15.dat ├── RE神之七炮 │ ├── MEShenZhi6.cpp │ ├── RE神之七炮.png │ └── game1_15.dat ├── WhackAZombie │ ├── README.txt │ ├── WhackAZombie.cpp │ └── bin │ │ ├── README.md │ │ ├── WhackAZombie.dll │ │ ├── WhackAZombie.exe │ │ └── 使用说明.txt └── ZomBotany2 │ ├── PlantFixerPlus.h │ ├── README.txt │ ├── Zombotany2.cpp │ ├── bin │ ├── README.md │ ├── ZomBotany2.dll │ ├── ZomBotany2.exe │ └── 使用说明.txt │ └── tick_planter.h ├── shallowdream └── PE不经典十六炮 │ ├── PE不经典十六炮键控冲关.cpp │ ├── game1_13.dat │ └── 阵图.png └── sin20 ├── PE蝶恋花 ├── PE蝶恋花.cpp ├── PE蝶恋花.dll ├── PE蝶恋花.exe └── game2_13蝶恋花.dat ├── WSAD 4.0.zip └── WSAD 4.0 ├── README.md ├── WSAD 4.0.cpp ├── WSAD 4.0.dll ├── WSAD 4.0.exe ├── WSAD 初始存档.png └── game1_12.dat /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows: 2 | Thumbs.db 3 | ehthumbs.db 4 | Desktop.ini 5 | 6 | # Visual Studio Code 7 | .vscode 8 | 9 | # AsmVsZombies 10 | libavz_inject.dll -------------------------------------------------------------------------------- /Dicot/DE前置八炮/DE前置八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/DE前置八炮/DE前置八炮.png -------------------------------------------------------------------------------- /Dicot/DE前置八炮/de_forward_8_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: DE前置八炮 3 | * 出处: https://tieba.baidu.com/p/3943536673 4 | * 节奏: ch5: PP|I-PP|IPP-PP, (601|1437|1437) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | 11 | ALogger consoleLogger; // 日志对象-控制台 12 | 13 | void AScript() 14 | { 15 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 16 | 17 | ASetZombies({ 18 | AZOMBIE, // 普僵 19 | APOLE_VAULTING_ZOMBIE, // 撑杆 20 | ADANCING_ZOMBIE, // 舞王 21 | AZOMBONI, // 冰车 22 | AJACK_IN_THE_BOX_ZOMBIE, // 小丑 23 | ABALLOON_ZOMBIE, // 气球 24 | ADIGGER_ZOMBIE, // 矿工 25 | APOGO_ZOMBIE, // 跳跳 26 | ABUNGEE_ZOMBIE, // 蹦极 27 | ALADDER_ZOMBIE, // 扶梯 28 | ACATAPULT_ZOMBIE, // 篮球 29 | AGARGANTUAR, // 白眼 30 | AGIGA_GARGANTUAR, // 红眼 31 | }); 32 | ASelectCards({ 33 | ACOFFEE_BEAN, // 咖啡豆 34 | AICE_SHROOM, // 寒冰菇 35 | AM_ICE_SHROOM, // 复制冰 36 | ACHERRY_BOMB, // 樱桃 37 | ASQUASH, // 窝瓜 38 | AWALL_NUT, // 坚果 39 | AFLOWER_POT, // 花盆 40 | ASCAREDY_SHROOM, // 胆小菇 41 | ASUN_SHROOM, // 阳光菇 42 | APUFF_SHROOM, // 小喷菇 43 | }); 44 | 45 | Connect(1, -599, 46 | aCobManager.SetList({{1, 1}, {1, 5}, {3, 1}, {3, 5}, {2, 5}, {4, 5}, {5, 1}, {5, 5}}); 47 | aIceFiller.Start({{2, 1}, {4, 1}, {3, 7}})); 48 | 49 | for (int wave = 1; wave < 21; ++wave) 50 | { 51 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 52 | 53 | // PP 54 | if (ARangeIn(wave, {1, 4, 7, 10, 13, 16, 19})) 55 | { 56 | Connect(wave, -40, aCobManager.Fire({{2, 9}, {4, 9}})); 57 | Connect(wave, 601 + 10 - 298, aIceFiller.Coffee()); 58 | if (wave == 19) 59 | { 60 | Connect(wave, 601 + 1437 - 200 - 373, aCobManager.Fire({{2, 8.7}, {4, 8.7}})); 61 | Connect(wave, /*601 + 1437 - 150*/ 4500 - 200 - 373, 62 | aCobManager.Fire({{2, 8.4}, {4, 8.4}})); 63 | } 64 | } 65 | 66 | // I-PP 67 | else if (ARangeIn(wave, {2, 5, 8, 11, 14, 17})) 68 | { 69 | if (wave == 2) 70 | { 71 | Connect(wave, 10 + 400, ACard(ASQUASH, 3, 9)); // 压冰车护存冰 72 | Connect(wave, 750, ACard(APUFF_SHROOM, 3, 8)); // 垫撑杆 73 | Connect(wave, 750 + 100, ARemovePlant(3, 8)); 74 | } 75 | if (wave == 11) 76 | { 77 | Connect(wave, 10 + 400 - 100, ACard(ACHERRY_BOMB, 3, 8)); // 炸冰车小偷护存冰 78 | } 79 | Connect(wave, 1437 - 200 - 373, aCobManager.Fire({{2, 8.7}, {4, 8.7}})); 80 | Connect(wave, 1437 + 20 - 298, aIceFiller.Coffee()); 81 | } 82 | 83 | // IPP-PP 84 | else if (ARangeIn(wave, {3, 6, 9, 12, 15, 18})) 85 | { 86 | Connect(wave, -150, aCobManager.Fire({{2, 8.5}, {4, 8.5}})); 87 | Connect(wave, 1437 - 200 - 373, aCobManager.Fire({{2, 8.7}, {4, 8.7}})); 88 | if (wave == 9) 89 | { 90 | Connect(wave, 1437 - 40, aCobManager.Fire({{2, 8.7}, {4, 8.7}})); 91 | Connect(wave, /*1437 + 601 + 1437 - 200 - 373*/ 4500 - 200 - 373, 92 | aCobManager.Fire({{2, 8.4}, {4, 8.4}})); 93 | } 94 | } 95 | 96 | else if (wave == 20) 97 | { 98 | Connect(wave, -60, aCobManager.Fire({{1, 9}, {2, 9}, {4, 9}, {5, 9}})); 99 | Connect(wave, -60 + 108, aCobManager.Fire({{1, 8.8}, {4, 8.8}})); 100 | Connect(wave, 300, 101 | aIceFiller.Coffee(); // 冰杀小偷 102 | aIceFiller.SetIceSeedList({AM_ICE_SHROOM}); // 最后一个存冰 103 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /Dicot/DE前置八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/DE前置八炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/FE二十二炮/FE二十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/FE二十二炮/FE二十二炮.png -------------------------------------------------------------------------------- /Dicot/FE二十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/FE二十二炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/ME十三炮/ME十三炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/ME十三炮/ME十三炮.png -------------------------------------------------------------------------------- /Dicot/ME十三炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/ME十三炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/ME十三炮/me_13_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: ME十三炮 3 | * 出处: https://tieba.baidu.com/p/5288033944 4 | * 节奏: C5u-35s: PPD|PPD|PPD|IP-PPD, (6|6|6|17) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | 11 | ALogger consoleLogger; // 日志对象-控制台 12 | 13 | ACoroutine I() 14 | { 15 | ACard({AFLOWER_POT, AICE_SHROOM}, 3, 7); 16 | co_await ANowDelayTime(100 + 1); 17 | ARemovePlant(3, 7); 18 | } 19 | 20 | ACoroutine II() 21 | { 22 | ACard({AFLOWER_POT, AM_ICE_SHROOM}, 3, 7); 23 | co_await ANowDelayTime(320 + 100 + 1); 24 | ARemovePlant(3, 7); 25 | } 26 | 27 | void AScript() 28 | { 29 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 30 | 31 | ASetZombies({ 32 | AZOMBIE, // 普僵 33 | APOLE_VAULTING_ZOMBIE, // 撑杆 34 | AFOOTBALL_ZOMBIE, // 橄榄 35 | AZOMBONI, // 冰车 36 | AJACK_IN_THE_BOX_ZOMBIE, // 小丑 37 | ABALLOON_ZOMBIE, // 气球 38 | APOGO_ZOMBIE, // 跳跳 39 | ABUNGEE_ZOMBIE, // 蹦极 40 | ALADDER_ZOMBIE, // 扶梯 41 | ACATAPULT_ZOMBIE, // 篮球 42 | AGARGANTUAR, // 白眼 43 | AGIGA_GARGANTUAR, // 红眼 44 | }); 45 | ASelectCards({ 46 | AKERNEL_PULT, // 玉米 47 | ACOB_CANNON, // 玉米炮 48 | ABLOVER, // 三叶草 49 | AUMBRELLA_LEAF, // 保护伞 50 | ACHERRY_BOMB, // 樱桃 51 | ASQUASH, // 倭瓜 52 | AWALL_NUT, // 坚果 53 | AFLOWER_POT, // 花盆 54 | AICE_SHROOM, // 寒冰菇 55 | AM_ICE_SHROOM, // 复制冰 56 | }); 57 | 58 | Connect(1, -599, 59 | aCobManager.SetList({ 60 | {1, 3}, {1, 5}, {1, 1}, // 61 | {2, 3}, {2, 5}, {2, 1}, // 62 | {3, 3}, {3, 5}, {3, 1}, // 63 | {4, 6}, // 64 | {4, 1}, {5, 6}, {5, 1}, // 65 | })); 66 | 67 | for (int wave = 1; wave < 21; ++wave) 68 | { 69 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 70 | 71 | if (wave == 20) 72 | { 73 | Connect(wave, 10 - 320, ACoLaunch(II)); // 冰消空降 74 | Connect(wave, 100, aCobManager.RoofFire(5, 8)); 75 | Connect(wave, 800, aCobManager.RoofFire({{2, 9}, {2, 9}, {2, 9}, {2, 9}})); 76 | Connect(wave, 1000, aCobManager.RoofFire({{4, 9}, {4, 9}, {4, 9}, {4, 9}}); 77 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 78 | } 79 | 80 | // IP-PPD 81 | else if (ARangeIn(wave, {4, 8, 10, 14, 18})) 82 | { 83 | if (ARangeIn(wave, {4, 10, 18})) 84 | { 85 | Connect(wave, 5 - 100, ACoLaunch(I)); // 本波原版冰 86 | } 87 | Connect(wave, 100, aCobManager.RoofFire(5, 8)); 88 | Connect(wave, 1700 - 200 - 387, aCobManager.RoofFire({{2, 8.5}, {4, 8.5}})); 89 | Connect(wave, 1700 - 200 - 387 + 230, aCobManager.RoofFire(2, 7)); // 减速延迟 230 炸小鬼 90 | } 91 | 92 | // PPD 93 | else // else if (ARangeIn(wave, {1, 2, 3, 5, 6, 7, 9, 11, 12, 13, 15, 16, 17, 19})) 94 | { 95 | Connect(wave, 10, aCobManager.RoofFire({{2, 8.5}, {4, 8.5}})); // 刷新后 96 | Connect(wave, 10 + 130, aCobManager.RoofFire(2, 7.6)); // 原速延迟 130 炸小鬼 97 | if (ARangeIn(wave, {7, 13})) 98 | { 99 | Connect(wave, 601 + 5 - 100 - 320, ACoLaunch(II)); // 下一波的复制冰 100 | } 101 | if (ARangeIn(wave, {9, 19})) // 收尾 102 | { 103 | Connect(wave, 601, aCobManager.RoofFire({{2, 8.5}, {4, 8.5}})); 104 | Connect(wave, 601 + 130, aCobManager.RoofFire(2, 7.6)); 105 | // 自动操作收尾 106 | Connect(wave, 601 + 601, aCobManager.RoofFire(2, 7.4)); 107 | Connect(wave, 601 + 601 + 300, aCobManager.RoofFire(5, 8)); 108 | Connect(wave, 601 + 601 + 300 + 500, aCobManager.RoofFire(5, 8)); 109 | } 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /Dicot/NE十五炮/NE十五炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/NE十五炮/NE十五炮.png -------------------------------------------------------------------------------- /Dicot/NE十五炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/NE十五炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/NE十五炮/ne_15_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: NE十五炮 3 | * 出处: https://tieba.baidu.com/p/1067040250 4 | * 节奏: C8u: IPP-PP|PADC|PPDD|IPP-PP|NDC|PPDD, (13|6|6|13|6|6) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define CoConnect(wave, time, ...) AConnect(ATime(wave, time), [=]() -> ACoroutine { __VA_ARGS__; }) 11 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 12 | 13 | ALogger consoleLogger; // 日志对象-控制台 14 | 15 | ACoroutine DianCai() 16 | { 17 | ACard({{APUFF_SHROOM, 4, 9}, {ASUN_SHROOM, 5, 9}}); 18 | Delay(120); 19 | ARemovePlant({{4, 9}, {5, 9}}); 20 | } 21 | 22 | void AScript() 23 | { 24 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 25 | 26 | ASetZombies({ 27 | AZOMBIE, // 普僵 28 | APOLE_VAULTING_ZOMBIE, // 撑杆 29 | ADANCING_ZOMBIE, // 舞王 30 | AJACK_IN_THE_BOX_ZOMBIE, // 小丑 31 | ABALLOON_ZOMBIE, // 气球 32 | ADIGGER_ZOMBIE, // 矿工 33 | APOGO_ZOMBIE, // 跳跳 34 | ABUNGEE_ZOMBIE, // 蹦极 35 | ALADDER_ZOMBIE, // 扶梯 36 | ACATAPULT_ZOMBIE, // 篮球 37 | AGARGANTUAR, // 白眼 38 | AGIGA_GARGANTUAR, // 红眼 39 | }); 40 | ASelectCards({ 41 | AM_ICE_SHROOM, // 复制冰 42 | AICE_SHROOM, // 原版冰 43 | ADOOM_SHROOM, // 核蘑菇 44 | ACHERRY_BOMB, // 樱桃 45 | ASQUASH, // 倭瓜 46 | AGRAVE_BUSTER, // 墓碑 47 | APUMPKIN, // 南瓜 48 | ABLOVER, // 三叶草 49 | ASUN_SHROOM, // 阳光菇 50 | APUFF_SHROOM, // 小喷菇 51 | }); 52 | 53 | Connect(1, -599, aCobManager.AutoSetList(); 54 | // aCobManager.SetList({ 55 | // {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, 56 | // {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, 57 | // {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, 58 | // }); 59 | ); 60 | 61 | for (int wave = 1; wave < 21; ++wave) 62 | { 63 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 64 | 65 | // PPD 66 | if (wave == 10) 67 | { 68 | Connect(wave, -56, aCobManager.Fire({{2, 9}, {4, 9}})); 69 | Connect(wave, 0, aCobManager.Fire(2, 9)); 70 | } 71 | 72 | // IPP-PP 73 | else if (ARangeIn(wave, {1, 7, 11, 17})) 74 | { 75 | Connect(wave, -150, aCobManager.Fire({{2, 8.5}, {4, 8.5}})); 76 | Connect(wave, 5 - 100, ACard(AICE_SHROOM, 1, 9)); 77 | if (wave == 11) 78 | { 79 | Connect(wave, -150 + 83, ACoLaunch(DianCai)); 80 | } 81 | Connect(wave, 1300 - 200 - 373, aCobManager.Fire({{2, 9}, {4, 9}})); 82 | } 83 | 84 | // PADC 85 | else if (ARangeIn(wave, {2, 8, 12, 18})) 86 | { 87 | Connect(wave, -95, aCobManager.Fire(2, 9)); 88 | Connect(wave, -12, aCobManager.Fire(2, 9)); 89 | Connect(wave, -95 + 373 - 100, ACard(ACHERRY_BOMB, 5, 9)); 90 | } 91 | 92 | // PPDD 93 | else if (ARangeIn(wave, {3, 9, 13, 19})) 94 | { 95 | Connect(wave, -95, aCobManager.Fire({{2, 9}, {5, 9}})); 96 | Connect(wave, -15, aCobManager.Fire({{1, 9}, {4, 9}})); 97 | Connect(wave, 0, ACoLaunch(DianCai)); 98 | Connect(wave, 601 + 44 - 100 - 320, ACard(AM_ICE_SHROOM, 1, 9)); // 44cs 预判冰 99 | 100 | if (ARangeIn(wave, {9, 19})) 101 | { 102 | CoConnect(wave, 601 - 150, aCobManager.Fire(4, 9); 103 | Delay(450); aCobManager.Fire(1, 9)); 104 | CoConnect(wave, 601 + 1300 - 200 - 373, 105 | Delay(300); aCobManager.Fire({{2, 9}, {5, 9}})); 106 | } 107 | } 108 | 109 | // IPP-PP 110 | else if (ARangeIn(wave, {4, 14})) 111 | { 112 | Connect(wave, -150, aCobManager.Fire({{2, 8.5}, {4, 8.5}})); 113 | Connect(wave, 1300 - 200 - 373, aCobManager.Fire({{2, 9}, {4, 9}})); 114 | } 115 | 116 | // NDC 117 | else if (ARangeIn(wave, {5, 15})) 118 | { 119 | Connect(wave, -12, aCobManager.Fire(2, 9)); 120 | Connect(wave, -95 + 373 - 100, ACard(ADOOM_SHROOM, (wave == 5 ? 3 : 2), 9)); 121 | // 是第 5 波则弹坑在 3-9, 否则在 2-9 122 | } 123 | 124 | // PPDD 125 | else if (ARangeIn(wave, {6, 16})) 126 | { 127 | Connect(wave, -95, aCobManager.Fire({{2, 9}, {5, 9}})); 128 | Connect(wave, -12, aCobManager.Fire({{1, 9}, {4, 9}})); 129 | Connect(wave, 0, ACoLaunch(DianCai)); 130 | } 131 | 132 | else if (wave == 20) 133 | { 134 | Connect(wave, -56, aCobManager.Fire({{1, 9}, {4, 9}})); 135 | Connect(wave, -35, aCobManager.Fire({{2, 9}, {5, 9}})); // 炸墓碑冒出的僵尸 136 | CoConnect(wave, 601 - 100 - 83, aCobManager.Fire({{1, 8.3}, {4, 8.3}}); 137 | Delay(100); ACard(AICE_SHROOM, {{1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}})); // 冰杀小偷 138 | Connect(wave, 601, aCobManager.Fire({{2, 8.2}, {5, 8.2}}); 139 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 140 | } 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /Dicot/PE二十四炮/PE二十四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE二十四炮/PE二十四炮.png -------------------------------------------------------------------------------- /Dicot/PE二十四炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE二十四炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/PE二十四炮/pe_24_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: PE二十四炮 3 | * 出处: https://tieba.baidu.com/p/991306518 4 | * 节奏: P6: PPDD|PPI|PPSSDD|PPDD|PPI|PPSSDD 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define CoConnect(wave, time, ...) AConnect(ATime(wave, time), [=]() -> ACoroutine { __VA_ARGS__; }) 11 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 12 | 13 | ALogger consoleLogger; // 日志对象-控制台 14 | 15 | void AScript() 16 | { 17 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 18 | 19 | ASetZombies({ 20 | AZOMBIE, // 普僵 21 | APOLE_VAULTING_ZOMBIE, // 撑杆 22 | ADANCING_ZOMBIE, // 舞王 23 | AZOMBONI, // 冰车 24 | ADOLPHIN_RIDER_ZOMBIE, // 海豚 25 | ADIGGER_ZOMBIE, // 矿工 26 | APOGO_ZOMBIE, // 跳跳 27 | ABUNGEE_ZOMBIE, // 蹦极 28 | ALADDER_ZOMBIE, // 扶梯 29 | ACATAPULT_ZOMBIE, // 篮球 30 | AGARGANTUAR, // 白眼 31 | AGIGA_GARGANTUAR, // 红眼 32 | }); 33 | ASelectCards({ 34 | AM_ICE_SHROOM, // 复制冰 35 | AICE_SHROOM, // 寒冰菇 36 | ACOFFEE_BEAN, // 咖啡豆 37 | APUMPKIN, // 南瓜 38 | AWALL_NUT, // 坚果 39 | ASQUASH, // 窝瓜 40 | AFLOWER_POT, // 花盆 41 | ASCAREDY_SHROOM, // 胆小 42 | ASUN_SHROOM, // 阳光 43 | APUFF_SHROOM, // 小喷 44 | }); 45 | 46 | Connect(1, -599, 47 | // aCobManager.SetList({ 48 | // {1, 1}, {1, 3}, {1, 5}, {1, 7}, 49 | // {2, 1}, {2, 3}, {2, 5}, {2, 7}, 50 | // {3, 1}, {3, 3}, {3, 5}, {3, 7}, 51 | // {4, 1}, {4, 3}, {4, 5}, {4, 7}, 52 | // {5, 1}, {5, 3}, {5, 5}, {5, 7}, 53 | // {6, 1}, {6, 3}, {6, 5}, {6, 7}, 54 | // }); 55 | // for (int r = 1; r < 7; ++r) for (int c = 1; c < 8; c += 2) aCobManager.MoveToListBottom(r, c); 56 | aCobManager.AutoSetList(); 57 | aIceFiller.Start({{4, 9}});); 58 | 59 | for (int wave = 1; wave < 21; ++wave) 60 | { 61 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 62 | 63 | // 精准之舞 PPDD 64 | if (ARangeIn(wave, {1, 4, 7, 11, 14, 17})) 65 | { 66 | CoConnect(wave, -14, aCobManager.Fire({{2, 9}, {5, 9}}); 67 | Delay(107); aCobManager.Fire({{1, 7.7}, {5, 7.7}})); 68 | } 69 | 70 | // 冰之旋舞 PPI 71 | else if (ARangeIn(wave, {2, 5, 8, 12, 15, 18})) 72 | { 73 | CoConnect(wave, -95, aCobManager.Fire({{2, 9}, {5, 9}}); 74 | Delay(373 - 100 - 198); aIceFiller.Coffee()); // 冰同步于炮生效 75 | } 76 | 77 | // 六神乱舞 PPSSDD 78 | else if (ARangeIn(wave, {3, 6, 9, 13, 16, 19})) 79 | { 80 | CoConnect(wave, -95, aCobManager.Fire({{2, 9}, {5, 9}, {2, 9}, {5, 9}}); 81 | Delay(108); aCobManager.Fire({{1, 8.8}, {5, 8.8}})); 82 | if (ARangeIn(wave, {9, 19})) // 收尾 83 | { 84 | Connect(wave, 601 - 15, aCobManager.Fire({{2, 9}, {5, 9}})); 85 | } 86 | } 87 | 88 | // 大波推迟 PPSSDD 89 | else if (wave == 10) 90 | { 91 | CoConnect(wave, -56, aCobManager.Fire({{2, 9}, {5, 9}, {2, 9}, {5, 9}}); 92 | Delay(108); aCobManager.Fire({{1, 8.8}, {5, 8.8}})); 93 | } 94 | 95 | else if (wave == 20) 96 | { 97 | CoConnect(wave, -150, aCobManager.Fire({{4, 6}, {4, 8}}); // 炮炸珊瑚 98 | Delay(90); aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); // -60 99 | Delay(108); aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 100 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Dicot/PE半场十二炮/PE半场十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE半场十二炮/PE半场十二炮.png -------------------------------------------------------------------------------- /Dicot/PE半场十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE半场十二炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/PE半场十二炮/pe_half_12_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: PE半场十二炮 3 | * 出处: https://tieba.baidu.com/p/1801759994 4 | * 节奏: ch4: I+BC/d-PDD/P|I+BC/d-PDD/P, (18|18) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 11 | 12 | ALogger consoleLogger; // 日志对象-控制台 13 | 14 | // 种垫铲垫 15 | ACoroutine DianCai() 16 | { 17 | ACard({{APUFF_SHROOM, 1, 9}, {ASUN_SHROOM, 2, 9}}); 18 | Delay(100); 19 | ARemovePlant({{1, 9}, {2, 9}}); 20 | } 21 | 22 | // 烧小偷 23 | ACoroutine UseJalapeno() // 口吐金蛇 24 | { 25 | co_await ATime(10, 400); // 等第 10 波刷新 26 | ACard({ALILY_PAD, AJALAPENO}, 4, 9); 27 | Delay(100 + 1); 28 | ARemovePlant(4, 9); 29 | 30 | co_await ATime(20, 400); // 等第 20 波刷新 31 | ACard({ALILY_PAD, AJALAPENO}, 4, 9); 32 | Delay(100 + 1); 33 | ARemovePlant(4, 9); 34 | } 35 | 36 | void AScript() 37 | { 38 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 39 | 40 | ASetZombies({ 41 | AZOMBIE, // 普僵 42 | APOLE_VAULTING_ZOMBIE, // 撑杆 43 | ADANCING_ZOMBIE, // 舞王 44 | AZOMBONI, // 冰车 45 | ADOLPHIN_RIDER_ZOMBIE, // 海豚 46 | ADIGGER_ZOMBIE, // 矿工 47 | APOGO_ZOMBIE, // 跳跳 48 | ABUNGEE_ZOMBIE, // 蹦极 49 | ALADDER_ZOMBIE, // 扶梯 50 | ACATAPULT_ZOMBIE, // 篮球 51 | AGARGANTUAR, // 白眼 52 | AGIGA_GARGANTUAR, // 红眼 53 | }); 54 | ASelectCards({ 55 | AM_ICE_SHROOM, // 白冰 56 | AICE_SHROOM, // 冰菇 57 | ACOFFEE_BEAN, // 咖啡 58 | ALILY_PAD, // 荷叶 59 | APUMPKIN, // 南瓜 60 | ACHERRY_BOMB, // 樱桃 61 | AJALAPENO, // 辣椒 62 | ASQUASH, // 倭瓜 63 | ASUN_SHROOM, // 阳光 64 | APUFF_SHROOM, // 小喷 65 | }); 66 | 67 | Connect(1, -599, 68 | aCobManager.SetList({ 69 | {1, 3}, {2, 3}, {3, 3}, // 70 | {1, 5}, {2, 5}, {3, 5}, // 71 | {1, 7}, {2, 7}, {3, 7}, // 72 | {1, 1}, {2, 1}, {3, 1}, // 73 | }); 74 | ACard(AICE_SHROOM, 5, 5); // 临时存冰 75 | ACard({ALILY_PAD, APUMPKIN}, 3, 9); // 临时存冰位, 其实不需要南瓜头 76 | aIceFiller.Start({{4, 5}, {4, 6}, {4, 7}, {4, 8}, {3, 9}}); 77 | aPlantFixer.Start(APUMPKIN, {{4, 5}, {4, 6}, {4, 7}, {4, 8}}, 4000 * 0.3); 78 | ACoLaunch(UseJalapeno);); 79 | 80 | for (int wave = 1; wave < 21; ++wave) 81 | { 82 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 83 | 84 | if (ARangeIn(wave, {1, 10})) 85 | { 86 | Connect(wave, -95, aCobManager.Fire(1, 9)); 87 | Connect(wave, -15, aCobManager.Fire({{2, 9}, {5, 9}})); 88 | Connect(wave, -15 + 110, aCobManager.Fire(5, 7.7)); 89 | Connect(wave, -15 + 110 + 373 - 100, ACard(ACHERRY_BOMB, 1, 9)); // 368 90 | } 91 | 92 | else if (wave == 20) 93 | { 94 | Connect(wave, -150, aCobManager.Fire(4, 7)); 95 | Connect(wave, -60, aCobManager.Fire({{2, 9}, {5, 9}, {2, 9}, {5, 9}})); // 等到刷新前 60cs 96 | Connect(wave, -60 + 110, aCobManager.Fire({{1, 8.8}, {2, 8.8}}); aPlantFixer.Stop()); 97 | Connect(wave, -60 + 110 + 373 - 100, ACard(ACHERRY_BOMB, 5, 9); 98 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 99 | Connect(wave, 5500 + 100, ARemovePlant({{3, 9}, {3, 9}})); // 跳白字后铲掉 100 | } 101 | 102 | else 103 | { 104 | Connect(wave, -133, aCobManager.Fire(1, 8.0)); // 拦截上波红眼, 分离部分快速僵尸 105 | Connect(wave, 360 - 273, aCobManager.Fire(2, 8.15)); // 无冰分离 106 | Connect(wave, 360 - 298, if (wave == 2) ACard(ACOFFEE_BEAN, 5, 5); else aIceFiller.Coffee()); // 360cs 反应冰 107 | Connect(wave, 360 + 500 - 373, if (!ARangeIn(wave, {2, 11})) aCobManager.Fire(5, 3)); // 下半场尾炸 108 | Connect(wave, 1800 - 200 - 373, aCobManager.Fire({{2, 9}, {5, 8.1}})); // 激活炸 109 | Connect(wave, 1800 - 200 - 373 + 10, ACoLaunch(DianCai)); // 垫撑杆 110 | Connect(wave, 1800 - 200 - 373 + 220, aCobManager.Fire(1, 8.2)); // 秒白眼, 触发红眼投掷 111 | 112 | if (ARangeIn(wave, {9, 19})) // 收尾波次 113 | { 114 | Connect(wave, 1800 - 133, aCobManager.Fire(1, 8.0)); 115 | Connect(wave, 1800 + 360 - 373, aCobManager.Fire(2, 8.8)); 116 | Connect(wave, 1800 + 360 + 500 - 373, aCobManager.Fire(5, 2.5)); 117 | Connect(wave, 1800 + 1800 - 200 - 373, aCobManager.Fire(5, 6)); 118 | Connect(wave, 1800 + 1800 - 200 - 373 + 110, aCobManager.Fire(5, 6)); 119 | Connect(wave, 1800 + 1800 - 200 - 373 + 110 + 110, aCobManager.Fire(5, 3)); 120 | Connect(wave, 4500 - 200 - 373, aCobManager.Fire(5, 5); 121 | if (wave == 9) aCobManager.Skip(2); // 中场调整炮序 122 | else aIceFiller.Stop()); 123 | } 124 | } 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /Dicot/PE最后之作/PE最后之作.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE最后之作/PE最后之作.png -------------------------------------------------------------------------------- /Dicot/PE最后之作/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE最后之作/game1_13.dat -------------------------------------------------------------------------------- /Dicot/PE最后之作/pe_last_order.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: PE最后之作 3 | * 出处: https://tieba.baidu.com/p/5102612180 4 | * 节奏: ch5u-35.62s: PPDD|I-PPdd|IPP-PPDDCC, (6|13|16.62) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define CoConnect(wave, time, ...) AConnect(ATime(wave, time), [=]() -> ACoroutine { __VA_ARGS__; }) 11 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 12 | 13 | ALogger consoleLogger; // 日志对象-控制台 14 | 15 | ACoroutine DianCai() 16 | { 17 | ACard({ 18 | {AUMBRELLA_LEAF, 1, 8}, 19 | {ASCAREDY_SHROOM, 2, 8}, 20 | {ASUN_SHROOM, 5, 8}, 21 | {APUFF_SHROOM, 6, 8}, 22 | }); 23 | Delay(10); 24 | ARemovePlant({{1, 8}, {2, 8}, {5, 8}, {6, 8}}); 25 | } 26 | 27 | // 泳池水路 8 列临时高坚果阻挡海豚. 28 | // 残血或被偷后自动补, 中场种伞保护, 关底大波刷出后停止修补. 29 | ACoroutine TallNutKeeper() 30 | { 31 | // 开场种 32 | Delay(800); // TODO: 让给存冰位先 33 | ACard({ALILY_PAD, ATALL_NUT}, 3, 8); 34 | Delay(3000 + 1); 35 | ACard({ALILY_PAD, ATALL_NUT}, 4, 8); 36 | Delay(1); 37 | aPlantFixer.Start(ATALL_NUT, {{3, 8}, {4, 8}}, 2000); 38 | 39 | // 第 10 波刷新前种伞, 第 11 波铲掉 40 | co_await ATime(10, -200); 41 | ACard({ALILY_PAD, AUMBRELLA_LEAF}, 3, 9); 42 | co_await ATime(11, 0); 43 | ARemovePlant({{3, 9}, {3, 9}}); 44 | 45 | co_await ATime(20, 0); 46 | aPlantFixer.Stop(); 47 | } 48 | 49 | void AScript() 50 | { 51 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 52 | 53 | ASetZombies({ 54 | AZOMBIE, // 普僵 55 | APOLE_VAULTING_ZOMBIE, // 撑杆 56 | ADANCING_ZOMBIE, // 舞王 57 | AZOMBONI, // 冰车 58 | ADOLPHIN_RIDER_ZOMBIE, // 海豚 59 | ADIGGER_ZOMBIE, // 矿工 60 | APOGO_ZOMBIE, // 跳跳 61 | ABUNGEE_ZOMBIE, // 蹦极 62 | ALADDER_ZOMBIE, // 扶梯 63 | ACATAPULT_ZOMBIE, // 篮球 64 | AGARGANTUAR, // 白眼 65 | AGIGA_GARGANTUAR, // 红眼 66 | }); 67 | ASelectCards({ 68 | ACOFFEE_BEAN, // 咖啡豆 69 | AICE_SHROOM, // 寒冰菇 70 | AM_ICE_SHROOM, // 复制冰 71 | ALILY_PAD, // 睡莲 72 | ATALL_NUT, // 高坚果 73 | ACHERRY_BOMB, // 樱桃 74 | AUMBRELLA_LEAF, // 保护伞 75 | ASCAREDY_SHROOM, // 胆小 76 | ASUN_SHROOM, // 阳光 77 | APUFF_SHROOM, // 小喷 78 | }); 79 | 80 | Connect(1, -599, 81 | // aCobManager.SetList({ 82 | // {1, 1}, {2, 1}, {5, 1}, {6, 1}, 83 | // {1, 3}, {2, 3}, {5, 3}, {6, 3}, 84 | // {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}, 85 | // }); 86 | aCobManager.AutoSetList(); 87 | ACard(ALILY_PAD, 3, 3); // 临时存冰位 88 | aIceFiller.Start({{1, 5}, {6, 5}, {3, 3}}); 89 | ACoLaunch(TallNutKeeper)); 90 | 91 | for (int wave = 1; wave < 21; ++wave) 92 | { 93 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 94 | 95 | if (wave == 1) 96 | { 97 | CoConnect(wave, -95, aCobManager.Fire({{2, 9}, {5, 9}}); 98 | Delay(110); aCobManager.Fire({{1, 7.7}, {5, 7.7}})); 99 | } 100 | 101 | else if (ARangeIn(wave, {2, 10})) 102 | { 103 | Connect(wave, -15, aCobManager.Fire({{2, 9}, {5, 9}})); 104 | Connect(wave, -15 + 107, aCobManager.Fire({{1, 7.625}, {5, 7.625}})); 105 | if (wave == 10) 106 | { 107 | Connect(wave, -15 + 373 - 100, ACard(ACHERRY_BOMB, 2, 9)); // A 108 | } 109 | Connect(wave, 601 + 20 - 298, aIceFiller.Coffee()); // 20cs 预判冰 110 | } 111 | 112 | // I-PPdd 113 | else if (ARangeIn(wave, {3, 6, 9, 11, 14, 17})) 114 | { 115 | Connect(wave, 1300 - 200 - 373, aCobManager.Fire({{2, 8.8}, {5, 8.8}})); 116 | Connect(wave, 1300 + 20 - 298, aIceFiller.Coffee()); // 20cs 预判冰 117 | Connect(wave, 1300 - 200 - 373 + 349, aCobManager.Fire({{1, 2.425}, {5, 2.425}})); // 减速尾炸 118 | if (wave == 9) 119 | { 120 | // Connect(wave, 1300 + 180, aCobManager.Fire({{1, 7.2}, {5, 7.2}})); // 可省略 121 | CoConnect(wave, 1300 + 1662 - 200 - 373, aCobManager.Fire({{2, 8.8}, {5, 8.8}}); 122 | Delay(81); ACoLaunch(DianCai); 123 | Delay(220 - 81); aCobManager.Fire({{1, 7.8}, {5, 7.8}}); aCobManager.Skip(4); 124 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 125 | } 126 | } 127 | 128 | // IPP-PPDDC 129 | else if (ARangeIn(wave, {4, 7, 12, 15, 18})) 130 | { 131 | Connect(wave, 180, aCobManager.Fire({{1, 7.2}, {5, 7.2}})); 132 | CoConnect(wave, 1662 - 200 - 373, aCobManager.Fire({{2, 8.8}, {5, 8.8}}); 133 | Delay(81); ACoLaunch(DianCai); 134 | Delay(220 - 81); aCobManager.Fire({{1, 7.4}, {5, 7.4}})); // 左移 135 | } 136 | 137 | // PPdd 138 | else if (ARangeIn(wave, {5, 8, 13, 16, 19})) 139 | { 140 | Connect(wave, -15, aCobManager.Fire({{2, 9}, {5, 9}})); 141 | Connect(wave, -15 + 107, aCobManager.Fire({{1, 7.625}, {5, 7.625}})); 142 | Connect(wave, 601 + 20 - 298, aIceFiller.Coffee()); // 20cs 预判冰 143 | if (wave == 19) 144 | { 145 | CoConnect(wave, 601 + 1300 - 200 - 373, 146 | Delay(100); aCobManager.Fire({{2, 8.8}, {5, 8.8}}); // 尾炸炮时机微调 147 | Delay(220); aCobManager.Fire({{1, 7.5}, {5, 7.5}}); aCobManager.Skip(3); 148 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 149 | } 150 | } 151 | 152 | else if (wave == 20) 153 | { 154 | Connect(wave, -150, aCobManager.Fire(4, 7)); 155 | CoConnect(wave, -60, aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 156 | Delay(108); aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}})); 157 | } 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /Dicot/PE裸奔十六炮/PE裸奔十六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE裸奔十六炮/PE裸奔十六炮.png -------------------------------------------------------------------------------- /Dicot/PE裸奔十六炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/PE裸奔十六炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/PE裸奔十六炮/pe_streaking_16_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: PE裸奔十六炮 3 | * 出处: https://tieba.baidu.com/p/1289540813 4 | * 节奏: ch6: PPDC|IPd-PPD|PPDC|IPd-PPD, (6|12|6|12) 5 | */ 6 | #include 7 | 8 | // 使用宏定义简化代码 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define CoConnect(wave, time, ...) AConnect(ATime(wave, time), [=]() -> ACoroutine { __VA_ARGS__; }) 11 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 12 | 13 | ALogger consoleLogger; // 日志对象-控制台 14 | 15 | // 种垫铲垫 16 | ACoroutine DianCai_Up() // 垫上半场 17 | { 18 | ACard({{APUFF_SHROOM, 1, 7}, {ASUN_SHROOM, 2, 7}}); 19 | Delay(400); 20 | ARemovePlant({{1, 7}, {2, 7}}); 21 | } 22 | ACoroutine DianCai_Low() // 垫下半场 23 | { 24 | ACard({{APUFF_SHROOM, 5, 9}, {ASUN_SHROOM, 6, 9}}); 25 | Delay(100); 26 | ARemovePlant({{5, 9}, {6, 9}}); 27 | } 28 | 29 | // 偷菜 30 | ACoroutine Sunflower() 31 | { 32 | std::vector sunflowerSpots = {{1, 2}, {1, 5}, {1, 6}, {2, 2}, {2, 5}, {2, 6}}; 33 | // 开局种 34 | for (auto &[row, col] : sunflowerSpots) 35 | { 36 | ACard(ASUNFLOWER, row, col); 37 | Delay(751 + 1); 38 | } 39 | // 等第 20 波刷新 40 | co_await ATime(20, 0); 41 | // 等白字出现 42 | co_await [] { return AGetMainObject()->Words()->MRef(0x8C) == 12; }; 43 | // 结尾铲 44 | for (auto &[row, col] : sunflowerSpots) 45 | { 46 | ARemovePlant(row, col); 47 | } 48 | } 49 | 50 | void AScript() 51 | { 52 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 53 | 54 | ASetZombies({ 55 | AZOMBIE, // 普僵 56 | APOLE_VAULTING_ZOMBIE, // 撑杆 57 | ADANCING_ZOMBIE, // 舞王 58 | AZOMBONI, // 冰车 59 | ADOLPHIN_RIDER_ZOMBIE, // 海豚 60 | ADIGGER_ZOMBIE, // 矿工 61 | APOGO_ZOMBIE, // 跳跳 62 | ABUNGEE_ZOMBIE, // 蹦极 63 | ALADDER_ZOMBIE, // 扶梯 64 | ACATAPULT_ZOMBIE, // 篮球 65 | AGARGANTUAR, // 白眼 66 | AGIGA_GARGANTUAR, // 红眼 67 | }); 68 | ASelectCards({ 69 | ACOFFEE_BEAN, // 咖啡豆 70 | AICE_SHROOM, // 寒冰菇 71 | AM_ICE_SHROOM, // 复制冰 72 | ACHERRY_BOMB, // 樱桃 73 | ASQUASH, // 窝瓜 74 | APUMPKIN, // 南瓜头 75 | ASUNFLOWER, // 向日葵 76 | ASCAREDY_SHROOM, // 胆小菇 77 | ASUN_SHROOM, // 阳光菇 78 | APUFF_SHROOM, // 小喷菇 79 | }); 80 | 81 | Connect(1, -599, 82 | // aCobManager.SetList({ 83 | // {3, 1}, {3, 3}, {3, 5}, {3, 7}, 84 | // {4, 1}, {4, 3}, {4, 5}, {4, 7}, 85 | // {5, 1}, {5, 3}, {5, 5}, {5, 7}, 86 | // {6, 1}, {6, 3}, {6, 5}, {6, 7}, 87 | // }); 88 | aCobManager.AutoSetList(); 89 | aIceFiller.Start({{3, 9}, {4, 9}, {1, 4}, {2, 4}}); 90 | ACoLaunch(Sunflower); // 偷菜协程 91 | ); 92 | 93 | for (int wave = 1; wave < 21; ++wave) 94 | { 95 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 96 | 97 | // PPD|I- 98 | if (ARangeIn(wave, {1, 3, 5, 7, 9, 10, 12, 14, 16, 18})) 99 | { 100 | if (wave == 10) 101 | { 102 | Connect(wave, -56, aCobManager.Fire({{2, 9}, {5, 9}})); 103 | Connect(wave, -56 + 110, aCobManager.Fire(5, 8)); 104 | Connect(wave, 601 - 200 - 100, ACard(ACHERRY_BOMB, 2, 9)); // 301; 消延迟 炸小偷 105 | } 106 | else 107 | { 108 | Connect(wave, -133, aCobManager.Fire({{2, 9}, {5, 9}})); 109 | Connect(wave, -133 + 110, aCobManager.Fire(5, 8)); 110 | } 111 | Connect(wave, 601 + 50 - 298, aIceFiller.Coffee()); // 353; 50cs 预判冰 112 | 113 | if (wave == 9) // 第 9 波收尾 114 | { 115 | Connect(wave, 601 - 135, ACoLaunch(DianCai_Low)); 116 | Connect(wave, 601 - 100, aCobManager.Fire(1, 2.4)); 117 | Connect(wave, 601 + 444 - 373, aCobManager.Fire(5, 7.4)); 118 | CoConnect(wave, 601 + 1200 - 200 - 373, aCobManager.Fire({{2, 9}, {5, 9}}); 119 | Delay(220); aCobManager.Fire(5, 8.5)); 120 | Connect(wave, 601 + 1200 - 133, aCobManager.Fire({{1, 2.4}, {5, 9}})); 121 | Connect(wave, 601 + 1200 - 133 + 110, aCobManager.Fire(2, 9)); 122 | CoConnect(wave, 601 + 1200 + 601 - 100, 123 | Delay(600); aCobManager.Fire({{2, 9}, {5, 9}}); ACoLaunch(DianCai_Up)); 124 | } 125 | } 126 | 127 | // C|Pd-PPD 128 | else if (ARangeIn(wave, {2, 4, 6, 8, 11, 13, 15, 17, 19})) 129 | { 130 | Connect(wave, -135, ACoLaunch(DianCai_Low)); // -135 放垫, 撑杆跳跃用时 180, 落地后 5 冰生效 131 | Connect(wave, -100, 132 | if (wave == 11) 133 | aCobManager.Fire(1, 4); // 炸小鬼和小偷 134 | else 135 | aCobManager.Fire(1, 2.4)); 136 | Connect(wave, 444 - 373, aCobManager.Fire(5, 7.4)); 137 | CoConnect(wave, 1200 - 200 - 373, aCobManager.Fire({{2, 9}, {5, 9}}); 138 | Delay(220); aCobManager.Fire(5, 8.5)); 139 | 140 | if (wave == 19) // 第 19 波收尾 141 | { 142 | CoConnect(wave, 1200 - 133, aCobManager.Fire({{2, 9}, {5, 9}}); 143 | Delay(350); aCobManager.Fire(1, 2.4); 144 | Delay(300); aCobManager.Fire(5, 9); 145 | Delay(400); aCobManager.Fire(2, 9); 146 | Delay(500); aCobManager.Fire(5, 9); 147 | Delay(400); aCobManager.Fire(2, 8); ACoLaunch(DianCai_Up)); 148 | } 149 | } 150 | 151 | else if (wave == 20) 152 | { 153 | Connect(wave, -150, aCobManager.Fire(4, 7); aIceFiller.Stop()); 154 | CoConnect(wave, -60, aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); // 等到刷新前 60cs 155 | Delay(108); aCobManager.Fire({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 156 | Delay(180); aCobManager.Fire(1, 4); // 尾炸小偷 157 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 158 | } 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /Dicot/RE十六炮/RE十六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/RE十六炮/RE十六炮.png -------------------------------------------------------------------------------- /Dicot/RE十六炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/RE十六炮/game1_13.dat -------------------------------------------------------------------------------- /Dicot/RE十六炮/re_16_cob.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 阵名: RE十六炮 3 | * 出处: https://tieba.baidu.com/p/1410367512 4 | * 节奏: ch6: PSD/P|IP-PPD|PSD/P|IP-PPD, (6|12|6|12) 5 | */ 6 | #include 7 | 8 | // 连接(使用宏定义简化) 9 | #define Connect(wave, time, ...) AConnect(ATime(wave, time), [=] { __VA_ARGS__; }) 10 | #define CoConnect(wave, time, ...) AConnect(ATime(wave, time), [=]() -> ACoroutine { __VA_ARGS__; }) 11 | #define Delay(delayTime) co_await ANowDelayTime(delayTime) 12 | 13 | ALogger consoleLogger; // 日志对象-控制台 14 | 15 | void AScript() 16 | { 17 | // ASetReloadMode(AReloadMode::MAIN_UI_OR_FIGHT_UI); 18 | 19 | ASetZombies({ 20 | AZOMBIE, // 普僵 21 | APOLE_VAULTING_ZOMBIE, // 撑杆 22 | AFOOTBALL_ZOMBIE, // 橄榄 23 | AZOMBONI, // 冰车 24 | AJACK_IN_THE_BOX_ZOMBIE, // 小丑 25 | ABALLOON_ZOMBIE, // 气球 26 | APOGO_ZOMBIE, // 跳跳 27 | ABUNGEE_ZOMBIE, // 蹦极 28 | ALADDER_ZOMBIE, // 扶梯 29 | ACATAPULT_ZOMBIE, // 篮球 30 | AGARGANTUAR, // 白眼 31 | AGIGA_GARGANTUAR, // 红眼 32 | }); 33 | ASelectCards({ 34 | AKERNEL_PULT, // 玉米 35 | ACOB_CANNON, // 玉米炮 36 | ACHERRY_BOMB, // 樱桃 37 | ASQUASH, // 倭瓜 38 | AWALL_NUT, // 坚果 39 | ADOOM_SHROOM, // 核蘑菇 40 | AICE_SHROOM, // 冰蘑菇 41 | AM_ICE_SHROOM, // 模仿者寒冰菇 42 | ACOFFEE_BEAN, // 咖啡豆 43 | AFLOWER_POT, // 花盆 44 | }); 45 | 46 | Connect(1, -599, 47 | aCobManager.SetList({ 48 | {1, 3}, // P 49 | {1, 5}, // S 50 | {1, 7}, // P 51 | {1, 1}, // D 52 | {2, 3}, // P 53 | {2, 5}, // P 54 | {2, 7}, // P 55 | {2, 1}, // D 56 | {3, 3}, // P 57 | {3, 5}, // S 58 | {3, 7}, // P 59 | {3, 1}, // D 60 | {4, 6}, // P 61 | {4, 1}, // P 62 | {5, 6}, // P 63 | {5, 1}, // D 64 | }); 65 | aIceFiller.Start({{5, 3}, {4, 3}})); 66 | 67 | for (int wave = 1; wave < 21; ++wave) 68 | { 69 | Connect(wave, -200, consoleLogger.Info("当前操作波次: {}", wave)); 70 | 71 | // PPSD 72 | if (ARangeIn(wave, {1, 3, 5, 7, 9, 10, 12, 14, 16, 18})) 73 | { 74 | CoConnect(wave, -10, // -10 + 387 < 377 75 | aCobManager.RoofFire({{2, 9}, {2, 9}, {4, 9}}); 76 | Delay(110); // 110 拦截 77 | aCobManager.RoofFire(2, 8.8)); 78 | Connect(wave, 601 + 50 - 298, aIceFiller.Coffee()); // 50cs 预判冰 79 | if (wave == 9) 80 | { 81 | Connect(wave, 601 - 150, aCobManager.RoofFire(2, 9)); 82 | CoConnect(wave, 601 + 1200 - 200 - 387, aCobManager.RoofFire({{5, 9}, {5, 9}}); 83 | Delay(1100); // 等会儿 84 | aCobManager.RoofFire(5, 9)); 85 | } 86 | } 87 | 88 | // IP-PPD 89 | else if (ARangeIn(wave, {2, 4, 6, 8, 11, 13, 15, 17, 19})) 90 | { 91 | Connect(wave, -150, aCobManager.RoofFire(2, 9)); 92 | CoConnect(wave, 1200 - 200 - 387, // 1200cs 波长 93 | aCobManager.RoofFire({{2, 9}, {4, 9}}); // 激活炸 94 | Delay(220); // 220 拦截 95 | aCobManager.RoofFire(2, 7.8)); 96 | if (wave == 19) 97 | { 98 | CoConnect(wave, 1200 - 10, aCobManager.RoofFire({{2, 9}, {2, 9}, {4, 9}}); 99 | Delay(110); // 110 拦截 100 | aCobManager.RoofFire(2, 8.8)); 101 | Connect(wave, 1200 + 601 - 150, aCobManager.RoofFire(5, 9)); 102 | CoConnect(wave, 1200 + 601 + 1200 - 200 - 387, 103 | Delay(50); // 等会儿 104 | aCobManager.RoofFire(5, 9)); 105 | } 106 | } 107 | 108 | else if (wave == 20) 109 | { 110 | Connect(wave, -200, aIceFiller.Coffee()); // 冰消空降 111 | Connect(wave, -100, aCobManager.RoofFire({{2, 8.5}, {5, 8.5}})); // 炸冰车 112 | Connect(wave, 50, aCobManager.RoofFire({{4, 2.5}, {4, 6.7}})); // 炸小偷 113 | Connect(wave, 800, aCobManager.RoofFire({{2, 9}, {2, 9}, {2, 9}, {2, 9}})); 114 | Connect(wave, 1000, aCobManager.RoofFire({{4, 9}, {4, 9}, {4, 9}, {4, 9}}); 115 | consoleLogger.Info("第 {} 波手动收尾.", wave)); 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /Dicot/RE椭盘十四炮/RE椭盘十四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/RE椭盘十四炮/RE椭盘十四炮.png -------------------------------------------------------------------------------- /Dicot/RE椭盘十四炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/Dicot/RE椭盘十四炮/game1_13.dat -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AvZScript 2 | 3 | [AsmVsZombies](https://github.com/vector-wlc/AsmVsZombies) 的公开脚本仓库 4 | 5 | # 镜像库 6 | 7 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 8 | 镜像库:https://gitee.com/qrmd/AvZScript 9 | 10 | # 使用说明 11 | ## 下载 12 | 13 | 方法1、点击本页面右上方的按钮 **Code▼** ,下载整个仓库的 ZIP 压缩包; 14 | 15 | 方法2、安装 [Sourcetree](https://sourcetreeapp.com/) 或其他 [Git](https://git-scm.com/) 管理软件,将本仓库同步到您的设备; 16 | 17 | 方法3、安装 [Tampermonkey](https://www.tampermonkey.net/) 或其他浏览器用户脚本管理扩展和 [Github 增强 - 高速下载](https://greasyfork.org/zh-CN/scripts/412245-github-%E5%A2%9E%E5%BC%BA-%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD/) ,在本页面直接下载文件; 18 | 19 | ## 运行 20 | 21 | 1、后缀名为cpp的代码文件不能通过直接点击运行,请遵循 [AsmVsZombies教程](https://github.com/vector-wlc/AsmVsZombies/blob/master/tutorial/catalogue.md) 安装 AsmVsZombies 并在 Vscode 中查看并运行脚本。 22 | 23 | 2、脚本如果适用于特定的游戏模式和进度,会附带配套的的存档文件,此时您需要在运行脚本前将其替换相应的本地存档文件; 24 | 25 | ​ 本地存档保存于名为 userdata 的文件夹,通常位于 C:\ProgramData\PopCap Games\PlantsVsZombies\ 或 PlantsVsZombies 的安装目录; 26 | 27 | ​ 存档文件是文件名为以下格式的文件:game*[x]*_*[y]*.dat,其中 *[x]* 为该存档对应的用户编号,您可以将其修改为当前用户编号或在游戏主菜单的左上角切换用户,其中 *[y]* 为该存档对应的游戏模式,例如,game1_13.dat 保存着第 1 个用户在 Survival:Endless 模式中的游戏进度。 28 | 29 | 30 | # 上传说明 31 | 32 | ## 文件夹结构 33 | 34 | 请按以下结构组织您的脚本文件再上传至本库: 35 | 36 | ``` 37 | 仓库根目录 38 | +--作者名 39 | | +--脚本名 40 | | | +--*.cpp 41 | | | +--*.h 42 | | | +--game*_*.dat 43 | | | +--*.jpg/png 44 | | | +--README.md/txt 45 | | | | +--bin 46 | ``` 47 | 48 | 其中: 49 | 50 | *.cpp 为 void Script() 所在的代码文件; 51 | 52 | *.h 为相关库文件,用于实现脚本所需的接口; 53 | 54 | game\*_\*.dat 为存档文件,用于提供相应的游戏进度; 55 | 56 | *.jpg/png 为说明图片,用于展示脚本效果或存档情况; 57 | 58 | README.md/txt 为说明文档,其内容会被展示于仓库页面,您可以在此说明脚本适用的 AsmVsZombies 版本和运行效果; 59 | 60 | bin 为便携版脚本,用于提供点击即用的可执行程序; 61 | 62 | 如果您要上传的脚本中包含 10MB 及以上的大文件,请在 README 中添加该文件的外部链接,而非直接上传至本库。 63 | 64 | ## 开源许可声明 65 | 66 | 如果插件中包含了 AsmVsZombies 的部分代码,那么必须以 GPL 发布,其他情况下可以使用兼容 GPL 的常规开源许可,不强制使用 GPL。 67 | -------------------------------------------------------------------------------- /alterit/PE.经典十二炮/PE.经典12炮.cpp: -------------------------------------------------------------------------------- 1 | #include "avz.h" 2 | 3 | using namespace AvZ; 4 | TickRunner smart_blover; 5 | 6 | bool IsZBExist(ZombieType type, int row, int abs, int hp) //判定僵尸 7 | { 8 | bool result = false; 9 | auto zombie = GetMainObject()->zombieArray(); 10 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 11 | if (zombie[index].type() == type && zombie[index].isExist() && !zombie[index].isDead() && zombie[index].row() == row - 1 && zombie[index].abscissa() < abs && zombie[index].hp() >= hp && zombie[index].state() != 70) { 12 | result = true; 13 | } 14 | } 15 | return result; 16 | } 17 | 18 | bool IsZBBeforeExist() //判定前场僵尸 19 | { 20 | bool result = false; 21 | auto zombie = GetMainObject()->zombieArray(); 22 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 23 | if (zombie[index].isExist() && !zombie[index].isDead() && zombie[index].abscissa() > 480) { 24 | result = true; 25 | } 26 | } 27 | return result; 28 | } 29 | 30 | void SmartBlover() //三叶草 31 | { 32 | for (int row : {1, 2, 3, 4, 5, 6}) { 33 | if (IsZBExist(BALLOON_ZOMBIE, row, 0, 0)) { 34 | CardNotInQueue(GetCardIndex(BLOVER) + 1, 1, 1); 35 | } 36 | } 37 | } 38 | 39 | void DealDelay(int wave) //处理刷新延迟 40 | { 41 | 42 | //通常波刷新延迟,用核弹 43 | SetTime(401, wave); 44 | InsertOperation([=]() { 45 | if (GetMainObject()->refreshCountdown() > 200 && GetMainObject()->wave() == wave) { 46 | SetNowTime(); 47 | for (PlantType i : {LILY_PAD, DOOM_SHROOM, COFFEE_BEAN}) { 48 | Card(GetCardIndex(i) + 1, {{3, 9}, {4, 9}}); 49 | } 50 | } 51 | }); 52 | 53 | //第10波刷新延迟,优先用樱桃,若仍延迟再用核 54 | if (wave == 10) { 55 | auto zombie_type = GetMainObject()->zombieTypeList(); 56 | SetTime(1, wave); 57 | InsertOperation([=]() { 58 | int GGCount_up = 0; 59 | int GGCount_down = 0; 60 | auto zombie = GetMainObject()->zombieArray(); 61 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 62 | if (zombie[index].type() == GIGA_GARGANTUAR && zombie[index].isExist() && !zombie[index].isDead() && (zombie[index].row() == 0 || zombie[index].row() == 1)) { 63 | GGCount_up = GGCount_up + 1; 64 | } 65 | } 66 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 67 | if (zombie[index].type() == GIGA_GARGANTUAR && zombie[index].isExist() && !zombie[index].isDead() && (zombie[index].row() == 4 || zombie[index].row() == 5)) { 68 | GGCount_down = GGCount_down + 1; 69 | } 70 | } 71 | if (zombie_type[GIGA_GARGANTUAR] || zombie_type[BUCKETHEAD_ZOMBIE]) { 72 | SetTime(399 - 100, wave); 73 | Card(CHERRY_BOMB, GGCount_down < GGCount_up ? 2 : 5, 9); 74 | } 75 | }); 76 | } 77 | } 78 | 79 | void Normal_Wave(int wave) //通常波341PP激活 80 | { 81 | SetTime(341 - 373, wave); 82 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 83 | } 84 | 85 | void Flag_Wave(int wave) //旗帜波 86 | { 87 | SetTime(341 - 373, wave); 88 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 89 | 90 | // w20冰消珊瑚 91 | if (wave == 20) { 92 | SetTime(-300, wave); 93 | Card({{ICE_SHROOM, 6, 1}, {COFFEE_BEAN, 6, 1}}); 94 | } 95 | } 96 | 97 | void Ending_Wave(int wave) //收尾 98 | { 99 | SetTime(341 - 373, wave); 100 | for (int i = 0; i < 3; ++i) { 101 | Delay(601); 102 | InsertOperation([=]() { 103 | if (GetMainObject()->refreshCountdown() > 200 && GetMainObject()->wave() == wave && IsZBBeforeExist()) { 104 | SetNowTime(); 105 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 106 | } 107 | }); 108 | } 109 | } 110 | 111 | void Script() 112 | { 113 | OpenMultipleEffective('X', MAIN_UI_OR_FIGHT_UI); 114 | SelectCards({ICE_SHROOM, COFFEE_BEAN, DOOM_SHROOM, LILY_PAD, 115 | CHERRY_BOMB, BLOVER, KERNEL_PULT, COB_CANNON, PEASHOOTER, SUNFLOWER}); 116 | 117 | // SetGameSpeed(5); // 以倍速运行 118 | //跳帧,已注释,如需要则去掉两端的 /* 以及 */ 符号 119 | /*SkipTick([=]() { 120 | return true; 121 | });*/ 122 | 123 | smart_blover.pushFunc(SmartBlover); 124 | 125 | SetTime(-599, 1); 126 | pao_operator.autoGetPaoList(); 127 | 128 | for (int wave : {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19}) { 129 | Normal_Wave(wave); 130 | } 131 | 132 | for (int wave : {10, 20}) { 133 | Flag_Wave(wave); 134 | } 135 | 136 | for (int wave : {9, 19, 20}) { 137 | Ending_Wave(wave); 138 | } 139 | 140 | for (int wave : {1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18}) { 141 | DealDelay(wave); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /alterit/PE.经典十二炮/PE.经典12炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/alterit/PE.经典十二炮/PE.经典12炮.png -------------------------------------------------------------------------------- /alterit/PE.经典十二炮/特殊处理说明: -------------------------------------------------------------------------------- 1 | 文章:https://www.bilibili.com/read/cv19243626 2 | 演示视频:https://www.bilibili.com/video/BV1CW4y177e5 3 | 4 | (文章中的代码有一些翻修,请移步本文件夹中的脚本) 5 | -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/BeghouledTwist.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-08-25 14:27:28 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-08-26 20:50:35 6 | * @Description: BeghouledTwist(宝石迷阵转转看) 挂机脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies; 8 | * 2、启动游戏进入主界面。在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script”; 9 | * 3、点击 MINI-GAMES,进入 BeghouledTwist 模式; 10 | * 4、按 D 键加快游戏运行速度,按 A 键减慢游戏运行速度,按 S 键恢复原速度。 11 | * 来自AvZScript公开脚本仓库: 12 | * 主库:https://github.com/qrmd0/AvZScript 13 | * 镜像库:https://gitee.com/qrmd/AvZScript 14 | * Copyright (c) 2022 by qrmd, All Rights Reserved. 15 | */ 16 | #include "avz.h" 17 | using namespace AvZ; 18 | 19 | // *** Not In Queue 20 | // 返回场上的植物种类到[plant_types] 21 | void GetPlantTypes(std::vector>& plant_types); 22 | 23 | // *** Not In Queue 24 | // 返回[plant_types]中是否存在三个相连的同种植物 25 | bool CheckIsMatch(std::vector>& plant_types); 26 | 27 | // *** Not In Queue 28 | // 返回点击可以触发消除的格子 29 | Grid WhereCanTwist(std::vector>& plant_types); 30 | 31 | void ClickGrid(Grid grid); 32 | 33 | // *** Not In Queue 34 | // 点击植物触发消除 35 | void ClickPlant(); 36 | TickRunner plant_clicker; 37 | 38 | // *** Not In Queue 39 | // 使用卡片 40 | void UseCard(); 41 | TickRunner card_user; 42 | 43 | class SpeedController { 44 | private: 45 | std::vector _game_speeds = {0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0}; 46 | float _default_speed = 1.0; 47 | KeyConnector _key_connector; 48 | char _decelerate_key = 'A'; 49 | char _accelerate_key = 'D'; 50 | char _reset_speed_key = 'S'; 51 | 52 | public: 53 | // *** Not In Queue 54 | // 启用按键速度控制,默认速度倍率[speed] 55 | // [speed]可选取的值有:{0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0} 56 | void start(float speed = 1.0); 57 | // *** Not In Queue 58 | // 设置减速快捷键 59 | void setDecelerateKey(char key); 60 | // *** Not In Queue 61 | // 设置加速快捷键 62 | void setAccelerateKey(char key); 63 | // *** Not In Queue 64 | // 设置恢复默认速度快捷键 65 | void setResetSpeedKey(char key); 66 | } speed_controller; 67 | void Script() 68 | { 69 | // ShowErrorNotInQueue("欢迎使用 宝石迷阵转转看 挂机脚本\n\n按 D 键加快游戏运行速度,按 A 键减慢游戏运行速度,按 S 键恢复原速度\n\n更多键控脚本尽在AvZScript"); 70 | speed_controller.start(); 71 | plant_clicker.pushFunc(ClickPlant); 72 | card_user.pushFunc(UseCard); 73 | item_collector.setInterval(1); 74 | } 75 | 76 | void GetPlantTypes(std::vector>& plant_types) 77 | { 78 | auto plants = GetMainObject()->plantArray(); 79 | int index; 80 | std::vector the_row; 81 | for (int row = 0; row <= 5 + 1; ++row) { 82 | the_row.clear(); 83 | for (int col = 0; col <= 8 + 1; ++col) { 84 | index = GetPlantIndex(row, col); 85 | if (index >= 0) 86 | the_row.push_back(plants[index].type()); 87 | else 88 | the_row.push_back(-1); 89 | } 90 | plant_types.push_back(the_row); 91 | } 92 | } 93 | bool CheckIsMatch(std::vector>& plant_types) 94 | { 95 | for (int row = 1; row <= 5; ++row) { 96 | for (int col = 1; col <= 8; ++col) { 97 | if ((plant_types[row - 1][col] == plant_types[row][col] && plant_types[row + 1][col] == plant_types[row][col]) || (plant_types[row][col - 1] == plant_types[row][col] && plant_types[row][col + 1] == plant_types[row][col])) 98 | return true; 99 | } 100 | } 101 | return false; 102 | } 103 | Grid WhereCanTwist(std::vector>& plant_types) 104 | { 105 | Grid result; 106 | std::vector> matrix_copy; 107 | int up_left, up_right, down_right, down_left; 108 | for (int row = 4; row >= 1; --row) { 109 | for (int col = 7; col >= 1; --col) { 110 | matrix_copy = plant_types; 111 | up_left = matrix_copy[row][col]; 112 | up_right = matrix_copy[row][col + 1]; 113 | down_right = matrix_copy[row + 1][col + 1]; 114 | down_left = matrix_copy[row + 1][col]; 115 | matrix_copy[row][col] = down_left; 116 | matrix_copy[row][col + 1] = up_left; 117 | matrix_copy[row + 1][col + 1] = up_right; 118 | matrix_copy[row + 1][col] = down_right; 119 | if (CheckIsMatch(matrix_copy)) { 120 | result = {row, col}; 121 | return result; 122 | } 123 | } 124 | } 125 | result = {-1, -1}; 126 | return result; 127 | } 128 | void ClickGrid(Grid grid) 129 | { 130 | ClickGrid(grid.row, grid.col); 131 | } 132 | void ClickPlant() 133 | { 134 | std::vector> plant_types; 135 | GetPlantTypes(plant_types); 136 | ClickGrid(WhereCanTwist(plant_types)); 137 | } 138 | void UseCard() 139 | { 140 | auto seeds = GetMainObject()->seedArray(); 141 | int sun = GetMainObject()->sun(); 142 | // if (sun >= 200 && seeds->count() == 5 && seeds[4].isUsable()) { 143 | // LeftClick(seeds[4].ordinate() + 25, seeds[4].abscissa() + 35); 144 | // CardNotInQueue(5, 1, 9); 145 | // } 146 | if (sun >= 250 && seeds[2].isUsable()) { 147 | // LeftClick(50 * (3 - 1) + 110, 43); 148 | CardNotInQueue(3, 1, 9); 149 | } 150 | if (sun >= 500 && seeds[1].isUsable()) { 151 | // LeftClick(50 * (2 - 1) + 110, 43); 152 | CardNotInQueue(2, 1, 9); 153 | } 154 | if (sun >= 1000 && seeds[0].isUsable()) { 155 | // LeftClick(50 * (1 - 1) + 110, 43); 156 | CardNotInQueue(1, 1, 9); 157 | } 158 | } 159 | 160 | void SpeedController::start(float speed) 161 | { 162 | SetGameSpeed(speed); 163 | _default_speed = 10.0 / GetPvzBase()->tickMs(); 164 | _key_connector.add(_decelerate_key, [=]() { 165 | int game_speed_gear = 7; 166 | float game_speed = 10.0 / GetPvzBase()->tickMs(); 167 | for (int i = 0; i < _game_speeds.size(); ++i) { 168 | if (game_speed <= _game_speeds[i]) { 169 | game_speed_gear = i; 170 | break; 171 | } 172 | } 173 | if (game_speed_gear > 0) 174 | SetGameSpeed(_game_speeds[game_speed_gear - 1]); 175 | }); 176 | _key_connector.add(_accelerate_key, [=]() { 177 | int game_speed_gear = 0; 178 | float game_speed = 10.0 / GetPvzBase()->tickMs(); 179 | for (int i = _game_speeds.size() - 1; i >= 0; --i) { 180 | if (game_speed >= _game_speeds[i]) { 181 | game_speed_gear = i; 182 | break; 183 | } 184 | } 185 | if (game_speed_gear < _game_speeds.size() - 1) 186 | SetGameSpeed(_game_speeds[game_speed_gear + 1]); 187 | }); 188 | _key_connector.add(_reset_speed_key, [=]() { 189 | SetGameSpeed(_default_speed); 190 | }); 191 | } 192 | void SpeedController::setDecelerateKey(char key) 193 | { 194 | _decelerate_key = key; 195 | } 196 | void SpeedController::setAccelerateKey(char key) 197 | { 198 | _accelerate_key = key; 199 | } 200 | void SpeedController::setResetSpeedKey(char key) 201 | { 202 | _reset_speed_key = key; 203 | } 204 | -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/README.txt: -------------------------------------------------------------------------------- 1 | 迷你游戏 宝石迷阵转转看 的挂机脚本,./bin 提供了点击即用的便携版本。 -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/bin/BeghouledTwist.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/BeghouledTwist/bin/BeghouledTwist.dll -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/bin/BeghouledTwist.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/BeghouledTwist/bin/BeghouledTwist.exe -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/bin/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **宝石迷阵转转看** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 BeghouledTwist.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 BeghouledTwist 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档; 22 | 23 | A:减慢一档; 24 | 25 | S:恢复原档。 26 | 27 | # 本脚本来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/BeghouledTwist/bin/使用说明.txt: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **宝石迷阵转转看** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 BeghouledTwist.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 BeghouledTwist 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但是可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档 22 | 23 | A:减慢一档 24 | 25 | S:恢复原档 26 | 27 | # 来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/DE前置八炮/DEQianZhi8.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-03 20:09:21 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-03 20:09:21 6 | * @Description: DE前置八炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回4。用于5行场地的智能樱桃消延迟 14 | int GetRowHaveHigherZombieHp(int wave); 15 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 16 | void BlockGargantuar(vector pos); 17 | TickRunner block_giga; 18 | void Script() 19 | { 20 | // 脚本在游戏主界面和选择植物界面生效 21 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 22 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼 23 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 24 | // 选择植物:咖啡豆、寒冰菇、模仿寒冰菇、樱桃炸弹、倭瓜、小喷菇、胆小菇、花盆、阳光菇、向日葵 25 | SelectCards({COFFEE_BEAN, ICE_SHROOM, M_ICE_SHROOM, CHERRY_BOMB, SQUASH, PUFF_SHROOM, SCAREDY_SHROOM, FLOWER_POT, SUN_SHROOM, SUNFLOWER}); 26 | SetTime(-599, 1); 27 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 28 | // 开始自动存冰 29 | ice_filler.start({{2, 1}, {4, 1}}); 30 | // 开始自动垫巨人僵尸 31 | block_giga.pushFunc([]() { 32 | BlockGargantuar({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 33 | }); 34 | // 填充炮列表 35 | pao_operator.resetPaoList({{1, 1}, {5, 1}, {1, 5}, {5, 5}, {2, 5}, {4, 5}, {3, 1}, {3, 5}}); 36 | // 主体节奏 ch5 PP|I-PP|IPP-PP 601|1437|1437 每波执行确定的操作,不考虑非旗帜波的刷新延迟 37 | // wave1 PP 38 | SetTime(341 - 376, 1); 39 | pao_operator.pao({{2, 9}, {4, 9}}); 40 | // wave2 I-PP 41 | SetTime(-200, 2); 42 | ice_filler.coffee(); 43 | SetTime(1237 - 373, 2); 44 | pao_operator.pao({{2, 9}, {4, 9}}); 45 | // wave3 IPP-PP 46 | SetTime(-200, 3); 47 | ice_filler.coffee(); 48 | pao_operator.pao({{2, 9}, {4, 9}}); 49 | SetTime(1237 - 373, 3); 50 | pao_operator.pao({{2, 9}, {4, 9}}); 51 | // wave4 PP 52 | SetTime(341 - 376, 4); 53 | pao_operator.pao({{2, 9}, {4, 9}}); 54 | // wave5 I-PP 55 | SetTime(-200, 5); 56 | ice_filler.coffee(); 57 | SetTime(1237 - 373, 5); 58 | pao_operator.pao({{2, 9}, {4, 9}}); 59 | // wave6 IPP-PP 60 | SetTime(-200, 6); 61 | ice_filler.coffee(); 62 | pao_operator.pao({{2, 9}, {4, 9}}); 63 | SetTime(1237 - 373, 6); 64 | pao_operator.pao({{2, 9}, {4, 9}}); 65 | // wave7 PP 66 | SetTime(341 - 376, 7); 67 | pao_operator.pao({{2, 9}, {4, 9}}); 68 | // wave8 I-PP 69 | SetTime(-200, 8); 70 | ice_filler.coffee(); 71 | SetTime(1237 - 373, 8); 72 | pao_operator.pao({{2, 9}, {4, 9}}); 73 | // wave9 IPP-PP(-PP-PP) 74 | SetTime(-200, 9); 75 | ice_filler.coffee(); 76 | pao_operator.pao({{2, 9}, {4, 9}}); 77 | SetTime(1237 - 373, 9); 78 | pao_operator.pao({{2, 9}, {4, 9}}); 79 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 80 | // wave10 PP 81 | SetTime(500, 10); 82 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 83 | SetTime(341 - 376, 10); 84 | pao_operator.pao({{2, 9}, {4, 9}}); 85 | // 智能樱桃消中场延迟 86 | InsertTimeOperation(373, 10, [=]() { 87 | SetTime(373, 10); 88 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 89 | }); 90 | // wave11 I-PP 91 | SetTime(674 - 299, 10); 92 | ice_filler.coffee(); 93 | SetTime(1237 - 373, 11); 94 | pao_operator.pao({{2, 9}, {4, 9}}); 95 | // wave12 IPP-PP 96 | SetTime(-200, 12); 97 | ice_filler.coffee(); 98 | pao_operator.pao({{2, 9}, {4, 9}}); 99 | SetTime(1237 - 373, 12); 100 | pao_operator.pao({{2, 9}, {4, 9}}); 101 | // wave13 PP 102 | SetTime(341 - 376, 13); 103 | pao_operator.pao({{2, 9}, {4, 9}}); 104 | // wave14 I-PP 105 | SetTime(-200, 14); 106 | ice_filler.coffee(); 107 | SetTime(1237 - 373, 14); 108 | pao_operator.pao({{2, 9}, {4, 9}}); 109 | // wave15 IPP-PP 110 | SetTime(-200, 15); 111 | ice_filler.coffee(); 112 | pao_operator.pao({{2, 9}, {4, 9}}); 113 | SetTime(1237 - 373, 15); 114 | pao_operator.pao({{2, 9}, {4, 9}}); 115 | // wave16 PP 116 | SetTime(341 - 376, 16); 117 | pao_operator.pao({{2, 9}, {4, 9}}); 118 | // wave17 I-PP 119 | SetTime(-200, 17); 120 | ice_filler.coffee(); 121 | SetTime(1237 - 373, 17); 122 | pao_operator.pao({{2, 9}, {4, 9}}); 123 | // wave18 IPP-PP 124 | SetTime(-200, 18); 125 | ice_filler.coffee(); 126 | pao_operator.pao({{2, 9}, {4, 9}}); 127 | SetTime(1237 - 373, 18); 128 | pao_operator.pao({{2, 9}, {4, 9}}); 129 | // wave19 PP-(PP-PP) 130 | SetTime(341 - 376, 19); 131 | pao_operator.pao({{2, 9}, {4, 9}}); 132 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 133 | // wave20 PP-(PP-PP) 134 | SetTime(500, 20); 135 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 136 | SetTime(375 + 300 - 1 - 300, 20); 137 | ice_filler.coffee(); 138 | SetTime(341 - 376, 20); 139 | pao_operator.pao({{2, 9}, {4, 9}}); 140 | SetTime(341 + 601 - 376, 20); 141 | pao_operator.pao({{2, 9}, {4, 9}}); 142 | pao_operator.recoverPao({{2, 9}, {4, 9}}); 143 | } 144 | int GetRowHaveHigherZombieHp(int wave) 145 | { 146 | auto zombies = GetMainObject()->zombieArray(); 147 | int hp_of_up_ground_zombies = 0; 148 | int hp_of_down_ground_zombies = 0; 149 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 150 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 151 | if (zombies[index].row() + 1 <= 2) { 152 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 153 | } else if (zombies[index].row() + 1 >= 4) { 154 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 155 | } 156 | } 157 | } 158 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 159 | return 2; 160 | } else { 161 | return 4; 162 | } 163 | } 164 | void BlockGargantuar(vector pos) 165 | { 166 | for (Grid each : pos) { 167 | auto zombies = GetMainObject()->zombieArray(); 168 | auto seeds = GetMainObject()->seedArray(); 169 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(PUFF_SHROOM, true), GetSeedIndex(SUN_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUNFLOWER), GetSeedIndex(GARLIC), GetSeedIndex(FUME_SHROOM)}; 170 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 171 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 172 | for (int index_seed : indices_seed) { 173 | if (index_seed >= 0) { 174 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 175 | CardNotInQueue(index_seed + 1, each.row, each.col); 176 | break; 177 | } 178 | } 179 | } 180 | } 181 | } 182 | } 183 | } -------------------------------------------------------------------------------- /qrmd/DE前置八炮/DE前置八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE前置八炮/DE前置八炮.png -------------------------------------------------------------------------------- /qrmd/DE前置八炮/game1_11.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE前置八炮/game1_11.dat -------------------------------------------------------------------------------- /qrmd/DE双冰六炮/DEShuangBing6.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-01 13:22:56 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-01 19:08:36 6 | * @Description: DE双冰六炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回4。用于5行场地的智能樱桃消延迟 14 | int GetRowHaveHigherZombieHp(int wave); 15 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 16 | void BlockGargantuar(vector pos); 17 | TickRunner block_giga; 18 | void Script() 19 | { 20 | // 脚本在游戏主界面和选择植物界面生效 21 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 22 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼 23 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 24 | // 选择植物:咖啡豆、寒冰菇、模仿寒冰菇、南瓜头、樱桃炸弹、小喷菇、胆小菇、花盆、阳光菇、向日葵 25 | SelectCards({COFFEE_BEAN, ICE_SHROOM, M_ICE_SHROOM, PUMPKIN, CHERRY_BOMB, PUFF_SHROOM, SCAREDY_SHROOM, FLOWER_POT, SUN_SHROOM, SUNFLOWER}); 26 | SetTime(-599, 1); 27 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 28 | // 开始自动存冰 29 | ice_filler.start({{1, 1}, {5, 1}}); 30 | // 开始自动垫巨人僵尸 31 | block_giga.pushFunc([]() { 32 | BlockGargantuar({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 33 | }); 34 | // 自动填充炮列表 35 | pao_operator.autoGetPaoList(); 36 | // 主体节奏 ch5 PP|I-PP|I-PP 601|1437|1437 每波执行确定的操作,不考虑非旗帜波的刷新延迟 37 | // wave1 PP 38 | SetTime(341 - 376, 1); 39 | pao_operator.pao({{2, 9}, {4, 9}}); 40 | // wave2 I-PP 41 | SetTime(-200, 2); 42 | ice_filler.coffee(); 43 | SetTime(1237 - 373, 2); 44 | pao_operator.pao({{2, 9}, {4, 9}}); 45 | // wave3 I-PP 46 | SetTime(-200, 3); 47 | ice_filler.coffee(); 48 | SetTime(1237 - 373, 3); 49 | pao_operator.pao({{2, 9}, {4, 9}}); 50 | // wave4 PP 51 | SetTime(341 - 376, 4); 52 | pao_operator.pao({{2, 9}, {4, 9}}); 53 | // wave5 I-PP 54 | SetTime(-200, 5); 55 | ice_filler.coffee(); 56 | SetTime(1237 - 373, 5); 57 | pao_operator.pao({{2, 9}, {4, 9}}); 58 | // wave6 I-PP 59 | SetTime(-200, 6); 60 | ice_filler.coffee(); 61 | SetTime(1237 - 373, 6); 62 | pao_operator.pao({{2, 9}, {4, 9}}); 63 | // wave7 PP 64 | SetTime(341 - 376, 7); 65 | pao_operator.pao({{2, 9}, {4, 9}}); 66 | // wave8 I-PP 67 | SetTime(-200, 8); 68 | ice_filler.coffee(); 69 | SetTime(1237 - 373, 8); 70 | pao_operator.pao({{2, 9}, {4, 9}}); 71 | // wave9 I-PP-(PP-PP) 72 | SetTime(-200, 9); 73 | ice_filler.coffee(); 74 | SetTime(1237 - 373, 9); 75 | pao_operator.pao({{2, 9}, {4, 9}}); 76 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 77 | // wave10 PP 78 | SetTime(500, 10); 79 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 80 | SetTime(341 - 376, 10); 81 | pao_operator.pao({{2, 9}, {4, 9}}); 82 | // 智能樱桃消中场延迟 83 | InsertTimeOperation(373, 10, [=]() { 84 | if (GetRunningWave() == 10) { 85 | SetTime(373, 10); 86 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 87 | } 88 | }); 89 | // wave11 I-PP 90 | SetTime(-200, 11); 91 | ice_filler.coffee(); 92 | SetTime(1237 - 373, 11); 93 | pao_operator.pao({{2, 9}, {4, 9}}); 94 | // wave12 I-PP 95 | SetTime(-200, 12); 96 | ice_filler.coffee(); 97 | SetTime(1237 - 373, 12); 98 | pao_operator.pao({{2, 9}, {4, 9}}); 99 | // wave13 PP 100 | SetTime(341 - 376, 13); 101 | pao_operator.pao({{2, 9}, {4, 9}}); 102 | // wave14 I-PP 103 | SetTime(-200, 14); 104 | ice_filler.coffee(); 105 | SetTime(1237 - 373, 14); 106 | pao_operator.pao({{2, 9}, {4, 9}}); 107 | // wave15 I-PP 108 | SetTime(-200, 15); 109 | ice_filler.coffee(); 110 | SetTime(1237 - 373, 15); 111 | pao_operator.pao({{2, 9}, {4, 9}}); 112 | // wave16 PP 113 | SetTime(341 - 376, 16); 114 | pao_operator.pao({{2, 9}, {4, 9}}); 115 | // wave17 I-PP 116 | SetTime(-200, 17); 117 | ice_filler.coffee(); 118 | SetTime(1237 - 373, 17); 119 | pao_operator.pao({{2, 9}, {4, 9}}); 120 | // wave18 I-PP 121 | SetTime(-200, 18); 122 | ice_filler.coffee(); 123 | SetTime(1237 - 373, 18); 124 | pao_operator.pao({{2, 9}, {4, 9}}); 125 | // wave19 PP-(PP-PP) 126 | SetTime(341 - 376, 19); 127 | pao_operator.pao({{2, 9}, {4, 9}}); 128 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 129 | // wave20 PP-(PP-PP) 130 | SetTime(500, 20); 131 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 132 | SetTime(341 - 376, 20); 133 | pao_operator.pao({{2, 9}, {4, 9}}); 134 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 135 | } 136 | int GetRowHaveHigherZombieHp(int wave) 137 | { 138 | auto zombies = GetMainObject()->zombieArray(); 139 | int hp_of_up_ground_zombies = 0; 140 | int hp_of_down_ground_zombies = 0; 141 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 142 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 143 | if (zombies[index].row() + 1 <= 2) { 144 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 145 | } else if (zombies[index].row() + 1 >= 4) { 146 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 147 | } 148 | } 149 | } 150 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 151 | return 2; 152 | } else { 153 | return 4; 154 | } 155 | } 156 | void BlockGargantuar(vector pos) 157 | { 158 | for (Grid each : pos) { 159 | auto zombies = GetMainObject()->zombieArray(); 160 | auto seeds = GetMainObject()->seedArray(); 161 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(PUFF_SHROOM, true), GetSeedIndex(SUN_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUNFLOWER), GetSeedIndex(GARLIC), GetSeedIndex(FUME_SHROOM)}; 162 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 163 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 164 | for (int index_seed : indices_seed) { 165 | if (index_seed >= 0) { 166 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 167 | CardNotInQueue(index_seed + 1, each.row, each.col); 168 | break; 169 | } 170 | } 171 | } 172 | } 173 | } 174 | } 175 | } -------------------------------------------------------------------------------- /qrmd/DE双冰六炮/DE双冰六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE双冰六炮/DE双冰六炮.png -------------------------------------------------------------------------------- /qrmd/DE双冰六炮/game1_11.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE双冰六炮/game1_11.dat -------------------------------------------------------------------------------- /qrmd/DE守城十二炮/DE守城十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE守城十二炮/DE守城十二炮.png -------------------------------------------------------------------------------- /qrmd/DE守城十二炮/game1_11.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/DE守城十二炮/game1_11.dat -------------------------------------------------------------------------------- /qrmd/FE二十四炮/FE二十四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE二十四炮/FE二十四炮.png -------------------------------------------------------------------------------- /qrmd/FE二十四炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE二十四炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/FE弦十四炮/FE弦十四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE弦十四炮/FE弦十四炮.png -------------------------------------------------------------------------------- /qrmd/FE弦十四炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE弦十四炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/FE新磁铁四炮/FE新磁铁四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE新磁铁四炮/FE新磁铁四炮.png -------------------------------------------------------------------------------- /qrmd/FE新磁铁四炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE新磁铁四炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/FE神之八炮/FE神之八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE神之八炮/FE神之八炮.png -------------------------------------------------------------------------------- /qrmd/FE神之八炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE神之八炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/FE神之四炮/FEShenZhi4.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-01 13:22:56 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-01 13:22:56 6 | * @Description: FE神之四炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 自动在[row]行[col]列种植三叶草清除浓雾。结合TickRunner使用 14 | void CleanFog(int row, int col); 15 | TickRunner fog_cleaner; 16 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回5。用于6行场地的智能樱桃消延迟 17 | int GetRowHaveHigherZombieHp(int wave); 18 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 19 | void BlockGargantuar(vector pos); 20 | TickRunner block_giga; 21 | void Script() 22 | { 23 | // 脚本在游戏主界面和选择植物界面生效 24 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 25 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 26 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 27 | // 选择植物:睡莲叶、寒冰菇、模仿寒冰菇、毁灭菇、三叶草、南瓜头、樱桃炸弹、小喷菇、花盆、胆小菇 28 | SelectCards({LILY_PAD, ICE_SHROOM, M_ICE_SHROOM, DOOM_SHROOM, BLOVER, PUMPKIN, CHERRY_BOMB, PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM}); 29 | SetTime(-599, 1); 30 | Card(LILY_PAD, 3, 7); 31 | Shovel({{2, 6}, {5, 6}, {1, 3}, {6, 3}, {1, 2}, {6, 2}, {1, 1}, {6, 1}}); 32 | // 开始自动清除浓雾 33 | fog_cleaner.pushFunc([]() { 34 | CleanFog(2, 1); 35 | }); 36 | // 开始自动垫巨人僵尸 37 | block_giga.pushFunc([]() { 38 | BlockGargantuar({{2, 6}, {5, 6}, {1, 3}, {6, 3}, {1, 2}, {6, 2}, {1, 1}, {6, 1}}); 39 | }); 40 | // 开始自动修补南瓜头 41 | plant_fixer.start(PUMPKIN, {{3, 5}, {3, 6}, {4, 5}, {4, 6}}, 1200); 42 | // 自动填充炮列表 43 | pao_operator.autoGetPaoList(); 44 | // 主体节奏 邻C6u I-PP|I-PP|N|PP 1738|1738|869|869 每波执行确定的操作,不考虑非旗帜波的刷新延迟 45 | // wave1 PP 首代 46 | SetTime(486 - 373, 1); 47 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 48 | // wave2 I-PP 49 | SetTime(-99, 2); 50 | Card(ICE_SHROOM, 3, 7); 51 | SetTime(1538 - 373, 2); 52 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 53 | // wave3 I-PP 54 | SetTime(-200, 3); 55 | Card(M_ICE_SHROOM, 3, 7); 56 | SetTime(1538 - 373, 3); 57 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 58 | // wave4 N 59 | SetTime(669 - 100, 4); 60 | Card(LILY_PAD, 3, 9); 61 | Card(DOOM_SHROOM, 3, 9); 62 | // wave5 PP 63 | SetTime(669 - 373, 5); 64 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 65 | // wave6 I-PP 66 | SetTime(-99, 6); 67 | Card(ICE_SHROOM, 3, 7); 68 | SetTime(1538 - 373, 6); 69 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 70 | // wave7 I-PP 71 | SetTime(-200, 7); 72 | Card(M_ICE_SHROOM, 3, 7); 73 | SetTime(1538 - 373, 7); 74 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 75 | // wave8 N 76 | SetTime(669 - 100, 8); 77 | Card(LILY_PAD, 4, 9); 78 | Card(DOOM_SHROOM, 4, 9); 79 | // wave9 PP-(PP-cc) 80 | SetTime(669 - 373, 9); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | pao_operator.recoverPao({{2, 7}, {5, 7}}); 83 | // wave10 PP 84 | SetTime(500, 10); 85 | Shovel({{2, 6}, {5, 6}, {1, 3}, {6, 3}, {1, 2}, {6, 2}, {1, 1}, {6, 1}}); 86 | SetTime(341 - 376, 10); 87 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 88 | // 智能樱桃消中场延迟 89 | InsertTimeOperation(373, 10, [=]() { 90 | SetTime(373, 10); 91 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 92 | }); 93 | // wave11 I-PP 94 | SetTime(-99, 11); 95 | Card(ICE_SHROOM, 3, 7); 96 | SetTime(1538 - 373, 11); 97 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 98 | // wave12 I-PP 99 | SetTime(-200, 12); 100 | Card(M_ICE_SHROOM, 3, 7); 101 | SetTime(1538 - 373, 12); 102 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 103 | // wave13 N 104 | SetTime(669 - 100, 13); 105 | Card(LILY_PAD, 3, 8); 106 | Card(DOOM_SHROOM, 3, 8); 107 | // wave14 PP 108 | SetTime(669 - 373, 14); 109 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 110 | // wave15 I-PP 111 | SetTime(-99, 15); 112 | Card(ICE_SHROOM, 3, 7); 113 | SetTime(1538 - 373, 15); 114 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 115 | // wave16 I-PP 116 | SetTime(-200, 16); 117 | Card(M_ICE_SHROOM, 3, 7); 118 | SetTime(1538 - 373, 16); 119 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 120 | // wave17 N 121 | SetTime(669 - 100, 17); 122 | Card(LILY_PAD, 4, 8); 123 | Card(DOOM_SHROOM, 4, 8); 124 | // wave18 PP 125 | SetTime(669 - 373, 18); 126 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 127 | // wave19 I-PP-(PP-cc) 128 | SetTime(-99, 19); 129 | Card(ICE_SHROOM, 3, 7); 130 | SetTime(1538 - 373, 19); 131 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 132 | pao_operator.recoverPao({{2, 7}, {5, 7}}); 133 | // wave20 PP-(PP-PP) 134 | SetTime(500, 20); 135 | Shovel({{2, 6}, {5, 6}, {1, 3}, {6, 3}, {1, 2}, {6, 2}, {1, 1}, {6, 1}}); 136 | SetTime(395 - 319 - 100, 20); 137 | Card(M_ICE_SHROOM, 3, 7); 138 | SetTime(341 - 376, 20); 139 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 140 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 7}, {5, 7}}); 141 | SetTime(396, 20); 142 | Shovel(3, 7); 143 | } 144 | void CleanFog(int row, int col) 145 | { 146 | // 浓雾未蔓延至可见区域的最小倒计时 147 | const int min_countdown_invisible_fog = 1556; 148 | // 三叶草生效时长 149 | const int time_blover_activate = 100; 150 | // 浓雾倒计时 151 | int countdown_fog = ReadMemory(0x6A9EC0, 0x768, 0x5D4); 152 | auto seeds = GetMainObject()->seedArray(); 153 | int index_blover = GetSeedIndex(BLOVER); 154 | if (countdown_fog - time_blover_activate < min_countdown_invisible_fog && seeds[index_blover].isUsable()) { 155 | CardNotInQueue(index_blover + 1, row, col); 156 | } 157 | } 158 | int GetRowHaveHigherZombieHp(int wave) 159 | { 160 | auto zombies = GetMainObject()->zombieArray(); 161 | int hp_of_up_ground_zombies = 0; 162 | int hp_of_down_ground_zombies = 0; 163 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 164 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 165 | if (zombies[index].row() + 1 <= 3) { 166 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 167 | } else if (zombies[index].row() + 1 >= 4) { 168 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 169 | } 170 | } 171 | } 172 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 173 | return 2; 174 | } else { 175 | return 5; 176 | } 177 | } 178 | void BlockGargantuar(vector pos) 179 | { 180 | auto zombies = GetMainObject()->zombieArray(); 181 | auto seeds = GetMainObject()->seedArray(); 182 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(PUFF_SHROOM, true), GetSeedIndex(SUN_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUNFLOWER), GetSeedIndex(GARLIC), GetSeedIndex(FUME_SHROOM)}; 183 | for (Grid each : pos) { 184 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 185 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 186 | for (int index_seed : indices_seed) { 187 | if (index_seed >= 0) { 188 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 189 | CardNotInQueue(index_seed + 1, each.row, each.col); 190 | break; 191 | } 192 | } 193 | } 194 | } 195 | } 196 | } 197 | } -------------------------------------------------------------------------------- /qrmd/FE神之四炮/FE神之四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE神之四炮/FE神之四炮.png -------------------------------------------------------------------------------- /qrmd/FE神之四炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/FE神之四炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/ME核聚变六炮/MEHeJuBian6.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-14 21:55:26 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-06-15 12:30:35 6 | * @Description:ME核聚变六炮 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 更多AvZ脚本尽在AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd , All Rights Reserved. 13 | */ 14 | 15 | #include "avz.h" 16 | 17 | using namespace AvZ; 18 | // 后场风炮 19 | PaoOperator slope_cannon; 20 | // 前场平地炮 21 | PaoOperator flat_cannon; 22 | 23 | void Script() 24 | { 25 | // 脚本在游戏主界面和选择植物界面生效 26 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 27 | // 全难度极限出怪:普僵、撑杆、橄榄、冰车、小丑、跳跳、小偷、扶梯、投篮、白眼、红眼 28 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 29 | // 选择植物:花盆、寒冰菇、毁灭菇、模仿毁灭菇、倭瓜、樱桃炸弹、火爆辣椒、南瓜头、三叶草、叶子保护伞 30 | SelectCards({FLOWER_POT, ICE_SHROOM, DOOM_SHROOM, M_DOOM_SHROOM, SQUASH, CHERRY_BOMB, JALAPENO, PUMPKIN, BLOVER, UMBRELLA_LEAF}); 31 | SetTime(-599, 1); 32 | // 铲除临时植物 33 | Shovel({{1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}}); 34 | InsertTimeOperation(-599, 1, [=]() { 35 | if (GetPlantIndex(4, 2) >= 0) { 36 | ShovelNotInQueue(4, 2); 37 | } 38 | }); 39 | // 开始自动修补南瓜头 40 | plant_fixer.start(PUMPKIN, {{1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {4, 4}, {5, 4}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}, 1200); 41 | // 填充炮列表 42 | slope_cannon.resetPaoList({{1, 1}, {2, 1}, {3, 1}}); 43 | flat_cannon.resetPaoList({{1, 6}, {3, 6}, {5, 6}}); 44 | // 主体节奏 对C7n I-PP|N|PP|PP|N|PP 1252|750|750|750|750|750 每波执行确定的操作,不考虑非旗帜波的刷新延迟 45 | // wave1 PP 46 | SetTime(750 - 200 - 387, 1); 47 | slope_cannon.roofPao(2, 9); 48 | flat_cannon.roofPao(4, 9); 49 | // wave2 PP 50 | SetTime(750 - 200 - 387, 2); 51 | slope_cannon.roofPao(2, 9); 52 | flat_cannon.roofPao(4, 9); 53 | // wave3 N 54 | SetTime(129 - 100, 3); 55 | Card(JALAPENO, 4, 2); 56 | SetTime(750 - 200 - 100, 3); 57 | Card(FLOWER_POT, 4, 9); 58 | Card(DOOM_SHROOM, 4, 9); 59 | // wave4 PP 60 | SetTime(750 - 200 - 387, 4); 61 | slope_cannon.roofPao(2, 9); 62 | flat_cannon.roofPao(4, 9); 63 | // wave5 I-PP 64 | // 98cs为巨人僵尸最早入场时机,在此之前生效以保证全部巨人在原速下受冰冻 65 | SetTime(98 - 1 - 100, 5); 66 | Card(ICE_SHROOM, 4, 2); 67 | SetTime(400, 5); 68 | Card(FLOWER_POT, 2, 8); 69 | Card(SQUASH, 2, 8); 70 | SetTime(1252 - 200 - 387, 5); 71 | slope_cannon.roofPao(2, 9); 72 | flat_cannon.roofPao(4, 9); 73 | // wave6 N 74 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 75 | SetTime(129 - 100, 6); 76 | Card(FLOWER_POT, 1, 8); 77 | Card(CHERRY_BOMB, 1, 8); 78 | SetTime(750 - 200 - 319 - 100, 6); 79 | Card(M_DOOM_SHROOM, 2, 8); 80 | // wave7 PP 81 | SetTime(750 - 200 - 387, 7); 82 | slope_cannon.roofPao(2, 9); 83 | flat_cannon.roofPao(4, 9); 84 | // wave8 PP 85 | SetTime(750 - 200 - 387, 8); 86 | slope_cannon.roofPao(2, 9); 87 | flat_cannon.roofPao(4, 9); 88 | // wave9 N(-PP-PP) 89 | SetTime(750 - 200 - 100, 9); 90 | Card(FLOWER_POT, 2, 9); 91 | Card(DOOM_SHROOM, 2, 9); 92 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 93 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 94 | Card(UMBRELLA_LEAF, 4, 2); 95 | // wave10 PP 96 | SetTime(-200, 10); 97 | Card(FLOWER_POT, 3, 8); 98 | Card(UMBRELLA_LEAF, 3, 8); 99 | SetTime(395 + 150, 10); 100 | Shovel(3, 8); 101 | // 672cs为能同时冰冻蹦极僵尸和第11波僵尸的最长波长 102 | SetTime(672 - 200 - 387, 10); 103 | slope_cannon.roofPao(2, 9); 104 | flat_cannon.roofPao(4, 9); 105 | SetTime(672 + 1 - 100, 10); 106 | Shovel(4, 2); 107 | Card(ICE_SHROOM, 4, 2); 108 | // wave11 I-PP 109 | SetTime(400, 11); 110 | Card(FLOWER_POT, 3, 8); 111 | Card(SQUASH, 3, 8); 112 | SetTime(1252 - 200 - 387, 11); 113 | slope_cannon.roofPao(2, 9); 114 | flat_cannon.roofPao(4, 9); 115 | // wave12 N 116 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 117 | SetTime(129 - 100, 12); 118 | Card(FLOWER_POT, 4, 8); 119 | Card(CHERRY_BOMB, 4, 8); 120 | SetTime(750 - 200 - 319 - 100, 12); 121 | Card(M_DOOM_SHROOM, 3, 8); 122 | // wave13 PP 123 | SetTime(750 - 200 - 387, 13); 124 | slope_cannon.roofPao(2, 9); 125 | flat_cannon.roofPao(4, 9); 126 | // wave14 PP 127 | // 增大波长以保证第18波的毁灭菇复用 128 | SetTime(750 + 33 - 200 - 387, 14); 129 | slope_cannon.roofPao(2, 9); 130 | flat_cannon.roofPao(4, 9); 131 | // wave15 N 132 | // 增大波长以保证第18波的毁灭菇复用 133 | SetTime(750 + 33 - 200 - 100, 15); 134 | Card(FLOWER_POT, 3, 9); 135 | Card(DOOM_SHROOM, 3, 9); 136 | // wave16 PP 137 | // 增大波长以保证第18波的毁灭菇复用 138 | SetTime(750 + 33 - 200 - 387, 16); 139 | slope_cannon.roofPao(2, 9); 140 | flat_cannon.roofPao(4, 9); 141 | // wave17 I-PP 142 | // 98cs为巨人僵尸最早入场时机,在此之前生效以保证全部巨人在原速下受冰冻 143 | SetTime(98 - 1 - 100, 17); 144 | Card(ICE_SHROOM, 4, 2); 145 | SetTime(400, 17); 146 | Card(FLOWER_POT, 4, 8); 147 | Card(SQUASH, 4, 8); 148 | SetTime(1252 - 200 - 387, 17); 149 | slope_cannon.roofPao(2, 9); 150 | flat_cannon.roofPao(4, 9); 151 | // wave18 N 152 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 153 | SetTime(129 - 100, 18); 154 | Card(FLOWER_POT, 5, 8); 155 | Card(CHERRY_BOMB, 5, 8); 156 | SetTime(750 - 200 - 319 - 100, 18); 157 | Card(M_DOOM_SHROOM, 4, 8); 158 | // wave19 PP-(PP-PP) 159 | SetTime(750 - 200 - 387, 19); 160 | slope_cannon.recoverPao({{2, 9}, {2, 9}, {2, 9}}); 161 | flat_cannon.recoverPao({{4, 9}, {4, 9}, {4, 9}}); 162 | Card(UMBRELLA_LEAF, 4, 2); 163 | // wave20 PP-(N-PP) 164 | // 冰杀蹦极 165 | SetTime(450 - 100, 20); 166 | Shovel(4, 2); 167 | Card(ICE_SHROOM, 4, 2); 168 | // 炮消空降 169 | SetTime(450 + 399 - 387, 20); 170 | slope_cannon.roofPao(2, 7.5); 171 | flat_cannon.roofPao(4, 7.5); 172 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 173 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 174 | SetTime(950, 20); 175 | Card(FLOWER_POT, 5, 8); 176 | Card(M_DOOM_SHROOM, 5, 8); 177 | SetTime(950 + 751, 20); 178 | Card(FLOWER_POT, 1, 8); 179 | Card(SQUASH, 1, 8); 180 | } -------------------------------------------------------------------------------- /qrmd/ME核聚变六炮/ME核聚变六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME核聚变六炮/ME核聚变六炮.png -------------------------------------------------------------------------------- /qrmd/ME核聚变六炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME核聚变六炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/ME田八炮/METian8.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-01 13:22:56 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-01 13:22:56 6 | * @Description: ME田八炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 后场风炮 14 | PaoOperator slope_cannon; 15 | // 前场平地炮 16 | PaoOperator flat_cannon; 17 | 18 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回4。用于5行场地的智能樱桃消延迟 19 | int GetRowHaveHigherZombieHp(int wave); 20 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 21 | void BlockGargantuar(vector pos); 22 | TickRunner block_giga; 23 | void Script() 24 | { 25 | // 脚本在游戏主界面和选择植物界面生效 26 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 27 | // 全难度极限出怪:普僵、撑杆、橄榄、冰车、小丑、跳跳、小偷、扶梯、投篮、白眼、红眼 28 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 29 | // 选择植物:花盆、寒冰菇、模仿寒冰菇、毁灭菇、樱桃炸弹、三叶草、小喷菇、胆小菇、阳光菇 30 | SelectCards({FLOWER_POT, ICE_SHROOM, M_ICE_SHROOM, DOOM_SHROOM, SQUASH, CHERRY_BOMB, BLOVER, PUFF_SHROOM, SCAREDY_SHROOM, SUN_SHROOM}); 31 | SetTime(-599, 1); 32 | Card(FLOWER_POT, 3, 6); 33 | // 填充炮列表 34 | slope_cannon.resetPaoList({{1, 1}, {2, 1}, {4, 1}, {5, 1}}); 35 | flat_cannon.resetPaoList({{1, 6}, {2, 6}, {4, 6}, {5, 6}}); 36 | // 开始自动垫巨人僵尸 37 | block_giga.pushFunc([]() { 38 | BlockGargantuar({{5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}}); 39 | }); 40 | // 主体节奏 S5 I-PP|PP|PP|PP 1252|741|741|741 每波执行确定的操作,不考虑非旗帜波的刷新延迟 41 | // wave1 PP 首代 42 | SetTime(541 - 387, 1); 43 | slope_cannon.roofPao(2, 9); 44 | flat_cannon.roofPao(4, 9); 45 | // wave2 PP 46 | SetTime(541 - 387, 2); 47 | slope_cannon.roofPao(2, 9); 48 | flat_cannon.roofPao(4, 9); 49 | // wave3 PP 50 | SetTime(541 - 387, 3); 51 | slope_cannon.roofPao(2, 9); 52 | flat_cannon.roofPao(4, 9); 53 | // wave4 PP 54 | SetTime(541 - 387, 4); 55 | slope_cannon.roofPao(2, 9); 56 | flat_cannon.roofPao(4, 9); 57 | // wave5 I-PP 58 | SetTime(-99, 5); 59 | Card(ICE_SHROOM, 3, 6); 60 | SetTime(1052 - 387, 5); 61 | slope_cannon.roofPao(2, 9); 62 | flat_cannon.roofPao(4, 9); 63 | // wave6 PP 64 | SetTime(541 - 387, 6); 65 | slope_cannon.roofPao(2, 9); 66 | flat_cannon.roofPao(4, 9); 67 | // wave7 PP 68 | SetTime(541 - 387, 7); 69 | slope_cannon.roofPao(2, 9); 70 | flat_cannon.roofPao(4, 9); 71 | // wave8 PP 72 | SetTime(541 - 387, 8); 73 | slope_cannon.roofPao(2, 9); 74 | flat_cannon.roofPao(4, 9); 75 | // wave9 I-PP-(PP-PP) 76 | SetTime(-200, 9); 77 | Card(M_ICE_SHROOM, 3, 6); 78 | SetTime(1052 - 387, 9); 79 | slope_cannon.roofPao(2, 9); 80 | flat_cannon.roofPao(4, 9); 81 | slope_cannon.recoverPao({{2, 9}, {2, 9}, {2, 9}}); 82 | flat_cannon.recoverPao({{4, 9}, {4, 9}, {4, 9}}); 83 | // wave10 PP 84 | SetTime(473 - 387, 10); 85 | slope_cannon.roofPao(2, 9); 86 | flat_cannon.roofPao(4, 9); 87 | // 智能樱桃消中场延迟 88 | InsertTimeOperation(317, 10, [=]() { 89 | SetTime(317, 10); 90 | int row = GetRowHaveHigherZombieHp(10); 91 | Card(FLOWER_POT, row, 9); 92 | Card(CHERRY_BOMB, row, 9); 93 | }); 94 | // wave11 I-PP 95 | SetTime(-99, 11); 96 | Card(ICE_SHROOM, 3, 6); 97 | SetTime(1052 - 387, 11); 98 | slope_cannon.roofPao(2, 9); 99 | flat_cannon.roofPao(4, 9); 100 | // wave12 PP 101 | SetTime(541 - 387, 12); 102 | slope_cannon.roofPao(2, 9); 103 | flat_cannon.roofPao(4, 9); 104 | // wave13 PP 105 | SetTime(541 - 387, 13); 106 | slope_cannon.roofPao(2, 9); 107 | flat_cannon.roofPao(4, 9); 108 | // wave14 PP 109 | SetTime(541 - 387, 14); 110 | slope_cannon.roofPao(2, 9); 111 | flat_cannon.roofPao(4, 9); 112 | // wave15 I-PP 113 | SetTime(-200, 15); 114 | Card(M_ICE_SHROOM, 3, 6); 115 | SetTime(1052 - 387, 15); 116 | slope_cannon.roofPao(2, 9); 117 | flat_cannon.roofPao(4, 9); 118 | // wave16 PP 119 | SetTime(541 - 387, 16); 120 | slope_cannon.roofPao(2, 9); 121 | flat_cannon.roofPao(4, 9); 122 | // wave17 PP 123 | SetTime(541 - 387, 17); 124 | slope_cannon.roofPao(2, 9); 125 | flat_cannon.roofPao(4, 9); 126 | // wave18 PP 127 | SetTime(541 - 387, 18); 128 | slope_cannon.roofPao(2, 9); 129 | flat_cannon.roofPao(4, 9); 130 | // wave19 I-PP-(PP-PP) 131 | SetTime(-99, 19); 132 | Card(ICE_SHROOM, 3, 6); 133 | SetTime(1052 - 387, 19); 134 | slope_cannon.roofPao(2, 9); 135 | flat_cannon.roofPao(4, 9); 136 | slope_cannon.recoverPao({{2, 9}, {2, 9}, {2, 9}}); 137 | flat_cannon.recoverPao({{4, 9}, {4, 9}, {4, 9}}); 138 | // wave20 PP-(PP-PP-PP) 139 | SetTime(395 - 319 - 100, 20); 140 | Card(M_ICE_SHROOM, 3, 6); 141 | SetTime(223 + 375 - 387, 20); 142 | slope_cannon.roofPao(2, 7); 143 | flat_cannon.roofPao(4, 7); 144 | SetTime(1052 - 387, 20); 145 | slope_cannon.roofPao(2, 9); 146 | flat_cannon.roofPao(4, 9); 147 | slope_cannon.recoverPao({{2, 9}, {2, 9}, {2, 9}}); 148 | flat_cannon.recoverPao({{4, 9}, {4, 9}, {4, 9}}); 149 | } 150 | int GetRowHaveHigherZombieHp(int wave) 151 | { 152 | auto zombies = GetMainObject()->zombieArray(); 153 | int hp_of_up_ground_zombies = 0; 154 | int hp_of_down_ground_zombies = 0; 155 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 156 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 157 | if (zombies[index].row() + 1 <= 2) { 158 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 159 | } else if (zombies[index].row() + 1 >= 4) { 160 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 161 | } 162 | } 163 | } 164 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 165 | return 2; 166 | } else { 167 | return 4; 168 | } 169 | } 170 | void BlockGargantuar(vector pos) 171 | { 172 | for (Grid each : pos) { 173 | auto zombies = GetMainObject()->zombieArray(); 174 | auto seeds = GetMainObject()->seedArray(); 175 | vector indices_seed = {GetSeedIndex(FLOWER_POT)}; 176 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 177 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 178 | for (int index_seed : indices_seed) { 179 | if (index_seed >= 0) { 180 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 181 | CardNotInQueue(index_seed + 1, each.row, each.col); 182 | break; 183 | } 184 | } 185 | } 186 | } 187 | } 188 | } 189 | } -------------------------------------------------------------------------------- /qrmd/ME田八炮/ME田八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME田八炮/ME田八炮.png -------------------------------------------------------------------------------- /qrmd/ME田八炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME田八炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/ME神之六炮/MEHeJuBian6.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-14 21:55:26 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-06-15 12:30:35 6 | * @Description:ME核聚变六炮 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 更多AvZ脚本尽在AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd , All Rights Reserved. 13 | */ 14 | 15 | #include "avz.h" 16 | 17 | using namespace AvZ; 18 | // 后场风炮 19 | PaoOperator slope_cannon; 20 | // 前场平地炮 21 | PaoOperator flat_cannon; 22 | 23 | void Script() 24 | { 25 | // 脚本在游戏主界面和选择植物界面生效 26 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 27 | // 全难度极限出怪:普僵、撑杆、橄榄、冰车、小丑、跳跳、小偷、扶梯、投篮、白眼、红眼 28 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 29 | // 选择植物:花盆、寒冰菇、毁灭菇、模仿毁灭菇、倭瓜、樱桃炸弹、火爆辣椒、南瓜头、三叶草、叶子保护伞 30 | SelectCards({FLOWER_POT, ICE_SHROOM, DOOM_SHROOM, M_DOOM_SHROOM, SQUASH, CHERRY_BOMB, JALAPENO, PUMPKIN, BLOVER, UMBRELLA_LEAF}); 31 | SetTime(-599, 1); 32 | // 铲除临时植物 33 | Shovel({{1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}}); 34 | InsertTimeOperation(-599, 1, [=]() { 35 | if (GetPlantIndex(4, 2) >= 0) { 36 | ShovelNotInQueue(4, 2); 37 | } 38 | }); 39 | // 开始自动修补南瓜头 40 | plant_fixer.start(PUMPKIN, {{1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {4, 4}, {5, 4}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}, 1200); 41 | // 填充炮列表 42 | slope_cannon.resetPaoList({{1, 1}, {2, 1}, {3, 1}}); 43 | flat_cannon.resetPaoList({{1, 6}, {3, 6}, {5, 6}}); 44 | // 主体节奏 对C7n I-PP|N|PP|PP|N|PP 1252|750|750|750|750|750 每波执行确定的操作,不考虑非旗帜波的刷新延迟 45 | // wave1 PP 46 | SetTime(750 - 200 - 387, 1); 47 | slope_cannon.roofPao(2, 9); 48 | flat_cannon.roofPao(4, 9); 49 | // wave2 PP 50 | SetTime(750 - 200 - 387, 2); 51 | slope_cannon.roofPao(2, 9); 52 | flat_cannon.roofPao(4, 9); 53 | // wave3 N 54 | SetTime(129 - 100, 3); 55 | Card(JALAPENO, 4, 2); 56 | SetTime(750 - 200 - 100, 3); 57 | Card(FLOWER_POT, 4, 9); 58 | Card(DOOM_SHROOM, 4, 9); 59 | // wave4 PP 60 | SetTime(750 - 200 - 387, 4); 61 | slope_cannon.roofPao(2, 9); 62 | flat_cannon.roofPao(4, 9); 63 | // wave5 I-PP 64 | // 98cs为巨人僵尸最早入场时机,在此之前生效以保证全部巨人在原速下受冰冻 65 | SetTime(98 - 1 - 100, 5); 66 | Card(ICE_SHROOM, 4, 2); 67 | SetTime(400, 5); 68 | Card(FLOWER_POT, 2, 8); 69 | Card(SQUASH, 2, 8); 70 | SetTime(1252 - 200 - 387, 5); 71 | slope_cannon.roofPao(2, 9); 72 | flat_cannon.roofPao(4, 9); 73 | // wave6 N 74 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 75 | SetTime(129 - 100, 6); 76 | Card(FLOWER_POT, 1, 8); 77 | Card(CHERRY_BOMB, 1, 8); 78 | SetTime(750 - 200 - 319 - 100, 6); 79 | Card(M_DOOM_SHROOM, 2, 8); 80 | // wave7 PP 81 | SetTime(750 - 200 - 387, 7); 82 | slope_cannon.roofPao(2, 9); 83 | flat_cannon.roofPao(4, 9); 84 | // wave8 PP 85 | SetTime(750 - 200 - 387, 8); 86 | slope_cannon.roofPao(2, 9); 87 | flat_cannon.roofPao(4, 9); 88 | // wave9 N(-PP-PP) 89 | SetTime(750 - 200 - 100, 9); 90 | Card(FLOWER_POT, 2, 9); 91 | Card(DOOM_SHROOM, 2, 9); 92 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 93 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 94 | Card(UMBRELLA_LEAF, 4, 2); 95 | // wave10 PP 96 | SetTime(-200, 10); 97 | Card(FLOWER_POT, 3, 8); 98 | Card(UMBRELLA_LEAF, 3, 8); 99 | SetTime(395 + 150, 10); 100 | Shovel(3, 8); 101 | // 672cs为能同时冰冻蹦极僵尸和第11波僵尸的最长波长 102 | SetTime(672 - 200 - 387, 10); 103 | slope_cannon.roofPao(2, 9); 104 | flat_cannon.roofPao(4, 9); 105 | SetTime(672 + 1 - 100, 10); 106 | Shovel(4, 2); 107 | Card(ICE_SHROOM, 4, 2); 108 | // wave11 I-PP 109 | SetTime(400, 11); 110 | Card(FLOWER_POT, 3, 8); 111 | Card(SQUASH, 3, 8); 112 | SetTime(1252 - 200 - 387, 11); 113 | slope_cannon.roofPao(2, 9); 114 | flat_cannon.roofPao(4, 9); 115 | // wave12 N 116 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 117 | SetTime(129 - 100, 12); 118 | Card(FLOWER_POT, 4, 8); 119 | Card(CHERRY_BOMB, 4, 8); 120 | SetTime(750 - 200 - 319 - 100, 12); 121 | Card(M_DOOM_SHROOM, 3, 8); 122 | // wave13 PP 123 | SetTime(750 - 200 - 387, 13); 124 | slope_cannon.roofPao(2, 9); 125 | flat_cannon.roofPao(4, 9); 126 | // wave14 PP 127 | // 增大波长以保证第18波的毁灭菇复用 128 | SetTime(750 + 33 - 200 - 387, 14); 129 | slope_cannon.roofPao(2, 9); 130 | flat_cannon.roofPao(4, 9); 131 | // wave15 N 132 | // 增大波长以保证第18波的毁灭菇复用 133 | SetTime(750 + 33 - 200 - 100, 15); 134 | Card(FLOWER_POT, 3, 9); 135 | Card(DOOM_SHROOM, 3, 9); 136 | // wave16 PP 137 | // 增大波长以保证第18波的毁灭菇复用 138 | SetTime(750 + 33 - 200 - 387, 16); 139 | slope_cannon.roofPao(2, 9); 140 | flat_cannon.roofPao(4, 9); 141 | // wave17 I-PP 142 | // 98cs为巨人僵尸最早入场时机,在此之前生效以保证全部巨人在原速下受冰冻 143 | SetTime(98 - 1 - 100, 17); 144 | Card(ICE_SHROOM, 4, 2); 145 | SetTime(400, 17); 146 | Card(FLOWER_POT, 4, 8); 147 | Card(SQUASH, 4, 8); 148 | SetTime(1252 - 200 - 387, 17); 149 | slope_cannon.roofPao(2, 9); 150 | flat_cannon.roofPao(4, 9); 151 | // wave18 N 152 | // 樱桃炸弹炸上波巨人保护模仿毁灭菇,尽量不伤本波僵尸以防激活刷新 153 | SetTime(129 - 100, 18); 154 | Card(FLOWER_POT, 5, 8); 155 | Card(CHERRY_BOMB, 5, 8); 156 | SetTime(750 - 200 - 319 - 100, 18); 157 | Card(M_DOOM_SHROOM, 4, 8); 158 | // wave19 PP-(PP-PP) 159 | SetTime(750 - 200 - 387, 19); 160 | slope_cannon.recoverPao({{2, 9}, {2, 9}, {2, 9}}); 161 | flat_cannon.recoverPao({{4, 9}, {4, 9}, {4, 9}}); 162 | Card(UMBRELLA_LEAF, 4, 2); 163 | // wave20 PP-(N-PP) 164 | // 冰杀蹦极 165 | SetTime(450 - 100, 20); 166 | Shovel(4, 2); 167 | Card(ICE_SHROOM, 4, 2); 168 | // 炮消空降 169 | SetTime(450 + 399 - 387, 20); 170 | slope_cannon.roofPao(2, 7.5); 171 | flat_cannon.roofPao(4, 7.5); 172 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 173 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 174 | SetTime(950, 20); 175 | Card(FLOWER_POT, 5, 8); 176 | Card(M_DOOM_SHROOM, 5, 8); 177 | SetTime(950 + 751, 20); 178 | Card(FLOWER_POT, 1, 8); 179 | Card(SQUASH, 1, 8); 180 | } -------------------------------------------------------------------------------- /qrmd/ME神之六炮/ME神之六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME神之六炮/ME神之六炮.png -------------------------------------------------------------------------------- /qrmd/ME神之六炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ME神之六炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/NE压碑五炮/NEYaBei5.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-16 20:48:54 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-06-16 21:56:36 6 | * @Description:NE压碑五炮 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 更多AvZ脚本尽在AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd , All Rights Reserved. 13 | */ 14 | 15 | #include "avz.h" 16 | 17 | using namespace AvZ; 18 | using namespace std; 19 | // *** Not In Quene 20 | // 返回黑夜场景第20波墓碑的生成位置,如果未找到墓碑则返回{-1, -1} 21 | Grid GetGraveGrid(); 22 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 23 | void BlockGargantuar(vector pos); 24 | TickRunner block_giga; 25 | void Script() 26 | { 27 | // 脚本在游戏主界面和选择植物界面生效 28 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 29 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼 30 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 31 | // 选择植物:寒冰菇、模仿寒冰菇、毁灭菇、樱桃炸弹、倭瓜、墓碑吞噬者、小喷菇、花盆、胆小菇、阳光菇 32 | SelectCards({ICE_SHROOM, M_ICE_SHROOM, DOOM_SHROOM, CHERRY_BOMB, SQUASH, GRAVE_BUSTER, PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM}); 33 | SetTime(-599, 1); 34 | // 自动填充炮列表 35 | pao_operator.resetPaoList({{1, 5}, {2, 5}, {4, 5}, {3, 5}, {5, 5}}); 36 | // 主体节奏 邻C7u I-PP|I-PP|PA|N|PP 1768|1768|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 37 | 38 | // wave1 PP 39 | SetTime(341 - 376, 1); 40 | pao_operator.pao({{2, 9}, {4, 9}}); 41 | SetTime(1 - 419 + 601, 1); 42 | Card(M_ICE_SHROOM, 1, 1); 43 | 44 | // wave2 I-PP 45 | SetTime(1768 - 200 - 373, 2); 46 | pao_operator.pao({{2, 9}, {4, 9}}); 47 | 48 | // wave3 I-PP 49 | SetTime(1 - 100, 3); 50 | Card(ICE_SHROOM, 1, 1); 51 | SetTime(1768 - 200 - 373, 3); 52 | pao_operator.pao({{2, 9}, {4, 9}}); 53 | 54 | // wave4 PA 55 | SetTime(341 - 376, 4); 56 | pao_operator.pao(2, 9); 57 | SetTime(341 - 100, 4); 58 | Card(CHERRY_BOMB, 4, 9); 59 | 60 | // wave5 N 61 | SetTime(341 - 100, 5); 62 | Card(DOOM_SHROOM, {{3, 9}, {2, 9}, {2, 8}, {4, 8}}); 63 | 64 | // wave6 PP 65 | SetTime(341 - 376, 6); 66 | pao_operator.pao({{2, 9}, {4, 9}}); 67 | SetTime(1 - 419 + 601, 6); 68 | Card(M_ICE_SHROOM, 1, 1); 69 | 70 | // wave7 I-PP 71 | SetTime(1768 - 200 - 373, 7); 72 | pao_operator.pao({{2, 9}, {4, 9}}); 73 | 74 | // wave8 I-PP 75 | SetTime(1 - 100, 8); 76 | Card(ICE_SHROOM, 1, 1); 77 | SetTime(1768 - 200 - 373, 8); 78 | pao_operator.pao({{2, 9}, {4, 9}}); 79 | 80 | // wave9 PA(-N-PP-P) 81 | SetTime(341 - 376, 9); 82 | pao_operator.pao(2, 9); 83 | SetTime(341 - 100, 9); 84 | Card(CHERRY_BOMB, 4, 9); 85 | SetTime(341 + 601 - 100, 9); 86 | Card(DOOM_SHROOM, {{3, 9}, {2, 9}, {2, 8}, {4, 8}}); 87 | pao_operator.recoverPao({{2, 9}, {4, 9}}); 88 | SetTime(1000, 9); 89 | // 开始自动垫巨人僵尸 90 | InsertOperation([=]() { 91 | block_giga.pushFunc([]() { 92 | BlockGargantuar({{1, 8}, {5, 8}}); 93 | }); 94 | }); 95 | 96 | // wave10 I-PP 97 | SetTime(0, 10); 98 | block_giga.pause(); 99 | SetTime(1 - 419, 10); 100 | Card(M_ICE_SHROOM, 1, 1); 101 | SetTime(1768 - 200 - 373, 10); 102 | pao_operator.pao({{2, 9}, {4, 9}}); 103 | 104 | // wave11 I-PP 105 | SetTime(1 - 100, 11); 106 | Card(ICE_SHROOM, 1, 1); 107 | SetTime(1768 - 200 - 373, 11); 108 | pao_operator.pao({{2, 9}, {4, 9}}); 109 | 110 | // wave12 PA 111 | SetTime(341 - 376, 12); 112 | pao_operator.pao(2, 9); 113 | SetTime(341 - 100, 12); 114 | Card(CHERRY_BOMB, 4, 9); 115 | 116 | // wave13 N 117 | SetTime(341 - 100, 13); 118 | Card(DOOM_SHROOM, {{3, 9}, {2, 9}, {2, 8}, {4, 8}}); 119 | 120 | // wave14 PP 121 | SetTime(341 - 376, 14); 122 | pao_operator.pao({{2, 9}, {4, 9}}); 123 | SetTime(1 - 419 + 601, 14); 124 | Card(M_ICE_SHROOM, 1, 1); 125 | 126 | // wave15 I-PP 127 | SetTime(1768 - 200 - 373, 15); 128 | pao_operator.pao({{2, 9}, {4, 9}}); 129 | 130 | // wave16 I-PP 131 | SetTime(1 - 100, 16); 132 | Card(ICE_SHROOM, 1, 1); 133 | SetTime(1768 - 200 - 373, 16); 134 | pao_operator.pao({{2, 9}, {4, 9}}); 135 | 136 | // wave17 PA 137 | SetTime(341 - 376, 17); 138 | pao_operator.pao(2, 9); 139 | SetTime(341 - 100, 17); 140 | Card(CHERRY_BOMB, 4, 9); 141 | 142 | // wave18 N 143 | SetTime(341 - 100, 18); 144 | Card(DOOM_SHROOM, {{3, 9}, {2, 9}, {2, 8}, {4, 8}}); 145 | // 199cs为舞王僵尸触碰9列倭瓜并开始召唤的最晚时机 146 | SetTime(199, 18); 147 | Card(SQUASH, 1, 9); 148 | 149 | // wave19 PP(-PP-PP) 150 | SetTime(341 - 376, 19); 151 | pao_operator.pao({{2, 9}, {4, 9}}); 152 | pao_operator.recoverPao({{2, 9}, {4, 9}}); 153 | block_giga.goOn(); 154 | SetTime(3027, 19); 155 | pao_operator.recoverPao({{2, 8}, {4, 8}}); 156 | 157 | // wave20 N(-PP-PP) 158 | SetTime(-1, 20); 159 | Card(PUFF_SHROOM, 3, 8); 160 | SetTime(350 - 100, 20); 161 | Shovel(3, 8); 162 | Card(DOOM_SHROOM, 3, 8); 163 | // 吞噬墓碑 164 | InsertTimeOperation(3000, 20, [=]() { 165 | Grid grave = GetGraveGrid(); 166 | SetTime(3000, 20); 167 | Card(GRAVE_BUSTER, grave.row, grave.col); 168 | }); 169 | SetTime(341 - 376, 20); 170 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}}); 171 | } 172 | Grid GetGraveGrid() 173 | { 174 | Grid grave = {-1, -1}; 175 | std::vector grave_generate_pos = {{1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}}; 176 | for (Grid each : grave_generate_pos) { 177 | if (Asm::getPlantRejectType(GRAVE_BUSTER, each.row - 1, each.col - 1) == Asm::NIL) { 178 | grave = each; 179 | break; 180 | } 181 | } 182 | return grave; 183 | } 184 | void BlockGargantuar(vector pos) 185 | { 186 | for (Grid each : pos) { 187 | auto zombies = GetMainObject()->zombieArray(); 188 | auto seeds = GetMainObject()->seedArray(); 189 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUN_SHROOM), GetSeedIndex(SQUASH)}; 190 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 191 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 192 | for (int index_seed : indices_seed) { 193 | if (index_seed >= 0) { 194 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 195 | CardNotInQueue(index_seed + 1, each.row, each.col); 196 | break; 197 | } 198 | } 199 | } 200 | } 201 | } 202 | } 203 | } -------------------------------------------------------------------------------- /qrmd/NE压碑五炮/NE压碑五炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE压碑五炮/NE压碑五炮.png -------------------------------------------------------------------------------- /qrmd/NE压碑五炮/game1_12.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE压碑五炮/game1_12.dat -------------------------------------------------------------------------------- /qrmd/NE土豆四炮/NE土豆四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE土豆四炮/NE土豆四炮.png -------------------------------------------------------------------------------- /qrmd/NE土豆四炮/game1_12.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE土豆四炮/game1_12.dat -------------------------------------------------------------------------------- /qrmd/NE核代十炮·改/NEHeDai10_Gai.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-02 09:11:13 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-02 12:14:46 6 | * @Description: NE核代十炮·改 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回4。用于5行场地的智能樱桃消延迟 14 | int GetRowHaveHigherZombieHp(int wave); 15 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 16 | void BlockGargantuar(vector pos); 17 | TickRunner block_giga; 18 | Grid grave_pos; 19 | void Script() 20 | { 21 | // 脚本在游戏主界面和选择植物界面生效 22 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 23 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼 24 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 25 | // 选择植物:寒冰菇、毁灭菇、墓碑吞噬者、樱桃炸弹、倭瓜、小喷菇、花盆、胆小菇、阳光菇、向日葵 26 | SelectCards({ICE_SHROOM, DOOM_SHROOM, GRAVE_BUSTER, CHERRY_BOMB, SQUASH, PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM, SUNFLOWER}); 27 | SetTime(-599, 1); 28 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 29 | // 开始自动垫巨人僵尸 30 | block_giga.pushFunc([]() { 31 | BlockGargantuar({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 32 | }); 33 | // 自动填充炮列表 34 | pao_operator.autoGetPaoList(); 35 | // 主体节奏 P6-N PP|PP|PP|PP|PP|N 601|601|601|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 36 | // wave1 PP 37 | SetTime(341 - 376, 1); 38 | pao_operator.pao({{2, 9}, {4, 9}}); 39 | // wave2 PP 40 | SetTime(341 - 376, 2); 41 | pao_operator.pao({{2, 9}, {4, 9}}); 42 | // wave3 PP 43 | SetTime(341 - 376, 3); 44 | pao_operator.pao({{2, 9}, {4, 9}}); 45 | // wave4 PP 46 | SetTime(341 - 376, 4); 47 | pao_operator.pao({{2, 9}, {4, 9}}); 48 | // wave5 PP 49 | SetTime(341 - 376, 5); 50 | pao_operator.pao({{2, 9}, {4, 9}}); 51 | // wave6 N 52 | SetTime(341 - 100, 6); 53 | Card(DOOM_SHROOM, 3, 9); 54 | // wave7 PP 55 | SetTime(341 - 376, 7); 56 | pao_operator.pao({{2, 9}, {4, 9}}); 57 | // wave8 PP 58 | SetTime(341 - 376, 8); 59 | pao_operator.pao({{2, 9}, {4, 9}}); 60 | // wave9 PP-(PP-PP-PP) 61 | SetTime(341 - 376, 9); 62 | pao_operator.pao({{2, 9}, {4, 9}}); 63 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}, {2, 9}, {4, 9}}); 64 | // wave10 PP 65 | SetTime(500, 10); 66 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 67 | SetTime(341 - 376, 10); 68 | pao_operator.pao({{2, 9}, {4, 9}}); 69 | // 冰杀蹦极 70 | SetTime(601 - 1 - 100, 10); 71 | Card(ICE_SHROOM, 1, 9); 72 | // 智能樱桃消延迟 73 | InsertTimeOperation(401, 10, [=]() { 74 | if (GetRunningWave() == 10) { 75 | SetTime(401, 10); 76 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 77 | } 78 | }); 79 | // wave11 PP 80 | SetTime(341 - 376, 11); 81 | pao_operator.pao({{2, 9}, {4, 9}}); 82 | // wave12 PP 83 | SetTime(341 - 376, 12); 84 | pao_operator.pao({{2, 9}, {4, 9}}); 85 | // wave13 PP 86 | SetTime(341 - 376, 13); 87 | pao_operator.pao({{2, 9}, {4, 9}}); 88 | // wave14 PP 89 | SetTime(341 - 376, 14); 90 | pao_operator.pao({{2, 9}, {4, 9}}); 91 | // wave15 N 92 | SetTime(341 - 100, 15); 93 | Card(DOOM_SHROOM, 3, 8); 94 | // wave16 PP 95 | SetTime(341 - 376, 16); 96 | pao_operator.pao({{2, 9}, {4, 9}}); 97 | // wave17 PP 98 | SetTime(341 - 376, 17); 99 | pao_operator.pao({{2, 9}, {4, 9}}); 100 | // wave18 PP 101 | SetTime(341 - 376, 18); 102 | pao_operator.pao({{2, 9}, {4, 9}}); 103 | // wave19 PP-(PP-PP-PP) 104 | SetTime(341 - 376, 19); 105 | pao_operator.pao({{2, 9}, {4, 9}}); 106 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}, {2, 9}, {4, 9}}); 107 | // wave20 PP-(PP-PP-PP) 108 | SetTime(500, 20); 109 | Shovel({{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}); 110 | // 利用墓碑吞噬者能否放置确定w20生成的墓碑的位置 111 | InsertTimeOperation(113, 20, [=]() mutable { 112 | vector grave_generate_pos = {{1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}}; 113 | for (Grid each : grave_generate_pos) { 114 | if (Asm::getPlantRejectType(GRAVE_BUSTER, each.row - 1, each.col - 1) == Asm::NIL) { 115 | grave_pos = each; 116 | break; 117 | } 118 | } 119 | }); 120 | InsertTimeOperation(395 - 100, 20, [=]() { 121 | // 冰杀蹦极 122 | SetTime(395 - 100, 20); 123 | if (grave_pos.row == 1 && grave_pos.col == 9) { 124 | Card(ICE_SHROOM, 1, 8); 125 | } else { 126 | Card(ICE_SHROOM, 1, 9); 127 | } 128 | // 消除墓碑 129 | SetTime(396, 20); 130 | Card(GRAVE_BUSTER, grave_pos.row, grave_pos.col); 131 | // 从7列及其以左的墓碑中钻出的僵尸不会被炸到,用倭瓜消灭 132 | if (grave_pos.col <= 7) { 133 | SetTime(396 + 480, 20); 134 | Card(SQUASH, grave_pos.row, grave_pos.col); 135 | } 136 | }); 137 | SetTime(341 - 376, 20); 138 | pao_operator.pao({{2, 9}, {4, 9}}); 139 | pao_operator.recoverPao({{2, 9}, {4, 9}, {2, 9}, {4, 9}, {2, 9}, {4, 9}}); 140 | } 141 | int GetRowHaveHigherZombieHp(int wave) 142 | { 143 | auto zombies = GetMainObject()->zombieArray(); 144 | int hp_of_up_ground_zombies = 0; 145 | int hp_of_down_ground_zombies = 0; 146 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 147 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 148 | if (zombies[index].row() + 1 <= 2) { 149 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 150 | } else if (zombies[index].row() + 1 >= 4) { 151 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 152 | } 153 | } 154 | } 155 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 156 | return 2; 157 | } else { 158 | return 4; 159 | } 160 | } 161 | void BlockGargantuar(vector pos) 162 | { 163 | for (Grid each : pos) { 164 | auto zombies = GetMainObject()->zombieArray(); 165 | auto seeds = GetMainObject()->seedArray(); 166 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(PUFF_SHROOM, true), GetSeedIndex(SUN_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUNFLOWER), GetSeedIndex(GARLIC), GetSeedIndex(FUME_SHROOM)}; 167 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 168 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 169 | for (int index_seed : indices_seed) { 170 | if (index_seed >= 0) { 171 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 172 | CardNotInQueue(index_seed + 1, each.row, each.col); 173 | break; 174 | } 175 | } 176 | } 177 | } 178 | } 179 | } 180 | } -------------------------------------------------------------------------------- /qrmd/NE核代十炮·改/NE核代十炮·改.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE核代十炮·改/NE核代十炮·改.png -------------------------------------------------------------------------------- /qrmd/NE核代十炮·改/game1_12.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE核代十炮·改/game1_12.dat -------------------------------------------------------------------------------- /qrmd/NE舞夜惊魂/NE舞夜惊魂.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE舞夜惊魂/NE舞夜惊魂.png -------------------------------------------------------------------------------- /qrmd/NE舞夜惊魂/game1_12.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/NE舞夜惊魂/game1_12.dat -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/FE垫材十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/FE垫材十二炮.png -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/PE&FEDianCai12.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-04-20 20:34:07 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-08-06 15:23:45 6 | * @Description:PE&FE垫材十二炮 挂机冲关脚本 7 | * 使用方法:1、前往https:// gitee.com/std::vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、前往游戏存档文件夹C:/ProgramData/PopCap Games/PlantsVsZombies/userdata,备份原游戏存档,然后用脚本配套的存档文件替换同名文件 9 | * 3、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 10 | * 4、脚本支持游戏倍速和跳帧功能,分别删除第41行和第39行的注释符“//”并保存,可使相应功能在下一次运行脚本时生效 11 | * 来自AvZScript公开脚本仓库: 12 | * 主库:https://github.com/qrmd0/AvZScript 13 | * 镜像库:https://gitee.com/qrmd/AvZScript 14 | * Copyright (c) 2022 by qrmd, All Rights Reserved. 15 | */ 16 | 17 | #include "avz.h" 18 | using namespace AvZ; 19 | 20 | // *** Not In Queue 21 | // 返回前场是否存在僵尸 22 | bool GetIsExistZombieInTheFrountOfGround(); 23 | 24 | // *** Not In Queue 25 | // 返回场上是否存在[wave]波的红眼巨人僵尸 26 | bool GetIsExistGIGA(int wave); 27 | 28 | // *** In Queue 29 | // 在{pos}位置存在[wave]波刷出的红眼巨人僵尸时,在此位置放置临时植物并在{time}厘秒后铲除,优先选择阳光消耗低的植物 30 | void BlockGigas(std::vector pos, int wave, int time); 31 | 32 | // *** In Queue 33 | // 跳帧运行,阵型受损时停止 34 | void SkipTickToDamaged(); 35 | 36 | void Script() 37 | { 38 | // 跳帧运行,阵型受损时停止 39 | // SkipTickToDamaged(); 40 | // 游戏倍速 41 | // SetGameSpeed(10); 42 | // 调试窗口 43 | // SetErrorMode(CONSOLE); 44 | // 脚本循环生效,按'Q'键停止 45 | OpenMultipleEffective('Q', AvZ::MAIN_UI_OR_FIGHT_UI); 46 | // 选择植物:{小喷菇、模仿小喷菇、花盆、胆小菇、阳光菇、向日葵、樱桃炸弹、三叶草、双子向日葵、忧郁菇} 47 | SelectCards({PUFF_SHROOM, M_PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM, SUNFLOWER, CHERRY_BOMB, BLOVER, TWIN_SUNFLOWER, GLOOM_SHROOM}); 48 | // 本轮是否会刷出红眼巨人僵尸 49 | bool is_exist_GIGA_GARGANTUAR = GetZombieTypeList()[GIGA_GARGANTUAR]; 50 | 51 | SetTime(-599, 1); 52 | pao_operator.resetPaoList({{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}); 53 | for (int wave = 1; wave <= 20; ++wave) { 54 | // PP 55 | if (wave == 20) { 56 | SetTime(341 - 376, wave); 57 | pao_operator.pao(2, 8.8); 58 | SetTime(341 - 100, wave); 59 | Card(CHERRY_BOMB, 5, 9); 60 | } else { 61 | SetTime(341 - 376, wave); 62 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 63 | } 64 | // cccc 65 | if (is_exist_GIGA_GARGANTUAR) { 66 | if (wave % 2 == 0) { 67 | SetTime(777, wave); 68 | BlockGigas({{1, 9}, {2, 9}}, wave, 1); 69 | SetTime(601 + 338 + 142, wave); 70 | BlockGigas({{5, 9}, {6, 9}}, wave, 134); 71 | } else { 72 | SetTime(777, wave); 73 | BlockGigas({{5, 9}, {6, 9}}, wave, 1); 74 | SetTime(601 + 338 + 142, wave); 75 | BlockGigas({{1, 9}, {2, 9}}, wave, 134); 76 | } 77 | } 78 | // 收尾 79 | if (wave == 9 || wave == 19 || wave == 20) { 80 | // PP生效后,如果前场仍存在僵尸,执行PP' 81 | InsertTimeOperation(341 + 1, wave, [=]() { 82 | if (GetIsExistZombieInTheFrountOfGround()) { 83 | SetTime(601 + 341 - 376, wave); 84 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 85 | } 86 | }); 87 | if (is_exist_GIGA_GARGANTUAR) { 88 | // PP'生效后,前场可能且仅可能存在红眼巨人僵尸 89 | InsertTimeOperation(601 + 341 + 1, wave, [=]() { 90 | // 如果存在本波刷出的红眼巨人僵尸,执行PP''-PP''' 91 | if (GetIsExistGIGA(wave)) { 92 | SetTime(601 * 2 + 341 - 376, wave); 93 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 94 | SetTime(601 * 3 + 341 - 376, wave); 95 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 96 | // 否则如果存在上波刷出的红眼巨人僵尸 97 | } else if (GetIsExistGIGA(wave - 1)) { 98 | // 如果未刷新红字,执行PP'' 99 | if (GetRunningWave() == wave) { 100 | SetTime(601 * 2 + 341 - 376, wave); 101 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 102 | } else { // 否则执行cccc 103 | SetTime(1611, wave - 1); 104 | BlockGigas({{1, 8}, {2, 8}, {5, 8}, {6, 8}}, wave - 1, 134); 105 | } 106 | } 107 | }); 108 | } 109 | } else { // PP延迟时,执行PP' 110 | InsertTimeOperation(1169 - 200 - 373, wave, [=]() { 111 | if (GetRunningWave() == wave) { 112 | SetTime(1169 - 200 - 373, wave); 113 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 114 | } 115 | }); 116 | } 117 | } 118 | // 炮消珊瑚 119 | SetTime(223 - 373, 20); 120 | pao_operator.pao(4, 7.5875); 121 | } 122 | bool GetIsExistZombieInTheFrountOfGround() 123 | { 124 | auto zombies = GetMainObject()->zombieArray(); 125 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 126 | if (zombies[index].abscissa() > 6 * 80.0 && !zombies[index].isDead() && !zombies[index].isDisappeared()) 127 | return true; 128 | } 129 | return false; 130 | } 131 | bool GetIsExistGIGA(int wave) 132 | { 133 | auto zombies = GetMainObject()->zombieArray(); 134 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 135 | if (zombies[index].type() == GIGA_GARGANTUAR && zombies[index].existTime() == NowTime(wave) && !zombies[index].isDead() && !zombies[index].isDisappeared()) 136 | return true; 137 | } 138 | return false; 139 | } 140 | void BlockGigas(std::vector pos, int wave, int time) 141 | { 142 | InsertOperation([=]() { 143 | const std::vector seed_list = {PUFF_SHROOM, M_PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM, SUNFLOWER}; 144 | auto zombies = GetMainObject()->zombieArray(); 145 | auto seeds = GetMainObject()->seedArray(); 146 | for (auto each_pos : pos) { 147 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 148 | if (zombies[index].type() == GIGA_GARGANTUAR && zombies[index].existTime() == NowTime(wave) && zombies[index].row() + 1 == each_pos.row && zombies[index].abscissa() >= each_pos.col * 80.0 - 69.0 && !zombies[index].isDead() && !zombies[index].isDisappeared()) { 149 | for (PlantType each_seed : seed_list) { 150 | int seed_index = each_seed > IMITATOR ? GetSeedIndex(each_seed - IMITATOR - 1, true) : GetSeedIndex(each_seed); 151 | if (seeds[seed_index].isUsable()) { 152 | SetTime(NowTime(GetRunningWave()), GetRunningWave()); 153 | Card(each_seed, each_pos.row, each_pos.col); 154 | SetTime(NowTime(GetRunningWave()) + time, GetRunningWave()); 155 | Shovel(each_pos.row, each_pos.col); 156 | break; 157 | } 158 | } 159 | break; 160 | } 161 | } 162 | } 163 | }); 164 | } 165 | void SkipTickToDamaged() 166 | { 167 | auto condition 168 | = [=]() { 169 | std::vector plant_list = {{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}; 170 | auto plants = GetMainObject()->plantArray(); 171 | for (each : plant_list) { 172 | if (plants[GetPlantIndex(each.row, each.col)].hp() < 300) { 173 | return false; 174 | } 175 | } 176 | return true; 177 | }; 178 | auto callback = [=]() { 179 | SetGameSpeed(1); 180 | ShowErrorNotInQueue("发生阵损"); 181 | }; 182 | SkipTick(condition, callback); 183 | } -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/PE垫材十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/PE垫材十二炮.png -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/README.md: -------------------------------------------------------------------------------- 1 | # 视频演示 2 | 3 | https://www.bilibili.com/video/BV1Ma411Y7KM/ -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/十倍速版/PE&FEDianCai12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/十倍速版/PE&FEDianCai12.dll -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/十倍速版/PE&FEDianCai12.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/十倍速版/PE&FEDianCai12.exe -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/原速版/PE&FEDianCai12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/原速版/PE&FEDianCai12.dll -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/原速版/PE&FEDianCai12.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/原速版/PE&FEDianCai12.exe -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/极速跳帧版/PE&FEDianCai12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/极速跳帧版/PE&FEDianCai12.dll -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/bin/极速跳帧版/PE&FEDianCai12.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/bin/极速跳帧版/PE&FEDianCai12.exe -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE&FE垫材十二炮/game1_14.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE&FE垫材十二炮/game1_14.dat -------------------------------------------------------------------------------- /qrmd/PEC2八炮/PEC2八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PEC2八炮/PEC2八炮.png -------------------------------------------------------------------------------- /qrmd/PEC2八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PEC2八炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE②炮/PE②炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE②炮/PE②炮.png -------------------------------------------------------------------------------- /qrmd/PE②炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE②炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE二十四炮/README.md: -------------------------------------------------------------------------------- 1 | # 使用说明 2 | 3 | 1、本脚本为包含了开局布阵和长期运阵的全程挂机脚本,使用前请备份并删除泳池生存无尽模式的游戏存档 gameX_13.dat 4 | 5 | 2、按"Q"键结束脚本的运行; 6 | 7 | 3、支持使用键盘控制游戏运行速度,速度倍率分为7档:{0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0},默认为1.0,按"A"键减速一档,按"D"键加速一档,按"S"键恢复原速,按"W"键跳帧至本轮结束; 8 | 9 | 4、如果要退出游戏,尽量在选卡界面而不是战斗界面退出,因为如果不以选择植物开始游戏,脚本的部分功能可能出现异常。 10 | # 视频演示 11 | 12 | https://www.bilibili.com/video/BV15B4y1y7qQ/ -------------------------------------------------------------------------------- /qrmd/PE全金属四炮/PE全金属四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE全金属四炮/PE全金属四炮.png -------------------------------------------------------------------------------- /qrmd/PE全金属四炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE全金属四炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE冰心灯十四炮/PEBingXinDeng14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE冰心灯十四炮/PEBingXinDeng14.png -------------------------------------------------------------------------------- /qrmd/PE冰雨十二炮·改/PEBingYu12_Gai.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-02 13:11:05 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-02 13:11:05 6 | * @Description: PE冰雨十二炮·改 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回5。用于6行场地的智能樱桃消延迟 13 | int GetRowHaveHigherZombieHp(int wave); 14 | 15 | void Script() 16 | { 17 | // 脚本在游戏主界面和选择植物界面生效 18 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 19 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 20 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 21 | // 选择植物:咖啡豆、寒冰菇、模仿寒冰菇、南瓜头、倭瓜、樱桃炸弹、小喷菇、花盆、胆小菇、阳光菇 22 | SelectCards({COFFEE_BEAN, ICE_SHROOM, M_ICE_SHROOM, PUMPKIN, SQUASH, CHERRY_BOMB, PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM}); 23 | SetTime(-599, 1); 24 | // 开始自动存冰 25 | ice_filler.start({{4, 9}}); 26 | // 开始自动修补南瓜头 27 | plant_fixer.start(PUMPKIN, {{3, 9}, {4, 9}}, 1200); 28 | // 填充炮列表 29 | pao_operator.resetPaoList({{1, 7}, {6, 7}, {2, 7}, {5, 7}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}); 30 | // 主体节奏 P6 PP|PP|PP|PP|PP|PP 601|601|601|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 31 | // wave1 PP 32 | SetTime(295 - 376, 1); 33 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 34 | // wave2 PP 35 | SetTime(295 - 376, 2); 36 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 37 | // wave3 PP 38 | SetTime(295 - 376, 3); 39 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 40 | // wave4 PP 41 | SetTime(295 - 376, 4); 42 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 43 | // wave5 PP 44 | SetTime(295 - 376, 5); 45 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 46 | // wave6 PP 47 | SetTime(295 - 376, 6); 48 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 49 | // wave7 PP 50 | SetTime(295 - 376, 7); 51 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 52 | // wave8 PP 53 | SetTime(295 - 376, 8); 54 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 55 | // wave9 PP-(-PP-PP) 56 | SetTime(295 - 376, 9); 57 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 58 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 59 | // wave10 PP 60 | SetTime(341 - 376, 10); 61 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 62 | // 冰杀蹦极 63 | SetTime(601 - 1 - 298, 10); 64 | ice_filler.coffee(); 65 | // 智能樱桃消中场延迟 66 | InsertTimeOperation(401, 10, [=]() { 67 | if (GetRunningWave() == 10) { 68 | SetTime(401, 10); 69 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 70 | } 71 | }); 72 | // wave11 PP 73 | SetTime(295 - 376, 11); 74 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 75 | // wave12 PP 76 | SetTime(295 - 376, 12); 77 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 78 | // wave13 PP 79 | SetTime(295 - 376, 13); 80 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 81 | // wave14 PP 82 | SetTime(295 - 376, 14); 83 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 84 | // wave15 PP 85 | SetTime(295 - 376, 15); 86 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 87 | // wave16 PP 88 | SetTime(295 - 376, 16); 89 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 90 | // wave17 PP 91 | SetTime(295 - 376, 17); 92 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 93 | // wave18 PP 94 | SetTime(295 - 376, 18); 95 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 96 | // wave19 PP-(PP-PP) 97 | SetTime(295 - 376, 19); 98 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 99 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 100 | // wave20 PP-(PP-PP) 101 | // 炮消珊瑚 102 | SetTime(223 - 373, 20); 103 | pao_operator.pao(4, 7.5875); 104 | // 冰杀蹦极 105 | SetTime(395 - 298, 20); 106 | ice_filler.coffee(); 107 | SetTime(341 - 376, 20); 108 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 109 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 110 | InsertTimeOperation(1850, 20, [=]() { 111 | // 如果前场仍存活僵尸,补炸收尾 112 | bool is_exist_zombie = false; 113 | auto zombies = GetMainObject()->zombieArray(); 114 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 115 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].abscissa() >= 7 * 80.0) { 116 | is_exist_zombie = true; 117 | break; 118 | } 119 | } 120 | if (is_exist_zombie) { 121 | SetTime(1850, 20); 122 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 123 | } 124 | }); 125 | } 126 | int GetRowHaveHigherZombieHp(int wave) 127 | { 128 | auto zombies = GetMainObject()->zombieArray(); 129 | int hp_of_up_ground_zombies = 0; 130 | int hp_of_down_ground_zombies = 0; 131 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 132 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 133 | if (zombies[index].row() + 1 <= 3) { 134 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 135 | } else if (zombies[index].row() + 1 >= 4) { 136 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 137 | } 138 | } 139 | } 140 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 141 | return 2; 142 | } else { 143 | return 5; 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /qrmd/PE冰雨十二炮·改/PE冰雨十二炮·改.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE冰雨十二炮·改/PE冰雨十二炮·改.png -------------------------------------------------------------------------------- /qrmd/PE冰雨十二炮·改/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE冰雨十二炮·改/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE半场十二炮/PE半场十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE半场十二炮/PE半场十二炮.png -------------------------------------------------------------------------------- /qrmd/PE半场十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE半场十二炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE单紫卡十二炮/PEDanZiKa12.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-16 22:14:51 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-06-17 00:01:20 6 | * @Description:PE单紫卡十二炮 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 更多AvZ脚本尽在AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd , All Rights Reserved. 13 | */ 14 | 15 | #include "avz.h" 16 | 17 | using namespace AvZ; 18 | using namespace std; 19 | 20 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 21 | void BlockGargantuar(vector pos); 22 | TickRunner block_giga; 23 | 24 | void Script() 25 | { 26 | // 脚本在游戏主界面和选择植物界面生效 27 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 28 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 29 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 30 | // 选择植物:睡莲叶、咖啡豆、寒冰菇、模仿寒冰菇、毁灭菇、樱桃炸弹、小喷菇、花盆、胆小菇、阳光菇 31 | SelectCards({LILY_PAD, COFFEE_BEAN, ICE_SHROOM, M_ICE_SHROOM, DOOM_SHROOM, CHERRY_BOMB, PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUN_SHROOM}); 32 | SetTime(-599, 1); 33 | // 填充炮列表 34 | pao_operator.resetPaoList({{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}); 35 | // 开始自动存冰 36 | ice_filler.start({{3, 9}, {4, 9}}); 37 | // 开始自动修补睡莲叶 38 | plant_fixer.start(LILY_PAD, {{3, 9}, {4, 9}}, 0); 39 | // 开始自动垫巨人僵尸 40 | block_giga.pushFunc([]() { 41 | BlockGargantuar({{1, 7}, {2, 7}, {5, 7}, {6, 7}}); 42 | }); 43 | // 主体节奏 S6 I-PP|PP|PP|PP|PP 1071|601|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 44 | 45 | // wave1 PP 46 | SetTime(341 - 376, 1); 47 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 48 | 49 | // wave2 PPSS 50 | SetTime(341 - 376, 2); 51 | pao_operator.pao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 52 | 53 | // wave3 PP 54 | SetTime(341 - 376, 3); 55 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 56 | 57 | // wave4 PP 58 | SetTime(341 - 376, 4); 59 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 60 | 61 | // wave5 I-PP 62 | SetTime(-200, 5); 63 | ice_filler.coffee(); 64 | SetTime(1071 - 200 - 373, 5); 65 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 66 | 67 | // wave6 PP 68 | SetTime(341 - 376, 6); 69 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 70 | 71 | // wave7 PPSS 72 | SetTime(341 - 376, 7); 73 | pao_operator.pao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 74 | 75 | // wave8 PP 76 | SetTime(341 - 376, 8); 77 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 78 | 79 | // wave9 PPI-(-PP-PP-PP) 80 | SetTime(341 - 376, 9); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | SetTime(341 - 298, 9); 83 | ice_filler.coffee(); 84 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 85 | 86 | // wave10 ccccN 87 | SetTime(500, 10); 88 | Shovel({{1, 7}, {2, 7}, {5, 7}, {6, 7}}); 89 | SetTime(395 - 373, 10); 90 | pao_operator.pao({{1, 2}, {5, 2}}); 91 | // 舞王僵尸9列触碰小喷菇或阳光菇召唤伴舞僵尸的最晚时机 92 | SetTime(243, 10); 93 | Card(PUFF_SHROOM, 1, 9); 94 | Card(FLOWER_POT, 2, 9); 95 | Card(SCAREDY_SHROOM, 5, 9); 96 | Card(SUN_SHROOM, 6, 9); 97 | SetTime(243 + 79, 10); 98 | Shovel({{1, 9}, {2, 9}, {6, 9}}); 99 | SetTime(410 - 298, 10); 100 | Card(DOOM_SHROOM, 2, 8); 101 | Card(COFFEE_BEAN, 2, 8); 102 | SetTime(410 - 100, 10); 103 | Shovel(5, 9); 104 | Card(CHERRY_BOMB, 5, 9); 105 | 106 | // wave11 PPSS 107 | SetTime(341 - 376, 11); 108 | pao_operator.pao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 109 | 110 | // wave12 PP 111 | SetTime(341 - 376, 12); 112 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 113 | 114 | // wave13 PP 115 | SetTime(341 - 376, 13); 116 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 117 | 118 | // wave14 I-PP 119 | SetTime(-200, 14); 120 | ice_filler.coffee(); 121 | // 上次这组炮用于炸蹦极,发射较晚,故本次晚发射以保证复用 122 | SetTime(1119 - 200 - 373, 14); 123 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 124 | 125 | // wave15 PP 126 | SetTime(341 - 376, 15); 127 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 128 | 129 | // wave16 PPSS 130 | SetTime(341 - 376, 16); 131 | pao_operator.pao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 132 | 133 | // wave17 PP 134 | SetTime(341 - 376, 17); 135 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 136 | 137 | // wave18 PP 138 | SetTime(341 - 376, 18); 139 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 140 | 141 | // wave19 I-PP(-PP-PP-PP) 142 | SetTime(-200, 19); 143 | ice_filler.coffee(); 144 | SetTime(1202 - 200 - 373, 19); 145 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 146 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 147 | 148 | // wave20 ccccPP-(PP-PP) 149 | SetTime(500, 20); 150 | Shovel({{1, 7}, {2, 7}, {5, 7}, {6, 7}}); 151 | // 炮消珊瑚 152 | SetTime(223 - 373, 20); 153 | pao_operator.pao(4, 7.5875); 154 | SetTime(395 - 373, 20); 155 | pao_operator.pao({{1, 2}, {5, 2}}); 156 | // 243cs为舞王僵尸9列触碰小喷菇或阳光菇召唤伴舞僵尸的最晚时机 157 | SetTime(243, 20); 158 | Card(PUFF_SHROOM, 1, 9); 159 | Card(FLOWER_POT, 2, 9); 160 | Card(SCAREDY_SHROOM, 5, 9); 161 | Card(SUN_SHROOM, 6, 9); 162 | SetTime(243 + 79, 20); 163 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 164 | SetTime(410 - 373, 20); 165 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 166 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 167 | } 168 | 169 | void BlockGargantuar(vector pos) 170 | { 171 | for (Grid each : pos) { 172 | auto zombies = GetMainObject()->zombieArray(); 173 | auto seeds = GetMainObject()->seedArray(); 174 | vector indices_seed = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUN_SHROOM)}; 175 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 176 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 177 | for (int index_seed : indices_seed) { 178 | if (index_seed >= 0) { 179 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 180 | CardNotInQueue(index_seed + 1, each.row, each.col); 181 | break; 182 | } 183 | } 184 | } 185 | } 186 | } 187 | } 188 | } -------------------------------------------------------------------------------- /qrmd/PE单紫卡十二炮/PE单紫卡十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE单紫卡十二炮/PE单紫卡十二炮.png -------------------------------------------------------------------------------- /qrmd/PE单紫卡十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE单紫卡十二炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE双冰十六炮·改/PE双冰十六炮·改.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE双冰十六炮·改/PE双冰十六炮·改.png -------------------------------------------------------------------------------- /qrmd/PE双冰十六炮·改/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE双冰十六炮·改/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE变奏二十二炮/PE变奏二十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE变奏二十二炮/PE变奏二十二炮.png -------------------------------------------------------------------------------- /qrmd/PE变奏二十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE变奏二十二炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE无冰瓜二十炮/PEWuBingGua20.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-18 15:35:08 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-06-18 15:59:18 6 | * @Description:PE无冰瓜二十炮 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 更多AvZ脚本尽在AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd , All Rights Reserved. 13 | */ 14 | 15 | #include "avz.h" 16 | 17 | using namespace AvZ; 18 | void Script() 19 | { 20 | // 脚本在游戏主界面和选择植物界面生效 21 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 22 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 23 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 24 | // 选择植物:咖啡豆、寒冰菇、模仿寒冰菇、南瓜头、樱桃炸弹、倭瓜、小喷菇、花盆、玉米投手、玉米加农炮 25 | SelectCards({COFFEE_BEAN, ICE_SHROOM, M_ICE_SHROOM, PUMPKIN, CHERRY_BOMB, SQUASH, PUFF_SHROOM, FLOWER_POT, KERNEL_PULT, COB_CANNON}); 26 | SetTime(-599, 1); 27 | // 填充炮列表 28 | pao_operator.resetPaoList({{1, 1}, {6, 1}, {1, 5}, {6, 5}, {1, 7}, {6, 7}, {2, 1}, {5, 1}, {2, 5}, {5, 5}, {2, 7}, {5, 7}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}); 29 | // 开始自动存冰 30 | ice_filler.start({{4, 9}}); 31 | // 开始自动修补南瓜头 32 | plant_fixer.start(PUMPKIN, {{3, 9}, {4, 9}}, 1200); 33 | // 主体节奏 P6-2I PPDD|PPDD|PPI|PPDD|PPDD|PPI 601|601|601|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 34 | 35 | // wave1 PPDD 36 | SetTime(295 - 376, 1); 37 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 38 | SetTime(401 - 376, 1); 39 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 40 | 41 | // wave2 PPDD 42 | SetTime(295 - 376, 2); 43 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 44 | SetTime(401 - 376, 2); 45 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 46 | 47 | // wave3 PPI 48 | SetTime(295 - 376, 3); 49 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 50 | SetTime(295 - 298, 3); 51 | ice_filler.coffee(); 52 | 53 | // wave4 PPDD 54 | SetTime(295 - 376, 4); 55 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 56 | SetTime(401 - 376, 4); 57 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 58 | 59 | // wave5 PPDD 60 | SetTime(295 - 376, 5); 61 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 62 | SetTime(401 - 376, 5); 63 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 64 | 65 | // wave6 PPI 66 | SetTime(295 - 376, 6); 67 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 68 | SetTime(295 - 298, 6); 69 | ice_filler.coffee(); 70 | 71 | // wave7 PPDD 72 | SetTime(295 - 376, 7); 73 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 74 | SetTime(401 - 376, 7); 75 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 76 | 77 | // wave8 PPDD 78 | SetTime(295 - 376, 8); 79 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 80 | SetTime(401 - 376, 8); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | 83 | // wave9 PPI(-PP-PP-PP) 84 | SetTime(295 - 376, 9); 85 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 86 | SetTime(295 - 298, 9); 87 | ice_filler.coffee(); 88 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 89 | 90 | // wave10 PPDD 91 | SetTime(295 - 376, 10); 92 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 93 | SetTime(410 - 373, 10); 94 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 95 | 96 | // wave11 PPDD 97 | SetTime(295 - 376, 11); 98 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 99 | SetTime(401 - 376, 11); 100 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 101 | 102 | // wave12 PPI 103 | SetTime(295 - 376, 12); 104 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 105 | SetTime(295 - 298, 12); 106 | ice_filler.coffee(); 107 | 108 | // wave13 PPDD 109 | SetTime(295 - 376, 13); 110 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 111 | SetTime(401 - 376, 13); 112 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 113 | 114 | // wave14 PPDD 115 | SetTime(295 - 376, 14); 116 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 117 | SetTime(401 - 376, 14); 118 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 119 | 120 | // wave15 PPI 121 | SetTime(295 - 376, 15); 122 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 123 | SetTime(295 - 298, 15); 124 | ice_filler.coffee(); 125 | 126 | // wave16 PPDD 127 | SetTime(295 - 376, 16); 128 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 129 | SetTime(401 - 376, 16); 130 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 131 | 132 | // wave17 PPDD 133 | SetTime(295 - 376, 17); 134 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 135 | SetTime(401 - 376, 17); 136 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 137 | 138 | // wave18 PPI 139 | SetTime(295 - 376, 18); 140 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 141 | SetTime(295 - 298, 18); 142 | ice_filler.coffee(); 143 | 144 | // wave19 PPDD(-PP-PP) 145 | SetTime(295 - 376, 19); 146 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 147 | SetTime(401 - 376, 19); 148 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 149 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 150 | 151 | // wave20 PP-(PP-PP-PP) 152 | // 炮消珊瑚 153 | SetTime(223 - 373, 20); 154 | pao_operator.pao(4, 7.5875); 155 | SetTime(295 - 376, 20); 156 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 157 | SetTime(410 - 376, 20); 158 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 159 | SetTime(814 - 373, 20); 160 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 161 | } 162 | -------------------------------------------------------------------------------- /qrmd/PE无冰瓜二十炮/PE无冰瓜二十炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE无冰瓜二十炮/PE无冰瓜二十炮.png -------------------------------------------------------------------------------- /qrmd/PE无冰瓜二十炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE无冰瓜二十炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE玉米八炮/PE玉米八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE玉米八炮/PE玉米八炮.png -------------------------------------------------------------------------------- /qrmd/PE玉米八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE玉米八炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE神之六炮·改/PE神之六炮·改.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE神之六炮·改/PE神之六炮·改.png -------------------------------------------------------------------------------- /qrmd/PE神之六炮·改/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE神之六炮·改/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE空炸十八炮/PE空炸十八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE空炸十八炮/PE空炸十八炮.png -------------------------------------------------------------------------------- /qrmd/PE空炸十八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE空炸十八炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE经典八炮/PEJingDian8.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-02 20:09:56 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-02 20:09:56 6 | * @Description: PE经典八炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | // 在[wave]波[time]厘秒,如果陆路存在列表[zombie_types]中的僵尸,选择阳光消耗较低的植物放置在对应路的9列并在[shovel_time]厘秒后铲除 13 | void PlantToBlockTheZombies(int time, int wave, std::vector zombie_types, int row = 1, int shovel_time = 79); 14 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回5。用于6行场地的智能樱桃消延迟 15 | int GetRowHaveHigherZombieHp(int wave); 16 | 17 | void Script() 18 | { 19 | // 脚本在游戏主界面和选择植物界面生效 20 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 21 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 22 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 23 | // 选择植物:南瓜头、樱桃炸弹、小喷菇、模仿小喷菇、花盆、胆小菇、向日葵、咖啡豆、大喷菇、忧郁菇 24 | SelectCards({PUMPKIN, CHERRY_BOMB, PUFF_SHROOM, M_PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUNFLOWER, COFFEE_BEAN, FUME_SHROOM, GLOOM_SHROOM}); 25 | SetTime(-599, 1); 26 | // 开始自动修补南瓜头 27 | plant_fixer.start(PUMPKIN, {{3, 5}, {4, 5}, {3, 6}, {4, 6}, {3, 7}, {4, 7}}, 1200); 28 | // 填充炮列表 29 | pao_operator.resetPaoList({{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 3}, {4, 3}}); 30 | // 主体节奏 P4 PP|PP|PP|PP 869|869|869|869 每波执行确定的操作,不考虑非旗帜波的刷新延迟 31 | // wave1 PP 32 | SetTime(669 - 373, 1); 33 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 34 | PlantToBlockTheZombies(191, 1, {DANCING_ZOMBIE}); 35 | // wave2 PP 36 | SetTime(669 - 373, 2); 37 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 38 | PlantToBlockTheZombies(191, 2, {DANCING_ZOMBIE}); 39 | // wave3 PP 40 | SetTime(669 - 373, 3); 41 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 42 | PlantToBlockTheZombies(191, 3, {DANCING_ZOMBIE}); 43 | // wave4 PP 44 | SetTime(669 - 373, 4); 45 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 46 | PlantToBlockTheZombies(191, 4, {DANCING_ZOMBIE}); 47 | // wave5 PP 48 | SetTime(669 - 373, 5); 49 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 50 | PlantToBlockTheZombies(191, 5, {DANCING_ZOMBIE}); 51 | // wave6 PP 52 | SetTime(669 - 373, 6); 53 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 54 | PlantToBlockTheZombies(191, 6, {DANCING_ZOMBIE}); 55 | // wave7 PP 56 | SetTime(669 - 373, 7); 57 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 58 | PlantToBlockTheZombies(191, 7, {DANCING_ZOMBIE}); 59 | // wave8 PP 60 | SetTime(669 - 373, 8); 61 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 62 | PlantToBlockTheZombies(191, 8, {DANCING_ZOMBIE}); 63 | // wave9 PP-(-PP-PP) 64 | SetTime(669 - 373, 9); 65 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 66 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 67 | PlantToBlockTheZombies(191, 9, {DANCING_ZOMBIE}); 68 | // wave10 PP 69 | SetTime(669 - 373, 10); 70 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 71 | PlantToBlockTheZombies(230, 10, {DANCING_ZOMBIE}); 72 | // 智能樱桃消中场延迟 73 | InsertTimeOperation(669 + 3 + 1, 10, [=]() { 74 | if (GetRunningWave() == 10) { 75 | SetTime(669 + 3 + 1, 10); 76 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 77 | } 78 | }); 79 | // wave11 PP 80 | SetTime(669 - 373, 11); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | PlantToBlockTheZombies(191, 11, {DANCING_ZOMBIE}); 83 | // wave12 PP 84 | SetTime(669 - 373, 12); 85 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 86 | PlantToBlockTheZombies(191, 12, {DANCING_ZOMBIE}); 87 | // wave13 PP 88 | SetTime(669 - 373, 13); 89 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 90 | PlantToBlockTheZombies(191, 13, {DANCING_ZOMBIE}); 91 | // wave14 PP 92 | SetTime(669 - 373, 14); 93 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 94 | PlantToBlockTheZombies(191, 14, {DANCING_ZOMBIE}); 95 | // wave15 PP 96 | SetTime(669 - 373, 15); 97 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 98 | PlantToBlockTheZombies(191, 15, {DANCING_ZOMBIE}); 99 | // wave16 PP 100 | SetTime(669 - 373, 16); 101 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 102 | PlantToBlockTheZombies(191, 16, {DANCING_ZOMBIE}); 103 | // wave17 PP 104 | SetTime(669 - 373, 17); 105 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 106 | PlantToBlockTheZombies(191, 17, {DANCING_ZOMBIE}); 107 | // wave18 PP 108 | SetTime(669 - 373, 18); 109 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 110 | PlantToBlockTheZombies(191, 18, {DANCING_ZOMBIE}); 111 | // wave19 PP-(PP-PP) 112 | SetTime(669 - 373, 19); 113 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 114 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 115 | PlantToBlockTheZombies(191, 19, {DANCING_ZOMBIE}); 116 | // wave20 PP-(PP-PP) 117 | SetTime(669 - 373, 20); 118 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 119 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}, {2, 8.8}, {5, 8.8}}); 120 | PlantToBlockTheZombies(230, 20, {DANCING_ZOMBIE}); 121 | } 122 | void PlantToBlockTheZombies(int time, int wave, std::vector zombie_types, int row, int shovel_time) 123 | { 124 | InsertTimeOperation(time, wave, [=]() { 125 | auto zombies = GetMainObject()->zombieArray(); 126 | bool is_exist_the_zombie = false; 127 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 128 | if (zombies[index].row() == row - 1 && !zombies[index].isDisappeared() && !zombies[index].isDead()) { 129 | for (int type : zombie_types) { 130 | if (zombies[index].type() == type) { 131 | is_exist_the_zombie = true; 132 | goto END; 133 | } 134 | } 135 | } 136 | } 137 | END: 138 | auto seeds = GetMainObject()->seedArray(); 139 | int index_seeds[] = {GetSeedIndex(PUFF_SHROOM), GetSeedIndex(PUFF_SHROOM, true), GetSeedIndex(SUN_SHROOM), GetSeedIndex(FLOWER_POT), GetSeedIndex(SCAREDY_SHROOM), GetSeedIndex(SUNFLOWER), GetSeedIndex(GARLIC), GetSeedIndex(FUME_SHROOM), GetSeedIndex(KERNEL_PULT), GetSeedIndex(CABBAGE_PULT)}; 140 | if (is_exist_the_zombie) { 141 | for (int index : index_seeds) { 142 | if (index < 0) { 143 | continue; 144 | } 145 | if (seeds[index].isUsable()) { 146 | SetTime(time, wave); 147 | Card(index + 1, row, 9); 148 | SetTime(time + shovel_time, wave); 149 | Shovel(row, 9); 150 | break; 151 | } 152 | } 153 | } 154 | switch (row) { 155 | case 1: 156 | PlantToBlockTheZombies(time, wave, zombie_types, 2, shovel_time); 157 | break; 158 | case 2: 159 | PlantToBlockTheZombies(time, wave, zombie_types, 5, shovel_time); 160 | break; 161 | case 5: 162 | PlantToBlockTheZombies(time, wave, zombie_types, 6, shovel_time); 163 | break; 164 | default: 165 | return; 166 | break; 167 | } 168 | }); 169 | } 170 | int GetRowHaveHigherZombieHp(int wave) 171 | { 172 | auto zombies = GetMainObject()->zombieArray(); 173 | int hp_of_up_ground_zombies = 0; 174 | int hp_of_down_ground_zombies = 0; 175 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 176 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 177 | if (zombies[index].row() + 1 <= 3) { 178 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 179 | } else if (zombies[index].row() + 1 >= 4) { 180 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 181 | } 182 | } 183 | } 184 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 185 | return 2; 186 | } else { 187 | return 5; 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /qrmd/PE经典八炮/PE经典八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典八炮/PE经典八炮.png -------------------------------------------------------------------------------- /qrmd/PE经典八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典八炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE经典十二炮/PEJingDian12.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-02 20:43:26 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-02 20:43:26 6 | * @Description: PE经典十二炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回5。用于6行场地的智能樱桃消延迟 13 | int GetRowHaveHigherZombieHp(int wave); 14 | 15 | void Script() 16 | { 17 | // 脚本在游戏主界面和选择植物界面生效 18 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 19 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 20 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 21 | // 选择植物:樱桃炸弹、倭瓜、小喷菇、模仿小喷菇、花盆、胆小菇、向日葵、睡莲叶、玉米投手、玉米加农炮 22 | SelectCards({CHERRY_BOMB, SQUASH, PUFF_SHROOM, M_PUFF_SHROOM, FLOWER_POT, SCAREDY_SHROOM, SUNFLOWER, LILY_PAD, KERNEL_PULT, COB_CANNON}); 23 | SetTime(-599, 1); 24 | // 填充炮列表 25 | pao_operator.resetPaoList({{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 3}, {4, 3}, {3, 5}, {4, 5}, {3, 7}, {4, 7}}); 26 | // 主体节奏 P6 PP|PP|PP|PP|PP|PP 601|601|601|601|601|601 每波执行确定的操作,不考虑非旗帜波的刷新延迟 27 | // wave1 PP 28 | SetTime(341 - 376, 1); 29 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 30 | // wave2 PP 31 | SetTime(341 - 376, 2); 32 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 33 | // wave3 PP 34 | SetTime(341 - 376, 3); 35 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 36 | // wave4 PP 37 | SetTime(341 - 376, 4); 38 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 39 | // wave5 PP 40 | SetTime(341 - 376, 5); 41 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 42 | // wave6 PP 43 | SetTime(341 - 376, 6); 44 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 45 | // wave7 PP 46 | SetTime(341 - 376, 7); 47 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 48 | // wave8 PP 49 | SetTime(341 - 376, 8); 50 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 51 | // wave9 PP-(-PP-PP) 52 | SetTime(341 - 376, 9); 53 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 54 | SetTime(341 + 601 - 376, 9); 55 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 56 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 57 | // wave10 PP 58 | SetTime(341 - 376, 10); 59 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 60 | // 智能樱桃消中场延迟 61 | InsertTimeOperation(401, 10, [=]() { 62 | if (GetRunningWave() == 10) { 63 | SetTime(401, 10); 64 | Card(CHERRY_BOMB, GetRowHaveHigherZombieHp(10), 9); 65 | } 66 | }); 67 | // wave11 PP 68 | SetTime(341 - 376, 11); 69 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 70 | // wave12 PP 71 | SetTime(341 - 376, 12); 72 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 73 | // wave13 PP 74 | SetTime(341 - 376, 13); 75 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 76 | // wave14 PP 77 | SetTime(341 - 376, 14); 78 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 79 | // wave15 PP 80 | SetTime(341 - 376, 15); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | // wave16 PP 83 | SetTime(341 - 376, 16); 84 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 85 | // wave17 PP 86 | SetTime(341 - 376, 17); 87 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 88 | // wave18 PP 89 | SetTime(341 - 376, 18); 90 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 91 | // wave19 PP-(PP-PP) 92 | SetTime(341 - 376, 19); 93 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 94 | SetTime(341 + 601 - 376, 19); 95 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 96 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 97 | // wave20 PP-(PP-PP) 98 | // 炮消珊瑚 99 | SetTime(223 - 373, 20); 100 | pao_operator.pao(4, 7.5875); 101 | SetTime(341 - 376, 20); 102 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 103 | SetTime(341 + 601 - 376, 20); 104 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 105 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 106 | } 107 | int GetRowHaveHigherZombieHp(int wave) 108 | { 109 | auto zombies = GetMainObject()->zombieArray(); 110 | int hp_of_up_ground_zombies = 0; 111 | int hp_of_down_ground_zombies = 0; 112 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 113 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 114 | if (zombies[index].row() + 1 <= 3) { 115 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 116 | } else if (zombies[index].row() + 1 >= 4) { 117 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 118 | } 119 | } 120 | } 121 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 122 | return 2; 123 | } else { 124 | return 5; 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /qrmd/PE经典十二炮/PE经典十二炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十二炮/PE经典十二炮.png -------------------------------------------------------------------------------- /qrmd/PE经典十二炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十二炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE经典十八炮/PE经典十八炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十八炮/PE经典十八炮.png -------------------------------------------------------------------------------- /qrmd/PE经典十八炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十八炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE经典十炮·改/PEJingDian10_Gai.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-08-01 19:19:03 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-08-01 22:26:33 6 | * @Description:PE经典十炮·改 全难度极限出怪运阵演示脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、前往游戏存档文件夹C:/ProgramData/PopCap Games/PlantsVsZombies/userdata,备份原游戏存档,然后用脚本配套的存档文件替换同名文件 9 | * 3、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 10 | * 来自AvZScript公开脚本仓库: 11 | * 主库:https://github.com/qrmd0/AvZScript 12 | * 镜像库:https://gitee.com/qrmd/AvZScript 13 | * Copyright (c) 2022 by qrmd, All Rights Reserved. 14 | */ 15 | 16 | #include "avz.h" 17 | 18 | using namespace AvZ; 19 | 20 | void Script() 21 | { 22 | // 脚本在游戏主界面和选择植物界面生效 23 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 24 | // 全难度极限出怪:普僵、撑杆、橄榄、舞王、冰车、小丑、矿工、跳跳、小偷、扶梯、投篮、白眼、红眼、海豚 25 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, DANCING_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, DIGGER_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR, DOLPHIN_RIDER_ZOMBIE}); 26 | // 选择植物:小喷菇、模仿小喷菇、三叶草、花盆、胆小菇、樱桃炸弹、睡莲叶、咖啡豆、寒冰菇、毁灭菇 27 | SelectCards({PUFF_SHROOM, M_PUFF_SHROOM, BLOVER, FLOWER_POT, SCAREDY_SHROOM, CHERRY_BOMB, LILY_PAD, COFFEE_BEAN, ICE_SHROOM, DOOM_SHROOM}); 28 | SetTime(-599, 1); 29 | // 填充炮列表 30 | pao_operator.resetPaoList({{1, 5}, {6, 5}, {2, 5}, {5, 5}, {3, 1}, {4, 1}, {3, 4}, {4, 4}, {3, 6}, {4, 6}}); 31 | // 主体节奏 P5u PP|PP|PP|ccccPP|ccccPP 601|601|601|836|836 每波执行确定的操作,不考虑非旗帜波的刷新延迟 32 | 33 | // wave1 PP 34 | SetTime(341 - 376, 1); 35 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 36 | 37 | // wave2 PP 38 | SetTime(341 - 376, 2); 39 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 40 | 41 | // wave3 PP 42 | SetTime(341 - 376, 3); 43 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 44 | 45 | // wave4 ccccPP 46 | SetTime(191, 4); 47 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 48 | SetTime(601, 4); 49 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 50 | SetTime(836 - 200 - 373, 4); 51 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 52 | 53 | // wave5 ccccPP 54 | SetTime(191, 5); 55 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 56 | SetTime(601, 5); 57 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 58 | SetTime(836 - 200 - 373, 5); 59 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 60 | 61 | // wave6 PP 62 | SetTime(341 - 376, 6); 63 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 64 | 65 | // wave7 PP 66 | SetTime(341 - 376, 7); 67 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 68 | 69 | // wave8 PP 70 | SetTime(341 - 376, 8); 71 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 72 | 73 | // wave9 ccccPP-(-PP-PP) 74 | SetTime(191, 9); 75 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 76 | SetTime(601, 9); 77 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 78 | SetTime(836 - 200 - 373, 9); 79 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 80 | SetTime(836 + 836 - 200 - 373, 9); 81 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 82 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 83 | 84 | // wave10 PP 85 | SetTime(341 - 376, 10); 86 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 87 | 88 | // wave11 PP 89 | SetTime(341 - 376, 11); 90 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 91 | 92 | // wave12 PP 93 | SetTime(341 - 376, 12); 94 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 95 | 96 | // wave13 ccccPP 97 | SetTime(191, 13); 98 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 99 | SetTime(601, 13); 100 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 101 | SetTime(836 - 200 - 373, 13); 102 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 103 | 104 | // wave14 ccccPP 105 | SetTime(191, 14); 106 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 107 | SetTime(601, 14); 108 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 109 | SetTime(836 - 200 - 373, 14); 110 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 111 | 112 | // wave15 PP 113 | SetTime(341 - 376, 15); 114 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 115 | 116 | // wave16 PP 117 | SetTime(341 - 376, 16); 118 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 119 | 120 | // wave17 PP 121 | SetTime(341 - 376, 17); 122 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 123 | 124 | // wave18 ccccPP 125 | SetTime(191, 18); 126 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 127 | SetTime(601, 18); 128 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 129 | SetTime(836 - 200 - 373, 18); 130 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 131 | 132 | // wave19 ccccPP-(PP-PP) 133 | SetTime(191, 19); 134 | Card({{PUFF_SHROOM, 1, 9}, {M_PUFF_SHROOM, 2, 9}, {BLOVER, 5, 9}, {SCAREDY_SHROOM, 6, 9}}); 135 | SetTime(601, 19); 136 | Shovel({{1, 9}, {2, 9}, {5, 9}, {6, 9}}); 137 | SetTime(836 - 200 - 373, 19); 138 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 139 | SetTime(836 + 601 - 376, 19); 140 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 141 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 142 | 143 | // wave20 PA-(PP-PP) 144 | // 炮消珊瑚 145 | SetTime(223 - 373, 20); 146 | pao_operator.pao(4, 7.5875); 147 | SetTime(341 - 376, 20); 148 | pao_operator.pao(2, 8.8); 149 | SetTime(341 - 100, 20); 150 | Card(CHERRY_BOMB, 5, 9); 151 | SetTime(341 + 601 - 376, 20); 152 | pao_operator.pao({{2, 8.8}, {5, 8.8}}); 153 | pao_operator.recoverPao({{2, 8.8}, {5, 8.8}}); 154 | } 155 | -------------------------------------------------------------------------------- /qrmd/PE经典十炮·改/PE经典十炮·改.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十炮·改/PE经典十炮·改.png -------------------------------------------------------------------------------- /qrmd/PE经典十炮·改/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典十炮·改/game1_13.dat -------------------------------------------------------------------------------- /qrmd/PE经典四炮/PE经典四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/PE经典四炮.png -------------------------------------------------------------------------------- /qrmd/PE经典四炮/README.md: -------------------------------------------------------------------------------- 1 | PE经典四炮挂机冲关脚本 2 | 3 | bin文件夹提供了可以不依赖AvZ套件直接运行的便携版 -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/十倍速版/PEJingDian4.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/十倍速版/PEJingDian4.dll -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/十倍速版/PEJingDian4.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/十倍速版/PEJingDian4.exe -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/原速版/PEJingDian4.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/原速版/PEJingDian4.dll -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/原速版/PEJingDian4.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/原速版/PEJingDian4.exe -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/极速跳帧版/PEJingDian4.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/极速跳帧版/PEJingDian4.dll -------------------------------------------------------------------------------- /qrmd/PE经典四炮/bin/极速跳帧版/PEJingDian4.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/bin/极速跳帧版/PEJingDian4.exe -------------------------------------------------------------------------------- /qrmd/PE经典四炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/PE经典四炮/game1_13.dat -------------------------------------------------------------------------------- /qrmd/RE中开六炮/RE中开六炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE中开六炮/RE中开六炮.png -------------------------------------------------------------------------------- /qrmd/RE中开六炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE中开六炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/RE天台十炮/RETianTai10.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-06-03 16:21:53 4 | * @Last Modified by: qrmd 5 | * @Last Modified time: 2022-06-03 16:21:53 6 | * @Description: RE天台十炮 演示脚本 7 | */ 8 | 9 | #include "avz.h" 10 | 11 | using namespace AvZ; 12 | using namespace std; 13 | // 后场风炮 14 | PaoOperator slope_cannon; 15 | // 前场平地炮 16 | PaoOperator flat_cannon; 17 | 18 | // 如果[wave]波上半场刷出的僵尸总血量较高,返回2,否则返回4。用于5行场地的智能樱桃消延迟 19 | int GetRowHaveHigherZombieHp(int wave); 20 | // 自动在指定位置放置植物触发巨人僵尸举锤阻挡其前进。结合TickRunner使用 21 | void BlockGargantuar(vector pos); 22 | TickRunner block_giga; 23 | void Script() 24 | { 25 | // 脚本在游戏主界面和选择植物界面生效 26 | OpenMultipleEffective('Q', MAIN_UI_OR_FIGHT_UI); 27 | // 全难度极限出怪:普僵、撑杆、橄榄、冰车、小丑、跳跳、小偷、扶梯、投篮、白眼、红眼 28 | SetZombies({ZOMBIE, POLE_VAULTING_ZOMBIE, FOOTBALL_ZOMBIE, ZOMBONI, JACK_IN_THE_BOX_ZOMBIE, POGO_ZOMBIE, BUNGEE_ZOMBIE, LADDER_ZOMBIE, CATAPULT_ZOMBIE, GARGANTUAR, GIGA_GARGANTUAR}); 29 | // 选择植物:花盆、模仿花盆、咖啡豆、寒冰菇、毁灭菇、樱桃炸弹、倭瓜、三叶草、小喷菇、胆小菇 30 | SelectCards({FLOWER_POT, M_FLOWER_POT, COFFEE_BEAN, ICE_SHROOM, DOOM_SHROOM, CHERRY_BOMB, SQUASH, BLOVER, PUFF_SHROOM, SCAREDY_SHROOM}); 31 | SetTime(-599, 1); 32 | // 填充炮列表 33 | slope_cannon.resetPaoList({{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}); 34 | flat_cannon.resetPaoList({{1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}}); 35 | // 开始自动垫巨人僵尸 36 | block_giga.pushFunc([]() { 37 | BlockGargantuar({{5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}}); 38 | }); 39 | // 主体节奏 P5 PP|PP|PP|PP|PP 695|695|695|695|695 每波执行确定的操作,不考虑非旗帜波的刷新延迟 40 | // wave1 PP 41 | SetTime(495 - 387, 1); 42 | slope_cannon.roofPao(2, 9); 43 | flat_cannon.roofPao(4, 9); 44 | // wave2 PP 45 | SetTime(495 - 387, 2); 46 | slope_cannon.roofPao(2, 9); 47 | flat_cannon.roofPao(4, 9); 48 | // wave3 PP 49 | SetTime(495 - 387, 3); 50 | slope_cannon.roofPao(2, 9); 51 | flat_cannon.roofPao(4, 9); 52 | // wave4 PP 53 | SetTime(495 - 387, 4); 54 | slope_cannon.roofPao(2, 9); 55 | flat_cannon.roofPao(4, 9); 56 | // wave5 PP 57 | SetTime(495 - 387, 5); 58 | slope_cannon.roofPao(2, 9); 59 | flat_cannon.roofPao(4, 9); 60 | // wave6 PP 61 | SetTime(495 - 387, 6); 62 | slope_cannon.roofPao(2, 9); 63 | flat_cannon.roofPao(4, 9); 64 | // wave7 PP 65 | SetTime(495 - 387, 7); 66 | slope_cannon.roofPao(2, 9); 67 | flat_cannon.roofPao(4, 9); 68 | // wave8 PP 69 | SetTime(495 - 387, 8); 70 | slope_cannon.roofPao(2, 9); 71 | flat_cannon.roofPao(4, 9); 72 | // wave9 PP-(PP-PP) 73 | SetTime(495 - 387, 9); 74 | slope_cannon.roofPao(2, 9); 75 | flat_cannon.roofPao(4, 9); 76 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 77 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 78 | // wave10 PP 79 | SetTime(495 - 387, 10); 80 | slope_cannon.roofPao(2, 9); 81 | flat_cannon.roofPao(4, 9); 82 | // 智能樱桃消中场延迟 83 | InsertTimeOperation(495 + 1, 10, [=]() { 84 | SetTime(495 + 1, 10); 85 | if (GetRunningWave() == 10) { 86 | int row = GetRowHaveHigherZombieHp(10); 87 | Card(FLOWER_POT, row, 9); 88 | Card(CHERRY_BOMB, row, 9); 89 | } 90 | }); 91 | // wave11 PP 92 | SetTime(495 - 387, 11); 93 | slope_cannon.roofPao(2, 9); 94 | flat_cannon.roofPao(4, 9); 95 | // wave12 PP 96 | SetTime(495 - 387, 12); 97 | slope_cannon.roofPao(2, 9); 98 | flat_cannon.roofPao(4, 9); 99 | // wave13 PP 100 | SetTime(495 - 387, 13); 101 | slope_cannon.roofPao(2, 9); 102 | flat_cannon.roofPao(4, 9); 103 | // wave14 PP 104 | SetTime(495 - 387, 14); 105 | slope_cannon.roofPao(2, 9); 106 | flat_cannon.roofPao(4, 9); 107 | // wave15 PP 108 | SetTime(495 - 387, 15); 109 | slope_cannon.roofPao(2, 9); 110 | flat_cannon.roofPao(4, 9); 111 | // wave16 PP 112 | SetTime(495 - 387, 16); 113 | slope_cannon.roofPao(2, 9); 114 | flat_cannon.roofPao(4, 9); 115 | // wave17 PP 116 | SetTime(495 - 387, 17); 117 | slope_cannon.roofPao(2, 9); 118 | flat_cannon.roofPao(4, 9); 119 | // wave18 PP 120 | SetTime(495 - 387, 18); 121 | slope_cannon.roofPao(2, 9); 122 | flat_cannon.roofPao(4, 9); 123 | // wave19 PP-(PP-PP) 124 | SetTime(495 - 387, 19); 125 | slope_cannon.roofPao(2, 9); 126 | flat_cannon.roofPao(4, 9); 127 | slope_cannon.recoverPao({{2, 9}, {2, 9}}); 128 | flat_cannon.recoverPao({{4, 9}, {4, 9}}); 129 | // wave20 PP-(PP-PP) 130 | // 冰消空降 131 | InsertTimeOperation(-1 - 298 - 320, 20, [=]() { 132 | auto seeds = GetMainObject()->seedArray(); 133 | int index_flower_pot = GetSeedIndex(FLOWER_POT); 134 | SetTime(-1 - 298 - 320, 20); 135 | if (Asm::getPlantRejectType(FLOWER_POT, 1 - 1, 8 - 1) == Asm::NIL) { 136 | if (seeds[index_flower_pot].isUsable()) { 137 | Card(FLOWER_POT, 1, 8); 138 | } else { 139 | Card(M_FLOWER_POT, 1, 8); 140 | } 141 | } 142 | SetTime(-1 - 298, 20); 143 | Card(ICE_SHROOM, 1, 8); 144 | Card(COFFEE_BEAN, 1, 8); 145 | }); 146 | SetTime(495 - 387, 20); 147 | slope_cannon.roofPao(2, 9); 148 | flat_cannon.roofPao(4, 9); 149 | SetTime(495 + 695 - 387, 20); 150 | slope_cannon.roofPao(2, 9); 151 | flat_cannon.roofPao(4, 9); 152 | slope_cannon.recoverPao({{2, 9}}); 153 | flat_cannon.recoverPao({{4, 9}}); 154 | } 155 | int GetRowHaveHigherZombieHp(int wave) 156 | { 157 | auto zombies = GetMainObject()->zombieArray(); 158 | int hp_of_up_ground_zombies = 0; 159 | int hp_of_down_ground_zombies = 0; 160 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 161 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && zombies[index].existTime() <= NowTime(wave)) { 162 | if (zombies[index].row() + 1 <= 2) { 163 | hp_of_up_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 164 | } else if (zombies[index].row() + 1 >= 4) { 165 | hp_of_down_ground_zombies += zombies[index].hp() + zombies[index].oneHp() + zombies[index].twoHp() / 5; 166 | } 167 | } 168 | } 169 | if (hp_of_up_ground_zombies > hp_of_down_ground_zombies) { 170 | return 2; 171 | } else { 172 | return 4; 173 | } 174 | } 175 | void BlockGargantuar(vector pos) 176 | { 177 | for (Grid each : pos) { 178 | auto zombies = GetMainObject()->zombieArray(); 179 | auto seeds = GetMainObject()->seedArray(); 180 | vector indices_seed = {GetSeedIndex(FLOWER_POT), GetSeedIndex(FLOWER_POT, true)}; 181 | for (int index = 0; index < GetMainObject()->zombieTotal(); ++index) { 182 | if (!zombies[index].isDead() && !zombies[index].isDisappeared() && (zombies[index].type() == GARGANTUAR || zombies[index].type() == GIGA_GARGANTUAR) && zombies[index].row() + 1 == each.row && (zombies[index].abscissa() <= 40 + (each.col - 1) * 80 + 30 + 1 && zombies[index].abscissa() >= 40 + (each.col - 1) * 80 - 5)) { 183 | for (int index_seed : indices_seed) { 184 | if (index_seed >= 0) { 185 | if (seeds[index_seed].isUsable() && (GetPlantIndex(each.row, each.col) < 0 && GetPlantIndex(each.row, each.col, FLOWER_POT) < 0)) { 186 | CardNotInQueue(index_seed + 1, each.row, each.col); 187 | break; 188 | } 189 | } 190 | } 191 | } 192 | } 193 | } 194 | } -------------------------------------------------------------------------------- /qrmd/RE天台十炮/RE天台十炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE天台十炮/RE天台十炮.png -------------------------------------------------------------------------------- /qrmd/RE天台十炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE天台十炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/RE椭盘十四炮/RE椭盘十四炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE椭盘十四炮/RE椭盘十四炮.png -------------------------------------------------------------------------------- /qrmd/RE椭盘十四炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE椭盘十四炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/RE神之七炮/RE神之七炮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE神之七炮/RE神之七炮.png -------------------------------------------------------------------------------- /qrmd/RE神之七炮/game1_15.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/RE神之七炮/game1_15.dat -------------------------------------------------------------------------------- /qrmd/WhackAZombie/README.txt: -------------------------------------------------------------------------------- 1 | 迷你游戏 打僵尸 的挂机脚本,./bin 提供了点击即用的便携版本。 -------------------------------------------------------------------------------- /qrmd/WhackAZombie/WhackAZombie.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: qrmd 3 | * @Date: 2022-08-25 10:21:03 4 | * @LastEditors: qrmd 5 | * @LastEditTime: 2022-08-25 11:05:01 6 | * @Description:Whack A Zombie(打僵尸)挂机脚本 7 | * 使用方法:1、前往https://gitee.com/vector-wlc/AsmVsZombies,根据教程下载并安装好AsmVsZombies 8 | * 2、在Visul Studio Code中打开本脚本,右键点击编辑区空白处,在弹出菜单中选择“AvZ:Run Script” 9 | * 来自AvZScript公开脚本仓库: 10 | * 主库:https://github.com/qrmd0/AvZScript 11 | * 镜像库:https://gitee.com/qrmd/AvZScript 12 | * Copyright (c) 2022 by qrmd, All Rights Reserved. 13 | */ 14 | #include "avz.h" 15 | using namespace AvZ; 16 | 17 | // *** Not In Queue 18 | // 左键点击场上的僵尸 19 | void ClickZombie(); 20 | TickRunner zombie_clicker; 21 | 22 | // *** Not In Queue 23 | // 忽略鼠标指针状态,强制自动收集战利品 24 | void ForceCollectItem(); 25 | TickRunner force_item_collector; 26 | 27 | // *** Not In Queue 28 | // 使用墓碑吞噬者 29 | void UseGraveBuster(); 30 | TickRunner grave_buster_user; 31 | 32 | void Script() 33 | { 34 | zombie_clicker.pushFunc(ClickZombie); 35 | grave_buster_user.pushFunc(UseGraveBuster); 36 | item_collector.stop(); 37 | force_item_collector.pushFunc(ForceCollectItem); 38 | } 39 | 40 | void ClickZombie() 41 | { 42 | for (auto&& zombie : alive_zombie_filter) 43 | if (zombie->existTime() > 50) 44 | LeftClick(int(zombie->abscissa()) + 57, zombie->row() * 100 + 75); 45 | } 46 | void ForceCollectItem() 47 | { 48 | auto item = GetMainObject()->itemArray(); 49 | int total = GetMainObject()->itemTotal(); 50 | int collect_index = -1; 51 | for (int index = 0; index < total; ++index, ++item) { 52 | if (item->isCollected() || item->isDisappeared()) 53 | continue; 54 | collect_index = index; 55 | if (RangeIn(item->type(), {4, 5, 6})) 56 | break; 57 | } 58 | if (collect_index == -1) 59 | return; 60 | item = GetMainObject()->itemArray() + collect_index; 61 | float item_x = item->abscissa(); 62 | float item_y = item->ordinate(); 63 | if (item_x >= 0.0 && item_y >= 70) { 64 | SafeClick(); 65 | int x = static_cast(item_x + 30); 66 | int y = static_cast(item_y + 30); 67 | LeftClick(x, y); 68 | SafeClick(); 69 | } 70 | } 71 | void UseGraveBuster() 72 | { 73 | if (GetMainObject()->seedArray()[GetSeedIndex(GRAVE_BUSTER)].isUsable() && GetMainObject()->sun() >= 75) { 74 | for (int col = 1; col <= 9; ++col) { 75 | for (int row = 1; row <= 5; ++row) { 76 | if (Asm::getPlantRejectType(GRAVE_BUSTER, row - 1, col - 1) == Asm::NIL) { 77 | SetNowTime(); 78 | Card(GRAVE_BUSTER, row, col); 79 | return; 80 | } 81 | } 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /qrmd/WhackAZombie/bin/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **打僵尸** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 WhackAZombie.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 Whack A Zombie 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档; 22 | 23 | A:减慢一档; 24 | 25 | S:恢复原档。 26 | 27 | # 本脚本来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/WhackAZombie/bin/WhackAZombie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/WhackAZombie/bin/WhackAZombie.dll -------------------------------------------------------------------------------- /qrmd/WhackAZombie/bin/WhackAZombie.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/WhackAZombie/bin/WhackAZombie.exe -------------------------------------------------------------------------------- /qrmd/WhackAZombie/bin/使用说明.txt: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **打僵尸** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 WhackAZombie.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 Whack A Zombie 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档; 22 | 23 | A:减慢一档; 24 | 25 | S:恢复原档。 26 | 27 | # 本脚本来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/ZomBotany2/README.txt: -------------------------------------------------------------------------------- 1 | 迷你游戏 植物僵尸2 的挂机脚本,./bin 提供了点击即用的便携版本。 -------------------------------------------------------------------------------- /qrmd/ZomBotany2/bin/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **植物僵尸2** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 ZomBotany2.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 ZomBotany2 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档; 22 | 23 | A:减慢一档; 24 | 25 | S:恢复原档。 26 | 27 | # 本脚本来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/ZomBotany2/bin/ZomBotany2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ZomBotany2/bin/ZomBotany2.dll -------------------------------------------------------------------------------- /qrmd/ZomBotany2/bin/ZomBotany2.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/qrmd/ZomBotany2/bin/ZomBotany2.exe -------------------------------------------------------------------------------- /qrmd/ZomBotany2/bin/使用说明.txt: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 提供了 **植物僵尸2** 挂机脚本的便携版,无需安装 AsmvsZombies 套件,点击即用。 4 | 5 | # 使用方法 6 | 7 | 1、运行 Plants vs zombies 1.0.0.1051 英语原始版,进入游戏主菜单; 8 | 9 | 2、双击本文件夹下的 ZomBotany2.exe,等待三到五秒; 10 | 11 | 3、点击游戏主菜单按钮 MINI-GAEMS,再点击 ZomBotany2 进入游戏; 12 | 13 | 4、坐并放宽,欣赏脚本的表演。 14 | 15 | # 游戏运行速度控制 16 | 17 | 在脚本运行过程中,您不应也不必动手操作,但可以使用键盘快捷键控制游戏的运行速度。 18 | 19 | 游戏的运行速度倍率被分为 7 档:0.1、0.5、1.0、2.0、5.0、10.0,您可以使用以下按键调节档位: 20 | 21 | D:加快一档; 22 | 23 | A:减慢一档; 24 | 25 | S:恢复原档。 26 | 27 | # 本脚本来自 AvZScript 28 | 29 | 主库:https://github.com/qrmd0/AvZScript 30 | 31 | 镜像库:https://gitee.com/qrmd/AvZScript 32 | 33 | 如果主库访问受限,请访问镜像库。如果要上传代码,请传入主库,主库的更新会被定期推送至镜像库,而镜像库的变更不会影响到主库。 -------------------------------------------------------------------------------- /qrmd/ZomBotany2/tick_planter.h: -------------------------------------------------------------------------------- 1 | /* 2 | * @字符编码: UTF-8 3 | * @作者: qrmd 4 | * @时间: 2022-06-04 22:07:38 5 | * @描述: 智能种植操作类 6 | * @AvZ版本:220213 7 | * -------------------------------------------- 8 | * // *** In Queue 9 | * // 启用智能种植操作 10 | * tick_planter.start(); 11 | * -------------------------------------------- 12 | * // *** In Queue 13 | * // 暂停智能种植操作 14 | * tick_planter.pause(); 15 | * -------------------------------------------- 16 | * // *** In Queue 17 | * // 继续智能种植操作 18 | * tick_planter.goOn(); 19 | * -------------------------------------------- 20 | * // *** In Queue 21 | * // 终止智能种植操作 22 | * tick_planter.stop(); 23 | * -------------------------------------------- 24 | * // *** In Queue 25 | * // 设置tick_planter遍历种植操作队列时间间隔,默认为1厘秒 26 | * // 示例:设置tick_planter遍历种植操作队列时间间隔为10厘秒 27 | * tick_planter.setInterval(10); 28 | * -------------------------------------------- 29 | * // *** In Queue 30 | * // 清空种植操作队列 31 | * tick_planter.clear(); 32 | * -------------------------------------------- 33 | * // *** Not In Queue 34 | * // 在种植操作队列尾部添加操作,如果这些操作失败则什么也不做,相当于Card 35 | * // 示例:在2行8列种植向日葵,如果种植失败则什么也不做 36 | * tick_planter.PlantNotInQuene(SUNFLOWER, {{2, 8}}); 37 | * -------------------------------------------- 38 | * // *** Not In Queue 39 | * // 在种植操作队列尾部添加操作,如果这些操作失败则将其保留在队列中 40 | * // 示例:先后在1行1列、2行1列、5行1列种植向日葵,如果种植失败则重试,直到全部种植操作执行成功 41 | * // tick_planter.delayPlantNotInQuene(SUNFLOWER, {{1, 1}, {2, 1}, {5, 1}}); 42 | * -------------------------------------------- 43 | * // *** Not In Queue 44 | * // 在种植操作队列尾部添加操作,如果这些操作仅因位置被占用而失败则铲除占位的植物重试,如果仍失败,操作被保留在队列中 45 | * // 示例:在1行4列种植倭瓜,如果仅因1行4列被其他植物占用而种植失败,则将其铲除并重试,如果仍失败,则继续重试直到种植成功 46 | * // tick_planter.shovelPlantNotInQuene(SQUASH, {{1, 4}}); 47 | * -------------------------------------------- 48 | * // *** Not In Queue 49 | * // 在种植操作队列尾部添加操作,如果这些操作失败则暂停其他种植操作并将此操作保留 50 | * // 示例:先后在1行1列、2行1列、5行1列种植大喷菇,仅当最靠前的种植操作成功时,才会尝试其他种植操作 51 | * // tick_planter.waitPlantNotInQuene(FUME_SHROOM, {{1, 1}, {2, 1}, {5, 1}}); 52 | */ 53 | 54 | #include "avz.h" 55 | using namespace AvZ; 56 | #include 57 | 58 | namespace AvZ { 59 | class TickPlanter : public TickRunner { 60 | public: 61 | // *** Not In Queue 62 | // 在种植操作队列尾部添加操作,如果这些操作失败则什么也不做 63 | void PlantNotInQuene(int type, std::vector grid_list) 64 | { 65 | for (Grid each : grid_list) { 66 | Planting temp = {type, {each.row, each.col}, ABANDON}; 67 | plant_list[1].emplace_back(temp); 68 | } 69 | } 70 | // *** Not In Queue 71 | // 在种植操作队列尾部添加操作,如果这些操作失败则将其保留在队列中 72 | void delayPlantNotInQuene(int type, std::vector grid_list) 73 | { 74 | for (Grid each : grid_list) { 75 | Planting temp = {type, {each.row, each.col}, DELAY}; 76 | plant_list[1].emplace_back(temp); 77 | } 78 | } 79 | // *** Not In Queue 80 | // 在种植操作队列尾部添加操作,如果这些操作仅因位置被占用而失败则铲除占位的植物重试,如果仍失败,操作被保留在队列中 81 | void shovelPlantNotInQuene(int type, std::vector grid_list) 82 | { 83 | for (Grid each : grid_list) { 84 | Planting temp = {type, {each.row, each.col}, SHOVEL_AND_TRY_AGAIN}; 85 | plant_list[1].emplace_back(temp); 86 | } 87 | } 88 | // *** Not In Queue 89 | // 在种植操作队列尾部添加操作,如果这些操作失败则暂停其他种植操作并将此操作保留 90 | void waitPlantNotInQuene(int type, std::vector grid_list) 91 | { 92 | for (Grid each : grid_list) { 93 | Planting temp = {type, {each.row, each.col}, WAIT}; 94 | plant_list[0].emplace_back(temp); 95 | } 96 | } 97 | // *** In Queue 98 | // 启用 99 | void start() 100 | { 101 | InsertOperation([=]() { 102 | pushFunc([=]() { 103 | run(); 104 | }); 105 | }, 106 | "StartTickPlanter"); 107 | } 108 | // *** In Queue 109 | // 清空种植操作队列 110 | void clear() 111 | { 112 | InsertOperation([=]() { 113 | prior_plant_list.clear(); 114 | routine_plant_list.clear(); 115 | plant_list.clear(); 116 | plant_list = {prior_plant_list, routine_plant_list}; 117 | }, 118 | "CleanPlantQuene"); 119 | } 120 | // *** In Queue 121 | // 设置遍历种植操作队列时间间隔,默认为1厘秒 122 | void setInterval(int _time) 123 | { 124 | InsertOperation([=]() { 125 | time_interval = _time; 126 | }, 127 | "SetTickPlantInterval"); 128 | } 129 | 130 | private: 131 | enum IfFailDo { 132 | // 放弃,不会再执行此操作 133 | ABANDON, 134 | // 推迟,下次仍会执行此操作 135 | DELAY, 136 | // 阻塞,跳过所有其他操作直到此操作被执行成功 137 | WAIT, 138 | // 如果仅因为位置被占用而失败,则铲除占位植物并重试,如果重试失败,则推迟 139 | SHOVEL_AND_TRY_AGAIN 140 | }; 141 | // 种植操作数据 142 | struct Planting { 143 | // 种植的种子类型 144 | int type; 145 | // 种植的位置:{row, col}:[row]行[col]列 146 | Grid position; 147 | // 种植失败时的处理 148 | IfFailDo if_fail_do = DELAY; 149 | }; 150 | // 优先队列 151 | std::vector prior_plant_list; 152 | // 常规队列 153 | std::vector routine_plant_list; 154 | // 种植操作队列向量 155 | std::vector> plant_list = {prior_plant_list, routine_plant_list}; 156 | // 遍历种植操作队列的时间间隔 157 | int time_interval = 1; 158 | void run() 159 | { 160 | if (GetMainObject()->gameClock() % time_interval != 0) 161 | return; 162 | auto seeds = GetMainObject()->seedArray(); 163 | for (int i = 0; i < 2; ++i) { 164 | for (int index = 0; index < this->plant_list[i].size(); ++index) { 165 | auto it = plant_list[i][index]; 166 | int plant_type = it.type > IMITATOR ? it.type - IMITATOR - 1 : it.type; 167 | int index_seed = it.type > IMITATOR ? GetSeedIndex(it.type - IMITATOR - 1, true) : GetSeedIndex(it.type); 168 | int sun_cost = *(int*)(0x69F2C0 + plant_type * 0x24); 169 | int present_sun = GetMainObject()->sun(); 170 | int plant_reject_type = Asm::getPlantRejectType(plant_type, it.position.row - 1, it.position.col - 1); 171 | bool is_plant_successful = false; 172 | if (plant_reject_type == Asm::PlantReject::NIL && seeds[index_seed].isUsable() && present_sun >= sun_cost) { 173 | CardNotInQueue(index_seed + 1, it.position.row, it.position.col); 174 | if (!seeds[index_seed].isUsable()) { 175 | is_plant_successful = true; 176 | plant_list[i].erase(plant_list[i].begin() + index); 177 | } 178 | } 179 | if (!is_plant_successful) { 180 | switch (it.if_fail_do) { 181 | case ABANDON: 182 | plant_list[i].erase(plant_list[i].begin() + index); 183 | break; 184 | case WAIT: 185 | return; 186 | break; 187 | case SHOVEL_AND_TRY_AGAIN: 188 | if (plant_reject_type == Asm::PlantReject::NOT_HERE && seeds[index_seed].isUsable() && present_sun >= sun_cost) { 189 | ShovelNotInQueue(it.position.row, it.position.col); 190 | index--; 191 | } 192 | break; 193 | 194 | default: 195 | break; 196 | } 197 | } 198 | } 199 | } 200 | } 201 | }; 202 | TickPlanter tick_planter; 203 | } -------------------------------------------------------------------------------- /shallowdream/PE不经典十六炮/game1_13.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/shallowdream/PE不经典十六炮/game1_13.dat -------------------------------------------------------------------------------- /shallowdream/PE不经典十六炮/阵图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/shallowdream/PE不经典十六炮/阵图.png -------------------------------------------------------------------------------- /sin20/PE蝶恋花/PE蝶恋花.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/PE蝶恋花/PE蝶恋花.dll -------------------------------------------------------------------------------- /sin20/PE蝶恋花/PE蝶恋花.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/PE蝶恋花/PE蝶恋花.exe -------------------------------------------------------------------------------- /sin20/PE蝶恋花/game2_13蝶恋花.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/PE蝶恋花/game2_13蝶恋花.dat -------------------------------------------------------------------------------- /sin20/WSAD 4.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/WSAD 4.0.zip -------------------------------------------------------------------------------- /sin20/WSAD 4.0/README.md: -------------------------------------------------------------------------------- 1 | # WSAD 4.0 20221211 2 | 3 | ## 简介 4 | 5 | 可以让玩家在植物大战僵尸原版黑夜无尽中体验β版WSAD模式的脚本。 6 | 7 | NE WSAD冲关的规则为: 8 | 9 | 在原版NE中,以一个提供了15株植物(包含13株可移动的植物及2株吊兰阳光菇)的初始存档起手,使用鼠标左键选中植物,使用WSAD按键移动植物,使用F键修补破损的防御/辅助植物,在卡槽只许携带一次性植物的限制条件下冲关。 10 | 11 | 目前的最高纪录为:@Dawn_残阳铺水 连续生存25F。 12 | 13 | ## 运行环境 14 | 15 | 本脚本针对 AvZ 221001 版本开发,不确保对其它 AvZ 版本的兼容性。 16 | 17 | ## 使用方法 18 | 19 | WSAD脚本中用到了@Crescendo 制作的插件avz_more。若您尚未下载它,可以访问AvZ公开插件仓库https://github.com/qrmd0/AvZLib 下载。 20 | 21 | 若您已有插件avz_more,则将 WSAD 4.0.cpp 置于 AsmVsZombies/Script 目录后运行即可。 22 | 23 | ## 警告 24 | 不要商用哦\[永雏塔菲_NO喵!\] -------------------------------------------------------------------------------- /sin20/WSAD 4.0/WSAD 4.0.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: SKOSKX 3 | * @Date: 2022-10-23(update:2022-12-11) 4 | * @Description: WSAD小游戏 5 | * 更新内容:修复了可以在暂停时移动植物的bug;修复了玉米炮前轮移到弹坑上的bug;增加了修补植物功能 6 | * 初始提供15个植物,栈位依次为: 7 | * 0-玉米炮 Cob Cannon[47] 8 | * 1,2-忧郁菇 Gloom Shroom[42] 9 | * 3-冰瓜 Winter Melon[44] 10 | * 4-钢地刺 Spikerock[46] 11 | * 5-大喷菇 Fume Shroom[10] 12 | * 6-高坚果 Tall nut[23] 13 | * 7-机枪射手 Gatlin Pea[40] 14 | * 8-大蒜 Garlic[36] 15 | * 9-火炬树桩 Torchwood[22] 16 | * 10-仙人掌 Cactus[26] 17 | * 11-伞叶 Umbrella Leaf[37] 18 | * 场外吊两个阳光菇(12, 13)阳光菇,大大的,香香的,软乎乎的,好可爱[口水黄豆] 19 | */ 20 | 21 | #include "avz.h" 22 | #include "avz_more.h" 23 | 24 | using namespace AvZ; 25 | using namespace cresc; 26 | 27 | int plantID = -1; //正在被控制的植物的索引 28 | #define prow pa[plantID].row() 29 | #define pcol pa[plantID].col() 30 | 31 | bool CheckGrave(int row, int col) 32 | { 33 | auto place = ((cresc::MainObjectAZM *)GetMainObject())->placeArray(); 34 | for (int i = 0; i < ((cresc::MainObjectAZM *)GetMainObject())->placeTotal(); ++i, ++place) 35 | { 36 | if (!place->isDisappeared() && place->row() == row - 1 && 37 | place->col() == col - 1 && place->type() == 1) 38 | return true; 39 | } 40 | return false; 41 | } 42 | bool CheckCrater(int row, int col) 43 | { 44 | auto place = ((cresc::MainObjectAZM *)GetMainObject())->placeArray(); 45 | for (int i = 0; i < ((cresc::MainObjectAZM *)GetMainObject())->placeTotal(); ++i, ++place) 46 | { 47 | if (!place->isDisappeared() && place->row() == row - 1 && 48 | place->col() == col - 1 && place->type() == 2) 49 | return true; 50 | } 51 | return false; 52 | } 53 | 54 | //判断某个格子是否没有墓碑、弹坑或植物 55 | bool isEmpty(int row, int col) 56 | { 57 | if (!CheckGrave(row, col) && 58 | !CheckCrater(row, col) && 59 | CheckPlant(row, col) == -1 && 60 | CheckPlant(row, col - 1) != 0) //这一行利用了玉米炮只有一台且序号是0 61 | return true; 62 | else 63 | return false; 64 | } 65 | 66 | //生成植物函数 67 | //在[r]行[c]列生成一株[type]种类的植物 68 | void PutPlant(int r, int c, int type, bool imitater = false) 69 | { 70 | r -= 1; 71 | c -= 1; 72 | __asm__ __volatile__( 73 | "pushal;" 74 | "pushl $-1;" 75 | "pushl %[type];" 76 | "movl %[r],%%eax;" 77 | "pushl %[c];" 78 | "movl 0x6a9ec0,%%ebp;" 79 | "movl 0x768(%%ebp), %%edi;" 80 | "pushl %%edi;" 81 | "movl $0x40d120, %%edx;" 82 | "calll *%%edx;" 83 | "popal;" 84 | : 85 | : [r] "m"(r), [c] "m"(c), [type] "m"(type) 86 | :); 87 | } 88 | 89 | void Script() 90 | { 91 | OpenMultipleEffective('O', MAIN_UI_OR_FIGHT_UI); 92 | item_collector.stop(); //防止AvZ自动收集 93 | auto pa = GetMainObject()->plantArray(); 94 | 95 | //读取并锁定鼠标所在格植物 96 | KeyConnect(VK_LBUTTON, [=](){ 97 | plantID = CheckPlant(MouseRow(), MouseCol() + 0.5); //鼠标所在格植物索引 98 | if (plantID != -1 && //鼠标所在格有植物 99 | RangeIn(pa[plantID].type(), {COB_CANNON, GLOOM_SHROOM, WINTER_MELON, SPIKEROCK, FUME_SHROOM, TALL_NUT, GATLING_PEA, GARLIC, TORCHWOOD, CACTUS, UMBRELLA_LEAF})) 100 | { 101 | pa[plantID].mRef(0xBC) = 30; //使植物发亮0.3s 102 | if (pa[plantID].type() == COB_CANNON) 103 | SafeClick(); 104 | } 105 | else plantID = -1; 106 | }); 107 | 108 | //左移 109 | KeyConnect('A', [=](){ 110 | if (plantID != -1 && //当前选中了植物 111 | !pa[plantID].isDisappeared() && !pa[plantID].isCrushed() && 112 | !GetMainObject()->gamePaused() && 113 | isEmpty(prow + 1, pcol) && 114 | pcol != 0) 115 | { 116 | pcol -= 1; 117 | pa[plantID].xi() -= 80; 118 | pa[plantID].mRef(0x20) += 80; 119 | } 120 | }); 121 | 122 | //右移 123 | KeyConnect('D', [=](){ 124 | if (plantID != -1 && //当前选中了植物 125 | !pa[plantID].isDisappeared() && !pa[plantID].isCrushed() && 126 | !GetMainObject()->gamePaused() && 127 | pcol != 8) 128 | { 129 | if (pa[plantID].type() == COB_CANNON) 130 | { 131 | if (CheckGrave(prow + 1, pcol + 2) || 132 | CheckCrater(prow + 1, pcol + 3) || 133 | CheckPlant(prow + 1, pcol + 3) != -1) 134 | return; //对玉米炮的特判 135 | } 136 | else if(!isEmpty(prow + 1, pcol + 2)) 137 | return; 138 | pcol += 1; 139 | pa[plantID].xi() += 80; 140 | pa[plantID].mRef(0x20) -= 80; 141 | } 142 | }); 143 | 144 | //上移 145 | KeyConnect('W', [=](){ 146 | if (plantID != -1 && //当前选中了植物 147 | !pa[plantID].isDisappeared() && !pa[plantID].isCrushed() && 148 | !GetMainObject()->gamePaused() && 149 | isEmpty(prow, pcol + 1) && 150 | prow != 0) 151 | { 152 | if (pa[plantID].type() == COB_CANNON && 153 | (CheckCrater(prow, pcol + 2) || 154 | CheckPlant(prow, pcol + 2) != -1)) 155 | return; //对玉米炮的特判 156 | prow -= 1; 157 | pa[plantID].yi() -= 100; //这里仅针对前院行距 158 | pa[plantID].mRef(0x20) -= 10000; 159 | } 160 | }); 161 | 162 | //下移 163 | KeyConnect('S', [=](){ 164 | if (plantID != -1 && //当前选中了植物 165 | !pa[plantID].isDisappeared() && !pa[plantID].isCrushed() && 166 | !GetMainObject()->gamePaused() && 167 | isEmpty(prow + 2, pcol + 1) && 168 | prow != 4) 169 | { 170 | if (pa[plantID].type() == COB_CANNON && 171 | (CheckCrater(prow + 2, pcol + 2) || 172 | CheckPlant(prow + 2, pcol + 2) != -1)) 173 | return; //对玉米炮的特判 174 | prow += 1; 175 | pa[plantID].yi() += 100; //这里仅针对前院行距 176 | pa[plantID].mRef(0x20) += 10000; 177 | } 178 | }); 179 | 180 | //修补植物(限钢地刺、高坚果、大蒜) 181 | KeyConnect('F', [=](){ 182 | if (plantID != -1 && 183 | !pa[plantID].isDisappeared() && !pa[plantID].isCrushed() && 184 | !GetMainObject()->gamePaused()) 185 | { 186 | if (pa[plantID].type() == SPIKEROCK && pa[plantID].hp() <= 150 && 187 | GetMainObject()->sun() >= 600) 188 | { 189 | GetMainObject()->sun() -= 600; //修补需要花费四倍阳光 190 | auto p_row = prow + 1; 191 | auto p_col = pcol + 1; 192 | ShovelNotInQueue(p_row, p_col); 193 | PutPlant(p_row, p_col, SPIKEROCK, false); 194 | } 195 | else if (pa[plantID].type() == TALL_NUT && pa[plantID].hp() <= 2680 && 196 | GetMainObject()->sun() >= 500) 197 | { 198 | GetMainObject()->sun() -= 500; //修补需要花费四倍阳光 199 | pa[plantID].hp() = pa[plantID].hpMax(); 200 | } 201 | else if (pa[plantID].type() == GARLIC && pa[plantID].hp() <= 140 && 202 | GetMainObject()->sun() >= 200) 203 | { 204 | GetMainObject()->sun() -= 200; //修补需要花费四倍阳光 205 | pa[plantID].hp() = pa[plantID].hpMax(); 206 | } 207 | } 208 | }); 209 | } -------------------------------------------------------------------------------- /sin20/WSAD 4.0/WSAD 4.0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/WSAD 4.0/WSAD 4.0.dll -------------------------------------------------------------------------------- /sin20/WSAD 4.0/WSAD 4.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/WSAD 4.0/WSAD 4.0.exe -------------------------------------------------------------------------------- /sin20/WSAD 4.0/WSAD 初始存档.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/WSAD 4.0/WSAD 初始存档.png -------------------------------------------------------------------------------- /sin20/WSAD 4.0/game1_12.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qrmd0/AvZScript/7dd5ddae3c602e7045019491022295e920b76216/sin20/WSAD 4.0/game1_12.dat --------------------------------------------------------------------------------