View difference between Paste ID: wFcfxi3A and atsbvNXU
SHOW: | | - or go back to the newest paste.
1
##### A guide on how to: Modify the game to write the save files to your computer
2
#         and add an autosave feature (Plus other tweaks). [Offline users only]
3
# 
4
### Prerequisite: 
5
#
6
#   First, familiarize yourself with the following two sections
7
#   of the code. I'll need to refer to them frequently
8
# 
9
#     [help texts]
10
#     link - https://github.com/aidungeon99999/AIDungeon-Uncensored/blob/7989620d2e400a92d76e432daf26ec0415c3abdf/play.py#L59-L74
11
# 
12
#     Begins with:
13
14
def instructions():
15
16
#     This is what gets printed when you type 'help'. Not essential
17
#     but probably still a good idea to modify.
18
#
19
#
20
#     [command block]
21
#     link - https://github.com/aidungeon99999/AIDungeon-Uncensored/blob/7989620d2e400a92d76e432daf26ec0415c3abdf/play.py#L138-L195
22
#
23
#     The section starting with
24
25
if action == "restart":
26
    rating = input("Please rate the story quality from 1-10: ")
27
    rating_float = float(rating)
28
    story_manager.story.rating = rating_float
29
    break
30
31
#     this is the section that handles the actual input command logics.
32
33
34
35
36
37
### To add autosaving to local directory:
38
39
# 1. In your AIDungeon directory, create a new directory named "saves"
40
41
# 2. Open "./story/story_manager.py" and add
42
43
import copy
44
45
# to the top of the file
46
47
# then replace:
48
49
    def save_to_storage(self):
50
        self.uuid = str(uuid.uuid1())
51
52
53
        story_json = self.to_json()
54
        file_name = "story" + str(self.uuid) + ".json"
55
        f = open(file_name, "w")
56
        f.write(story_json)
57
        f.close()
58
59
        FNULL = open(os.devnull, 'w')
60
        p = Popen(['gsutil', 'cp', file_name, 'gs://aidungeonstories'], stdout=FNULL, stderr=subprocess.STDOUT)
61
        return self.uuid
62
63
    def load_from_storage(self, story_id):
64
65
        file_name = "story" + story_id + ".json"
66
        cmd = "gsutil cp gs://aidungeonstories/" + file_name + " ."
67
        os.system(cmd)
68
        exists = os.path.isfile(file_name)
69
70
        if exists:
71
            with open(file_name, 'r') as fp:
72
                game = json.load(fp)
73
            self.init_from_dict(game)
74
            return str(self)
75
        else:
76
            return "Error save not found."
77
78
# with
79
#
80
    def save_to_storage(self, overwrite=False):
81
        ref = self if overwrite else copy.copy(self)
82
83
        if overwrite == False:
84
            ref.uuid = str(uuid.uuid1())
85
86
        story_json = ref.to_json()
87
        file_name = "saves\\" + str(ref.uuid) + ".json"
88
        f = open(file_name, "w")
89
        f.write(story_json)
90
        f.close()
91
92
        return ref.uuid
93
94
    def load_from_storage(self, story_id):
95
96
        file_name = "saves\\" + story_id + ".json"
97
        with open(file_name, 'r') as fp:
98
            game = json.load(fp)
99
        self.init_from_dict(game)
100
        return str(self)
101
102
# then replace:
103
104
    def load_new_story(self, story_id):
105
        file_name = "story" + story_id + ".json"
106
        cmd = "gsutil cp gs://aidungeonstories/" + file_name + " ."
107
        os.system(cmd)
108
        exists = os.path.isfile(file_name)
109
110
        if exists:
111
            with open(file_name, 'r') as fp:
112
                game = json.load(fp)
113
            self.story = Story("")
114
            self.story.init_from_dict(game)
115
            return str(self.story)
116
        else:
117
            return "Error: save not found."
118
119
# with
120
121
    def load_new_story(self, story_id):
122
        file_name = "saves\\" + story_id + ".json"
123
        with open(file_name, 'r') as fp:
124
            game = json.load(fp)
125
        self.story = Story("")
126
        self.story.init_from_dict(game)
127
        return str(self.story)
128
129
# 3. In "./play.py", go to the [help texts] section and add
130
    text += '\n  "autosave"     Toggle autosave on and off. Default is off'
131
132
# 4. In [command block], replace the following:
133
134
            elif action == "save":
135
                if upload_story:
136
                    id = story_manager.story.save_to_storage()
137
                    console_print("Game saved.")
138
                    console_print("To load the game, type 'load' and enter the following ID: " + id)
139
                else:
140
                    console_print("Saving has been turned off. Cannot save.")
141
142
# with
143
144
            elif action == "autosave":
145
                autosave = not autosave
146
                console_print("Autosaving is now turned " + ("on" if autosave else "off"))
147
148
            elif action == "save":
149
                if upload_story:
150
                    print("Save to new file, or overwrite the current file?")
151
                    print("0) Save as new\n1) Save to current file\n")
152
                    choice = get_num_options(2)
153
                    id = story_manager.story.save_to_storage(overwrite=(choice == 1))
154
                    console_print("Game saved.")
155
                    console_print(
156
                        "To load the game, type 'load' and enter the following ID: "
157
                        + id
158
                    )
159
                else:
160
                    console_print("Saving has been turned off. Cannot save.")
161
162
# 5. Below the line:
163
    upload_story = True
164
# add
165
    autosave = False
166
167
# 6. Below
168
    while True:
169
        if story_manager.story != None:
170
            del story_manager.story
171
# add in
172
        if autosave:
173
            story_manager.story.save_to_storage(overwrite=True)
174
175
176
### Change 'temperature' and 'top_k' while in progress
177
# !! Warning: Requires a lot of RAM, make sure you have ~6GB of free memory !!
178
179
# 1. In [help texts], add
180
    text += '\n  "settemp"      Changes the generator temperature'
181
    text += '\n  "settopk"      Changes the generator top_k'
182
183
# 2. In [command block] add in
184
            
185
            elif action == "settemp":
186
                temp = float(input("Set a new temperature\n> "))
187
                story_manager.generator = GPT2Generator(temperature=temp, top_k=top_k)
188
189
            elif action == "settopk":
190
                top_k = int(input("Set a new top_k\n>"))
191
                story_manager.generator = GPT2Generator(temperature=temp, top_k=top_k)
192
193
### Change 'memory' while in progress, this is how much of the current story
194
#   you want to feed to the generator
195
196
# 1. In [help texts], add
197
198
    text += '\n  "setmem"       Changes the memory value. Default is 20, try lowering it if your game crashes after playing for a while'
199
200
# 2. In [command block] add
201
202
            elif action == "setmem":
203
                new_mem = input("Enter a new memory value\n> ")
204
                story_manager.story.memory = int(new_mem)
205
206
### Print out the current settings
207
208
# 1. In [help texts]
209
210
text += '\n  "showsetting"  Display current settings and generator parameters'
211
212
# 2. In [command block]
213
214
            elif action == "showsetting":
215
                text = "nosaving is set to:    " + str(not upload_story)
216
                text += "\nautosave is set to:    " + str(autosave)
217
                text += "\nmemory is set to:      " + str(story_manager.story.memory)
218
                text += "\ntemperature is set to: " + str(temp)
219
                text += "\ntop_k is set to:       " + str(top_k)
220
                print(text)
221
222
223
224
# (English is not my primary language and this is my first
225
#   time writing a guide, so if you feel that any part of
226
#   this document is confusing or poorly worded, feel free
227
#   to rewrite it and redistribute your own version)