Exemplo n.º 1
0
    def avatarFinished(self, avId):
        if not avId in self.avatars:
            self.air.writeServerEvent('suspicious', avId, 'Toon tried to finish in a race they\'re not in!')
            return

        if avId in self.finishedAvatars:
            self.air.writeServerEvent('suspicious', avId, 'Toon tried to finish in a race twice!')
            return
        self.finishedAvatars.append(avId)

        av = self.air.doId2do.get(avId)
        place = len(self.finishedAvatars)
        entryFee = RaceGlobals.getEntryFee(self.trackId, self.raceType)
        bonus = 0
        totalTime = globalClockDelta.networkToLocalTime(globalClockDelta.getRealNetworkTime()) - self.startTime
        qualify = False
        if totalTime < RaceGlobals.getQualifyingTime(self.trackId):
            qualify = True
        if self.raceType == RaceGlobals.Practice:
            winnings = RaceGlobals.PracticeWinnings
            trophies = []
        elif qualify:
            offset = 4 - len(self.avatarProgress) # self.avatarProgress contains the amount of STARTING players.
            winnings = entryFee * RaceGlobals.Winnings[(place+offset)-1]
            trophies = self.calculateTrophies(avId, place == 1, qualify, totalTime)
        else:
            winnings = 0
            trophies = []
        av.b_setTickets(av.getTickets() + winnings)
        if av.getTickets() > RaceGlobals.MaxTickets:
            av.b_setTickets(RaceGlobals.MaxTickets)
        self.sendUpdate('setPlace', [avId, totalTime, place, entryFee, qualify, max((winnings-entryFee), 0), bonus, trophies, [], 0])
Exemplo n.º 2
0
    def avatarFinished(self, avId):
        if not avId in self.avatars:
            self.air.writeServerEvent('suspicious', avId=avId, issue='Toon tried to finish in a race they\'re not in!')
            return

        if avId in self.finishedAvatars:
            self.air.writeServerEvent('suspicious', avId=avId, issue='Toon tried to finish in a race twice!')
            return
        self.finishedAvatars.append(avId)

        av = self.air.doId2do.get(avId)
        place = len(self.finishedAvatars)
        entryFee = RaceGlobals.getEntryFee(self.trackId, self.raceType)
        bonus = 0
        totalTime = globalClockDelta.networkToLocalTime(globalClockDelta.getRealNetworkTime()) - self.startTime
        qualify = False
        if totalTime < RaceGlobals.getQualifyingTime(self.trackId):
            qualify = True
        if self.raceType == RaceGlobals.Practice:
            winnings = RaceGlobals.PracticeWinnings
            trophies = []
        elif qualify:
            offset = 4 - len(self.avatarProgress) # self.avatarProgress contains the amount of STARTING players.
            winnings = entryFee * RaceGlobals.Winnings[(place+offset)-1]
            trophies = self.calculateTrophies(avId, place == 1, qualify, totalTime)
        else:
            winnings = 0
            trophies = []
        av.b_setTickets(av.getTickets() + winnings)
        if av.getTickets() > RaceGlobals.MaxTickets:
            av.b_setTickets(RaceGlobals.MaxTickets)
        self.sendUpdate('setPlace', [avId, totalTime, place, entryFee, qualify, (winnings-entryFee), bonus, trophies, [], 0])
Exemplo n.º 3
0
    def avatarFinished(self, avId):
        if not avId in self.avatars:
            self.air.writeServerEvent("suspicious", avId, "Toon tried to finish in a race they're not in!")
            return

        if avId in self.finishedAvatars:
            self.air.writeServerEvent("suspicious", avId, "Toon tried to finish in a race twice!")
            return
        self.finishedAvatars.append(avId)

        av = self.air.doId2do.get(avId)
        place = len(self.finishedAvatars)
        listPlace = place + (4 - len(self.avatarProgress)) - 1
        entryFee = RaceGlobals.getEntryFee(self.trackId, self.raceType)
        bonus = 0
        totalTime = globalClockDelta.networkToLocalTime(globalClockDelta.getRealNetworkTime()) - self.startTime
        qualify = False
        if totalTime < RaceGlobals.getQualifyingTime(self.trackId):
            qualify = True
            self.air.leaderboardMgr.submitRace(self.trackId, av.getName(), totalTime)
        if self.raceType == RaceGlobals.Practice:
            winnings = RaceGlobals.PracticeWinnings
            trophies = []
        elif qualify:
            winnings = entryFee * RaceGlobals.Winnings[listPlace]
            trophies = self.calculateTrophies(avId, place == 1, qualify, totalTime)
        else:
            winnings = 0
            trophies = []
        av.b_setTickets(av.getTickets() + winnings)
        if av.getTickets() > RaceGlobals.MaxTickets:
            av.b_setTickets(RaceGlobals.MaxTickets)
        av.addStat(ToontownGlobals.STAT_RACING)
        points = []
        if self.circuitPoints:
            avIndex = self.avatars.index(avId)
            points = self.circuitPoints[avIndex]
            points[0] += points[1]
            points[1] = RaceGlobals.CircuitPoints[place - 1]
        self.sendUpdate(
            "setPlace",
            [avId, totalTime, place, entryFee, qualify, max((winnings - entryFee), 0), bonus, trophies, points, 0],
        )
        if self.circuitPoints:
            self.circuitWinnings[avIndex] += winnings
            self.sendUpdate("setCircuitPlace", [avId, place, entryFee, self.circuitWinnings[avIndex], bonus, trophies])

            if len(self.finishedAvatars) == len(self.avatars):
                del self.circuitLoop[0]
                self.sendUpdate("setCircuitLoop", [self.circuitLoop])
                self.sendUpdate("endCircuitRace")
    def avatarFinished(self, avId):
        if not avId in self.avatars:
            self.air.writeServerEvent('suspicious', avId, 'Toon tried to finish in a race they\'re not in!')
            return

        if avId in self.finishedAvatars:
            self.air.writeServerEvent('suspicious', avId, 'Toon tried to finish in a race twice!')
            return
        self.finishedAvatars.append(avId)

        av = self.air.doId2do.get(avId)
        place = len(self.finishedAvatars)
        listPlace = place + (4 - len(self.avatarProgress)) - 1
        entryFee = RaceGlobals.getEntryFee(self.trackId, self.raceType)
        bonus = 0
        totalTime = globalClockDelta.networkToLocalTime(globalClockDelta.getRealNetworkTime()) - self.startTime
        qualify = False
        if totalTime < RaceGlobals.getQualifyingTime(self.trackId):
            qualify = True
            self.air.leaderboardMgr.submitRace(self.trackId, av.getName(), totalTime)
        if self.raceType == RaceGlobals.Practice:
            winnings = RaceGlobals.PracticeWinnings
            trophies = []
        elif qualify:
            winnings = entryFee * RaceGlobals.Winnings[listPlace]
            trophies = self.calculateTrophies(avId, place == 1, qualify, totalTime)
        else:
            winnings = 0
            trophies = []
        av.b_setTickets(av.getTickets() + winnings)
        if av.getTickets() > RaceGlobals.MaxTickets:
            av.b_setTickets(RaceGlobals.MaxTickets)
        av.addStat(ToontownGlobals.STAT_RACING)
        points = []
        if self.circuitPoints:
            avIndex = self.avatars.index(avId)
            points = self.circuitPoints[avIndex]
            points[0] += points[1]
            points[1] = RaceGlobals.CircuitPoints[place - 1]
        self.sendUpdate('setPlace', [avId, totalTime, place, entryFee, qualify, max((winnings-entryFee), 0), bonus, trophies, points, 0])
        if self.circuitPoints:
            self.circuitWinnings[avIndex] += winnings
            self.sendUpdate('setCircuitPlace', [avId, place, entryFee, self.circuitWinnings[avIndex], bonus, trophies])
            
            if len(self.finishedAvatars) == len(self.avatars):
                del self.circuitLoop[0]
                self.sendUpdate('setCircuitLoop', [self.circuitLoop])
                self.sendUpdate('endCircuitRace')
    def b_startRace(self, avIds):
        self.ignoreBarrier('readRules')
        if self.isDeleted():
            return
        self.notify.debug('Going!!!!!!')
        self.ignoreBarrier(self.waitingForReadyBarrier)
        self.toonCount = len(self.avIds)
        self.baseTime = globalClock.getFrameTime(
        ) + 0.5 + RaceGlobals.RaceCountdown
        for i in self.racers:
            self.racers[i].baseTime = self.baseTime

        self.sendUpdate('startRace',
                        [globalClockDelta.localToNetworkTime(self.baseTime)])
        qualTime = RaceGlobals.getQualifyingTime(self.trackId)
        timeout = qualTime + 60 + 3
        self.kickSlowRacersTask = taskMgr.doMethodLater(
            timeout, self.kickSlowRacers, 'kickSlowRacers')
Exemplo n.º 6
0
 def exitedRace(self, race, playerInfo):
     self.notify.debug('exited race: %s' % playerInfo.avId)
     totalTime = playerInfo.totalTime
     entryFee = 0
     bonus = 0
     placeMultiplier = 0
     qualify = 0
     winnings = 0
     trophies = []
     points = []
     newHistory = None
     race.playersFinished.append(playerInfo.avId)
     place = len(race.playersFinished)
     self.notify.debug('place: %s of %s' % (place, race.toonCount))
     self.notify.debug('pre-tie totalTime: %s' % totalTime)
     if totalTime <= race.lastTotalTime:
         totalTime = race.lastTotalTime + 0.01
     race.lastTotalTime = totalTime
     self.notify.debug(
         'totalTime: %s, qualify: %s' %
         (totalTime, RaceGlobals.getQualifyingTime(race.trackId)))
     circuitTime = totalTime + race.circuitTimes.get(playerInfo.avId, 0)
     race.circuitTimes[playerInfo.avId] = circuitTime
     if not race.circuitTimeList.get(playerInfo.avId):
         race.circuitTimeList[playerInfo.avId] = []
     race.circuitTimeList[playerInfo.avId].append([totalTime, 0])
     self.notify.debug('CircuitTimeList %s' % race.circuitTimeList)
     if race.raceType == RaceGlobals.Circuit:
         points = race.circuitPoints.get(playerInfo.avId, [])
         points.append(RaceGlobals.CircuitPoints[place - 1])
         race.circuitPoints[playerInfo.avId] = points
     currentTimeIndex = len(race.circuitTimeList[playerInfo.avId]) - 1
     if totalTime <= RaceGlobals.getQualifyingTime(race.trackId):
         race.circuitTimeList[playerInfo.avId][currentTimeIndex][1] = 1
         self.notify.debug(
             'Racer Qualified time: %s required: %s' %
             (totalTime, RaceGlobals.getQualifyingTime(race.trackId)))
         qualify = 1
         self.checkPersonalBest(race.trackId, totalTime, race.raceType,
                                race.toonCount, playerInfo.avId)
         if race.raceType == RaceGlobals.Practice:
             winnings = RaceGlobals.PracticeWinnings
             self.notify.debug(
                 'GrandTouring: Checking from branch: practice %s' %
                 playerInfo.avId)
             trophies = self.checkForNonRaceTrophies(playerInfo.avId)
             if trophies:
                 self.updateTrophiesFromList(playerInfo.avId, trophies)
         else:
             self.air.writeServerEvent('kartingPlaced', playerInfo.avId,
                                       '%s|%s' % (place, race.toonCount))
             if race.raceType != RaceGlobals.Circuit:
                 entryFee = RaceGlobals.getEntryFee(race.trackId,
                                                    race.raceType)
                 placeMultiplier = RaceGlobals.Winnings[
                     place - 1 + (RaceGlobals.MaxRacers - race.toonCount)]
                 winnings = int(entryFee * placeMultiplier)
                 newHistory = self.getNewSingleRaceHistory(
                     race, playerInfo.avId, place)
                 av = self.air.doId2do.get(playerInfo.avId)
                 if newHistory:
                     self.notify.debug('history %s' % newHistory)
                     av.b_setKartingHistory(newHistory)
                     trophies = self.checkForRaceTrophies(
                         race, playerInfo.avId)
                 else:
                     trophies = self.checkForNonRaceTrophies(
                         playerInfo.avId)
                 if trophies:
                     self.updateTrophiesFromList(playerInfo.avId, trophies)
             bonus = self.checkTimeRecord(race.trackId, totalTime,
                                          race.raceType, race.toonCount,
                                          playerInfo.avId)
             if playerInfo.avId in race.circuitTotalBonusTickets:
                 race.circuitTotalBonusTickets[playerInfo.avId] += bonus
             else:
                 race.circuitTotalBonusTickets[playerInfo.avId] = bonus
         av = self.air.doId2do.get(playerInfo.avId)
         if av:
             oldTickets = av.getTickets()
             self.notify.debug('old tickets: %s' % oldTickets)
             newTickets = oldTickets + winnings + entryFee + bonus
             self.air.writeServerEvent('kartingTicketsWon', playerInfo.avId,
                                       '%s' % (newTickets - oldTickets))
             self.notify.debug('entry fee: %s' % entryFee)
             self.notify.debug('place mult: %s' % placeMultiplier)
             self.notify.debug('winnings: %s' % winnings)
             self.notify.debug('bonus: %s' % bonus)
             self.notify.debug('new tickets: %s' % newTickets)
             self.notify.debug('circuit points: %s' % points)
             self.notify.debug('circuit time: %s' % circuitTime)
             self.notify.debug('circuitTotalBonusTickets: %s' %
                               race.circuitTotalBonusTickets)
             av.b_setTickets(newTickets)
     else:
         race.circuitTimeList[playerInfo.avId][currentTimeIndex][1] = -1
         self.notify.debug(
             'GrandTouring: Checking from branch: Not Qualified %s' %
             playerInfo.avId)
         trophies = self.checkForNonRaceTrophies(playerInfo.avId)
         if trophies:
             self.updateTrophiesFromList(playerInfo.avId, trophies)
     if race in self.races:
         race.d_setPlace(playerInfo.avId, totalTime, place, entryFee,
                         qualify, winnings, bonus, trophies, points,
                         circuitTime)
         if race.isCircuit():
             self.notify.debug('isCircuit')
             if race.everyoneDone():
                 self.notify.debug('everyoneDone')
                 if race.isLastRace():
                     taskMgr.doMethodLater(
                         10, self.endCircuitRace,
                         'DelayEndCircuitRace=%d' % race.doId,
                         (race, bonus))
                 else:
                     self.endCircuitRace(race, bonus)
         else:
             self.notify.debug('not isCircuit')
     return