SirSerje / unexpected-journey

An attempt to create text game on node.js engine ⚔️💰
0 stars 0 forks source link

[TASK] Create data structure document #9

Open SirSerje opened 5 years ago

SirSerje commented 5 years ago

Create data structure We need to discuss, how all data will store in our database, including authorization, session and game process. I propose to do this in current task

TODO list

Related story NOT SET YET

Related subtasks NOT SET YET

SirSerje commented 5 years ago

Schema for session :

_id: "KLYWJadQyXL0ICm7unAFwvyhjWZsLnX0"
expires: 2019-04-10T13:29:35.351+00:00
session: {"cookie":{"originalMaxAge":14400,"expires":"2019-04-10T13:29:35.351Z","httpOnly":true,"path":"/"},"userId":"5cacbcd775838b370714cd80"}

Schema for user:

Screen Shot 2019-04-10 at 4 32 49 PM

I propose to create new Collection kind of:

id: unique id
owner: link to user id (1 user can't have more than one account)
characters: [...]
quests: [...]
graveyard: [...]
playerinfo: [...]
//shoping items should be specified for each character
SirSerje commented 5 years ago
let item = {
    id: 0,
    name: "Shirt",
    wear: true,
    characteristic: {
        str: 1,
        int: -1,
    }
    //добавить износ
    //добавить стоимость
}
let character = {
    id: 2,
    name: "John Doe",
    level: 15,
    int: 10,
    str: 12,
    gold: 100,
    items : [item]
}
let action = {
    id: 543,
    name:"Helpful moment",
    description:"blah blah, take a punch and go out",
    type: "statChecker",
    conditions: {
        gold:"15",
        str: "8",
        verify: "all",
    },
    prize: [
        item,
        {gold: 20}, //? возможно деньги тоже надо описать структурой
        {healt: -5}

    ],
    dice: null, //кубик бросать не надо
    nextStep: ["309irtjlfk", "23regfk"], //айди на след комнату(ы)

}
let mapTile = {
         id: 235,
    name: "",
    description: "",
    image: "link",
    actions: []
}
let journey = {
    characterId: "03opwriegjkldf", //будем дергать сущность characters
    character: character,
    locations: [mapTile],
}
let root = {
    owner: "t094piorgjlkf", //кто владелец данной комнаты
    character: character,
    room: journey,
}
SirSerje commented 5 years ago

В виде JSON объекта. По сути если я начал игру - каждая игра будет таким объектом в базе лежать. Попробую описать логику: Я создал персонажа, нажал "начать игру" В этот момент создалась игровая сессия "приключение", назовем это так. В этом объекте храниться информация о текущих характеристиках персонажа, храниться ID юзера владеющего этой комнатой. room - это полное описание игрового приключения, которое будет происходить. Оно состоит из набора локаций. Каждая локация имеет айди. При попадании на каждую локацию, у нее есть описание и несколько путей ее прохождения - "действия" Каждая локация имеет несколько действий на выбор ('action'). Само "действие" - проверка наличия айтемов / характеристик / бросок кубика / просто определенный выбор с последствиями. Их мы будем добавлять как фичи, но пока у нас будет 3 действия - проверка характеристик / бросок кубика / выбор действия с последствиями В зависимости от выбранного действия, если персонаж не проиграл, он проходит на следующую локацию, которая предопределена.

{
  owner: "t094piorgjlkf", //ID юзера
  character: { //тут будет один или массив созданных персонажей
    id: 2,
    name: "John Doe",
    level: 15,
    int: 10,
    str: 12,
    gold: 100,
    items : [{
      id: 0, // думаю создать конфиг с вещами по айдишкам и по номеру давать или забирать
      name: "Shirt",
      wear: true,
      characteristic: {
        str: 1,
        int: -1
      }
      //добавить износ (?)
      //добавить стоимость (?)
    }]
  },
  room: {
    characterId: 2, //ссылка на персонажа по айдишке
    locations: [ //карта путешествия = массив локаций по которым перемещаешься
      {
      id: 235, //пока не знаю надо ли
      name: "",
      description: "",
      image: "link",
      actions: [{ //каждая локация предлагает несколько действий на выбор (~до 4)
        id: 543, //?
        name:"Helpful moment",
        description:"blah blah, take a punch and go out",
        type: "statChecker",
        conditions: {
          gold:"15",
          str: "8",
          verify: "all"
        },
        prize: [
          item,
          {gold: 20}, //? возможно деньги тоже надо описать структурой
          {healt: -5}
        ],
        dice: null, //кубик бросать не надо или будет массив бросков
        nextStep: ["309irtjlfk", "23regfk"] //айдишки на следующие локации
      }]
    }]
  }
}