我正在 js 中制作一个 web RPG,使用 melon JS 和 SQL DB 以及 PHP。这个问题是关于如何存储每个非玩家角色 (NPC) 的已完成任务和当前任务。
NPC对话和任务数据:所有对话框都存储在一个js对象中,结构如下:
var dialog = {
quests : {
quest1 : {
NPCName ("Joe"): {
TaskName ("1 - Introductions") : {
"english" :
[
"Hello, here is some dialog",
"More dialog..." (stored in array so I can cycle through it)
],//more items per task
}, //more tasks per NPC
}, //more NPCs per quest
}, //more quests options per "quests"
}, //more options in dialog besides "quests" if I want
};
I'm not将所有地图对话框存储在同一个文件中,因为该文件会变得太混乱......所以相反:当地图更改时,我使用js_require
加载到一个新的js
带有一组新对话框的文件:
loadNpcDialog : function (dialogNumber) {
require(["./dialog/npc_dialog_level_" + dialogNumber + ".js"], function(dialog) {
});
},
任务编号:当创建一个新的 NPC 时(类game.NPCEntity
),我为每个 NPC 实例创建一个局部变量,名为taskNum
,设置为 0。当他们完成任务时,我只需访问并递增该 NPC 的任务编号:
game.player = me.game.getEntityByName(game.data.currNPC)[0];
game.player.taskNum++;
对于这款RPG,我想要实现以下目标:
GTA 风格的免费世界任务队列:等级进展、任务进展和每个 NPC 任务的进展是线性的(完成第 1 级进入第 2 级等),但对于每个任务,都会生成一组 NPC...(你可以将它们视为子任务),每个包含 1 到 n 个任务。我想建立任务队列的灵活性,允许玩家以任何顺序与任何生成的 NPC 对话...并按线性顺序完成任务(任务 1,然后 2,然后 3...)。这就像 GTA 风格,因为整个游戏遵循线性进展,但让你可以通过与世界上的随机人交谈来灵活地开始任何你想要的任务。
游戏数据:游戏应该存储当前的and每个登录玩家 ID 的已完成关卡、每个关卡的任务名称、每个任务的 npc 名称以及每个 npc 名称的任务。它应该加载以下树(红色=完成):
我的问题
- 当游戏加载时,它应该记住我在上面的树中提到的那些事情。我已经设置了数据库来加载级别和任务信息(我只是从数据库返回当前级别和任务编号,然后循环遍历
NPC dialog
上面显示的结构将值存储在currentAndCompleteLevels
and currentAndCompleteQuests
数组直到循环到达当前级别和来自DB的任务编号)...以及玩家的坐标和经验...
然而,由于我允许玩家随时开始、暂停、然后恢复任何 NPC 任务列表,所以我无法真正添加npc completed num
and tasks completed num
列到数据库。这是因为我无法循环NPC dialog
结构和负载的方式与我相同level
and quest
信息,因为你完成 NPC 任务的顺序是非线性。我必须以某种方式跟踪每个 NPC 已完成的任务数。我怎样才能做到这一点?
我正在考虑创建一个新的NPCData
表存储游戏中所有NPC,然后存储current task num
对于那个 NPC...但是我必须为登录我游戏的任何新玩家创建一个新条目。
或者也许创建两个数据库列用户统计信息 table, currNPC
and currTask
,然后循环遍历存储每个 NPC 的所有任务的关联数组?但随后我需要为每个已完成的 NPC 以及每个 NPC 已完成的任务创建一个列。哎哟,我头晕了。
当前数据库架构: