memomemo 发表于 2019-12-20 23:07:57

系统计算某个地方的敌人到底有多少个

不知道怎么用触发做一个效果:就是一群敌人(不限单位)到某个地方,系统会计算这个地方到底有多少敌人,会随着敌人的到来而增加,但不会随着敌人被杀或离开而减少。

我能想到的,就是:


触发1:条件-区域已有物体,数字为1;效果-变量值(赋予某个变量值+1),然后根据你在“分享一下我一个月以来的地编测试结论(写了好多啊……)”一贴中写的方式让它在右上角显示“有XX/20敌人已经到了某地”
触发2:条件-这个变量值大于等于20;效果:玩家战败


测试发现:如果触发1不循环则完全无效,但如果触发1循环的话,那么XX(数字)就会一直增长下去。


求助这是为啥?

newtonerdai 发表于 2019-12-20 23:21:50

https://www.hawkaoe.net/bbs/thread-116800-1-1.html
你需要先攻读完宝典,这样就不会被这些简单的问题困扰了

memomemo 发表于 2019-12-22 22:12:13

看来是我表达不清。我想实现的是,如何让1个敌方单位进入某个区域之后,计数器+1,但这个单位在进来之后就只+1了,无论这个单位在这个区域里是死是活,计数器都不变,直到下一个单位(可能是同一种,可能是其他单位)进来之后,计数器再+1。我看过帖子里关于那个“20匹马”的触发,有个动作是“移除”,但如果用了“移除”,就不符合逻辑了。

我是谁004 发表于 2019-12-22 23:04:52

这很简单,因为触发统计一次后,不会把已经统计过的排除在外。

像您要求的那种功能(在多个区域统计单位数量并求和)实现起来会很繁复,具体来说便是在条件区域A分别设置21个触发表示此处拥有1到20个单位,而且每次要先清零对应的变量值,然后拥有一个单位则值+1,拥有两个单位再+1……另外几处也如此,最后把变量的值加起来进行统计,这是能够想到通过触发实现的办法。

memomemo 发表于 2019-12-23 14:14:13

我是谁004 发表于 2019-12-22 23:04
这很简单,因为触发统计一次后,不会把已经统计过的排除在外。

像您要求的那种功能(在多个区域统计单位数 ...

那这个事情确实比较复杂:如果有4个敌人的话,要做到任意4个敌人的任意20个单位到达某处,再触发某效果,确实比较困难。

春田一九零三 发表于 2020-3-12 23:43:32

用ai语句直接清点区域内某种敌对单位总量,然后用资源形式反馈到游戏中供触发提取即可

部分范例供参考
;// 判断敌情第1类:长枪系 //

(defrule
    (up-compare-goal TROOP > 0)                                                        ;游击队模式开启
=>
    (up-full-reset-search)                                                        ;重置直接寻的系统的搜索索引和筛选状态、搜索状态
    (up-get-search-state gl-local-total)                                        ;重置搜索数量
    (set-goal gl-player 1)                                                        ;初始化搜索从玩家1开始
    (up-modify-sn sn-focus-player-number g:= gl-player)                                ;设置当前玩家为焦点玩家
    (up-modify-goal gl-point-x4 c:= 0)                                                ;初始化搜索结果为0
)

;// 判断敌情第1类:循环起点C1 //

(defrule
    (up-compare-goal TROOP > 0)                                                        ;游击队模式开启
    (or (players-stance focus-player enemy)                                        ;只侦察敌对或中立玩家
        (players-stance focus-player neutral))
=>
    (up-set-target-point gl-point-x5)                                                ;将游击队分布重心座标x5,y5设置为搜索圆点
    (up-filter-distance c: -1 c: 10)                                                ;设置搜索半径为10
                                                                                ;搜索筛选条件必须和后面分开,否则会出错
)

(defrule
    (up-compare-goal TROOP > 0)                                                        ;游击队模式开启
    (or (players-stance focus-player enemy)                                        ;只侦察敌对或中立玩家
        (players-stance focus-player neutral))
=>
    (up-find-remote c: spearman-line c: 40)                                        ;搜索指定的有威胁单位(长枪系)
    (up-get-search-state gl-local-total)                                        ;记录搜索记录
    (up-modify-goal gl-point-x4 g:+ gl-remote-total)                                ;累加威胁单位数量
    (up-reset-search 0 0 0 1)                                                        ;保留远程索引,清除远程搜索结果
)

(defrule
    (up-compare-goal TROOP > 0)                                                        ;游击队模式开启
    (or (players-stance focus-player enemy)                                        ;只侦察敌对或中立玩家
        (players-stance focus-player neutral))
    (up-compare-goal gl-remote-total == 40)                                        ;游击队模式开启
=>
    (up-jump-rule -2)                                                                ;跳回上一条语句起始处
)

(defrule
    (up-compare-goal TROOP > 0)                                                        ;游击队模式开启
    (up-compare-goal gl-player < 8)
=>
    (up-modify-goal gl-player c:+ 1)                                                ;搜索下一个玩家
    (up-modify-sn sn-focus-player-number g:= gl-player)                                ;设置当前玩家为焦点玩家
    (up-full-reset-search)                                                        ;重置直接寻的系统的搜索索引和筛选状态、搜索状态
    (up-get-search-state gl-local-total)                                        ;重置搜索数量
    (up-jump-rule -4)                                                                ;跳回循环起点C1
)

最终结果存放在gl-point-x4里
页: [1]
查看完整版本: 系统计算某个地方的敌人到底有多少个