本帖最后由 断幺平和 于 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
|