def add_weapon_to_storage(self, weapon_id): """ adds weapon to storage @param weapon_id : id of the weapon to be added """ self.log.debug("%s add weapon %s", self, weapon_id) #if weapon is stackable, try to stack weapon = None if self.equipped_weapon_number == self.total_number_of_weapons: self.log.debug("%s weapon storage full", self) return False if self.session.db.get_weapon_stackable(weapon_id): stackable = [ w for w in self._weapon_storage if weapon_id == w.weapon_id ] #try to increase the number of weapons for one stackable weapon increased = False for weapon in stackable: try: weapon.increase_number_of_weapons(1) increased = True break except SetStackableWeaponNumberError: continue if not increased: weapon = StackableWeapon(self.session, weapon_id) else: weapon = Weapon(self.session, weapon_id) if weapon: self._weapon_storage.append(weapon) weapon.add_weapon_fired_listener( Callback(self._remove_from_fireable, weapon)) weapon.add_attack_ready_listener( Callback(self._add_to_fireable, weapon)) weapon.add_weapon_fired_listener( self._increase_fired_weapons_number) self._fireable.append(weapon) self.equipped_weapon_number += 1 self.on_storage_modified() # will update the range return True
def add_weapon_to_storage(self, weapon_id): """ adds weapon to storage @param weapon_id : id of the weapon to be added """ self.log.debug("%s add weapon %s", self, weapon_id) #if weapon is stackable, try to stack weapon = None if self.equipped_weapon_number == self.total_number_of_weapons: self.log.debug("%s weapon storage full", self) return False if self.session.db.get_weapon_stackable(weapon_id): stackable = [w for w in self._weapon_storage if weapon_id == w.weapon_id] #try to increase the number of weapons for one stackable weapon increased = False for weapon in stackable: try: weapon.increase_number_of_weapons(1) increased = True break except SetStackableWeaponNumberError: continue if not increased: weapon = StackableWeapon(self.session, weapon_id) else: weapon = Weapon(self.session, weapon_id) if weapon: self._weapon_storage.append(weapon) weapon.add_weapon_fired_listener(Callback(self._remove_from_fireable, weapon)) weapon.add_attack_ready_listener(Callback(self._add_to_fireable, weapon)) weapon.add_weapon_fired_listener(self._increase_fired_weapons_number) self._fireable.append(weapon) self.equipped_weapon_number += 1 self.on_storage_modified() # will update the range return True
def load(self, db, worldid): super(WeaponHolder, self).load(db, worldid) self.__init() weapons = db("SELECT weapon_id, number, remaining_ticks FROM weapon_storage WHERE owner_id = ?", worldid) for weapon_id, number, ticks in weapons: # create weapon and add to storage manually if self.session.db.get_weapon_stackable(weapon_id): weapon = StackableWeapon(self.session, weapon_id) weapon.set_number_of_weapons(number) else: weapon = Weapon(self.session, weapon_id) self._weapon_storage.append(weapon) # if weapon not ready add scheduled call and remove from fireable if ticks: weapon.attack_ready = False Scheduler().add_new_object(weapon.make_attack_ready, weapon, ticks) else: self._fireable.append(weapon) weapon.add_weapon_fired_listener(Callback(self._remove_from_fireable, weapon)) weapon.add_attack_ready_listener(Callback(self._add_to_fireable, weapon)) weapon.add_weapon_fired_listener(self._increase_fired_weapons_number) self.on_storage_modified() # load target after all objects have been loaded Scheduler().add_new_object(Callback(self.load_target, db), self, run_in=0) self.log.debug("%s weapon storage after load: %s", self, self._weapon_storage)
def load(self, db, worldid): super(WeaponHolder, self).load(db, worldid) self.__init() weapons = db( "SELECT weapon_id, number, remaining_ticks FROM weapon_storage WHERE owner_id = ?", worldid) for weapon_id, number, ticks in weapons: # create weapon and add to storage manually if self.session.db.get_weapon_stackable(weapon_id): weapon = StackableWeapon(self.session, weapon_id) weapon.set_number_of_weapons(number) else: weapon = Weapon(self.session, weapon_id) self._weapon_storage.append(weapon) # if weapon not ready add scheduled call and remove from fireable if ticks: weapon.attack_ready = False Scheduler().add_new_object(weapon.make_attack_ready, weapon, ticks) else: self._fireable.append(weapon) weapon.add_weapon_fired_listener( Callback(self._remove_from_fireable, weapon)) weapon.add_attack_ready_listener( Callback(self._add_to_fireable, weapon)) weapon.add_weapon_fired_listener( self._increase_fired_weapons_number) self.on_storage_modified() # load target after all objects have been loaded Scheduler().add_new_object(Callback(self.load_target, db), self, run_in=0) self.log.debug("%s weapon storage after load: %s", self, self._weapon_storage)