关于Beginner AI以及up group语句的疑问。
本帖最后由 春田一九零三 于 2020-2-26 11:43 编辑Beginner AI中,有一组语句这样: (up-create-group 0 0 c: retreat-group)————定义撤退组,并把本地结果存入
(up-set-group search-local c: retreat-group)————好像效果同上一句
(up-modify-group-flag 0 c: retreat-group)
(up-modify-group-flag 1 c: retreat-group)
(up-reset-group c: retreat-group)————撤销撤退组
对这段的意思不太理解。
up-modify-group-flag 这句经过测试,作用也不太理解
注解上说:Modify the ctrl group flag for units in a search group.
• Modify the ctrl group flag for units in a search group. You must manage the group flag carefully in order to avoid unexpected situations. Please remove the group flag before modifying a flagged search group. You can find units from a flagged search group using object-data-group-flag, which is set to the group id.
但实际上我无论怎么编号,都不能被检测flag的筛除语句影响
(up-remove-objects search-local object-data-group-flag c:== retreat-group)
以上 retreat-group定义为9
望解答,谢谢!
本帖最后由 春田一九零三 于 2020-2-26 13:33 编辑
目前的感觉,up group主要是针对搜索结果直接进行操作。
如果要调用某个组的话,只能通过flag筛选后取得。
(up-create-group 0 0 c: 组号)
这句是建立组,一切组的编号、计算都的先有这个。不用时要及时reset,否则影响后续组的建立。比如建立了9号组,但是没有reset,下次就无法向组内写入单位。
(up-set-group search-local c: 组号)
这句大概只是为了区别引用本地和远方搜索结果。平时必要性不高
(up-modify-group-flag 1 c: 组的flag号)
这句似乎涉及到:组和组flag是两个概念,一个单位可以因为不同的搜索结果被编入不同的组,但是只能有一个组flag。组被撤销时,单位的组flag不会消失。
例如:
(up-modify-group-flag 1 c: 9)
(up-modify-group-flag 1 c: 8)
比如连续写的话,这个单位最后同时属于8组和9组(对8、9组计算单位时,他都计入),但是做flag判断时只算9的。后写的flag不能覆盖,只能先通过 (up-modify-group-flag 0 c: 9)。 清除第9组单位的flag(哪怕这个flag此时是8)
总结来说,组只是各组交换单位的缓冲区。组flag才是真正的分组结果。标记,消除flag,都需要先建立组,再把要加,要消除flag的单位通过筛选方式纳入组内。加的组flag号,就是当前组(缓冲区)的编号。
比如先筛选得到9组单位20个,给他们加flag(编号为flag9)。
再筛选得到8组单位12个(都在前面20个内),消除他们的flag,再加flag(编号为8)。
此时9组单位20个,8组单位12个。编号flag9的单位8个,flag8的单位12个。
组和组编号flag大概是上面这种关系?
望大佬们指教补充
本帖最后由 blazefires 于 2020-2-26 20:29 编辑
(up-create-group 0 0 c: 0)———— 為local-search-list定一組群 等於人類按下ctrl+0編隊效果 所以最多只能40個 決定版不知道能否60個 這個我沒測試 至少玩家是可以60個
(up-set-group search-local c: 0)———— 這個等等單獨講
(up-modify-group-flag 0 c: 0) ———— 這個重要,為單位們先移除該組群標籤,防止出bug
(up-modify-group-flag 1 c: 0) ———— 為單位們加入第0組標籤 等同於 人類按下ctrl+0鍵
(up-reset-group c: 0)———— 你只是要編隊伍的話,這裡頭的單位數最好都清光光,上面提過了編隊最多就40個,不清光滿了就gg
簡單說 c: 0-9 groupid 就是等同於ctrl+1 ctrl+2 ctrl+3..... ctrl+0 這樣子,每隊最多40個
up-set-group這個是將group裡所有單位通通加入到local-list裡頭
意思是如果你只要加一個單位進local-list裡,就用(up-add-object-by-id search-local g: gl-store-id)那一次性加入所有單位到local-list裡,就用(up-set-group search-local c: 0) 將第0隊伍內所有單位加入到local-list裡
想了一下,依據實用程度還是少用up-reset-group清光光
舉例子,今天命令第3組裡頭共有30個單位前往某地點,有2方法:
1.
(defrule
(true)
=>
(up-full-reset-search)
(up-set-group search-local c: 3)
(up-target-point 0 action-default -1 -1)
)
2.
(defrule
(true)
=>
(up-full-reset-search)
(up-find-local c: ??? c: 240)
(up-remove-objects search-local object-data-group-flag c:!= 3)
(up-target-point 0 action-default -1 -1)
)
很明顯,第1方法執行速度快很多,效率高 up-set-group原来是选组存本地、远方的意思啊,谢谢了 本帖最后由 春田一九零三 于 2020-3-1 00:37 编辑
问题解决了,删除
本帖最后由 春田一九零三 于 2020-3-1 00:37 编辑
删除 本帖最后由 春田一九零三 于 2020-3-1 01:03 编辑
blazefires 发表于 2020-2-27 14:54
想了一下,依據實用程度還是少用up-reset-group清光光
舉例子,今天命令第3組裡頭共有30個單位前往某地點, ...
原来是想问为什么第一种方法失效的。然后发现把组reset了。本来以为解决了,但是回头一想其实您这两种方法不是等价的。
见我2楼最后的兰字,组和组flag不是一个概念。也就是up-create-group建立的是组
up-modify-group-flag则是组Flag(相当于您说的Ctrl+0)
您的第一种方法是把组的单位30个存到本地搜索里。
而第二中方法是在本地搜索结果中筛选出把带有组flag的单位30个。相当于是把带组flag的单位30个存到本地搜索结果里。
差别在哪里呢?因为一个单位可以同时在很多组里,但是他只能拥有一个组flag。
所以如果等效起来ai就会出bug了,这是我今天测试ai时发现的。
页:
[1]