View difference between Paste ID: WZx6Dnes and s69jSZJv
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/env python2
2
# -*- coding: utf-8 -*-
3
4-
# python2 — renpy же
4+
# python2 — for renpy
5
6
# Created by Anonymous
7
# WTFPL http://wtfpl.org/ 
8
9-
# Для любителей оперативно избавиться от тухлых помидоров:
9+
10-
# gnosis.xml и jsonpickle хотя и подавали надежды, но
10+
    """Let it loads its modules"""
11-
# с задачей не справились и не смогли десериализовать то,
11+
12-
# что сами до этого сериализовали.
12+
13-
# В pickle формата 0 руками ковыряться тоже не так тяжело.
13+
14-
# А хоть чуть-чуть програмистам поможет посмотреть
14+
15-
# что-нибудь вроде /usr/lib/python2.7/pickle.py
15+
16-
# Впрочем заранее спасибо за кучу идей относительно того,
16+
17-
# каким образом можно (де)сериализовать произвольные
17+
18-
# объекты Питона в более человеческом текстовом формате.
18+
19
def load():
20
    global persname
21-
    """Не важно, где, главное дать этой заразе загрузиться разок"""
21+
    global pers
22
    import cPickle as pickle
23
    with open(persname, "rb") as pfl:
24
        s = pfl.read().decode("zlib")
25
        pers = pickle.loads(s)
26
    print("Loaded persistent data into pers variable")
27
28
def save():
29
    global persname
30-
def ren2txt(ren, txt):
30+
    global pers
31
    import cPickle as pickle
32-
    with open(ren, "rb") as pfl:
32+
    with open(persname, "w+") as pfl:
33
        pdata = pickle.dumps(pers)
34-
        data = pickle.loads(s)
34+
35-
    print("Загрузили RenPy")
35+
36-
    with open(txt, "w+") as tfl:
36+
    print("Saved persistent data from pers variable")
37-
        pickle.dump(data, tfl, protocol=0) # 0 is readable
37+
38-
        tfl.flush()
38+
39-
    print("Сохранили TXT")
39+
40
    parser = argparse.ArgumentParser(description="RenPy pers shell")
41-
def txt2ren(txt, ren):
41+
    parser.add_argument('-ren', '--renpy-file', required = True, help = "RenPy persistent file")
42
    parser.add_argument('-gdr', '--game-dir', required = True, help = "Game dir with RenPy subfolder")
43-
    with open(txt, "r") as tfl:
43+
44-
        data = pickle.load(tfl)
44+
45-
    print("Загрузили TXT")
45+
46-
    with open(ren, "w+") as pfl:
46+
def runipython(*kvargs, **kwargs):
47-
        pdata = pickle.dumps(data)
47+
    import inspect
48
    for (k,v) in kwargs.items():
49
        inspect.stack()[0][0].f_locals[k] = v
50-
    print("Сохранили RenPy")
50+
    from IPython import embed
51
    embed()
52
53
def main():
54-
    parser = argparse.ArgumentParser(description="Перегоняет zlib(pickle) от RenPy в текст и назад")
54+
    global pers
55-
    parser.add_argument('-op', '--operation', choices = ['ren2txt', 'txt2ren'],
55+
    global persname
56-
                        required = True, help = "Куда преобразовывать")
56+
    pers = None
57-
    parser.add_argument('-ren', '--renpy-file', required = True, help = "Файл persistent от RenPy")
57+
58-
    parser.add_argument('-txt', '--editable-text', required = True, help = "Текст для ковыряния руками %%D")
58+
59-
    parser.add_argument('-gdr', '--game-dir', required = True, help = "Каталог игры с подкаталогом RenPy")
59+
60
    persname = args.renpy_file
61
62
    import_renpy(gdr)
63
    load()
64
    runipython(pers = pers, load = load, save = save)
65
66-
    op  = args.operation
66+
67-
    txt = args.editable_text
67+