在传奇Gom引擎中,QuestDiary文件夹下的任务脚本能够实现多种复杂的任务逻辑,以下为你详细介绍:
### 1. 多条件复合任务
任务的触发或完成需要同时满足多个不同类型的条件,增加任务的挑战性和趣味性。
- **等级、物品与杀怪条件结合**:玩家需要达到一定等级,拥有特定物品,并且杀死指定数量的怪物才能完成任务。
```plaintext
[@main]
#IF
CheckLevelGreater 30
CheckItem 1001 2
CheckKillMonCount 骷髅将军 5
#ACT
SendMsg 0 你满足了所有条件,任务完成!
GiveExp 8000
GiveMoney 5000
GiveItem 1002 1
Goto @end
#ELSE
SendMsg 0 你还未满足任务要求,请继续努力。
Goto @main
[@end]
SendMsg 0 任务结束,感谢参与!
```
- **时间与地图条件结合**:玩家需要在特定时间内到达指定地图完成任务。
```plaintext
[@main]
#IF
CheckDateTime 2025-03-01 18:00:00 2025-03-01 20:00:00
CheckMap 5
#ACT
SendMsg 0 你在规定时间内到达了指定地图,任务完成!
GiveExp 6000
GiveMoney 4000
Goto @end
#ELSE
SendMsg 0 你未在规定时间内到达指定地图,任务失败。
Goto @fail
[@end]
SendMsg 0 任务圆满完成。
[@fail]
SendMsg 0 很遗憾,任务失败了。
```
### 2. 任务链与任务分支
- **任务链**:一系列相互关联的任务,玩家必须依次完成前一个任务才能开启下一个任务,形成连贯的剧情线。
```plaintext
; 第一个任务:送信
[@task1_main]
#IF
#ACT
SendMsg 0 你接到第一个任务,将信件送到村长手中。
Goto @task1_delivery
[@task1_delivery]
#IF
CheckQuestVar 1 ; 假设完成送信后设置任务变量1
#ACT
SendMsg 0 你成功送完信,第一个任务完成!
GiveExp 2000
SetQuestVar 1 1
Goto @task2_main
#ELSE
SendMsg 0 信件还未送达,请继续。
Goto @task1_delivery
; 第二个任务:杀怪
[@task2_main]
#IF
CheckQuestVar 1 1
#ACT
SendMsg 0 现在开始第二个任务,杀死10只野猪。
Goto @task2_killing
#ELSE
SendMsg 0 你需要先完成第一个任务。
Goto @task1_main
[@task2_killing]
#IF
CheckKillMonCount 野猪 10
#ACT
SendMsg 0 你已杀死10只野猪,第二个任务完成!
GiveExp 3000
SetQuestVar 2 1
Goto @task3_main
#ELSE
SendMsg 0 你还需杀死 [10 - <$KILLMONCOUNT(野猪)>] 只野猪。
Goto @task2_killing
; 第三个任务:寻找宝物
[@task3_main]
#IF
CheckQuestVar 2 1
#ACT
SendMsg 0 最后一个任务,找到神秘宝物。
Goto @task3_searching
#ELSE
SendMsg 0 你需要先完成第二个任务。
Goto @task2_main
[@task3_searching]
#IF
CheckQuestVar 3 ; 假设找到宝物后设置任务变量3
#ACT
SendMsg 0 你找到了宝物,整个任务链完成!
GiveExp 5000
GiveMoney 6000
GiveItem 1003 1
Goto @end
#ELSE
SendMsg 0 宝物还未找到,请继续寻找。
Goto @task3_searching
[@end]
SendMsg 0 恭喜你完成了整个任务链!
```
- **任务分支**:根据玩家的选择或行为,任务会走向不同的分支,产生不同的结果和奖励。
```plaintext
[@main]
#IF
#ACT
AskText 你面前有两条路,选择东边(A)还是西边(B)? <$STR(S1)>
If $STR(S1) == A
Goto @eastPath
ElseIf $STR(S1) == B
Goto @westPath
Else
SendMsg 0 输入无效,请重新输入。
Goto @main
[@eastPath]
#IF
#ACT
SendMsg 0 你选择了东边的路,遇到了神秘商人,获得了珍贵道具。
GiveItem 1004 1
Goto @end
[@westPath]
#IF
#ACT
SendMsg 0 你选择了西边的路,遭遇了强大怪物,成功击败后获得大量经验。
GiveExp 8000
Goto @end
[@end]
SendMsg 0 本次任务结束。
```
### 3. 动态任务目标
任务目标会根据玩家的行为或游戏中的事件动态变化。
- **怪物数量动态调整**:如果玩家在一定时间内未能完成杀怪任务,怪物数量会减少,降低任务难度。
```plaintext
[@main]
#IF
#ACT
SetQuestVar 1 15 ; 初始杀怪数量为15只
SendMsg 0 你需要杀死 <$QUESTVAR(1)> 只蜘蛛。
Goto @killing
[@killing]
#IF
CheckKillMonCount 蜘蛛 <$QUESTVAR(1)>
#ACT
SendMsg 0 你完成了杀怪任务!
GiveExp 4000
GiveMoney 3000
Goto @end
#ELSE
CheckDateTimePassed 1800 ; 检查是否过了30分钟
#IF
SubQuestVar 1 5 ; 减少5只杀怪目标
SendMsg 0 由于时间已过30分钟,杀怪目标减少为 <$QUESTVAR(1)> 只。
#ENDIF
SendMsg 0 你还需杀死 [<$QUESTVAR(1)> - <$KILLMONCOUNT(蜘蛛)>] 只蜘蛛。
Goto @killing
[@end]
SendMsg 0 任务完成,奖励已发放!
```
### 4. 限时任务与循环任务
- **限时任务**:玩家需要在规定时间内完成任务,增加任务的紧迫感。
```plaintext
[@main]
#IF
#ACT
SetQuestTime 3600 ; 设置任务时间为1小时
SendMsg 0 你有1小时的时间完成这个收集12个宝石的任务。
Goto @collecting
[@collecting]
#IF
CheckItemCount 1005 12
#ACT
SendMsg 0 你在规定时间内完成了任务,奖励丰厚!
GiveExp 7000
GiveMoney 5000
GiveItem 1006 1
Goto @end
#ELSE
CheckQuestTimeOver
#IF
SendMsg 0 很遗憾,时间已到,任务失败。
Goto @fail
#ENDIF
SendMsg 0 你还需收集 [12 - <$ITEMCOUNT(1005)>] 个宝石,剩余时间: <$QUESTTIME> 秒。
Goto @collecting
[@end]
SendMsg 0 任务成功完成。
[@fail]
SendMsg 0 任务失败,请下次再试。
```
- **循环任务**:任务可以重复完成,每次完成后给予不同的奖励或难度递增。
```plaintext
[@main]
#IF
#ACT
SendMsg 0 你可以开始这个循环杀怪任务,每次需要杀死比上次多2只的僵尸。
SetQuestVar 1 5 ; 初始杀怪数量为5只
Goto @killing
[@killing]
#IF
CheckKillMonCount 僵尸 <$QUESTVAR(1)>
#ACT
SendMsg 0 你完成了本次杀怪任务!
GiveExp <$QUESTVAR(1)> * 100
GiveMoney <$QUESTVAR(1)> * 50
AddQuestVar 1 2 ; 下次杀怪数量增加2只
SendMsg 0 你可以再次接受任务,下次需要杀死 <$QUESTVAR(1)> 只僵尸。
Goto @main
#ELSE
SendMsg 0 你还需杀死 [<$QUESTVAR(1)> - <$KILLMONCOUNT(僵尸)>] 只僵尸。
Goto @killing
```
### 5. 团队协作任务
需要多个玩家合作完成的任务,促进玩家之间的互动和协作。
```plaintext
[@main]
#IF
CheckTeamCount >= 3 ; 检查团队人数是否不少于3人
#ACT
SendMsgToTeam 0 团队任务开启,你们需要共同击败邪恶魔王。
Goto @fighting
#ELSE
SendMsg 0 团队人数不足3人,无法开启任务。
Goto @main
[@fighting]
#IF
CheckKillMonCount 邪恶魔王 1
#ACT
SendMsgToTeam 0 恭喜团队,成功击败邪恶魔王,任务完成!
ForEachTeamMember
GiveExp 5000
GiveMoney 3000
GiveItem 1007 1
Next
Goto @end
#ELSE
SendMsgToTeam 0 邪恶魔王还未被击败,继续战斗!
Goto @fighting
[@end]
SendMsgToTeam 0 团队任务圆满结束。
```
传奇Gom引擎中QuestDiary文件夹下的任务脚本可以实现哪些复杂的任务逻辑?
来源:
作者:
点击:

