from direct.directnotify import DirectNotifyGlobal from direct.distributed.AstronInternalRepository import AstronInternalRepository from direct.distributed.PyDatagram import * from direct.distributed.MsgTypes import * from direct.showbase.PythonUtil import makeList # TODO: Remove Astron dependence. class OTPInternalRepository(AstronInternalRepository): notify = DirectNotifyGlobal.directNotify.newCategory('OTPInternalRepository') dbId = 4003 def __init__(self, baseChannel, serverId, dcFileNames, dcSuffix, connectMethod, threadedNet): AstronInternalRepository.__init__(self, baseChannel, serverId=serverId, dcFileNames=dcFileNames, dcSuffix=dcSuffix, connectMethod=connectMethod, threadedNet=threadedNet) def handleConnected(self): AstronInternalRepository.handleConnected(self) def getAccountIdFromSender(self): return (self.getMsgSender() >> 32) & 0xFFFFFFFF def getAvatarIdFromSender(self): return self.getMsgSender() & 0xFFFFFFFF def sendSetZone(self, distObj, zoneId): distObj.setLocation(distObj.parentId, zoneId) self.sendSetLocation(distObj, distObj.parentId, zoneId) def setAllowClientSend(self, avId, distObj, fieldNameList=[]): dg = PyDatagram() dg.addServerHeader(distObj.GetPuppetConnectionChannel(avId), self.ourChannel, CLIENTAGENT_SET_FIELDS_SENDABLE) fieldIds = [] for fieldName in fieldNameList: field = distObj.dclass.getFieldByName(fieldName) if field: fieldIds.append(field.getNumber()) dg.addUint32(distObj.getDoId()) dg.addUint16(len(fieldIds)) for fieldId in fieldIds: dg.addUint16(fieldId) self.send(dg) def _getMsgName(self, msgId): # TODO: Remove Astron dependence. return makeList(MsgId2Names.get(msgId, f'UNKNOWN MESSAGE: {msgId}'))[0]