在传奇Gom引擎中,`QuestDiary`文件夹下的任务脚本是实现游戏丰富任务系统的关键,以下将详细介绍其编写方法。
###1.脚本基本结构与标签
####1.1基本结构
一个任务脚本通常由多个标签块组成,每个标签块以`[@标签名]`开头,用于定义不同的任务阶段或功能。例如:
```plaintext
[@main]
#IF
#ACT
Goto@step1
[@step1]
#IF
#ACT
SendMsg0你进入了第一步!
```
在这个例子中,`[@main]`和`[@step1]`就是不同的标签块,分别代表任务的起始点和第一步。
####1.2常用标签
-**`#IF`**:用于条件判断,后面可跟各种条件函数,如`CheckLevelGreater`(检查玩家等级是否大于某个值)、`CheckItem`(检查玩家是否拥有某个物品)等。
-**`#ACT`**:当`#IF`条件判断为真时,执行`#ACT`下面的动作指令。
-**`#ELSE`**:当`#IF`条件判断为假时,执行`#ELSE`下面的动作指令。
###2.条件判断函数及应用
####2.1玩家属性相关
-**`CheckLevelGreater[等级]`**:检查玩家等级是否大于指定等级。例如:
```plaintext
#IF
CheckLevelGreater20
#ACT
SendMsg0你的等级已经超过20级,可以接受此任务!
```
-**`CheckMoney[金额]`**:检查玩家是否拥有指定数量的金币。例如:
```plaintext
#IF
CheckMoney5000
#ACT
TakeMoney5000
GiveItem10011
```
####2.2物品相关
-**`CheckItem[物品ID][数量]`**:检查玩家是否拥有指定数量的某个物品。例如:
```plaintext
#IF
CheckItem10023
#ACT
TakeItem10023
GiveExp1000
```
-**`CheckItemCount[物品ID][比较符号][数量]`**:支持更灵活的物品数量比较,比较符号可以是`>`、`<`、`>=`、`<=`、`=`。例如:
```plaintext
#IF
CheckItemCount1003>=5
#ACT
SendMsg0你拥有足够的物品ID为1003的物品!
```
####2.3杀怪相关
-**`CheckKillMonCount[怪物名称][数量]`**:检查玩家是否杀死了指定数量的某个怪物。例如:
```plaintext
#IF
CheckKillMonCount僵尸10
#ACT
SendMsg0你已经杀死了10只僵尸,任务完成!
GiveItem10041
```
###3.动作指令及应用
####3.1消息发送
-**`SendMsg[消息类型][消息内容]`**:向玩家发送消息,消息类型`0`表示普通消息。例如:
```plaintext
#ACT
SendMsg0欢迎来到这个任务!
```
####3.2物品操作
-**`GiveItem[物品ID][数量]`**:给予玩家指定数量的某个物品。例如:
```plaintext
#ACT
GiveItem10052
```
-**`TakeItem[物品ID][数量]`**:扣除玩家指定数量的某个物品。例如:
```plaintext
#ACT
TakeItem10061
```
####3.3经验与金币操作
-**`GiveExp[经验值]`**:给予玩家指定数量的经验值。例如:
```plaintext
#ACT
GiveExp2000
```
-**`GiveMoney[金额]`**:给予玩家指定数量的金币。例如:
```plaintext
#ACT
GiveMoney3000
```
####3.4跳转与任务流程控制
-**`Goto[标签名]`**:跳转到指定的标签块继续执行任务脚本。例如:
```plaintext
#ACT
Goto@nextStep
```
-**`GotoQuestDiary[脚本文件名][标签名]`**:跳转到另一个任务脚本的指定标签块。例如:
```plaintext
#ACT
GotoQuestDiaryAnotherQuest.txt@start
```
###4.完整任务脚本示例
以下是一个完整的收集物品任务脚本示例:
```plaintext
[@main]
#IF
#ACT
SendMsg0你接到了一个收集任务,请收集5个[物品名称]。
Goto@collecting
[@collecting]
#IF
CheckItemCount1007>=5
#ACT
SendMsg0你已经收集够了5个[物品名称],任务完成!
TakeItem10075
GiveExp3000
GiveMoney2000
GiveItem10081
Goto@end
#ELSE
SendMsg0你还需要收集[5-<$ITEMCOUNT(1007)>]个[物品名称]。
Goto@collecting
[@end]
SendMsg0感谢你的参与,任务结束!
```
###5.注意事项
-**脚本语法正确性**:编写脚本时要严格遵循Gom引擎的脚本语法,注意标签的大小写和指令的参数顺序。
-**逻辑完整性**:确保任务脚本的逻辑完整,避免出现死循环或逻辑漏洞,影响玩家的任务体验。
-**兼容性**:不同版本的Gom引擎可能对脚本语法和函数有细微差异,编写脚本时要考虑引擎的兼容性。
###1.脚本基本结构与标签
####1.1基本结构
一个任务脚本通常由多个标签块组成,每个标签块以`[@标签名]`开头,用于定义不同的任务阶段或功能。例如:
```plaintext
[@main]
#IF
#ACT
Goto@step1
[@step1]
#IF
#ACT
SendMsg0你进入了第一步!
```
在这个例子中,`[@main]`和`[@step1]`就是不同的标签块,分别代表任务的起始点和第一步。
####1.2常用标签
-**`#IF`**:用于条件判断,后面可跟各种条件函数,如`CheckLevelGreater`(检查玩家等级是否大于某个值)、`CheckItem`(检查玩家是否拥有某个物品)等。
-**`#ACT`**:当`#IF`条件判断为真时,执行`#ACT`下面的动作指令。
-**`#ELSE`**:当`#IF`条件判断为假时,执行`#ELSE`下面的动作指令。
###2.条件判断函数及应用
####2.1玩家属性相关
-**`CheckLevelGreater[等级]`**:检查玩家等级是否大于指定等级。例如:
```plaintext
#IF
CheckLevelGreater20
#ACT
SendMsg0你的等级已经超过20级,可以接受此任务!
```
-**`CheckMoney[金额]`**:检查玩家是否拥有指定数量的金币。例如:
```plaintext
#IF
CheckMoney5000
#ACT
TakeMoney5000
GiveItem10011
```
####2.2物品相关
-**`CheckItem[物品ID][数量]`**:检查玩家是否拥有指定数量的某个物品。例如:
```plaintext
#IF
CheckItem10023
#ACT
TakeItem10023
GiveExp1000
```
-**`CheckItemCount[物品ID][比较符号][数量]`**:支持更灵活的物品数量比较,比较符号可以是`>`、`<`、`>=`、`<=`、`=`。例如:
```plaintext
#IF
CheckItemCount1003>=5
#ACT
SendMsg0你拥有足够的物品ID为1003的物品!
```
####2.3杀怪相关
-**`CheckKillMonCount[怪物名称][数量]`**:检查玩家是否杀死了指定数量的某个怪物。例如:
```plaintext
#IF
CheckKillMonCount僵尸10
#ACT
SendMsg0你已经杀死了10只僵尸,任务完成!
GiveItem10041
```
###3.动作指令及应用
####3.1消息发送
-**`SendMsg[消息类型][消息内容]`**:向玩家发送消息,消息类型`0`表示普通消息。例如:
```plaintext
#ACT
SendMsg0欢迎来到这个任务!
```
####3.2物品操作
-**`GiveItem[物品ID][数量]`**:给予玩家指定数量的某个物品。例如:
```plaintext
#ACT
GiveItem10052
```
-**`TakeItem[物品ID][数量]`**:扣除玩家指定数量的某个物品。例如:
```plaintext
#ACT
TakeItem10061
```
####3.3经验与金币操作
-**`GiveExp[经验值]`**:给予玩家指定数量的经验值。例如:
```plaintext
#ACT
GiveExp2000
```
-**`GiveMoney[金额]`**:给予玩家指定数量的金币。例如:
```plaintext
#ACT
GiveMoney3000
```
####3.4跳转与任务流程控制
-**`Goto[标签名]`**:跳转到指定的标签块继续执行任务脚本。例如:
```plaintext
#ACT
Goto@nextStep
```
-**`GotoQuestDiary[脚本文件名][标签名]`**:跳转到另一个任务脚本的指定标签块。例如:
```plaintext
#ACT
GotoQuestDiaryAnotherQuest.txt@start
```
###4.完整任务脚本示例
以下是一个完整的收集物品任务脚本示例:
```plaintext
[@main]
#IF
#ACT
SendMsg0你接到了一个收集任务,请收集5个[物品名称]。
Goto@collecting
[@collecting]
#IF
CheckItemCount1007>=5
#ACT
SendMsg0你已经收集够了5个[物品名称],任务完成!
TakeItem10075
GiveExp3000
GiveMoney2000
GiveItem10081
Goto@end
#ELSE
SendMsg0你还需要收集[5-<$ITEMCOUNT(1007)>]个[物品名称]。
Goto@collecting
[@end]
SendMsg0感谢你的参与,任务结束!
```
###5.注意事项
-**脚本语法正确性**:编写脚本时要严格遵循Gom引擎的脚本语法,注意标签的大小写和指令的参数顺序。
-**逻辑完整性**:确保任务脚本的逻辑完整,避免出现死循环或逻辑漏洞,影响玩家的任务体验。
-**兼容性**:不同版本的Gom引擎可能对脚本语法和函数有细微差异,编写脚本时要考虑引擎的兼容性。

