'This will produce a new weapon from the rack,
assuming the caller hasn\'t already gotten one. When
doing so, the caller will get Tagged with the id
of this rack, to make sure they cannot keep
pulling weapons from it indefinitely.'

def produce_weapon(self, caller):

    rack_id = self.db.rack_id
    if caller.tags.get(rack_id, category='tutorial_world'):
        caller.msg(self.db.no_more_weapons_msg)
    else:
        prototype = random.choice(self.db.available_weapons)
        wpn = spawn(WEAPON_PROTOTYPES[prototype], prototype_parents=WEAPON_PROTOTYPES)[0]
        caller.tags.add(rack_id, category='tutorial_world')
        wpn.location = caller
        caller.msg((self.db.get_weapon_msg % wpn.key))
