Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.29 KB | None | 0 0
  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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement