有关城内更多招募的实现以及低级高级兵解除升级
本帖最后由 wenwu 于 2015-10-7 21:49 编辑这是我第一次发与mod有关的讨论贴,我自己想根据自己玩H3的喜好修改一下游戏,不过经验还不足,所以希望和高手交流一下,希望高手们多来指导
我发现era2.46通过CA:D命令(需要Battery.dll)可以在城内巢穴增加招募位置,最多可以实现一个巢穴4个招募(前面两个是H3内置关联的,所以相当于3个招募位置)
但是这个做法要注意一个问题,如果增加的招募位置先于高级巢穴招募出现会导致游戏退出
可以配合建筑关联设置新增招募在高级巢穴后面出现,就不会有问题了
具体做成的效果如下,这里我根据自己的低级高级单位共存(解除升级)的设想额外把天使升级指向天使,再把大天使的位置换成天使
代码相关的我下次再贴,因为其实不是很复杂,都是现成的命令组合起来的,主要有新游戏已存建筑、新建建筑和产量增长三个部分
这次主要是自己有很多问题需要请教
第一个是我看到“贤知有您”的第八招幕,在想会不会是CA:D命令有什么问题(比如AI不识别什么的),所以贤知有您才会用内存控制来实现第八招幕这个功能
第二个是我依照低级高级单位共存的设想把天使升级指向天使,这个会不会在AI那边造成死循环啊
谢谢高手们来指导
看起来挺牛逼的,不过拿第4个招募位干嘛?你想玩4野龙王还是石头人家族?再或者凑够4神使,完成你无敌的伟大梦想。。。。。。 78776756 发表于 2015-10-7 22:08
看起来挺牛逼的,不过拿第4个招募位干嘛?你想玩4野龙王还是石头人家族?再或者凑够4神使,完成你无敌的伟 ...
……
不知道说你这种人什么好,凭自己那点眼光,不管看别人说啥都在那里按照自己的粗浅理解乱喷
又不是每个巢穴都得放满4个,如果低级高级单位共存,再加上中立和wog单位替换为新单位补充,我总是会需要更多招募位置的
而且我这里是请教技术问题,又不是mod创意妄想,你就别这样不看气氛碰瓷了 第八招幕这个MOD是一种新尝试.它是一个关于内存修改的综合范例.是第一次应用这种技术的作品.它用的是城镇的第八个招募位置,也就是地下城那种.
至于楼主提到的CA:D其实命令也比较简单,不过估计一般招募3个生物已经足够了.因为也没有那么多生物可供这么多巢穴招募.
楼主提到
"如果增加的招募位置先于高级巢穴招募出现会导致游戏退出"
这点不是太理解.按道理,肯定是先建筑了高级巢穴,才进行后续的增加第三种招募生物的.
或者,楼主可能说的是左右顺序的问题.其实没必要调整顺序.
比如从左到右分别是
大天使-小天使-圣天使
只需要设置第三个可招募生物类型和数量就行了,不必对原1-2级处理.
本帖最后由 wenwu 于 2015-10-7 22:58 编辑
"如果增加的招募位置先于高级巢穴招募出现会导致游戏退出"
“楼主可能说的是左右顺序的问题.其实没必要调整顺序”
不好意思,之前我说得比较简略,这个不是左右顺序的问题,经过我之前总结是这样
CA:D命令会无条件增加第三和第四招幕位置,如果不设置在高级巢穴完成之后调用CA:D的条件的话,就等于没有第二招募位置而直接出现第三招募位置,可能是这个命令硬编码的限制,第三招募位置先于第二招募位置出现会造成报错退出,同理,如果用CA:D在没有第三位置时就先增加第四位置(这一般是参数写错了)也一样会报错退出
另外我弄成4个位置,但实际上还是3个,前两个是H3硬编码升级关联的,就连成长数量也是捆绑的,即使设置了高级单位不同的成长数量也没用
所以我才把大天使的招募位置换成天使,再把天使升级指向天使本身,而右边的大天使和神圣天使才是CA:D命令后添加出来的,我的目的是解除低级高级单位的升级关联,让他们独立的出现在战场上
只是我不知道AI判断单位是否需要升级是根据什么触发的,所以不知道天使升级指向天使本身不会到会不会造成AI死循环 另外怕有人不理解,我再详细说一下
Ca:D这个命令的生物增长是自己控制的,确切说就是触发间隔和增长数量都是可以自己控制的,比如我上面那个天使(两个位置是关联的,就是原来的天使和大天使)+大天使+神圣天使的情况,大天使是两个礼拜增长一个,神圣天使一个月才增长一个
实际上天使也被我设置成即使建造城堡也只增长一个了(这个有很多先例了,wog控制凤凰增长3个就是) AI判断单位能否升级,是检测城镇升级关系列表的.
这份列表就是对应 UN:T 语法的,每个城镇各个级别的高低级兵种设定.
如果不改这份列表,只要城镇的建筑成立,就满足AI升级条件.
话说,假设增加第三种生物类型,让AI要完成升级建筑和升级生物之类,估计判断会比较繁琐.
楼主加油,希望能出个新MOD. 看来我没说清楚,让贤知想多了
我用了UN:T把天使的升级指向天使了,自己升级到自己,然后MA:U那边也更改了,就是这样
!!UN:T0/6/1/12;
!!MA:U12/12;
只是我很担心这样会不会让AI死循环
我的打算是解除一切升级关联,新加入的生物也不作为升级目标,然后把高级生物产量降低,和低级生物共存
比如一楼那个图,天使是无法升级大天使的,大天使也无法升级到神圣天使,但是天使产量1周1个,大天使2周1个,神圣天使1个月1个
我为了实现解除升级,想到的办法就是自己升级到自己,比如天使升级天使,这样大天使就解放了,但是如果AI面对天使升级天使出现死循环,那我就得改变方案了 本帖最后由 pp22n411 于 2015-10-8 08:00 编辑
一月一个产量太低了,下个狮鹫宝屋都比城堡强而且一个英雄7个带7种兵,这么多不能升级的兵种就烂城堡里了
我也不晓得AI会怎样,不过楼主可以试验一下看结果。另外没有升级关系后,还得写脚本控制AI招募和取舍的问题,这个可能也很繁琐。 贤知有您 发表于 2015-10-8 09:27
我也不晓得AI会怎样,不过楼主可以试验一下看结果。另外没有升级关系后,还得写脚本控制AI招募和取舍的问题 ...
我刚才弄了一个图塔楼带飞船封上路口看电脑行动测试了一下,电脑给足资源,跑了一个月
结果是,升级指向原生物不会造成死循环
但是CA:D这个命令新增的位置电脑不会识别,一直不会去招,这是个大问题
贤知说得对,这个必须得写AI控制的脚本
我想升级关系是小事,主要是怎么让AI认识到CA:D多出来的招募位置,然后去招募就行
AI控制这方面,我知道的就是“new upgade”那个mod有一段让AI识别建造最终升级建筑的代码,那个我记得是资源够了立刻就造那样处理的(因为最终升级建筑很贵)
让AI找CA:D新增位置生物这个我还不知道怎么办,贤知您能帮忙指导一下吗?谢谢了
wenwu 发表于 2015-10-8 12:16
我刚才弄了一个图塔楼带飞船封上路口看电脑行动测试了一下,电脑给足资源,跑了一个月
结果是,升级指向 ...
遍历城镇的所有巢穴,判断一下CA:D的生物类型和数量不就成了?
不过有个触发点的问题.我觉得目前可以用的触发点时,AI英雄访问城镇,或者用一个TM计时器每天或者每周都去判断一下AI可否招募或者怎样招募的问题.
这些可能都比较繁琐点.
CA:D的新生物AI是不会自动处理的,你还要考虑各个生物槽的类型,能否增加什么生物,资源是否足够等等.不过为了增强AI,可以干脆直接给予生物,不用扣减资源之类.
我觉得写ERM最难或者说最繁琐的地方就是怎样让AI也能用上功能.而且很多时候没有一个合理的流程去编写AI脚本. 贤知有您 发表于 2015-10-8 12:27
遍历城镇的所有巢穴,判断一下CA:D的生物类型和数量不就成了?
不过有个触发点的问题.我觉得目前可以用的 ...
谢谢,你说的“直接给生物”这是个好办法,这比绞尽脑汁想办法控制电脑的行动要简易多了
而且我打算增加的都是高级生物,所以人工这边肯定也是优先召唤的,所以直接给电脑也没有什么不妥
每周一直接把高级生物给到电脑城里,然后把CA:D的增长量去掉,扣减资源这个根据情况处理,比如不按照原价只是象征性扣点钱或者干脆不扣
我去研究研究具体写出来
wenwu 发表于 2015-10-8 19:26
谢谢,你说的“直接给生物”这是个好办法,这比绞尽脑汁想办法控制电脑的行动要简易多了
而且我打算增加 ...
楼主似乎对脚本很有兴趣.
请问楼主是不是精通某种语言,比如C.
现在论坛玩家肯花点时间研究和编写脚本的越来越少,希望楼主可以持之以恒.
PS:
没猜错的话,楼主到HC论坛要求改善这个插件的AI功能了吧.嘿嘿.
:good_job: 本帖最后由 wenwu 于 2015-10-9 00:13 编辑
贤知有您 发表于 2015-10-8 20:06
楼主似乎对脚本很有兴趣.
请问楼主是不是精通某种语言,比如C.
现在论坛玩家肯花点时间研究和编写脚本的 ...
HC那边是发了帖子了,那边回复CA:D是玩家专用
不知道我下面说的是不是有点冒犯,我觉得HC现在那个版主更像是个管理型而不是开发型的,对范围内的掌握的似乎面面俱到,但是超出范围的就一笔带过不费口舌,(不过下mod时看到那个版主做了不少rpg风格的地图),而且erm的很多开发似乎是欧洲、特别是东欧和俄国那边的贡献比较大,反正不管HC那边是否改进了
至于我嘛,我也不知道我这算不算是写脚本,感觉和很多mod的代码相比我想写的还挺简易的,只不过我不太喜欢rpg式的策略游戏,H3有时会太依赖英雄和宝物,太依赖高级兵的实力和能力,感觉可以概括为练级寻宝加下棋(高级兵对抗+低级兵炮灰)的游戏,不过我还是挺喜欢H3的魔幻风格的,所以我想把H3修改的少一些rpg色彩,更注意战略,比如说更像全战那样的游戏,我这个喜好应该和大多玩H3的人都不一样,只好自己想办法修改
而且我不算精通语言,只是学过C(C++我还不会)和Fortran,还有好一阵子没用过了,以前我写过的也都是工程或者数学计算的程序,简单说就是把算法写进去,和像游戏这样的一般程序的编程思路很不一样
实际上我看erm有时感觉挺吃力的,觉得erm的格式好奇怪,乍一看跟我以前熟悉的语言一点相似之处都没有。还好熟悉命令以后也还能逐渐理清代码里面变量的逻辑关系,但是一些命令比如选择的实现感觉还是挺别扭,好像每次都得判断后赋值一个变量0或1然后需要的时候再判断才行,真没有if语句那样有条理
不过最大障碍还是有时候不熟悉这些一般程序的变量操作的习惯(C++我是真不会……),比如城市操作需要挨个循环找一遍,战场操作也得挨个循环位置然后寻找对应生物种类,这些都是看wog还有mod代码时候才明白的,这和计算的程序太不一样了,虽然和对数组做数据处理时候也有和上面类似的操作,但是对指标作循环的语句(比如do)感觉也比erm的语句直观的多了
所以现在我没有相关例子参考的话感觉自己还没法顺利写出来的啊
另外我觉得编程时候思路很重要啊,你说的“直接给生物”就是个好思路,至少可以换个方式替代出CA:D的AI效果,以后有问题了我还得来请教 学过编程,再看ERM其实应该会觉得ERM语法非常简单,或者说非常单调.
既然ERM是针对WOG的,也就得对游戏有一定的了解才能更好地运用这些脚本.
现在ERA下的ERM语法已经比当初WOG时代要强多了,因为可以直接改硬编码或调用内部函数.
ERM编程形式是比较固定的,在特定的触发器下执行系列语句而已.
楼主之所以觉得操作起来需要很多循环遍历,是因为还没有自己的一套ERM架构.当你编写越来越多脚本时,架构就出来了.比如战场操作,第一个循环出来后可以跟很多相关的操作了.以后再添加相似脚本就不必重写.又比如很多人都喜欢有自己一套战场的V变量,专门用于各种动作的数据收集以便重复使用时更方便.
我个人觉得ERM最差劲的是实数计算能力(比如没有double类型),相反最好用的是针对战场动作的相关语句.轻松更改战场信息以使得游戏如万花筒般出彩.
我一直推崇个人主义形式的游戏.也就是说每个人都有自己一套理想的H3模型.那么运用好ERM吧,它能满足你大部分自创游戏的要求. 我没有喷你啊……我只是搞不懂为什么要4个招募栏可好?毕竟4种形态的生物就那几种了 贤知有您 发表于 2015-10-9 20:33
学过编程,再看ERM其实应该会觉得ERM语法非常简单,或者说非常单调.
既然ERM是针对WOG的,也就得对游戏有一定 ...
erm语法确实不算复杂,但是很不习惯,怎么说呢,就是缺乏整体的逻辑性,或者说语言的逻辑性压根没反映在格式和语法上,确实是每个命令的功能很清晰,但是功能都专精,缺乏一般性的基本逻辑和计算功能,我现在就是还不习惯这一点
比如说C或者fortran吧,命令函数就那么几个,每个命令的功能都是基本的逻辑控制或者计算,只要根据数据特点和计算思路明确了算法,分解到具体的操作步骤,选择函数组织程序结构,理清顺序做好函数输入和输出接口,大体上就能写出草稿开始调试了
不过erm写起来就没那么舒服了,因为erm的命令功能都太专精了,如果把编程的思路具体到基本逻辑和计算上,回头就找不到能用的命令了,于是也不知道该怎么写了
反过来想也确实如贤知您所说,erm写起来需要一套erm自己的架构,我感觉就是编程的思路得反过来配合这些功能专精的erm命令,结合这些命令把思路分解到对应程度就完毕,根据需求用相关命令组合形成的一段功能性语句
哪一方面这样的常用语句成型了,这一方面的架构就有了,这个我已经有体会了,CA:D支援AI的尝试因为有巢穴成长的语句做例子,稍微改一下就写出基本框框了,虽然只写了一种兵,测试也通过了
还是那种函数功能基本的语言用起来方便,可以把思路化成基本逻辑要素,构思起来很自由
erm在分解思路来构思的过程中感觉受到erm命令带来限制太多了,总之还是慢慢习惯吧
另外era英文版自带的一个组件叫做“yona”的,那个不是用erm写的,文件后缀是pascal,那个,贤知您研究过那个插件没? 本帖最后由 贤知有您 于 2015-10-11 15:51 编辑
wenwu 发表于 2015-10-11 14:48
erm语法确实不算复杂,但是很不习惯,怎么说呢,就是缺乏整体的逻辑性,或者说语言的逻辑性压根没反映在 ...
我之所以问你是否学习过编程,无非就是想有人搞搞插件.
ERA是支持C或者Delphi编写插件的,你可以看看 Tools\Era\SDK 目录下就有文件头和范例.
我对C语言只是略懂,无法编写出有水平的插件.
不过一般插件的功能都有限,不能像编写一套ERM那样方便.
但插件的功能往往是ERM无法处理才突出的.
咱们论坛目前出的插件明显稀缺,ERM脚本倒是很多.
楼主如果熟悉C或者C++可以考虑考虑插件.我最想见到的插件是, 扩展ERM缓存,突破30M内部存储上限.甚至,楼主可以自己编一个更有趣的生物招募界面.
有其它ERM方面得问题也可以提出,大家参详参详.
刚刚看了Tools\Era\SDK这个目录,意识到插件是怎么来的了,也意识到“yona”意识到这确实是个“插件”……,
说实话插件这个我也不行,我之前对插件的印象就是“某些高手通过专业编程涉足的神秘的领域制作出来的dll”,我不是受过专业的编程方面教育的(不然就不会说出前面那个印象了),作为工科的学习那一点编程就是为了解决工作需要,比如处理数据、数值计算、有限元子程序之类的,只是把纸面上的计算写成代码就完事了
说到这里,我想起一些已经遗忘的词汇了,我编程的思路还是过程式编程,面向对象的我一直很糊涂(上一个帖子概括一句就是erm感觉很像面向对象编程所以不习惯)
不过既然知道“yona”是个插件,实际上我之前就很想利用“yona”写一些兵种相克之类效果,感觉会比erm容易而且自由度更大
所以我想涉足一下插件,先从扩展yona开始吧,先从自己需要的内容入手,也许深入了以后也能写出其他东西出来,得去看看书,还得下编译平台,有问题还得向贤知您请教
页:
[1]
2