mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2025-01-09 17:53:50 +00:00
Top Toons
This commit is contained in:
parent
cf319c587b
commit
c93fec2f19
16 changed files with 320 additions and 17 deletions
|
@ -4,6 +4,7 @@ from otp.ai.MagicWordGlobal import *
|
||||||
from toontown.fishing import FishGlobals
|
from toontown.fishing import FishGlobals
|
||||||
from toontown.fishing.FishBase import FishBase
|
from toontown.fishing.FishBase import FishBase
|
||||||
from toontown.toonbase import TTLocalizer
|
from toontown.toonbase import TTLocalizer
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
|
|
||||||
|
|
||||||
class FishManagerAI:
|
class FishManagerAI:
|
||||||
|
@ -66,6 +67,7 @@ class FishManagerAI:
|
||||||
av.fishTank.addFish(fish)
|
av.fishTank.addFish(fish)
|
||||||
netlist = av.fishTank.getNetLists()
|
netlist = av.fishTank.getNetLists()
|
||||||
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
|
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_FISH, 1])
|
||||||
return [itemType, genus, species, weight]
|
return [itemType, genus, species, weight]
|
||||||
elif itemType == FishGlobals.BootItem:
|
elif itemType == FishGlobals.BootItem:
|
||||||
return [itemType, 0, 0, 0]
|
return [itemType, 0, 0, 0]
|
||||||
|
@ -89,6 +91,7 @@ class FishManagerAI:
|
||||||
av.fishTank.addFish(fish)
|
av.fishTank.addFish(fish)
|
||||||
netlist = av.fishTank.getNetLists()
|
netlist = av.fishTank.getNetLists()
|
||||||
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
|
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_FISH, 1])
|
||||||
return [itemType, genus, species, weight]
|
return [itemType, genus, species, weight]
|
||||||
else:
|
else:
|
||||||
money = FishGlobals.Rod2JellybeanDict[av.getFishingRod()]
|
money = FishGlobals.Rod2JellybeanDict[av.getFishingRod()]
|
||||||
|
|
|
@ -3,7 +3,7 @@ from toontown.building import FADoorCodes
|
||||||
from otp.ai.MagicWordGlobal import *
|
from otp.ai.MagicWordGlobal import *
|
||||||
from toontown.hood import ZoneUtil
|
from toontown.hood import ZoneUtil
|
||||||
from toontown.quest import Quests
|
from toontown.quest import Quests
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
|
|
||||||
QuestIdIndex = 0
|
QuestIdIndex = 0
|
||||||
QuestFromNpcIdIndex = 1
|
QuestFromNpcIdIndex = 1
|
||||||
|
@ -75,6 +75,7 @@ class QuestManagerAI:
|
||||||
# If they've completed a quest.
|
# If they've completed a quest.
|
||||||
if completeStatus == Quests.COMPLETE:
|
if completeStatus == Quests.COMPLETE:
|
||||||
# ToonUp the toon to max health.
|
# ToonUp the toon to max health.
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_TASKS, 1])
|
||||||
av.toonUp(av.maxHp)
|
av.toonUp(av.maxHp)
|
||||||
|
|
||||||
# If it's a TrackChoiceQuest then present their track choices.
|
# If it's a TrackChoiceQuest then present their track choices.
|
||||||
|
@ -437,6 +438,7 @@ class QuestManagerAI:
|
||||||
|
|
||||||
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo):
|
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo):
|
||||||
# Get the avatars current quests.
|
# Get the avatars current quests.
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_BLDG, 1])
|
||||||
avQuests = av.getQuests()
|
avQuests = av.getQuests()
|
||||||
questList = []
|
questList = []
|
||||||
zoneId = ZoneUtil.getBranchZone(zoneId)
|
zoneId = ZoneUtil.getBranchZone(zoneId)
|
||||||
|
@ -491,6 +493,7 @@ class QuestManagerAI:
|
||||||
|
|
||||||
def toonKilledCogs(self, av, suitsKilled, zoneId):
|
def toonKilledCogs(self, av, suitsKilled, zoneId):
|
||||||
# Get the avatar's current quests.
|
# Get the avatar's current quests.
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_COGS, len(suitsKilled)])
|
||||||
avQuests = av.getQuests()
|
avQuests = av.getQuests()
|
||||||
questList = []
|
questList = []
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ from toontown.toon import NPCToons
|
||||||
from toontown.toonbase import ToontownGlobals
|
from toontown.toonbase import ToontownGlobals
|
||||||
from toontown.tutorial.TutorialManagerAI import TutorialManagerAI
|
from toontown.tutorial.TutorialManagerAI import TutorialManagerAI
|
||||||
from toontown.uberdog.DistributedPartyManagerAI import DistributedPartyManagerAI
|
from toontown.uberdog.DistributedPartyManagerAI import DistributedPartyManagerAI
|
||||||
|
from toontown.uberdog.DistributedTopToonsManagerAI import DistributedTopToonsManagerAI
|
||||||
#from toontown.uberdog.DistributedLobbyManagerAI import DistributedLobbyManagerAI
|
#from toontown.uberdog.DistributedLobbyManagerAI import DistributedLobbyManagerAI
|
||||||
|
|
||||||
class ToontownAIRepository(ToontownInternalRepository):
|
class ToontownAIRepository(ToontownInternalRepository):
|
||||||
|
@ -72,6 +73,7 @@ class ToontownAIRepository(ToontownInternalRepository):
|
||||||
self.lawOfficeMgr = None
|
self.lawOfficeMgr = None
|
||||||
self.countryClubMgr = None
|
self.countryClubMgr = None
|
||||||
self.groupManager = GroupManagerAI(self)
|
self.groupManager = GroupManagerAI(self)
|
||||||
|
self.topToonsMgr = DistributedTopToonsManagerAI(self)
|
||||||
|
|
||||||
self.zoneAllocator = UniqueIdAllocator(ToontownGlobals.DynamicZonesBegin,
|
self.zoneAllocator = UniqueIdAllocator(ToontownGlobals.DynamicZonesBegin,
|
||||||
ToontownGlobals.DynamicZonesEnd)
|
ToontownGlobals.DynamicZonesEnd)
|
||||||
|
@ -103,7 +105,7 @@ class ToontownAIRepository(ToontownInternalRepository):
|
||||||
self.tutorialManager.generateWithRequired(2)
|
self.tutorialManager.generateWithRequired(2)
|
||||||
self.friendManager = FriendManagerAI(self)
|
self.friendManager = FriendManagerAI(self)
|
||||||
self.friendManager.generateWithRequired(2)
|
self.friendManager.generateWithRequired(2)
|
||||||
self.questManager = QuestManagerAI(self)
|
self.questManager = QuestManagerAI(self)
|
||||||
self.banManager = BanManagerAI.BanManagerAI(self)
|
self.banManager = BanManagerAI.BanManagerAI(self)
|
||||||
self.suitInvasionManager = SuitInvasionManagerAI(self)
|
self.suitInvasionManager = SuitInvasionManagerAI(self)
|
||||||
self.blackCatMgr = DistributedBlackCatMgrAI(self)
|
self.blackCatMgr = DistributedBlackCatMgrAI(self)
|
||||||
|
|
|
@ -6,6 +6,7 @@ from panda3d.core import *
|
||||||
from direct.fsm.FSM import FSM
|
from direct.fsm.FSM import FSM
|
||||||
from toontown.ai.ToonBarrier import *
|
from toontown.ai.ToonBarrier import *
|
||||||
from toontown.golf import GolfGlobals
|
from toontown.golf import GolfGlobals
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
INITIAL = 0
|
INITIAL = 0
|
||||||
EXITED = 1
|
EXITED = 1
|
||||||
EXPECTED = 2
|
EXPECTED = 2
|
||||||
|
@ -970,12 +971,17 @@ class DistributedGolfCourseAI(DistributedObjectAI.DistributedObjectAI, FSM):
|
||||||
stillPlaying = self.getStillPlayingAvIds()
|
stillPlaying = self.getStillPlayingAvIds()
|
||||||
for avId in stillPlaying:
|
for avId in stillPlaying:
|
||||||
scoreList = self.scores[avId]
|
scoreList = self.scores[avId]
|
||||||
|
ns = 0
|
||||||
for holeIndex in xrange(len(scoreList)):
|
for holeIndex in xrange(len(scoreList)):
|
||||||
strokes = scoreList[holeIndex]
|
strokes = scoreList[holeIndex]
|
||||||
if strokes == 1:
|
if strokes == 1:
|
||||||
|
ns +=1
|
||||||
holeId = self.holeIds[holeIndex]
|
holeId = self.holeIds[holeIndex]
|
||||||
self.air.writeServerEvent('golf_ace', avId, '%d|%d|%s' % (self.courseId, holeId, stillPlaying))
|
self.air.writeServerEvent('golf_ace', avId, '%d|%d|%s' % (self.courseId, holeId, stillPlaying))
|
||||||
|
|
||||||
|
if ns:
|
||||||
|
messenger.send('topToonsManager-event', [avId, TopToonsGlobals.CAT_HOLE_IN_ONE, ns])
|
||||||
|
|
||||||
def recordCourseUnderPar(self):
|
def recordCourseUnderPar(self):
|
||||||
coursePar = self.calcCoursePar()
|
coursePar = self.calcCoursePar()
|
||||||
stillPlaying = self.getStillPlayingAvIds()
|
stillPlaying = self.getStillPlayingAvIds()
|
||||||
|
@ -984,7 +990,8 @@ class DistributedGolfCourseAI(DistributedObjectAI.DistributedObjectAI, FSM):
|
||||||
netScore = totalScore - coursePar
|
netScore = totalScore - coursePar
|
||||||
if netScore < 0:
|
if netScore < 0:
|
||||||
self.air.writeServerEvent('golf_underPar', avId, '%d|%d|%s' % (self.courseId, netScore, stillPlaying))
|
self.air.writeServerEvent('golf_underPar', avId, '%d|%d|%s' % (self.courseId, netScore, stillPlaying))
|
||||||
|
messenger.send('topToonsManager-event', [avId, TopToonsGlobals.CAT_COURSE_UNDER_PAR, 1])
|
||||||
|
|
||||||
def addAimTime(self, avId, aimTime):
|
def addAimTime(self, avId, aimTime):
|
||||||
if avId in self.aimTimes:
|
if avId in self.aimTimes:
|
||||||
self.aimTimes[avId] += aimTime
|
self.aimTimes[avId] += aimTime
|
||||||
|
|
|
@ -20,7 +20,7 @@ import DistributedTwoDGameAI
|
||||||
import DistributedVineGameAI
|
import DistributedVineGameAI
|
||||||
from otp.ai.MagicWordGlobal import *
|
from otp.ai.MagicWordGlobal import *
|
||||||
from toontown.toonbase import ToontownGlobals
|
from toontown.toonbase import ToontownGlobals
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
|
|
||||||
simbase.forcedMinigameId = simbase.config.GetInt('force-minigame', 0)
|
simbase.forcedMinigameId = simbase.config.GetInt('force-minigame', 0)
|
||||||
RequestMinigame = {}
|
RequestMinigame = {}
|
||||||
|
@ -84,6 +84,8 @@ def createMinigame(air, playerArray, trolleyZone, minigameZone=None,
|
||||||
toon = simbase.air.doId2do.get(doId)
|
toon = simbase.air.doId2do.get(doId)
|
||||||
if toon is not None:
|
if toon is not None:
|
||||||
toons.append(toon)
|
toons.append(toon)
|
||||||
|
for toon in toons:
|
||||||
|
messenger.send('topToonsManager-event', [toon.doId, TopToonsGlobals.CAT_TROLLEY, 1])
|
||||||
for toon in toons:
|
for toon in toons:
|
||||||
simbase.air.questManager.toonPlayedMinigame(toon, toons)
|
simbase.air.questManager.toonPlayedMinigame(toon, toons)
|
||||||
retVal = {}
|
retVal = {}
|
||||||
|
|
|
@ -3,6 +3,7 @@ from direct.distributed.ClockDelta import *
|
||||||
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
||||||
from direct.fsm.FSM import FSM
|
from direct.fsm.FSM import FSM
|
||||||
from direct.task import Task
|
from direct.task import Task
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from toontown.racing import RaceGlobals
|
from toontown.racing import RaceGlobals
|
||||||
|
@ -320,6 +321,8 @@ class DistributedRaceAI(DistributedObjectAI, FSM):
|
||||||
self.sendUpdate('setPlace', [avId, totalTime, place, entryFee, qualify, max((winnings-entryFee), 0), bonus, trophies, [], 0])
|
self.sendUpdate('setPlace', [avId, totalTime, place, entryFee, qualify, max((winnings-entryFee), 0), bonus, trophies, [], 0])
|
||||||
|
|
||||||
def calculateTrophies(self, avId, won, qualify, time):
|
def calculateTrophies(self, avId, won, qualify, time):
|
||||||
|
if won:
|
||||||
|
messenger.send('topToonsManager-event', [avId, TopToonsGlobals.CAT_RACE_WON, 1])
|
||||||
av = self.air.doId2do[avId]
|
av = self.air.doId2do[avId]
|
||||||
kartingHistory = av.getKartingHistory()
|
kartingHistory = av.getKartingHistory()
|
||||||
avTrophies = av.getKartingTrophies()
|
avTrophies = av.getKartingTrophies()
|
||||||
|
|
|
@ -145,6 +145,10 @@ class DistributedBossCogAI(DistributedAvatarAI.DistributedAvatarAI):
|
||||||
|
|
||||||
def d_setBattleExperience(self):
|
def d_setBattleExperience(self):
|
||||||
self.sendUpdate('setBattleExperience', self.getBattleExperience())
|
self.sendUpdate('setBattleExperience', self.getBattleExperience())
|
||||||
|
for toonId in self.involvedToons:
|
||||||
|
toon = simbase.air.doId2do.get(toonId)
|
||||||
|
if toon:
|
||||||
|
self.air.topToonsMgr.toonKilledBoss(toon, self.BossName)
|
||||||
|
|
||||||
def getBattleExperience(self):
|
def getBattleExperience(self):
|
||||||
result = BattleExperienceAI.getBattleExperience(8, self.involvedToons, self.toonExp, self.toonSkillPtsGained, self.toonOrigQuests, self.toonItems, self.toonOrigMerits, self.toonMerits, self.toonParts, self.suitsKilled, self.helpfulToons)
|
result = BattleExperienceAI.getBattleExperience(8, self.involvedToons, self.toonExp, self.toonSkillPtsGained, self.toonOrigQuests, self.toonItems, self.toonOrigMerits, self.toonMerits, self.toonParts, self.suitsKilled, self.helpfulToons)
|
||||||
|
|
|
@ -28,6 +28,7 @@ class DistributedBossbotBossAI(DistributedBossCogAI.DistributedBossCogAI, FSM.FS
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
4]
|
4]
|
||||||
|
BossName = "CEO"
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air):
|
||||||
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'c')
|
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'c')
|
||||||
|
|
|
@ -17,6 +17,7 @@ import math
|
||||||
class DistributedCashbotBossAI(DistributedBossCogAI.DistributedBossCogAI, FSM.FSM):
|
class DistributedCashbotBossAI(DistributedBossCogAI.DistributedBossCogAI, FSM.FSM):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCashbotBossAI')
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCashbotBossAI')
|
||||||
maxGoons = 8
|
maxGoons = 8
|
||||||
|
BossName = "CFO"
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air):
|
||||||
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'm')
|
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'm')
|
||||||
|
|
|
@ -29,6 +29,7 @@ class DistributedLawbotBossAI(DistributedBossCogAI.DistributedBossCogAI, FSM.FSM
|
||||||
hitCountDamage = 35
|
hitCountDamage = 35
|
||||||
numPies = 10
|
numPies = 10
|
||||||
maxToonLevels = 77
|
maxToonLevels = 77
|
||||||
|
BossName = "CJ"
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air):
|
||||||
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'l')
|
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 'l')
|
||||||
|
|
|
@ -20,6 +20,7 @@ class DistributedSellbotBossAI(DistributedBossCogAI.DistributedBossCogAI, FSM.FS
|
||||||
limitHitCount = 6
|
limitHitCount = 6
|
||||||
hitCountDamage = 35
|
hitCountDamage = 35
|
||||||
numPies = ToontownGlobals.FullPies
|
numPies = ToontownGlobals.FullPies
|
||||||
|
BossName = "VP"
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air):
|
||||||
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 's')
|
DistributedBossCogAI.DistributedBossCogAI.__init__(self, air, 's')
|
||||||
|
|
|
@ -32,6 +32,7 @@ from toontown.toonbase import TTLocalizer, ToontownBattleGlobals, ToontownGlobal
|
||||||
from toontown.toonbase.ToontownGlobals import *
|
from toontown.toonbase.ToontownGlobals import *
|
||||||
from NPCToons import npcFriends
|
from NPCToons import npcFriends
|
||||||
import Experience, InventoryBase, ToonDNA, random, time
|
import Experience, InventoryBase, ToonDNA, random, time
|
||||||
|
from toontown.uberdog import TopToonsGlobals
|
||||||
|
|
||||||
if simbase.wantPets:
|
if simbase.wantPets:
|
||||||
from toontown.pets import PetLookerAI, PetObserve
|
from toontown.pets import PetLookerAI, PetObserve
|
||||||
|
@ -2271,6 +2272,8 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
|
||||||
return self.maxBankMoney
|
return self.maxBankMoney
|
||||||
|
|
||||||
def addMoney(self, deltaMoney):
|
def addMoney(self, deltaMoney):
|
||||||
|
if deltaMoney > 0:
|
||||||
|
messenger.send('topToonsManager-event', [self.doId, TopToonsGlobals.CAT_JELLYBEAN, deltaMoney])
|
||||||
money = deltaMoney + self.money
|
money = deltaMoney + self.money
|
||||||
pocketMoney = min(money, self.maxMoney)
|
pocketMoney = min(money, self.maxMoney)
|
||||||
self.b_setMoney(pocketMoney)
|
self.b_setMoney(pocketMoney)
|
||||||
|
|
32
toontown/uberdog/DistributedTopToonsManagerAI.py
Normal file
32
toontown/uberdog/DistributedTopToonsManagerAI.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from direct.distributed.DistributedObjectAI import *
|
||||||
|
from direct.showbase.DirectObject import *
|
||||||
|
import TopToonsGlobals
|
||||||
|
|
||||||
|
class DistributedTopToonsManagerAI(DirectObject):
|
||||||
|
def __init__(self, air):
|
||||||
|
self.air = air
|
||||||
|
|
||||||
|
self.accept('topToonsManager-event', self.__handleEvent)
|
||||||
|
|
||||||
|
def toonKilledBoss(self, av, boss):
|
||||||
|
cat = {'VP': TopToonsGlobals.CAT_VP,
|
||||||
|
'CFO': TopToonsGlobals.CAT_CFO,
|
||||||
|
'CJ': TopToonsGlobals.CAT_CJ,
|
||||||
|
'CEO': TopToonsGlobals.CAT_CEO}.get(boss, 0)
|
||||||
|
self.__handleEvent(av.doId, cat, 1)
|
||||||
|
|
||||||
|
def __handleEvent(self, *args): # avId, categories, score
|
||||||
|
self.air.sendNetEvent('topToonsManager-AI-score-site', list(args))
|
||||||
|
|
||||||
|
from otp.ai.MagicWordGlobal import *
|
||||||
|
@magicWord(types=[int, int])
|
||||||
|
def topToon(score, cat=TopToonsGlobals._CAT_ALL):
|
||||||
|
av = spellbook.getTarget()
|
||||||
|
mgr = av.air.topToonsMgr
|
||||||
|
if not mgr:
|
||||||
|
return 'No manager!'
|
||||||
|
|
||||||
|
if cat > TopToonsGlobals._CAT_ALL:
|
||||||
|
return 'Max value: %d' % TopToonsGlobals._CAT_ALL
|
||||||
|
|
||||||
|
messenger.send('topToonsManager-event', [av.doId, cat, score])
|
247
toontown/uberdog/DistributedTopToonsManagerUD.py
Normal file
247
toontown/uberdog/DistributedTopToonsManagerUD.py
Normal file
|
@ -0,0 +1,247 @@
|
||||||
|
# CLEANUP IMPORTS
|
||||||
|
|
||||||
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
|
from direct.fsm.FSM import FSM
|
||||||
|
from direct.distributed.DistributedObjectUD import *
|
||||||
|
from direct.showbase.DirectObject import *
|
||||||
|
from toontown.toon.ToonDNA import ToonDNA, getSpeciesName
|
||||||
|
import TopToonsGlobals
|
||||||
|
import time, cPickle, random
|
||||||
|
import datetime, json
|
||||||
|
import urllib
|
||||||
|
import urllib2
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
def getCurrentMonth():
|
||||||
|
dt = datetime.date.today()
|
||||||
|
month = dt.month
|
||||||
|
year = dt.year
|
||||||
|
return year * 100 + month
|
||||||
|
|
||||||
|
def getPrevMonth():
|
||||||
|
current = getCurrentMonth()
|
||||||
|
year, month = divmod(current, 100)
|
||||||
|
month -= 1
|
||||||
|
if not month:
|
||||||
|
month = 12
|
||||||
|
year -= 1
|
||||||
|
|
||||||
|
return year * 100 + month
|
||||||
|
|
||||||
|
def getNextMonth():
|
||||||
|
current = getCurrentMonth()
|
||||||
|
year, month = divmod(current, 100)
|
||||||
|
month += 1
|
||||||
|
if month > 12:
|
||||||
|
month = 1
|
||||||
|
year += 1
|
||||||
|
|
||||||
|
return year * 100 + month
|
||||||
|
|
||||||
|
def timeToNextMonth():
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
year, month = divmod(getNextMonth(), 100)
|
||||||
|
return (datetime.datetime(year, month, 1) - now).total_seconds()
|
||||||
|
|
||||||
|
def getEmptySiteToonsColl(month):
|
||||||
|
coll = {}
|
||||||
|
|
||||||
|
start = TopToonsGlobals._CAT_BEGIN
|
||||||
|
end = TopToonsGlobals._CAT_END
|
||||||
|
while start <= end:
|
||||||
|
coll[str(start)] = {}
|
||||||
|
start *= 2
|
||||||
|
|
||||||
|
coll['month'] = month
|
||||||
|
return coll
|
||||||
|
|
||||||
|
class SiteUploadFSM(FSM):
|
||||||
|
notify = DirectNotifyGlobal.directNotify.newCategory('SiteUploadFSM')
|
||||||
|
URL = config.GetString('toptoons-api-endpoint', 'http://toontownstride.com/toptoons/post/') # Let's hope jumbleweed hasn't changed this
|
||||||
|
|
||||||
|
def __init__(self, mgr, data):
|
||||||
|
FSM.__init__(self, 'SiteUploadFSM')
|
||||||
|
|
||||||
|
self.mgr = mgr
|
||||||
|
self.data = {}
|
||||||
|
self.month = data.pop('month')
|
||||||
|
for category, avs in data.items():
|
||||||
|
self.data[int(category)] = sorted(avs.items(), key=lambda x: -x[1])
|
||||||
|
|
||||||
|
self.__cat = TopToonsGlobals._CAT_BEGIN
|
||||||
|
self.__responses = {}
|
||||||
|
self.__cache = {}
|
||||||
|
self.__waiting = {}
|
||||||
|
self.__dataToSend = {}
|
||||||
|
self.__failures = -1
|
||||||
|
|
||||||
|
self.demand('QueryAvatars')
|
||||||
|
|
||||||
|
def enterQueryAvatars(self):
|
||||||
|
avs = self.data[self.__cat]
|
||||||
|
cutoff = self.__failures
|
||||||
|
if cutoff == -1:
|
||||||
|
cutoff = 5
|
||||||
|
selected, remaining = avs[:cutoff], avs[cutoff:]
|
||||||
|
self.data[self.__cat] = remaining
|
||||||
|
|
||||||
|
self.__waiting = {int(x[0]): x[1] for x in selected}
|
||||||
|
avIds = self.__waiting.keys()
|
||||||
|
for avId in avIds:
|
||||||
|
if avId in self.__cache:
|
||||||
|
self.__responses[avId] = (self.__cache[avId][0], self.__waiting.pop(avId))
|
||||||
|
|
||||||
|
self.__failures = 0
|
||||||
|
for avId in self.__waiting:
|
||||||
|
def response(x, y, avId=avId):
|
||||||
|
self.__handleToon(avId, x, y)
|
||||||
|
|
||||||
|
self.mgr.air.dbInterface.queryObject(self.mgr.air.dbId, avId, response)
|
||||||
|
|
||||||
|
if not self.__waiting:
|
||||||
|
self.demand('SortResults')
|
||||||
|
|
||||||
|
def __handleToon(self, avId, dclass, fields):
|
||||||
|
if avId not in self.__waiting:
|
||||||
|
return
|
||||||
|
|
||||||
|
if dclass != self.mgr.air.dclassesByName['DistributedToonUD']:
|
||||||
|
self.__failures += 1
|
||||||
|
self.notify.warning('%d query failed!' % avId)
|
||||||
|
del self.__waiting[avId]
|
||||||
|
if not self.__waiting:
|
||||||
|
self.demand('QueryAvatars')
|
||||||
|
return
|
||||||
|
|
||||||
|
name = fields['setName'][0]
|
||||||
|
hp = fields['setMaxHp'][0]
|
||||||
|
|
||||||
|
dna = ToonDNA(fields['setDNAString'][0])
|
||||||
|
species = getSpeciesName(dna.head)
|
||||||
|
color = dna.headColor
|
||||||
|
|
||||||
|
if species == 'pig':
|
||||||
|
dna = 'pig'
|
||||||
|
|
||||||
|
else:
|
||||||
|
if species == 'cat' and color == 26:
|
||||||
|
dna = 'blackcat'
|
||||||
|
|
||||||
|
else:
|
||||||
|
if color > 23:
|
||||||
|
color = 0
|
||||||
|
|
||||||
|
dna = '%s_%s_%d' % (species, dna.head[1:], color)
|
||||||
|
|
||||||
|
self.__responses[avId] = ((name, dna, hp), self.__waiting.pop(avId))
|
||||||
|
|
||||||
|
if not self.__waiting:
|
||||||
|
self.demand('QueryAvatars')
|
||||||
|
|
||||||
|
def enterSortResults(self):
|
||||||
|
responses = sorted(self.__responses.values(), key=lambda x: -x[-1])
|
||||||
|
self.__dataToSend[self.__cat] = responses
|
||||||
|
self.__cache.update(self.__responses)
|
||||||
|
self.__failures = -1
|
||||||
|
self.__responses = {}
|
||||||
|
self.__cat *= 2
|
||||||
|
if self.__cat * 2 == TopToonsGlobals._CAT_END:
|
||||||
|
self.demand('Upload')
|
||||||
|
return
|
||||||
|
|
||||||
|
self.demand('QueryAvatars')
|
||||||
|
|
||||||
|
def enterUpload(self):
|
||||||
|
self.__dataToSend['month'] = self.month
|
||||||
|
|
||||||
|
(success, error), res = self.post(self.URL, self.__dataToSend)
|
||||||
|
print (success, error), res
|
||||||
|
|
||||||
|
def post(self, url, data):
|
||||||
|
headers = {'User-Agent' : 'TTUberAgent'}
|
||||||
|
|
||||||
|
innerData = json.dumps(data)
|
||||||
|
hmac = hashlib.sha512(innerData + self.mgr.air.getApiKey()).hexdigest() # XXX PROVIDE THE KEY HERE
|
||||||
|
|
||||||
|
data = 'data=%s' % urllib.quote(innerData)
|
||||||
|
data += '&hmac=%s' % urllib.quote(hmac)
|
||||||
|
|
||||||
|
success = True
|
||||||
|
error = None
|
||||||
|
res = {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
req = urllib2.Request(url, data, headers)
|
||||||
|
res = json.loads(urllib2.urlopen(req).read())
|
||||||
|
success = res['success']
|
||||||
|
error = res.get('error')
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
if hasattr(e, 'read'):
|
||||||
|
with open('../e.html', 'wb') as f:
|
||||||
|
f.write(e.read())
|
||||||
|
|
||||||
|
success = False
|
||||||
|
error = str(e)
|
||||||
|
|
||||||
|
return (success, error), res
|
||||||
|
|
||||||
|
class DistributedTopToonsManagerUD(DirectObject):
|
||||||
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedTopToonsManagerUD')
|
||||||
|
|
||||||
|
def __init__(self, air):
|
||||||
|
self.air = air
|
||||||
|
|
||||||
|
self.__curMonth = getCurrentMonth()
|
||||||
|
coll = None
|
||||||
|
if self.air.dbConn:
|
||||||
|
coll = self.air.dbGlobalCursor.strideToons.find_one({'month': self.__curMonth})
|
||||||
|
if not coll:
|
||||||
|
lastMonthColl = self.air.dbGlobalCursor.strideToons.find_one({'month': getPrevMonth()})
|
||||||
|
if lastMonthColl:
|
||||||
|
self.__uploadLastMonth(lastMonthColl)
|
||||||
|
|
||||||
|
if not coll:
|
||||||
|
coll = getEmptySiteToonsColl(self.__curMonth)
|
||||||
|
|
||||||
|
self.__topToonsData = coll
|
||||||
|
self.__topToonsData.pop('_id', None)
|
||||||
|
|
||||||
|
self.accept('topToonsManager-AI-score-site', self.__topToonsScore)
|
||||||
|
self.waitForNextMonth()
|
||||||
|
|
||||||
|
def __uploadLastMonth(self, data):
|
||||||
|
self.notify.info('Sending last month result to site...')
|
||||||
|
SiteUploadFSM(self, data)
|
||||||
|
|
||||||
|
def waitForNextMonth(self):
|
||||||
|
def _nm(task):
|
||||||
|
self.__uploadLastMonth(self.__topToonsData)
|
||||||
|
|
||||||
|
self.__curMonth = getCurrentMonth()
|
||||||
|
self.__topToonsData = getEmptySiteToonsColl(self.__curMonth)
|
||||||
|
|
||||||
|
self.waitForNextMonth()
|
||||||
|
|
||||||
|
return task.done
|
||||||
|
|
||||||
|
taskMgr.doMethodLater(timeToNextMonth() + 1, _nm, 'DistributedTopToonsManagerUD-nextMonth')
|
||||||
|
|
||||||
|
def saveSite(self):
|
||||||
|
if self.air.dbConn:
|
||||||
|
self.air.dbGlobalCursor.strideToons.update({'month': self.__curMonth}, {'$set': self.__topToonsData}, upsert=True)
|
||||||
|
|
||||||
|
def __topToonsScore(self, avId, categories, score):
|
||||||
|
def _add(cat):
|
||||||
|
cd = self.__topToonsData[str(cat)]
|
||||||
|
cd[str(avId)] = cd.get(str(avId), 0) + score
|
||||||
|
|
||||||
|
start = TopToonsGlobals._CAT_BEGIN
|
||||||
|
end = TopToonsGlobals._CAT_END
|
||||||
|
while start <= end:
|
||||||
|
if categories & start:
|
||||||
|
_add(start)
|
||||||
|
|
||||||
|
start *= 2
|
||||||
|
|
||||||
|
self.saveSite()
|
|
@ -4,28 +4,16 @@ from otp.distributed.OtpDoGlobals import *
|
||||||
from otp.distributed.DistributedDirectoryAI import DistributedDirectoryAI
|
from otp.distributed.DistributedDirectoryAI import DistributedDirectoryAI
|
||||||
from toontown.distributed.ToontownInternalRepository import ToontownInternalRepository
|
from toontown.distributed.ToontownInternalRepository import ToontownInternalRepository
|
||||||
import toontown.minigame.MinigameCreatorAI
|
import toontown.minigame.MinigameCreatorAI
|
||||||
|
from toontown.uberdog.DistributedTopToonsManagerUD import DistributedTopToonsManagerUD
|
||||||
|
|
||||||
if config.GetBool('want-rpc-server', False):
|
if config.GetBool('want-rpc-server', False):
|
||||||
from toontown.rpc.ToontownRPCServer import ToontownRPCServer
|
from toontown.rpc.ToontownRPCServer import ToontownRPCServer
|
||||||
from toontown.rpc.ToontownRPCHandler import ToontownRPCHandler
|
from toontown.rpc.ToontownRPCHandler import ToontownRPCHandler
|
||||||
|
|
||||||
if config.GetBool('want-mongo-client', False):
|
|
||||||
import pymongo
|
|
||||||
|
|
||||||
class ToontownUberRepository(ToontownInternalRepository):
|
class ToontownUberRepository(ToontownInternalRepository):
|
||||||
def __init__(self, baseChannel, serverId):
|
def __init__(self, baseChannel, serverId):
|
||||||
ToontownInternalRepository.__init__(self, baseChannel, serverId, dcSuffix='UD')
|
ToontownInternalRepository.__init__(self, baseChannel, serverId, dcSuffix='UD')
|
||||||
|
|
||||||
if config.GetBool('want-mongo-client', False):
|
|
||||||
url = config.GetString('mongodb-url', 'mongodb://localhost')
|
|
||||||
replicaset = config.GetString('mongodb-replicaset', '')
|
|
||||||
if replicaset:
|
|
||||||
self.mongo = pymongo.MongoClient(url, replicaset=replicaset)
|
|
||||||
else:
|
|
||||||
self.mongo = pymongo.MongoClient(url)
|
|
||||||
db = (urlparse.urlparse(url).path or '/test')[1:]
|
|
||||||
self.mongodb = self.mongo[db]
|
|
||||||
|
|
||||||
self.notify.setInfo(True)
|
self.notify.setInfo(True)
|
||||||
|
|
||||||
def handleConnected(self):
|
def handleConnected(self):
|
||||||
|
@ -51,4 +39,5 @@ class ToontownUberRepository(ToontownInternalRepository):
|
||||||
self.friendsManager = simbase.air.generateGlobalObject(OTP_DO_ID_TTS_FRIENDS_MANAGER, 'TTSFriendsManager')
|
self.friendsManager = simbase.air.generateGlobalObject(OTP_DO_ID_TTS_FRIENDS_MANAGER, 'TTSFriendsManager')
|
||||||
self.globalPartyMgr = simbase.air.generateGlobalObject(OTP_DO_ID_GLOBAL_PARTY_MANAGER, 'GlobalPartyManager')
|
self.globalPartyMgr = simbase.air.generateGlobalObject(OTP_DO_ID_GLOBAL_PARTY_MANAGER, 'GlobalPartyManager')
|
||||||
self.groupManager = simbase.air.generateGlobalObject(OPT_DO_ID_GROUP_MANAGER, 'GroupManager')
|
self.groupManager = simbase.air.generateGlobalObject(OPT_DO_ID_GROUP_MANAGER, 'GroupManager')
|
||||||
|
self.topToonsMgr = DistributedTopToonsManagerUD(self)
|
||||||
|
|
||||||
|
|
|
@ -13,3 +13,7 @@ CAT_VP = 2048
|
||||||
CAT_CFO = 4096
|
CAT_CFO = 4096
|
||||||
CAT_CJ = 8192
|
CAT_CJ = 8192
|
||||||
CAT_CEO = 16384
|
CAT_CEO = 16384
|
||||||
|
|
||||||
|
_CAT_BEGIN = CAT_COGS
|
||||||
|
_CAT_END = CAT_CEO
|
||||||
|
_CAT_ALL = (_CAT_END << 1) - 1
|
Loading…
Reference in a new issue