Esempio n. 1
0
    def view(self, charname=None):
        if charname is None:
            redirect(url(controller='menu', action='index'))

        if not re.match(r'^[A-Za-z0-9_\'-]+$', charname):
            log.warn("Ignoring odd-looking character name '%s'" % charname)
            redirect(url(controller='menu', action='index'))

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            c.character = Character(charname)
            Session.add(c.character)
            Session.commit()

        c.equipped = {}
        c.form = {'faction': c.character.faction.name,
                  'spec': c.character.spec.name,
                  'advclass': c.character.advclass.name,
                  'ready': c.character.ready or None,
                  }
        for e in c.character.equipped:
            c.equipped[e.position()] = e
            c.form['equip_%d' % e.position()] = str(e.gear_id)

        log.debug(c.form)

        c.gear = Session.query(Gear).order_by(Gear.rank).order_by(Gear.pvp.desc()).all()
        c.spec = Session.query(Spec).order_by(Spec.id).all()
        c.factions = Session.query(Faction).order_by(Faction.id).all()
        c.advclasses = Session.query(AdvClass).order_by(AdvClass.name).all()

        self._advise()

        return render('char.html')
Esempio n. 2
0
    def view(self, faction):
        c.faction = Session.query(Faction).filter_by(name=faction).one()
        c.free_characters = Session.query(Character).filter_by(faction=c.faction, group=None).all()
        c.groups = Session.query(Group).filter_by(faction=c.faction).all()
        c.instances = Session.query(Instance).order_by(Instance.id.desc()).all()
        c.modes = Session.query(Mode).all()

        return render('plan.html')
Esempio n. 3
0
 def __init__(self, name=''):
     self.name = name
     self.faction = Session.query(Faction).filter_by(name='Republic').one()
     self.advclass = Session.query(AdvClass).order_by(AdvClass.id).first()
     self.spec = Session.query(Spec).order_by(Spec.id).first()
     self.ready = False
     for slot in Session.query(Slot).all():
         for i in xrange(0, slot.count):
             Session.add(Equipped(self, slot, i))
Esempio n. 4
0
    def advclass(self, charname=None):
        if charname is None:
            return

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            return

        c.character.advclass = Session.query(AdvClass).filter_by(name=request.params['value']).one()
        Session.commit()
Esempio n. 5
0
    def spec(self, charname=None):
        if charname is None:
            return

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            return

        c.character.spec = Session.query(Spec).filter_by(name=request.params['value']).one()
        Session.commit()
Esempio n. 6
0
    def faction(self, charname=None):
        if charname is None:
            return

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            return

        c.character.faction = Session.query(Faction).filter_by(name=request.params['value']).one()
        Session.commit()
        
        self._advise()

        return render('advice.html')
Esempio n. 7
0
    def _advise(self):
        bosses = {}
        c.faction = c.character.faction

        self._score()

        for instance in Session.query(Instance).all():
            data = bosses[instance.name(c.faction)] = {'useful_drops': {}, 'useful': 0, 'value': 0}
            for boss in instance.bosses:
                for drop in boss.drops:
                    utility = c.character.drop_utility(drop)
                    if utility > 0:
                        data['value'] = data['value'] + utility
                        data['useful'] = data['useful'] + 1

                        useful_bosses = data['useful_drops']
                        order = boss.order
                        useful_bosses.setdefault(order, []).append(drop)

        c.advice_rows = []

        for instance in sorted(bosses.values(), key=itemgetter('value'), reverse=True):
            first_in_instance = True
            for boss_order in sorted(instance['useful_drops'].keys()):
                boss = instance['useful_drops'][boss_order]
                first_in_boss = True
                for drop in boss:
                    row = {'drop': drop}
                    if first_in_instance:
                        row['instance_rowspan'] = instance['useful']
                    if first_in_boss:
                        row['boss_rowspan'] = len(boss)
                    first_in_instance = False
                    first_in_boss = False
                    c.advice_rows.append(row)
Esempio n. 8
0
 def gearscore(self):
     gearscore = 0.0
     total_weight = 0.0
     for equip in Session.query(Equipped).filter_by(character=self).all():
         if equip.gear.rank < 0:
             continue
         gearscore = gearscore + equip.gear.value() * equip.slot.weight
         total_weight = total_weight + equip.slot.weight
     return gearscore / total_weight
Esempio n. 9
0
    def ready(self, charname=None):
        if charname is None:
            return

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            return

        c.character.ready = bool(request.params['value'])
        Session.commit()
Esempio n. 10
0
    def equip(self, charname=None):
        if charname is None:
            return

        c.character = Session.query(Character).filter(Character.name == charname).first()
        if c.character is None:
            return

        position = int(request.params.get('slot', None))
        gear_id = int(request.params.get('gear', None))

        gear = Session.query(Gear).filter(Gear.id == gear_id).one()

        for e in c.character.equipped:
            if e.position() == position:
                e.gear = gear
                Session.commit()
                break

        self._advise()

        return render('advice.html')
Esempio n. 11
0
 def by_name(self, name):
     return Session.query(Slot).filter_by(name=name).first()
Esempio n. 12
0
 def get_all(self, character, slot):
     return Session.query(Equipped).filter_by(character=character, slot=slot).all()
Esempio n. 13
0
 def __init__(self, character=None, slot=None, index=0):
     self.character = character
     self.slot = slot
     self.index = index
     self.gear = Session.query(Gear).filter(Gear.rank == 0).first()
Esempio n. 14
0
 def index(self):
     c.chars = sorted(Session.query(Character).all(), key=lambda char: char.name.lower())
     
     return render('index.html')