melon JS と PHP で SQL DB を使用して、js で Web RPG を作成しています。この質問は、ノンプレイヤー キャラクター (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
};
ファイルが雑然としてしまうため、すべてのマップ ダイアログを同じファイルに保存するわけではありません。代わりに、マップが変更されたときに、新しいダイアログ セットを含む新しいファイル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 スタイルに似ていますが、世界中のランダムな人々と話すことで、必要なクエストを柔軟に開始できます。
ゲーム データ:ゲームは、現在および完了したレベル、レベルごとのクエスト名、クエストごとの npc 名、および各ログイン プレイヤー ID の npc 名ごとのタスクを保存する必要があります。次のツリーをロードする必要があります (赤 = 完全)。
私の質問
- ゲームが読み込まれると、上記のツリーで述べたことが記憶されているはずです。レベルとクエスト情報をロードするように DB をセットアップしました (DB から現在のレベルとクエスト番号を返すだけで、ループが現在のレベルとクエストに到達するまで、配列に
NPC dialog
値を格納する上記の構造をループします。 num from DB)...プレイヤーの座標と経験値も...currentAndCompleteLevels
currentAndCompleteQuests
ただし、プレーヤーがいつでも NPC タスク リストを開始、一時停止、再開できるようにしているため、データベースにnpc completed num
and列を実際に追加することはできません。tasks completed num
これは、NPC クエストを完了する順序が線形ではないNPC dialog
ため、構造をループして情報をロードするのと同じ方法でlevel
ループできないためです。どういうわけか、NPC ごとに完了したタスク数を追跡する必要があります。これどうやってするの?quest
NPCData
ゲーム内のすべての NPC を格納する新しいテーブルを作成し、current task num
その NPC を格納することを考えていましたが、ゲームにログインした新しいプレイヤーのために新しいエントリを作成する必要があります。
または、 userstatsテーブルに2 つの DB 列を作成しcurrNPC
、currTask
NPC ごとにすべてのタスクを格納する連想配列をループしますか? ただし、完了した NPC ごとに 1 つの列と、NPC ごとの完了したタスクが必要になります。おい、頭がぐるぐるしてる。
現在の DB スキーマ: