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!

3 comentários: