コード例 #1
0
    def process_modules(self):
        '''
        This method is called when it's time to write the output.

        For nuggets.nri, we use an encrypted datagram.
        The datagram is read by core.cxx, which populates Python frozen array.

        Datagram format:

        uint32 numModules
        for each module:
            string name
            int32 size *
            data(abs(size))

        * Negative size means the file was an __init__
        '''

        dg = PyDatagram()
        dg.addUint32(len(self.modules))

        for moduleName in self.modules:
            data, size = self.modules[moduleName]

            dg.addString(moduleName)
            dg.addInt32(size)
            dg.appendData(data)

        data = dg.getMessage()

        iv = '\0' * 16
        key = 'AmazingNuggetKey'
        return aes.encrypt(data, key, iv)
コード例 #2
0
    def writeServerEvent(self, logtype, *args, **kwargs):
        """
        Write an event to the central Event Logger, if one is configured.

        The purpose of the Event Logger is to keep a game-wide record of all
        interesting in-game events that take place. Therefore, this function
        should be used whenever such an interesting in-game event occurs.
        """

        if self.eventSocket is None:
            return  # No event logger configured!

        log = collections.OrderedDict()
        log['type'] = logtype
        log['sender'] = self.eventLogId

        for i, v in enumerate(args):
            # +1 because the logtype was _0, so we start at _1
            log['_%d' % (i + 1)] = v

        log.update(kwargs)

        dg = PyDatagram()
        msgpack_encode(dg, log)
        self.eventSocket.Send(dg.getMessage())
コード例 #3
0
    def makeNetString(self):
        dg = PyDatagram()

        for part in self.dna:
            part.makeNetString(dg=dg)

        return dg.getMessage()
コード例 #4
0
    def makeNetString(self):
        dg = PyDatagram()

        for part in self.dna:
            part.makeNetString(dg=dg)

        return dg.getMessage()
コード例 #5
0
ファイル: AuthManagerUD.py プロジェクト: muschter/CardJitsu
    def enterSetAvatar(self):
        channel = self.mgr.GetAccountConnectionChannel(self.target)

        datagramCleanup = PyDatagram()
        datagramCleanup.addServerHeader(self.playerId, channel, STATESERVER_OBJECT_DELETE_RAM)
        datagramCleanup.addUint32(self.playerId)
        datagram = PyDatagram()
        datagram.addServerHeader(channel, self.air.ourChannel, CLIENTAGENT_ADD_POST_REMOVE)
        datagram.addUint16(datagramCleanup.getLength())
        datagram.appendData(datagramCleanup.getMessage())
        self.air.send(datagram)

        # Activate the avatar on the DBSS:
        self.air.sendActivate(self.playerId, 0, 0, self.air.dclassesByName['DistributedPlayerUD'],
                              fields={'setName': [self.token]})

        # Next, add them to the avatar channel:
        datagram = PyDatagram()
        datagram.addServerHeader(channel, self.air.ourChannel, CLIENTAGENT_OPEN_CHANNEL)
        datagram.addChannel(self.mgr.GetPuppetConnectionChannel(self.target))
        self.air.send(datagram)

        # Finally, grant ownership and shut down.
        self.air.setOwner(self.playerId, self.target)

        self.air.clientAddSessionObject(self.target, self.playerId)

        # Now set their sender channel to represent their account affiliation:
        datagram = PyDatagram()
        datagram.addServerHeader(self.target, self.air.ourChannel, CLIENTAGENT_SET_CLIENT_ID)
        datagram.addChannel(self.mgr.GetPuppetConnectionChannel(self.playerId))
        self.air.send(datagram)
        self.demand('Done')
コード例 #6
0
ファイル: GardenManagerAI.py プロジェクト: nate97/src
    def updateGardenData(self):
        gardenData = PyDatagram()

        gardenData.addUint8(len(self.plots))
        for plot in self.plots:
            plot.pack(gardenData)

        self.house.b_setGardenData(gardenData.getMessage())
コード例 #7
0
ファイル: GardenManagerAI.py プロジェクト: DarthNihilus1/src
    def updateGardenData(self):
        gardenData = PyDatagram()

        gardenData.addUint8(len(self.plots))
        for plot in self.plots:
            plot.pack(gardenData)

        self.house.b_setGardenData(gardenData.getMessage())
コード例 #8
0
    def __makeBlob(self, store):
        dg = PyDatagram()
        if self.__list:
            dg.addUint8(CatalogItem.CatalogItemVersion)
            for item in self.__list:
                CatalogItem.encodeCatalogItem(dg, item, store)

        return dg.getMessage()
コード例 #9
0
ファイル: CatalogItemList.py プロジェクト: nate97/src
    def __makeBlob(self, store):
        dg = PyDatagram()
        if self.__list:
            dg.addUint8(CatalogItem.CatalogItemVersion)
            for item in self.__list:
                CatalogItem.encodeCatalogItem(dg, item, store)

        return dg.getMessage()
コード例 #10
0
 def __makeBlob(self, store):
     # Construct a new datagram and fill it up with the items in
     # the list.
     dg = PyDatagram()
     if self.__list:  # empty list or None means nothing on the list.
         dg.addUint8(CatalogItem.CatalogItemVersion)
         for item in self.__list:
             CatalogItem.encodeCatalogItem(dg, item, store)
     return dg.getMessage()
    def setAvatar(self, fields, avId, sender):
        accId = self.GetAccountConnectionChannel(sender)

        # Give a POST_REMOVE to unload the avatar just
        # in case we lose connection while working.
        dgc = PyDatagram()
        dgc.addServerHeader(avId, accId, STATESERVER_OBJECT_DELETE_RAM)
        dgc.addUint32(avId)
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel,
                           CLIENTAGENT_ADD_POST_REMOVE)
        dg.addString(dgc.getMessage())
        self.air.send(dg)

        # Activate the avatar on the db stateserver.
        self.air.sendActivate(
            avId, 0, 0, self.air.dclassesByName['DistributedPlayerToonUD'])

        # Add the connection to the avatar channel.
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel,
                           CLIENTAGENT_OPEN_CHANNEL)
        dg.addChannel(self.GetPuppetConnectionChannel(avId))
        self.air.send(dg)

        # Set the sender channel to represent their account affiliation.
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel,
                           CLIENTAGENT_SET_CLIENT_ID)
        dg.addChannel(sender << 32 | avId)
        self.air.send(dg)

        # Grant the client ownership of the avatar.
        dg = PyDatagram()
        dg.addServerHeader(avId, self.air.ourChannel,
                           STATESERVER_OBJECT_SET_OWNER)
        dg.addChannel(sender << 32 | avId)
        self.air.send(dg)

        # The avatar should stay around for the entire client session.
        self.air.clientAddSessionObject(accId, avId)

        # OLD WAY: Tell the friends manager a toon has gone online.
        # self.__handleToonOnline(avId)

        # NEW WAY: Tell the FriendsManagerUD that a toon is online.
        # Let's use the netMessenger.
        self.air.netMessenger.send('avatarOnline', [avId])

        # Let's prepare the avatarOffline message if the avatar disconnects unexpectedly.
        cleanupDatagram = self.air.netMessenger.prepare(
            'avatarOffline', [avId])
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel,
                           CLIENTAGENT_ADD_POST_REMOVE)
        dg.addString(cleanupDatagram.getMessage())
        self.air.send(dg)
コード例 #12
0
ファイル: TopToonPics.py プロジェクト: satire6/Anesidora
def convertServerDNAString(serverString):
    # Strip out blank space and take last 30 characters
    serverString = serverString.replace(' ', '')
    stringLen = 30
    serverString = serverString[-stringLen:]
    # Create a datagram from server string
    dg = PyDatagram()
    for i in range(0,len(serverString),2):
        eval('dg.addUint8(0x%s)' % serverString[i:i+2])
    return dg.getMessage()
コード例 #13
0
 def makeNetString(self):
     dg = PyDatagram()
     dg.addFixedString(self.type, 1)
     if self.type == 'c':
         dg.addFixedString(self.name, 2)
     elif self.type == 'u':
         notify.error('undefined avatar')
     else:
         notify.error('unknown avatar type: ', self.type)
     return dg.getMessage()
コード例 #14
0
 def makeNetString(self):
     dg = PyDatagram()
     dg.addFixedString(self.type, 1)
     if self.type == 'c':
         dg.addFixedString(self.name, 2)
     elif self.type == 'u':
         notify.error('undefined avatar')
     else:
         notify.error('unknown avatar type: ', self.type)
     return dg.getMessage()
コード例 #15
0
    def makeNetString(self):
        dg = PyDatagram()
        dg.addFixedString(self.type, 1)
        if (self.type == 'c'):  # Char
            dg.addFixedString(self.name, 2)
        elif (self.type == 'u'):
            notify.error("undefined avatar")
        else:
            notify.error("unknown avatar type: ", self.type)

        return dg.getMessage()
コード例 #16
0
    def _makeAvMsg(self, values, recipient):
        msg = "%s banned %s for %s hours: %s" % values
        
        msgDg = PyDatagram()
        msgDg.addUint16(6)
        msgDg.addString(msg)

        dg = PyDatagram()
        dg.addServerHeader(recipient, self.air.ourChannel, CLIENTAGENT_SEND_DATAGRAM)
        dg.addString(msgDg.getMessage())
        return dg
コード例 #17
0
    def createBlankGarden(self):
        gardenData = PyDatagram()

        plots = GardenGlobals.getGardenPlots(self.house.housePos)
        gardenData.addUint8(len(plots))

        for i, plotData in enumerate(plots):
            gardenData.addUint8(GardenGlobals.EmptyPlot)
            gardenData.addUint8(i)

        self.house.b_setGardenData(gardenData.getMessage())
        self.loadGarden()
コード例 #18
0
ファイル: GardenManagerAI.py プロジェクト: nate97/src
    def createBlankGarden(self):
        gardenData = PyDatagram()

        plots = GardenGlobals.getGardenPlots(self.house.housePos)
        gardenData.addUint8(len(plots))

        for i, plotData in enumerate(plots):
            gardenData.addUint8(GardenGlobals.EmptyPlot)
            gardenData.addUint8(i)

        self.house.b_setGardenData(gardenData.getMessage())
        self.loadGarden()
コード例 #19
0
    def _makeAvMsg(self, values, recipient):
        msg = "%s banned %s for %s hours: %s" % values

        msgDg = PyDatagram()
        msgDg.addUint16(6)
        msgDg.addString(msg)

        dg = PyDatagram()
        dg.addServerHeader(recipient, self.air.ourChannel,
                           CLIENTAGENT_SEND_DATAGRAM)
        dg.addString(msgDg.getMessage())
        return dg
コード例 #20
0
    def systemMessage(self, message, channel=10):
        msgDg = PyDatagram()
        msgDg.addUint16(6)
        msgDg.addString(message)

        self.writeServerEvent('system-message',
                              sourceChannel=self.ourChannel,
                              message=message,
                              targetChannel=channel)

        dg = PyDatagram()
        dg.addServerHeader(channel, self.ourChannel, CLIENTAGENT_SEND_DATAGRAM)
        dg.addString(msgDg.getMessage())
        self.send(dg)
コード例 #21
0
    def makeNetString(self):
        dg = PyDatagram()
        dg.addFixedString(self.type, 1)
        if (self.type == 's'):
            dg.addFixedString(self.name, 3)
            dg.addFixedString(self.dept, 1)
        elif (self.type == 'b'):  # Boss Cog
            dg.addFixedString(self.dept, 1)
        elif (self.type == 'u'):
            notify.error("undefined avatar")
        else:
            notify.error("unknown avatar type: ", self.type)

        return dg.getMessage()
コード例 #22
0
    def toNetString(self):
        dg = PyDatagram()

        for gagId in self.avatar.attacks.keys():
            supply = self.avatar.attacks[gagId].getAmmo()

            if supply < 0:
                print "Gag ID {0} is about to cause a cause with supply: {1}".format(
                    str(gagId), str(supply))
                supply = 0

            dg.addUint8(gagId)
            dg.addUint8(supply)

        return dg.getMessage()
コード例 #23
0
    def getDNAString(self):
        data = PyDatagram()
        data.addUint8(self.shape)
        for item in self.bgData:
            data.addUint8(item)

        for item in self.layoutData:
            data.addUint8(item)

        for enum in self.emblems.keys():
            emblem = self.emblems.get(enum, None)
            if emblem:
                for item in emblem:
                    data.addUint8(item)

        return data.getMessage()
コード例 #24
0
 def getDNAString(self):
     data = PyDatagram()
     data.addUint8(self.shape)
     for item in self.bgData:
         data.addUint8(item)
     
     for item in self.layoutData:
         data.addUint8(item)
     
     for enum in self.emblems.keys():
         emblem = self.emblems.get(enum, None)
         if emblem:
             for item in emblem:
                 data.addUint8(item)
             
     
     return data.getMessage()
コード例 #25
0
    def setAvatar(self, fields, avId, sender):
        accId = self.GetAccountConnectionChannel(sender)

        # Give a POST_REMOVE to unload the avatar just
        # in case we lose connection while working.
        dgc = PyDatagram()
        dgc.addServerHeader(avId, accId,
                STATESERVER_OBJECT_DELETE_RAM)
        dgc.addUint32(avId)
        dg = PyDatagram()
        dg.addServerHeader(accId,
                self.air.ourChannel,
                CLIENTAGENT_ADD_POST_REMOVE)
        dg.addString(dgc.getMessage())
        self.air.send(dg)

        # Activate the avatar on the db stateserver.
        self.air.sendActivate(avId, 0, 0, self.air.dclassesByName['DistributedToonUD'])

        # Add the connection to the avatar channel.
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel, CLIENTAGENT_OPEN_CHANNEL)
        dg.addChannel(self.GetPuppetConnectionChannel(avId))
        self.air.send(dg)

        # Set the sender channel to represent their account affiliation.
        dg = PyDatagram()
        dg.addServerHeader(accId, self.air.ourChannel,
                    CLIENTAGENT_SET_CLIENT_ID)
        dg.addChannel(sender << 32 | avId)
        self.air.send(dg)

        # Grant the client ownership of the avatar.
        dg = PyDatagram()
        dg.addServerHeader(avId, self.air.ourChannel, STATESERVER_OBJECT_SET_OWNER)
        dg.addChannel(sender << 32 | avId)
        self.air.send(dg)

        # Tell the friends manager a toon has gone online.
        self.__handleToonOnline(avId)
コード例 #26
0
 def setAvatar(self, fields, avId, sender):
     accId = self.GetAccountConnectionChannel(sender)
     dgc = PyDatagram()
     dgc.addServerHeader(avId, accId, STATESERVER_OBJECT_DELETE_RAM)
     dgc.addUint32(avId)
     dg = PyDatagram()
     dg.addServerHeader(accId, self.air.ourChannel, CLIENTAGENT_ADD_POST_REMOVE)
     dg.addString(dgc.getMessage())
     self.air.send(dg)
     self.air.sendActivate(avId, 0, 0, self.air.dclassesByName['DistributedToonUD'])
     dg = PyDatagram()
     dg.addServerHeader(accId, self.air.ourChannel, CLIENTAGENT_OPEN_CHANNEL)
     dg.addChannel(self.GetPuppetConnectionChannel(avId))
     self.air.send(dg)
     dg = PyDatagram()
     dg.addServerHeader(accId, self.air.ourChannel, CLIENTAGENT_SET_CLIENT_ID)
     dg.addChannel(sender << 32 | avId)
     self.air.send(dg)
     dg = PyDatagram()
     dg.addServerHeader(avId, self.air.ourChannel, STATESERVER_OBJECT_SET_OWNER)
     dg.addChannel(sender << 32 | avId)
     self.air.send(dg)
コード例 #27
0
ファイル: GardenManagerAI.py プロジェクト: DarthNihilus1/src
    def createBlankGarden(self):
        gardenData = PyDatagram()

        # NF
        plots = GardenGlobals.getGardenPlots(self.house.housePos)
        boxes = GardenGlobals.getBoxPlots(self.house.housePos)

        tester = plots + boxes

        length_p_b = len(plots) + len(boxes)

        gardenData.addUint8(length_p_b)

        for i, plotData in enumerate(tester):

            if i != 6:
                gardenData.addUint8(GardenGlobals.EmptyPlot)
            else:
                gardenData.addUint8(GardenGlobals.PlanterBox)

            gardenData.addUint8(i)

        self.house.b_setGardenData(gardenData.getMessage())
        self.loadGarden()
コード例 #28
0
 def getBlob(self, store=0):
     dg = PyDatagram()
     dg.addUint8(CatalogItemVersion)
     encodeCatalogItem(dg, self, store)
     return dg.getMessage()
コード例 #29
0
ファイル: BaseAttack.py プロジェクト: tsp-team/ttsp-src
 def reloadRelease(self, data=None):
     dg = PyDatagram()
     self.addReloadReleaseData(dg)
     self.avatar.sendUpdate('reloadRelease', [dg.getMessage()])
コード例 #30
0
ファイル: BaseAttack.py プロジェクト: tsp-team/ttsp-src
 def secondaryFireRelease(self, data=None):
     dg = PyDatagram()
     self.addSecondaryReleaseData(dg)
     self.avatar.sendUpdate('secondaryFireRelease', [dg.getMessage()])
コード例 #31
0
ファイル: BaseAttack.py プロジェクト: tsp-team/ttsp-src
 def secondaryFirePress(self, data=None):
     dg = PyDatagram()
     self.addSecondaryPressData(dg)
     self.avatar.sendUpdate('secondaryFirePress', [dg.getMessage()])
コード例 #32
0
ファイル: BaseAttack.py プロジェクト: tsp-team/ttsp-src
 def primaryFireRelease(self, data=None):
     dg = PyDatagram()
     self.addPrimaryReleaseData(dg)
     self.avatar.sendUpdate('primaryFireRelease', [dg.getMessage()])
コード例 #33
0
ファイル: BaseAttack.py プロジェクト: tsp-team/ttsp-src
 def primaryFirePress(self, data=None):
     dg = PyDatagram()
     self.addPrimaryPressData(dg)
     self.avatar.sendUpdate('primaryFirePress', [dg.getMessage()])
コード例 #34
0
    def enterWaitReward(self):
        self.updateHistoryForCourseComplete()
        self.awardTrophies()
        self.awardCups()
        self.awardHoleBest()
        self.awardCourseBest()
        self.recordHoleInOne()
        self.recordCourseUnderPar()
        trophiesList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newTrophies:
                oneTrophyList = map(int, self.newTrophies[avId])
                trophiesList.append(oneTrophyList)
                continue
            trophiesList.append([])
        while len(trophiesList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            trophiesList.append([])
        holeBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newHoleBest:
                oneTrophyList = map(int, self.newHoleBest[avId])
                holeBestList.append(oneTrophyList)
                continue
            holeBestList.append([])
        while len(holeBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            holeBestList.append([])
        courseBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCourseBest:
                oneTrophyList = map(int, self.newCourseBest[avId])
                courseBestList.append(oneTrophyList)
                continue
            courseBestList.append([])
        while len(courseBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            courseBestList.append([])
        cupList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCups:
                oneCupList = map(int, self.newCups[avId])
                cupList.append(oneCupList)
                self.cupListLen = self.cupListLen + 1
                continue
            cupList.append([])
        while len(cupList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            cupList.append([])
        REWARD_TIMEOUT = (self.trophyListLen + self.holeBestListLen + self.courseBestListLen + self.cupListLen) * 5 + 19
        aimTimesList = [0] * 4
        aimIndex = 0
        stillPlaying = self.getStillPlayingAvIds()
        for avId in self.avIdList:
            if avId in stillPlaying:
                aimTime = 0
                if avId in self.aimTimes:
                    aimTime = self.aimTimes[avId]
                aimTimesList[aimIndex] = aimTime
            aimIndex += 1
            
        dg = PyDatagram()
        for list in trophiesList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
        
        dg.addUint8(len(self.rankings))
        for item in self.rankings:
            dg.addInt8(item)
                
        for list in holeBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
                
        for list in courseBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
        
        for list in cupList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
                
        dg.addUint32(self.winnerByTieBreak)
        for at in aimTimesList:
            dg.addUint32(int(at * 100))
           
        self.sendUpdate('setReward', [dg.getMessage()])

        def allAvatarsRewarded(self = self):
            self.notify.debug('GOLF COURSE: all avatars rewarded')
            self.rewardDone()


        def handleRewardTimeout(avIds, self = self):
            self.notify.debug('GOLF COURSE: timed out waiting for clients %s to finish reward' % avIds)
            self.rewardDone()

        stillPlaying = self.getStillPlayingAvIds()
        self.rewardBarrier = ToonBarrier('waitReward', self.uniqueName('waitReward'), stillPlaying, REWARD_TIMEOUT, allAvatarsRewarded, handleRewardTimeout)
コード例 #35
0
    def enterWaitReward(self):
        self.updateHistoryForCourseComplete()
        self.awardTrophies()
        self.awardCups()
        self.awardHoleBest()
        self.awardCourseBest()
        self.recordHoleInOne()
        self.recordCourseUnderPar()
        trophiesList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newTrophies:
                oneTrophyList = map(int, self.newTrophies[avId])
                trophiesList.append(oneTrophyList)
                continue
            trophiesList.append([])
        while len(trophiesList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            trophiesList.append([])
        holeBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newHoleBest:
                oneTrophyList = map(int, self.newHoleBest[avId])
                holeBestList.append(oneTrophyList)
                continue
            holeBestList.append([])
        while len(holeBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            holeBestList.append([])
        courseBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCourseBest:
                oneTrophyList = map(int, self.newCourseBest[avId])
                courseBestList.append(oneTrophyList)
                continue
            courseBestList.append([])
        while len(courseBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            courseBestList.append([])
        cupList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCups:
                oneCupList = map(int, self.newCups[avId])
                cupList.append(oneCupList)
                self.cupListLen = self.cupListLen + 1
                continue
            cupList.append([])
        while len(cupList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            cupList.append([])
        REWARD_TIMEOUT = (self.trophyListLen + self.holeBestListLen +
                          self.courseBestListLen + self.cupListLen) * 5 + 19
        aimTimesList = [0] * 4
        aimIndex = 0
        stillPlaying = self.getStillPlayingAvIds()
        for avId in self.avIdList:
            if avId in stillPlaying:
                aimTime = 0
                if avId in self.aimTimes:
                    aimTime = self.aimTimes[avId]
                aimTimesList[aimIndex] = aimTime
            aimIndex += 1

        dg = PyDatagram()
        for list in trophiesList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        dg.addUint8(len(self.rankings))
        for item in self.rankings:
            dg.addInt8(item)

        for list in holeBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        for list in courseBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        for list in cupList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        dg.addUint32(self.winnerByTieBreak)
        for at in aimTimesList:
            dg.addUint32(int(at * 100))

        self.sendUpdate('setReward', [dg.getMessage()])

        def allAvatarsRewarded(self=self):
            self.notify.debug('GOLF COURSE: all avatars rewarded')
            self.rewardDone()

        def handleRewardTimeout(avIds, self=self):
            self.notify.debug(
                'GOLF COURSE: timed out waiting for clients %s to finish reward'
                % avIds)
            self.rewardDone()

        stillPlaying = self.getStillPlayingAvIds()
        self.rewardBarrier = ToonBarrier('waitReward',
                                         self.uniqueName('waitReward'),
                                         stillPlaying, REWARD_TIMEOUT,
                                         allAvatarsRewarded,
                                         handleRewardTimeout)
コード例 #36
0
 def getBlob(self, store = 0):
     dg = PyDatagram()
     dg.addUint8(CatalogItemVersion)
     encodeCatalogItem(dg, self, store)
     return dg.getMessage()