Aha,今天终于可以接触到令人激动和兴奋的脚本编写了,记得我刚学习写脚本的时候接触的是TUS脚本,学习脚本的动机是上网费用太高,自己要建设一个单机版的“免费的服务器”。不过在后来我不能不承认,写脚本也是我爱上UO的一个方面,因为你学会了写脚本后,就会发现这个游戏的设计是有多么的伟大!
我看过很多很多的关于脚本编写介绍的网站,大多是这样的一些模式……以各种资料收集为主、以具体的脚本讲解为主、以零散的编写经验为主等等,无论是英文的还是中文的网站,反正到现在让我可以从头到尾都能学习编写UO脚本的网站还没有看到。国内的大部分脚本资料直接照搬照抄老外的一些帖子,加入自己的讲解也是少得可怜。不过同样要感谢他们的辛苦努力和付出。在贴整理这些资料前我先声明,我绝对不是那些所谓的“脚本高手”之列的,我只是把自己所看到的,所理解的整理出来给大家一起分享,一起学习,一起提高。
其实SPHERE的脚本写作和许多编程语言一样,只不过比那些面向过程或对象的语言比如C、C++、Pascal、Basic更为简单些、“专业化”些,和那些可视化的编程语言比起来就更是大大的不同了。任何语言的编写内容都不外乎那么几个:定义变量、给变量赋值、运用这些变量和循环、判断组成一个个函数和事件,再把这些函数和事件相互组合成为一个可以让机器识别并认知运行的程序,所有原本由机器告知你要作的事情,经过你的设计变成了你让机器去如何作,展现在机器使用者前面一个什么样的环境
SPHERE脚本的一些风格和模式,它不同于其他程序设计语言,但是有太多的相似之处,为了更有效的全面认识SPHERE脚本,我们可以把他的脚本分为几大类,分别为:
1、Item Scripts
物品定义脚本 :比如我们的武器、盔甲、矿物、装饰物品等等
例如下面这段代码是一个衣服袖子物品的定义:
[ITEMDEF i_ranger_sleeves]
DEFNAME=i_ranger_sleeves
NAME=studded ranger sleeves
ID=i_studded_sleeves
TYPE=T_ARMOR
RESOURCES=10 i_hides_cut
WEIGHT=8
ARMOR=16
REQSTR=25
CATEGORY=Rares
SUBSECTION=Armor
DESCRIPTION= Ranger Armor Sleeves
SKILLMAKE=TAILORING 100.0, t_sewing_kit
RESOURCES2=8 i_hide,3 i_ingot_iron
ON=@Create
HITPOINTS={36 44}
COLOR=0593
2、NPC Scripts
非玩家角色脚本:NPC即None Player Character,这个词源自于MUD游戏,就是由电脑程序控制的角色,比如我们在UO里面看到的牛、羊、马和鸟类骑宠(动物NPC);在城里的售货的店员(店员NPC);地城里面龙族、怪物(怪物NPC)等等
例如下面这段代码是一个系统自代脚本中怪物NPC的定义:
[CHARDEF 01085]
DEFNAME=c_h_witch_high
NAME=#NAMES_HUMANFEMALE the High Witch
ID=C_WOMAN
CAN=MT_EQUIP|MT_USEHANDS|MT_WALK|MT_FEMALE
DAM=15,20
ARMOR=15,20
TSPEECH=spk_human_prime
TSPEECH=spk_human_default
ON=@Create
COLOR=0599
STR={90 110}
DEX={81 95}
INT={80 100}
MAGICRESISTANCE={90.0 95.0}
TACTICS={80.0 90.0}
WRESTLING={40.0 55.0}
MACEFIGHTING={75.0 95.0}
MAGERY={75.0 95.0}
NPC=BRAIN_HUMAN
KARMA={-3000 -5000}
FAME={2000 4000}
ITEMNEWBIE=i_hair_long
COLOR=color_gray_dk
ON=@NPCRestock
ITEM=i_dress_plain
COLOR=1
ITEM=i_hat_wizards
COLOR=1
ITEM=i_boots_calf
COLOR=1
ITEM=random_potion
ITEM=random_potion
ITEM=i_reag_BATWING
ITEM=i_reag_BATWING
ITEM=i_reag_eye_of_newt,{ 1 5 }
ITEM=I_STAFF_BLACK
ITEM=i_gold,{100 200}
CATEGORY=Civilized
SUBSECTION=Witches (Evil)
DESCRIPTION=High Witch
3、Function Scripts
函数脚本:函数脚本的编写会有效的减少你的代码重复冗余,我们可以把一些常用的功能和语句,放到一个函数定义里面,调用的时候只需要给出这个函数以及它们所需要的变量就可以了。还比如我们装备一套甲需要先把背包打开,然后从头到脚依次双击,但如果我们把这些动作设计成函数的话,那么我们只要在游戏中输入这个函数的名字(就是命令),那么就可以一次性完成这些个动作。
下面这段代码就是自动将一个物品放在背包里面的命令函数:
[FUNCTION put]
src.newitem=<args>
src.act.bounce
return 1
在spheretables.scp文件里面加上这个函数名:
[PLEVE 4]
put
4、Event Scripts
触发事件脚本:触发事件即一种交互式的编程,他首先有编译程序定义一些触发的事件(也可以由自己来编写这些触发事件),当某种于定义条件满足了这个触发条件,则开始执行其下面的代码。这个触发和函数一样,有一些是由系统自带的,有一些是要自己编写的,比如怪物NPC的AI(智能性)设计。
例如下面这段代码是怪物NPC的一个自动驱魔AI设计:
[EVENTS e_Dispel_Human]
ON=@GetHit
if ( <src.flags>&statf_conjured )
if rand(2) = 1
SAY An Ort
Src.SpellEffect s_dispel,1000
endif
endif
5、Dialog Scripts
对话框及菜单脚本:为了能让玩家或程序使用者所接触到的画面更为人性化和舒适一些,程序设计者们常常在对话框、菜单的界面和功能编写上煞费苦心,比如我们在游戏中输入”ALT+K”,可以打开技能菜单(MENU),”ALT+O”可以打开系统的带有属性页标签的配置对话框等等。还比如在jarry的玩家,单击NPC,就可以弹出来一个命令快捷菜单,这些都是输于本类的程序设计。
下面的例子是一个传送的菜单定义:
[DIALOG d_TEST_TELEPORT]
40,40
resizepic 0 0 5054 420 370
gumppictiled 10 10 400 60 82
gumppictiled 10 80 400 280 82
CheckerTrans 10 10 400 350
button 60 90 4006 4007 1 0 1
button 60 130 4006 4007 1 0 2
button 60 170 4006 4007 1 0 3
button 60 210 4006 4007 1 0 4
button 60 250 4006 4007 1 0 5
button 60 290 4009 4010 1 0 6
gumppic 340 90 10830
gumppic 340 130 10830
gumppic 340 170 10830
gumppic 340 210 10830
gumppic 340 250 10830
gumppic 340 290 10830
text 105 30 72 0
text 110 90 1152 1
text 110 130 1152 2
text 110 170 1152 3
text 110 210 1152 4
text 110 250 1152 5
text 110 290 1152 6
[DIALOG d_TEST_TELEPORT BUTTON]
ON=0
return 1
ON=1
SRC.GO britain
return 1
ON=2
SRC.GO jail
return 1
ON=3
SRC.GO cove
return 1
ON=4
SRC.GO minoc
return 1
ON=5
SRC.GO vesper
return 1
ON=6
SRC.GO 1415,1520,13
return 1
[DIALOG d_TEST_TELEPORT text]
脚本学习传送系统之传送菜单例子
传送位置一
传送位置二
传送位置三
传送位置四
传送位置五
传送位置六
6、Misc. Scripts
其他类的一些脚本:这类的脚本更为游戏化一些,比如地图和城市的定义、一些系统BUG的修复、魔法的定义、技能设置、技能相关选项、服务器登陆选项、一些特色的系统编写(如种族系统、城市系统、耕种系统)等等我们把这些都归纳到这一类里面,看起来有些比较复杂和混乱。
下面的例子是一个地图区域和房间的定义
[ROOM Watch Gates]
P=5311,3972,57
RECT=5308,3944,5313,4038
RECT=5273,4054,5297,4060
RECT=5199,3945,5221,3950
CLASS=12
FLAGS=0180
GROUP=Delucia
[AREA Trinsic Jail]
P=1851,2773
RECT=1838,2754,1863,2776
CLASS=51
FLAGS=06c9f
GROUP=Jails
7、Multis & Web scripts
一些房屋和主页的相关设计脚本:比如如何用第三方程序设计系统的房屋和新式建筑外形、物品和世界的固定、主页相关显示游戏中的变量编程等等。
下面例子是一个灯塔的代码:
6 version
0 template id
-1 item version
29 num components
6864 2 1 0 0
6863 -1 -3 0 0
6855 -1 0 0 0
6858 -1 -1 0 0
6860 0 -2 0 0
6862 -2 -3 0 0
6859 -1 -2 0 0
6861 -2 -2 0 0
6852 -1 1 0 0
6849 -2 0 0 0
6846 -2 -1 0 0
6844 -3 -3 0 0
6845 -3 -2 0 0
6835 1 -3 0 0
6838 0 -3 0 0
6843 -3 -4 0 0
6842 -2 -4 0 0
6841 -1 -4 0 0
6829 2 -2 0 0
6832 1 -2 0 0
6828 3 -2 0 0
6825 3 1 0 0
6823 2 2 0 0
6826 3 0 0 0
6822 1 2 0 0
6824 3 2 0 0
6827 3 -1 0 0
6821 0 2 0 0
6820 -1 2 0 0
8、Type scripts
类型脚本定义:这是一个应用非常多的一个类型的脚本,但遗憾的是我所见到的BBS或主页上除了介绍Sphere v.55i脚本里面自代的185个类型含义外,几乎没有把他单独辟出一类来的,或许这类脚本真的是太简单?类,在编程语言中来自于面向对象的C++,每个类都会有自己的相同特点,如果某个变量或物品输于这个类,那么它将具备这个类的所有特点。灵活运用这个类的定义,你会发现这是一个非常有趣和有意义的事情。
下面例子是一个陷阱踏板的类型定义,任何可以行走的物品具备了这个类型,都变成了陷阱和机关:
[TYPEDEF T_trap_floor]
ON=@STEP
IF <src.npc>
return 0
ENDIF
IF <src.isgm>
return 0
ENDIF
IF <SRC.HITS> >30
SRC.DAMAGE={10 30}
SRC.Anim 20
SRC.Bark 3
ELSE
SRC.HITS=0
ENDIF
return 1
怎么样?看到这里是不是对sphere的脚本充满了兴趣?通过上面的讲解,相信您对sphere的脚本有了一个全面的认识。我们以后的内容就是围绕着这几类的脚本进行一起研究学习,但在学习这些脚本的同时,我们必须具备也就是我下一个帖子要描述的内容
“语法”,和所有编程语言一样,sphere的脚本语言同样具备它的一些规则,只有把这些基本的规则和语法掌握透彻,你才能在编程的时候做到游刃有余。

留言
还没有留言,来坐个沙发吧。
留个言