脚本文件的组成

一个脚本分成两个部分,“注册部分”和 “执行部分”。

一,什么是“注册部分”

注册部分就是“设定应该在什么时候运行这个脚本的条件” 。

在游戏启动时会固定执行脚本内的“OmodScriptReg”子过程,将条件记入数组以方便判断。

二,什么是“执行部分”

执行部分就是通过了注册部分的设定的条件判断,确定执行这个脚本 。

程序是固定执行脚本内的“OmodScriptRun”子过程,执行的结果就由你定了。

现在可以参考一下例子001,来简单理解一下。

三,注册部分全部的条件与使用说明

1,RegArea
注册在那个地图,用法:RegArea(areaNorthTyris),括号中的是地图名定义,请自行参阅。
2,RegAreaLayer
注册在第几层,用法:RegAreaLayer(3),括号中的是层数,值必须大过1。
3,RegRand
注册随机数,用法:RegRand(4),括号中写4代表有四分之一的机率,值必须大过0。
4,RegFlag
注册Flag,用法:RegFlag(1,0),括号中左边写1表示“Flag1”,右边写0表示“Flag1的值为0时”。左边的值必须大过0,因为“Flag0”不作使用,FLAG的上限目前是“Flag199”,不够以后再加。
5,RegKillTarge
注册要杀死的角色,用法:RegKillTarge(170),括号中的值为角色的数据库ID,该值自行查看游戏目录下的“data\db_creature.xml”内的“dbID”字段。
6,RegKillTargeNum
注册要杀死的数量,用法:RegKillTargeNum(2),括号中的意思就要是杀2只,值必须大过1。注:程序内部的当前已杀数量是不会被SAVE的,一LOAD就清。
7,RegHasItem
未开发。
8,RegHasItemNum
未开发。
9,RegCharaId
注册需要的角色,用法:RegCharaId(166),括号中的值为角色的数据库ID,该值自行查看游戏目录下的“data\db_creature.xml”内的“dbID”字段。
10,RegCharaRaceType
注册需要的种族,用法:RegCharaRaceType("norland"),括号中的是种族的ID名,该值自行查看游戏目录下的“data\db_race.xml”内的“dbIdN”字段。
11,RegCharaClassType
注册需要的职业,用法:RegCharaClassType("warrior"),括号中的是职业的ID名,该值自行查看游戏目录下的“data\db_class.xml”内的“dbIdN”字段。
12,RegCharaRelation
注册要求角色的关系,用法:RegCharaRelation(cAlly),括号中的是关系名定义,请自行参阅。
13,RegCharaHow
注册要求有多少只,用法:RegCharaHow(12),括号中写12表示最少要有12只,值必须大过1。
14,UpdateCreature
更新内存中的原始角色数据,用法:UpdateCreature(16),括号中写16表示要更新的角色为db_creature.xml内dbID为16的市民,值必须大过-1。

四,注册部分编写说明

在OmodScriptReg内的注册条件有三个设计方向,一是以进入地区来触发,二是以杀死某物来触发,三是以拥有某道具来触发。下边将为每种设计方向讲明可以使用的注册条件和要注意的问题。

1,以地区来触发

RegArea是必要的,一定要注册一个地图,没有的话直接跳过。
RegAreaLayer、RegRand、RegFlag、RegCharaId、RegCharaRaceType、RegCharaClassType、RegCharaRelation、RegCharaHow均为非必要。

其中RegCharaId、RegCharaRaceType、RegCharaClassType这三个为排它性的,三个之中只能用一个。

2,以杀死某物来触发

RegKillTarge是必要的,一定要注册一个要杀死的角色ID,没有的话直接跳过。
RegArea、RegAreaLayer、RegFlag、RegKillTargeNum均为非必要。

3,以拥有道具来触发

未发开。

4,直接更新原始的角色数据

必须以UpdateCreature来声明目标的dbID来触发,该类型脚本是用于更新db_creature.xml载入后的数据。仅在游戏启动时执行一次,不像上边的几类脚本那样常驻,且不计入脚本数量(游戏启动时显示的)。

五,执行部分编写说明

其实这个没什么好说明的,一上手就是写HSP代码了,要注意的是先了解我给出的定义、变量之类的再来考虑能否满足要求。