toontown-just-works/toontown/estate/DistributedBankAI.py
2024-07-07 18:08:39 -05:00

76 lines
3.4 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from toontown.estate.DistributedFurnitureItemAI import DistributedFurnitureItemAI
from direct.distributed.ClockDelta import *
import BankGlobals
class DistributedBankAI(DistributedFurnitureItemAI):
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedBankAI")
def __init__(self, air, furnitureMgr, item):
DistributedFurnitureItemAI.__init__(self, air, furnitureMgr, item)
self.avId = None
self.movie = BankGlobals.BANK_MOVIE_CLEAR
def avatarEnter(self):
avId = self.air.getAvatarIdFromSender()
if not self.avId:
if not self.furnitureMgr.ownerId:
self.b_setMovie(BankGlobals.BANK_MOVIE_NO_OWNER, avId, globalClockDelta.getRealNetworkTime())
return
elif self.furnitureMgr.ownerId != avId:
self.b_setMovie(BankGlobals.BANK_MOVIE_NOT_OWNER, avId, globalClockDelta.getRealNetworkTime())
return
else:
self.avId = avId
self.b_setMovie(BankGlobals.BANK_MOVIE_GUI, avId, globalClockDelta.getRealNetworkTime())
return
else:
if avId == self.avId:
self.air.writeServerEvent('suspicious', avId=avId, issue='Tried to use bank while already using it!')
self.sendUpdateToAvatarId(avId, 'freeAvatar', [])
def freeAvatar(self):
pass
def setMovie(self, mode, avId, time):
self.movie = mode
if self.movie != BankGlobals.BANK_MOVIE_CLEAR:
taskMgr.doMethodLater(2.0, self.clearMovie, 'clear-movie-%d' % self.getDoId())
def clearMovie(self, task):
self.b_setMovie(BankGlobals.BANK_MOVIE_CLEAR, 0, globalClockDelta.getRealNetworkTime())
def b_setMovie(self, mode, avId, time):
self.setMovie(mode, avId, time)
self.d_setMovie(mode, avId, time)
def d_setMovie(self, mode, avId, time):
self.sendUpdate('setMovie', [mode, avId, time])
def transferMoney(self, amount):
avId = self.air.getAvatarIdFromSender()
if avId != self.avId:
self.air.writeServerEvent('suspicious', avId=avId, issue='Tried to transfer money while not using a bank!')
return
av = self.air.doId2do.get(avId)
if not av:
self.air.writeServerEvent('suspicious', avId=avId, issue='Tried to transfer money while not on the AI!')
return
if amount == 0: # No transfer needed.
self.b_setMovie(BankGlobals.BANK_MOVIE_NO_OP, avId, globalClockDelta.getRealNetworkTime())
elif amount > 0:
self.b_setMovie(BankGlobals.BANK_MOVIE_DEPOSIT, avId, globalClockDelta.getRealNetworkTime())
if av.money < amount:
self.air.writeServerEvent('suspicious', avId=avId, issue='Toon tried to deposit more money than they have!')
else:
av.b_setMoney(av.money - amount)
av.b_setBankMoney(av.bankMoney + amount)
else:
self.b_setMovie(BankGlobals.BANK_MOVIE_WITHDRAW, avId, globalClockDelta.getRealNetworkTime())
if av.bankMoney + amount < 0:
self.air.writeServerEvent('suspicious', avId=avId, issue='Toon tried to withdraw more money than they have!')
else:
av.b_setMoney(av.money - amount)
av.b_setBankMoney(av.bankMoney + amount)
self.avId = None