Persistent Data

Agora vamos aprender algo muito interessante, e que estou usando na minha visual novel, a Persistent Data. Como o nome já diz, é uma informação que persiste, ou seja, mesmo dando load, fechando o jogo, não vai poder mudar. Também serve para passar informações pra uma sequência. Ex: No jogo 1, matei X. No 2, vão lembrar que matei X. Ou até mesmo: No jogo Y, do meu amigo, ganhei um medalhão. No jogo X,do meu outro amigo, posso ser lembrado que ganhei aquele medalhão. Isto é, se fizerem uma Persistent Data juntos.

É extremamente simples, é dividido em duas partes. Uma é Per-game Persistent Data que você só vai usar no seu jogo, nada de sequências. E a outra que pode ser compartilhada, Multi Persistent.
1) Vou usar a historinha do outro tutorial:


label start:
menu:
    "Comprar um Iphone" if not persistent.a:
        $ presente = "iphone"
        me "Vou levar o Iphone!"
        $ persistent.a = True

Explicações:
    "Comprar um Iphone" if not persistent.a:
- Essa opção só irá aparecer se a variável “persistent.a” for “False”. E como eu não defini ela antes, já está em False.

        $ persistent.a = True
- Depois que você escolhe a primeira opção, a variável “persistent.a” vai ser definida como “True


Se você der Load pro começo do jogo, ou fechar e tentar de novo, a opção “Comprar um Iphone” não irá mais aparecer. Isso é bom pra criar um jogo mais interessante, proibindo os jogadores de mudarem suas decisões até completarem o jogo, ou surpresas que só desbloqueiam depois de terminar.
OBS:
Toda Persistent Data precisa começar com “persistent.” Ex: persistent.b , persistent.nhk


Outro exemplo:
    python:
        if persistent.plays is None:
            persistent.plays = 1
        else:
            persistent.plays += 1

        plays = persistent.plays

    "Por exemplo, eu posso dizer que você viu essa linha [plays] vez(es).

Quando usamos números, precisamos colocar o comando python:
        if persistent.plays is None:
            persistent.plays = 1
- Se a variável persistent.plays for nula, ela se tornará 1.

        else:
            persistent.plays += 1
- Em qualquer outro caso, se somará +1 à variável.

        plays = persistent.plays
- Para não ter que ficar escrevendo “persistent.plays”, podemos redefini-la para apenas “plays”

    "Por exemplo, eu posso dizer que você viu essa linha [plays] vez(es).
- Resultado do “plays = persistent.plays”. Irá mostrar o valor da variável.


2) Já aprendemos a per-game Persistent, agora vamos usar a Multi Persistent.
Primeiro, criamos um objeto usando o comando init, que vai antes de todos os códigos do jogo. Só se modifica onde estiver sublinhado, que é o nome de onde vão ser salvas as Multi PDs. Coloque algo bem complicado, pois se dois jogos possuírem o mesmo, vão compartilhar a Persistent Data. Ex:
init:
    $ mp = MultiPersistent("teste.renpybrasil")

Em seguida, continuamos com o jogo, definimos os personagens e imagens. E usamos o label start:

    python:
        if mp.plays is None:
            mp.plays = 1
        else:
            mp.plays += 1

        mp.save()
        plays = mp.plays
De acordo com a Multi Persistent Data, você viu essa linha [plays] vez(es).

É o mesmo caso do exemplo anterior. Com exceção de:
        mp.save()
Toda vez que modificar uma Multi, precisa usar esse comando para salvá-la.
OBS:
Toda Multi Persistent Data precisa começar com “mp.” Ex: mp.teste , mp.arte

Outro exemplo:
Um jogo dividido em duas partes, aqui um código do primeiro:

init python:
    mp = MultiPersistent("clannad.game")

label final:

    $ mp.parte1.final = True
    $ mp.save()

    e "Você terminou a parte 1, vejo você na 2!

Agora um código do segundo:

init python:
    mp = MultiPersistent("clannad.game")

label start:

    if parte1.final:
         e "Vejo que terminou a parte 1, bem-vindo de volta!
    else:
         e "Hmm, você ainda não terminou a parte 1, porque não volta depois?"
        return


 Em caso de dúvidas, use os comentários!

9 comentários:

  1. meu game terá vários capítulos, como faço para usar o "persistent data" para salvar que quando alguém completar o capítulo, se não toda vez que ela sair, terá que recomeçar.

    ResponderExcluir
    Respostas
    1. Só criar uma persistent data e no fim do capítulo alterar ela pra True. Então use as condições.

      Excluir
  2. Oi, tudo bem? Tenho mais uma dúvida: bom, minha personagem, no quarto dela, tem algumas opções: "Ler um poema", "Tomar um banho", "Olhar pela janela". Eu já sei configurar, tipo: quando ela escolhe uma opção, esta não aparecerá novamente. Mas, nessa cena tem um diálogo grande, e quando ela voltasse para essa cena, eu gostaria que aparecessem as opções, mas não o diálogo. Como configurar?

    ResponderExcluir
    Respostas
    1. O mais recomendado seria usar esse tutorial:
      http://renpybrasil.blogspot.com.br/2015/02/escolhas-condicoes-e-variaveis.html

      Apenas use uma condição if pro diálogo, e não pras opções.

      Excluir
  3. Oi tudo bem?Então eu queria perguntar se vocês sabem como colocar nome interativo ex:
    Minha amiga quer colocar o nome da personagem no jogo de Anna e outra amiga minha quer colocar Daiana.
    Eu quero muito saber como colocar nome assim obrigada pela atenção.

    ResponderExcluir
    Respostas
    1. http://renpybrasil.forumeiro.com/t69-nome-e-sexo-personalizados-do-jogador-avancado

      Excluir
  4. Eu gostaria de saber o que tem de modificar para fazer que o jogo identifique que o jogador jogou mais de uma vez? (duas, três vezes, por aí)

    ResponderExcluir
    Respostas
    1. Apenas crie uma variável e quando o jogador completar o jogo modifique ela. Depois quando ele for jogar de novo use o comando if pra verificar.

      Excluir