找回密码
 注册

STEAM登陆

绑定游戏账号后可使用

QQ登录

只需一步,快速开始

查看: 1932|回复: 15
收起左侧

ZM密码门原理(part4_关卡密码门)

[复制链接]

签到天数: 208 天

[LV.7]常住居民III

64

主题

751

回帖

5931

积分

♪(^∇^*)

UID
58302
僵尸币
27935
贡献度
100
注册时间
2019-5-8
在线时间
691 小时
最后登录
2024-11-4

C.CC.C 2小叽

发表于 2020-2-17 06:30:44 | 显示全部楼层 |阅读模式
游戏昵称:不科学 | 拥有金币:9797 | SteamID: STEAM_0:1:177311469 | 玩家信息

不注册个乐园论坛账号能玩??

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 不科学 于 2020-3-4 19:46 编辑

-----------------------------------------------------------------------------------------
汇总贴:https://bbs.zombieden.cn/thread-67650-1-1.html
-----------------------------------------------------------------------------------------

1).和之前一样,我们先准备一个盒子,一个门,以及12个按钮,还有两个实体:

        logic_auto :每一回合会自动执行它里面的内容,点实体(开局都会有作者:xxxxx,感谢xxxxx之类的信息,都可以用这个来做)
        
        func_brush :这东西和门类似,但是它不是开与关,而是消失与出现

        命名如下:

        门:door
        按钮:button_0,button_1 , ................. , button_9 , button_reset , button_ok
        
        func_brush : lv_brush
        logic_auto : 这玩意不需要命名
               
         4_1.png

2).原理大致介绍:

        func_brush的状态是不会随着回合结束而重置的,也就是说,如果第一局最后它是消失的状态,那么第二局它也是消失的状态。
        所以,func_brush常用在ze关卡系统的制作:在brush上方放一个物体,在brush下方放一个触发区域。
               
        如果第一局过关了,那么就在核爆的时候让brush消失,所以第二局的时候,brush上面的物体就会掉下来,碰到下面的触发区域,触发第二关的内容。
        多个brush合在一起,就做成了ze里常见的关卡系统。
               
        然鹅,多个brush合在一起对于关卡密码门来说,太麻烦了,毕竟如果延长拉满,十几局的话,就要做十几个相对于brush触发来修改密码,
        所以,为了方便起见,这里使用了脚本来控制(同时也适用于ze的关卡控制)
               
        brush不会随着回合重置而重置,里面的脚本存放的变量也一样不会被重置,我们利用这个特性,就可以做出关卡密码门了。
               
        

***************************
制作如下:
***************************
        
        在Counter-Strike Global Offensive\csgo\scripts\vscripts 目录下创建一个txt文本格式,名称为part4,后缀改成.nut格式,然后加入以下函数
        
        //首先,在脚本里面创建一个记录关卡的变量lv,一个根据lv生成的密码pw_generate,以及玩家输入的密码pw_player
        lv <- 0;                             //记录当前是第几局,初始值是0
        pw_generate <- null;    //根据当前是第几局生成的密码
        pw_player <- 0;                        //玩家输入的密码

        //然后,在脚本里面写入函数,让logic_auto在每一回合开始的时候执行这个函数
        function changelv(){

        lv = lv + 1 ;                        //热身局(初始值)是0,第一局lv+1就变成了1,第二局就变成了2
        
        pw_generate = lv * 8;  //生成密码,密码为当前局数*8,第一局密码是8,第二局是16,依次类推,每回合密码都不同
        
        }  
               
        //各个按钮对应的函数
        function button1(){pw_player = pw_player * 10 + 1;}
        function button2(){pw_player = pw_player * 10 + 2;}
        function button3(){pw_player = pw_player * 10 + 3;}
        function button4(){pw_player = pw_player * 10 + 4;}
        function button5(){pw_player = pw_player * 10 + 5;}
        function button6(){pw_player = pw_player * 10 + 6;}
        function button7(){pw_player = pw_player * 10 + 7;}
        function button8(){pw_player = pw_player * 10 + 8;}
        function button9(){pw_player = pw_player * 10 + 9;}
        function button0(){pw_player = pw_player * 10 + 0;}

        //pw_player是玩家输入的密码,初始值是0
        //当玩家按下按钮1的时候,运行button1()函数 pw_player = 0 * 10 + 1 = 1
        //当玩家按下按钮2的时候,运行button2()函数 pw_player = 1 * 10 + 2 = 12
        //当玩家按下按钮3的时候,运行button3()函数 pw_player = 12 * 10 + 3 = 123
        //当玩家按下按钮4的时候,运行button4()函数 pw_player = 123 * 10 + 4 = 1234
        //所以,按下按钮1234之后,玩家输入的密码pw_player就变成了1234


        //重置按钮的函数
        function buttonreset(){
                pw_player = 0 ;  //让玩家密码归零
        }

        //确认按钮的函数
        function buttonok()
        {
                //如果玩家输入的密码和根据当前局数生成的密码一样,就让门打开,然后3秒后关闭
                if(pw_generate == pw_player)
                {
                        EntFire("door","Open","",0.0);
                        EntFire("door","Close","",3.0);
                }
               
                //然后重置玩家的密码,不然第一个人输入正确进去后,玩家的密码没变,第二个人只需要按下确认键,门就开了
                pw_player = 0;

        }

******************************************************
以上便是脚本内容,接着我们回到hammer
******************************************************

1.在func_brush中添加你的脚本part4.nut
4-2.png

2.给logic_auto添加输出
4-3.png
这条输出的意思是,当地图生成的时候(OnMapSpawn),让brush,运行代码(RunScriptCode)  changlv()
        
        function changelv(){
        lv = lv + 1 ;                        //热身局(初始值)是0,第一局lv+1就变成了1,第二局就变成了2
        pw_generate = lv * 8;  //生成密码,密码为当前局数*8,第一局密码是8,第二局是16,依次类推,每回合密码都不同
        }
        
3.给各个按钮添加对应的输出:
4-4.png
这条输出的意思是,当按钮1按下的时候,就让brush运行函数button1()
按钮2-按钮9同理,把button1()改成button2().....button9()

        //各个按钮对应的函数
        function button1(){pw_player = pw_player * 10 + 1;}
        function button2(){pw_player = pw_player * 10 + 2;}
        function button3(){pw_player = pw_player * 10 + 3;}
        function button4(){pw_player = pw_player * 10 + 4;}
        function button5(){pw_player = pw_player * 10 + 5;}
        function button6(){pw_player = pw_player * 10 + 6;}
        function button7(){pw_player = pw_player * 10 + 7;}
        function button8(){pw_player = pw_player * 10 + 8;}
        function button9(){pw_player = pw_player * 10 + 9;}
        function button0(){pw_player = pw_player * 10 + 0;}

        //pw_player是玩家输入的密码,初始值是0
        //当玩家按下按钮1的时候,运行button1()函数 pw_player = 0 * 10 + 1 = 1
        //当玩家按下按钮2的时候,运行button2()函数 pw_player = 1 * 10 + 2 = 12
        //当玩家按下按钮3的时候,运行button3()函数 pw_player = 12 * 10 + 3 = 123
        //当玩家按下按钮4的时候,运行button4()函数 pw_player = 123 * 10 + 4 = 1234
        //所以,按下按钮1234之后,玩家输入的密码pw_player就变成了1234


重置按钮就运行buttonreset()

        function buttonreset(){
                pw_player = 0 ;  //让玩家密码归零
        }

确认按钮就运行buttonok()

        function buttonok()
        {
                //如果玩家输入的密码和根据当前局数生成的密码一样,就让门打开,然后3秒后关闭
                if(pw_generate == pw_player)
                {
                        EntFire("door","Open","",0.0);
                        EntFire("door","Close","",3.0);
                }
               
                //然后重置玩家的密码,不然第一个人输入正确进去后,玩家的密码没变,第二个人只需要按下确认键,门就开了
                pw_player = 0;

        }
        

这样,一个根据回合局数变化的密码门就做好了,每一回合密码都不一样,一定程度上防止了观察者。
(简单起见这里生成的密码是回合数的8倍(pw_generate = lv * 8),其实可以根据各种计算,来扩充密码的位数。)

然鹅,在实际进入地图操作的时候
一进入地图,热身的时候lv=2  pw=16
热身结束后           lv=3  pw=24
如图所示,规律是正确的,+1然后*8,但是起点却不是0

4-44.png


个人认为原因可能如下:

服务器创建地图,玩家还没加入,但是地图已经生成,所以此时logic_auto正常运行,将lv+1,于是lv=1
然后第一个玩家进入地图后,游戏开始,服务器刷新一次,变成热身局,此时logic_auto正常运行,将lv+1,于是lv=2

所以,热身局是lv是2,第一局lv是3,第二局lv是4

当然,因为我没有创建过服务器,所以暂时不知道服务器创建地图的具体流程,仅仅是猜测。

但是,这其中的规律是正确的,确实可以让logic_auto每回合让lv增加1,并且保留到下一局,于是,关卡密码门就产生了。每一局的密码都不一样,但是有规律可循。
(你要做的就是找个扩散的方式,把这个规律掩盖掉。)
如果是想要在ze中运用这个brush脚本控制关卡的话,建议创建变量的时候让lv=1,即初始值默认为第一关
然后在第一关核爆的时候,运行lv = 2,这样就变成了第二关(不要用lv=lv+1)
4-45.png


以上---完毕。



评分

参与人数 1僵尸币 +50 收起 理由
青葉 + 50 cheered!!!

查看全部评分

我跟你讲,这瓜超甜的!(推销~)


回复

使用道具 举报

签到天数: 449 天

[LV.9]以坛为家II

133

主题

3975

回帖

2万

积分

车万迷

UID
60126
僵尸币
7966
贡献度
0
注册时间
2019-7-26
在线时间
704 小时
最后登录
2024-9-2
发表于 2020-2-17 09:03:12 | 显示全部楼层
游戏昵称:生死聚一梦 | 拥有金币:378 | SteamID: STEAM_0:1:427091767 | 玩家信息
回复

使用道具 举报

签到天数: 21 天

[LV.4]偶尔看看III

0

主题

85

回帖

521

积分

UID
65281
僵尸币
8103
贡献度
0
注册时间
2020-2-6
在线时间
11 小时
最后登录
2020-4-16
发表于 2020-2-17 09:06:44 | 显示全部楼层
游戏昵称:白井黑子 | 拥有金币:577 | SteamID: STEAM_0:1:206750099 | 玩家信息
回复

使用道具 举报

签到天数: 626 天

[LV.9]以坛为家II

5

主题

3276

回帖

2万

积分

UID
64490
僵尸币
52659
贡献度
0
注册时间
2020-1-16
在线时间
1402 小时
最后登录
2021-12-4

艾尔薇·拉娜·希尔菲丝 布兰奈玖·加尔提尼亚斯吴羽冬华水银灯水银灯2幽幽子壹原侑子久远寺森罗泽库蒂·爱因C.CC.C 2C.C 3

发表于 2020-2-17 09:12:38 | 显示全部楼层
游戏昵称:HaPpPyYy* | 拥有金币:17049 | SteamID: STEAM_0:0:109268013 | 玩家信息
回复

使用道具 举报

签到天数: 149 天

[LV.7]常住居民III

11

主题

2215

回帖

1万

积分

UID
64049
僵尸币
5688
贡献度
0
注册时间
2019-12-29
在线时间
382 小时
最后登录
2025-1-11

捐助贡献奖章

发表于 2020-2-17 09:16:08 | 显示全部楼层
游戏昵称:万里星河不及你 | 拥有金币:317 | SteamID: STEAM_0:1:241313080 | 玩家信息
回复

使用道具 举报

签到天数: 316 天

[LV.8]以坛为家I

8

主题

2828

回帖

1万

积分

UID
63961
僵尸币
92212
贡献度
10
注册时间
2019-12-24
在线时间
971 小时
最后登录
2021-3-10
发表于 2020-2-17 09:58:58 | 显示全部楼层
游戏昵称:Igorrr | 拥有金币:849 | SteamID: STEAM_0:0:517852383 | 玩家信息
回复

使用道具 举报

签到天数: 1922 天

[LV.Master]伴坛终老

60

主题

1万

回帖

6万

积分

UID
58920
僵尸币
110580
贡献度
0
注册时间
2019-6-18
在线时间
2079 小时
最后登录
2025-5-9

艾尔薇·拉娜·希尔菲丝蒂法伊芙久远寺森罗泽库蒂·爱因水银灯2吴羽冬华 布兰奈玖·加尔提尼亚斯小叽手冢国光越前龙马壹原侑子拉克丝·克莱茵C.C 2凌波丽C.C初音虚子泉此方夏娜春日结乃神乐阿布水银灯蒂安娜·兰斯达初音2长门有希

发表于 2020-2-17 10:06:02 | 显示全部楼层
游戏昵称:1091520 | 拥有金币:97 | SteamID: STEAM_0:0:425389811 | 玩家信息
回复

使用道具 举报

签到天数: 684 天

[LV.9]以坛为家II

13

主题

2754

回帖

1万

积分

UID
61586
僵尸币
108606
贡献度
0
注册时间
2019-8-29
在线时间
436 小时
最后登录
2025-3-10

捐助贡献奖章萨菲罗斯扎克斯蒂法

发表于 2020-2-17 10:08:45 | 显示全部楼层
游戏昵称:JiE | 拥有金币:107013 | SteamID: STEAM_0:1:510813184 | 玩家信息
回复

使用道具 举报

签到天数: 330 天

[LV.8]以坛为家I

30

主题

4098

回帖

2万

积分

UID
60851
僵尸币
40516
贡献度
0
注册时间
2019-8-13
在线时间
2356 小时
最后登录
2024-9-29

捐助贡献奖章坂田银时神乐冲田总悟土方十四郎长门有希凉宫春日

发表于 2020-2-17 10:15:45 | 显示全部楼层
游戏昵称:YuhanSc | 拥有金币:65995 | SteamID: STEAM_0:0:425671004 | 玩家信息
玩游戏最要的是开心
拉闸越多心态越好,还能过,都可以过QAQ
回复

使用道具 举报

签到天数: 2382 天

[LV.Master]伴坛终老

25

主题

1万

回帖

9万

积分

UID
45546
僵尸币
1672867
贡献度
0
注册时间
2016-1-10
在线时间
1376 小时
最后登录
2025-5-10

路飞夏娜初音凉宫春日坂田银时伊芙初音2凉宫春日2虚子春日结乃长门有希泉此方2呜人鲁鲁修土方十四郎雷米莉亚幽幽子水银灯C.CC.C 2C.C 3神乐冲田总悟手冢国光凌波丽阿布小叽水银灯2久远寺森罗壹原侑子艾尔薇·拉娜·希尔菲丝 布兰奈玖·加尔提尼亚斯吴羽冬华泉此方关羽泽库蒂·爱因拉克丝·克莱茵越前龙马蒂安娜·兰斯达萨菲罗斯扎克斯捐助贡献奖章蒂法红月卡莲

发表于 2020-2-17 10:46:09 | 显示全部楼层
游戏昵称:树叶 | 拥有金币:22618 | SteamID: STEAM_0:1:56528967 | 玩家信息
回复

使用道具 举报

签到天数: 2839 天

[LV.Master]伴坛终老

160

主题

4万

回帖

24万

积分

八尾妖姬抱回家,没日没夜啪啪啪~~~

UID
51796
僵尸币
3759333
贡献度
0
注册时间
2017-4-24
在线时间
6588 小时
最后登录
2025-5-10

捐助贡献奖章矢泽妮可

发表于 2020-2-17 11:21:01 | 显示全部楼层
游戏昵称:Regulus | 拥有金币:16860 | SteamID: STEAM_0:0:185766483 | 玩家信息
▂▂▂▂▂▂▂▂▃▃▃▃▃▃▃▃▅▅▅▅▅▅▅▅▆▆▆▆▆▆▆▆▆▇▇▇▇▇▇▇▇▇斗破苍穹,水破天际▇▇▇▇▇▇▇▇▇▆▆▆▆▆▆▆▆▆▅▅▅▅▅▅▅▅▃▃▃▃▃▃▃▃▂▂▂▂▂▂▂▂
回复

使用道具 举报

签到天数: 1605 天

[LV.Master]伴坛终老

56

主题

1万

回帖

6万

积分

UID
59216
僵尸币
137208
贡献度
0
注册时间
2019-6-27
在线时间
2116 小时
最后登录
2025-4-30

捐助贡献奖章萨菲罗斯蒂法扎克斯夏娜雷米莉亚幽幽子泉此方泉此方2水银灯水银灯2凌波丽 布兰奈玖·加尔提尼亚斯初音初音2凉宫春日C.CC.C 2C.C 3路飞呜人鲁鲁修凉宫春日2长门有希关羽拉克丝·克莱茵艾尔薇·拉娜·希尔菲丝伊芙虚子春日结乃小叽吴羽冬华泽库蒂·爱因久远寺森罗壹原侑子蒂安娜·兰斯达红月卡莲神乐阿布坂田银时冲田总悟土方十四郎手冢国光越前龙马

发表于 2020-2-17 12:21:47 | 显示全部楼层
游戏昵称:焚化炉 | 拥有金币:5018 | SteamID: STEAM_0:1:110456410 | 玩家信息
回复

使用道具 举报

签到天数: 570 天

[LV.9]以坛为家II

11

主题

4944

回帖

3万

积分

UID
59813
僵尸币
121484
贡献度
0
注册时间
2019-7-17
在线时间
1108 小时
最后登录
2025-5-9
发表于 2020-2-17 12:25:10 | 显示全部楼层
游戏昵称:雪皋 | 拥有金币:519 | SteamID: STEAM_0:1:234185036 | 玩家信息
回复

使用道具 举报

签到天数: 361 天

[LV.8]以坛为家I

16

主题

4061

回帖

2万

积分

UID
46446
僵尸币
254952
贡献度
0
注册时间
2016-2-20
在线时间
764 小时
最后登录
2024-9-29

泉此方夏娜鲁鲁修凉宫春日

发表于 2020-2-17 12:29:28 | 显示全部楼层
游戏昵称:381808691 | 拥有金币:22858 | SteamID: STEAM_0:1:165334322 | 玩家信息
回复

使用道具 举报

签到天数: 51 天

[LV.5]常住居民I

16

主题

254

回帖

1708

积分

UID
63481
僵尸币
2133
贡献度
0
注册时间
2019-11-25
在线时间
89 小时
最后登录
2021-1-14

捐助贡献奖章泉此方 布兰奈玖·加尔提尼亚斯

发表于 2020-2-17 13:18:03 | 显示全部楼层
游戏昵称:Tatsu言って | 拥有金币:1603 | SteamID: STEAM_0:0:242351242 | 玩家信息
嘿嘿学到了
回复

使用道具 举报

签到天数: 51 天

[LV.5]常住居民I

16

主题

254

回帖

1708

积分

UID
63481
僵尸币
2133
贡献度
0
注册时间
2019-11-25
在线时间
89 小时
最后登录
2021-1-14

捐助贡献奖章泉此方 布兰奈玖·加尔提尼亚斯

发表于 2020-2-17 13:18:57 | 显示全部楼层
游戏昵称:Tatsu言って | 拥有金币:1603 | SteamID: STEAM_0:0:242351242 | 玩家信息
但公开了好吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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