diff --git a/players.json b/players.json index 9d5adc5..7e7034c 100644 --- a/players.json +++ b/players.json @@ -1,10 +1,10 @@ { "expansions": { - "ShockColar1": {"players": ["Brosef"], "tags": ["shock"], "config": {"COM_port": "COM3", "shocker_ID": 24770}}, - "RobotBarman": {"players": ["Tango", "TRS_MML"], "tags": ["drink"], "config": {}}, - "ChallengeDB": {"players": ["TRS_MML"], "tags": ["challenge"], "config": {}}, - "SourCandy": {"players": [], "tags": ["food"], "config": {}} + "ShockColar1": {"players": ["Brosef"], "tags": ["shock"], "class": "serialShocker", "config": {"COM_port": "COM3", "shocker_ID": 24770}}, + "RobotBarman": {"players": ["Tango", "TRS_MML"], "class": "bar", "tags": ["drink"], "config": {}}, + "ChallengeDB": {"players": ["TRS_MML"], "class": "challenge", "tags": ["challenge"], "config": {}}, + "SourCandy": {"players": [], "tags": ["food"], "class": "candy", "config": {}} }, "players": { "Brosef": {"flags": [], "expansions": {"exampleExpansion": {"playerOption": 5}}, "gamesSave": {"gameID0": 2}}, diff --git a/src/NoPELib/player_settings.py b/src/NoPELib/player_settings.py index 1d4c23c..a5a0054 100644 --- a/src/NoPELib/player_settings.py +++ b/src/NoPELib/player_settings.py @@ -309,6 +309,9 @@ class ExpansionsManager: def _getPlayersFillMissing(self, expansionID): return set(self._cfg["expansions"].get(expansionID, {}).get("players", [])) + def _getClassFillMissing(self, expansionID): + return self._cfg["expansions"].get(expansionID, {}).get("class", "") + def _listPossiblyValidExpansions(self): """ List expansions that are: included, defined in expansionsLib and available @@ -317,7 +320,7 @@ class ExpansionsManager: activePlayers = set(self.playersManager.keys()) possiblyValidExpansions = [ expansionID for expansionID in self._includedExpansions - if hasattr(expansionsLib, expansionID) and + if hasattr(expansionsLib, self._getClassFillMissing(expansionID)) and not self._getPlayersFillMissing(expansionID).isdisjoint(activePlayers) ] return possiblyValidExpansions @@ -325,7 +328,8 @@ class ExpansionsManager: def _createExpansion(self, expansionID): try: # Create the expansion - expansion = getattr(expansionsLib, expansionID)(expansionID, self) + expansionClass = self._getClassFillMissing(expansionID) + expansion = getattr(expansionsLib, expansionClass)(expansionID, self) # Update the lookup for player in self._getPlayersFillMissing(expansionID): self._playersLookUp[player].append(expansionID) @@ -367,7 +371,7 @@ class ExpansionsManager: possibleAddition = set(self._includedExpansions).difference(self._activeExpansions) filteredAddition = [ expansionID for expansionID in possibleAddition - if hasattr(expansionsLib, expansionID) and + if hasattr(expansionsLib, self._getClassFillMissing(expansionID)) and playerName in self._getPlayersFillMissing(expansionID) ] # Create the expansions @@ -406,7 +410,7 @@ class ExpansionsManager: expansionIsActive = expansionID in self._activeExpansions activePlayers = set(self.playersManager.keys()) expansionHasNoPlayers = self._getPlayersFillMissing(expansionID).isdisjoint(activePlayers) - expansionDefined = hasattr(expansionsLib, expansionID) + expansionDefined = hasattr(expansionsLib, self._getClassFillMissing(expansionID)) # Update the activation status activeChanged = False if expansionIsActive and expansionHasNoPlayers: