newtonerdai 发表于 2020-5-22 01:27:24

[UP1.5] 用4种攻击姿态来发动技能 - RPG战役又添一神器!

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




;///////////////////////////////////////////////////////////
;// --------------------- AI实用模块 ---------------------//
;//               检测主角姿态→改变状态                //
;//               检测主角姿态→发动技能                //
;//                                     作者:newtonerdai //
;//                                       www.hawkaoe.net //
;///////////////////////////////////////////////////////////
;
;                         【前言】
;▲模块作用:在RPG战役里,使用4种攻击姿态按钮作为发动效果的方式。



;(有两种用法,一种是点击后切换状态,第一种是点击后发动一次效果)
;
;▲适用版本:仅适用于支持UP1.5 AI语句的版本。如UP1.5、WK、DE。
;

;----------------------------------------------------------
;            1. 获取主角姿态 → 切换4种状态
;----------------------------------------------------------



(defconst hero-mapid 100)   ; 储存主角的地图ID
(defconst hero-stance 101); 储存主角的姿态
(defconst rsc-amount 102)   ; 储存联动资源数量。rsc = ReSourCe


;====================   参数输入部分   ===================
;主角的地图ID。可通过AOKTS(旧版)或[https://www.hawkaoe.net/bbs/thread-146210-1-1.html]这个AI模块(DE版)来获取
(defrule
    (true)
=>
    (set-goal hero-mapid 0)
    (disable-self)
)

;======================   运行部分   ======================
;获取主角攻击姿态数值。
(defrule
    (true)
    (up-set-target-by-id g: hero-mapid)   ;只有ID有效且主角还活着才会执行
=>
    (up-get-object-data 21 hero-stance)   ;【核心语句】21 = 攻击姿态
)

;清空联动资源220号
(defrule
    (true)
=>
    ; 34 = 资源数量。220为资源编号
    (up-get-fact 34 220 rsc-amount)
    (up-modify-goal rsc-amount c:* -1)
    (up-cc-add-resource c: 220 g: rsc-amount)
)

;分别判断4种姿态,并维持资源量状态,让触发检测
(defrule
    (true)
    (up-compare-goal hero-stance c:== 0); 0 = 进攻姿态
=>
    (up-cc-add-resource c: 220 c: 1)
)
(defrule
    (true)
    (up-compare-goal hero-stance c:== 1); 1 = 防御姿态
=>
    (up-cc-add-resource c: 220 c: 2)
)
(defrule
    (true)
    (up-compare-goal hero-stance c:== 2); 2 = 坚守姿态
=>
    (up-cc-add-resource c: 220 c: 4)
)
(defrule
    (true)
    (up-compare-goal hero-stance c:== 3); 3 = 不还击姿态
=>
    (up-cc-add-resource c: 220 c: 8)
)


;----------------------------------------------------------
;            2. 获取主角姿态 → 改变时发动效果
;----------------------------------------------------------



(defconst hero-mapid2 110)      ; 储存主角的地图ID
(defconst hero-stance-now 111)    ; 储存主角当前的姿态
(defconst hero-stance-pre 112)    ; 储存主角1秒前的姿态
(defconst rsc-amount2 113)      ; 储存联动资源数量。rsc = ReSourCe

;====================   参数输入部分   ===================
;主角的地图ID。可通过AOKTS(旧版)或[https://www.hawkaoe.net/bbs/thread-146210-1-1.html]这个AI模块(DE版)来获取
(defrule
    (true)
=>
    (set-goal hero-mapid2 0)
    (disable-self)
)

;======================   运行部分   ======================
;激活这个模块时,先获取一轮相同的now和pre姿态,避免激活时判断为姿态变化
(defrule
    (true)
    (up-set-target-by-id g: hero-mapid2)
=>
    (up-get-object-data 21 hero-stance-now)
    (up-get-object-data 21 hero-stance-pre)
    (disable-self)
)

;时刻获取当前主角攻击姿态
(defrule
    (true)
    (up-timer-status 11 c:<= 1)               ; 11号计时器关闭或触发时满足条件
    (up-set-target-by-id g: hero-mapid2)
=>
    (up-get-object-data 21 hero-stance-now)   ; 21 = 攻击姿态
)

;清空联动资源219号
(defrule
    (true)
    (up-timer-status 11 c:<= 1)
=>
    ; 34 = 资源数量。219为资源编号
    (up-get-fact 34 219 rsc-amount2)
    (up-modify-goal rsc-amount2 c:* -1)
    (up-cc-add-resource c: 219 g: rsc-amount2)
)

;>> 如果姿态改变了,则获取100~103点219号资源 <<
(defrule
    (true)
    (up-timer-status 11 c:<= 1)
    (up-compare-goal hero-stance-now g:!= hero-stance-pre)
=>
    ;如果变了则资源219将为100~103。在触发里可以检测>=100并-100,得到0~4的姿态数值。
    (up-cc-add-resource c: 219 g: hero-stance-now)
    (up-cc-add-resource c: 219 c: 100)
)
;>> 如果姿态未改变,则直接获取0~3点219号资源 <<
(defrule
    (true)
    (up-timer-status 11 c:<= 1)
    (up-compare-goal hero-stance-now g:== hero-stance-pre)
=>
    (up-cc-add-resource c: 219 g: hero-stance-now)
)

;遍历结束前,把当前姿态作为下次遍历时的“之前姿态”
(defrule
    (true)
    (up-timer-status 11 c:<= 1)
=>
    (up-modify-goal hero-stance-pre g:= hero-stance-now)
    (enable-timer 11 1)         ;【重要】最好使用1秒间隔,否则会出现AI过快更迭“当前”“之前”但触发没有收到变化的情况
)


页: [1]
查看完整版本: [UP1.5] 用4种攻击姿态来发动技能 - RPG战役又添一神器!