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

[AI/RMS] [UP1.5] 搜索并报告场景里某个单位的地图ID的AI

[复制链接]

183

主题

9

精华

2万

积分

教皇

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

翔鹰建站十周年纪念章

附庸关系3
 楼主| 发表于 2020-4-28 01:14:54 | 显示全部楼层 |阅读模式
本帖最后由 newtonerdai 于 2020-6-14 18:21 编辑

利用UP1.5的搜索-筛选系统来写了这个简短的AI,作用是获取并报告地图上某个特定单位的地图ID
决定版暂时没有适配的AOKTS,无法直接查看一个单位的地图ID,这个或许可以帮到一些朋友。

运用的地方是:如果需要用AI来检测一个主角的各项数据用于计算,辅助触发条件判定,可以获取他的ID,然后直接使用(up-set-target-by-id <主角的地图ID>)来方便地锁定主角来检测。



下面的是代码预览
【代码内置排版,但放到论坛里显示效果不好,推荐直接下载文件,用SimSun-ExtB字体打开】
;///////////////////////////////////////////////////////////
;//              搜索并获取某个单位的地图编号             //
;//                                      作者:newtonerdai//
;//                                        www.hawkaoe.net//
;///////////////////////////////////////////////////////////
;注:本AI仅适用于支持UP1.5 AI语句的游戏。如UP1.5、WK、LK、DE。
;    前几个可以通过AOKTS查到地图id,但DE暂无适配的AOKTS,所以一般用于DE。

;乱码问题:本per文件使用的是UTF-8编码。在DE之前的旧版本使用时,请先转码为GB-2312。

;使用方法:
;        把这个AI(包括.ai和.per两个文件)放到游戏目录的ai文件夹。(DE的为 AoE2DE\resources\_common\ai)。
;        重新载入编辑器场景,然后在编辑器中给任意电脑玩家A指定这个AI。
;        在你想要检测地图编号的单位处,用触发生成一个电脑玩家A的全开地图(地图启示者),或直接放置一个单位,以提供视野,用于搜索。
;        打开per文件,在初始化部分输入你想要的参数,保存。
;                有需要时,可在运作部分把你想要的语句取消注释(注释符为英文分号)。
;        进入游戏,用Ctrl+Shift+F1~F9切换控制玩家,控制这个单位执行某个指令(如移动、跟随等),直到搜索计数为1,用于精确筛选。
;                如果要获取地图id的是一个建筑或冲车,可以给它驻扎几个单位,用于精确筛选。


;===== 常数/目标定义部分
(defconst gl-local-total 200)       ;本地搜索结果计数(即搜索AI玩家自己)
(defconst gl-local-last 201)
(defconst gl-remote-total 202)      ;远程搜索结果计数(可以是搜索任何玩家)
(defconst gl-remote-last 203)

(defconst unit 204)
(defconst player 205)
(defconst orderid 206)
(defconst min-garrison 207)
(defconst max-garrison 208)

(defconst map-id 209)               ;用于储存并报告搜索到的单位的地图编号

;===== 初始化。可在此修改你想要的参数
(defrule
        (true)
=>
        (set-goal unit 4)                ;要检测的单位的编号,如 4 为步弓兵(可查AGE或DE/WK大典)
        (set-goal player 1)              ;要检测的单位的所属玩家,如 1 为玩家1。可以为其他玩家,也可以为AI玩家自身
;        (set-goal orderid 710)          ;(不支持goal代数,需要到下面填写数字)要检测的单位的执行编号,即正在执行的命令,用于辅助筛选。如 710 为移动,712 为跟随。详见后附的执行编号表
        (set-goal min-garrison 1)        ;要检测的单位的驻扎数量下限,用于辅助筛选。如 1 为最少驻扎有1个单位
        (set-goal max-garrison 5)        ;要检测的单位的驻扎数量上限,用于辅助筛选。如 5 为最多驻扎有5个单位
        (disable-self)                   ;只执行一次
)

;===== 运作部分
;重置搜索
(defrule
        (true)                                ;恒成立
=>
        (up-full-reset-search)                ;清空搜索结果和筛选条件
        (up-get-search-state gl-local-total)  ;清空搜索计数
)
;搜索并报告结果
(defrule
        (true)
=>
        (up-filter-include -1 -1 710 -1)                     ;添加筛选条件,只搜索执行编号为 710(移动) 的单位。只能用数字,不支持goal
;        (up-filter-garrison g: min-garrison g: max-garrison);添加筛选条件,只搜索驻扎单位数量为min到max的单位(用于建筑或冲车)

        (up-modify-sn sn-focus-player-number g:= player)     ;设置焦点玩家为player代表的数字。
        (up-find-remote g: unit c: 40)                       ;搜索最多40个焦点玩家的unit指定的单位

        (up-get-search-state gl-local-total)                 ;检查用,可获取当前搜索计数,储存到以gl-local-total为首的连续四个变量中
        (up-chat-data-to-all "找到单位:%d个" g: gl-remote-total)        ;检查用,可报告远程搜索结果数。远程搜索即使用

        (up-set-target-object 2 c: 0)                        ;设置目标单位为远程搜索结果(2)的第一个单位(0)
        (up-get-object-data 0 map-id)                        ;获取目标单位的地图编号(0),储存到map-id里。查UserPatchConst.per可获取更多object-data数值。
        (up-chat-data-to-all "地图ID:%d" g: map-id)         ;报告map-id里保存的数字
)
;重置搜索
(defrule
        (true)
=>
        (up-full-reset-search)                    ;清空搜索结果和筛选条件
        (up-get-search-state gl-local-total)      ;清空搜索计数
)


;===== 附录:执行编号表
;(defconst orderid-attack 700)                   ;攻击(自动寻敌时为-1)
;(defconst orderid-defend 701)                   ;警戒
;(defconst orderid-build 702)                    ;建造
;(defconst orderid-heal 703)                     ;治疗
;(defconst orderid-convert 704)                  ;转化
;(defconst orderid-explore 705)                  ;探索
;(defconst orderid-stop 706)                     ;停止
;(defconst orderid-runaway 707)                  ;逃跑
;(defconst orderid-retreat 708)                  ;撤退
;(defconst orderid-gather 709)                   ;采集
;(defconst orderid-move 710)                     ;移动
;(defconst orderid-patrol 711)                   ;巡逻
;(defconst orderid-follow 712)                   ;跟随
;(defconst orderid-hunt 713)                     ;捕猎
;(defconst orderid-transport 714)                ;运输
;(defconst orderid-trade 715)                    ;贸易
;(defconst orderid-evade 716)                    ;躲避
;(defconst orderid-enter 717)                    ;进驻
;(defconst orderid-repair 718)                   ;维修
;(defconst orderid-train 719)                    ;训练
;(defconst orderid-research 720)                 ;研究
;(defconst orderid-unload 721)                   ;卸载
;(defconst orderid-relic 731)                    ;遗迹





本帖子中包含更多资源

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

x

评分

参与人数 1耕战 +200 鹰币 +400 收起 理由
troytroytroy + 200 + 400 耕战之功

查看全部评分

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

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

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

使用道具 举报

110

主题

14

精华

6万

积分

教皇

特洛伊大叔

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

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

附庸关系10
发表于 2020-4-28 01:48:28 | 显示全部楼层
很棒。這是一個非常重要的結果。以AI而言,這可以精確的計算出一些已知ID的行為與數據。甚至比目前已知觸發的條件還要精準。只要透過資源與觸發進行溝通,這個AI就能幫助戰役
製作者設計出更為精細的敵人與效果。

如果配上死者復活的技術,設計出戰役就會是不同次元的東西了。
傭兵外傳-安帝哥崛起 2020十二月發表
傭兵-完整版已公佈下載請點此處
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

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

翔鹰建站十周年纪念章

附庸关系3
 楼主| 发表于 2020-5-14 15:44:55 | 显示全部楼层
优化排版!
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

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

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

使用道具 举报

本版积分规则

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

GMT+8, 2024-11-22 00:46 , Processed in 0.169442 second(s), 49 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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