mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-27 21:52:25 -06:00
156 lines
6.9 KiB
Python
156 lines
6.9 KiB
Python
from toontown.estate.DistributedFurnitureItemAI import DistributedFurnitureItemAI
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.catalog import CatalogItem
|
|
from toontown.catalog.CatalogInvalidItem import CatalogInvalidItem
|
|
from toontown.catalog.CatalogItemList import CatalogItemList
|
|
from direct.distributed.ClockDelta import *
|
|
import time
|
|
import PhoneGlobals
|
|
|
|
|
|
class DistributedPhoneAI(DistributedFurnitureItemAI):
|
|
notify = directNotify.newCategory('DistributedPhoneAI')
|
|
|
|
def __init__(self, air, furnitureMgr, item):
|
|
DistributedFurnitureItemAI.__init__(self, air, furnitureMgr, item)
|
|
|
|
self.avId = None
|
|
|
|
def getInitialScale(self):
|
|
return (0.8, 0.8, 0.8)
|
|
|
|
def setNewScale(self, sx, sy, sz):
|
|
if sx + sy + sz < 5:
|
|
return
|
|
self.sendUpdate('setInitialScale', [sx, sy, sz])
|
|
|
|
def avatarEnter(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.avId:
|
|
if self.avId == avId:
|
|
self.air.writeServerEvent('suspicious', avId, 'Tried to use a phone twice!')
|
|
return
|
|
self.sendUpdateToAvatarId(avId, 'freeAvatar', [])
|
|
return
|
|
|
|
av = self.air.doId2do.get(avId)
|
|
if not av:
|
|
return
|
|
|
|
if not av.houseId:
|
|
self.d_setMovie(PhoneGlobals.PHONE_MOVIE_NO_HOUSE, avId, globalClockDelta.getRealNetworkTime(bits=32))
|
|
taskMgr.doMethodLater(1, self.__resetMovie, 'resetMovie-%d' % self.getDoId(), extraArgs=[])
|
|
return
|
|
|
|
if len(av.monthlyCatalog) == 0 and len(av.weeklyCatalog) == 0 and len(av.backCatalog) == 0:
|
|
self.d_setMovie(PhoneGlobals.PHONE_MOVIE_EMPTY, avId, globalClockDelta.getRealNetworkTime(bits=32))
|
|
taskMgr.doMethodLater(1, self.__resetMovie, 'resetMovie-%d' % self.getDoId(), extraArgs=[])
|
|
return
|
|
|
|
self.air.questManager.toonUsedPhone(avId)
|
|
self.avId = avId
|
|
self.d_setMovie(PhoneGlobals.PHONE_MOVIE_PICKUP, avId, globalClockDelta.getRealNetworkTime(bits=32))
|
|
|
|
house = self.air.doId2do.get(av.houseId)
|
|
if house:
|
|
numItems = len(house.interiorItems) + len(house.atticItems) + len(house.atticWallpaper) + len(house.atticWindows) + len (house.interiorWallpaper) + len(house.interiorWindows)
|
|
self.sendUpdateToAvatarId(avId, 'setLimits', [numItems])
|
|
else:
|
|
self.air.dbInterface.queryObject(self.air.dbId, av.houseId, self.__gotHouse)
|
|
|
|
av.b_setCatalogNotify(ToontownGlobals.NoItems, av.mailboxNotify)
|
|
|
|
def __gotHouse(self, dclass, fields):
|
|
if dclass != self.air.dclassesByName['DistributedHouseAI']:
|
|
return
|
|
|
|
numItems = len(CatalogItemList(fields['setInteriorItems'][0], store=CatalogItem.Customization)) + len(CatalogItemList(fields['setAtticItems'][0], store=CatalogItem.Customization)) + len(CatalogItemList(fields['setAtticWallpaper'][0], store=CatalogItem.Customization)) + len(CatalogItemList(fields['setAtticWindows'][0], store=CatalogItem.Customization)) + len(CatalogItemList(fields['setInteriorWallpaper'][0], store=CatalogItem.Customization)) + len(CatalogItemList(fields['setInteriorWindows'][0], store=CatalogItem.Customization))
|
|
self.sendUpdateToAvatarId(fields['setAvatarId'][0], 'setLimits', [numItems])
|
|
|
|
def avatarExit(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId != self.avId:
|
|
self.air.writeServerEvent('suspicious', avId, 'Tried to exit a phone they weren\'t using!')
|
|
return
|
|
|
|
self.avId = None
|
|
self.d_setMovie(PhoneGlobals.PHONE_MOVIE_HANGUP, avId, globalClockDelta.getRealNetworkTime(bits=32))
|
|
taskMgr.doMethodLater(1, self.__resetMovie, 'resetMovie-%d' % self.getDoId(), extraArgs=[])
|
|
|
|
def d_setMovie(self, mode, avId, time):
|
|
self.sendUpdate('setMovie', [mode, avId, time])
|
|
|
|
def __resetMovie(self):
|
|
self.d_setMovie(PhoneGlobals.PHONE_MOVIE_CLEAR, 0, globalClockDelta.getRealNetworkTime(bits=32))
|
|
|
|
def requestPurchaseMessage(self, context, item, optional):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId != self.avId:
|
|
self.air.writeServerEvent('suspicious', avId, 'Tried to purchase while not using the phone!')
|
|
return
|
|
|
|
av = self.air.doId2do.get(avId)
|
|
if not av:
|
|
self.air.writeServerEvent('suspicious', avId, 'Used phone from other shard!')
|
|
return
|
|
|
|
item = CatalogItem.getItem(item)
|
|
if isinstance(item, CatalogInvalidItem):
|
|
self.air.writeServerEvent('suspicious', avId, 'Tried to purchase invalid catalog item.')
|
|
return
|
|
if item.loyaltyRequirement():
|
|
self.air.writeServerEvent('suspicious', avId, 'Tried to purchase an unimplemented loyalty item!')
|
|
return
|
|
if item in av.backCatalog:
|
|
price = item.getPrice(CatalogItem.CatalogTypeBackorder)
|
|
elif item in av.weeklyCatalog or item in av.monthlyCatalog:
|
|
price = item.getPrice(0)
|
|
else:
|
|
return
|
|
|
|
def _getEmblemPrices():
|
|
if config.GetBool('catalog-emblems-OR', False):
|
|
ep = list(item.getEmblemPrices())
|
|
if len(ep) != 2:
|
|
return []
|
|
if all(ep):
|
|
ep[payMethod] = 0
|
|
else:
|
|
ep = item.getEmblemPrices()
|
|
return ep
|
|
|
|
def charge():
|
|
ep = _getEmblemPrices()
|
|
if ep:
|
|
av.subtractEmblems(ep)
|
|
av.takeMoney(item.getPrice(priceType))
|
|
|
|
if item.getDeliveryTime():
|
|
if len(av.onOrder) > 25:
|
|
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, ToontownGlobals.P_OnOrderListFull])
|
|
return
|
|
|
|
if len(av.mailboxContents) + len(av.onOrder) >= ToontownGlobals.MaxMailboxContents:
|
|
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, ToontownGlobals.P_MailboxFull])
|
|
|
|
if not av.takeMoney(price):
|
|
return
|
|
|
|
item.deliveryDate = int(time.time()/60) + item.getDeliveryTime()
|
|
av.onOrder.append(item)
|
|
av.b_setDeliverySchedule(av.onOrder)
|
|
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, ToontownGlobals.P_ItemOnOrder])
|
|
taskMgr.doMethodLater(0.2, self.sendUpdateToAvatarId, 'purchaseItemComplete-%d' % self.getDoId(), extraArgs=[avId, 'purchaseItemComplete', []])
|
|
else:
|
|
if not av.takeMoney(price):
|
|
return
|
|
|
|
resp = item.recordPurchase(av, optional)
|
|
if resp < 0:
|
|
av.addMoney(price)
|
|
|
|
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, resp])
|
|
taskMgr.doMethodLater(0.2, self.sendUpdateToAvatarId, 'purchaseItemComplete-%d' % self.getDoId(), extraArgs=[avId, 'purchaseItemComplete', []])
|
|
|
|
def requestGiftPurchaseMessage(self, context, avId, item, optional):
|
|
pass # TODO
|