马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 剑仙十号 于 2021-8-5 18:06 编辑
【内存教程】植物大战僵尸 发炮call。
一直使用无炮阵,发现无炮经常透支冰力,灭小丑红眼得以核代炮,樱桃辣椒代炮,又得用垫材(小蘑菇、花盆、阳光茹、胆小茹)操作十分繁锁。
于是改成核子+窝瓜,樱桃+辣椒,四轮冰,两轮炮的8轮轰,操作十分简单方便。
填充炮弹不消耗阳光值,这是一大优势。炮弹用完了,冰力储备完成。冰力用完了,四炮也储备完成了。合理分配卡槽,不要一直等冰。
这个阵比较省心。
植物大战僵尸中文版,
植物大战僵尸英文原版,
[[[006A9EC0]+768]+561C] 的数值为出怪种子。
把小丑、红眼、雪橇车、橄榄球,
舞王、矿工、海豚、气球 全部调出来做压力测试,只需要料理小丑、红眼,其它小怪只会哗啦哗啦的送死。
10炮法,12炮,20炮,24炮,操作量太大,对新手要求很高 必须使用脚本。用手操作半小时,会不会得近视眼?
.
四冰四炮法 就轻松多了。炮弹填充和卡槽冷却的恢复,要合理利用。 脚本用多了,换成手动的也十分轻松。
读内存工具,使用tc简单开发+dm3.1233。
自动收集 物品类(阳光 钻石 金币 银币)。
遍历僵尸类,预警白眼巨人 红眼巨人 小丑。
用汇编代码,调发炮call,
相信破千关不是难事。
=======================================================
物品类~数组偏移。
自动收集 物品类(阳光 钻石 金币 银币)。
每个物品对象,是否收集_地址。地址的值:1开始收集,0不收集
.
学会此方法,适合所有游戏的读取 周围物品数量,遍历周围物品对象,自动捡物。
6A9EC0
│768
│├F4//地上物品数量
6A9EC0
│768
│├E4//物品~属性偏移,+D8下一个阳光对象/金币对象.
││├—50//逻辑值为1时,自动收集该物品.
=======================================================
僵尸类~数组偏移。
基址6A9EC0
一级768
二级偏移
│├A0 //当前僵尸数量
│├94 //最大僵尸数量
基址6A9EC0
一级768
二级90,僵尸类偏移。
3J偏移
││├—24//僵尸类型(0为普僵)
││├—1C//所在行数
││├—2C//x坐标.浮点型
││├—C8//当前血值
││├—68 //小丑爆炸倒计时,MJ/雪人/跳跳的相关倒计时。先判断僵尸类型,小丑代号是16
3J偏移,递增15C * i为下一僵尸对象。
这款游戏在制作时,采用类和对象的编程。在类里面封装 属性(变量),封装方法(函数)。
僵尸类数组,下标是从0开始的。
15C * 3 为第3个僵尸对象,+15C+15C+15C
15C * i 为第n个僵尸对象。+15C * i
.
学会此方法,适合所有游戏的遍历 周围怪物数组,自动打怪。
功能 执行()
var 僵尸类型, 所在行数, 所在列数, 所在x坐标, 僵尸血量
var n = 读取当前僵尸数量()
如果(n >= 50) //证明新一波僵尸来了。1关11波僵尸,玉米炮干掉2波,寒冰菇干掉4波。玉米炮寒冰菇再干掉3波,完成塔防任务。
//用脚本操作比较容易。读内存监测卡槽,补充寒冰菇。
调用玉米炮or寒冰菇()
结束
for(var i=0; i<n; i++)
//用for循环遍历一次,看看是否有 漏网之鱼。
僵尸类型 = 读取当前僵尸类型()
如果(僵尸类型 == 16) //小丑代号是16
所在行数 = 读取僵尸所在行数()
如果(所在行数 == 1 || 所在行数 == 4)
所在x坐标 = 读取僵尸所在x坐标()
如果(所在x坐标 <= 710)
僵尸血量 = 读取僵尸血量()
如果(僵尸血量 >= 200)
//读取小丑爆炸 的倒计时
// [[[[6A9EC0]+768]+90]+68+15C * i]
调用玉米炮or寒冰菇()
结束
结束
结束
结束
//
如果(僵尸类型 == 红眼代号)
所在行数 = 读取僵尸所在行数()
如果(所在行数 == 1 || 所在行数 == 4)
所在x坐标 = 读取僵尸所在x坐标()
如果(所在x坐标 <= 710)
僵尸血量 = 读取僵尸血量()
如果(僵尸血量 >= 800)
调用玉米炮or寒冰菇()
结束
结束
结束
结束
//
如果(僵尸类型 == 白眼代号)
所在行数 = 读取僵尸所在行数()
如果(所在行数 == 1 || 所在行数 == 4)
所在x坐标 = 读取僵尸所在x坐标()
如果(所在x坐标 <= 710)
僵尸血量 = 读取僵尸血量()
如果(僵尸血量 >= 800)
调用玉米炮or寒冰菇()
结束
结束
结束
结束
//
如果(僵尸类型 == 蹦极代号)
所在列数 = 读取僵尸所在列数()
如果(所在列数 == 3 || 所在列数 == 4) //数组下标从0数起,编程列数 = 真实列数 - 1
调用寒冰菇()
结束
结束
//
end
结束 //功能结束.
功能 调用玉米炮or寒冰菇()
//记录 时间间隔,防止一直使用炮弹,消耗冰力。
//timeSub < 5秒的,return 0 //跳出子函数。
…………
…………
结束
=======================================================
植物类~数组偏移。
基址6A9EC0
一级768
二级偏移
│├BC //当前植物数量
基址6A9EC0
一级768
二级偏移
│├AC //植物类偏移。
3J偏移
││├—24 //判断植物类型.
││├—3C //再判断玉米炮植物 的储备状态(35:空炮;36:填炮中;37:有炮弹;38:发炮中)
3J偏移,递增14C * i为下一植物对象。
.
学会此方法,适合所有游戏的遍历技能数组,自动释放技能。
var 植物类型, 储备代号
var m = 读取当前植物数量()
var 调用次数 = 0
for(var i=0; i<m; i++)
如果(调用次数 = 2)
break
结束
植物类型 = 读取当前植物类型()
如果(植物类型 == 玉米炮代号)
储备代号 = 读取玉米炮储备代号()
如果(储备代号 == 37)
调用次数 = 调用次数 + 1
调用发炮call(i, 调用次数) //用调用次数,设置落点x, 落点y
结束
结束
end
=======================================================
z弹类~数组偏移。
所有z弹,实例化后都是对象。种1豌豆射手,种1个玉米加农炮,变动下z弹类数量,用CE查找 z弹数量 的地址,查看是什么改写了这个地址。
再在OD中,Ctrl+G跳转到这个地址,在这个地址前后跟跟,就能找到玉米炮植物的发炮call。
.
学会此方法,适合所有游戏的遍历技能数组,自动释放技能。
功能 玉米炮_发炮call(i, 调用次数)
dm3.1233,到群_共享,文件,大漠插件,下载。
原创作品。转载请标明作者,标明出处. |