Моя файловая структура выглядит следующим образом:
Код: Выделить всё
mods
- example-mod.iceandfire04
- cats.py
- examplemod.py
- scripts.py
- another-mod.iceandfire04
- cats.py
- anothermod.py
Вот часть моего кода (не может включать find_mod_classes или load_mod_info, потому что он был сгенерирован ИИ из-за моего низкого навыка работы с Python, но они печатаются при выполнении):
Код: Выделить всё
# load selected mods
for mod in iml_lib.find_mod_classes(selected_mods):
if mod.mod_id in selected_mods:
print(f"! Loading mod: {mod.name} ({mod.mod_id})")
iml_lib.load_mod_class(self.tbcml_mod, self.loader, mod)
Код: Выделить всё
def load_mod_class(tbcml_mod: tbcml.Mod, loader: tbcml.ModLoader, mod: IceMod):
"""Load all of the modifications and scripts from a mod class into the given `tbcml.Mod` instance."""
for modification in mod.modifications:
print(f" - Adding modification: {modification.__class__.__name__}")
tbcml_mod.add_modification(modification)
for script in mod.scripts:
print(f" - Adding script: {script.__class__.__name__}")
tbcml_mod.add_script(script)
mod.load(mod, mod=tbcml_mod, loader=loader)
print(f"✔ Loaded mod: {mod.name} ({mod.mod_id})")
Код: Выделить всё
class ExampleMod(iml_lib.IceMod):
name = "Example Mod"
mod_id = "example-mod.iceandfire04"
modifications = [cats.CustomCat()]
scripts = [scripts.AntibanScript()]
def load(self, loader: tbcml.ModLoader, mod: tbcml.Mod):
super().load(self, loader=loader, mod=mod)
print("Example Mod: You can put custom loading code here if needed!")
Код: Выделить всё
class AnotherMod(iml_lib.IceMod):
name = "Another Mod"
mod_id = "another-mod.iceandfire04"
modifications = [cats.AnotherCat()]
scripts = []
def load(self, loader: tbcml.ModLoader, mod: tbcml.Mod):
super().load(self, loader=loader, mod=mod)
print("Another Mod: yeah, you can add stuff here too")
Код: Выделить всё
load_mod_info executed.
load_mod_info executed.
load_mod_info executed.
load_mod_info executed.
load_mod_info executed.
Failed to load examplemod.py: module 'cats' has no attribute 'CustomCat'
load_mod_info executed.
Чтобы уточнить немного больше о load_mod_info, он сканирует любой файл .py на предмет их классов и проверяет, имеет ли он те же переменные, что и мод. Оттуда он создает и возвращает словарь информации о моде. Он делает это с помощью sys и importlib, объединяет имя родительской папки и исключает недопустимые символы, такие как тире или точки.
Итак, мой последний вопрос: как я могу предотвратить, чтобы эти модули, такие как Cats.py, не рассматривались как друг друга? Как уже было сказано, я пока не очень хорошо разбираюсь в Python, поэтому буду рад любым разработкам, выходящим за рамки базовых принципов.
Подробнее здесь: https://stackoverflow.com/questions/798 ... rent-paths
Мобильная версия