背景:
阅读新闻

sphere 55i 新手教程

[日期:2006-08-18] 来源:乘风破浪网  作者:BELGAR [字体: ]

sphere 55i 新手教程 (中文) 
原文出处: 
http://www.sphereserver.com/forums/...55I%29&id=11132 

译者说明: 
E文水平有限;有的地方有删节,有的有补充(加上了“译者按”的地方) 


sphere 55i 新手教程 

原著:BELGAR 
翻译:逍遥子 

本教程针对的对象是那些对脚本知识还一无所知的朋友 


基础篇: 

要想明白脚本文件里的代码的意义,请先看看下面的内容。 

[xxxx] 一段代码的开头。每一个物品都有一个这样的开头 

<xxxx> xxxx的值,可以是数字,也可以是字符串。 

举例: 
test=10 ; test2=<test>. 这样test2就等于10了 

SRC: 源;引发执行此段代码的起源人、物,和TARG、ACT、CONT等等一起通常用在触发里 
TARG: 目标;譬如 
ACT: 当前的目标;与TARG的区别在于ACT可以在在脚本执行过程中被重定向 
CONT: 容器;一件物品放在一个包里,这个包就是这个物品的CONT;一个人骑在一匹马上,这个人就是这匹马的CONT;等等…… 
LINK: 每个物体都可以定义一个LINK,然后通过LINK来对其连接到的物体进行操作 
注:(参看文末) 

举例: 
SRC.ACT 事件起源物的当前的目标 
SRC.TARG.ACT 事件起源物的目标的当前的目标 
SRC.TARG.ACT.LINK 事件起源物的目标的当前的目标所连接的物体 

SRC.TARG.ACT.LINK看上去过于复杂,大家就先看看前面的几个吧。这些是SPHERE里物体指针的基本知识,搞清楚后才能 执行对物体的操作。这个物体可以是一个玩家、一个NPC或者一个物品。<SRC.TARG.NAME>将会得到SRC.TARG的名字。 SRC.ACT.COLOR=01将会把SRC.ACT的颜色改成01(黑色)。 

(译者按: 
另外,还有几个对指针起辅助作用的命令: 
FINDCONT(XX): 第XX个容器 
FINDEQUIP(XX): 第XX个装备?(没用过不能不确定) 
FINDID(XX): ID为XX的物品 
FINDLAYER(XX): 第XX个LAYER 
FINDTYPE(XX): TYPE为XX的物品 
当然,你也可以写成FINDID.XX这样的形式 

这几个命令配合那几个指针,基本上就可以完成所有的对物体的寻址操作了,譬如 
SRC.FINDLAYER(29).FINDCOUNT(20).FINDID(I_GOLD).AMOUNT 1000 
就是将在SRC的LAYER 29(就是银行)的第20个容器的ID为I_GOLD的物品(就是钱)的数量改成1000 
) 

 

这些是怎样运行的呢?SPHERE里每一样东西都有一个唯一的编码,就是UID。假如你添加了2把钥匙,他们有着同样的颜色、名字、一切的一切,就只有UID不同。甚至世界本身就有一个UID(?,这个我就不知道了;译者按),同样的还有所有的地区、房屋和其他一切的一切。它告诉服务器应当给出的所指向的物体的编码。这样,大家就可以理解到<SRC.TARG>的值和<SRC.TARG.UID>是一样的,然而SRC.TARG.UID.NAME却是错误的。 

ON=@DCLIK 

这就叫做触发。一般说来,触发定义的是当一个特定的动作发生时将要进行一些什么样的操作。所写的这个例子,定义的是当某个物体被双击后将要执行的操作 

举例: 
ON=@DCLIK 
SRC.MESSAGE HI! 
RETURN 1 
将这段代码写在一个物品里面,以后要是有人双击这个物品,双击者的头上就会显示出:“HI!” 

接着来看看下面这部分 
[ITEMDEF 04105] <-以前定义的物品的名字,一段代码的开头 
DEFNAME=i_SCIMITAR_FORCE <-新定义的物品的名字 
ID=i_scimitar <-映像 
NAME=Scimitar of Force <-物品名字 
RESOURCES=i_scimitar,3 i_enchant_weapon <-制造这个物品所需要的资源 

DESCRIPTION=Scimitar of Force <-axis里的信息 
SUBSECTION=Magic Scimitars <-axis里的信息 
CATEGORY=Provisions - Weapons ?Magic <-axis里的信息 

ON=@Create <-触发;当物品被创建时触发 
COLOR=color_magic_weap <-颜色 
HITPOINTS={31 100} <-物品耐久度 
ATTR=attr_magic <-魔法属性 
MOREY=60.0 <-把此物品的MOREY设为600 

脚本文件 

学写脚本的唯一的方法,就是从写一些小脚本入手,看看系统是怎样运行的。对于新手的你来说,必须了解脚本文件里有些什么样的内容。脚本文件的的扩展名是.SCP,大部分是定义物品、NPC、模板的。我们先作重来看看以下这几个脚本:(改动了这些脚本文件后需要刷新服务器,有时候甚至需要重启) 

Spheretables: 在服务器读取SPHERE.INI后读取。内容是定义技能、起始位置、玩家命令、SKILLCLASS。作任何改动都需要刷新服务器 
Spheretable_x:在Spheretable后读取。定义了魔法和重生组。你可以改变魔法的属性,但是不能添加魔法。所有的重生组定义的范围在08xxx内,自己添加的话就接着最后一个编排 
Spheredefs: 内置于服务器,将属性定义为一个数字,包含了大量SPHERE系统的资源。强烈建议仔细看看里面的内容(要是E文不好的话还是去找找响应的中文资料吧) 
Spheremap: 包含了地图上所有的地区。最好用AXIS修改。此文件里的内容的排列顺序是很重要的。对于交迭的区域,其地区属性将以排在此文件最后面所定义的为准。在此文件的前面部分有一个[AREA %SERVNAME%],这是定义的整个世界的属性,世界上的每一个地方的属性都将是这样,除非在此文件下面重新定义Sphereregion: 定义了许多地区的EVENTS和资源 
Sphereskill: 定义了技能和魔法的菜单。有炼金、变身、召唤、制衣、制图、制弓、制箭、打铁、木匠、皮匠、修补、抄卷、烹饪(还未开放) 

其他的脚本文件的作用是同样重要的,有什么样的作用大致和以上所举出的道理相同 

先找到一个好的文件编写工具(译者按:推荐ULTRA EDIT,功能强大、性能优异,特点是能迅速打开一个庞大的文件,并且能在文件以被其他程序打开的情况下强制存盘),经常使用SEARCH功能。用它来打开现成的脚本文件,多看看已经存在的脚本,这将使得你在以后脚本学习、编写里受益匪浅。 

熟悉16进制;如果可能,尽量不要使用10进制(一般只要不显示给玩家都可以不用)。这样能让你的脚本更加直观。SPHERE 里,16进制的数字前面要加上0,不加SPHERE就会认为这是个10进制的;因此10=10、16=010;这是因为SPHERE的数据是以16进制储存的,因此最后用16进制工作起来会轻松一些。之所以提到这些,是因为有人总是转换成10进制,Usually they will start making logic errors and the scripts end up on the help forum. The server takes care of any conversions needed.(译者按:抱歉,这段不知道改怎么翻译)。IF (0A=10) 是真,两边都是10进制的10,这儿就不需要转换了 

在客户端上,有几个重要的用来调试的命令,它们是: 
.info -> 得到并编辑一个物品、玩家、NPC的信息 
.edit / .xedit -> 得到并编辑一个玩家、NPC身上装备的东西的信息 
.show / .xshow -> 显示任何变量,只要这个变量存在 

在客户端上,在命令字符前面加上X,执行后将会出现一个选取目标的圆圈,选定目标后就对这个目标执行这个命令 

.str 100 -> 把自己的str设成100 
.xstr 100 -> 把选定目标的str设成100 

再说说这些。试试用用这些特别是show命令,你熟练了以后,会体会到它的用处的 

.show str -> 显示我的str 
.show tag.stored -> 显示储存在tag.stored(我的)的值 
.xshow link -> 显示目标连接到的物品的UID 

同样的还有: 

.show eval (10+0a0) 
.show region.flags 
.show serv.archerymindist 
.show isgm 
.show act 

SHOW能显示出任意一个存在的、符合使用者权限的值。PASSWORD只能显示给ADMIN权限的玩家,ADMIN可以用.XSHOW ACCOUNT.PASSWORD选择目标玩家,显示出他这个帐号的密码。GM就不能。 

注意:在脚本里用命令,SPHERE会认为执行者是有ADMIN权限,所以写脚本时要小心。在开发一个教大的脚本的时候,你大半的时间其实将会用在安全性的确认上,否则就是留下了一个BUG隐患。 

现在,你应该了解到了基本脚本编写,SPHERE对物品、玩家、NPC的寻址、指针,脚本文件分门别类的内容,用客户端命令查找到基本的信息 


进阶篇: 

使用AXIS;这是一个非常有用的工具,建站、管理必备。我很少用它,除非用用他的调色板(译者按:BELGAR是个高高手,大家别理这句),不过这和个人的偏好有关。 

使用INSIDEUO:查看所有能显示出来的图象的ID,编写DIALOG脚本必备 

强烈建议把你自己写的脚本加在一个新脚本文件里,譬如TEST.SCP。然后把这个文件放在和SPHERESERVER.EXE同一个的目录里,直接刷新就可以用了。或者放到一个子目录里,不过这样的话就必须先在spherestable.scp里面的[resources]下面加上这个相应的完整的目录名,再重启服务器才能生效 

先学着写写物品脚本吧,因为这些很容易写的。如果你把另一个物品的ID赋给这个物品,基本上就得到了另外的那个物品的COPY,除非你自己加一些改动: 

[itemdef I_my_bottle] 
id=I_bottle_empty 

这样得到的是一个一模一样的空瓶,有着和空瓶一样的属性 

[itemdef I_my_bottle] 
id=I_bottle_empty 
weight=0.1 

这样得到的是一个除了重量以外一模一样的空瓶 

[itemdef I_my_bottle] 
id=I_bottle_empty 
weight=0.1 
type=t_forge //find this in spheredefs 

这样空瓶的TYPE也被改变了。但是不是所有的属性都是直接改在这个地方,象HITPOINTS、COLOR、ATTR等等需要改在ON=@CREATE里面 

[itemdef I_my_bottle] 
ID=I_bottle_empty 
WEIGHT=0.1 
NAME=my test object 

ON=@CREATE 
ATTR=04 

得到了一个是新人属性的空瓶。 

当然你会从一些有闪电、底火、中毒效果的武器写起,就在这样的乐趣当中建立信心吧。当然有的人也会猴子搬苞谷,早早就放弃了。我个人喜欢挑战,我所学的95%的知识是来自于看已有的脚本和命令解释(译者按:这是金玉良言呀!)。还有,除非你亲自动手试了,否者不要轻易相信别人说的。在不停的尝试当中,你的技艺将会得到飞速的提高。要是你有一个想法又不能马上实现,不要就放弃了,到论坛里提问去。 

编写NPC脚本: 

最好的方法只有一个:打开已经有的NPC脚本,边看边学边试。我想我能完完整整的写出来,但有这个必要吗?不过我还是简单讲讲EVENTS(事件)。在SPHERE里,一个EVENTS是指发生在NPC、玩家身上的事件。可以是受到伤害、施展魔法、选取目标等等。可以通过触发来引发。一组事件可以加在一个EVENTS里面,就是TEVENTS或者ENEVTS(译者按:前者针对NPC,后者针对玩家)。一个非常著名的例子是TEVENTS=E_UNDEAD,他定义了不死系的怪物在阳光虚弱的被一击就致命。在SPHERE论坛里有很多这样的例子。通常你用它来设定一个(种)唯一的NPC。 

好了,现在的你应该有了相当的基础了。祝你早日成为脚本高手 

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻