Revert "Removed AccountDate and velvet rope"

This reverts commit d3a352f395.
This commit is contained in:
Daniel 2015-03-10 00:11:27 +02:00
parent d3a352f395
commit d7279b7778
13 changed files with 107 additions and 11 deletions

View file

@ -77,6 +77,7 @@ from toontown.shtiker import NewbiePurchaseManager/AI
from toontown.safezone import SafeZoneManager/AI from toontown.safezone import SafeZoneManager/AI
from toontown.tutorial import TutorialManager/AI from toontown.tutorial import TutorialManager/AI
from toontown.catalog import CatalogManager/AI from toontown.catalog import CatalogManager/AI
from toontown.catalog import AccountDate/AI
from toontown.safezone import DistributedTreasure/AI from toontown.safezone import DistributedTreasure/AI
from toontown.coghq import DistributedCashbotBossTreasure/AI from toontown.coghq import DistributedCashbotBossTreasure/AI
from toontown.building import DistributedTrophyMgr/AI from toontown.building import DistributedTrophyMgr/AI
@ -1535,6 +1536,11 @@ dclass CatalogManager : DistributedObject {
startCatalog() airecv clsend; startCatalog() airecv clsend;
}; };
dclass AccountDate : DistributedObject {
requestDate() airecv clsend;
requestDateResult(string);
};
dclass DistributedMyTest : DistributedObject { dclass DistributedMyTest : DistributedObject {
setMyTest(uint16) broadcast; setMyTest(uint16) broadcast;
}; };

View file

@ -2,7 +2,7 @@
from pandac.PandaModules import * from pandac.PandaModules import *
hashVal = 3328589302L hashVal = 2798365763L
from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot
@ -33,7 +33,7 @@ from toontown.fishing import DistributedFishingPond, DistributedFishingTarget, D
from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame
from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
from toontown.catalog import CatalogManager from toontown.catalog import CatalogManager, AccountDate
from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr
from toontown.rpc.AwardManager import AwardManager from toontown.rpc.AwardManager import AwardManager
from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity

View file

@ -1605,6 +1605,8 @@ class OTPClientRepository(ClientRepositoryBase):
return 0 return 0
elif paidStatus == 'FULL': elif paidStatus == 'FULL':
return OTPGlobals.AccessFull return OTPGlobals.AccessFull
elif paidStatus == 'VELVET':
return OTPGlobals.AccessVelvetRope
else: else:
return 0 return 0

View file

@ -376,6 +376,7 @@ ChatFeedback_PassedBlacklist = 32
ChatFeedback_Whitelist = 64 ChatFeedback_Whitelist = 64
ChatFeedback_OpenChat = 128 ChatFeedback_OpenChat = 128
AccessUnknown = 0 AccessUnknown = 0
AccessVelvetRope = 1
AccessFull = 2 AccessFull = 2
AccessInvalid = 3 AccessInvalid = 3
AvatarPendingCreate = -1 AvatarPendingCreate = -1

View file

@ -16,6 +16,7 @@ from toontown.ai.HolidayManagerAI import HolidayManagerAI
from toontown.ai.NewsManagerAI import NewsManagerAI from toontown.ai.NewsManagerAI import NewsManagerAI
from toontown.ai.QuestManagerAI import QuestManagerAI from toontown.ai.QuestManagerAI import QuestManagerAI
from toontown.ai import BankManagerAI from toontown.ai import BankManagerAI
from toontown.catalog.AccountDateAI import AccountDateAI
from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI
from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI
from toontown.catalog.CatalogManagerAI import CatalogManagerAI from toontown.catalog.CatalogManagerAI import CatalogManagerAI
@ -119,6 +120,8 @@ class ToontownAIRepository(ToontownInternalRepository):
self.holidayManager = HolidayManagerAI(self) self.holidayManager = HolidayManagerAI(self)
self.codeRedemptionMgr = TTCodeRedemptionMgrAI(self) self.codeRedemptionMgr = TTCodeRedemptionMgrAI(self)
self.codeRedemptionMgr.generateWithRequired(2) self.codeRedemptionMgr.generateWithRequired(2)
self.accountDateMgr = AccountDateAI(self)
self.accountDateMgr.generateWithRequired(2)
self.buildingQueryMgr = DistributedBuildingQueryMgrAI(self) self.buildingQueryMgr = DistributedBuildingQueryMgrAI(self)
self.buildingQueryMgr.generateWithRequired(2) self.buildingQueryMgr.generateWithRequired(2)
self.groupManager.generateWithRequired(2) self.groupManager.generateWithRequired(2)

View file

@ -0,0 +1,39 @@
from direct.distributed.DistributedObject import DistributedObject
from direct.directnotify.DirectNotifyGlobal import directNotify
from datetime import datetime
class AccountDate(DistributedObject):
neverDisable = 1
notify = directNotify.newCategory('AccountDate')
def __init__(self, cr):
DistributedObject.__init__(self, cr)
self.accountDays = 0
def announceGenerate(self):
DistributedObject.announceGenerate(self)
base.cr.accountDateMgr = self
taskMgr.doMethodLater(10, self.requestDate, 'request-task')
def delete(self):
if hasattr(base.cr, 'accountDateMgr'):
if base.cr.accountDateMgr is self:
del base.cr.accountDateMgr
DistributedObject.delete(self)
def getAccountDays(self):
return self.accountDays
def requestDate(self, task=None):
self.sendUpdate('requestDate')
if task is not None:
return task.done
def requestDateResult(self, result):
if result is None:
notify.warning('Invalid response from server.')
self.accountDays = 0
else:
date = datetime.strptime(result, "%a %b %d %H:%M:%S %Y")
self.accountDays = (datetime.now() - date).days

View file

@ -0,0 +1,23 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectAI import DistributedObjectAI
class AccountDateAI(DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory("AccountDateAI")
def announceGenerate(self):
DistributedObjectAI.announceGenerate(self)
def requestDate(self):
avId = self.air.getAvatarIdFromSender()
av = self.air.doId2do.get(avId)
if not av:
return
def callback(dclass, fields):
if dclass is not None and dclass == self.air.dclassesByName['AccountAI'] and fields.has_key('CREATED'):
self.sendUpdateToAvatarId(avId, 'requestDateResult', [fields.get('CREATED')])
else:
self.sendUpdateToAvatarId(avId, 'requestDateResult', [None])
self.air.dbInterface.queryObject(self.air.dbId, av.DISLid, callback)

View file

@ -5,6 +5,7 @@ from DistributedNPCToonBaseAI import *
from toontown.estate import BankGlobals from toontown.estate import BankGlobals
class DistributedNPCBankerAI(DistributedNPCToonBaseAI): class DistributedNPCBankerAI(DistributedNPCToonBaseAI):
FourthGagVelvetRopeBan = config.GetBool('want-ban-fourth-gag-velvet-rope', 0)
def __init__(self, air, npcId, questCallback = None, hq = 0): def __init__(self, air, npcId, questCallback = None, hq = 0):
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback) DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)

View file

@ -5,6 +5,7 @@ from DistributedNPCToonBaseAI import *
from toontown.quest import Quests from toontown.quest import Quests
class DistributedNPCToonAI(DistributedNPCToonBaseAI): class DistributedNPCToonAI(DistributedNPCToonBaseAI):
FourthGagVelvetRopeBan = config.GetBool('want-ban-fourth-gag-velvet-rope', 0)
def __init__(self, air, npcId, questCallback = None, hq = 0): def __init__(self, air, npcId, questCallback = None, hq = 0):
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback) DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)

View file

@ -474,7 +474,7 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
if oldTracks == 0 and oldLevels == 0: if oldTracks == 0 and oldLevels == 0:
self.notify.warning('reseting invalid inventory to MAX on toon: %s' % self.doId) self.notify.warning('reseting invalid inventory to MAX on toon: %s' % self.doId)
self.inventory.zeroInv() self.inventory.zeroInv()
self.inventory.maxOutInv(1) self.inventory.maxOutInv(1, 1)
else: else:
newInventory = InventoryBase.InventoryBase(self) newInventory = InventoryBase.InventoryBase(self)
oldList = emptyInv.makeFromNetStringForceSize(inventoryNetString, oldTracks, oldLevels) oldList = emptyInv.makeFromNetStringForceSize(inventoryNetString, oldTracks, oldLevels)
@ -488,9 +488,9 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
def getInventory(self): def getInventory(self):
return self.inventory.makeNetString() return self.inventory.makeNetString()
def doRestock(self, noUber = 1): def doRestock(self, noUber = 1, noPaid = 1):
self.inventory.zeroInv() self.inventory.zeroInv()
self.inventory.maxOutInv(noUber) self.inventory.maxOutInv(noUber, noPaid)
self.d_setInventory(self.inventory.makeNetString()) self.d_setInventory(self.inventory.makeNetString())
def setDefaultShard(self, shard): def setDefaultShard(self, shard):
@ -3703,7 +3703,11 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
if paidStatus == 'unpaid': if paidStatus == 'unpaid':
access = 1 access = 1
if access == OTPGlobals.AccessInvalid: if access == OTPGlobals.AccessInvalid:
access = OTPGlobals.AccessFull if not __dev__:
self.air.writeServerEvent('Setting Access', self.doId, 'setAccess not being sent by the OTP Server, changing access to unpaid')
access = OTPGlobals.AccessVelvetRope
elif __dev__:
access = OTPGlobals.AccessFull
self.setGameAccess(access) self.setGameAccess(access)
def setGameAccess(self, access): def setGameAccess(self, access):

View file

@ -241,13 +241,14 @@ class InventoryBase(DirectObject.DirectObject):
self.updateInventory(newInventory) self.updateInventory(newInventory)
return 1 return 1
def maxOutInv(self, filterUberGags = 0): def maxOutInv(self, filterUberGags = 0, filterPaidGags = 0):
unpaid = self.toon.getGameAccess() != ToontownGlobals.AccessFull unpaid = self.toon.getGameAccess() != ToontownGlobals.AccessFull
for track in xrange(len(Tracks)): for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track): if self.toon.hasTrackAccess(track):
for level in xrange(len(Levels[track])): for level in xrange(len(Levels[track])):
if level <= LAST_REGULAR_GAG_LEVEL or not filterUberGags: if level <= LAST_REGULAR_GAG_LEVEL or not filterUberGags:
self.addItem(track, level) if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
self.addItem(track, level)
addedAnything = 1 addedAnything = 1
while addedAnything: while addedAnything:
@ -258,10 +259,12 @@ class InventoryBase(DirectObject.DirectObject):
level = len(Levels[track]) - 1 level = len(Levels[track]) - 1
if level > LAST_REGULAR_GAG_LEVEL and filterUberGags: if level > LAST_REGULAR_GAG_LEVEL and filterUberGags:
level = LAST_REGULAR_GAG_LEVEL level = LAST_REGULAR_GAG_LEVEL
result = self.addItem(track, level) if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
result = self.addItem(track, level)
level -= 1 level -= 1
while result <= 0 and level >= 0: while result <= 0 and level >= 0:
result = self.addItem(track, level) if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
result = self.addItem(track, level)
level -= 1 level -= 1
if result > 0: if result > 0:

View file

@ -1852,7 +1852,7 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar):
self.inventory.updateTotalPropsText() self.inventory.updateTotalPropsText()
def getAccountDays(self): def getAccountDays(self):
return 0 return base.cr.accountDateMgr.getAccountDays()
def hasActiveBoardingGroup(self): def hasActiveBoardingGroup(self):
if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty: if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty:

View file

@ -102,6 +102,19 @@ UnpaidMaxSkills = [Levels[0][1] - 1,
Levels[6][1] - 1] Levels[6][1] - 1]
ExperienceCap = 300 ExperienceCap = 300
def gagIsPaidOnly(track, level):
return Levels[track][level] > UnpaidMaxSkills[track]
def gagIsVelvetRoped(track, level):
if level > 0:
if track in [4, 5]:
if level > 3:
return True
else:
return True
return False
MaxToonAcc = 95 MaxToonAcc = 95
StartingLevel = 0 StartingLevel = 0