gpt4 book ai didi

javascript - RPG——存储玩家数据

转载 作者:可可西里 更新时间:2023-11-01 06:33:45 28 4
gpt4 key购买 nike

鉴于以下树结构,每个登录的玩家都可以拥有当前和已完成级别的数据、每个级别的任务、每个任务的 NPC 以及每个 NPC 的多个任务......我正在尝试找出最好的方法存储每个玩家的当前和完成数据。

enter image description here

我之前问过这个问题,虽然太详细了。有人要求我概括这个问题......所以如果你想要更多的上下文,请看这里:

RPG - storing player data for semi-complex tree structure

关于我的 RPG 结构的一些信息:

  • 级别、每个级别的任务和每个 NPC 的任务按时间顺序完成。
  • NPC 对话和任务对话数据存储在 npc_dialog_1.js 文件中的 js 对象中,结构如下:

    var dialog = {
    quests : {
    questName : {
    NPCName: {
    TaskName: {
    "english" :
    [
    "Hello, here is some dialog",
    ],//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
    };

    我将每个 dialog 对象存储在每个 map 的单独 npc_dialog_n.js 文件中,我正在使用 requireJS 检索。这将减少单个 npc_dialog 文件中的困惑情况。

  • 但是,每个任务的 NPC 可以按任何顺序开始...这是在尝试模仿 GTA 风格的任务队列,因为游戏遵循一般的线性进程,但对于每个任务,您都可以与多个 NPC,并随时开始、暂停和恢复 NPC 的任务。

由于玩家可以在给定时间开始、暂停和恢复每个 NPC 的任务,我正在尝试找出存储每个玩家当前和已完成数据的最佳方法。

mfirdaus 推荐了以下具有 M:M 关系 b/t 用户和 npc 的数据库表...但这会很快加起来,因为每个玩家每个任务可以有多个 NPC,并且启动了多个任务每个 NPC ... 有什么办法解决这个设置吗?

enter image description here

我当前的数据库架构 enter image description here :

谢谢

最佳答案

选择正确的使用方法

假设你有这个数组:

$player_quest_status = array("quest1" => 100,
"quest2" => 90,
"quest3" => 50);

将这些数组存储到数据库中有 2 个选项。

  1. 使用 PHP json_encode():

    $player_quest_status_json = json_encode($player_quest_status);
    //then you can store $player_quest_status_json variable using INSERT.UPDATE

    声明 //编码时的数组:{"quest1":100,"quest2":100,"quest3":100}

    从数据库中获取值后,使用 json_decode 将其转换回数组。

  2. 使用 PHP serialize():

    $player_quest_status_json = serialize($player_quest_status);
    //array when encoded: a:3{s:6:"quest1";i:100;s:6:"quest2";i:100;s:6:"quest3";i:100;}

有关您想使用哪个功能的更多信息:
Preferred method to store PHP arrays (json_encode vs serialize)

虽然我仍然推荐 json,因为它更具可扩展性。


构造你的数组

$player_quest_status = array("player_id" => 1,
"level" => 1,
"quests" => array( 1/*quest_id*/ => array("percent_completed" => 100,
"quest_title" => "the first quest"),
2/*quest_id*/ => array("percent_completed" => 80,
"quest_title" => "the second quest"),
3/*quest_id*/ => array("percent_completed" => 50,
"quest_title" => "the 3rd quest")
)
);

$player_npc_status = array("npc" => array( 1 => array("name" => "lawrence",
"tasks" => array( 1 => array("task_title" => "title 1",
"is_completed" => 1),
2 => array("task_title" => "title 2",
"is_completed" => 1),
3 => array("task_title" => "title 3",
"is_completed" => 0))
),
2 => array("name" => "viscocent",
"tasks" => array( 1 => array("task_title" => "title 4",
"is_completed" => 1),
2 => array("task_title" => "title 5",
"is_completed" => 2),
3 => array("task_title" => "title 6",
"is_completed" => 0))
),
)

);

关于javascript - RPG——存储玩家数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com