136 lines
4.3 KiB
Python
136 lines
4.3 KiB
Python
from direct.showbase import GarbageReport
|
|
from otp.ai.AIBaseGlobal import *
|
|
from otp.avatar import DistributedAvatarAI
|
|
from otp.avatar import PlayerBase
|
|
from otp.distributed.ClsendTracker import ClsendTracker
|
|
from otp.otpbase import OTPGlobals
|
|
|
|
class DistributedPlayerAI(DistributedAvatarAI.DistributedAvatarAI, PlayerBase.PlayerBase, ClsendTracker):
|
|
|
|
def __init__(self, air):
|
|
DistributedAvatarAI.DistributedAvatarAI.__init__(self, air)
|
|
PlayerBase.PlayerBase.__init__(self)
|
|
ClsendTracker.__init__(self)
|
|
self.friendsList = []
|
|
self.DISLname = ''
|
|
self.DISLid = 0
|
|
self.accessLevel = 0
|
|
|
|
if __dev__:
|
|
|
|
def generate(self):
|
|
self._sentExitServerEvent = False
|
|
DistributedAvatarAI.DistributedAvatarAI.generate(self)
|
|
|
|
def announceGenerate(self):
|
|
DistributedAvatarAI.DistributedAvatarAI.announceGenerate(self)
|
|
ClsendTracker.announceGenerate(self)
|
|
self._doPlayerEnter()
|
|
|
|
def _announceArrival(self):
|
|
self.sendUpdate('arrivedOnDistrict', [self.air.districtId])
|
|
|
|
def _announceExit(self):
|
|
self.sendUpdate('arrivedOnDistrict', [0])
|
|
|
|
def _sendExitServerEvent(self):
|
|
self.air.writeServerEvent('avatarExit', self.doId, '')
|
|
if __dev__:
|
|
self._sentExitServerEvent = True
|
|
|
|
def delete(self):
|
|
if __dev__:
|
|
del self._sentExitServerEvent
|
|
self._doPlayerExit()
|
|
ClsendTracker.destroy(self)
|
|
if __dev__:
|
|
GarbageReport.checkForGarbageLeaks()
|
|
DistributedAvatarAI.DistributedAvatarAI.delete(self)
|
|
|
|
def isPlayerControlled(self):
|
|
return True
|
|
|
|
def setLocation(self, parentId, zoneId):
|
|
DistributedAvatarAI.DistributedAvatarAI.setLocation(self, parentId, zoneId)
|
|
if self.isPlayerControlled():
|
|
if not self.air._isValidPlayerLocation(parentId, zoneId):
|
|
self.notify.info('booting player %s for doing setLocation to (%s, %s)' % (self.doId, parentId, zoneId))
|
|
self.air.writeServerEvent('suspicious', self.doId, 'invalid setLocation: (%s, %s)' % (parentId, zoneId))
|
|
self.requestDelete()
|
|
|
|
def _doPlayerEnter(self):
|
|
self.incrementPopulation()
|
|
self._announceArrival()
|
|
|
|
def _doPlayerExit(self):
|
|
self._announceExit()
|
|
self.decrementPopulation()
|
|
|
|
def incrementPopulation(self):
|
|
self.air.incrementPopulation()
|
|
|
|
def decrementPopulation(self):
|
|
simbase.air.decrementPopulation()
|
|
|
|
def b_setChat(self, chatString, chatFlags):
|
|
self.setChat(chatString, chatFlags)
|
|
self.d_setChat(chatString, chatFlags)
|
|
|
|
def d_setChat(self, chatString, chatFlags):
|
|
self.sendUpdate('setChat', [chatString, chatFlags])
|
|
|
|
def setChat(self, chatString, chatFlags):
|
|
pass
|
|
|
|
def d_setMaxHp(self, maxHp):
|
|
DistributedAvatarAI.DistributedAvatarAI.d_setMaxHp(self, maxHp)
|
|
self.air.writeServerEvent('setMaxHp', self.doId, '%s' % maxHp)
|
|
|
|
def d_setSystemMessage(self, aboutId, chatString):
|
|
self.sendUpdate('setSystemMessage', [aboutId, chatString])
|
|
|
|
def d_setCommonChatFlags(self, flags):
|
|
self.sendUpdate('setCommonChatFlags', [flags])
|
|
|
|
def setCommonChatFlags(self, flags):
|
|
pass
|
|
|
|
def d_friendsNotify(self, avId, status):
|
|
self.sendUpdate('friendsNotify', [avId, status])
|
|
|
|
def friendsNotify(self, avId, status):
|
|
pass
|
|
|
|
def setAccountName(self, accountName):
|
|
self.accountName = accountName
|
|
|
|
def getAccountName(self):
|
|
return self.accountName
|
|
|
|
def setDISLid(self, id):
|
|
self.DISLid = id
|
|
|
|
def setAccessLevel(self, accessLevel):
|
|
self.accessLevel = accessLevel
|
|
|
|
def getAccessLevel(self):
|
|
return self.accessLevel
|
|
|
|
def d_setFriendsList(self, friendsList):
|
|
self.sendUpdate('setFriendsList', [friendsList])
|
|
|
|
def setFriendsList(self, friendsList):
|
|
self.friendsList = friendsList
|
|
self.notify.debug('setting friends list to %s' % self.friendsList)
|
|
|
|
def getFriendsList(self):
|
|
return self.friendsList
|
|
|
|
def extendFriendsList(self, friendId, friendCode):
|
|
for i in range(len(self.friendsList)):
|
|
friendPair = self.friendsList[i]
|
|
if friendPair[0] == friendId:
|
|
self.friendsList[i] = (friendId, friendCode)
|
|
return
|
|
|
|
self.friendsList.append((friendId, friendCode))
|