翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 1380|回复: 11

[教程] DUC翻译教程(机翻)

[复制链接]

14

主题

0

精华

1165

积分

伯爵

耕战
100
鹰币
320
天龙币
0
回帖
30
附庸关系0
 楼主| 发表于 2020-5-12 12:40:38 | 显示全部楼层 |阅读模式
本教程机翻自 Enmipho's Introduction to DUC
(直接访问不了,可能需要挂梯子)

这是2020年8月29日下载的镜像↓


newtonerdai 2020.8.29 优化排版+部分补充



指派单位控制(DUC, Direct Unit Control)是Userpatch 1.5中增加的一个功能,它允许你对AI的单位和建筑发出特定的命令,就像人类玩家点选控制自己的单位一样。



IDs和列表
首先要了解的是地图上的每个单位都有一个唯一的地图ID。要使用DUC选择一个单位,你需要告诉DUC你想要的单位ID。如何找到ID呢?UserPatch为我们提供了两个列表。我们可以告诉游戏去寻找特定的单位,当它找到它们时便会将它们的id放到列表中。这些列表称为本地列表和远程列表。本地列表包含属于我们自己的单位的id。它可以容纳240个id。远程列表可以保存任何玩家单位的id——我们自己的,我们的盟友和敌人的,甚至是盖亚的。远程列表一次最多可以容纳40个id。

当我们想要查找关于我们单位的信息或给他们指派任务时,我们使用本地列表。我们使用远程列表来查找任何单位的信息,或者使它成为我们给自己单位下的命令的目标。举个例子,如果我们玩游戏,我们希望我们所有的斥候攻击敌人的奇观,我们需要得到我们斥候ID 存入本地列表中(因为这是我们想指派的单位)和敌人的奇观的ID存入我们的远程列表(因为这是我们命令要攻击的目标。)如果我们是保护奇观并想要修复它的玩家,我们需要在本地列表中获取我们的村民ID,而在远程列表中获取我们的奇迹ID。在这种情况下,奇观是我们自己的单位,我们也使用远程列表,因为它是我们所给出的命令的目标。




第一个例子:本地搜索和目标点使用
:选择侦察兵并将其移动到地图的中间。我们要做的第一件事是找到侦察兵的ID。因为侦察兵是我们自己的单位,我们正在搜索它并给它一个指令,把它的ID放在本地列表中

我们要做的第一件事就是弄清楚我们要找什么样的单位。根据我们在游戏中选择的民族 分为有马民族和无马民族 我们在标准游戏中开始的侦察单位可以是骑兵侦察单位或者鹰侦察单位。定义民族该有什么类型的侦察单位

#load-if-defined AZTEC-CIV
    (defconst scout-type -267)          ;阿兹特克,印加,玛雅 拥有Eagle warrior line 鹰斥候
#else
    #load-if-defined INCAN-CIV
        (defconst scout-type -267)
    #else
        #load-if-defined MAYAN-CIV
            (defconst scout-type -267)
        #else
            (defconst scout-type -286)  ;其他民族拥有Scout cavalry line 斥候
        #end-if
    #end-if
#end-if



上面scout-type-XXX是classID,代表单位的整条生产线ID。民兵升级为装甲步兵,搜索民兵ID将不会再找到你的单位,因为他们不再是民兵了。搜索民兵线,-296,可以找到该单位类型升级之前和之后的单位


(defconst gl-state-1 100)       ;用于保存本地搜索总数
(defconst gl-state-2 101)       ;用于保存本地搜索中列表多少项存有对象的项数 从0索引开始
(defconst gl-state-3 102)       ;用于保存远程搜索总数
(defconst gl-state-4 103)       ;用于保存远程搜索中列表多少项存有对象的项数 从0索引开始

(defconst gl-point-x 104)       ;获取点需要连续两个序号大于40的目标值保存
(defconst gl-point-y 105)       ;获取点需要连续两个序号大于40的目标值保存

(defrule        
    (true)        
=>        
    (up-full-reset-search)             ;这将从列表中删除所有以前的id并清除搜索中的任何过滤器 每次不同搜索之前都要清空
    (up-find-local c: scout-type c: 1) ;当使用up-find-local代码时 就会在游戏搜索到对象加入到本地列表
    (up-get-search-state gl-state-1)   ;获得搜索次数存入到定义常数大于40连续序号用来保存本地搜索总数 对象存入本地列表项数,远程搜索总数,对象存入远程列表项数
    (disable-self)                     ;关闭循环
)



我们可以使用up-get-search-state提供的数据来验证我们确实找到了斥候。第一个goal告诉我们本地搜索总数。第二个goal给对象存入本地列表项数。因为我们使用up-full-reset-search从所有列表中删除了搜索所有id,第三和第四个goal与第一个和第二个goal相同,但是包含了关于远程列表而不是本地列表的信息。因此,第三个goal是远程搜索总数,第四个goal是对象存入远程列表项数。

如果我们的搜索找到了侦察兵,第一个goal和第二个goa值都会保存为1 假设我们找到了斥候,我们可以指派它移动到地图的中心

(defrule
    (up-compare-goal gl-state-1 c:== 1)             ;判断本地列表是否找到单位
=>
    (up-get-point position-center gl-point-x)       ;获取地图中心的(x,y)坐标。把x,y坐标存入连续序号gl-point x的值上,只需要写连续两个目标序号大于40就行了。
    (up-target-point gl-point-x action-move -1 -1)  ;target在本地搜索结果中的单位(指的是我们的侦察兵)移动到地图中心(保存在gl-point x和gl-point y中的点)
    (disable-self)
)


把上面的代码整合到一起:

#load-if-defined AZTEC-CIV
    (defconst scout-type -267)
#else
    #load-if-defined INCAN-CIV
        (defconst scout-type -267)
    #else
        #load-if-defined MAYAN-CIV
            (defconst scout-type -267)
        #else
            (defconst scout-type -286)
        #end-if
    #end-if
#end-if

(defconst gl-state-1 100)
(defconst gl-state-2 101)
(defconst gl-state-3 102)
(defconst gl-state-4 103)
(defconst gl-point-x 104)
(defconst gl-point-y 105)

(defrule
    (true)
=>
    (up-full-reset-search)
    (up-find-local c: scout-type c: 1)
    (up-get-search-state gl-state-1)
    (disable-self)
)

(defrule
    (up-compare-goal gl-state-1 c:== 1)
=>
    (up-get-point position-center gl-point-x)
    (up-target-point gl-point-x action-move -1 -1)
    (disable-self)
)



目标单位up-target-objects和目标点up-target-point非常相似都有设定执行动作,设定阵型,姿态。唯一的区别是,指派执行动作单位放在我们的本地列表,指派执行目标单位放在远程列表并通过调用up-target-objects设定为目标对象。目标单位up-target-objects多一个参数 1只以用up-set-target-object设定为目标  0以远程列表对象为目标
可以通过过滤筛选出特定对象设定为目标。

性能考虑
除了up-path-distance和up-get-path-distance调用之外,搜索(以up-find-开头的命令)计划定期执行的搜索,建议您使用计时器来确保它们的执行频率不会超过每2秒一次。每次执行规则时都要进行一次又一次的搜索,这会导致游戏延迟。像up-target-point这样的命令也会导致游戏执行pathing调用(即使我们没有在代码中直接看到它),如果反复执行,这也会影响性能。disable-self可以防止代码执行多次




第二个例子:远程搜索和目标对象
想要检查我们在1v1中的敌对玩家是否研究织布机
首先,让我们定义我们想要如何做。作为一个人类玩家,对进入我们的视线的敌方村民检查是否研究了织布机,点选它,看到它的护甲或它的生命值。一个没研究织布机村民有25点生命值和0/0护甲,而一个有织布机的村民有40点生命值和0+1/0+2护甲,所以如果我们点击一个敌方的村民,看到它有40点生命值或有护甲,我们就知道敌人有织布机。我们将使用村民的生命值来确定他们是否有织机。

第一步是找到一个属于我们对手的村民。因为我们正在寻找其他玩家的单位,我们需要使用远程列表。每次只能搜索一个玩家的单位。通过使用up-find-player来筛选出特定玩家序号 然后通过设置sn-focus-player-number设定筛选出的玩家序号。因为使用远程列表需要用sn-focus-player-number来设定需要搜索哪个玩家对象。

;定义常数
(defconst gl-state-1 100)        ; 用于保存本地搜索总数
(defconst gl-state-2 101)        ; 用于保存本地搜索中列表多少项存有对象的项数 从0索引开始
(defconst gl-state-3 102)        ; 用于保存远程搜索总数
(defconst gl-state-4 103)        ; 用于保存远程搜索中列表多少项存有对象的项数 从0索引开始
(defconst gl-enemy 106)          ; 存储敌方玩家
(defconst gl-enemy-has-loom 107) ; 判断是否有织布机的开关(最终满足的条件)
(defconst gl-temp 108)

;计时器。因为需要计时器设定判断周期,不会导致频繁判断 造成游戏延迟
(defconst t-3-sec 1)

;Misc    ;判断满足条件血量
(defconst vil-loom-hp 40)

(defrule                                    ; 开局设定
    (true)
=>
    (up-find-player enemy find-closest gl-enemy)  ;搜索特定敌方(离自己最近敌方玩家)玩家序号
    (set-goal gl-enemy-has-loom 0)          ; 设定没织布机 为0
    (enable-timer t-3-sec 3)                ; 开启计时
    (disable-self)                          ; 关闭循环 只运行一次
)

; 计时器反复开启
(defrule
    (timer-triggered t-3-sec)               ; 计时到期
=>
    (disable-timer t-3-sec)                 ; 关闭计时
    (enable-timer t-3-sec 3)                ; 重启计时
)

(defrule
    (up-compare-goal gl-enemy-has-loom c:== 1) ; 假设最终满足条件
=>
    (chat-to-all "Our opponent has loom!")     ; 我们敌方村民有织布机
    (disable-self)
)



因为我们希望这个检查重复发生,直到我们看到我们的敌人已经出现,所以我们将使用一个计时器来防止这个代码执行得太频繁。

当不满足最终条件 设定焦点玩家用远程列表搜索出一个敌方村民  
(defrule
    (timer-triggered t-3-sec)                       ;执行此规则的频率不超过每3秒一次
    (up-compare-goal gl-enemy-has-loom c:== 0)      ;当最终条件不满足时候
=>
    (up-modify-sn sn-focus-player-number g:= gl-enemy)   ;设定up-find-player找到的玩家序号
    (up-full-reset-search)           ; 这将从列表中删除所有以前的id并清除搜索中的任何过滤器包括使用up-set-target-object up-get-point设置的对象都清空。
    (up-find-remote c: 904 c: 1)     ; Unit ID 904是村民组
    (up-get-search-state gl-state-1) ; 获得搜索次数存入到定义常数大于40连续序号用来保存本地列表搜索次数 上一次本地列表搜索次数,远程搜索次数,上次远程搜索次数
)

(defrule
    (timer-triggered t-3-sec)
    (up-compare-goal gl-enemy-has-loom c:== 0)
    (up-compare-goal gl-state-3 c:== 1)             ; 没有检查搜索次数代码需要用保存goal值来保存再判断 这里是判断远程列表是否搜索到结果
=>
    (up-set-target-object search-remote c: 0)       ; 设定远程列表搜索到的索引0号单位为目标对象
    (up-get-object-data object-data-maxhp gl-temp)  ; gl-temp保存获取到对象数据-最大生命值 只能获得最后一个加入列表的单位数据
)

(defrule
    (timer-triggered t-3-sec)
    (up-compare-goal gl-enemy-has-loom c:== 0) ; 判断敌方村民是否研究织布机
    (up-compare-goal gl-state-3 c:== 1)        ; 判断远程列表是否搜索到村民
    (up-compare-goal gl-temp c:>= vil-loom-hp) ; 判断获得到单位数据生命值是大于40
=>
    (set-goal gl-enemy-has-loom 1)             ; 敌方村民已经研究织布机了 gl-enemy-has-loom设定为1
)



上面例子 因为需要多个条件都满足了才能判断敌方村民有织布机  需要频繁使用计时器
设定一个开关 判断是否满足要求  当不满足当前要求再往下判断 直接逐步满足第一个要求。
goal值只能存储当前不变的数值 需要开启一个计时器频繁刷新goal里面的数值。如果不开启频繁计算
对于不断变化的属性会判断错误 导致条件永远满足




第三个例子:过滤距离
你的AI指派一个村民去建立一个伐木营地。建筑工人完成了伐木营地的建造,然后去城镇中心另一边采集浆果
我们这项任务的目标是确保在我们建造第一个木材营地后不会发生这种情况。(作为人类玩家当建造完某个采资源营地就自动在附近采集了 一般不会出现这个问题)

检测我们的第一个木材营地何时建成
看看在营地方圆一瓦范围内是否有一个不是伐木工的村民
如果有,找附近的树,指派该村民去伐木。

是否有伐木营地通过(building-type-count lumber-camp > 0)
;常量设定
(defconst gl-state-1 100)
(defconst gl-state-2 101)
(defconst gl-state-3 102)
(defconst gl-state-4 103)

(defconst gl-point-x 104)
(defconst gl-point-y 105)

(defrule
    (true)
=>
    (set-goal gl-state-1 0)    ; 设定一个初始值用来判断
    (set-goal gl-state-2 0)    ; 设定一个初始值用来判断
    (set-goal gl-state-3 0)    ; 设定一个初始值用来判断
)

(defrule
    (building-type-count lumber-camp > 0)
=>
    (up-full-reset-search)     ; 这将从列表中删除所有以前的id并清除搜索中的任何过滤器
    (up-find-local c: lumber-camp c: 1)
    (up-get-search-state gl-state-1)
    (disable-self)
)

; 我们找到了木材营地。接下来我们要做的是确定它的确切位置,这样我们就知道去哪里寻找村民了
(defrule
    (up-compare-goal gl-state-1 c:> 0)          ; 在本地列表找到单位
=>
    (up-set-target-object search-local c: 0)    ; 设定目标对象为本地列表的对象 吧列表对象设定目标对象。用up-get-point和position-object引用它
    (up-get-point position-object gl-point-x)   ; 将设定为目标对象的对象位置保存到一对goal上(gl-point-x)
    ;↑→等同于获取对象X,Y轴坐标 ↓
    ;(up-get-object-data object-data-point-x gl-point-x)
    ;(up-get-object-data object-data-point-y gl-point y)
    (up-reset-search 1 1 0 0)               ; 已经获得对象位置保存了 清空本地列表所有对象。前面两个是本地列表记录,后面两个是远程列表记录   up-reset-search 1 1 1 1等同于up-full-reset-search
    (up-set-target-point gl-point-x)        ; 将保存了目标对象位置的goal设为目标点
    (up-filter-distance c: 0 c: 2)          ; 以这个目标点 筛选距离2格内 该代码需要与up-set-targer-point同时使用
    (up-find-local c: 904 c: 1)             ; 904 = Villager group 寻找2格范围内是否有一个村民

    (up-remove-objects search-local object-data-type c: 218)    ; 218 = 从本地列表移除对象类型Female lumberjack 男伐木工
    (up-remove-objects search-local object-data-type c: 123)    ; 123 = 从本地列表移除对象类型Male lumberjack  女伐木工
    (up-get-search-state gl-state-1)        ; 保存搜索计数
)




关于过滤需要注意,在我们对搜索应用过滤器之后,这个过滤器将会影响我们所有的搜索,需要我们使用完删除它。所以如果我们不删除现在再做一次搜索,它只会在我们第一个木材营地的两个瓦片内找到单位。我们可以通过使用up-reset-filters or up-full-reset-search从搜索中删除过滤器。

,我们的伐木营地的1格范围内寻找一个非伐木村民。如果本地列表的内容是空的,那么就没有闲着村民,我们的工作就完成了。但是如果有这样一个村民,我们想找棵树让他砍。

(defrule
    (up-compare-goal gl-state-2 c:> 0)  ; 第二个目标值记录列表项数
=>
    (up-filter-distance c: 1 c: 3)      ; 目标点仍然是伐木营地,所以这将限制搜索半径为3瓦。
    (up-find-resource c: wood c: 1)     ; up-find-resource是一种特殊的搜索类型,它只查找资源。与up-find-remote一样,它存储在远程列表里。
    (up-get-search-state gl-state-1)    ; 保存搜索次数
)

(defrule
    (up-compare-goal gl-state-1 c:> 0)          ; 找到了村民
    (up-compare-goal gl-state-3 c:> 0)          ; 找到树林资源
=>
    (up-target-objects 0 action-default -1 -1)  ; 指派在本地列表找到村民去伐木,
    ; 0表示目标对象为远程列表  action-default执行动作  -1阵型  -1姿态
)
;注:同一时间 只能执行一个动作 临时执行完动作就清掉列表对象 加入新的对象执行动作  远程列表里对象是记录判断 不能指派远程列表对象执行动作指令。




前面示例中的代码有一个有趣的特性:它只会查找并锁定活的树,而忽略已经被砍伐的树。这是因为被砍倒的树与活着的树有着不同的地位。状态是每个单元拥有的属性。它将是下面UserPatch常量 - 对象状态中的一个数字。

许多搜索操作完全忽略状态,但是up-find-status-local、up-find-status-remote和up-find-resource(我们用来查找树的地方)都将其考虑在内。默认情况下,搜索将查找状态就绪的对象。可以使用up-filter-status修改它。

对象状态
(defconst status-pending 0)     ;状态未完成的建筑
(defconst status-ready 2)       ;正常(绝大部分活的单位。如建筑、部队、活着的野生动物/牲畜、树木)
(defconst status-resource 3)    ;资源块(砍倒的树木、果树丛、金矿、石矿、闪光、树桩、一堆石料)
(defconst status-down 4)        ;倒下(被杀死而正在倒下,但不包括砍倒的树木)
(defconst status-gather 5)      ;可采集(携带食物的已死动物、各种尸体、一堆食物/木材/黄金。其中尸体无法通过搜索找到)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x

评分

参与人数 1耕战 +100 鹰币 +300 收起 理由
troytroytroy + 100 + 300 分享交流

查看全部评分

回复

使用道具 举报

110

主题

14

精华

6万

积分

教皇

特洛伊大叔

耕战
10480
鹰币
1610
天龙币
126
回帖
2358

翔鹰建站十周年纪念章二级帝国勋章一级翔鹰勋章二级嘉禾勋章大评论家小评论家创意工坊通行证第十一届火箭筒杯最佳战役

附庸关系10
发表于 2020-5-12 15:58:04 | 显示全部楼层
建議加上如何在已知ID的情況下,使用"up-add-object-by-id"語句來命令已知地圖ID的單位組成隊伍並執行命令。

對於建毀類戰役來說,地圖ID本身意義比較小,因為單位本身死亡後這個ID基本上就沒用了。ID多半有用的在於那些獨特的英雄人物或是獨特單位,這些單位若是能透過AI執行一些獨特的行動規則,才有機會顯現他們做為"英雄"的這一面向。舉例來說,目前的建毀類戰役多半會給予玩家一個相對較強的英雄單位,並要求玩家不能讓此單位死亡。玩家會因此而謹慎使用此單位。但由敵方電腦控制的敵方英雄卻沒有被AI謹慎對待,這導致電腦英雄單位變得很無用,甚至有些愚蠢。

此外,定量類戰役與RPG戰役中,可以運用觸發技術限制在場上的單位ID都是固定數值。這種情況下經由ID來進行DUC會讓戰役變得更為生動。

此文好好擴充這些內容後,可以列入精華。

傭兵外傳-安帝哥崛起 2020十二月發表
傭兵-完整版已公佈下載請點此處
回复

使用道具 举报

15

主题

0

精华

1033

积分

伯爵

耕战
175
鹰币
580
天龙币
0
回帖
188
附庸关系0
发表于 2020-5-13 00:08:49 | 显示全部楼层
很不错 私心问问我的AI会不会有明显延遲阿
决定版因为脚本bug,所以比起WK版使用更多的DUC操控,原本这些DUC代码根本就不需要的...
回复

使用道具 举报

15

主题

0

精华

1033

积分

伯爵

耕战
175
鹰币
580
天龙币
0
回帖
188
附庸关系0
发表于 2020-5-13 13:43:07 | 显示全部楼层
本帖最后由 blazefires 于 2020-5-13 13:52 编辑

图片说明是最明显的,开战前

无控制AI时,大象险胜投车 https://www.youtube.com/watch?v=SutGYUr6hxY

DUC控制AI时,投车从头到尾吊打大象 https://www.youtube.com/watch?v=wSY5s2KaZVg

620象群不过如此
无法看影片就用加速器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x
回复

使用道具 举报

15

主题

0

精华

1033

积分

伯爵

耕战
175
鹰币
580
天龙币
0
回帖
188
附庸关系0
发表于 2020-5-14 09:16:07 | 显示全部楼层
本帖最后由 blazefires 于 2020-5-14 11:28 编辑

更新到status了阿,既然如此来报告决定版这该死bug

(up-find-status-remote) 只要找敌人建筑就完全无效
到现在我AI打包机不打敌人已经盖好的出兵建筑,再那里给我打敌人地基就不爽
敌人只要连续盖地基,打包机就一直瞄地基打
WK就没这问题
知道为何我DE版出兵人口特别多了嘛
军队不听话,乱砍一通,无法设置应该先攻击什么,就是所谓的质不够就靠量来补
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16751
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-5-14 17:18:43 | 显示全部楼层
troytroytroy 发表于 2020-5-12 15:58
建議加上如何在已知ID的情況下,使用"up-add-object-by-id"語句來命令已知地圖ID的單位組成隊伍並執行命令 ...

这一篇教程是翻译自国外的一个网站,其本身的价值就已经非常高。
我个人并不认为up-add-object-by-id必须加入这一篇教程翻译里,才能被加精。
up-add-object-by-id应用也很广泛,应该另开一贴讲述,但不需要揉合到教程翻译里。
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16751
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-5-14 17:40:26 | 显示全部楼层
本帖最后由 newtonerdai 于 2020-5-14 17:42 编辑
blazefires 发表于 2020-5-14 09:16
更新到status了阿,既然如此来报告决定版这该死bug

(up-find-status-remote) 只要找敌人建筑就完全无效

status有多钟。0会匹配地基和未完成建筑,2会匹配活动或者说存活单位。会不会是因为你没有设置筛选条件up-filter-status?

(defconst status-pending 0) 未完成建筑
(defconst status-ready 2) 就绪。绝大部分存活单位。如建筑、部队、活着的动物和树木
(defconst status-resource 3) 资源。倒下的树、果树丛、金矿、石矿
(defconst status-down 4) 未知。可能是被击杀正在倒下的单位?
(defconst status-gather 5) 可采集。携带食物的已死动物

索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

15

主题

0

精华

1033

积分

伯爵

耕战
175
鹰币
580
天龙币
0
回帖
188
附庸关系0
发表于 2020-5-14 17:56:27 | 显示全部楼层
newtonerdai 发表于 2020-5-14 17:40
status有多钟。0会匹配地基和未完成建筑,2会匹配活动或者说存活单位。会不会是因为你没有设置筛选条件up- ...

(defrule
        (true)
=>
        (up-full-reset-search)
        (set-strategic-number sn-focus-player-number 2)
        (up-filter-status c: status-ready c: list-active)
        (up-find-status-remote c: castle c: 1)
        (up-find-status-remote c: 1251 c: 1)  ; krepost = 1251
        (up-find-status-remote c: tower-class c: 1)
        (up-find-status-remote c: barracks c: 1)
        (up-find-status-remote c: archery-range c: 1)
        (up-find-status-remote c: stable c: 1)
        (up-find-status-remote c: siege-workshop c: 1)
        (up-find-status-remote c: monastery c: 1)
        (up-find-status-remote c: town-center c: 1)
        (up-get-search-state gl-local-total)
)
       不是,查2号红色敌人的建筑
       你试试看这样读取remote-total,我记得只有城堡和营垒能被搜索到...
       换成status-pending只查找地基的话,我记得任何一个都会找不到...
回复

使用道具 举报

110

主题

14

精华

6万

积分

教皇

特洛伊大叔

耕战
10480
鹰币
1610
天龙币
126
回帖
2358

翔鹰建站十周年纪念章二级帝国勋章一级翔鹰勋章二级嘉禾勋章大评论家小评论家创意工坊通行证第十一届火箭筒杯最佳战役

附庸关系10
发表于 2020-5-15 16:55:11 | 显示全部楼层
newtonerdai 发表于 2020-5-14 17:18
这一篇教程是翻译自国外的一个网站,其本身的价值就已经非常高。
我个人并不认为up-add-object-by-id必须 ...

其實這篇寫得很糟糕,我是不知道哪裡價值高了。
開篇寫了關於ID的事情,結果通篇沒有講到任何關於ID的指令,find-local或是find-remote下所儲存的搜尋結果中,第四個儲存的數值為ID,但通篇後續指令中完全沒用到關於此數值的應用方式。當然也不是說此篇內容完全沒用,但如果想講DUC(中文翻譯為"直接控制單位")的話,類人類玩家的操作,也就是指定特定單位、在圈選時加入特定單位、甚至用filter語句操作都應該包含在裡面。
以我的觀點,此篇文章目前只能算是一篇很普通的文章,唯一價值只是告訴我們搜尋後四個數值本身的意義。此外,應用方面幾乎是沒有講。
傭兵外傳-安帝哥崛起 2020十二月發表
傭兵-完整版已公佈下載請點此處
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16751
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-5-16 00:55:45 | 显示全部楼层
楼主这机翻太……
希望能认真人工翻译或润色一遍!
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16751
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-5-16 01:02:04 | 显示全部楼层
本帖最后由 newtonerdai 于 2020-5-16 01:05 编辑
troytroytroy 发表于 2020-5-15 16:55
其實這篇寫得很糟糕,我是不知道哪裡價值高了。
開篇寫了關於ID的事情,結果通篇沒有講到任何關於ID的指 ...

不要太决断了大叔。
DUC包含了“搜索”“筛选”“指派”三大部分,每一部分很有价值。
在对战AI上,可以让AI非常拟人化地精细微操,甚至完成人类无法想象的快速拉打(风筝的升级版)。本文面向的也主要是对战AI的编写者,当然,战役AI编写也可以学习参考。总之,这篇文章可能不会着墨于固定id的单位,而是时局变化的单位。对于固定id单位的DUC体系,可能需要我们自己发掘。
RPG战役AI上,可以让电脑的boss拥有更智能化、实时变化的站位和行为。你真的不应该轻视这项技术。

点评

你看不懂我在說什麼就算了。  发表于 2020-5-16 09:41
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-11-21 21:11 , Processed in 0.189397 second(s), 127 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

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