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

[交流] 及时阻止人类玩家修围墙的代码

[复制链接]

3

主题

0

精华

107

积分

男爵

耕战
10
鹰币
50
天龙币
0
回帖
23
附庸关系0
 楼主| 发表于 2020-6-20 22:36:59 | 显示全部楼层 |阅读模式
;=====================================================================
;---------------------------防止玩家修围墙----------------------------
;=====================================================================
(defrule
        (up-timer-status 32 != timer-running)
        (game-time <= 960);16分钟前才检测
        (up-compare-goal gl-enemy-wall-count-total > 0);目标敌人墙的数量,使用up-get-player-fact获取
=>
        (up-modify-sn sn-focus-player-number s:= sn-target-player-number)
        (up-full-reset-search)
;        (up-filter-status c: status-pending c: list-active);只选择正在修建中的物体
;        (up-find-status-remote c: wall-class c: 1);up-find-status-remote;查找1个围墙类建筑
;        (up-set-target-object search-remote c: 0);选中这个围墙
;        (up-get-point position-object diren-object-point-x);获取到围墙坐标
;        (up-set-target-point diren-object-point-x);设置以这个围墙为中心点
;        (up-filter-distance c: -1 c: 4);选择4码内的所有物件
;======上述代码不知为何很难找到故只提供思路,以下面代码代替实现此功能
        (up-find-remote c: villager-class c: 240);索引村民类物件
        (up-remove-objects search-remote object-data-action != actionid-build);去掉不是正在修建状态的村民
        (up-remove-objects search-remote object-data-target != wall-class);去掉目标不是墙类物体的村民
        (up-clean-search 2 44 1);选择符合上述条件的距离最近的村民
        (up-get-search-state gl-remote-total);搜索计数
        (up-set-target-object search-remote c: 0);选中第一个村民
        (set-goal split-rule-goal 81);判断本检测过程是否运行
        (chat-to-allies "发现敌人开始修围墙了");告诉同盟
        (enable-timer 32 5))

(defrule
        (goal split-rule-goal 81)
        (military-population > 1);如果有兵的话包括侦察兵
        (up-compare-goal gl-remote-last > 0);搜索到新增物件
        (up-set-target-object search-remote c: 0);选中第一个物件
        (up-timer-status 18 != timer-running)
=>       
        (up-filter-include cmdid-military -1 -1 -1)
        (up-find-local c: -1 c: 240);选中所有军事单位
        (up-target-objects 0 0 -1 defensive);攻击修墙村民
        (chat-to-allies "攻击修墙的农民1")
        (up-jump-rule 1)
        (enable-timer 18 15))

;====下面这段是士兵不足,派6个村民攻击地方修墙村民
(defrule
        (goal split-rule-goal 81)
        (up-compare-goal gl-remote-last > 0)
        (military-population < 5)
        (up-timer-status 11 != timer-running)
        (up-set-target-object search-remote c: 0)
        (goal POSITION FLANK)
=>       
        (up-find-local c: villager-class c: 6)
        (up-target-objects 1 0 -1 -1)
        (chat-to-allies "攻击修墙的农民2")
        (enable-timer 11 8))

;上述代码并不完美,如果侦察兵不能看到地方村民修墙就无用。如有更好的思路欢迎指教!

评分

参与人数 1耕战 +10 鹰币 +30 收起 理由
newtonerdai + 10 + 30 分享交流

查看全部评分

回复

使用道具 举报

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16945
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
发表于 2020-6-23 03:52:54 | 显示全部楼层
第一条规则里的【(up-get-search-state gl-remote-total);搜索计数】,为什么不是gl-local-total呢,是错了还是骚操作



我仔细回想了一下高玩的操作。
黑快或封快时,如果前往骚扰进攻的小队见到了敌人的村民正在修墙,就会框选这个小队优先集火这些村民。
——所以up-find-local应该只搜索敌方建筑工若干格内的军事单位。
更有效的方法是,让一两个兵站到敌人的地基上。
——所以可以搜索建筑工附近的墙,获取墙与墙之间的连线,延长即可找到最近的空地,指派远程兵到那个格子里,且设置坚守姿态。
索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

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

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

使用道具 举报

3

主题

0

精华

107

积分

男爵

耕战
10
鹰币
50
天龙币
0
回帖
23
附庸关系0
 楼主| 发表于 2020-6-23 15:27:56 | 显示全部楼层
newtonerdai 发表于 2020-6-23 03:52
第一条规则里的【(up-get-search-state gl-remote-total);搜索计数】,为什么不是gl-local-total呢,是错了 ...

第一条规则不用local因为是搜索焦点玩家的农民,而不是从我方农民中查找。我用的防御姿态,士兵也不会跑很远攻击,同时如果有新的农民在后面不远处重新修墙也会自动攻击
回复

使用道具 举报

本版积分规则

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

GMT+8, 2024-12-20 20:45 , Processed in 0.165450 second(s), 50 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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