def setBackpackAmmo(self, gagIds, ammoList): if self.ammo == ammoList: return if len(self.backpack.gags.keys()) > 0: for index in range(len(gagIds)): gagId = gagIds[index] numOfThisGag = 0 for gag in self.backpack.gags.keys(): if type(self.backpack.gagMgr.getGagByName(GagGlobals.getGagByID(gagId))) == type(gag): numOfThisGag += 1 if numOfThisGag < 1: self.backpack.resetGags() break for index in range(len(ammoList)): amt = ammoList[index] gagId = gagIds[index] if amt < 0: amt = 0 self.backpack.setSupply(amt, GagGlobals.getGagByID(gagId)) self.ammo = ammoList self.gagIds = gagIds if self.setupGags == False: self.d_setBackpackAmmo(gagIds, ammoList)
def toonHitByPie(self, avId, gag_id): obj = self.air.doId2do.get(avId, None) hp = self.gagMgr.getGagByName(GagGlobals.getGagByID(gag_id)).getHealth() if obj: if obj.getHealth() < obj.getMaxHealth() and not obj.isDead(): obj.toonUp(hp) return
def gagRelease(self, gag_id): supply = self.backpack.getSupply(GagGlobals.getGagByID(gag_id)) amt = supply - 1 if amt < 0: self.ejectSelf() return self.b_setGagAmmo(gag_id, amt)
def hitByGag(self, gagId): avatar = self.air.doId2do.get(self.air.getAvatarIdFromSender(), None) gagName = GagGlobals.getGagByID(gagId) data = GagGlobals.getGagData(gagId) dmg = data.get('damage') track = GagGlobals.getTrackOfGag(gagId, getId=True) if self.canGetHit(): self.b_setHealth(self.getHealth() - dmg) Sequence(Func(self.d_announceHealth, 0, dmg), Wait(self.showComboDamageTime), Func(self.__showComboLabel)).start() self.__handleCombos(avatar.doId, gagName) if self.isDead(): if track == GagType.THROW or gagName == CIGlobals.TNT: self.b_setAnimState('pie', 0) elif track == GagType.DROP: majorDrops = [ CIGlobals.GrandPiano, CIGlobals.Safe, CIGlobals.BigWeight ] if gagName in majorDrops: self.b_setAnimState('drop', 0) else: self.b_setAnimState('drop-react', 0) elif track == GagType.SQUIRT or track == GagType.SOUND: if gagName == CIGlobals.StormCloud: self.b_setAnimState('soak', 0) else: self.b_setAnimState('squirt-small', 0) avatar.questManager.cogDefeated(self) else: # I've been hit! Take appropriate actions. self.handleToonThreat(avatar, True)
def setLabel(self, labelId): if labelId == 0: self.gagModel = loader.loadModel( 'phase_4/models/props/icecream.bam') self.gagModel.reparentTo(self.gagNode) self.gagModel.find('**/p1_2').clearBillboard() self.gagModel.setScale(0.6) self.gagModel.setPos(0, -0.1, -0.1 - 0.6) elif labelId == 1: purchaseModels = loader.loadModel( 'phase_4/models/gui/purchase_gui.bam') self.gagModel = purchaseModels.find('**/Jar') self.gagModel.reparentTo(self.gagNode) self.gagModel.setScale(3.0) self.gagModel.setPos(0, -0.1, 0) purchaseModels.removeNode() else: gagId = labelId - 2 iconName = GagGlobals.InventoryIconByName.get( GagGlobals.getGagByID(gagId)) invModel = loader.loadModel( 'phase_3.5/models/gui/inventory_icons.bam').find('**/%s' % iconName) if invModel: self.gagModel = invModel self.gagModel.reparentTo(self.gagNode) self.gagModel.setScale(13.0) self.gagModel.setPos(0, -0.1, 0) else: self.notify.warning('Failed to find gag label %s.' % (str(labelId)))
def addGag(self, gagId, curSupply=0, maxSupply=0): if not gagId in self.gags.keys(): gagName = GagGlobals.getGagByID(gagId) if not gagName is None: gag = self.gagManager.getGagByName(gagName) gag.setAvatar(self.avatar) self.gags.update({gagId: [gag, curSupply, maxSupply]})
def buildAmmoList(self, gagIds): ammoList = [] for index in range(len(gagIds)): gagId = gagIds[index] amt = self.backpack.getSupply(GagGlobals.getGagByID(gagId)) ammoList.append(amt) return ammoList
def confirmPurchase(self): ammoList = [] if not hasattr(self.originalSupply, 'keys'): gagIds = [] else: gagIds = self.originalSupply.keys() for gagId in gagIds: ammoList.append(base.localAvatar.getBackpack().getSupply(GagGlobals.getGagByID(gagId))) self.distShop.sendUpdate('confirmPurchase', [gagIds, ammoList, base.localAvatar.getMoney()]) Shop.confirmPurchase(self)
def confirmPurchase(self): ammoList = [] if not hasattr(self.originalSupply, 'keys'): gagIds = [] else: gagIds = self.originalSupply.keys() for gagId in gagIds: ammoList.append(base.localAvatar.getBackpack().getSupply(GagGlobals.getGagByID(gagId))) self.distShop.sendUpdate('confirmPurchase', [gagIds, ammoList, base.localAvatar.getMoney()]) Shop.confirmPurchase(self)
def setBackpackAmmo(self, gagIds, ammoList): if -1 in ammoList: return else: self.gagBPData = [gagIds, ammoList] if not self.initAmmo: self.initAmmo = ammoList self.initGagIds = gagIds else: self.initAmmo = None self.initGagIds = None bpReset = False if len(self.backpack.gags.keys()) > 0: for index in range(len(gagIds)): gagId = gagIds[index] numOfThisGag = 0 for gag in self.backpack.gags.keys(): if type(self.backpack.gagMgr.getGagByName(GagGlobals.getGagByID(gagId))) == type(gag): numOfThisGag += 1 if numOfThisGag < 1: self.backpack.resetGags() bpReset = True break for index in range(len(ammoList)): amt = ammoList[index] gagId = gagIds[index] self.backpack.setSupply(amt, GagGlobals.getGagByID(gagId)) if self.backpack.gagGUI: if bpReset: self.disablePies() self.enablePies(1) self.backpack.gagGUI.update() return
def d_setGrab(self, avId): self.sendUpdate('setGrab', [avId]) avatar = self.air.doId2do.get(avId) backpack = avatar.backpack track = GagGlobals.getTrackOfGag(self.gagId) availableGags = [] restockGags = {} if not self.loadoutOnly: trackGags = GagGlobals.TrackGagNamesByTrackName.get(GagGlobals.TrackNameById.get(GagGlobals.Type2TrackName.get(track))) # Get the gagids of gags in this gag track. for trackGag in trackGags: gagId = GagGlobals.getIDByName(trackGag) if backpack.hasGag(gagId): availableGags.append(gagId) # The strongest gags should be first. availableGags.reverse() else: loadout = backpack.getLoadout() for gagId in loadout: if GagGlobals.getTrackOfGag(gagId) == track: availableGags.append(gagId) restockLeft = int(self.maxRestock) for gagId in availableGags: if restockLeft <= 0: break supply = backpack.getSupply(gagId) maxAmount = backpack.getMaxSupply(gagId) if supply < maxAmount: giveAmount = maxAmount - backpack.getSupply(gagId) if restockLeft < giveAmount: giveAmount = restockLeft restockGags[gagId] = supply + giveAmount restockLeft -= giveAmount print 'Requesting to give %s %ss.' % (str(restockGags[gagId]), GagGlobals.getGagByID(gagId)) for gagId in restockGags.keys(): avatar.b_setGagAmmo(gagId, restockGags.get(gagId))
def announceGenerate(self): DistributedAvatarAI.announceGenerate(self) DistributedSmoothNodeAI.announceGenerate(self) if self.parentId != self.getDefaultShard(): self.b_setDefaultShard(self.parentId) if self.__class__.__name__ == "DistributedToonAI": # TEMPORARY: Any new gags that we make have to be given to toons automatically. newGags = GagGlobals.gagIds.keys() currentGags = self.backpack.gags needsToUpdate = False for newGag in newGags: if not newGag in currentGags.keys(): print 'This player is missing {0}'.format(GagGlobals.getGagByID(newGag)) self.backpack.addGag(newGag) if not needsToUpdate: needsToUpdate = True if needsToUpdate: self.backpack.updateNetAmmo()
def suitHitByPie(self, avId, gag_id): obj = self.air.doId2do.get(avId, None) gag = self.gagMgr.getGagByName(GagGlobals.getGagByID(gag_id)) dmg = gag.getDamage() if obj: obj.b_setHealth(obj.getHealth() - dmg) if obj.getHealth() <= 0: if gag.getType() == GagType.THROW or gag.getName() == CIGlobals.TNT: obj.b_setAnimState('pie') elif gag.getType() == GagType.DROP: majorDrops = [CIGlobals.GrandPiano, CIGlobals.Safe, CIGlobals.BigWeight] if gag.getName() in majorDrops: obj.b_setAnimState('drop') else: obj.b_setAnimState('drop-react') elif gag.getType() == GagType.SQUIRT or gag.getType() == GagType.SOUND: if gag.getName() == CIGlobals.StormCloud: obj.b_setAnimState('soak') else: obj.b_setAnimState('squirt-small') if obj.__class__.__name__ == 'DistributedSuit': self.questManager.cogDefeated(obj) return
def setGagAmmo(self, gagId, ammo): if self.backpack.getGagByID(gagId): self.backpack.setSupply(ammo, GagGlobals.getGagByID(gagId))
def setGagAmmo(self, gagId, ammo): self.backpack.setSupply(ammo, GagGlobals.getGagByID(gagId)) if self.backpack.gagGUI: self.backpack.gagGUI.update()