Вызов значения переменной из функций класса другого скрипта - PullRequest
0 голосов
/ 12 июня 2018

Мне нужна помощь!Я пытался модифицировать игру BombSquad и пытался создать систему запретов для моего сервера.

хорошо, так что есть функция, которая запрещает людям вводить

def onPlayerRequest(self, player):
    """
    Called when a new bs.Player wants to join;
    should return True or False to accept/reject.
    """
    # limit player counts based on pro purchase/etc *unless* we're in a stress test
    if bsUtils._gStressTestResetTimer is None:
        if len(self.players) >= self._maxPlayers:
            # print a rejection message *only* to the client trying to joinz
            # (prevents spamming everyone else in the game)
                bs.playSound(bs.getSound('error'))
                bs.screenMessage(bs.Lstr(resource='playerLimitReachedText', subs=[('${COUNT}', bsInternal._getAccountDisplayString())]),
                            color=(0.8, 0.0, 0.0),
                            clients=[player.getInputDevice().getClientID()],
                            transient=True)
                return False
    bs.playSound(bs.getSound('dripity'))
    return True

Мне нужен игрокимя из другого файла, и я добавлю его в оператор if, чтобы проверить, соответствует ли он банлисту и готово!Файлы с именем проигрывателя

class DamnPartyWindow(PartyWindow):

def _onPartyMemberPress(self, clientID, isHost, widget):
    # if we're the host, pop up 'kick' options for all non-host members
    if bsInternal._getForegroundHostSession() is not None:
        kickStr = bs.Lstr(resource='kickText')

    else:
        # kick-votes appeared in build 14248
            if bsInternal._getConnectionToHostInfo().get('buildNumber', 0) < 14248:
                return
    kickStr = bs.Lstr(resource='kickVoteText')
    for rst in self._roster:
            cid = rst['clientID']
            if cid == clientID:
                bs.screenMessage(rst['displayString'])
                break
    p = PopupMenuWindow(position=widget.getScreenSpaceCenter(),
                scale=2.3 if gSmallUI else 1.65 if gMedUI else 1.23,
                choices=['kick'],
                choicesDisplay=[kickStr],
                currentChoice='kick',
                delegate=self).getRootWidget()
    self._popupPartyMemberClientID = clientID
    self._popupPartyMemberIsHost = isHost

(это мод другого парня). Мне нужно значение rst ['displayString'] и проверить его в первом примере ... ПОМОГИТЕ!

Я попытался поместить xyz = rst ['displayString'], а затем в file1, используя

из файла2 import xyz

Файл 1:

class DamnPartyWindow(PartyWindow):

def _onPartyMemberPress(self, clientID, isHost, widget):
    # if we're the host, pop up 'kick' options for all non-host members
    if bsInternal._getForegroundHostSession() is not None:
        kickStr = bs.Lstr(resource='kickText')

    else:
        # kick-votes appeared in build 14248
            if bsInternal._getConnectionToHostInfo().get('buildNumber', 0) < 14248:
                return
    kickStr = bs.Lstr(resource='kickVoteText')
    for rst in self._roster:
            cid = rst['clientID']
            xyz = rst['displayString']
            if cid == clientID:
                bs.screenMessage(rst['displayString'])
                break
    p = PopupMenuWindow(position=widget.getScreenSpaceCenter(),
                scale=2.3 if gSmallUI else 1.65 if gMedUI else 1.23,
                choices=['kick'],
                choicesDisplay=[kickStr],
                currentChoice='kick',
                delegate=self).getRootWidget()
    self._popupPartyMemberClientID = clientID
    self._popupPartyMemberIsHost = isHost

Файл2:

def onPlayerRequest(self, player):

    """
    Called when a new bs.Player wants to join;
    should return True or False to accept/reject.
    """
    # importing xyz i.e the value of client
    from file2 import xyz
    if bsUtils._gStressTestResetTimer is None:
        if len(self.players) >= self._maxPlayers or xyz=="PC14567":
            # print a rejection message *only* to the client trying to joinz
            # (prevents spamming everyone else in the game)
                bs.playSound(bs.getSound('error'))
                bs.screenMessage(bs.Lstr(resource='playerLimitReachedText', subs=[('${COUNT}', bsInternal._getAccountDisplayString())]),
                            color=(0.8, 0.0, 0.0),
                            clients=[player.getInputDevice().getClientID()],
                            transient=True)
                return False
    bs.playSound(bs.getSound('dripity'))
    return True

Но это не работает, говоря не могу импортировать XYZ.Пожалуйста помоги!Я могу дать любую информацию, которая вам нужна, просто помогите мне, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Итак, во-первых, ваша переменная xyz объявлена ​​внутри функции, поэтому она недоступна (не существует) вне ее.Вот почему вы не можете импортировать его.

Во-вторых: совместное использование глобальных переменных между модулями считается очень плохой практикой, поскольку отслеживать изменения его значений может быть очень сложно.

Как решение, выМогут:

  1. хранить xyz значение в качестве атрибута класса DamnPartyWindow, поэтому, когда у вас есть экземпляр (объект) этого класса, вы можете получить этот атрибут.
  2. Определите общий сервис, который будет хранить «состояние системы», включая нужное вам значение.
  3. Похоже, что это какая-то структура пользовательского интерфейса, поэтому должен быть способ отправки событий между компонентами со значениями.Таким образом, вы можете передать его.
0 голосов
/ 12 июня 2018

try: импортировать file1

и затем использовать file1.xyz

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...