Fix DS2 and Stardew Valley following MO2 changes.

This commit is contained in:
Mikaël Capelle
2020-06-17 20:23:25 +02:00
parent 807f89c96f
commit 6afedb8ca5
2 changed files with 59 additions and 6 deletions
+52 -1
View File
@@ -1,5 +1,7 @@
# -*- encoding: utf-8 -*-
from typing import List, Tuple
from PyQt5.QtCore import QFileInfo
import mobase
@@ -7,7 +9,55 @@ import mobase
from ..basic_game import BasicGame
class DarkMessiahOfMightAndMagicGame(BasicGame):
class DungeonSiegeIIModDataChecker(mobase.ModDataChecker):
def __init__(self):
super().__init__()
def get_resources_and_maps(
self, tree: mobase.IFileTree
) -> Tuple[List[mobase.FileTreeEntry], List[mobase.FileTreeEntry]]:
ress: List[mobase.FileTreeEntry] = []
maps: List[mobase.FileTreeEntry] = []
for e in tree:
if e.isFile():
if e.suffix().lower() == "ds2res":
ress.append(e)
elif e.suffix().lower() == "ds2map":
maps.append(e)
return ress, maps
def dataLooksValid(
self, tree: mobase.IFileTree
) -> mobase.ModDataChecker.CheckReturn:
# Check if we have a Resources / Maps folder or .ds2res/.ds2map
ress, maps = self.get_resources_and_maps(tree)
if not ress and not maps:
if tree.exists("Resources") or tree.exists("Maps"):
return mobase.ModDataChecker.VALID
else:
return mobase.ModDataChecker.INVALID
return mobase.ModDataChecker.FIXABLE
def fix(self, tree: mobase.IFileTree) -> mobase.IFileTree:
ress, maps = self.get_resources_and_maps(tree)
if ress:
rfolder = tree.addDirectory("Resources")
for r in ress:
rfolder.insert(r, mobase.IFileTree.REPLACE)
if maps:
rfolder = tree.addDirectory("Maps")
for r in maps:
rfolder.insert(r, mobase.IFileTree.REPLACE)
return tree
class DungeonSiegeIIGame(BasicGame):
Name = "Dungeon Siege II"
Author = "Holt59"
Version = "0.1.0"
@@ -24,6 +74,7 @@ class DarkMessiahOfMightAndMagicGame(BasicGame):
def init(self, organizer: mobase.IOrganizer):
super().init(organizer)
self._featureMap[mobase.ModDataChecker] = DungeonSiegeIIModDataChecker()
return True
def executables(self):
+7 -5
View File
@@ -11,15 +11,17 @@ class StardewValleyModDataChecker(mobase.ModDataChecker):
def __init__(self):
super().__init__()
def getDataFolderName(self) -> str:
return "mods"
def dataLooksValid(self, tree: mobase.IFileTree) -> bool:
def dataLooksValid(
self, tree: mobase.IFileTree
) -> mobase.ModDataChecker.CheckReturn:
count_ok = 0
for e in tree:
if e.isDir():
count_ok = e.exists("manifest.json", mobase.IFileTree.FILE) # type: ignore
return count_ok > 0
if count_ok > 0:
return mobase.ModDataChecker.VALID
return mobase.ModDataChecker.INVALID
class StardewValleyGame(BasicGame):