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!

11 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
  5. Eu queria saber como fazer uma personagem que eu criei no jogo, fala o nome da protagonista que o jogado escolheu tipo:
    Minha amiga escolheu o nome da protagonista de Ana.
    E uma personagem do jogo fala o nome que minha amiga escolheu
    EXEMPLO:
    MARIA
    Oi tudo bem Ana?
    E se outra pessoa escolheu Alice
    MARIA
    Oi tudo bem Alice?.
    Alquem me explicar como

    ResponderExcluir
    Respostas
    1. vou tentar explicar
      no início do jogo, você tem que colocar os personagens, certo?
      tipo, define a = Character('fulaninho')
      a primeira coisa que vc vai fazer, é criar um desses. só que você vai ter que fazer o seguinte:
      define (aqui você coloca qualquer letra) = Character('[name]')
      aí, depois que você já colocou o label start e tudo mais, e quiser que o jogador defina o nome da personagem, você vai colocar esse código:

      $ name = renpy.input("1")
      if name == "":
      $ name = "2"

      no lugar onde eu coloquei o 1, você vai escrever algo como ''qual vai ser seu nome?'', ou qualquer coisa como voce preferir. ali vai ser onde a pessoa vai escrever o nome que quiser.
      ali no 2, vc vai colocar o nome original da personagem, pra caso o jogador ao definir o nome não colocar nada, vai aparecer o nome que vc colocou ali.

      agora, como no seu exemplo:
      pra maria falar o nome que o jogador escolheu, você tem que fazer o seguinte
      na hora de pôr a fala, ao invés de colocar ana ou alice, vc vai colocar [name]. dai vai aparecer o nome escolhido c;

      nao sei se ficou claro, espero q sim

      Excluir