Beispiel #1
0
 def check_player():
     global admins
     self.is_vip = self.is_admin = self.is_host = False
     self.player = None
     host = get_account_string(arg=bsInternal._getAccountDisplayString(True))
     if gSettingsEnabled:
         hosts = bs.get_setting("hosts", [])
         if host not in hosts: 
             hosts.append(host)
             bs.set_setting("hosts", hosts)
     else: hosts = []
     if len(roster) > 0:
         account = None
         for i in roster: 
             if i['clientID'] == clientID: 
                 account = i['displayString'].decode('utf-8')
                 break
         if account is not None:
             if account in vips: self.is_vip = True
             if account in admins: self.is_vip = self.is_admin = True
             if account == host or (account != host and account in hosts): self.is_host = self.is_admin = self.is_vip = True
             for i in a.players:
                 if i.exists():
                     id = i.getInputDevice().getClientID()
                     if id == clientID: self.player = i
     else:
         self.is_host = self.is_admin = self.is_vip = True
         if len(a.players) > 0: self.player = a.players[0]
Beispiel #2
0
 def _update(self, forceUpdate=False):
     if hasattr(self, 'moderName') and not forceUpdate:
         if not bs.get_setting("in_menu_author_name", True): bs.animate(self.moderName.node, 'opacity', {0: self.moderName.node.opacity, 500: 0.0})
         else:
             if self.moderName.node.opacity < 1.0: 
                 bs.animate(self.moderName.node, 'opacity', {0: self.moderName.node.opacity, 500: 1.0})
                 bs.gameTimer(500, bs.Call(self.change_text_position))
             else: self.change_text_position()
     l = bs.getLanguage()
     if l != self._language:
         self._language = l
         env = bs.getEnvironment()
         y = 20
         gScale = 1.1
         self._wordActors = []
         baseDelay = 1000
         delay = baseDelay
         delayInc = 20
         baseX = -170
         x = baseX-20
         spacing = 55*gScale
         yExtra = 0 if env['kioskMode'] else 0
         x1 = x
         delay1 = delay
         for shadow in (True, False):
             x = x1
             delay = delay1
             self._makeWord('D', x-15, y-23, scale=1.3*gScale,
                            delay=delay-500, vrDepthOffset=3, shadow=True)
             self._makeWord('e', x+38, y-23, scale=1.3*gScale,
                            delay=delay-400, vrDepthOffset=3, shadow=True)
             self._makeWord('l', x+88, y-23, scale=1.3*gScale,
                            delay=delay-300, vrDepthOffset=3, shadow=True)
             self._makeWord('i', x+138, y-23, scale=1.3*gScale,
                            delay=delay-200, vrDepthOffset=3, shadow=True)
             self._makeWord('t', x+188, y-23, scale=1.3*gScale,
                            delay=delay-100, vrDepthOffset=3, shadow=True)
             self._makeWord('e', x+238, y-23, scale=1.3*gScale,
                            delay=delay, vrDepthOffset=3, shadow=True)
             self._makeWord('l', x+288, y-23, scale=1.3*gScale,
                            delay=delay+100, vrDepthOffset=3, shadow=True)
             self._makeWord('_Mod', x+338, y-23, scale=1.3*gScale,
                            delay=delay+200, vrDepthOffset=3, shadow=True)
             self._makeLogo(x+188, y-19,scale=.32*gScale,delay=delay, customTexture="graphicsIcon")
Beispiel #3
0
def check_skins(type="players"):
    if type not in ["nodes", "players"]: raise ValueError("type can be only in 2-parameters")
    a=[]
    if type == "nodes": # new way to detect all of player's nodes
        for i in bsInternal.getNodes():
            if "getNodeType" in dir(i):
                if str(i.getNodeType()) == "spaz":
                    if isinstance(i.getDelegate(), bsSpaz.PlayerSpaz): a.append(i)
    elif type == "players": #old way to detect players, often works badly
        a=[i for i in bsInternal._getForegroundHostActivity().players] if bsInternal._getForegroundHostActivity() is not None else None
    if isinstance(a, list):
        skins = bs.get_setting("skins", {})
        if len(a) > 0 and len(skins) > 0:
            if type == "players":
                for player in a:
                    account_name=str(player.getInputDevice()._getAccountName(True).encode("utf-8"))
                    check_skin(account_name, player)
            elif type == "nodes":
                for node in a:
                    account_name=str(node.getDelegate().getPlayer().getInputDevice()._getAccountName(True).encode("utf-8"))
                    check_skin(account_name, node)
Beispiel #4
0
    def onTransitionIn(self):
        bs.Activity.onTransitionIn(self)
        global gDidInitialTransition
        random.seed(123)
        try:
            import install
        except ImportError:
            pass
        else:
            # check needed methods
            if hasattr(bs, "get_setting") and hasattr(install,
                                                      "update_modpack"):
                if bs.get_setting("auto-update", False):
                    install.update_modpack(True)
        self._logoNode = None
        self._customLogoTexName = None
        self._wordActors = []
        env = bs.getEnvironment()
        vrMode = bs.getEnvironment()['vrMode']
        if not bs.getEnvironment().get('toolbarTest', True):
            self.myName = bs.NodeActor(
                bs.newNode(
                    'text',
                    attrs={
                        'vAttach':
                        'bottom',
                        'hAlign':
                        'center',
                        'color': (1, 1, 1, 1) if vrMode else (1, 1, 1, 1),
                        'flatness':
                        1.0,
                        'shadow':
                        1.0 if vrMode else 0.5,
                        'scale':
                        (0.65 if (env['interfaceType'] == 'small' or vrMode)
                         else 0.7),  # FIXME need a node attr for this
                        'position': (0, 25),
                        'vrDepth':
                        -10,
                        'text':
                        u'\xa9 2019 Eric Froemling'
                    }))
            fullScreen = bsInternal._getSetting("TV Border")
            if env['interfaceType'] != 'small' or env['vrMode']:
                if fullScreen: position = (0, -10)
                else: position = (-425, 10)
            else:
                if fullScreen: position = (0, -10)
                else: position = (-425, 35)
            self.moderName = bs.NodeActor(
                bs.newNode(
                    'text',
                    attrs={
                        'vAttach':
                        'bottom',
                        'hAlign':
                        'center',
                        'color': (0.8, 0.8, 0.8, 0.8) if vrMode else
                        (0.8, 0.8, 0.8, 0.8),
                        'flatness':
                        1.0,
                        'shadow':
                        1.0 if vrMode else 0.5,
                        'scale': (0.55 if
                                  (env['interfaceType'] == 'small' or vrMode)
                                  else 0.7),  # FIXME need a node attr for this
                        'position':
                        position,
                        'vrDepth':
                        -10,
                        'text':
                        u'\xa9 ModPack is created by Daniil Rakhov'
                    }))

        self._hostIsNavigatingText = bs.NodeActor(
            bs.newNode('text',
                       attrs={
                           'text':
                           bs.Lstr(resource='hostIsNavigatingMenusText',
                                   subs=[
                                       ('${HOST}',
                                        bsInternal._getAccountDisplayString())
                                   ]),
                           'clientOnly':
                           True,
                           'position': (0, -200),
                           'flatness':
                           1.0,
                           'hAlign':
                           'center'
                       }))
        if not gDidInitialTransition:
            if hasattr(self, 'myName'):
                bs.animate(self.myName.node, 'opacity', {2300: 0, 3000: 1.0})
            if hasattr(self, 'moderName'):
                bs.animate(self.moderName.node, 'opacity', {
                    2300: 0,
                    3300: 1.0
                })

        # FIXME - shouldn't be doing things conditionally based on whether
        # the host is vr mode or not (clients may not be or vice versa)
        # - any differences need to happen at the engine level
        # so everyone sees things in their own optimal way
        vrMode = env['vrMode']
        interfaceType = env['interfaceType']

        # in cases where we're doing lots of dev work lets
        # always show the build number
        forceShowBuildNumber = True

        if not bs.getEnvironment().get('toolbarTest', True):
            text = "BROODYs WORLD"
            try:
                from multiversion import get_version
            except ImportError:
                path = os.path.join(env["userScriptsDirectory"],
                                    "about_modpack.json")
                if os.path.exists(path):
                    try:
                        data = json.load(open(path))
                    except Exception:
                        pass
                    else:
                        text += " v." + str(
                            data.get("version", {
                                "v": "???"
                            }).get("v"))
            else:
                text += " v." + str(get_version())
            if env['debugBuild'] or env['testBuild']:
                if env['debugBuild']: text += " [debug]"
                else: text += " [test]"
            if forceShowBuildNumber:
                text = "based on " + str(env['version']) + "\n" + text
            self.version = bs.NodeActor(
                bs.newNode('text',
                           attrs={
                               'vAttach':
                               'bottom',
                               'hAttach':
                               'right',
                               'hAlign':
                               'right',
                               'flatness':
                               1.0,
                               'vrDepth':
                               -10,
                               'shadow':
                               0.5,
                               'color': (0.5, 0.6, 0.5, 0.7),
                               'scale':
                               0.7 if
                               (interfaceType == 'small' or vrMode) else 0.85,
                               'position': (-260, 10) if vrMode else (-10, 30),
                               'text':
                               text
                           }))
            if not gDidInitialTransition:
                bs.animate(self.version.node, 'opacity', {
                    0: 0,
                    3000: 0,
                    4000: 1.0
                })

        # throw in beta info..
        self.betaInfo = self.betaInfo2 = None
        if env['testBuild'] and not env['kioskMode']:
            self.betaInfo = bs.NodeActor(
                bs.newNode('text',
                           attrs={
                               'vAttach':
                               'center',
                               'hAlign':
                               'center',
                               'color': (1, 1, 1, 1),
                               'shadow':
                               0.5,
                               'flatness':
                               0.5,
                               'scale':
                               1,
                               'vrDepth':
                               -60,
                               'position': (230, 125) if env['kioskMode'] else
                               (230, 35),
                               'text':
                               bs.Lstr(resource="testBuildText")
                           }))
            if not gDidInitialTransition:
                bs.animate(self.betaInfo.node, 'opacity', {1300: 0, 1800: 1.0})
        model = bs.getModel('thePadLevel')
        treesModel = bs.getModel('trees')
        bottomModel = bs.getModel('thePadLevelBottom')
        borModel = bs.getCollideModel('thePadLevelCollide')
        testColorTexture = bs.getTexture('thePadLevelColor')
        treesTexture = bs.getTexture('treesColor')
        bgTex = bs.getTexture('alwaysLandBGColor')
        bgModel = bs.getModel('alwaysLandBG')
        vrBottomFillModel = bs.getModel('thePadVRFillBottom')
        vrTopFillModel = bs.getModel('thePadVRFillTop')
        bsGlobals = bs.getSharedObject('globals')
        bsGlobals.cameraMode = 'rotate'
        bsGlobals.tint = (1.1, 1.1, 1.0)
        self.bottom = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': bottomModel,
                           'lighting': False,
                           'reflection': 'soft',
                           'reflectionScale': [0.45],
                           'colorTexture': testColorTexture
                       }))
        self.node = bs.newNode('terrain',
                               delegate=self,
                               attrs={
                                   'collideModel':
                                   borModel,
                                   'model':
                                   model,
                                   'colorTexture':
                                   testColorTexture,
                                   'materials':
                                   [bs.getSharedObject('footingMaterial')]
                               })
        self.vrBottomFill = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': vrBottomFillModel,
                           'lighting': False,
                           'vrOnly': True,
                           'colorTexture': testColorTexture
                       }))
        self.vrTopFill = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': vrTopFillModel,
                           'vrOnly': True,
                           'lighting': False,
                           'colorTexture': bgTex
                       }))
        self.terrain = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': model,
                           'colorTexture': testColorTexture,
                           'reflection': 'soft',
                           'reflectionScale': [0.3]
                       }))
        self.trees = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': treesModel,
                           'lighting': False,
                           'reflection': 'char',
                           'reflectionScale': [0.1],
                           'colorTexture': treesTexture
                       }))
        self.bg = bs.NodeActor(
            bs.newNode('terrain',
                       attrs={
                           'model': bgModel,
                           'color': (0.92, 0.91, 0.9),
                           'lighting': False,
                           'background': True,
                           'colorTexture': bgTex
                       }))
        textOffsetV = 0
        self._ts = 0.86
        self._language = None
        self._updateTimer = bs.Timer(2000,
                                     bs.Call(self._update, False),
                                     repeat=True)
        self._update(True)
        bs.gameTimer(55000, bs.Call(self.fireworks))
        bsUtils.animateArray(bs.getSharedObject("globals"), "tint", 3, {0:(1.1,1.1,1.0), 7500:(1.25, 1.21, 1.075), 30000:(1.25, 1.21, 1.075), \
            57500:(1.1, 0.86, 0.74), 67500:(1.1, 0.86, 0.74), \
            90000:(0, 0.27, 0.51), 120000:(0, 0.27, 0.51), 142500:(1.3, 1.06, 1.02), \
            157500:(1.3, 1.06, 1.02), 180000:(1.3, 1.25, 1.2), 195500:(1.3, 1.25, 1.2), \
            220000:(1.1,1.1,1.0)})
        bsInternal._addCleanFrameCallback(bs.WeakCall(self._startPreloads))
        random.seed()

        class News(object):
            def __init__(self, activity):
                self._valid = True
                self._messageDuration = 10000
                self._messageSpacing = 2000
                self._text = None
                self._activity = weakref.ref(activity)
                self._fetchTimer = bs.Timer(1000,
                                            bs.WeakCall(self._tryFetchingNews),
                                            repeat=True)
                self._tryFetchingNews()

            def _tryFetchingNews(self):
                if bsInternal._getAccountState() == 'SIGNED_IN':
                    self._fetchNews()
                    self._fetchTimer = None

            def _fetchNews(self):
                try:
                    launchCount = bs.getConfig()['launchCount']
                except Exception:
                    launchCount = None
                global gLastNewsFetchTime
                gLastNewsFetchTime = time.time()

                # UPDATE - we now just pull news from MRVs
                news = bsInternal._getAccountMiscReadVal('n', None)
                if news is not None:
                    self._gotNews(news)

            def _changePhrase(self):

                global gLastNewsFetchTime

                if time.time() - gLastNewsFetchTime > 100.0:
                    self._fetchNews()
                    self._text = None
                else:
                    if self._text is not None:
                        if len(self._phrases) == 0:
                            for p in self._usedPhrases:
                                self._phrases.insert(0, p)
                        val = self._phrases.pop()
                        if val == '__ACH__':
                            vr = bs.getEnvironment()['vrMode']
                            bsUtils.Text(
                                bs.Lstr(resource='nextAchievementsText'),
                                color=(1,1,1,1) if vr else (0.95,0.9,1,0.4),
                                hostOnly=True,
                                maxWidth=200,
                                position=(-300, -35),
                                hAlign='right',
                                transition='fadeIn',
                                scale=0.9 if vr else 0.7,
                                flatness=1.0 if vr else 0.6,
                                shadow=1.0 if vr else 0.5,
                                hAttach="center",
                                vAttach="top",
                                transitionDelay=1000,
                                transitionOutDelay=self._messageDuration)\
                                   .autoRetain()
                            import bsAchievement
                            achs = [
                                a for a in bsAchievement.gAchievements
                                if not a.isComplete()
                            ]
                            if len(achs) > 0:
                                a = achs.pop(
                                    random.randrange(min(4, len(achs))))
                                a.createDisplay(-180,
                                                -35,
                                                1000,
                                                outDelay=self._messageDuration,
                                                style='news')
                            if len(achs) > 0:
                                a = achs.pop(
                                    random.randrange(min(8, len(achs))))
                                a.createDisplay(180,
                                                -35,
                                                1250,
                                                outDelay=self._messageDuration,
                                                style='news')
                        else:
                            s = self._messageSpacing
                            keys = {
                                s: 0,
                                s + 1000: 1.0,
                                s + self._messageDuration - 1000: 1.0,
                                s + self._messageDuration: 0.0
                            }
                            bs.animate(self._text.node, "opacity",
                                       dict([[k, v] for k, v in keys.items()]))
                            self._text.node.text = val

            def _gotNews(self, news):

                # run this stuff in the context of our activity since we need
                # to make nodes and stuff.. should fix the serverGet call so it
                activity = self._activity()
                if activity is None or activity.isFinalized(): return
                with bs.Context(activity):

                    self._phrases = []
                    # show upcoming achievements in non-vr versions
                    # (currently too hard to read in vr)
                    self._usedPhrases = (
                        ['__ACH__'] if not bs.getEnvironment()['vrMode'] else
                        []) + [s for s in news.split('<br>\n') if s != '']
                    self._phraseChangeTimer = bs.Timer(
                        self._messageDuration + self._messageSpacing,
                        bs.WeakCall(self._changePhrase),
                        repeat=True)

                    sc = 1.2 if (
                        bs.getEnvironment()['interfaceType'] == 'small'
                        or bs.getEnvironment()['vrMode']) else 0.8

                    self._text = bs.NodeActor(
                        bs.newNode(
                            'text',
                            attrs={
                                'vAttach':
                                'top',
                                'hAttach':
                                'center',
                                'hAlign':
                                'center',
                                'vrDepth':
                                -20,
                                'shadow':
                                1.0 if bs.getEnvironment()['vrMode'] else 0.4,
                                'flatness':
                                0.8,
                                'vAlign':
                                'top',
                                'color':
                                ((1, 1, 1,
                                  1) if bs.getEnvironment()['vrMode'] else
                                 (0.7, 0.65, 0.75, 1.0)),
                                'scale':
                                sc,
                                'maxWidth':
                                900.0 / sc,
                                'position': (0, -10)
                            }))
                    self._changePhrase()

        if not env['kioskMode'] and not env.get('toolbarTest', True):
            self._news = News(self)

        # bring up the last place we were, or start at the main menu otherwise
        with bs.Context('UI'):
            try:
                mainWindow = bsUI.gMainWindow
            except Exception:
                mainWindow = None

            # when coming back from a kiosk-mode game, jump to
            # the kiosk start screen.. if bsUtils.gRunningKioskModeGame:
            if bs.getEnvironment()['kioskMode']:
                bsUI.uiGlobals['mainMenuWindow'] = \
                     bsUI.KioskWindow().getRootWidget()
            # ..or in normal cases go back to the main menu
            else:
                if mainWindow == 'Gather':
                    bsUI.uiGlobals['mainMenuWindow'] = \
                        bsUI.GatherWindow(transition=None).getRootWidget()
                elif mainWindow == 'Watch':
                    bsUI.uiGlobals['mainMenuWindow'] = \
                        bsUI.WatchWindow(transition=None).getRootWidget()
                elif mainWindow == 'Team Game Select':
                    bsUI.uiGlobals['mainMenuWindow'] = \
                        bsUI.TeamsWindow(sessionType=bs.TeamsSession,
                                         transition=None).getRootWidget()
                elif mainWindow == 'Free-for-All Game Select':
                    bsUI.uiGlobals['mainMenuWindow'] = \
                        bsUI.TeamsWindow(sessionType=bs.FreeForAllSession,
                                         transition=None).getRootWidget()
                elif mainWindow == 'Coop Select':
                    bsUI.uiGlobals['mainMenuWindow'] = \
                        bsUI.CoopWindow(transition=None).getRootWidget()
                else:                    bsUI.uiGlobals['mainMenuWindow'] = \
                  bsUI.MainMenuWindow(transition=None).getRootWidget()

                # attempt to show any pending offers immediately.
                # If that doesn't work, try again in a few seconds
                # (we may not have heard back from the server)
                # ..if that doesn't work they'll just have to wait
                # until the next opportunity.
                if not bsUI._showOffer():

                    def tryAgain():
                        if not bsUI._showOffer():
                            # try one last time..
                            bs.realTimer(2000, bsUI._showOffer)

                    bs.realTimer(2000, tryAgain)

        gDidInitialTransition = True
Beispiel #5
0
import bs
import bsSpaz
import bsInternal

gSettingsEnabled = (hasattr(bs, "get_setting") and hasattr(bs, "set_setting"))

if gSettingsEnabled: skins = bs.get_setting("skins", {})
else: skins = {}

def get_format_skin_name(name):
    if name == "B-9000": return "cyborg"
    elif name == "Agent Johnson": return "agent"
    elif name == "Santa Claus": return "santa"
    elif name == "Pixel": return "pixie"
    elif name == "Pascal": return "penguin"
    elif name == "Easter Bunny": return "bunny"
    elif name == "Taobao Mascot": return "taobao"
    elif name == "Jack Morgan": return "pirate"
    elif name == "Bernard": return "bear"
    else:
        if len(name.split(" ")) > 1: return name.lower().replace(".", "").replace("-","").split(" ")[1 if len(name.split(" ")[1]) > len(name.split(" ")[0]) else 0]
        else: return name.lower().replace(".", "").replace("-","")

def get_unformat_skin_name(name):
    if name == "cyborg": return "B-9000"
    elif name == "agent": return "Agent Johnson"
    elif name == "santa": return "Santa Claus"
    elif name == "pixie": return "Pixel"
    elif name == "penguin": return "Pascal"
    elif name == "bunny": return "Easter Bunny"
    elif name == "taobao": return "Taobao Mascot"