红警编辑器任务编辑器怎样设计触发?

&&& 都第五篇了,好长,这是个坑,没多少人看为什么要写这个,我就当是为了部落&&还有什么没写?选中单位3星,随处建造(优雅),科技全开,转移单位所属(优雅),立即胜利(这个这个不怎么好意思发,我自己没找到)。还有地图其他玩家数据,当然还有我目前还没试过的出售建筑CALL,自动修理,枚举地图上全部单位(然后可以配合出售建筑,卖掉全部不属于自己的)还要写多少篇才能完结呢。。还还有心灵探测(从来不想实现,去造个心灵探测器会死),奶牛总统等特殊兵种(红警全能王谷子猫绿色珍藏版中的自定义函数好长好复杂,红色警戒2修改大师貌似是Timer不断修改内存数据,想找个更优雅的方式),需求不太高的建造队列上限(V1.006官方版是30,共和国之辉99),建造个数上限(抱歉,笔者没发现有个数上限),还有传说中我都没用过的可联网用的切换阵营,遭遇战参数修改。坑越挖越大
&&& 来吧,跟我继续填坑,这一篇就讲选中单位3星吧。
(十一)选中单位升3星&&三步走
1.寻找单位的血量&&第一步,把冰箱门打开
&&& 首先查找到一个单位的血量,然后根据谁修改了这个值,就能找到这个单位对象的起始地址。
&&& 做好准备工作,造一个盟军战车工厂A,一辆灰熊坦克。精确搜索4字节数值1000,让灰熊坦克去打一下,只打一下,然后搜索958&&也就是灰熊坦克打盟军战车工厂的伤害是42。重复2~3次,就能得到3个左右的地址,依次尝试修改吧。然后查找谁修改了这个值,但千万别摧毁了此建筑。得到指令005D3E65 - mov [esi+6C],eax,但这不重要,ESI的值对下一步才重要,还有+6C就是单位HP的偏移。记下ESI的值,即战车工厂对象的起始地址,此处记作地址A=0C5D7648。
&&& 再建造一座盟军战车工厂B,重复以上步骤找到其起始地址B=0745FF70。
2.寻找选中单位指针&&第二步,把大象放进冰箱
&&& 现在你的CT表中应该有4个地址:
&&& 然后游戏选中盟军战车工厂A,新搜索精确数值地址A(0C5D7648),然后选中盟军战车工厂B,搜索精确数值地址B(0745FF70)。应该只剩一个结果了,记作指针A=0D7B44D0,将其添加到CT表,不是的话,重复上述步骤。
&&& 选择灰熊坦克,指针A的值会变成另一个,记作地址C=07781CD8,然后+6C=781D44这个地址就是灰熊坦克HP的地址。将其锁定,然后建造另一辆坦克去攻击它,如果一直打不死,说明指针A正确,指向的就是当前选中单位。
&&& 然后搜索指针A的地址0D7B44D0,就能得到当前选中单位的基址[game.exe+640C64],然后找到选中单位的数量基址game.exe+640C70。
3.完成修改3星&&第三步,把冰箱门关上
&&& 单位等级偏移是+11C,修改成0x就是3星。最简单的实现选中3星,用Timer完成:1.首先获取选中单位数目。2.从选中单位基址读取第一个选中单位的起始地址,基址+4就是第二个单位的起始地址,+8就是第三个选中单位&&3.修改所有选中单位的等级。
&&& 这里有一个大概的游戏单位对象描述,这些东西都是通过分析和对比得出来的(CE有个功能叫分析数据/结构):
class GameUnit : public BaseA, public BaseB, public BaseC, public BaseD
//从内存结构上来讲,起始地址的前4个DWORD,就是虚函数表指针
//+34,关联标记(用过地图编辑器就知道了),链表
//+1AC,所在编队0~9
//+1A0,X坐标
//+11C,等级
Player* pO
//+1B4,所属者
//sizeof=0x608,因为继承了4个类,上面的这些可能都是基类的内容
//详请百度C++多继承内存布局
&&& 但是上面给出的实现选中3星有2个问题,一是没有判断是不是玩家的单位,偶然点了一下电脑的兵,也变成3星了&&,解决方法:判断pOwner指针是不是指向玩家;二是建筑物也能变成3星&&解决方案是,根据第一个DWORD,也就是第一个函数表指针,判断单位类型。我实在是没找到有什么变量指示了类型,只能用函数表指针了。(后注:最后一篇&&第十篇,给出了一个极有可能是获取类型的成员函数)
(十二)优雅的转移单位所属&&升3星引发的血案
&&& 上面看到有一个pOwner指向单位的所属者,如果把电脑的单位,修改成指向玩家的呢。经过测试,修改后确实可以控制或出售。但是带来一些问题:
1.如果你强行修改了电脑的基地,并卖掉了,接下来摧毁了所有电脑的剩余单位,发现并不能取得胜利。这是因为,游戏的数据记录乱了&&电脑在某些情况下认为他还有一个基地,但是却又不能用这个基地造东西;想卖掉投降,确又发现没有建筑可卖。灵异事件发生,不知道如何处理,只好尴尬的不能让你赢了。
2.如果你把电脑的兵营占有,会发现不能造对方的兵种。这就说明还有一些操作没有完成,比如增加建造选项。
3.如果你把一个没人占用的油田更改给自己,却发现油田根本不工作。这就说明还有一系列操作用来激活油井。
&&& 最容易想到的解决方法就是,同时修改相关联的数据,然后调用相关函数完成操作,难度系数4星半。分析出完整的数据结构那是相当不容易,还要写复杂的脚本完成善后的操作。但是,换个角度想想,游戏中应该有相应的完整的函数。因为玩任务模式的时候,经常会触发事件,然后别人的建筑变成我方建筑了。
&&& 最初查找谁修改了所属,然后是用工程师去占领建筑,找到一个更改所属的CALL,相关位置:
&&& 然而使用上面的CALL还是存在油井不工作的问题(笔者后注:其实上面的CALL返回第二层,依然能找到类似下面的代码从而解决问题,只是当时过分迷恋地图编辑器了,不过也有额外收获)。
&&& 于是我去创建了一个自定义地图,当我建造一个修理厂的时候,把地图上的核弹发射井转移给我。查找谁修改了所属者,第一层返回,还是CALL上面的同一个函数地址:
继续返回第二层,来到这里:
&&& 分析这附近的代码(截图范围不够大),收获有:地图上所有单位数目(敌方、我方及中立的建筑、步兵和坦克等)(game.exe+640C30),地图上所有单位数组(game.exe+640C24),游戏单位的+34偏移是触发关联标记,一个链表。由此可以遍历地图上所有单位。
&&& 最后写出转移所属的脚本:
//转移单位所属,可胜利
//提示语音
mov eax,[00A35DB4]
//当前玩家数据基址
//转移给谁
mov eax,[00A40C64]
//当前选中第一个单位基址
mov ecx,[eax]
//ECX=单位地址
mov ebx,[ecx]
call [ebx+378] //更改所属函数
&&& 还可以得出一个问题,CALL [EBX+378],EBX指向游戏单位的第一个函数表,0x378偏移说明是第222个函数&&好大一个类,还能维护么,好替它担心。
To be continued&
转载请注明来源,/viewll/p/4770378.html
阅读(...) 评论()当前位置: >
红色警戒2任务制作新手进阶图文教程一
&本篇为新手进阶篇,适合已经学习过入门篇的任务制作爱好者和具有一定地图制作基础的朋友们学习参考,通过此篇的学习可以使你的地图以及任务制作水平更加完善精美,任务的制作更加得心应手,掌握了本篇的制作技巧之后你就有独立制作完整的单人任务地图。如果没有任何制作经验和基础的爱好者,就美必要先看本篇了,应该先去学习下本站的菜鸟入门篇教程。
&本篇将就入门篇中尚未提到的编辑菜单中的触发编辑器、标签编辑器、脚本、特遣部队、作战小队等内容加以详细介绍,同时包括局部变量、单元标记、路径点的详细用法讲解。
触发编辑器
&触发编辑器是FA2地图编辑器中功能最强大的编辑工具,本篇将介绍的其它工具均与此工具有关联,可以这么说,如果没有了触发编辑器,本篇所要介绍的其它内容就几乎全部失去了意义。因此,要想制作好单人任务,触发编辑器的使用就必须学好。
&要学习使用触发编辑器,首先有必要了解什么是触发。触发实际上就是制作者给电脑下达的一系列指令,使得电脑根据某些特定的条件完成特定的动作。有过编程经验,学习过BASIC、C语言等的玩家可以发现,触发编辑器的作用和功能实际类似于if条件句,也就是当满足一定的条件之后执行if后面的指令。反映到触发上就是当发生某事件时则触发该事件对应的动作。形象的说就是&如果条件被满足,则会发生一些事情,反之条件不满足,就不发生任何事情。&这就是触发。
&这个就是触发编辑器的主面板。顾名思义,触发编辑器就是编辑触发、制作触发的工具。每一个完整的触发包括三个部分:触发的名称(Trigger options)、触发的条件(也叫事件,Events)、满足了条件之后所发生的事情(也叫行为,Actions)。有的时候名称也被称为标签,这点在后面介绍的其它工具的使用也一样(与标签编辑器中的&标签&含义不同)。
下面详细介绍各项目的作用:
&最上面那个下拉列表是触发的选择窗口,也就是这张地图中的所有触发都可以在这里找到。直接打开下拉列表可以选择所需要的触发。如果需要建立和编辑触发直接在上面有对应的四个按钮。
&然后下面是触发编辑的主界面,有三个选项卡,分别是标签(名称),事件和行为。
首先建立一个触发,然后选择标签选项卡,在下面的名称文本框中输入触发的名字。请注意,名字虽然只是注释内容,与触发的功能毫无关系,触发少的时候固然可以随意命名,但是当触发建立了很多以后想要找到并编辑需要的触发却不是一件容易的事。这个时候起一个明白好认名字就非常重要了。比如游戏胜利时的触发起名为&win&或者&胜利&,失败时的触发写作&lose&或者&失败&,这样当触发很多的时候打开下拉列表一眼就能认出游戏胜利与失败所对应的触发是那些,也方便日后测试和检查。
之后选择事件选项卡,界面会有所改变
&点击下面的新建事件,左侧的下拉框会出现&Event 0&,而下面的事件类型会出现许多选项,这些就是编辑器所能使用的各种触发的条件。
&当你选择了其中的一个事件之后,在其下面会出现对此事件功能的解释。某些事件还需要设置参数,在更下面框中会显示对应的内容。
比如你选择了&1 进入事件&之后下面的参数框里就会出现内容

我要回帖

更多关于 红警任务编辑器 的文章

 

随机推荐