【1.4AI教程】搜索单位作为目标,并获得其周围特定单位的数量
本帖最后由 一窍不开 于 2015-11-7 18:44 编辑此教程源于第一期酒馆抢答第十题:
假设在一个守城战役中,敌人每隔5分钟会出现一个魔王BOSS(假设同时最多只有一个魔王BOSS),若此BOSS与城中任何一座镇魔塔(了望塔之类)的距离小于7,则其生命值每秒减少10点。若与多座镇魔塔距离都在7以内,则伤害叠加。玩家可以建造镇魔塔。试详细写出达成此效果所需的触发和AI。
或许有的人看到这道题会想“这不可能吧”或者毫无头绪,所以我先说一下大概思路:
找到魔王BOSS单位→设定其为目标→读取其坐标→寻找范围7以内的塔→读取塔的数目→转换成玩家2的食物→触发扣血
下面详细解释一下AI语句:
(defconst gl-point-x 100)
(defconst gl-point-y 101)
(defconst cavalry-class 912)
(defconst search-local 1)
(defconst position-object 12)
(defconst tower-class 952)
(defconst gl-local-total 103)
(defconst gl-local-last 104)
(defconst gl-remote-total 105)
(defconst gl-remote-last 106);以上均为常数定义
(defrule
(true)
=>
(up-reset-filters)
(up-reset-search 1 1 1 1);这两句是清除搜索数据用的
(up-find-local c: cavalry-class c: 1);寻找自己的一个骑兵单位,这里就是BOSS骑士
(up-set-target-object search-local c: 0);将其设定为目标
(up-get-point position-object gl-point-x);获得其坐标
(up-set-target-point gl-point-x);将其坐标点设为目标点
(up-reset-search 1 1 1 1);清除搜索数据
(up-filter-distance c: -1 c: 7);过滤条件:距离7以内
(set-strategic-number sn-focus-player-number 1);设定要寻找的玩家为玩家1
(up-find-remote c: tower-class c: 240);寻找塔类单位
(up-get-search-state gl-local-total);将搜索数据储存起来
)
(defrule
(up-compare-goal gl-remote-total > 0);如果塔的总数大于0
=>
(cc-add-resource food 1);作弊1食物
(chat-to-all “.”);用于测试时直观看到效果
(up-modify-goal gl-remote-total c:- 1);塔的总数-1
(up-jump-rule -1);循环本条规则
)
触发扣血就好办啦,用传统的8421方法
触发1:循环,开启
条件:玩家2拥有8食物
效果1:减去玩家2的骑士80生命
效果2:玩家2向盖亚进贡8食物
触发2:循环,开启
条件:玩家2拥有4食物
效果1:减去玩家2的骑士40生命
效果2:玩家2向盖亚进贡4食物
触发3:循环,开启
条件:玩家2拥有2食物
效果1:减去玩家2的骑士20生命
效果2:玩家2向盖亚进贡2食物
触发4:循环,开启
条件:玩家2拥有1食物
效果1:减去玩家2的骑士10生命
效果2:玩家2向盖亚进贡1食物
欢迎大家测试,如果发现问题请告诉我~ 沙发,马克,点赞 (up-find-remote c: tower-class c: 240);寻找塔类单位
up-find-remote這个最多只能找40个敌人单位 写240也没用还是最多就40个
拜托了别误导了人 樓主詳細分享, 感恩!
(blazefires, 說話客氣一點,誰做事一定不出錯?, 又不見你來分享?? 而且有例子, 教了這樣多東西, 我看不到有甚麼誤導.,)
页:
[1]