断幺平和 发表于 2014-7-25 01:11:28

xyz新时代的开启,论帝国中的“变量”

本帖最后由 断幺平和 于 2014-7-25 04:00 编辑

前 言


      帝国时代II的地图编辑器,虽有其简单直观的优点,但在精细的设计中,也暴露出了很明显的缺陷。当大家已经能够熟练地驾驭编辑器的各项功能后,就会渐渐发现,单纯的依靠条件与效果的触发结构很难达成我们想要实现的高级效果。当大家想用帝国的编辑器实现自己的心中的创意时,往往囿于编辑器本身的简陋而变得束手无策,甚至不得不放弃原有的想法。

   举个例子,在很长时间内,对于单位的生命值以及攻击力数值的检测和运算都被归类为帝国II编辑器“不可能完成的任务”。甚至要做一个简单的杀敌升级系统都会难倒不少新人制作者。然而许多效果不能轻易实现的原因,归根到底是由于帝国编辑器的一个非常致命的缺陷——变量系统。



    何谓变量?变量就是一个在游戏中能够被多次被"更改","运算","检测”的数字。最简单常见的如玩家的木材食物黄金石头,单位的生命值攻击力护甲速度射程等等,进一步的包括游戏中被隐藏的资源,如杀敌数,杀敌比率,人口上限,建造速率等等。然而在帝国II的编辑器中,这些变量并没有办法真正的为玩家当作变量所使用。例如一个很简单的概念:假定RPG的主角的攻击力为变量x,在游戏中理应可以对x进行多次“设定(重新指定攻击力)”、“运算(攻击力加减乘除)”以及“检测(获取当前攻击力的数值)”甚至在交谈语句中输出“<RED>当前的攻击力为x”。然而我们发现,在目前的编辑器功能中,我们仅仅可以对攻击力进行加减运算,其他的功能完全无从谈起。


   正如上文所说,因为功能的缺陷,许多我们想要实现的效果都遭到了限制。但是制作者们的智慧是无穷的,面对一个十分难以使用的工具,他们发挥了自己的才智试图克服这些困难,他们试图通过各种巧妙的方法变相的实现和达成一些编辑器本身无法达成的功能,这个过程已经持续了十余年并仍将继续下去。在过去的日子里,那些充满智慧的制作者们为我们留下了许多叹为观止的研究成果,他们在游戏中运用数学理论,模拟二进制运算,在十年前就已经试图攻破变量功能的缺陷。然而仍有许多功能和效果缺乏有效的方法去破解,直到近期帝国版本的更新才见到转机。而如今,综合最新的工具和前辈的智慧,我们已经可以攻破和实现大部分游戏内的变量功能;以往帝国时代编辑器的功能,将在今后被大幅度的扩展和提升。下面,就让我们一步一步来揭开新功能的奥秘,并一同来实现那些曾经的“不可能完成的任务”。


断幺平和 发表于 2014-7-25 02:10:12

一、编辑器中的“数”
对编辑器有所了解的朋友们都知道,在编辑器中进行设计时,经常会碰到让设计者输入数字的文本框。
例如:
或者是:
亦或是:




每个输入数字的地方,都是一次对游戏内部数值的更改。这些数值只经过一次设定便被确定了下来,不可以再次更改。如“初始资源”、“定时器”、“区域内的物件数量的条件”等。并且我们在输入数字时,只能输入确定的值,也就是只能设定为“常数”。我们只可以选择“进贡9999黄金”,但是不能选择“进贡和玩家石头数量相等的黄金”,也不能设置条件为“区域内有玩家人口数目一半的单位”。这便是编辑器功能的局限之处,也是造成麻烦的根源所在。


那么,如果我们不满足只能设定常数的局限,想要对游戏内的数值进行更灵活的更改时,我们就需要绕路用其他办法来变相达成目的。


在将绕路的方法之前,我们先来看看这些数值之间的区别,以便更好的了解它们,并来寻找突破口。



我们这里将帝国里的数分为三类:


首先是我们最熟悉的资源类数值,也是设计者们在编辑触发系统时最常用到的数值,因为这些数值相对来说功能比较完善,资源可以通过“进贡”效果来增加的减少,亦可以通过“堆积资源”的条件来检测和判定,虽然依旧是能通过常数来设定每一次的数值,但是资源数值拥有“可运算”且“可检测”的特性,这是编辑器中十分少见的,再加上固定显示在资源栏中的四种资源“木食金石”还可以随时被玩家直观的得知,这类数值的功能相对来说是最完整的。同样的数值还有“单位数量”,可以通过“建立物件”和“摧毁/移除/损坏物件”的效果来增减,也可以通过“区域内的单位”和“拥有单位”的条件来检测,并且在条件允许的情况下也可以直观的展示在玩家的屏幕上,这点和资源类数值十分相近。这一类的数值经常被设计者们所利用来达成各种效果,例如用黄金来做RPG战役中的金钱系统,利用角落里建立的单位来检测任务进度或是充当计数器,本质上来说,是因为这类资源运用起来相对方便。


其次是诸如最大生命值、当前生命值、攻击力、护甲、射程、速度等单位能力数值。这些数值可以通过“改变生命值/攻击力”等一系列效果来进行增减,即“可运算”,但是却没办法运用编辑器中的条件来进行检测,即“不能检测”。这些数值在战役设计中很难作为功能性数值来进行运用,往往都只是尽到自己的本职而已,增加攻击力就是增加攻击力,不会有人用单位攻击力的高低来代表RPG中玩家的金钱,因为设计者无从得知玩家在何时何地究竟有多少金钱(攻击力),虽然这些数值在编辑器中也可以通过一些巧妙的办法得以粗略的检测,例如用“攻击-护甲=生命值减少”“最大生命值-当前生命值=僧侣治疗量X时间”等方法来估算,但都不如上面的资源和单位数量那么方便和准确。


最后一类也就是那些既“不可运算”又“不能检测”的数值了,如定时器的长短,显示信息的位置等等,这些数值没办法被我们加以利用,严格来说,它们不在我们今天的讨论范围之内。


这里,我们给出如前言所述的定义,将前两类数值定义为帝国中的变量,而“不可运算”且“不能检测”的数值在现有的编辑器条件下则不被定义为变量。在我们想要进行更灵活的数值设定时,将尽量采取方法通过变量的“运算”和“检测”来达成我们的设计目的。

断幺平和 发表于 2014-7-25 02:48:30

本帖最后由 断幺平和 于 2014-7-25 04:03 编辑

二、变量的运算和检测


既然我们把可以运算和检测,以及一些只能运算却很难检测的数值定义为变量,那么这些变量究竟要如何进行运算和检测呢?这里我们也可以详细的分析一下。


首先,在编辑器中可以运算的变量只能实现加减运算,如资源的相互进贡,增加攻击力与增加负攻击力等。对于乘、除、百分比、取余等运算,在编辑器中需要一些技巧方能实现。而这些技巧,在十年前便已经被陆续的发现和整理了出来。例如大智发现的按百分比改变单位的生命值,以及单一触发瞬间根据生命上限补血,但这些也只是巧妙的利用编辑器内预置功能而实现的,并非真正意义上的实现了变量的运算。


然而,在Userpatch的新AI脚本出现后,事情就有了很大的改变,相信大家也都看过yty君的UserPatch1.3脚本编写参考,其中就介绍了Up的新增AI语句中有个名叫“操作类型符”的新概念:



类型操作符
c: const, 常数。
g: goal, 目标。
s: sn, 战略数字。



新AI中将数值分为三类,c为常数,就像我们在编辑器文本框里填入的那些数字一样。g为目标,说白了就是AI中的变量,可以被多次设定数值,可以做运算,可以被检测。s是战略数值,也就是有着默认数值的常数,可以和c归为一类。


根据操作类型符的不同,即数值类型的不同,新AI脚本又引入了关于运算的新概念。现在,我们在AI脚本中可以使用数学运算符了:



数学运算符
由c:, g:, s:后接=, +, -, *, /, mod, min, max, neg, z/, %*, %/组成。



这也就是说,我们现在编写AI语句,“加减乘除小括号”什么的都可以直接用上了,同时还有更多的功能,如=是直接设定数值,mod为取余,min和max是取最大最小,neg是取相反数,z/是整除,百分比的乘除法也可以使用了。


也就是说,如果我们可以把上面说的那些变量数值都放进AI中处理,那么困扰我们很久的数值运算就都不再是问题了。我可以在AI中得到单位的生命值的百分之三十的数值,可以知道玩家黄金数量和石头数量的比值是多少等等等等。


但是在这之前我们还要解决一个问题,就是如何把这些变量输入到AI中去,换句话说,就是如何检测这些变量的数值呢?


我们上面说过,在编辑器中,类似于生命值攻击力等等的数值是很难检测的,即便是可以检测的数值如资源和单位数量,检测的效果也并不理想。比如在编辑器中,我们检测玩家的木材数量,只能检测木材数量是否大于等于(使用堆积资源条件)或者小于(使用堆积资源的逆向条件或者三联逆向触发)某个数值,若我想检测木材数量不等于某个数值,或者恰好等于某个数值,则需要更复杂的触发组合才可以做到。单位数量的检测问题就更大了,区域内的数量大于或小于,总共拥有的数量大于或小于,这些条件中所能设定的参数太少,导致有时需要检测某不定区域内某种特定的单位数量时设计者会无从下手。然而这些问题,也在AI脚本进化后开始变得容易解决了。


大家不妨先看一下TT君的战役制作新时代——翔鹰Z系列 新AI效果示例,其中利用AI语句,对单位的生命值、攻击力等等数值都可以进行精确的检测了。这主要归功于新AI语句中引入的比较运算符的概念:




比较运算符
由c:, g:, s:后接>, >=, <, <=, ==(等于), !=(不等于)组成。其中c:可以忽略不写。



与数学运算符类似,我们可以将AI中的常数和变量像编程序一样来任意检测了,甚至可以通过AI中的变量来存储这些数值,并在显示聊天信息中显示出来。并且在Up新AI语句的说明中,有这样一句话:
UserPatch 1.3相对于1.0c的全局改进
•所有使用>, >=, <, <=, ==, !=来执行数据比较的事实现在都支持比较运算符。
也就是说,原本的AI语句中那些可以用来进行比较的事实语句,如今都可以用来检测新AI中的各种变量了!
相信有了这些工具的支持,曾经在简陋编辑器中为了检测单位生命值而冥思苦想的老一辈设计者们也可以释怀了吧。





断幺平和 发表于 2014-7-25 03:40:31

三、变量的换算



在介绍完了变量的运算与检测之后,大家如果深入去研究一下,可能会发现一个严重的问题。即在AI语句中,虽然能够很方便的对变量进行检测和运算,但是却很难对变量做出改变,例如无法在AI中为单位增加攻击力。然而对变量的改变在编辑器中很容易做到,只需要用到一些触发效果即可,但是却如同上面所说,缺乏对变量有效的运算和检测。


那么,如果要想完成一整套对变量的操作,就需要同时运用AI语句和地图编辑器,让两者擅长的功能进行一个互补,便可以达成我们想要的效果了。但是两者的配合需要一个媒介,变量在编辑器和AI中的传递也需要一个媒介才能操作。大家不妨考虑一下,想要让AI中计算好的变量传递会编辑器中储存,用什么做为媒介是最好的呢?


首先这个媒介必须在两个环境下都能很灵活又可靠的被操作,都能够完成变量最基本的运算和检测。其次是这个媒介必须有足够的传递速度,最好能在最短的时间内把数值准确无误的传递过来。最后便是需要这个媒介最好能够直观一些,方便被设计者们发现传递中的问题并进行修正。


说到这里估计大家也猜到答案了,同时符合这些条件的媒介只有一个——资源。


如上所述,资源和单位数量是编辑器里唯二可以被灵活操作的变量,且都很直观。然而单位数量在变量的传递速度上过慢而且容易出现误差,这点资源类变量完全占据优势,所以,我们会选择资源作为AI和编辑器中变量传递的媒介。


如何理解这个传递媒介呢?笔者认为可以理解为一种货币,也就是说,当我们需要操作一个变量时,先用AI语句检测它,并且在AI中运算好,再把它换算成标准化的货币,即资源,然后回到编辑器中根据资源的数量,把货币换回成需要操作的变量并进行最终更改。


下面我们通过一个例子来具体的说明。


例如我们现在想要做一个效果,让一个单位的最大生命值增加35%,单位的原始最大生命值未知(可能在游戏中研发了科技或者通过其他任务和物品增加了生命值)。


首先我们需要确定,在编辑器中是肯定无法准确检测单位目前的最大生命值的。所以我们需要用到AI来检测。参考TT君的教程,我们在AI中输入语句:



(defconst x 101); 定义一个名叫“x”的变量来储存单位的最大生命值,我们定义他的编号为101。
(defrule
          (true) ;无条件直接执行
=>
          (up-set-target-by-id c: 2) ; 将地图上ID为2的单位设置为要读取数据的单位。
          (up-get-object-data 10 x);读取指定单位的最大生命值[内部序号为10],并储存在x变量中。
          (up-chat-data-to-all "您目前的最大生命值是 %d 点" g: x)    ; 输出x值。
          (up-modify-goal x c:%* 35) ;调用运算动作,将x内的数值乘以35%,即需要增加的最大生命值。
          (disable-self) ; 关闭规则,不循环。
)


至此,单位需要增加的最大生命值已经被计算出来了,但是我们必须依靠地图编辑器中增加最大生命值的触发效果才能改变单位的生命值。那么这个计算好的数值如何返回给编辑器中呢?那个增加最大生命值的效果里,输入数值的文本框只能输入常数,要如何才能把这个只有AI知道的数值输入进去呢?


让我们一步一步来。


首先,将AI计算出的数值换算成我们的标准货币媒介——资源,这里以电脑玩家的黄金为例来进行换算。


在进行换算之前,希望大家能够先看一下骑士不怕长枪在十年前发布的一篇关于“数的分解”的教程——数据处理与变量。


什么,你说看不懂…?唔,我们挑出重点,并且修复一下错误:



数的分解:
      如果有100黄金,要换成100木材,用触发如何解决呢?一般来说,我们会建100个触发,条件是“拥有1金” “拥有2金” “拥有3金”……但是,这种结构的触发系统在执行时只有一个触发启动。能不能有一个系统的利用率较高呢?
    于是,就要用到数的分解。其实,我们可以设定:
[条件“拥有64金”效果“除去64金”“增加64木”]
[条件“拥有32金”效果“除去32金”“增加32木”]
[条件“拥有16金”效果“除去16金”“增加16木”]
[条件“拥有8金”效果“除去8金”“增加8木”]
[条件“拥有4金”效果“除去4金”“增加4木”]
[条件“拥有2金”效果“除去2金”“增加2木”]
[条件“拥有1金”效果“除去1金”“增加1木”]
因为1、2、4、8、16、32、64这几个数组合相加可以精确表达1~127内所有的数值。触发由上向下运行,可以在一秒钟之内将资源转换完成。



有了这个知识作为基础,我们这里只是稍微变通一下,在AI里用x点最大生命值兑换成x点黄金。语句如下:



(defrule
    (up-compare-goal x >= 64) ;如果x的值大于等于64,相当于拥有64最大生命值。
=>
    (cc-add-resource gold 64) ;电脑玩家作弊增加64黄金。
    (up-modify-goal x c:- 64) ;x的值减少64,下面的语句都是一样的,一直做到1。
)
(defrule
    (up-compare-goal x >= 32)
=>
    (cc-add-resource gold 32)
    (up-modify-goal x c:- 32)
)


(defrule
    (up-compare-goal x >= 16)
=>
    (cc-add-resource gold 16)
    (up-modify-goal x c:- 16)
)


(defrule
    (up-compare-goal x >= 8)
=>
    (cc-add-resource gold 8)
    (up-modify-goal x c:- 8)
)


(defrule
    (up-compare-goal x >= 4)
=>
    (cc-add-resource gold 4)
    (up-modify-goal x c:- 4)
)


(defrule
    (up-compare-goal x >= 2)
=>
    (cc-add-resource gold 2)
    (up-modify-goal x c:- 2)
)


(defrule
    (up-compare-goal x >= 1)
=>
    (cc-add-resource gold 1)
    (up-modify-goal x c:- 1)
)





这样…我们便利用AI语句,在AI中将计算好的数值在一瞬间换算成了电脑玩家黄金。



接下来,就是编辑器中的工作了。依旧是按照这个思路来做,把货币媒介黄金换算成我们需要改变的生命值吧!



如果电脑玩家有64黄金——>增加玩家1单位64生命值,减少电脑玩家64黄金。
如果电脑玩家有32黄金——>增加玩家1单位32生命值,减少电脑玩家32黄金。
如果电脑玩家有16黄金——>增加玩家1单位16生命值,减少电脑玩家16黄金。
如果电脑玩家有8黄金——>增加玩家1单位8生命值,减少电脑玩家8黄金。
如果电脑玩家有4黄金——>增加玩家1单位4生命值,减少电脑玩家4黄金。
如果电脑玩家有2黄金——>增加玩家1单位2生命值,减少电脑玩家2黄金。
如果电脑玩家有1黄金——>增加玩家1单位1生命值,减少电脑玩家1黄金。





大功告成。


虽然看起来很复杂,但细心的你肯定会发现,所有的AI语句都可以通过复制粘贴改改数值参数直接使用,甚至触发都可以用触发工作室来复制,每个改改数值就行了。


这便是利用骑士不怕长枪的数的分解技术来实现的变量换算。

断幺平和 发表于 2014-7-25 03:58:05

本帖最后由 断幺平和 于 2014-7-25 04:08 编辑

四、思路的拓展


上面介绍的例子,从变量的检测、运算、换算、更改,一系列的过程都是放之四海皆准的。不仅仅是最大生命值的转换,任何两种甚至多种变量的换算和组合都可能会成为非常高端的效果。但是所有的效果的思路都是一样的:用AI检测变量,换算成资源,用编辑器更改变量。


那么,AI能够检测的变量总共有哪些呢?根据yty和TT的帖子,我们可以总结出如下的结果:


首先,AI中检测变量的主要语句有:



up-get-player-fact
语法
up-get-player-fact (in)(player)玩家 (in)(const)事实编号 (in)(const)参数 (out)(goal)数据
功能
读取给定玩家给定事实的值,存储在一个目标中。本命令可作为事实或行动使用。为更好性能考虑,请尽可能使用一条或多条up-get-fact系列的直接命令。
示例
1. 获取玩家2的村民人口值,存储到gl-data中。
(defconst gl-data 101)
(defrule
      (true)
=>
      (up-get-player-fact 2 civilian-population 0 gl-data)
)




up-get-object-data
语法
up-get-object-data (in)(const)物件数据 (out)(goal)数据
功能
获取选定的目标物件的特定信息。
示例
1. 获取目标物件的类别信息。
(defconst gl-data 100)
(defrule
      (true)
=>
      (up-get-object-data object-data-class gl-data)
)


up-get-point
语法
up-get-point (in)(const)位置类型 (out)(goal)点
功能
读取特定的点坐标信息,存储到表示点的目标对中。命令会写入两个连续编号的命令对中,合法目标编号范围为41至510。如果获取失败,会返回(-1,-1)。
示例
1. 获取地图中心的位置。
(defconst gl-point-x 100)
(defconst gl-point-y 101)
(defrule
      (true)
=>
      (up-get-point position-center gl-point-x)
)
2. 获取目标玩家的位置。
(defconst gl-point-x 100)
(defconst gl-point-y 101)
(defrule
      (true)
=>
      (up-get-point position-target gl-point-x)
)



其中,事实编号包括:



事实编号常数
(defconst game-time 0) 游戏时间
(defconst population-cap 1) 人口上限
(defconst population-headroom 2) 人口空间
(defconst housing-headroom 3) 住房空间
(defconst idle-farm-count 4) 废弃农田数
(defconst food-amount 5) 食物数
(defconst wood-amount 6) 木材数
(defconst stone-amount 7) 石头数
(defconst gold-amount 8) 黄金数
(defconst escrow-amount 9) 储备资源数
(defconst commodity-buying-price 10) 购买商品价格
(defconst commodity-selling-price 11) 卖出商品价格
(defconst dropsite-min-distance 12) 资源放置点最小距离
(defconst soldier-count 13) 士兵数
(defconst attack-soldier-count 14) 进攻士兵数
(defconst defend-soldier-count 15) 防御士兵数
(defconst warboat-count 16) 战船数
(defconst attack-warboat-count 17) 进攻战船数
(defconst defend-warboat-count 18) 防御战船数
(defconst current-age 19) 当前时代
(defconst current-score 20) 当前分数
(defconst civilization 21) 民族
(defconst player-number 22) 玩家编号
(defconst player-in-game 23) 玩家在游戏中
(defconst unit-count 24) 单位数
(defconst unit-type-count 25) 某类单位数
(defconst unit-type-count-total 26) 某类单位总数
(defconst building-count 27) 建筑数
(defconst building-type-count 28) 某类建筑数
(defconst building-type-count-total 29) 某类建筑总数
(defconst population 30) 人口
(defconst military-population 31) 军事人口
(defconst civilian-population 32) 经济人口
(defconst random-number 33) 随机数
(defconst resource-amount 34) 资源数量
(defconst player-distance 35) 玩家间距
(defconst allied-goal 36) 同盟目标
(defconst allied-sn 37) 同盟战略数字
(defconst resource-percent 38) 资源数量的100倍
(defconst enemy-buildings-in-town 39) 城中敌人建筑数
(defconst enemy-units-in-town 40) 城中敌人单位数
(defconst enemy-villagers-in-town 41) 城中敌人村民数
(defconst players-in-game 42) 玩家数
(defconst defender-count 43) 防御者数
(defconst building-type-in-town 44) 城中某类建筑数
(defconst unit-type-in-town 45) 城中某类单位数
(defconst villager-type-in-town 46) 城中某类村民数
(defconst gaia-type-count 47) 某类自然单位数
(defconst gaia-type-count-total 48) 某类自然单位总数
(defconst cc-gaia-type-count 49) 全图某类自然单位数



物件数据包括(注意,不含单位攻击力,即AI不能检测单位的攻击力):

物件数据常数
(defconst object-data-id 0) 编号
(defconst object-data-type 1) 类型
(defconst object-data-class 2) 类别
(defconst object-data-category 3) 分类
(defconst object-data-cmdid 4) 命令编号
(defconst object-data-action 5) 行动编号
(defconst object-data-order 6) 执行编号
(defconst object-data-target 7) 目标
(defconst object-data-point-x 8) 点横坐标
(defconst object-data-point-y 9) 点纵坐标
(defconst object-data-hitpoints 10) 生命值
(defconst object-data-maxhp 11) 最大生命值
(defconst object-data-range 12) 射程
(defconst object-data-speed 13) 速度
(defconst object-data-dropsite 14) 资源放置点
(defconst object-data-resource 15) 资源
(defconst object-data-carry 16) 携带资源
(defconst object-data-garrisoned 17) 驻扎
(defconst object-data-garrison-count 18) 驻扎单位数
(defconst object-data-status 19) 状态


同时,编辑器能够改变的变量又有哪些呢?

最大生命值
当前生命值
攻击力
护甲
速度
射程

以及百余种资源参数



这庞大的数据之中,任意的组合都可以擦出意想不到的火花…!
试想,你可以通过变量操作的方法,做出以下效果:

玩家英雄增加已损失生命值13%的护甲

每当最大生命值是7的倍数时,英雄的速度加倍

boss距离主角越近,攻击力越高
农民携带的资源越多速度越慢
王国会每隔十分钟向玩家控制的村庄征收30%各项资源的赋税
人口越多,玩家的建造速度越快
敌人城镇内的村民越多,敌人的僧侣治疗速度越快
等等等等…


看到这里,大家应该已经想到更多更多的创意了吧!?这便是变量操作的神奇之处。
那么,想必类似这个帖子的问题,大家也应该可以解决了吧:https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=37775



断幺平和 发表于 2014-7-25 04:06:09

五、变量效果的实例教程
教程解说:
https://v.youku.com/v_show/id_XNzQ4MTY0NDk2.html


https://v.youku.com/v_show/id_XNzQ4MTY0NDk2.html


实例教程:待添加





Howerds 发表于 2014-7-25 09:04:14

前排学习!

我了个丢丢 发表于 2014-7-25 10:48:22

本帖最后由 我了个丢丢 于 2014-7-25 16:09 编辑

不明觉厉啊,断幺再次出现后不仅仅在打局,在战役方面都颇有造诣…………论坛又多了一位大神……恩恩{:155:}

拔山盖世 发表于 2014-7-25 12:09:07

出视频有了实例以后会更好学一些吧,前面的教程内容看了以后略感生涩,出了视频以后就可以好好熟悉熟悉了

春田一九零三 发表于 2014-7-25 12:38:49

语法部分看得有点不太明白。。。可能要实际动手试试才知道。。。
已经最好的用处就是检测生命值吧。。这个目前为止触发无法实现。。。
期待各种BOSS狂暴化的战役了{:149:}

qs 发表于 2014-7-25 12:57:27

我勒个去,战役制作宝典特级版内容

六文丿鱼丸 发表于 2014-7-25 15:24:24

这边的数据变量处理看完瞬间懂了~~~~

(up-chat-data-to-all "您目前的最大生命值是 %d 点" g: x)    ; 输出x值

不太明白%d的意思

条顿武士 发表于 2014-7-25 16:37:39

Tak_小源 发表于 2014-7-25 15:24
这边的数据变量处理看完瞬间懂了~~~~

(up-chat-data-to-all "您目前的最大生命值是 %d 点" g: x)    ;...

啊啊啊,就是那个百年奇观bug的语句格式呀。%d是占位符,代表字符串中的一个整数,先用%d占个位置,最后再说明是哪个整数。

野风车 发表于 2014-7-25 16:52:38

条顿武士 发表于 2014-7-25 16:37
啊啊啊,就是那个百年奇观bug的语句格式呀。%d是占位符,代表字符串中的一个整数,先用%d占个位置,最后 ...
%d应该是表示输出格式,表示以十进制形式输出整数吧。不知道这里,用%o与%x可以吗?

铁血帝国战士 发表于 2014-7-25 17:54:22

{:155:}
不错的文啊,分析了很多。
好贴,建议加精!

☆狂龙☆ 发表于 2014-7-25 20:10:23

大赞!战役的变革啊!

逝却莘殇 发表于 2014-7-25 22:55:19

好吧,等了好久终于有了这个教程,可惜看不懂

闭眼的撒加 发表于 2014-7-28 14:38:24

不明觉厉赞一个

三成家家喵 发表于 2014-7-30 11:39:28

嗯,比起1月份那贴又做了许多深入的研究和演练么
不过上手难度还是很大......
但是实现已经是可能的了

关于货币媒介,是指这样一个过程么:
首先用AI语句检测标的数值,然后同样用AI语句以这个数值进贡黄金给某玩家
然后编辑器里设置触发,按2^x的那个组合来监视某玩家的黄金量,并不断消去以及实现一次对应效果

断幺平和 发表于 2014-7-30 22:44:05

教程更新
页: [1] 2
查看完整版本: xyz新时代的开启,论帝国中的“变量”