佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 5913|回复: 16

面对一点编程基础都没有的ERM入门教学

[复制链接]

该用户从未签到

96

回帖

1万

金币

0

精华

3级 Known Hero

Rank: 3Rank: 3

积分
792
发表于 2013-1-29 22:25:12 | 显示全部楼层 |阅读模式
如题,只是面向纯小白的ERM教学作者本人我也是刚学不久啥也不熟悉,所以只教入门,看完想以我的方式深入学习的可以回帖反应

正式开始
我将连系ERM帮助 V2.81.chm 进行教学,帮助大家如何使用该文档
不过首先,我介绍一下ERM总体来说,到底是怎样的运作方法,便于理解


★大家使用ERM的目的想必都是数据操作,也就是做点什么,ERM提供了很多功能,如修改单位数据,修改英雄属性
☆既然已经确认了可以做点什么,那么关键的问题是,在什么时候?


当你要做一件事的时候,必然需要准确的时间,其格式如下:
!?在这个时候
!!做一件事

当你打开Mods\WoG\Data\s文件夹,放眼望去,所有以“.erm”结尾的文件,用专用工具,或者记事本打开
通篇充斥着!?以及!!这两种符号
以!?开头,然后下面紧跟一竖条!!,这样:
!?
!!
!!
……
!!
的格式,代表在这个时候,做一堆事情    ——  图示: 截图.jpg


还有一种开头:
!#
这个符号也是做点什么的意思,不过它不需要时间,因为时间默认为:刚开始载入地图的时候


这里有必要理清“!?”以及“!!”的能力范围
!?敌人的天使WC去的时候
!!踢他小jj

或者
!?我有优势的时候
!!进一步增加我的优势
这两者不可实现,想必你们用右脚的小拇指想想也能认同吧

究其原因,我要说的是:
时间,以及所做的事情,都必须是精确的
电脑AI有限,无法理解人话
ERM开发功能有限,无法提供 所有的时间,也无法提供 所有能做的事
所以你们必须按照数量有限的时间点,发布做什么事的命令,大体感觉还是如图:

深入代码
现在要结合帮助文档来理解ERM语言如图 截图.jpg 对照理解,在感觉上了解一下格式


“!?”在文档中被称之为触发器,从字面意思来看,是等待着被触发,就像猎人捕猎时布下的陷阱,等待猎物踩上去才会生效
这种感觉即是:
①当过了一天
②当轮到下一个怪物行动
③当英雄释放魔法
④当英雄进入城镇画面
⑤当点击鼠标左键
总之,触发条件有很多种,只有当那些条件实现,或者说是时机降临,才允许你做事情,而在此之前,你只需要选对时机

“!!”在文档中被称之为接收器,从字面意思来看,就像是等待命令的士兵,时机来临才被允许冲锋陷阵
“!!”全都必须跟在“!?”下面,不限数量,也就是说:时机只需要一个,但是却可以做很多事
这种感觉即是:
!?当命运到来之时
!!我们就回老家结婚
!!结婚后搞外遇
!!掐死这个搞外遇的
总之,一个“!?”配一个或多个“!!”是固定格式,然后就是下一个“!?”和“!!”的故事了

“!#”在文档中好像被称作说明,总之就是载入地图的时候就要执行的命令
“!#”“!!”功能上有点不同,“!!”能做的事情要比“!#”多一点,但是受限于"!?"
这种感觉就是:
!#在盘古开天辟地之初,我能做的事情是……撸管!

!?盘古开天辟地的第二天
!!继续撸管!

!?几千年后,一个女神路过
!!求交往!

!?几千年后的又一天,女神刚刚走掉
!!大声抗议:“为什么不是昨天!!!我要回到昨天,我要回到昨天我要去求交往!”
总之,这三者不是并存关系,只有!#,或者只有!?&!!,或者并存,这都是没什么关系的事情
由于!#能做的事情!!都能做,所有接下来就不说!#什么事了


【现在】请打开ERM帮助文档,映入眼帘的应该是:
截图2.jpg

密密麻麻的全都两个字母组成的标签,然后左右也分别有不同英文名的标签
我直截了当的说:
中间所有两个字母组成的标签,记录着所有能使用的接收器,或者说做点什么
而右上角的Triggers,则记录着所有能使用的触发器,或者说什么时候

也就是说,!?后面可以编写的语言全都能在Triggers中找到,而!!能执行的编码则分别记录在中间的双字母标签中
现在的问题是:人工智能不够聪明,说人话它不懂,你们只能严谨的按照格式来编写才有用
接下来我将解释那个所谓的严谨格式,究竟该怎么遵守
而在明白那个格式之前,你们已经能够通过汉化的说明来了解ERM究竟能实现怎样的功能,比如:
!?BA#;
当战斗发生时触发

!!BU:XXXX;
V$战斗立即结束.
$ 胜利者 (0=右 (防守方), 1=左 (进攻方)).

即使不知道格式,读汉字你也该知道:
!?当战斗开始时
!!战斗结束,防守方获得胜利

差不多就是这个感觉吧,中场休息
PS1:当然,文字上的说明其实并不精确,每个人的理解方式也不同,很可能你会对一些功能产生误解
PS2:另外,不要以为能随意组合“!?时机” 与 “!!动作”,那什么”!?英雄进入城镇;!!给战场放置一个障碍物“,想想这也是不可能的~~
PS3:还有就是…………我举得这个例子就是不可能实现的误解

[ 本帖最后由 清蒸猫锅 于 2013-1-29 22:48 编辑 ]

评分

4

查看全部评分

  • TA的每日心情
    郁闷
    2022-9-14 12:04
  • 签到天数: 63 天

    连续签到: 1 天

    [LV.6]地狱战马

    616

    回帖

    6682

    金币

    0

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

    积分
    3331
    发表于 2013-1-29 22:31:04 | 显示全部楼层
    就有这样?,黄猫大爷?
  • TA的每日心情
    郁闷
    2022-9-14 12:04
  • 签到天数: 63 天

    连续签到: 1 天

    [LV.6]地狱战马

    616

    回帖

    6682

    金币

    0

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

    积分
    3331
    发表于 2013-1-29 22:34:03 | 显示全部楼层
    WOG小组不该搞ERM,该搞是LUA新语言啊。
    怒唉,嘿嘿。。。

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-1-29 22:34:22 | 显示全部楼层
    原帖由 小翼 于 2013-1-29 22:31 发表
    就有这样?,黄猫大爷?

    怎么可能就这样结束……我怕网页死掉啥都不剩啊先发一点点再说

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-1-29 22:35:44 | 显示全部楼层
    严谨的格式】先大致的了解一下,究竟有哪几处令人懊恼的格式说明:
    截图.jpg
    这个接收器只能在触发器 !?BG(!?BR) 是啥意思?
    !!BU:XXXX; 就已经无法理解了啊!
    ?$; 我去……
    #/?$; 诶?
    截图2.jpg
    那个#是什么意思,为什么上面的触发器后面没有#?
    截图3.jpg
    怎么这么多#?

    嘛……差不多就是类似的疑问&感慨了吧……
    老实说,我也不怎么记得,时不时还得去查看这些符号说明到底是什么意思
    虽然它们的解释可以查,但却没有摆在明显&直观的地方
    进入帮助文档左上角正数第二的ERM教程,页面搜索$就能找到,不过,为了避免你们混乱,我还是先解释一下这些东西的作用

    乱七八糟的特殊符号
    高度概括:这些特殊符号的作用是进行精确定位
    扩展解释:由于人工智能很笨,它只能执行精确的命令,例如把箱子搬过去,电脑是听不懂的,哪怕眼前只有1个箱子,但是,如果你命令”把1号箱子搬到阁楼上“,电脑就懂了

    现在就来看看这些特殊符号的说明:



    1、  代数
    在ERM帮助中,我们会使用代数(或者叫参数)来代表这是一个值,就好像数学公式中的代数一样,我们通常会使用#、$和?$这三个代数:
    如果命令的代数值标注为$表示该值既可以被设置,又可以被读取。如果标注为# 表示只能被设置而不能被读取。如果表示为?$ 则表示只能被读取而不能设置。



    好了,如果看不懂我再说明一下,你们大概疑惑的是,设置&读取   到底有什么作用
    举例:
    (1)设置
    1、你有且只有一个保险箱,可以命令你的机器佣人去给保险箱设置一个密码
    2、或者你希望一个机器用人代替你操作保险箱,但是AI需要更加精确的设定,所以你要给代替你去操作保险箱的机器人设置1号保险箱 的精确设定
    3、在2的基础上,不仅要设置1号保险箱,你还要设置一个密码告诉机器人设置这个密码
    总之根据场合,你需要设置的部位不一样,内容也不一样
    (2)读取
    其实读取相对简单,只是你没有记忆力,你需要一个临时的纸条来记录下来,或者一个面积有限的黑板,或者你可以去超市买一个笔记本
    但是,在你获取了这个数据之后,究竟要拿这个数据做什么……
    你完全可以这样:你获得的物品是白棍面包,做条件判断“当你获得的物品不是胖次的时候”,你就去泪奔 —— 我敢保证这是毫无意义的行为,但这是你的自由
    (3)如何理解数据能同时读取&设置呢?
    假设有这样一个功能:英雄装备的头盔
    1、你读取头盔发现是胖次,你心满意足啥也不做
    2、你读取头盔发现是神谕之冠,你怒设胖次
    3、你设置你的头盔是胖次,至于你原本戴着的是什么,那已经不重要了

    【特殊符号实例说明】
    在解释特殊符号之前,还要先说明一件事
    截图4.jpg

    这些单个英文字母是什么意思?
    其实纵观全局,你们有没有觉得好奇怪?为什么触发器全都记录在Triggers标签里面,而接受器分了这么多个标签?
    其实就是功能分类,你们可以将双字母标签看成是接待员,而这单个字母就是该部门负责不同工作的员工
    从结果来看,你最终只会调用一个员工为你实现需求,但是首先你必须访问接待员~~~
    所以,不论你查看任何一个接收器标签,开头都是类似于!!BU:XXXX; 的标签,然后这个XXXX就是帮你传叫对应员工为你服务


    【格式明细】 XXXX 所表示的意思很简单:接下来所有的员工工作内容都写在XXXX处,假设你要写的内容是“Q%……&*(”,那么最终成型的格式就是!!BU:Q%……&*(;
    当然,员工有限,你只能从单字母的列表中查找,或者直接在标签页面内海量搜索你需要的员工,比如说,你要找V君,那么格式就是!!BU:V$;
    没完,$这种特殊符号不是精确的命令,查看说明:战斗立即结束. $ 胜利者 (0=右 (防守方), 1=左 (进攻方)).
    从之前的说明可知,$是即能设置又能读取的特殊符号,复杂的不说,假设你希望防守方胜利,那么就根据说明,将$置换为0,那么格式就是!!BU:V0;

    还有后续
    BU这个标签的开头就有这样的说明:接收器只能在触发器!?BG!?BR 后面运行.
    字面意思,BU标签所提供的所有接收器,即“!!”只能跟在固定的“!?”下面,在Triggers中查询可知:
    !?BG;
    在战斗时当任意生物动作或英雄动作(施放魔法,逃跑或投降)时触发
    !?BG0 在动作发生触发 (
    !?BG)
    !?BG1
    在动作发生触发。

    !?BR;
    在战斗中每个回合触发。(第一回合触发两次)。
    根据你的需要,比如说BG,那么,完整的格式就是:
    !?BG;    在英雄施法、逃跑或投降的时候
    !!BU:V0; 战斗结束防守方获得胜利




    天色已晚,明天继续
    *****************继续开课**********************

    【回归鸟蓝图】
    先不要继续纠结所有的格式理解
    还有个更大的格式急需你们的理解,那就是,ERM语言究竟该写在哪里生效


    有两个地方能生效
    ①打开地图编辑器的事件编辑,添加事件,然后把ERM写进去
    ②打开Mods\WoG\Data\s文件夹,在任何一个“.erm”结尾的文件,用专用编辑器 或者 记事本打开,将你的代码插入进去,注意不要把已经存在的代码插得妻离子散
    或者新建一个文本文件,把末尾的.txt修改成.erm,然后在空白的内容里面将你的代码写进去,一般都是这样


    以刚才了解的标准格式为例子,在一个空白的erm文件里面添加这样的代码:
    ZVSE
    !?BG;
    !!BU:V0;
    换行
    【说明】这是erm语言的内部问题,如果你使用的记事本编辑,那么必须空出最后一行,否则会出错

    【重复一遍】
    ①erm文件的开头必须写ZVSE,以标明这是需要执行的erm语言
    ②!?&!!是不可分离的,不要试图将新的!?&!!插入到原始的!?&!!之间
    ③记事本等非专业编辑器必须在末尾留空行

    好了,现在告诉你们简洁的测试方法:(暂时没有必要动手尝试)
    ①:新建一个名为【测试.erm】的文件
    ②:按照格式,在里面随意添加你写的代码
    ③:你最好做一张方便测试的地图
    ④:打开WOG框架的游戏,载入测试地图
    这个时候,根据你写的内容来触发,看看能不能实现
    如果你的代码格式错了,会跳出错误弹框,关掉所有的弹框,游戏别关,回到【测试.erm】将你的代码修改一番
    回到游戏,点击系统→重新开始游戏,这个重开的新局会重新读取你写的【测试.erm】文件

    开头我应该说了,没有必要动手尝试,因为假如你乱写然后出错了,恐怕你是不知道错在哪里的,新手顶多能测试
    ZVSE
    !?BG;
    !!BU:V0;
    这个代码能够正常运行,在测试地图放一个怪然后打它,英雄施法然后自己就输了
    大概是这个感觉:
    截图.jpg


    好了,回到erm代码的规则理解
    本来,具有摸索能力的人,已经能够依靠上面所说的方法来逐步测试剩下所有的erm命令
    但是这里有几个问题:
    这是面向纯新手的教程,那些有编程基础的人经过了多年的思考历练掌握了顺藤摸瓜的本能,我却不能拿这来要求新手
    这个帮助文档有很多表意不清的地方,还有少许写错的地方
    比方说:
    表意不清:FU功能里面的P单词有一个例子新手怎么看都不会明白为什么结果是16,30;
    但是无论你尝试多少次结果都是16,30确凿无误*(但恐怕新手从根本上就不明白到底发生了什么……才是现实吧)
    写错的地方:中英版对比
    !!SS:XXXX;
    控制魔法参数 (见 格式 SP)

    !!SS#:XXXX;Change properties of spell # (see Format SP)
    你就是试到明年也不会知道错在什么地方

    不过翻译错是比较少见的了
    另外,翻译之初也不能要求翻译官对功能有完全的了解,所以很可能做翻译的为了赶时间只能进行字面的翻译
    而字面翻译也有可能导致表意模糊,让人捉摸不透到底是什么意思
    正是我考虑到翻译很难做到精确,所以我当初才会打开英文帮助文档对照理解,才发现了这个严重的格式错误


    好了,正式开始格式世界的理解之旅吧
    刚才也说了,文档中那些特殊符号中有设置&读取两种功能
    设置偏复杂,文档中有许多类型各异的提示需要理解
    读取虽然原理简单,但是涉及到变量,我也不能说,几句话就让你明白什么的,之后会以BU→V$来进行读取的讲解
    但是有一点可以确定,大致的步骤是个什么概念你们已经知道了

    首先,来进行设置的实例详解
    !!BF:XXXX;自定义一个战场并放置障碍物.

    M#1/#2/.../(/#12);在战场的某个位置放置一块石头
       #1 - 1 0...16位置
       #2 - 2
    17...33位置
       #3 - 3
    34...
    . ..
       #12 - 要放置的障碍物种类
    (0...90)

    触发条件!?我就不说了,每个接收器标签的开始都会有限制触发器的说明
    从这个例子来看,只是单纯的多参数*(所谓参数,在这里就是读取&设置),但是你们必须读懂说明才能知道参数究竟该填入什么
    这只能根据形象理解,也就是说#1表示第一行的0~16个位置,如果你将#1设置成3,那就表示第一行3号位,#2、#3以此类推
    但是,战场只有11行啊,所以这个#12也确实是特殊的,但是障碍物种类(0.....90)是什么意思?
    BF页面最下面有个表格,数字0~90分别代表了表格所展示的特殊障碍物

    我来点简单的,我要设置每行的第三个格子都防止一块石头(障碍物种类编号84),那么正确的格式就是:!!BF:M3/3/3/3/3/3/3/3/3/3/3/84;
    问题是,真的正确吗?这个功能也模糊不清,为什么我一定要每行都放东西?如果我不填写会怎么样?比如:!!BF:M3/3/////////3/84;
    还有就是,仔细看的话有个括号我没添加,所以是不是我应该写成这样:!!BF:M3/3/3/3/3/3/3/3/3/3/3(/84);  ?
    或者我的理解从根本上就是错误的?
    类似这种模糊不清的地方就只能发挥你们的想象自行测试了
    ******----------------------------------------------------------------------------------******
    继续
    !!BM #: XXXX;检查/设置/获取一个堆栈怪物的参数
       # - 堆栈的编号 (0...41).
    通常使用
    0...20 给玩家1 (0)21...41 给玩家21).

    C #1/ #2/ #3/ #4/ #5 ;施放魔法
       #1 - 魔法编号 (格式 SP)
       #2 - 施放位置
       #3 - 怪物的技能等级(0...3)
       #4 - 英雄(???)魔法力量(0...3)
       #5 - 检查目标怪物是否存在(存活)

    注意:
    参数5必须为1,这里所说的是检查在施法之前目标栈是否存在(不是空地),否则如果对一个空目标施法将造成冲突。如果是“复活”魔法则需要为0,这样才能够保证复活一个死去的单位

    这是战场上设置怪兽堆栈的接收器
    从开头可以看到检查/设置/获取”是说这个接收器类别拥有检查/设置/获取三种功能,分别由不同的单字母来实现
    其中,这个接收器与之前的不一样,它多了一个#,并做了说明:# - 堆栈的编号 (0...41). 通常使用
    0...20 给玩家1 (0)21...41 给玩家21).
    那么大概可以这么理解吧,每个玩家开始最多带7个部队,也就是7个堆栈,但是战场中可以召唤、镜像来增加部队
    每人可能最多只能增加到21个部队,但是0、1到底什么意思?没说明,只得看下去,发现:
    I $ ;怪物所属势力 (0:左, 1:右)
    大概明白了,不过0、1该怎么用还不是很清楚,放在不管
    现在已经读懂了!!BM #: XXXX;必须选择一个堆栈(部队),假设0把(左边第一个怪),那就是!!BM 0: XXXX;
    C君是让堆栈释放魔法的功能,#1/ #2/ #3/ #4/ #5 应该填写的内容范围在右边有详细说明,其中格式 SP会在右边列出魔法列表,数字分别代表对应的魔法
    但是,有这么几点是搞不懂的
    ①如果怪物没有这么魔法会怎么样?
    英雄(???)魔法力量(0...3) 这是什么啊!
    ③就算是怪物的技能等级(0...3),我只知道有基础 中级 高级,难道还有专家?还是说根本就不是我理解的意思?
    这些,都必须你们自己去测试了
    而其中,有这么几个参数不能乱填:
    #5 - 检查目标怪物是否存在(存活),
    #2 - 施放位置
    从释放位置来看,可能是空位置,你要技能放准,靠猜是不行的,所以你得获得堆栈的位置,那么你就要用到别的功能,找一找会发现:
    P $ ;把怪物放到战场的某个网格上

    虽然看说明怎么都不像是能读取的样子,但是前面的特殊符号确实是$,那么大概就是这个功能来读取怪物的位置了(读取方法以后再说,大致感受一下)
    通过这个P获得有怪物的网格位置,然后将这个数值填入#2就可以了大致代码如:!!BM 21: P $(右边的第一个怪);    正式代码应该是!!BM 21: P?y1; 这个感觉,也就是说,此处#2完全的替换成y1就是标准格式
    而#5就只能填1、0,根据魔法是不是复活来判断,相对简单
    感受一下:
    !!BM 21: P?y1;  获得目标的位置,将位置的数字存入临时变量y1
    !!BM 0: C15/ y1/ 2/ 2/ 1; 己方第一个怪物对地方第一个怪物释放魔法神箭,威力天知道,如果怪物没有魔法神箭这个技能会不会报错也是天知道
    唯有多测试才能弄清楚这种说明模糊的功能
    ***O***----------------------------------------------------------------------------------***O***
    ↑---设置的感觉差不多也就到这里了,由于一些模糊不清的说明,我们必须发挥想象力,问题可能会出在哪,可能这个功能和别的什么功能有关↓---那么再来看看读取吧
    符号 $ 以及 ?$ 都拥有读取的功能
    所有的读取都必须拿变量来记录,那么首先了解一下什么是变量
    从字面上理解,会变的量
    从结构上理解的话,它就获得一个特性,即是它的名字不变,但是性格变了,这有什么意义呢?
    举个更容易理解的例子:变量就是货车,你觉得货车有什么用,变量就有什么用,当然,变量并非只有这一种用法

    ERM常见的几个变量是
    z、字符串变量:字符串就是常说的文本,勉强可以理解为“一段文字”,其特点是无数学计算,例如:中国+7=? 这个“中国”就是字符串,而字符串也可以是“%……&”
    y、临时整数变量:整数学过数学的应该都知道,而临时则表示它不会存在很久,所以别指望用它记录,它通常被用来传递信息
    v、永久整数变量:基本同上,但是它永久存在与你的存档中,可以用来记录数据,形象来说,v就是移动银行

    来看看它们的具体格式:
    z1、z2、z3、
    y1、y2、y3、
    v1、v2、v3、
    它们就是这样用1、2、3、……、100等等来区分彼此

    接下来解释读取:
    所有的读取都是一个格式 —— ?变量名 →这用来表示将读取的信息存入变量,或者说将货物装进货车
    所以
    ?z1、?z2、?z3、
    ?y1、?y2、?y3、
    ?v1、?v2、?v3、
    看起来没有任何的区别

    以实例来讲解:
    !!BU:XXXX;设置/检查/获取战斗通用参数

    V$ 战斗立即结束.
    $ 胜利者 (0=右 (防守方), 1=左 (进攻方)).

    现在我就要来读取,将读取的信息存入y1
    首先摆好阵势:!!BU:V$;  $可读取,所以正式读取的格式为!!BU:V?y1; 这样一来,就将读取的信息存入了y1

    不过……
    有几个问题
    ①你能将美国存入一辆货车?不能,货车容量有限y可以存很大的整数,从说明中看,只会读取0,或者读取1,这不是问题
    ②你能将愉悦的心情存入一辆货车?不能,到底要怎么存我也不知道,也许可以存到日记里0&1都是整数,所以确实可以存入y1
    ③我们究竟是要读取什么啊?从说明来看是读取胜利者,读取后,如果y1=0,则防守方是胜利者,如果y1=1,则进攻方是胜利者
    ④一场战争还没有打完我们要怎么知道谁是胜利者?由此可见,时机是非常重要的,只有在战斗结束的时候,我们才知道谁是胜利者
    那该怎么办?必须解决④的问题不可,否则战斗还打得正酣呢,你突然来一句!!BU:V?y1;能知道才怪了
    *注意不管你会获得什么值,y1默认是0,所以你确实可以读取一个值,但是还在战斗的你应该知道,这个结果是假的

    【时机是很重要的】
    所以,首先应该想到的是!?,即触发器,由于BU只支持!?BG!?BR,去Triggers查一下就知道了
    !?BG;
    在战斗时当任意生物动作或英雄动作(施放魔法,逃跑或投降)时触发
    !?BG0 在动作发生触发 (
    !?BG)
    !?BG1
    在动作发生触发。

    !?BR;
    在战斗中每个回合触发。(第一回合触发两次)。

    好吧……看起来没有我想要的时机,没有哪个触发器是战斗结束的时候触发的,这个时候,你就只能在BU内部查找可能性了

    然后确实可以找到一个:
    C?$;检查战斗是否结束 (本回合)
       $=1
       $=0
    注意事项:
    命令C可以接在触发器BG1中或者后面.

    好吧,发挥一下你的想象力,该怎么办?
    已经不存在:
    !?战斗结束的时候
    !!检查战斗是否结束
    从根本上来看,战斗都结束了你还检查个猫……如果灵机一动的话,你就会想到,任何有可能导致战斗结束的动作后面紧跟着一个检查是否结束,倒是合情合理

    而且,不管怎么样,你都得通过触发器来执行
    从BG、BR中选择的话,不需要你灵机一动,只有BG有可能性
    至于那个BR:每个回合开始的时候,……,每个回合刚刚开始的时候,战斗是不可能结束的
    而BG的描述是:在战斗时当任意生物动作或英雄动作(施放魔法,逃跑或投降)时触发  ~~ 这就可以了,生物攻击、英雄施法,正好打死对方最后一个兵,然后战斗结束
    需要注意的是,!?BG0 & !?BG1的区别,很明显要动作执行完毕才会造成伤害啥的,因而推断使用BG1

    所以格式就这么写了:
    ZVSE
    !?BG1;         生物、英雄攻击施法后
    !!BU:C?y1;   检查战斗是否结束了,如果结束了,y1就=1,如果还没结束,y1就=0
    ---这里插一句,由于不是代码,所以不会切断触发器&接收器的连系
    !!BU&y1=1:V?y2; 如果战斗结束了,就获取胜利者,将胜利者信息存入y2
    ---继续插一句,&的意思是条件判断,读作:如果y1=1,那么就执行BU:V?y2(获得胜利者)
    !!IF&y2=7601623:M^我也不知道发生了什么!^;  IF的功能暂且不提,这里就是判断如果进攻方获得了胜利,就继续执行IF,告诉你一段信息
    ---必须抱歉的是,这里你们看到了诡异的数字7601623,而非我预先设想的1
    ---其实是这样的,ERM的功能还不完善,仅从说明文字中你们就很难理解这个功能怎么可能用于获得胜利者信息
    ---反正由于不完善的功能,这里的V确实不具备获得胜利者的功能
    ---最后一段代码就不了了之吧,但是大致的意思就是这样了,你们也会发现,既然不能读取,你还标记$作甚!
    空行

    这段代码是可以执行的,尽管看起来密密麻麻干扰很多

    到目前为止
    你们应该知道,ERM的摸索需要非常灵活的猜测,当然如果能有前辈整理出精确的结果,可以免去不少浪费时间的尝试
    目前,我推荐新手还是尝试MA功能会比较好,也就是修改生物数据,其他的接收器想试就试
    只是部分功能确实不好理解,也正如我举得这几个实例,没一个是简单直观的
    接下来我要教的就不是功能的摸索了,因为这个没有规律可循,到底怎么用纯凭说明&猜测+尝试
    其它简单的一点的接收器,如CA、CD也都可以试试

    下次要讲的东西,就是编程特有的逻辑表达了,可以说是ERM中唯一让人有编程这种感觉的接收器
    这几个接收器与其它接受器不同,与我刚才举得例子不同,它们都没有直接修改游戏的功能,但是和杠杆原理一样,能帮助你们更好的修改
    分别是FU、I/E、DO以及更加详细的变量介绍

    再次说明,不是我不讲那些乱七八糟的功能里,那些功能真的就是只要肯测试就能知道的功能,或者实在太含糊测试也不明白它在说什么
    我先把容易理解的部分讲完,剩下的东西之中,也有很多功能依赖于FU、I/E、DO,及更加正确的变量使用,砍柴还有段距离,继续磨刀吧
    *

    [ 本帖最后由 清蒸猫锅 于 2013-1-30 21:25 编辑 ]
  • TA的每日心情
    慵懒
    2019-8-17 09:46
  • 签到天数: 1158 天

    连续签到: 2 天

    [LV.10]圣龙

    2万

    回帖

    91万

    金币

    7

    精华

    论坛嘉宾

    守望论坛的稻草人

    Rank: 9Rank: 9Rank: 9

    积分
    87641

    社区QQ达人论坛守望者金牌裁判杰出贡献魅力之星TE联赛冠军

    发表于 2013-1-29 22:39:11 | 显示全部楼层
    继续下去,不要停,我必须承认我是首次看懂ERM教程了,以前的还真没看懂过。继续整理教程推荐二级精华以上!

    该用户从未签到

    379

    回帖

    1万

    金币

    1

    精华

    4级 Famous Hero

    Rank: 4

    积分
    2381

    退役版主

    发表于 2013-1-29 22:40:56 | 显示全部楼层
    原帖由 清蒸猫锅 于 2013-1-29 22:25 发表
    如题,只是面向纯小白的ERM教学作者本人我也是刚学不久啥也不熟悉,所以只教入门,看完想以我的方式深入学习的可以回帖反应

    【正式开始】
    我将连系ERM帮助 V2.81.chm 进行教学,帮助大家如何使用该文档
    不过首先 ...

    挺幽默!
    !!BU:XXXXX;要在!?BR;或!?BG;后的

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-1-29 22:41:56 | 显示全部楼层
    【辅助型接收器FU、DO、I/E、VR】从之前的“触发器”与“接收器”的机械组装中脱身暂缓
    这次讲到的辅助型接收器很特别,它们没有实际的修改能力
    但是它们拥有让你的组装更加精细化、简洁化、便利化的能力
    而且,这三个接收器对于毫无编程基础的新手而言,是看不懂的,从本质上就不同于一般的接收器,使用方法从根本上不同于积木的对接

    但在说明它们的使用方法之前,先介绍下一个简单的功能:
    !!IF:M^大家好,我是说明君!^;  这个功能就是弹出对话框,显示夹在^^之间的内容,总之这个环节要测试啥都依靠它了

    FU
    函数,这个取名很专业啊,而且它的说明也很让新手摸不着头脑 —— 什么叫虚拟触发器?
    以及,!?FU#; 这种和触发器一样的格式到底有什么意义?要知道FU根本就没有触发时机,如果不人为的调用它,它一辈子也不可能触发。
    它也就确实是必须调用的触发器,所以称作虚拟触发器吧?不过各位没有必要称之为触发器,为了避免混乱,还是直接叫它函数好了
    所谓函数,在各大变成语言中莫不是“功能模块”的定位,你或称它为工具,不过函数更像是加工厂,你交给他原料&配方,他就给你制作产品
    然而,函数也是一个空壳,正如帮助文档里面FU的内容看上去一大堆,其实少得可怜,只要理解了概念,它就并不是多么复杂的东西了

    FU使用方法
    建立函数:
    !?FU#;  这就是一个开始,表示你建立了函数,这个函数的功能全部都在紧接着的!!里面
    !!
    !!
    !!
    !!

    但是这个函数不会执行,除非你调用它
    复杂的不说,函数FU里面就两个实用的功能E&P
    !!FU:E;  是立即退出当前触发器,能够立即退出任何以!?开头的触发器,只要你将这个代码添加进去,轮到它就退出触发器,后面的!!就全部废了
    !!FU#:P;  这个就是执行函数,注意,只是执行#号函数而已,虽然还有些附加功能,暂且不提。

    那么,很明显了,FU只能通过P来执行,今后凡是用到函数,都是在某个地方编写!!FU#:P;  或者!#
    那么,这有什么意义呢?
    仅从目前我介绍的FU功能来看,也是有一定意义的
    FU可以提供便利,假如你全篇代码有很多重复的内容,比如:
    !!IF:M^我有个设想,版主帮我写一下!!^;
    !!IF:M^版主快来嘛!快来帮我啊!^;
    !!IF:M^我完全不会啊,版主帮我改一下啊!^;
    每次都要复制粘贴多累,假如有了FU
    !?FU233;
    !!IF:M^我有个设想,版主帮我写一下!!^;
    !!IF:M^版主快来嘛!快来帮我啊!^;
    !!IF:M^我完全不会啊,版主帮我改一下啊!^;


    之后你们就没有必要复制这么一大段话了,直接一句!!FU233:P; 就搞定了~~
    比如:
    !#!!FU233:P;  这样游戏开始的时候就会弹出这3个对话框。

    FU的高级应用
    下面介绍FU的另一个功能,其实在帮助文档的FU   ——   P 里面就有说明,只是我根本不觉得新手能明白是什么意思
    即:
    要获得参数请使用x# (#=1...16)语法
    它们可以被用在函数内的标志变量使用的任何地方。当你使用其他函数时(见示例),所有没有被设置参数都将保存


    总之我看的时候一片迷茫虽然迷茫的地方和不懂编程的人不太一样

    那么开始介绍吧
    函数FU是可以传递参数的,和之前说的那些参数没有本质区别,但是嘛……复杂的就不说了,FU函数的本体其实是:
    !!FU#:P$1/$2/$3/$4/$5/$6/$7/$8/$9/$10/$11/$12/$13/$14/$15/$16;
    只不过,后面的都可以忽略,如果你只用到2个参数,那就是
    !!FU#:P$1/$2;
    如果你要用到5个参数,那就是
    !!FU#:P$1/$2/$3/$4/$5;
    那些忽略掉的参数默认为0

    问题在于接受,那是有同样数量的x变量来进行接受:
    x1 对应 $1
    x2 对应 $2
    ……
    x16对应$16
    所以,如果我这么写:
    !!FU233:P3/16;
    这个233号函数的x1就是3,x2就是16

    来个实例:
    ZVSE
    !?FU11233;
    !!IF:M^x1=%X1,x2=%X2^;

    !#FU11233:P4/25;
    空行
    其结果应该是在载入地图的时候弹出1个对话框,显示: 截图.jpg
    至于这有什么用……各种方面都很有用,比如扳手可以开螺帽,扳手可以敲钉子,扳手还可以投掷出去打人
    总之为了避免混乱,暂且不深入讨论用法,进入下一个环节

    DO多次循环调用FU函数:这个说明很到位,也就是这个功能了
    DO是第二个可以调用FU的,也只能用来调用FU
    可能对于新手来说,循环这个概念很难理解,主要体现在:以怎样的方式循环 —— 直接查看帮助文档:
    !!DO #1/ #2/ #3/ #4: XXXX;多次循环触发FU函数:
    #1 函数的编号,
    #2 (x16)起始值
    #3 (x16)结束
    #4 步长
    先不解释,大家应该注意到了,这个DO只有一个单字母员工:
    P $/ $/ $...
    up to
    15#s.
    多次循环触发函数: P
    通过获得函数来使用x# (#=1...15)语句
    它们可用用作标准变量所使用的任何地方
    当你使用另外的功能时(见示例),所有未被设置的参数都将被继承

    也就是说,DO的格式永远都是!!DO #1/ #2/ #3/ #4: P $/ $/ $... ;
    其实和!!FU#:P; 是一样的,只是因为还包括了循环功能所以才写成这样这个格式可以这么读:
    循环执行#1号函数,从整数#2开始,到整数#3结束#,假设?代表现在值,循环的开始?=#2,每循环一次?=?+#4,当?大于#3的时候循环结束
    P的参数比FU的P少了一个,即x16,其实,这个x16就是?,也就是说,x16代表了现在值,P后面和FU的P一样就不解释了,需注意只有15个参数即x1~x15
    这个DO有什么用呢,和FU一样,用处挺多,不好介绍,也为了避免你们混乱,此处只举个简单的例子:
    假设你要将所有的兵种攻击力翻十倍,你觉得你得写多长的代码?SOD197个兵,代码至少197行吧,但如果你使用DO
    ZVSE
    !?FU11233;
    !!MA:Ax16/?y1;
    !!VRy1:Sy1*10;    VR 即变量,留在最后将,这里先用一下,我主要是演示同时改变所有的兵种攻击力翻十倍究竟需要多少代码
    !!MA:Ax16/y1;

    !#DO11233/0/196/1:P;
    空行
    效果如图:



    好了,进入下一个环节
    I/E
    如果就,否则 —— 这就是介绍了老实说我没有想过这个功能这么简陋……


    !!if&条件:;
    !!el:;
    !!en:;
    !!如果满足条件
    !!就执行这一系列工作
    !!哪一系列呢
    !!看你要执行多少行了
    !!否则
    !!执行另一个系列
    !!另一个系列是什么呢
    !!谁你便了
    !!结束

    I/E系列可以乱插入:
    !!if&条件:;
       !!if&条件:;
       !!el:;
          !!if&条件:;
          !!el:;
          !!en:;
       !!en:;
    !!el:;
       !!if&条件:;
          !!if&条件:;
          !!el:;
          !!en:;
       !!el:;
       !!en:;
    !!en:;

    意思应该很明显了,至于这个&条件究竟该怎么写,大多数时候是用来判断变量的值,所以介绍完变量你们也就知道该怎么写了
    好了,进入下一个环节

    VR变量
    由于之前介绍到了一些,想必变量的概念多多少少还是有的吧
    这里就要稍微详细一点介绍了

    VR是对于变量进行操作的接收器在ERM中,变量本身存在,这点和正规的编程语言不同
    那么,首先就介绍一下存在的所有变量:
    变量的种类和它们的用途
    所有的数字变量使用整数值且范围位于 -2147483647...+2147483647之间
    a 不是一个变量
    b 不是一个变量
    c 增加“今天”的日期值
    d 增加一个值
    e1..e100 小数临时变量,可以输入小数,且计算时以小数表示
    e-1...e-100  触发器的小数临时变量
    从f到t   快捷变量
    v1...v10000 标准变量
    w1...w100  英雄变量(对于每个英雄都一组)
    w101...w200英雄变量(对于每个英雄都一组),就像w1~100一样使用它们,除非是对于!!HT:W命令,你只能使用前100个。
    x1...x16 函数变量(对于每一个函数触发器都有一组)
    y1...y100 临时变量
    y-1...y-100  触发器临时变量
    z1...z1000 字符串变量(用于储存文本)
    z-1...z-10 字符串临时变量(用于储存文本)

    这一次的变量介绍也不打算告诉你们所有的变量种类究竟该怎么使用,用在哪个地方(本身我自己就不是太清楚)
    主要目的是告诉大家这个事情大概就是这样的

    好了,还记得我关于货车的类比么,这些不同类型的变量就是不同型号的货车,它们装运的货物不同
    更重要的是,它们的运输范围也不同,例如两点一线的货车,例如城内运输,例如国际运输
    这一次就拿最常用的变量:y 来结合VR说明一下

    【VR&y】
    关于VR,我并不打算介绍它所有的功能,也是只拿常用的介绍一下
    其中有这么几个单字母很常用:S……
    别吐槽我为什么只有S,因为用起来最简单也确实是最最常用的,偷懒神马的%……&*

    !!VR#1:S#2;    针对整数变量
    !!VR#1:S^#2^;  针对字符串变量
    #1填入对应的变量,#2填入变量的内容,填错了自然也就报错了

    差不多就是这个样子:
    !!VRy1:S12;                             设置临时变量y1的值为12
    !!VRz1:S^yj3klr哦哦噢!^;           设置字符串变量z1的值为 yj3klr哦哦噢!

    在字符串中插入整数:
    !!VRz1:S^yj3klr哦%Y1哦噢!^;    设置字符串的变量z1的值为 yj3klr哦12哦噢!   ,再次提醒,注意格式:%变量,变量的第一个字母要大写

    【变量的对比】
    =              等于>              大于
    <              小于
    >= or =>   大于等于
    <= or =<   小于等于
    <> or ><   不等于


    那么回到刚才&的话题,这里在帮助文档有解释:
    4、在一个语句中使用多个条件:
    当我们在一个命令中要使用多个条件时,需要将这些条件并列放到条件部分。格式从下:
    1、在条件部分的最开头用一个” & ”作为前缀;
    2、如果表示需要满足A和B条件,则用 ” / ” 并列,如果表示满足A或B条件,则用 ” | ” 并列;
    3、可以用前缀” | “代替前缀” & ”,然后在后面的条件中使用” / ”并列,这样表示以下的所有条件都是“或”的关系。


    拿!!IF:M^^;来举例
    ZVSE
    !?FU11233;
    !!VRy1:S1;
    !!VRy2:S2;
    !!IF:M^y1=%Y1,y2=%Y2^;          显示y1、y2的值
    !!IF&y1<y2:M^1***y1<y2***^;                                           当y1<y2的时候会弹出1号窗口
    !!IF&y1=1/y2=2:M^2***y1=1 and y2=2***^;                      当y1=1并且y2=2的时候会弹出2号窗口
    !!IF&y1=1|y2=2:M^3***y1=1 or y2=2***^;                         当y1=1或者y2=2的时候会弹出3号窗口
    !!IF|y1=1/y2=2/y1>y2:M^4***y1=1 or y2=2 or y1>y2***^; 当y1=1或者y2=2或者y1>y2的时候会弹出4号窗口
    !#FU11233:P;
    空行


    通过修改y1、y2的值,可以自行测试


    【变量的域】
    这是FU:P的示例1
    • !?FU2;
    • !!VRx2:Sx2+17;
    • !!VRx3:Sx1+17;
    • !?FU1;
    • !!FU2:P13/?y-1/?y-2;
    • !#IF:M^%Y-1,%Y-2^;
    • !#FU1:P;
    • !#IF:M^%Y-1,%Y-2^;
    其结果显示16,30,实在令人想不通

    首先,我读一遍
    首先是y-1,y-2这两个变量,查看之前贴出来的列表,y-1~y-100都是触发器临时变量
    这里的触发器临时变量和y1~y100域(即作用范围不同)不同,详细最后讨论
    然后
    !#IF:M^%Y-1,%Y-2^;  初始化弹出对话框,显示y-1、y-2的值
    !#FU1:P;                   初始化执行1号函数
    • !?FU1;                            1号函数
    • !!FU2:P13/?y-1/?y-2;     执行2号函数,参数x1=13 , x2=?y-1 , x3=?y-2
    • !?FU2;                            2号函数
    • !!VRx2:Sx2+17;              设置变量x2=x2+17=?y-1+17
    • !!VRx3:Sx1+17;              设置变量x3=x1+17=13+17

    !#IF:M^%Y-1,%Y-2^;    初始化弹出对话框,显示y-1、y-2的值

    弹出了2次对话框,第一次0,0,第二次16,30

    关于值的传递结果先不论,我得帮你们理清一下头绪,这到底是怎么传递的:
    在这一步中:
    • !?FU2;                            2号函数
    • !!VRx2:Sx2+17;              设置变量x2=x2+17=?y-1+17
    • !!VRx3:Sx1+17;              设置变量x3=x1+17=13+17


    FU2函数被调用,在此之前:
    • !?FU1;                            1号函数
    • !!FU2:P13/?y-1/?y-2;     执行2号函数,参数x1=13 , x2=?y-1 , x3=?y-2

    FU1函数里面并没有为y-1,y-2设置值,在次之前:
    !#IF:M^%Y-1,%Y-2^;  初始化弹出对话框,显示y-1、y-2的值
    !#FU1:P;                   初始化执行1号函数

    第一次弹出的对话框显示y-1,y-2的值为0,0,那么回到这一步:
    • !?FU2;                            2号函数
    • !!VRx2:Sx2+17;              设置变量x2=x2+17=?y-1+17
    • !!VRx3:Sx1+17;              设置变量x3=x1+17=13+17

    !#IF:M^%Y-1,%Y-2^;    初始化弹出对话框,显示y-1、y-2的值

    在FU2没有为y-1,y-2设置任何值的情况下,却由!#IF:M^%Y-1,%Y-2^;显示出了y-1,y-2的值为16,30

    这就说明,肯定有地方设置了y-1,y-2的值
    其实一开始就发现那个地方很奇怪了吧,为什么是?y-1,?y-2,而非y-1,y-2
    这也就是说,很久以前我们学会的读取?变量在此处生效了,是不是找到了$这个符号的感觉?
    我来进行一次读取过程的复述:
    • !?FU2;
    • !!VRx2:Sx2+17;
    • !!VRx3:Sx1+17;
    • !?FU1;
    • !!FU2:P13/?y-1/?y-2;
    • !#IF:M^%Y-1,%Y-2^;
    • !#FU1:P;
    • !#IF:M^%Y-1,%Y-2^;


    这之中,!!FU2:P13/?y-1/?y-2; 这一个过程并非是给FU2:P设置参数,而是读取参数
    准确的说,x1是设置13,而x2是读取值给y-1,x3是读取值给y-2
    在函数FU2中
    • !?FU2;
    • !!VRx2:Sx2+17;   这里用VR给x2设置的值x2+17被y-1读取了,可是x2就是y-1,而y-1在此处赋值之前从未被赋值过,默认应该是0
    • !!VRx3:Sx1+17;   这里用VR给x3设置的值13+17被y-2读取了

    也就是说,按照期待,我们应当是判断第二次弹窗内容为17,30,然而真正的结果是16,30,非常诡异

    从这里分析一下
    • !!VRx2:Sx2+17;              设置变量x2=x2+17=?y-1+17   按道理来讲,x2=x2+17 之中x2=?y-1应该是0,
    • 而这里?y-1+17却等于16,这就是说x2+17=16,所以x2=-1,而x2又对应?y-1,反应快的话就会发现:
    • 如果此处写的是?y-16,那么x2就是-16,如果此处写的是?y-5,那么x2就是-5
    • !!VRx3:Sx1+17;              设置变量x3=x1+17=13+17      按道理来讲,x3=30  这个值无误,在意料之内

    得出的结论是:
    !!FU2:P13/?y-1/?y-2; 此处的y-1,y-2不光会读取x2,x3,同时还会设置忽视掉?变量首字母之后剩下的数字给x2、x3
    这是ERM语言很不严谨的地方

    当然我要说的是,如果你们将通篇的y-1换成y1、y-2换成y2,那么两次弹窗的内容都将是0,0
    这正是由于y1的域仅存在于每次的触发器之中,而y-1的域则存在于所有的函数之间,所以y-1才能用来作为函数间的设置&读取

    【最后提一点Mods\WoG\Data\s中的erm文件的放置问题】
    这其实是很简单的族谱关系
    如果没有树,要怎么吃到树上的叶子?
    erm文件开头都是ZVSE,结尾都有空行,但是其内容其实可以相互穿插:假如你将两个erm文件的内容合并到同一个文件中*(保证不混杂)那是没区别的
    假如你在B.erm中编写了:
    • ZVSE
    • !?FU1;
    • !!FU2:P13/?y-1/?y-2;
    • !#IF:M^%Y-1,%Y-2^;
    • !#FU1:P;
    • !#IF:M^%Y-1,%Y-2^;

    在A.erm中编写了:
    • ZVSE
    • !?FU2;
    • !!VRx2:Sx2+17;
    • !!VRx3:Sx1+17;

    实际上和写在一起没区别,但是你要注意顺序,假如将刚才的内容于A、B两个文件中互换,你们就会发现弹窗为0,0,-1,-2
    也就是说,A的字母排序先于B,所以A先诞生到了这个世界上,请联想亚当与夏娃,如果上帝不给亚当造一个夏娃,Make Love是不成立的
    当然了,如果你给一个条件:
    即,亚当被造出来之后,一旦满足数年之后上帝造出了夏娃,再执行Make Love的话就不会弹出-1,-2了
    例如:
    A.erm
    ZVSE

    !?FU1;
    !!FU2:P13/?y-1/?y-2;
    !#IF:M^%Y-1,%Y-2^;
    !?PI;   (这个玩意类似于!#,只是要晚一点点,这个时候大部分erm的重要设置都读取完了,当然也包括例子中的FU2)
    !!FU1:P;
    !!IF:M^%Y-1,%Y-2^;


    B.erm
    ZVSE
    !?FU2;
    !!VRx2:Sx2+17;
    !!VRx3:Sx1+17;




    告一段落,看情况要不要再教吧没人

    [ 本帖最后由 清蒸猫锅 于 2013-2-1 20:44 编辑 ]

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-1-29 22:43:21 | 显示全部楼层
    原帖由 严弘 于 2013-1-29 22:40 发表

    挺幽默!
    !!BU:XXXXX;要在!?BR;或!?BG;后的
    哦,谢谢提醒,这就去修改一点点内容,当然我完全没有想要修改正确的意思
  • TA的每日心情
    开心
    2017-6-13 18:26
  • 签到天数: 188 天

    连续签到: 2 天

    [LV.7]血污怪

    481

    回帖

    1万

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    1881
    QQ
    发表于 2013-1-29 22:55:32 | 显示全部楼层
    好吧,我承认我这几天看了所有erm教程,只看懂了怎么修改兵种属性

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-1-30 16:49:32 | 显示全部楼层
    询问一下,5楼的东西有没有看混乱,混乱了我重写

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-2-1 20:23:31 | 显示全部楼层
    一些基本的基础已经更新完毕

    IF&有需求
    更新
    EL
    偷懒
    EN
  • TA的每日心情

    前天 18:17
  • 签到天数: 2640 天

    连续签到: 22 天

    [LV.Master]伴坛终老

    1万

    回帖

    16万

    金币

    0

    精华

    白银会员

    Rank: 5Rank: 5

    积分
    98594

    魅力之星

    QQ
    发表于 2013-2-1 22:10:52 | 显示全部楼层
    这文笔真心不错,可惜我们这个真是个游戏,而且是小语种游戏

    现在EXCEL有一本很火的书叫:别怕,其实EXCEL VBA其实很简单,里面的文笔,插图很是风趣,希望楼主继续下去。
    如果图文并茂,那真是可以出书卖钱了,可惜了没有群众基础
    该会员没有填写今日想说内容.

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-2-1 22:25:03 | 显示全部楼层
    原帖由 无心云 于 2013-2-1 22:10 发表
    这文笔真心不错,可惜我们这个真是个游戏,而且是小语种游戏

    现在EXCEL有一本很火的书叫:别怕,其实EXCEL VBA其实很简单,里面的文笔,插图很是风趣,希望楼主继续下去。
    如果图文并茂,那真是可以出书卖钱了, ...


    刚才看到有个VCMI工程,想学C++了
  • TA的每日心情
    开心
    2017-6-13 18:26
  • 签到天数: 188 天

    连续签到: 2 天

    [LV.7]血污怪

    481

    回帖

    1万

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    1881
    QQ
    发表于 2013-2-1 22:43:52 | 显示全部楼层
    我能简单理解为
    ZVSE开始
    !?后面接erm帮助里顶部的大符号
    !!后面接剩下所有小符号么?

    该用户从未签到

    96

    回帖

    1万

    金币

    0

    精华

    3级 Known Hero

    Rank: 3Rank: 3

    积分
    792
     楼主| 发表于 2013-2-1 23:16:24 | 显示全部楼层
    原帖由 张成凌 于 2013-2-1 22:43 发表
    我能简单理解为
    ZVSE开始
    !?后面接erm帮助里顶部的大符号
    !!后面接剩下所有小符号么?

    关于!?!!的问题,你再看仔细一点,我有说道可以简单的理解为!?后面接Triggers标签的内容,!!接MA、CA这类双字母标签的内容当然,不能随便接,在第二部分有详细的谈到

    [ 本帖最后由 清蒸猫锅 于 2013-2-1 23:17 编辑 ]
  • TA的每日心情
    开心
    2017-6-13 18:26
  • 签到天数: 188 天

    连续签到: 2 天

    [LV.7]血污怪

    481

    回帖

    1万

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    1881
    QQ
    发表于 2013-2-2 20:45:31 | 显示全部楼层
    最近重感冒,等年后再看咯
    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

    捐赠
    关注我们,英3Mod一网打尽!

    WoG中文站 ( 辽B2-20210485-10 )|辽公网安备 21128202000228 号

    GMT+8, 2024-12-23 02:05 , Processed in 3.347018 second(s), 33 queries , Gzip On, File On.

    Powered by Discuz! X3.4

    Copyright © 2004-2022, Beijing Second Sight Technology Co., LTD.

    快速回复 返回顶部 返回列表