一米阳光商人
RO精灵 RO侏儒 RO巨人 RO诸神 RO创世
|
今天是这个阶段最后一课拉
该做点东西出来了呢
今天要实现的就是把前面的内容综合起来制作一个<捉迷藏的小女孩>
当然有人愿意做成<捉迷藏的怪蜀黍>我也不反对
那么先回顾一下之前的内容
创建NPC~对话~条件判定~标签~ON事件以及调用~随机函数
为了最后完成这个小游戏
最终还需要两个命令
两条命令用于让npc转换为加载或是不加载的状态
当npc处在加载状态时,会正常显示出来,同时其所有的触发事件也能直接由玩家触发
但是当npc处在未加载状态时
npc不会显示出来,正常玩家的触发手段(直接点击对话/走进范围触发)都不好使
但是有一条例外
就是虽然这个npc没有加载,但是实际这个npc还是存在的~所以On事件依然可以触发
俺是分割线--------------------------------
当然除了上面的两条命令~还需要一个特殊的On事件
这个标签可以同其他On标签一样被自身或者其他npc调用
同时,当服务器脚本重置(服务器启动/@reloadscript重读脚本)时,这个事件也会被触发
综合今天说到的disablenpc
我先给出一个简单的例子
- prontera,150,150,4 script enablenpc测试 877,{
- end;
- OnInit:
- disablenpc "enablenpc测试";
- end;
- }
复制代码
每当服务器启动或是重读脚本时,这个enablenpc测试就会被隐藏掉
那么将这个例子修改一下~就可以简单控制这个npc的出现和小时
- prontera,150,150,4 script enablenpc测试 877,{
- end;
- OnInit:
- disablenpc "enablenpc测试";
- end;
- OnEnable:
- enablenpc "enablenpc测试";
- end;
- }
复制代码
当需要npc出现时
使用
donpcevent "enablenpc测试::OnEnable";
来让他显示
同理,使用OnInit事件可以让这个npc从新小时
消失- -
那么~我们需要的功能就可以实现了
首先~制作3个npc~外观全部采用一样的外观~
然后里面的内容设计成一样的内容~
当服务器开始运行的时候,只让其中一个显示出来
然后~与其中一个对话时~对话的npc消失~另外两个已经消失的npc随机出现一个
那么脚本看起来就像是这样的
- prontera,150,150,4 script 爱捉迷藏的小女孩 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩";
- end;
- }
- prontera,147,150,4 script 爱捉迷藏的小女孩 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩";
- end;
- }
- prontera,144,150,4 script 爱捉迷藏的小女孩 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩";
- end;
- }
复制代码
但是这样处理的时候会发现一个问题
三个npc的名字是相同的
那么这时候enablenpc或是disablenpc时~他可能无法得知需要关闭和开启的到底是哪一个
这里要说明一个小东西
npc的名字部分
格式是这样的
在游戏里,只会显示出名字部分的内容
#和后面的标识不会显示
只是在脚本里才能看到
所以这时候,我们需要为三个不同的但是同名的npc派个编号
- prontera,150,150,4 script 爱捉迷藏的小女孩#1 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#1";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#1";
- end;
- }
- prontera,147,150,4 script 爱捉迷藏的小女孩#2 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#2";
- end;
- }
- prontera,144,150,4 script 爱捉迷藏的小女孩#3 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#3";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#3";
- end;
- }
复制代码
当这样处理以后~读取时~服务端不会报错~脚本的调用也不会因为npc重名而导致无法判断具体应该对哪个npc进行操作
之后
我们其实还需要再增加一个内容
现在有OnInit和OnEnable事件~但是没有disable事件
因为其中有一个npc是需要初始化时不会隐藏
所以我们额外在制作一个disable事件
同时,我设计让1号小女孩在初始化时出现
- prontera,150,150,4 script 爱捉迷藏的小女孩#1 877,{
- end;
- OnInit:
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#1";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#1";
- end;
- }
- prontera,147,150,4 script 爱捉迷藏的小女孩#2 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#2";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
- prontera,144,150,4 script 爱捉迷藏的小女孩#3 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#3";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#3";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
复制代码
所以脚本变成了这样
这样~三个npc就都有出现和消失事件了
同时1号npc在初始化时不消失,另外两个在初始化时消失
之后要做的就是设计游戏内容了
我初步设计的是这样
当玩家没接取任务的时候
随便找到任意位置的小女孩对话时~都可以接取任务~
接取任务以后要找到随机出现的小女孩10次
当找到第10次的时候~
小女孩会承认败给玩家~同时给玩家奖励
那么~因为是任意位置的NPC~所以每一个npc里都要设计出相同的对话内容
然后接取任务的方法
我通常是用变量控制
因为是针对玩家的~所以我一般会使用@变量
在这里~我使用@ZMC这个变量
别问我是不是(捉迷藏)的缩写~
我加入本群
因为@变量~在玩家进入游戏以后~没做过特殊设定的时候~默认为0
所以就将变量值为0时,判定为玩家未接受任务的状态
那么之后的 处理就相应简单很多
每次找到的时候~变量+1
最后变量等于10的时候,给与玩家奖励,同时将变量归零,玩家就可以再次参与游戏
- prontera,150,150,4 script 爱捉迷藏的小女孩#1 877,{
- if(@ZMC == 0)
- {
- mes "hi!";
- mes "尊敬的冒险者";
- mes "你愿意和我捉迷藏吗?";
- next;
- mes "你要找到我10次的话,我就会给你奖励哟!";
- set @ZMC,1;
- close;
- end;
- }
- if(@ZMC<10)
- {
- if(@ZMC>0)
- {
- set @ZMC,@ZMC+1;
- mes "哎呀!竟然被发现了";
- mes "这是你第 "+@ZMC+" 次发现我拉!";
- close;
- end;
- }
- }
- if(@ZMC == 10)
- {
- mes "哎呀呀呀~";
- mes "已经被找到10次了呢";
- mes "你还真是厉害呀!";
- mes "那我就把我收藏的宝物给你好了";
- getitem 969,10;
- set @ZMC,0;
- close;
- end;
- }
- end;
- OnInit:
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#1";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#1";
- end;
- }
- prontera,147,150,4 script 爱捉迷藏的小女孩#2 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#2";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
- prontera,144,150,4 script 爱捉迷藏的小女孩#3 877,{
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#3";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#3";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
复制代码
我设计了一套很简单的对话
分别区分了变量为0时,1-9时和为10时不同的情况
再然后,就需要对npc的出现和消失做处理
这里就需要使用到
- prontera,150,150,4 script 爱捉迷藏的小女孩#1 877,{
- if(@ZMC == 0)
- {
- mes "hi!";
- mes "尊敬的冒险者";
- mes "你愿意和我捉迷藏吗?";
- next;
- mes "你要找到我10次的话,我就会给你奖励哟!";
- set @ZMC,1;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#1";
- close;
- end;
- }
- if(@ZMC<10)
- {
- if(@ZMC>0)
- {
- set @ZMC,@ZMC+1;
- mes "哎呀!竟然被发现了";
- mes "这是你第 "+@ZMC+" 次发现我拉!";
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#1";
- close;
- end;
- }
- }
- if(@ZMC == 10)
- {
- mes "哎呀呀呀~";
- mes "已经被找到10次了呢";
- mes "你还真是厉害呀!";
- mes "那我就把我收藏的宝物给你好了";
- getitem 969,10;
- set @ZMC,0;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#1";
- close;
- end;
- }
- end;
- OnInit:
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#1";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#1";
- end;
- }
- prontera,147,150,4 script 爱捉迷藏的小女孩#2 877,{
- if(@ZMC == 0)
- {
- mes "hi!";
- mes "尊敬的冒险者";
- mes "你愿意和我捉迷藏吗?";
- next;
- mes "你要找到我10次的话,我就会给你奖励哟!";
- set @ZMC,1;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#2";
- close;
- end;
- }
- if(@ZMC<10)
- {
- if(@ZMC>0)
- {
- set @ZMC,@ZMC+1;
- mes "哎呀!竟然被发现了";
- mes "这是你第 "+@ZMC+" 次发现我拉!";
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#2";
- close;
- end;
- }
- }
- if(@ZMC == 10)
- {
- mes "哎呀呀呀~";
- mes "已经被找到10次了呢";
- mes "你还真是厉害呀!";
- mes "那我就把我收藏的宝物给你好了";
- getitem 969,10;
- set @ZMC,0;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#2";
- close;
- end;
- }
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#2";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
- prontera,144,150,4 script 爱捉迷藏的小女孩#3 877,{
- if(@ZMC == 0)
- {
- mes "hi!";
- mes "尊敬的冒险者";
- mes "你愿意和我捉迷藏吗?";
- next;
- mes "你要找到我10次的话,我就会给你奖励哟!";
- set @ZMC,1;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#3";
- close;
- end;
- }
- if(@ZMC<10)
- {
- if(@ZMC>0)
- {
- set @ZMC,@ZMC+1;
- mes "哎呀!竟然被发现了";
- mes "这是你第 "+@ZMC+" 次发现我拉!";
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#3";
- close;
- end;
- }
- }
- if(@ZMC == 10)
- {
- mes "哎呀呀呀~";
- mes "已经被找到10次了呢";
- mes "你还真是厉害呀!";
- mes "那我就把我收藏的宝物给你好了";
- getitem 969,10;
- set @ZMC,0;
- donpcevent "爱捉迷藏的小女孩#"+rand(2,3)+"::OnEnable";
- disablenpc "爱捉迷藏的小女孩#3";
- close;
- end;
- }
- end;
- OnInit:
- disablenpc "爱捉迷藏的小女孩#3";
- end;
- OnEnable:
- enablenpc "爱捉迷藏的小女孩#3";
- end;
- OnDisable:
- disablenpc "爱捉迷藏的小女孩#2";
- end;
- }
复制代码
喔~好像发现最后有一个小错误
3号npc的隐藏事件里的npc名字编号写错了
最后~脚本看起来就像是这样的
在初始化时,2,3号npc会消失~1号npc出现
当玩家与npc对话以后,1号npc消失,2,3号随机一个出现
剩下的就是今天的作业了
分割线--------------------------------------
作业1:
在我最后发布的例子里,有一些错误,会导致脚本不能按照预期的功能运行,将那些错误修复以让脚本能按照预期的功能执行
作业2:
完成作业1以后,将npc数量从3个扩展到10个,同时将10个npc分布在不同的地方,做完这些以后测试脚本是否能够正常运行,预期的功能是否都能实现
作业3:
在完成作业1和作业2以后,思考一下,有什么方法能让脚本简化一下,脚本现在写了153行,在修改完以后~增加对话以后,可能会更长,有没有办法能让脚本变得精简一些~同时功能不缺失
选作作业:
完成作业1,作业2,作业3以后,尝试优化脚本,在功能不缺失的前提下,让脚本的行数尽量的减少
最后放上脚本一个。
001-从零开始学脚本-被尾随的小女孩.txt
(2.28 KB, 下载次数: 1, 售价: 10 金钱)
|
|