#call有goto的功能,但他可以跨文件
于是我就当他是跨文件的goto
直到有一天(就是今天),我突然想,他会不会其实是一种代码导入+goto
实验证明,确实如此然后好像也没什么人来聊这个,所以我就来聊一下吧
下面是我对call的理解(不想看就直接去看下面的例子吧):
#call [路径\call脚本.txt] @call触发 的作用是:
脚本加载时,服务器加载所有npc脚本,储存的位置应该是内存,所以每次改完脚本我们都需要重新加载脚本
关于所谓内存,以下都会用这个说法,其实这种说法纯属猜测
任何npc脚本中,[@随意触发]下面有#call [xxx] @call触发时
1.会将@call触发下方的大括号{}括起来的内容加入此npc脚本内 ←这是在内存中操作,我们看不到
2.并且 goto @call触发 一次
举例说明
假设现在有个在MirServer\Mir200\Envir\QuestDiary里的脚本文件,名字是果果.txt
这个脚本里的内容是这样的(为了直观,我就用图片表示了,其实里面是连起来的长长的脚本):
其实只要两个图片,三个图片就是为了凑数
请注意脚本的结构,特别是注意大括号{}
假设现在有个npc,名字叫果果屋.脚本名字是果果屋-3.txt
例1-脚本实际效果:
果果屋-3.txt里的内容是这样的:
游戏里的表现是:点击NPC,你的角色会得到一个名为苹果的物品
这是因为 果果屋-3.txt在内存里其实已经变成这样了:
例2-call生效的情况:
果果屋-3.txt里的内容是这样的:
游戏里的效果是获得一个花生 只要npc脚本中存在一个格式正确的#call,果果屋-3.txt在内存中就会是类似例1中的效果
但它不会执行[@坚果篮]里的give 坚果篮 1 的脚本,因为没goto @这段代码不会被执行,但call会有部分作用
如果在@main里goto @坚果篮,玩家将可以得到一个坚果篮
例3-范围外不起作用:
果果屋-3.txt里的内容是这样的:
点击NPC,游戏里什么都不会发生,因为在果果.txt脚本中,[@花生]不在[@水果篮]的大括号里
例4-说不清楚,自己看吧:
果果屋-3.txt里的内容是这样的:
注意,[@花生]下面的是#call,[@瓜子]和[@坚果篮]下面的是goto
游戏内,在名为果果屋的Npc里
点"我要花生",会得到一个花生
点"我要瓜子",会得到一个瓜子
点"我要篮子",什么都不会得到 你得个篮子呀?
因为只有大括号里的东西,才能被goto到
另外,虽然点"我要篮子",连个篮子都得不到,但控制台不会报错
以上是我对#call的最新理解,有啥说错的或者需要补充的请在帖子里一起聊吧,嘿嘿
发表评论