Fika-Tarkov/plugins/basic_games/games/game_spt.py

89 lines
2.5 KiB
Python
Raw Normal View History

2025-01-03 00:25:17 -05:00
from typing import List, Tuple
from PyQt6.QtCore import QFileInfo
import mobase
from ..basic_game import BasicGame
from ..basic_features import BasicModDataChecker, GlobPatterns
class SPTGame(BasicGame, mobase.IPluginFileMapper):
Name = "SPT Plugin"
Author = "Archon"
Version = "1.1.2"
GameName = "SPT"
GameShortName = "spt"
GameBinary = "SPT.Launcher.exe"
GameDataPath = "%GAME_PATH%"
GameSaveExtension = "json"
GameSavesDirectory = "%GAME_PATH%/user/profiles"
def __init__(self):
super().__init__()
mobase.IPluginFileMapper.__init__(self)
def init(self, organizer: mobase.IOrganizer) -> bool:
super().init(organizer)
if hasattr(self, '_featureMap'):
self._featureMap[mobase.ModDataChecker] = SPTModDataChecker()
else:
self._register_feature(SPTModDataChecker())
return True
def executables(self) -> List[mobase.ExecutableInfo]:
execs = super().executables()
info = [
["Multiplayer", "SPT.Launcher.exe"],
]
gamedir = self.gameDirectory()
return [
mobase.ExecutableInfo(inf[0], QFileInfo(gamedir, inf[1])) for inf in info
]
2025-01-03 00:25:17 -05:00
"""
A bat script file to bridge the environment to server and launcher.
"""
workaroundPath = self._gamePath + "/sptvfsbridge.bat"
try:
workaround = open(workaroundPath, "rt")
except FileNotFoundError:
with open(workaroundPath, "wt") as workaround:
workaround.write(
"""
@echo off
setlocal
set "launcher_path=SPT.Launcher.exe"
set "server_path=SPT.Server.exe"
REM Launch the server.exe
start "" "%server_path%"
REM Wait for a moment to ensure the server.exe has started
timeout /t 5 /nobreak >nul
REM Launch the launcher.exe
start "" "%launcher_path%"
endlocal
"""
)
workaround.close()
execs.append(
mobase.ExecutableInfo("Singleplayer", QFileInfo(workaroundPath))
2025-01-03 00:25:17 -05:00
)
execs.pop(0)
return execs
def mappings(self) -> list[mobase.Mapping]:
return []
class SPTModDataChecker(BasicModDataChecker):
def __init__(self, patterns: GlobPatterns = GlobPatterns()):
super().__init__(
GlobPatterns(
valid=["BepInEx", "User"],
move={"plugins": "BepInEx/", "patchers": "BepInEx/", "package.json": "User/Mods/", "*.dll": "BepInEx/plugins/", "*": "User/Mods/"},
).merge(patterns),
)