Advertisement
Guest User

Untitled

a guest
Feb 16th, 2023
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.56 KB | None | 0 0
  1. from os import mkdir, chdir
  2. from json import loads, dumps
  3. from random import choice
  4. from string import digits, ascii_lowercase, punctuation, ascii_letters
  5. import re
  6. import traceback
  7. import logging
  8.  
  9.    
  10.  
  11. class Item(object):
  12.    
  13.     def __init__(self):
  14.  
  15.         self.items_db = loads(open("items.json", "rb").read())
  16.         self.bundles_db = loads(open("Windows.json", "rb").read())
  17.  
  18.     def Add(self, item_id):
  19.  
  20.         self.item = self.items_db[item_id]
  21.         self.item_prefab = self.item["_props"]["Prefab"]["path"]
  22.         self.item_dependencies = self.bundles_db[self.item_prefab]["Dependencies"]
  23.  
  24.         print("\n\t[+] New item: %s.\n\n\t\t[+] Name: %s.\n\t\t[+] Prefab: %s.\n\n" % (item_id, self.item["_name"], self.item_prefab))
  25.  
  26.     def GetAssetFolder(path):
  27.  
  28.         return "/".join(path.split("/")[0:-1]) + "/"
  29.  
  30.     def GetAssetPathByRoot(path, root):
  31.  
  32.         path = path.split("/")
  33.         index = path.index(root)
  34.         return "/".join(path[index:])
  35.  
  36.     def _get_asset_path_by_root_(path, root):
  37.  
  38.         path = path.split("/")
  39.         index = path.index(root)
  40.         return "/".join(path[index:])
  41.  
  42.     def _manifest_by_mask_(self):
  43.  
  44.         keys = list(self.manifest.keys())
  45.         for key in keys:
  46.             new_key = Item._get_asset_path_by_root_(key, self.item_root_folder)
  47.             self.manifest[new_key] = self.manifest.pop(key)
  48.  
  49.         for prefab in self.manifest.keys():
  50.  
  51.             for dep in self.manifest[prefab]:
  52.  
  53.                 if self.asset_folder in dep:
  54.  
  55.                     new_dep = Item._get_asset_path_by_root_(dep, self.item_root_folder)
  56.                     index_dep = self.manifest[prefab].index(dep)
  57.                     self.manifest[prefab][index_dep] = new_dep
  58.  
  59.         for file in self.replace_file:
  60.  
  61.             new_file = Item._get_asset_path_by_root_(file, self.item_root_folder)
  62.             self.replace_file[file] = new_file
  63.  
  64.         print(self.replace_file)
  65.  
  66.  
  67.         for prefab in self.manifest:
  68.             print("[+] Manifest for %s:" % (prefab))
  69.             for dep in self.manifest[prefab]:
  70.                 print("\t%s" % (dep))
  71.  
  72.  
  73.     def _manifest_(self):
  74.  
  75.         manifest = {self.item_prefab:[]}
  76.         replace_file = {self.item_prefab: self.item_prefab}
  77.         asset_folder = Item.GetAssetFolder(self.item_prefab)
  78.  
  79.         critical_deps = []
  80.  
  81.         for dep in self.item_dependencies:
  82.  
  83.             if asset_folder in dep:
  84.  
  85.                 critical_deps.append(dep)
  86.                 replace_file[dep] = dep
  87.  
  88.             manifest[self.item_prefab].append(dep)
  89.  
  90.         for prefab in critical_deps:
  91.  
  92.             manifest[prefab] = []
  93.  
  94.             for dep in self.bundles_db[prefab]["Dependencies"]:
  95.  
  96.                 manifest[prefab].append(dep)
  97.  
  98.         self.manifest = manifest
  99.         self.replace_file = replace_file
  100.         self.asset_folder = asset_folder
  101.         self.item_root_folder = self.item_prefab.split("/")[-2]
  102.  
  103.         print("\n[+] Asset folder: %s\n" % (asset_folder))
  104.  
  105.  
  106.  
  107.  
  108.         for prefab in manifest:
  109.             print("[+] Manifest for %s\n" % (prefab))
  110.             for dep in manifest[prefab]:
  111.                 print("\t%s" % (dep))
  112.             print("\n")
  113.  
  114.         for path in replace_file:
  115.             print("[+] Replace :", path)
  116.  
  117.     def Manifest(self):
  118.  
  119.         root_folder = self.item_prefab.split("/")[-2]
  120.         asset_folder = Item.GetAssetFolder(self.item_prefab)
  121.         item_prefab = Item.GetAssetPathByRoot(self.item_prefab, root_folder)
  122.  
  123.  
  124.         manifest = {item_prefab:[]}
  125.         critical_dep = []
  126.         replace_file = {}
  127.  
  128.  
  129.         for dep in self.item_dependencies:
  130.  
  131.             if asset_folder in dep:
  132.  
  133.                 good_dep = Item.GetAssetPathByRoot(dep, root_folder)
  134.                 critical_dep.append(dep)
  135.                 manifest[item_prefab].append(good_dep)
  136.                 replace_file[dep] = good_dep
  137.  
  138.             else:
  139.  
  140.                 manifest[item_prefab].append(dep)
  141.  
  142.         for cr_dep in critical_dep:
  143.  
  144.             good_cr_dep = Item.GetAssetPathByRoot(cr_dep, root_folder)
  145.  
  146.  
  147. item = Item()
  148. item.Add("5bf3e03b0db834001d2c4a9c")
  149. item._manifest_()
  150. item._manifest_by_mask_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement