makeatoon: pattern names work now
This commit is contained in:
parent
651de8ddd8
commit
e3b96e2cfd
4 changed files with 167 additions and 33 deletions
|
@ -536,4 +536,6 @@ dclass AstronLoginManager : DistributedObject {
|
|||
avatarListResponse(PotentialAvatar[]);
|
||||
createAvatar(blob, uint8) clsend;
|
||||
createAvatarResponse(uint32);
|
||||
setNamePattern(uint32, int16, uint8, int16, uint8, int16, uint8, int16, uint8) clsend;
|
||||
namePatternAnswer(uint32, uint8);
|
||||
};
|
||||
|
|
|
@ -13,6 +13,7 @@ class AstronLoginManager(DistributedObjectGlobal):
|
|||
def __init__(self, cr):
|
||||
DistributedObjectGlobal.__init__(self, cr)
|
||||
self.doneEvent = None
|
||||
self._callback = None
|
||||
|
||||
def handleRequestLogin(self, doneEvent):
|
||||
self.doneEvent = doneEvent
|
||||
|
@ -127,3 +128,10 @@ class AstronLoginManager(DistributedObjectGlobal):
|
|||
|
||||
def createAvatarResponse(self, avId):
|
||||
messenger.send('nameShopCreateAvatarDone', [avId])
|
||||
|
||||
def sendSetNamePattern(self, avId, p1, f1, p2, f2, p3, f3, p4, f4, callback):
|
||||
self._callback = callback
|
||||
self.sendUpdate('setNamePattern', [avId, p1, f1, p2, f2, p3, f3, p4, f4])
|
||||
|
||||
def namePatternAnswer(self, avId, status):
|
||||
self._callback(avId, status)
|
||||
|
|
|
@ -10,6 +10,7 @@ from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobal
|
|||
from direct.distributed.PyDatagram import *
|
||||
from toontown.toon.ToonDNA import ToonDNA
|
||||
from toontown.toonbase import TTLocalizer
|
||||
from toontown.makeatoon.NameGenerator import NameGenerator
|
||||
|
||||
class AccountDB:
|
||||
"""
|
||||
|
@ -345,11 +346,87 @@ class CreateAvatarOperation:
|
|||
del self.loginManager.account2operation[self.sender]
|
||||
|
||||
|
||||
class SetNamePatternOperation:
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory('SetNamePatternOperation')
|
||||
|
||||
def __init__(self, loginManager, sender):
|
||||
self.loginManager = loginManager
|
||||
self.sender = sender
|
||||
self.avId = None
|
||||
self.pattern = None
|
||||
|
||||
def start(self, avId, pattern):
|
||||
self.avId = avId
|
||||
self.pattern = pattern
|
||||
self.__handleRetrieveAccount()
|
||||
|
||||
def __handleRetrieveAccount(self):
|
||||
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, self.sender, self.__handleAccountRetrieved)
|
||||
|
||||
def __handleAccountRetrieved(self, dclass, fields):
|
||||
if dclass != self.loginManager.air.dclassesByName['AstronAccountUD']:
|
||||
# no uwu
|
||||
return
|
||||
|
||||
self.account = fields
|
||||
self.avList = self.account['ACCOUNT_AV_SET']
|
||||
self.avList = self.avList[:6]
|
||||
self.avList += [0] * (6 - len(self.avList))
|
||||
self.__handleRetrieveAvatar()
|
||||
|
||||
def __handleRetrieveAvatar(self):
|
||||
if self.avId and self.avId not in self.avList:
|
||||
# Main screen turn on.
|
||||
# It's you!
|
||||
return
|
||||
|
||||
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, self.avId, self.__handleAvatarRetrieved)
|
||||
|
||||
def __handleAvatarRetrieved(self, dclass, fields):
|
||||
if dclass != self.loginManager.air.dclassesByName['DistributedToonUD']:
|
||||
# How are you gentlemen?
|
||||
# All your base are belong to us
|
||||
return
|
||||
|
||||
if fields['WishNameState'][0] != 'OPEN':
|
||||
# You are on your way to destruction
|
||||
# What you say?
|
||||
return
|
||||
|
||||
self.__handleSetName()
|
||||
|
||||
def __handleSetName(self):
|
||||
parts = []
|
||||
for p, f in self.pattern:
|
||||
part = self.loginManager.nameGenerator.nameDictionary.get(p, ('', ''))[1]
|
||||
if f:
|
||||
part = part[:1].upper() + part[1:]
|
||||
else:
|
||||
part = part.lower()
|
||||
|
||||
parts.append(part)
|
||||
|
||||
parts[2] += parts.pop(3)
|
||||
while '' in parts:
|
||||
parts.remove('')
|
||||
|
||||
name = ' '.join(parts)
|
||||
|
||||
self.loginManager.air.dbInterface.updateObject(self.loginManager.air.dbId, self.avId, self.loginManager.air.dclassesByName['DistributedToonUD'],
|
||||
{'WishNameState': ('LOCKED',),
|
||||
'WishName': ('',),
|
||||
'setName': (name,)})
|
||||
|
||||
self.loginManager.sendUpdateToAccountId(self.sender, 'namePatternAnswer', [self.avId, 1])
|
||||
del self.loginManager.account2operation[self.sender]
|
||||
|
||||
|
||||
class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory('AstronLoginManagerUD')
|
||||
|
||||
def __init__(self, air):
|
||||
DistributedObjectGlobalUD.__init__(self, air)
|
||||
self.nameGenerator = None
|
||||
self.accountDb = None
|
||||
self.sender2loginOperation = {}
|
||||
self.account2operation = {}
|
||||
|
@ -357,6 +434,9 @@ class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
|||
def announceGenerate(self):
|
||||
DistributedObjectGlobalUD.announceGenerate(self)
|
||||
|
||||
# This is for processing name patterns.
|
||||
self.nameGenerator = NameGenerator()
|
||||
|
||||
# Instantiate the account database backend.
|
||||
# TODO: In the future, add more database interfaces & make this configurable.
|
||||
self.accountDb = DeveloperAccountDB(self)
|
||||
|
@ -402,3 +482,18 @@ class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
|||
newOperation = CreateAvatarOperation(self, sender)
|
||||
self.account2operation[sender] = newOperation
|
||||
newOperation.start(avDNA, avPosition)
|
||||
|
||||
def setNamePattern(self, avId, p1, f1, p2, f2, p3, f3, p4, f4):
|
||||
sender = self.air.getAccountIdFromSender()
|
||||
if not sender:
|
||||
# TODO KILL CONNECTION
|
||||
return
|
||||
|
||||
if sender in self.account2operation:
|
||||
# BAD!!!!
|
||||
return
|
||||
|
||||
newOperation = SetNamePatternOperation(self, sender)
|
||||
self.account2operation[sender] = newOperation
|
||||
newOperation.start(avId, [(p1, f1), (p2, f2),
|
||||
(p3, f3), (p4, f4)])
|
||||
|
|
|
@ -866,6 +866,14 @@ class NameShop(StateData.StateData):
|
|||
|
||||
def checkNamePattern(self):
|
||||
self.notify.debug('checkNamePattern')
|
||||
if base.cr.astronSupport:
|
||||
base.cr.astronLoginManager.sendSetNamePattern(self.avId,
|
||||
self.nameIndices[0], self.nameFlags[0],
|
||||
self.nameIndices[1], self.nameFlags[1],
|
||||
self.nameIndices[2], self.nameFlags[2],
|
||||
self.nameIndices[3], self.nameFlags[3],
|
||||
self.handleSetNamePatternAnswerMsg)
|
||||
else:
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint16(CLIENT_SET_NAME_PATTERN)
|
||||
datagram.addUint32(self.avId)
|
||||
|
@ -880,6 +888,7 @@ class NameShop(StateData.StateData):
|
|||
messenger.send('nameShopPost', [datagram])
|
||||
self.waitForServer()
|
||||
|
||||
if not config.GetBool('astron-support', True):
|
||||
def handleSetNamePatternAnswerMsg(self, di):
|
||||
self.notify.debug('handleSetNamePatternAnswerMsg')
|
||||
self.cleanupWaitForServer()
|
||||
|
@ -901,6 +910,26 @@ class NameShop(StateData.StateData):
|
|||
self.notify.debug('name pattern rejected')
|
||||
self.rejectName(TTLocalizer.NameError)
|
||||
return None
|
||||
else:
|
||||
def handleSetNamePatternAnswerMsg(self, newavId, returnCode):
|
||||
self.notify.debug('handleSetNamePatternAnswerMsg')
|
||||
self.cleanupWaitForServer()
|
||||
if newavId != self.avId:
|
||||
self.notify.debug("doid's don't match up!")
|
||||
self.rejectName(TTLocalizer.NameError)
|
||||
if returnCode == 1:
|
||||
style = self.toon.getStyle()
|
||||
avDNA = style.makeNetString()
|
||||
self.notify.debug('pattern name accepted')
|
||||
newPotAv = PotentialAvatar.PotentialAvatar(newavId, self.names, avDNA, self.index, 0)
|
||||
self.avList.append(newPotAv)
|
||||
self.doneStatus = 'done'
|
||||
self.storeSkipTutorialRequest()
|
||||
messenger.send(self.doneEvent)
|
||||
else:
|
||||
self.notify.debug('name pattern rejected')
|
||||
self.rejectName(TTLocalizer.NameError)
|
||||
return None
|
||||
|
||||
def _submitTypeANameAsPickAName(self):
|
||||
pnp = TTPickANamePattern(self.nameEntry.get(), self.toon.style.gender)
|
||||
|
|
Loading…
Reference in a new issue