以下是关于新开传奇 TOP 引擎脚本定制中任务系统与成就系统的设计:
### 一、任务系统设计
#### (一)任务类型
1. **主线任务**:
- 引导玩家逐步熟悉游戏的基本操作、世界观和主要剧情。例如,玩家创建角色后,会接到一系列主线任务,从新手村开始,逐渐走向更高级的区域。
- 脚本示例:
```
[@MainTask1_Start]
#ACT
Say "欢迎来到传奇世界,新手!你的第一个任务是杀死 5 只鸡。";
SetTaskValue <$USERNAME> "MainTask1" 0 5 // 设置任务目标:杀死 5 只鸡
```
- 当玩家杀死怪物时,检查是否完成任务:
```
[@Monster_Dead]
#IF
CHECKTASKVALUE <$USERNAME> "MainTask1" 0 < 5 && <$KILLED_MONSTER_NAME> == "鸡"
#ACT
ADDTASKVALUE <$USERNAME> "MainTask1" 0 1 // 玩家杀死一只鸡,任务进度加 1
Say "你已经杀死了<$STR(GETTASKVALUE<$USERNAME> "MainTask1" 0)>只鸡,继续加油!";
#ELSEIF
CHECKTASKVALUE <$USERNAME> "MainTask1" 0 >= 5 && <$KILLED_MONSTER_NAME> == "鸡"
#ACT
GiveReward <$USERNAME> 500 // 给予玩家 500 金币奖励
Say "恭喜你完成了第一个主线任务,获得 500 金币奖励!";
ClearTaskValue <$USERNAME> "MainTask1" // 清除任务信息
GOTO @MainTask2_Start // 开启下一个主线任务
```
2. **支线任务**:
- 提供额外的游戏内容和挑战,可在玩家达到一定等级或完成某些条件后触发。
- 例如,玩家达到 10 级后可以触发一个支线任务:
```
[@LevelUp]
#IF
CHECKUSERLEVEL <$USERNAME> == 10
#ACT
GOTO @SideTask_Start
```
- 支线任务脚本:
```
[@SideTask_Start]
#ACT
Say "你现在 10 级了,接受这个支线任务吧:收集 10 个草药。";
SetTaskValue <$USERNAME> "SideTask1" 0 10 // 任务目标:收集 10 个草药
```
- 当玩家收集草药时检查任务进度:
```
[@Item_Pickup]
#IF
CHECKTASKVALUE <$USERNAME> "SideTask1" 0 < 10 && <$PICKED_ITEM_NAME> == "草药"
#ACT
ADDTASKVALUE <$USERNAME> "SideTask1" 0 1 // 玩家收集一个草药,任务进度加 1
Say "你已经收集了<$STR(GETTASKVALUE<$USERNAME> "SideTask1" 0)>个草药,继续努力!";
#ELSEIF
CHECKTASKVALUE <$USERNAME> "SideTask1" 0 >= 10 && <$PICKED_ITEM_NAME> == "草药"
#ACT
GiveReward <$USERNAME> 800 // 给予玩家 800 金币奖励
Say "支线任务完成,获得 800 金币奖励!";
ClearTaskValue <$USERNAME> "SideTask1"
```
3. **日常任务**:
- 每天可以重复完成的任务,通常有不同的任务目标和奖励,鼓励玩家每天登录游戏。
- 例如,每天的杀怪日常任务:
```
[@DailyTask_Start]
#ACT
Say "今日日常任务:杀死 20 只鹿。";
SetTaskValue <$USERNAME> "DailyTask1" 0 20 // 任务目标:杀死 20 只鹿
```
- 检查日常任务完成情况:
```
[@Monster_Dead_Daily]
#IF
CHECKTASKVALUE <$USERNAME> "DailyTask1" 0 < 20 && <$KILLED_MONSTER_NAME> == "鹿"
#ACT
ADDTASKVALUE <$USERNAME> "DailyTask1" 0 1 // 玩家杀死一只鹿,任务进度加 1
Say "你已经杀死了<$STR(GETTASKVALUE<$USERNAME> "DailyTask1" 0)>只鹿,继续加油!";
#ELSEIF
CHECKTASKVALUE <$USERNAME> "DailyTask1" 0 >= 20 && <$KILLED_MONSTER_NAME> == "鹿"
#ACT
GiveReward <$USERNAME> 1000 // 给予玩家 1000 金币奖励
Say "日常任务完成,获得 1000 金币奖励!";
ClearTaskValue <$USERNAME> "DailyTask1"
SetTaskValue <$USERNAME> "DailyTask1" 1 <$TIME> + 86400 // 重置任务,第二天可重新接取(86400 秒为一天)
```
#### (二)任务进度显示
- 玩家可以随时查看自己的任务进度,通过与特定 NPC 对话或使用命令查看。
```
[@Task_Progress_Check]
#ACT
Say "主线任务进度:";
Say "任务 1:杀死 5 只鸡,已完成<$STR(GETTASKVALUE<$USERNAME> "MainTask1" 0)>/5";
Say "支线任务进度:";
Say "任务 1:收集 10 个草药,已完成<$STR(GETTASKVALUE<$USERNAME> "SideTask1" 0)>/10";
Say "日常任务进度:";
Say "任务 1:杀死 20 只鹿,已完成<$STR(GETTASKVALUE<$USERNAME> "DailyTask1" 0)>/20";
```
### 二、成就系统设计
#### (一)成就类型
1. **战斗成就**:
- 基于玩家在战斗中的表现,如杀死特定数量的怪物、击败强大的 BOSS 等。
- 例如,杀死 100 只特定 BOSS 的成就:
```
[@Monster_Dead_BOSS]
#IF
<$KILLED_MONSTER_NAME> == "强大的 BOSS"
#ACT
ADDACHIEVEMENTVALUE <$USERNAME> "Kill100BOSS" 1 // 玩家杀死一只强大的 BOSS,成就进度加 1
// 检查是否达成成就
IF GETACHIEVEMENTVALUE <$USERNAME> "Kill100BOSS" >= 100
#ACT
Say "恭喜你达成成就:百次斩!";
GiveReward <$USERNAME> 5000 // 给予玩家 5000 金币奖励
SetAchievementStatus <$USERNAME> "Kill100BOSS" 1 // 标记成就已完成
ENDIF
```
2. **探索成就**:
- 玩家探索不同的地图区域、发现隐藏地点等可以触发。
- 例如,玩家进入一个隐藏地图时触发成就:
```
[@Map_Enter_Hidden]
#ACT
ADDACHIEVEMENTVALUE <$USERNAME> "ExploreHiddenMap" 1 // 进入隐藏地图,成就进度加 1
// 检查是否达成成就
IF GETACHIEVEMENTVALUE <$USERNAME> "ExploreHiddenMap" == 1
#ACT
Say "恭喜你达成成就:探秘者!";
GiveReward <$USERNAME> 3000 // 给予玩家 3000 金币奖励
SetAchievementStatus <$USERNAME> "ExploreHiddenMap" 1 // 标记成就已完成
ENDIF
```
3. **收集成就**:
- 玩家收集特定物品或套装时触发。
- 例如,收集一套特定套装的成就:
```
[@Item_Collect]
#IF
CHECKITEMSET 1001,1002,1003 // 检查玩家是否收集齐物品 ID 为 1001、1002、1003 的套装
#ACT
ADDACHIEVEMENTVALUE <$USERNAME> "CollectSet" 1 // 玩家收集齐套装,成就进度加 1
// 检查是否达成成就
IF GETACHIEVEMENTVALUE <$USERNAME> "CollectSet" == 1
#ACT
Say "恭喜你达成成就:套装收集者!";
GiveReward <$USERNAME> 4000 // 给予玩家 4000 金币奖励
SetAchievementStatus <$USERNAME> "CollectSet" 1 // 标记成就已完成
ENDIF
```
#### (二)成就展示与奖励
- 玩家可以通过与 NPC 对话查看自己的成就列表和已获得的成就奖励。
```
[@Achievement_Check]
#ACT
Say "你的成就:";
Say "战斗成就:";
IF GETACHIEVEMENTSTATUS <$USERNAME> "Kill100BOSS" == 1
Say "百次斩(已完成)";
ELSE
Say "百次斩(进度:<$STR(GETACHIEVEMENTVALUE<$USERNAME> "Kill100BOSS")>/100)";
ENDIF
Say "探索成就:";
IF GETACHIEVEMENTSTATUS <$USERNAME> "ExploreHiddenMap" == 1
Say "探秘者(已完成)";
ELSE
Say "探秘者(进度:<$STR(GETACHIEVEMENTVALUE<$USERNAME> "ExploreHiddenMap")>/1)";
ENDIF
Say "收集成就:";
IF GETACHIEVEMENTSTATUS <$USERNAME> "CollectSet" == 1
Say "套装收集者(已完成)";
ELSE
Say "套装收集者(进度:<$STR(GETACHIEVEMENTVALUE<$USERNAME> "CollectSet")>/1)";
ENDIF
```
通过上述任务系统和成就系统的设计,可以为新开传奇的 TOP 引擎增加丰富的游戏内容和挑战,提高玩家的游戏体验和游戏时长。在实际编写脚本时,要根据游戏的风格和玩家需求,灵活调整任务和成就的内容和奖励,同时要注意脚本的逻辑性和稳定性,确保在玩家完成任务和成就的过程中不会出现异常或错误。记得对系统进行充分测试,以保证玩家能够顺利体验这些功能。

