Ejemplo n.º 1
0
class Equip:
    'Equipment class'

    #static
    equipLib = EquipLib()
    potLib = PotentialLib()
    scrollLib = ScrollLib()
    
    m_name = ''
    m_type = ''
    m_category = ''
    m_level = 0
    m_class = ''
    
    m_str = 0
    m_dex = 0
    m_int = 0
    m_luk = 0
    m_hp = 0
    m_mp = 0
    m_watt = 0
    m_matt = 0
    m_wdef = 0
    m_mdef = 0
    m_accuracy = 0
    m_avoid = 0
    
    m_boss = 0
    m_pdr = 0

    m_total_slot = 0
    m_remain_slot = 0
    m_remain_hammer = 0
    m_success = 0

    m_stars = 0

    m_pot = None
    m_bpot = None
    m_neb = None

    m_protect = False
    m_guardian = False
    m_safety = False

    m_setId = 0

    def __init__(self, name):
        self.m_name = name
        self.m_type = 'generic'
        self.m_class = 'all'

    def __getitem__(self, string):
        return {
            'str': self.m_str,
            'dex': self.m_dex,
            'int': self.m_int,
            'luk': self.m_luk,
            'hp': self.m_hp,
            'mp': self.m_mp,
            'watt': self.m_watt,
            'matt': self.m_matt,
            'wdef': self.m_wdef,
            'mdef': self.m_mdef,
            'accuracy': self.m_accuracy,
            'avoid': self.m_avoid,
            'boss': self.m_boss,
            'pdr': self.m_pdr,
            }[string]

    def __setitem__(self, string, value):
        if string == 'str':
            self.m_str = value
        elif string == 'dex':
            self.m_dex = value
        elif string == 'int':
            self.m_int = value
        elif string == 'luk':
            self.m_luk = value
        elif string == 'hp':
            self.m_hp = value
        elif string == 'mp':
            self.m_mp = value
        elif string == 'watt':
            self.m_watt = value
        elif string == 'matt':
            self.m_matt = value
        elif string == 'wdef':
            self.m_wdef = value
        elif string == 'mdef':
            self.m_mdef = value
        elif string == 'accuracy':
            self.m_accuracy = value
        elif string == 'avoid':
            self.m_avoid = value
        elif string == 'boss':
            self.m_boss =value
        elif string == 'pdr':
            self.m_pdr = value

    def showEquip(self):
        output = ''
        output += self.m_name
        if self.m_success > 0:
            output += ' (+' + str(self.m_success) + ')\n'
        else:
            output += '\n'
        if self.m_type in ['Weapon', 'Secondary']:
            output += 'Category: ' + self.m_type + ' (' + self.m_category + ')\n'
        else:
            output += 'Category: ' + self.m_type + '\n'
        output += 'REQ LVL: ' + str(self.m_level) + '\n'
        output += 'Class: ' + self.m_class + '\n'
        if self.m_str:
            output += 'STR: +' + str(self.m_str) + '\n'
        if self.m_dex:
            output += 'DEX: +' + str(self.m_dex) + '\n'
        if self.m_int:
            output += 'INT: +' + str(self.m_int) + '\n'
        if self.m_luk:
            output += 'LUK: +' + str(self.m_luk) + '\n'
        if self.m_hp:
            output += 'MaxHP: +' + str(self.m_hp) + '\n'
        if self.m_mp:
            output += 'MaxMP: +' + str(self.m_mp) + '\n'
        if self.m_watt:
            output += 'WEAPON ATT: ' + str(self.m_watt) + '\n'
        if self.m_matt:
            output += 'MAGIC ATT: ' + str(self.m_matt) + '\n'
        if self.m_wdef:
            output += 'WEAPON DEF: ' + str(self.m_wdef) + '\n'
        if self.m_mdef:
            output += 'MAGIC DEF: ' + str(self.m_mdef) + '\n'
        if self.m_accuracy:
            output += 'ACCURACY: +' + str(self.m_accuracy) + '\n'
        if self.m_avoid:
            output += 'AVOIDABILITY: +' + str(self.m_avoid) + '\n'
        if self.m_boss:
            output += 'Boss Damage: +' + str(int(self.m_boss*100)) + '%\n'
        if self.m_pdr:
            output += 'Ignore Enemy Defense: +' + str(int(self.m_pdr*100)) + '%\n'
        output += 'NUMBER OF UPGRADES AVAILABLE: ' + str(self.m_remain_slot) + '\n'
        output += 'NUMBER OF HAMMER APPLIED: ' + str(self.m_remain_hammer) + '\n\n'
        if self.m_pot:
            output += self.m_pot.showPot()
        if self.m_setId:
            output += EquipSetLib.showSetEffect(self.m_setId)
        subScrollInfo = ''
        if self.m_protect:
            subScrollInfo += 'Protect Scroll in effect.\n'
        if self.m_guardian:
            subScrollInfo += 'Guardian Scroll in effect.\n'
        if self.m_safety:
            subScrollInfo += 'Safety Scroll in effect.\n'
        if subScrollInfo != '':
            output += '----\n'
            output += subScrollInfo
        return output

        
    def setClean(self):
        equip = Equip.equipLib.getEquip(self.m_name)
        if equip is None:
            return False
        self.m_type = equip['type']
        if equip['type'] in ['Weapon', 'Secondary', 'Emblem']:
            self.m_category = equip['category']
        self.m_level = equip['level']
        self.m_class = equip['class']
        self.m_str = equip['str']
        self.m_dex = equip['dex']
        self.m_int = equip['int']
        self.m_luk = equip['luk']
        self.m_hp = equip['hp']
        self.m_mp = equip['mp']
        self.m_watt = equip['watt']
        self.m_matt = equip['matt']
        self.m_wdef = equip['wdef']
        self.m_mdef = equip['mdef']
        self.m_accuracy = equip['accuracy']
        self.m_avoid = equip['avoid']
        self.m_boss = equip['boss']
        self.m_pdr = equip['pdr']
        self.m_total_slot = equip['slot']
        self.m_remain_slot = equip['slot']
        if equip['slot'] == 0:
            self.m_remain_hammer = 0
        else:
            self.m_remain_hammer = 2
        self.m_success = 0
        self.m_stars = 0
        self.m_setId = equip['setId']
        self.m_pot = Potential(self)
        self.m_bpot = None
        self.m_neb = None
        self.m_protect = False
        self.m_guardian = False
        self.m_safety = False
        return True

    def applySpecial(self, effect):
        if effect == 'Innocent':
            equip = Equip.equipLib.getEquip(self.m_name)
            if equip is None:
                return False
            self.m_str = equip['str']
            self.m_dex = equip['dex']
            self.m_int = equip['int']
            self.m_luk = equip['luk']
            self.m_hp = equip['hp']
            self.m_mp = equip['mp']
            self.m_watt = equip['watt']
            self.m_matt = equip['matt']
            self.m_wdef = equip['wdef']
            self.m_mdef = equip['mdef']
            self.m_accuracy = equip['accuracy']
            self.m_avoid = equip['avoid']
            self.m_total_slot = equip['slot']
            self.m_remain_slot = equip['slot']
            self.m_remain_hammer = 2
            self.m_success = 0
            self.m_stars = 0
            self.m_protect = False
            self.m_guardian = False
        elif effect == 'Potential':
            if random.random() < 0.8:
                numLines = 2
            else:
                numLines = 3
            r = random.random()
            if r < 0.99:
                rank = 1
            elif r < 0.9999:
                rank = 2
            else:
                rank = 3
            self.m_pot.m_rank = rank
            self.m_pot.roll(numLines)
            self.m_protect = False
            self.m_guardian = False
        elif effect == 'Epic Potential':
            if random.random() < 0.8:
                numLines = 2
            else:
                numLines = 3
            self.m_pot.m_rank = 2
            self.m_pot.roll(numLines)
            self.m_protect = False
            self.m_guardian = False
        elif effect == 'Unique Potential':
            if random.random() < 0.8:
                numLines = 2
            else:
                numLines = 3
            self.m_pot.m_rank = 3
            self.m_pot.roll(numLines)
            self.m_protect = False
            self.m_guardian = False
        elif effect == 'Clean Slate':
            if self.m_success + self.m_remain_slot < self.m_total_slot:
                self.m_remain_slot += 1
            self.m_protect = False
            self.m_guardian = False
        elif effect == 'Hammer':
            if self.m_remain_hammer > 0:
                self.m_remain_hammer -= 1
                self.m_total_slot += 1
                self.m_remain_slot += 1
                self.m_protect = False
                self.m_safety = False
        elif effect == 'Potential Stamp':
            if len(self.m_pot.m_lines) == 2:
                self.m_pot.expand()
        elif effect == 'Protect':
            self.m_protect = True
        elif effect == 'Guardian':
            self.m_guardian = True
        elif effect == 'Safety':
            self.m_safety = True
        return True

    def applyScroll(self, effect):
        scrollType, stat = Equip.scrollLib.getScrollStat(effect, self)
        if scrollType == 'decisive':
            for key, value in stat.items():
                self[key] = self[key] + value
        elif scrollType == 'chaos':
            mutable = ['str', 'dex', 'int', 'luk', 'hp', 'mp', 'watt', 'matt',
                       'wdef', 'mdef', 'accuracy', 'avoid']
            for option in mutable:
                if self[option] != 0:
                    r = random.random()
                    for i in range(min(stat.keys()), max(stat.keys())):
                        if r > stat[i]:
                            continue
                        else:
                            val = i
                            if option == 'hp' or option == 'mp':
                                val *= 10
                            self[option] = max(0, self[option] + val)
                            break
        self.m_remain_slot -= 1
        self.m_success += 1