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])
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])
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')
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