骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
查看: 6480|回复: 19

[功能与代码] 一个很简单的【关隘系统】

[复制链接]

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
发表于 2021-8-16 13:44:36 | 显示全部楼层 |阅读模式
本帖最后由 幼稚园殺手 于 2021-8-16 13:55 编辑

大家好,我是晚明悲歌的作者,不少喜欢晚明的玩家一直在说想要一个关隘系统,于是昨天晚上我写了一个很简单的关隘系统,用于限制玩家的,贴上代码,只需要用到一个简单触发器即可。
注:代码仅提供思路,思路是:先获取玩家和关隘的距离,如果在2-4的范围内记录当前坐标,小于2就立刻回到刚刚记录的坐标。
如果照搬,需要自己完善,照搬后玩家将一直无法攻打那个城市,无论什么情况下都被限制住了。


  (0,#时间设置为0就是让他一直触发不会被钻空子
   [      (map_free),#大地图中是空闲的,也就是说被俘虏的情况排除了,我怕俘虏的时候带你过关会出问题。
          (store_distance_to_party_from_party, ":distance", "p_main_party", "p_castle_23"),#获取玩家部队和你想要限制关隘之间的距离
          (try_begin),#开始判断
             (is_between,":distance",2,4),#距离要是在2-4之间
             (party_get_position, pos16, "p_main_party"),#记录下当前的坐标
          (else_try),
             (lt, ":distance", 2),#距离小于2
             (party_set_position,"p_main_party",pos16),#设置玩家的坐标为刚刚记录的坐标
          (try_end),#结束
    ]),

这个是我录制的一个视频,演示晚明的关隘系统,这个是我经过完善处理的,上述的问题都得到了解决。
关隘系统功能演示_骑马与砍杀 (bilibili.com)
视频演示的是玩家靠近关隘【山海关】后,无论哪一边都无法过去,会提示缺少通关印,必须得持有通关印才可以通行,如果只想攻打这座城,靠近城按G即可开启选项,当持有通关印后进入关隘会显示您已持有通关印可以随意通行。关隘系统只限玩家,当镇守山海关的大臣是和玩家一个阵营的大臣或山海关被玩家攻下,则也可以随意通行

评分

参与人数 2第纳尔 +30 互助 +1 魅力 +15 收起 理由
Aomine Daiki + 20 文章不错,继续努力!
muyiboy + 10 + 1 + 15 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

半世尘埃  在2021-8-22 21:15  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
djman  在2021-8-18 18:13  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
zendenxx  在2021-8-18 12:59  送朵鲜花  并说:送朵鲜花
珍惜 奉献 不负韶华

60

主题

448

回帖

357

积分

见习骑士

Rank: 3

UID
2741644
第纳尔
5698
精华
0
互助
37
荣誉
2
贡献
15
魅力
403
注册时间
2016-4-23

骑砍中文站APP会员勋章霸主正版勋章

鲜花(157) 鸡蛋(0)
发表于 2021-8-16 15:57:32 | 显示全部楼层
pos16就是距离等于2的位置,用不着2-4之间

鲜花鸡蛋

幼稚园殺手  在2021-8-17 11:16  送朵鲜花  并说:我觉得一个范围比较好,直接2也可以,谢谢你的建议
★★★【三国群英赋】★★★

18

主题

1442

回帖

508

积分

皇家侍卫长[官方战队队长]

光辉骑士团[UTD]
战团ID:UTD_awe23

Rank: 6Rank: 6

UID
2102975
第纳尔
7304
精华
0
互助
10
荣誉
2
贡献
0
魅力
73
注册时间
2014-8-1

第十一届战团中国联赛征战勋章第十一届战团中国联赛铁骨勋章第一届梦幻联赛参与勋章第十届战团中国联赛征战勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章霸主正版勋章

鲜花(76) 鸡蛋(2)
发表于 2021-8-16 16:06:23 | 显示全部楼层
如果有其他触发器修改了pos16的值,你这个是会有问题的

鲜花鸡蛋

幼稚园殺手  在2021-8-17 11:17  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-16 17:45:59 | 显示全部楼层
BattleField 发表于 2021-8-16 16:06
如果有其他触发器修改了pos16的值,你这个是会有问题的

新设置一个没有占用的pos即可
珍惜 奉献 不负韶华

54

主题

894

回帖

339

积分

见习骑士

游骑士战队[YQS]
联机ID:Apple_PAI

Rank: 3

UID
3218444
第纳尔
106
精华
0
互助
11
荣誉
0
贡献
0
魅力
26
注册时间
2021-1-30

战团正版勋章2022国庆青训杯冠军勋章第一届拿破仑中国刺刀联赛近卫勋章霸主正版勋章拿破仑正版勋章

鲜花(110) 鸡蛋(0)
发表于 2021-8-17 16:59:10 | 显示全部楼层
本帖最后由 NEW_SHIT 于 2021-8-17 17:50 编辑

我好像在这发了个魔球版的,好像还在审核,我现在看不到。。。那个是有错的,不过恳请楼主发个魔球版的,毕竟99%的骑友都不用PY。。。。
苹果派真好吃嘿嘿嘿

52

主题

443

回帖

269

积分

贵族[MOD作者]

Rank: 7Rank: 7Rank: 7

UID
2743526
第纳尔
2436
精华
0
互助
18
荣誉
3
贡献
10
魅力
252
注册时间
2016-5-3

霸主正版勋章

鲜花(198) 鸡蛋(0)
发表于 2021-8-17 17:24:38 | 显示全部楼层
本帖最后由 黑脸小白 于 2021-8-17 17:32 编辑

国风mod确实需要关隘,不然总少点那味,不过应该没有完美的限制ai的方法,尤其是关隘数目比较多的时候,计算量更是成倍的翻。去年我做三国魂的时候,对于ai部队与关隘的判断,写了几个脚本和两个触发器,试了几种办法,都不尽如人意:最开始想法简单,也比较天真,想找个有没有靠近pos时设置地形的操作,结果发现只有获取的,自然作罢;
然后又试第二种方法,就是让ai部队靠近关隘时不动,可惜因为战团里写好的各种party_ai,没法让领主部队hold,hold一会儿他又会因为其他的脚本继续行动,要改变这个,除非把整个战团的ai部队相关代码都改一下;
第三种方法,我是让ai部队接近关隘就逃跑,结果也不好,因为如果设置的距离太远,那计算量卡的不要不要的,而且看起来有时很假,大老远的就看到领主正在逃离……如果距离太近,又容易逃到关隘里面去,这更糟糕;
接着又试第四种方法,让走近关隘的领主移速为0,也就是面向关隘时移速为零,再设置他逃跑,这时会背对关隘,然后再设置背对时恢复原速,他就离开了,这个方法,是我试出来效果最好的,理想状态是100%生效,但是这要求触发器的间隔必须极小,不然基本无效,而这带来的是巨大的负担,后来只好增大触发间隔,保证90%以上的效果,但是因为间隔的缘故,这几个步骤在视觉效果上很不连贯,不过我也想不到更好的办法了……

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-17 19:46:06 | 显示全部楼层
NEW_SHIT 发表于 2021-8-17 16:59
我好像在这发了个魔球版的,好像还在审核,我现在看不到。。。那个是有错的,不过恳请楼主发个 ...

魔球自从学PY后我就再也没碰过了欸,你看看你会转嘛,可以弄一个魔球的,但是这个代码只是给框架的,要是复制粘贴达不到效果,还要自行加点东西,比如设置关隘是自己的人就不限制,再比如想要攻打关隘该怎么办等等
珍惜 奉献 不负韶华

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-17 19:48:11 | 显示全部楼层
本帖最后由 幼稚园殺手 于 2021-8-17 19:51 编辑
黑脸小白 发表于 2021-8-17 17:24
国风mod确实需要关隘,不然总少点那味,不过应该没有完美的限制ai的方法,尤其是关隘数目比较多的时候,计 ...

限制AI的关隘比较麻烦,要考虑的可比我这个大多了,限制玩家的简单,限制AI要考虑的因素很多,最简单的也就是,敌国领主靠近关隘,就强制攻打。
珍惜 奉献 不负韶华

54

主题

894

回帖

339

积分

见习骑士

游骑士战队[YQS]
联机ID:Apple_PAI

Rank: 3

UID
3218444
第纳尔
106
精华
0
互助
11
荣誉
0
贡献
0
魅力
26
注册时间
2021-1-30

战团正版勋章2022国庆青训杯冠军勋章第一届拿破仑中国刺刀联赛近卫勋章霸主正版勋章拿破仑正版勋章

鲜花(110) 鸡蛋(0)
发表于 2021-8-17 21:14:54 | 显示全部楼层
幼稚园殺手 发表于 2021-8-17 19:46
魔球自从学PY后我就再也没碰过了欸,你看看你会转嘛,可以弄一个魔球的,但是这个代码只是给框架的,要是 ...

我做了一个雏形,完全模仿版主大大做的:
(map_free),
(assign,":var_0","p_main_party"),
(assign,":var_2","p_castle_16"),
(get_sq_distance_between_positions_in_meters,":var_1",":var_0",":var_2"),
(try_begin),
    (is_between,":var_1",10,20),
    (party_get_position,pos1,"p_main_party"),
(else_try),
    (eq,":var_1",10),
    (party_set_position,"p_main_party",pos1),
(try_end),
用的是阿美拉堡,但是没用,求版主大大指导。。。。
苹果派真好吃嘿嘿嘿

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-17 21:46:15 | 显示全部楼层
本帖最后由 幼稚园殺手 于 2021-8-17 21:48 编辑
NEW_SHIT 发表于 2021-8-17 21:14
我做了一个雏形,完全模仿版主大大做的:
(map_free),
(assign,":var_0","p_main_party"),

get_sq_distance_between_positions_in_meters这个意思是获取两地距离的平方,不是距离,这个才是距离get_distance_between_positions,还有不要用pos1,找一个不占用的pos例如往后一点的pos6010-20范围包括10的,然后你再用等于10,应该会出错,要小于10比较好,而且10的范围还是比较大的,
珍惜 奉献 不负韶华

54

主题

894

回帖

339

积分

见习骑士

游骑士战队[YQS]
联机ID:Apple_PAI

Rank: 3

UID
3218444
第纳尔
106
精华
0
互助
11
荣誉
0
贡献
0
魅力
26
注册时间
2021-1-30

战团正版勋章2022国庆青训杯冠军勋章第一届拿破仑中国刺刀联赛近卫勋章霸主正版勋章拿破仑正版勋章

鲜花(110) 鸡蛋(0)
发表于 2021-8-18 10:49:54 | 显示全部楼层
幼稚园殺手 发表于 2021-8-17 21:46
get_sq_distance_between_positions_in_meters这个意思是获取两地距离的平方,不是距离,这个才是距离get ...

(map_free),
(assign,":var_0","p_main_party"),
(assign,":var_2","p_castle_16"),
(get_distance_between_positions_in_meters,":var_1",":var_0",":var_2"),
(try_begin),
    (is_between,":var_1",2,4),
    (party_get_position,pos16,"p_main_party"),
(else_try),
    (eq,":var_1",2),
    (party_set_position,"p_main_party",pos16),
(try_end),
还是没用QAQ
苹果派真好吃嘿嘿嘿

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-18 11:10:51 | 显示全部楼层
NEW_SHIT 发表于 2021-8-18 10:49
(map_free),
(assign,":var_0","p_main_party"),
(assign,":var_2","p_castle_16"),

你试试看不赋值,直接把p_main_party和p_castle_16替换了var_0和var_2,eq换成lt
珍惜 奉献 不负韶华

54

主题

894

回帖

339

积分

见习骑士

游骑士战队[YQS]
联机ID:Apple_PAI

Rank: 3

UID
3218444
第纳尔
106
精华
0
互助
11
荣誉
0
贡献
0
魅力
26
注册时间
2021-1-30

战团正版勋章2022国庆青训杯冠军勋章第一届拿破仑中国刺刀联赛近卫勋章霸主正版勋章拿破仑正版勋章

鲜花(110) 鸡蛋(0)
发表于 2021-8-18 11:50:17 | 显示全部楼层
幼稚园殺手 发表于 2021-8-18 11:10
你试试看不赋值,直接把p_main_party和p_castle_16替换了var_0和var_2,eq换成lt

不赋值也不行,而且魔球识别不了it
苹果派真好吃嘿嘿嘿

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-18 12:17:10 | 显示全部楼层
NEW_SHIT 发表于 2021-8-18 11:50
不赋值也不行,而且魔球识别不了it

这样子吗,我没用魔球写过触发器,2-4这个2和下面的2重复了,下面那个改成1试试看
珍惜 奉献 不负韶华

170

主题

2997

回帖

1390

积分

骑士长

宫廷画师

Rank: 5Rank: 5Rank: 5

UID
120620
第纳尔
12757
精华
0
互助
58
荣誉
15
贡献
20
魅力
696
注册时间
2009-3-17

元老骑士勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之慷慨勋章骑砍中文站微博会员勋章骑砍中文站微信会员勋章骑友真人秀Ⅲ勋章骑友真人秀Ⅳ勋章骑友真人秀Ⅴ勋章骑友真人秀Ⅵ勋章骑友真人秀终身成就勋章

鲜花(852) 鸡蛋(0)
发表于 2021-8-18 12:59:02 | 显示全部楼层
改了流逝的话,玩家走到关卡估计会像啄木鸟一样前前后后,

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-18 13:17:50 | 显示全部楼层
zendenxx 发表于 2021-8-18 12:59
改了流逝的话,玩家走到关卡估计会像啄木鸟一样前前后后,

不会这么明显,视频里是我的测试只会卡在原地,看代码也是如此,一个是小于2,一个是2,这两个差距很小很小
珍惜 奉献 不负韶华

0

主题

7

回帖

2

积分

平民

Rank: 1

UID
3216111
第纳尔
77
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-1-18

骑砍中文站APP会员勋章霸主正版勋章战团正版勋章

鲜花(0) 鸡蛋(0)
发表于 2021-8-25 19:47:09 | 显示全部楼层
楼主有没有粉丝群呀

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-25 21:28:50 | 显示全部楼层
会背ABC 发表于 2021-8-25 19:47
楼主有没有粉丝群呀

玩家群倒是有413098948
珍惜 奉献 不负韶华

44

主题

393

回帖

291

积分

见习骑士

Rank: 3

UID
1941209
第纳尔
2845
精华
0
互助
26
荣誉
3
贡献
0
魅力
38
注册时间
2014-5-5

战团正版勋章维京征服正版勋章

鲜花(129) 鸡蛋(0)
发表于 2021-8-27 14:13:32 来自手机 | 显示全部楼层
如果考虑运行效率的话,建议用游戏内置的一个game_event处理,scripts中搜sees可以找到,是“当部队1看到部队2“时触发的,比循环所有部队好用多了。另外,领主改变ai策略时,建议备份一下他的目标和行为,以方便操作完后恢复他的行动。””

鲜花鸡蛋

幼稚园殺手  在2021-8-27 21:29  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

55

主题

2716

回帖

1756

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23959
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
 楼主| 发表于 2021-8-27 14:15:02 来自手机 | 显示全部楼层
nimoadna 发表于 2021-8-27 14:13
如果考虑运行效率的话,建议用游戏内置的一个game_event处理,scripts中搜sees可以找到,是“当部队1看到部 ...

好的 感谢大佬指点
来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-5-28 05:05 , Processed in 0.153752 second(s), 36 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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