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

[教程] [UP1.5] 让AI强行控制玩家1的单位!

[复制链接]

183

主题

9

精华

2万

积分

教皇

耕战
3325
鹰币
15209
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
 楼主| 发表于 2020-5-22 01:58:43 | 显示全部楼层 |阅读模式
本帖最后由 newtonerdai 于 2020-5-22 16:34 编辑

演示:


AI文件:(与下面的正文完全一致,可选择其中一种阅读)
注:本per文件为GBK编码,可直接用于UP1.5/WK。在DE里用时,需要自己转码为UTF-8。





;///////////////////////////////////////////////////////////
;// --------------------- AI实用模块 ---------------------//
;//                 让AI强行控制玩家1的单位               //
;//                                     作者:newtonerdai //
;//                                       www.hawkaoe.net //
;///////////////////////////////////////////////////////////

;                         【前言】
;▲模块作用:让AI能强行控制玩家1的单位执行一些行动
;           (心灵控制技能、托管重复性操作、士气溃败……这会开启一个新时代
;
;▲适用版本:仅适用于支持UP1.5 AI语句的版本。如UP1.5、WK、DE。

;----------------------------------------------------------
;                  让AI强行控制玩家1的单位
;----------------------------------------------------------

(defconst g-point-x 100)
(defconst g-point-y 101)

(defconst gl-local-total 102)   ;用于储存本地搜索结果总数
(defconst gl-local-last 103)
(defconst gl-remote-total 104)  ;用于储存远程搜索结果总数
(defconst gl-remote-last 105)

(defconst index 106)            ;用于临时储存搜索结果索引编号
(defconst temp-unit-id 107)     ;用于临时储存获取到的单位地图ID


;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
;方式①:已知地图ID的情况,直接加入本地搜索结果指派
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

(defrule
    (taunt-detected 1 3)                    ; 使用数字3来手动测试
=>
    (up-full-reset-search)                  ; 使用DUC前完全重置
    (up-modify-goal g-point-x c:= 68)       ; 随便设一个点作为巡逻目的地
    (up-modify-goal g-point-y c:= 78)       ; 同上

    (up-add-object-by-id 1 c: 0)            ;【核心语句】强行将一个单位加入到自己的搜索结果里
    (up-add-object-by-id 1 c: 1)            ;(这些是玩家1单位的地图ID)
    (up-add-object-by-id 1 c: 2)            ; 同上
    (up-add-object-by-id 1 c: 3)            ; 同上

    (up-target-point g-point-x 2 -1 -1)     ; 2 = 巡逻

    (acknowledge-taunt 1 3)
)


;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
;方式②:地图ID实时变化的情况,搜索后逐一加入本地搜索结果,最后统一指派
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


;------------------
;搜索玩家1的任意单位,最多40个。可自行添加筛选和剔除
;------------------

(defrule
    (taunt-detected 1 4)                    ; 使用数字4来手动测试
=>
    (up-modify-goal index c:= 0)            ; 复原index为0
    (up-full-reset-search)                  ; 使用DUC前完全重置
    (set-strategic-number sn-focus-player-number 1)
    (up-find-remote c: -1 c: 40)            ; 搜索到远程结果
    (up-get-search-state gl-local-total)    ; 获取搜索计数
;    (up-chat-data-to-all "remote:%d" g: gl-remote-total)  ;测试用
)
;------------------
;依次获取远程搜索结果的ID,并强行加入本地搜索结果
;------------------

(defrule
    (taunt-detected 1 4)
    (up-compare-goal index g:< gl-remote-total) ;循环直到遍历所有远程结果
=>
    (up-set-target-object 2 g: index)           ;【核心语句】设目标单位为第(index-1)个单位
    (up-get-object-data 0 temp-unit-id)         ;获取该单位的地图ID
    (up-add-object-by-id 1 g: temp-unit-id)     ;【核心语句】强行将该单位加入到自己的搜索结果里
    (up-modify-goal index c:+ 1)                ;index + 1
    (up-jump-rule -1)                           ;循环遍历
)
;------------------
;获取完之后,强行指派找到的玩家1单位
;------------------

(defrule
    (taunt-detected 1 4)
    (up-compare-goal index g:>= gl-remote-total)
=>
    (up-modify-goal g-point-x c:= 68)       ; 随便设一个点作为巡逻目的地
    (up-modify-goal g-point-y c:= 78)       ; 同上

    (up-target-point g-point-x 2 -1 -1)     ; 2 = 巡逻

    (up-modify-goal index c:= 0)            ; 复原index为0
    (acknowledge-taunt 1 4)
)


;【附录:指派行动】
;用于 up-target-point 和 up-target-objects

;(defconst action-default 0) 默认       相当于框选单位右键点击目标点地面或目标单位。使用target-point时相当于action-move
;(defconst action-move 1) 移动          命令单位前往目标点或目标单位所在点。适用于target-point和target-objects
;(defconst action-patrol 2) 巡逻        命令单位向目标点或目标单位所在点巡逻。适用于target-point和target-objects
;(defconst action-guard 3) 警戒         使用target-objects时是护卫目标单位;使用target-point时相当于action-move
;(defconst action-follow 4) 跟随        使用target-objects时是跟随目标单位;使用target-point时相当于action-move
;(defconst action-stop 5) 停止          命令单位停止,相当于按下单位“停止”按钮。适用于target-point和target-objects
;(defconst action-ground 6) 强制攻击    命令单位攻击目标点或目标单位处的地面,即强制攻击。对于无强制攻击能力的单位相当于action-none。适用于target-point和target-objects
;(defconst action-garrison 7) 进驻      使用target-objects时是命令单位进驻到目标单位里;如果目标单位并不能进驻,则大部分时候相当于action-stop。使用target-point时相当于action-move
;(defconst action-delete 8) 自杀        本地搜索结果里能自杀的单位将自杀(Del)。适用于target-point和target-objects
;(defconst action-unload 9) 卸载        使用target-point时是命令建筑释放进驻在其内的单位到目标点,攻城武器(种属913)则将运送到目标点附近合适的地方卸载。使用target-objects时相当于action-none
;(defconst action-train 10) 训练        使用target-point时本地搜索结果里的建筑将训练单位。并且必须改用这个语法:[up-target-point (in)(goal)储备资源状态 action-train 类型操作符 (in)(op)单位编号],例如(up-target-point 0 action-train c: spearman-line)。使用target-objects时相当于action-none
;(defconst action-gather 11) 集结       命令建筑将集结点设为目标点或目标单位所在点。适用于target-point和target-objects
;(defconst action-lock 12) 锁定         使用target-point时是命令城门切换锁定状态,已解锁的城门会锁定,已锁定的城门会解锁。使用target-objects时相当于action-none
;(defconst action-work 13) 返工         使用target-point时是命令建筑释放驻扎的村民返回工作岗位。使用target-objects时相当于action-none
;(defconst action-ungarrison 14) 取消驻扎 使用target-point时是命令单位从他们驻扎的建筑里离开。使用target-objects时相当于action-none
;(defconst action-drop-relic 15) 放下圣物 使用target-point时是命令僧侣单位放下他们携带的圣物。使用target-objects时相当于action-none
;(defconst action-pack 16) 组装         使用target-point时是命令抛石机组装。使用target-objects时相当于action-none
;(defconst action-unpack 17) 展开       使用target-point时是命令抛石机展开。使用target-objects时相当于action-none
;(defconst action-none 18) 无 不作为。  被命令的单位的当前行动不会变更。适用于target-point和target-objects



本帖子中包含更多资源

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

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

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

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

使用道具 举报

31

主题

0

精华

1807

积分

侯爵

耕战
250
鹰币
857
天龙币
0
回帖
545
附庸关系0
发表于 2020-5-23 10:02:44 | 显示全部楼层
这个关键是up-target-point 这个动作吧,居然没有cc标识,这样的话随便写个AI不就是可以坑人了?
…………
回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3325
鹰币
15209
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
 楼主| 发表于 2020-5-24 11:14:47 | 显示全部楼层
标本 发表于 2020-5-23 10:02
这个关键是up-target-point 这个动作吧,居然没有cc标识,这样的话随便写个AI不就是可以坑人了? ...

关键是up-add-object-by-id。
如果获取到了对方单位的地图id,就可以用这个语句强行选中控制。
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

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

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

使用道具 举报

本版积分规则

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

GMT+8, 2024-4-25 10:03 , Processed in 0.169629 second(s), 45 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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