示例#1
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])

        i18n.set_language('local')

        # Base
        _level = int(input.get("l", 100))

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        # Buff Food
        buff_list.append(self.buffFoodMap[input.get("bf", 0)])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = []
        buff_list.append('gear_specialization')
        if input.get("mg") == "chaotic":
            buff_list.append('chaotic_metagem')

        if len(self.tier14IDS & gear) >= 2:
            buff_list.append('rogue_t14_2pc')

        if len(self.tier14IDS & gear) >= 4:
            buff_list.append('rogue_t14_4pc')

        if len(self.tier15IDS & gear) >= 2:
            buff_list.append('rogue_t15_2pc')

        if len(self.tier15IDS & gear) >= 4:
            buff_list.append('rogue_t15_4pc')

        if len(self.tier16IDS & gear) >= 2:
            buff_list.append('rogue_t16_2pc')

        if len(self.tier16IDS & gear) >= 4:
            buff_list.append('rogue_t16_4pc')

        if len(self.tier17IDS & gear) >= 2:
            buff_list.append('rogue_t17_2pc')

        if len(self.tier17IDS & gear) >= 4:
            buff_list.append('rogue_t17_4pc')

        if len(self.tier17LFRIDS & gear) >= 4:
            buff_list.append('rogue_t17_4pc_lfr')

        if len(self.tier18IDS & gear) >= 2:
            buff_list.append('rogue_t18_2pc')

        if len(self.tier18IDS & gear) >= 4:
            buff_list.append('rogue_t18_4pc')

        if len(self.tier18LFRIDS & gear) >= 4:
            buff_list.append('rogue_t18_4pc_lfr')

        agi_bonus = 0
        if len(self.tier17LFRIDS & gear) >= 2:
            agi_bonus += 100
        if len(self.tier18LFRIDS & gear) >= 2:
            agi_bonus += 115

        for k in self.gearBoosts:
            if k in gear:
                buff_list.append(self.gearBoosts[k])

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k],gd[1]))
                        break


        if input.get("mg") == "capacitive":
            proclist.append('legendary_capacitive_meta')

        #if len(frozenset([102248]) & gear) >= 1:
        #    proclist.append('fury_of_xuen')

        if input.get("l", 0) == 90:
            if input.get("prepot", 0) == 1:
                proclist.append('virmens_bite_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('virmens_bite')

        elif input.get("l", 0) > 90:
            if input.get("prepot", 0) == 1:
                proclist.append('draenic_agi_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('draenic_agi_pot')

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))

        _stats = stats.Stats(
            _mh, _oh, _procs, _gear_buffs,
            s[0], # Str
            s[1] + agi_bonus, # AGI
            0,
            0,
            0,
            s[2], # AP
            s[3], # Crit
            s[4], # Haste
            s[5], # Mastery
            0,
            s[6], # Multistrike
            s[7], # Versatility
            _level,
            s[9], # PvP Power
            s[8], # Resilience Rating
            pvp_target_armor = _opt.get("pvp_target_armor", 1500))
        # ##################################################################################

        # Talents
        t = input.get("t", '')
        _talents = talents.Talents(t , "rogue", _level)

        # Glyphs
        _glyphs = glyphs.Glyphs("rogue", *input.get("gly", []))

        _spec = input.get("spec", 'a')
        if _spec == "a":
            tree = 0
        elif _spec == "Z":
            tree = 1
        else:
            tree = 2

        rotation_keys = input.get("ro", { 'opener_name': 'default', 'opener_use': 'always'})
        if not rotation_keys["opener_name"] in self.validOpenerKeys[tree]:
          rotation_keys["opener_name"] = "default"
        rotation_options = dict( (key.encode('ascii'), val) for key, val in self.convert_bools(input.get("ro", {})).iteritems() if key in self.validCycleKeys[tree] )
        settings_options = {}
        if __builtin__.shadowcraft_engine_version >= 5.4:
            settings_options['num_boss_adds'] = _opt.get("num_boss_adds", 0)
        if __builtin__.shadowcraft_engine_version >= 6.0:
           settings_options['is_day'] = _opt.get("night_elf_racial", 0) == 1

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.CombatCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(5, **rotation_options)
        # test_settings = settings.Settings(test_cycle, response_time=.5, duration=360, dmg_poison='dp', utl_poison='lp', is_pvp=charInfo['pvp'], shiv_interval=charInfo['shiv'])
        _settings = settings.Settings(_cycle,
            time_in_execute_range = _opt.get("time_in_execute_range", 0.35),
            response_time = _opt.get("response_time", 0.5),
            duration = duration,
            dmg_poison = _opt.get("dmg_poison", 'dp'),
            utl_poison = _opt.get("utl_poison", None),
            opener_name = rotation_keys["opener_name"],
            use_opener = rotation_keys["opener_use"],
            is_pvp = _opt.get("pvp", False),
            latency = _opt.get("latency", 0.03),
            adv_params = _opt.get("adv_params", ''),
            default_ep_stat = 'ap',
            **settings_options
        )
        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _glyphs, _buffs, _race, _settings, _level)
        return calculator
from shadowcraft.calcs.rogue.Aldriana import AldrianasRogueDamageCalculator
from shadowcraft.calcs.rogue.Aldriana import settings

from shadowcraft.objects import buffs
from shadowcraft.objects import race
from shadowcraft.objects import stats
from shadowcraft.objects import procs
from shadowcraft.objects import talents
from shadowcraft.objects import glyphs

from shadowcraft.core import i18n

# Set up language. Use 'en_US', 'es_ES', 'fr' for specific languages.
test_language = 'local'
i18n.set_language(test_language)

# Set up level/class/race
test_level = 90
test_race = race.Race('pandaren')
test_class = 'rogue'

# Set up buffs.
test_buffs = buffs.Buffs('short_term_haste_buff', 'stat_multiplier_buff',
                         'crit_chance_buff', 'mastery_buff',
                         'melee_haste_buff', 'attack_power_buff',
                         'armor_debuff', 'physical_vulnerability_debuff',
                         'spell_damage_debuff', 'agi_flask', 'guild_feast')

# Set up weapons.
test_mh = stats.Weapon(9725.5, 2.6, 'axe', 'dancing_steel')
from shadowcraft.calcs.rogue.Aldriana import AldrianasRogueDamageCalculator
from shadowcraft.calcs.rogue.Aldriana import settings

from shadowcraft.objects import buffs
from shadowcraft.objects import race
from shadowcraft.objects import stats
from shadowcraft.objects import procs
from shadowcraft.objects import proc_data
from shadowcraft.objects import talents
from shadowcraft.objects import glyphs

from shadowcraft.core import i18n

# Set up language. Use 'en_US', 'es_ES', 'fr' for specific languages.
test_language = 'local'
i18n.set_language(test_language)


key = 1
while key < len(sys.argv):
    terms = sys.argv[key].split(':')
    charInfo[ terms[0] ] = terms[1]
    key += 1

print "Loading " + charInfo['name'] + " of " + charInfo['region'] + "-" + charInfo['realm'] + "\n"
character_data = CharacterData(charInfo['region'], charInfo['realm'], charInfo['name'])
character_data.do_import()


# Set up level/class/race
test_level = 90
示例#4
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])
        professions = input.get("pro", {})
        
        i18n.set_language('local')

        # Base
        _level = int(input.get("l", 90))

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = []
        buff_list.append('leather_specialization')
        if input.get("pot", 0) == 1:
            buff_list.append('virmens_bite')
        if input.get("prepot", 0) == 1:
            buff_list.append('virmens_bite_prepot')

        if input.get("mg") == "chaotic":
            buff_list.append('chaotic_metagem')

        if len(self.tier11IDS & gear) >= 2:
            buff_list.append('rogue_t11_2pc')

        if len(self.tier12IDS & gear) >= 2:
            buff_list.append('rogue_t12_2pc')

        if len(self.tier12IDS & gear) >= 4:
            buff_list.append('rogue_t12_4pc')

        if len(self.tier13IDS & gear) >= 2:
            buff_list.append('rogue_t13_2pc')

        if len(self.tier13IDS & gear) >= 4:
            buff_list.append('rogue_t13_4pc')

        if len(self.legendary_mainhands & gear) >= 1:
            buff_list.append('rogue_t13_legendary')

        if len(self.tier14IDS & gear) >= 2:
            buff_list.append('rogue_t14_2pc')

        if len(self.tier14IDS & gear) >= 4:
            buff_list.append('rogue_t14_4pc')

        if len(self.tier15IDS & gear) >= 2:
            buff_list.append('rogue_t15_2pc')

        if len(self.tier15IDS & gear) >= 4:
            buff_list.append('rogue_t15_4pc')

        if len(self.tier16IDS & gear) >= 2:
            buff_list.append('rogue_t16_2pc')

        if len(self.tier16IDS & gear) >= 4:
            buff_list.append('rogue_t16_4pc')
    
        agi_bonus = 0
        if len(self.arenaSeason9SetIds & gear) >= 2:
            agi_bonus += 70
            
        if len(self.arenaSeason9SetIds & gear) >= 4:
            agi_bonus += 90

        # If engineer
        if "engineering" in professions:
            buff_list.append('synapse_springs')

        for k in self.gearBoosts:
            if k in gear:
                buff_list.append(self.gearBoosts[k])
            
        # If alchemist
        if "alchemy" in professions:
            buff_list.append('mixology')

        # If herbalist
        if "herbalism" in professions:
            buff_list.append('lifeblood')

        # If skinner
        if "skinning" in professions:
            buff_list.append('master_of_anatomy')

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k],gd[1]))
                        break
        
        if len(self.tier11IDS & gear) >= 4:
            proclist.append('rogue_t11_4pc')

        if len(self.legendary_tier_1 & gear) >= 2:
            proclist.append('jaws_of_retribution')

        if len(self.legendary_tier_2 & gear) >= 2:
            proclist.append('maw_of_oblivion')

        if len(self.legendary_tier_3 & gear) >= 2:
            proclist.append('fangs_of_the_father')

        # if tailor
        if "tailoring" in professions and input.get("se") == 'swordguard_embroidery':
            proclist.append('swordguard_embroidery')

        if input.get("mg") == "capacitive":
            proclist.append('legendary_capacitive_meta')

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))
        
        _stats = stats.Stats(
            _mh, _oh, _procs, _gear_buffs,
            s[0], # Str
            s[1]  + agi_bonus, # AGI
            0,
            0,
            0,
            s[2], # AP
            s[3], # Crit
            s[4], # Hit
            s[5], # Expertise
            s[6], # Haste
            s[7], # Mastery
            _level,
            s[9], # PvP Power
            s[8], # Resilience Rating
            pvp_target_armor = _opt.get("pvp_target_armor", 10000))
        # ##################################################################################

        # Talents
        t = input.get("t", '') 	
        _talents = talents.Talents(t , "rogue", _level)

        # Glyphs
        _glyphs = glyphs.Glyphs("rogue", *input.get("gly", []))
	
	_spec = input.get("spec", 'a')
        if _spec == "a":
            tree = 0
        elif _spec == "Z":
            tree = 1
        else:
            tree = 2
        
        rotation_keys = input.get("ro", {})
        if not rotation_keys["opener_name"] in self.validOpenerKeys[tree]: 
          rotation_keys["opener_name"] = "default"
        rotation_options = dict( (key.encode('ascii'), val) for key, val in self.convert_bools(input.get("ro", {})).iteritems() if key in self.validCycleKeys[tree] )
        settings_options = {}
        if __builtin__.shadowcraft_engine_version >= 5.4:
            settings_options['num_boss_adds'] = _opt.get("num_boss_adds", 0)        

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.CombatCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(5, **rotation_options)
        # test_settings = settings.Settings(test_cycle, response_time=.5, duration=360, dmg_poison='dp', utl_poison='lp', is_pvp=charInfo['pvp'],stormlash=charInfo['stormlash'], shiv_interval=charInfo['shiv'])
        _settings = settings.Settings(_cycle,
            time_in_execute_range = _opt.get("time_in_execute_range", 0.35),
            tricks_on_cooldown = _opt.get("tricks", False),
            response_time = _opt.get("response_time", 0.5),
            duration = duration,
            dmg_poison = _opt.get("dmg_poison", 'dp'),
            utl_poison = _opt.get("utl_poison", None),
            opener_name = rotation_keys["opener_name"],
            use_opener = rotation_keys["opener_use"],
            stormlash = _opt.get("stormlash", False),
            is_pvp = _opt.get("pvp", False),
            latency = _opt.get("latency", 0.03),
            adv_params = _opt.get("adv_params", ''),
            **settings_options
        )
        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _glyphs, _buffs, _race, _settings, _level)
        return calculator
示例#5
0
    def setup(self, input):
        gear = frozenset(input.get("g", []))
        professions = input.get("pro", {})
        
        i18n.set_language('local')

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])
            
        _buffs = buffs.Buffs(*buff_list)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        _th = self.weapon(input, 'th')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = []
        buff_list.append('leather_specialization')
        if input.get("pot", 0) == 1:
            buff_list.append('potion_of_the_tolvir')
        if input.get("prepot", 0) == 1:
            buff_list.append('potion_of_the_tolvir_prepot')

        if input.get("mg") == "chaotic":
            buff_list.append('chaotic_metagem')

        if len(self.tier11IDS & gear) >= 2:
            buff_list.append('rogue_t11_2pc')

        if len(self.tier12IDS & gear) >= 2:
            buff_list.append('rogue_t12_2pc')

        if len(self.tier12IDS & gear) >= 4:
            buff_list.append('rogue_t12_4pc')

        agi_bonus = 0
        if len(self.arenaSeason9SetIds & gear) >= 2:
            agi_bonus += 70
            
        if len(self.arenaSeason9SetIds & gear) >= 4:
            agi_bonus += 90

        # If engineer
        if "engineering" in professions:
            buff_list.append('engineer_glove_enchant')

        for k in self.gearBoosts:
            if k in gear:
                buff_list.append(self.gearBoosts[k])
            
        # If alchemist
        if "alchemy" in professions:
            buff_list.append('mixology')

        # If herbalist
        if "herbalism" in professions:
            buff_list.append('lifeblood')

        # If skinner
        if "skinning" in professions:
            buff_list.append('master_of_anatomy')

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                proclist.append(self.gearProcs[k])
        
        if len(self.tier11IDS & gear) >= 4:
            proclist.append('rogue_t11_4pc')
            
        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        _level = int(input.get("l", 85))
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))
        
        _stats = stats.Stats(
            s[0], # Str
            s[1]  + agi_bonus, # AGI
            s[2], # AP
            s[3], # Crit
            s[4], # Hit
            s[5], # Expertise
            s[6], # Haste
            s[7], # Mastery
            _mh, _oh, _th, _procs, _gear_buffs)
        # ##################################################################################

        # Talents
        t = input.get("t", ['', '', ''])
        _talents = rogue_talents.RogueTalents(t[0], t[1], t[2])

        # Glyphs
        _glyphs = rogue_glyphs.RogueGlyphs(*input.get("gly", []))

        if self.sumstring(t[0]) >= 31:
            tree = 0
        elif self.sumstring(t[1]) >= 31:
            tree = 1
        else:
            tree = 2
            
        rotation_options = dict( (key.encode('ascii'), val) for key, val in self.convert_bools(input.get("ro", {})).iteritems() if key in self.validCycleKeys[tree] )
        
        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.CombatCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(5, **rotation_options)

        _settings = settings.Settings(_cycle,
            response_time = 0.5,
            tricks_on_cooldown = _opt.get("tricks", True),
            mh_poison = _opt.get("mh_poison", 'ip'),
            oh_poison = _opt.get("oh_poison", 'dp'),
            duration = duration,
        )

        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _glyphs, _buffs, _race, _settings, _level)
        return calculator
示例#6
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])

        i18n.set_language('local')

        # Base
        _level = int(input.get("l", 100))
        _level = 110

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        # Buff Food
        buff_list.append(self.buffFoodMap[input.get("bf", 0)])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = ['gear_specialization']

        if len(self.tier19IDs & gear) >= 2:
            buff_list.append('rogue_t19_2pc')

        if len(self.tier19IDs & gear) >= 4:
            buff_list.append('rogue_t19_4pc')

        if len(self.tier20IDs & gear) >= 2:
            buff_list.append('rogue_t20_2pc')

        if len(self.tier20IDs & gear) >= 4:
            buff_list.append('rogue_t20_4pc')

        if len(self.tier21IDs & gear) >= 2:
            buff_list.append('rogue_t21_2pc')

        if len(self.tier21IDs & gear) >= 4:
            buff_list.append('rogue_t21_4pc')

        if len(self.orderhallIDs & gear) >= 6:
            buff_list.append('rogue_orderhall_6pc')

        if len(self.orderhallIDs & gear) == 8:
            buff_list.append('rogue_orderhall_8pc')

        if len(self.marchOfTheLegionIDs & gear) == 2:
            buff_list.append('march_of_the_legion_2pc')

        if len(self.journeyThroughTimeIDs & gear) == 2:
            buff_list.append('journey_through_time_2pc')

        if len(self.jacinsRuseIDs & gear) == 2:
            buff_list.append('jacins_ruse_2pc')

        if len(self.toeKneesIDs & gear) == 2 or len(self.bloodstainedIDs & gear) == 2 or len(self.eyeOfCommandIDs & gear) == 2:
            buff_list.append('kara_empowered_2pc')

        for k,v in self.gearBoosts.iteritems():
            if k in gear:
                buff_list.append(v)

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k],gd[1]))
                        if gd[0] == 133597:
                            proclist.append(('infallible_tracking_charm_mod', gd[1]))
                        break

        if input.get("l", 0) == 110:
            if input.get("prepot", 0) == 0:
                proclist.append('old_war_prepot')
            if input.get("pot", 0) == 0:
                proclist.append('old_war_pot')
            if input.get("prepot", 0) == 1:
                proclist.append('prolonged_power_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('prolonged_power_pot')

        # Add enchant procs to the list of gear buffs
        for k in gear_data:
            if k[2] != 0 and k[2] in self.enchantMap:
                proclist.append(self.enchantMap[k[2]])

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))

        _stats = stats.Stats(
            mh=_mh, oh=_oh, procs=_procs, gear_buffs=_gear_buffs,
            str=s[0],             # Str
            agi=s[1],             # AGI
            int=0,
            stam=0,
            ap=s[2],              # AP
            crit=s[3],            # Crit
            haste=s[4],           # Haste
            mastery=s[5],         # Mastery
            versatility=s[6],     # Versatility
            level=_level)
        # ##################################################################################

        _spec = input.get("spec", 'a')
        if _spec == "a":
            tree = 0
            spec = "assassination"
        elif _spec == "Z":
            tree = 1
            spec = "outlaw"
        else:
            tree = 2
            spec = "subtlety"

        # Talents
        t = input.get("t", '')
        _talents = talents.Talents(t, spec, "rogue", _level)

        rotation_keys = input.get("ro", {})
        rotation_options = dict( (key.encode('ascii'), val) for key, val in self.convert_bools(input.get("ro", {})).iteritems() if key in self.validCycleKeys[tree] )

        if spec == "outlaw":
            opts = ['jolly_roger_reroll', 'grand_melee_reroll', 'shark_reroll', 'true_bearing_reroll', 'buried_treasure_reroll', 'broadsides_reroll']

            if rotation_options['reroll_policy'] != 'custom':
                value = int(rotation_options['reroll_policy'])
                for opt in opts:
                    rotation_options[opt] = value
            else:
                for opt in opts:
                    rotation_options[opt] = int(rotation_options[opt])
            del rotation_options['reroll_policy']
        elif spec == "subtlety":
            rotation_options['positional_uptime'] = rotation_options['positional_uptime'] / 100.0

        settings_options = {}
        settings_options['num_boss_adds'] = _opt.get("num_boss_adds", 0)
        settings_options['is_day'] = _opt.get("night_elf_racial", 0) == 1
        settings_options['is_demon'] = _opt.get("demon_enemy", 0) == 1
        settings_options['marked_for_death_resets'] = _opt.get("mfd_resets", 0)
        settings_options['finisher_threshold'] = _opt.get("finisher_threshold", 0)

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.OutlawCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(**rotation_options)
            _cycle.cp_builder
        _settings = settings.Settings(_cycle,
            response_time = _opt.get("response_time", 0.5),
            duration = duration,
            latency = _opt.get("latency", 0.03),
            adv_params = _opt.get("adv_params", ''),
            default_ep_stat = 'ap',
            **settings_options
        )

        _artifact = input['art']
        print(_artifact)
        trait_values = {}
        for k, v in self.artifactTraits[_spec].items():
            if str(k) in input['art']:
                trait_values[v] = input['art'][str(k)]

        _traits = artifact.Artifact(spec, 'rogue', trait_dict=trait_values)

        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _traits, _buffs, _race, spec, _settings, _level)
        return calculator
示例#7
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])

        i18n.set_language('local')

        # Base
        _level = int(input.get("l", 100))
        _level = 110

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        # Buff Food
        buff_list.append(self.buffFoodMap[input.get("bf", 0)])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = ['gear_specialization']

        if len(self.tier18IDs & gear) >= 2:
            buff_list.append('rogue_t18_2pc')

        if len(self.tier18IDs & gear) >= 4:
            buff_list.append('rogue_t18_4pc')

        if len(self.tier18LFRIDs & gear) >= 4:
            buff_list.append('rogue_t18_4pc_lfr')

        if len(self.tier19IDs & gear) >= 2:
            buff_list.append('rogue_t19_2pc')

        if len(self.tier19IDs & gear) >= 4:
            buff_list.append('rogue_t19_4pc')

        if len(self.orderhallIDs & gear) >= 6:
            buff_list.append('rogue_orderhall_6pc')

        if len(self.orderhallIDs & gear) == 8:
            buff_list.append('rogue_orderhall_8pc')

        if len(self.marchOfTheLegionIDs & gear) == 2:
            buff_list.append('march_of_the_legion_2pc')

        if len(self.journeyThroughTimeIDs & gear) == 2:
            buff_list.append('journey_through_time_2pc')

        if len(self.jacinsRuseIDs & gear) == 2:
            buff_list.append('jacins_ruse_2pc')

        if len(self.toeKneesIDs
               & gear) == 2 or len(self.bloodstainedIDs
                                   & gear) == 2 or len(self.eyeOfCommandIDs
                                                       & gear) == 2:
            buff_list.append('kara_empowered_2pc')

        for k, v in self.gearBoosts.iteritems():
            if k in gear:
                buff_list.append(v)

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k], gd[1]))
                        if gd[0] == 133597:
                            proclist.append(
                                ('infallible_tracking_charm_mod', gd[1]))
                        break

        if input.get("l", 0) == 110:
            if input.get("prepot", 0) == 0:
                proclist.append('old_war_prepot')
            if input.get("pot", 0) == 0:
                proclist.append('old_war_pot')
            if input.get("prepot", 0) == 1:
                proclist.append('prolonged_power_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('prolonged_power_pot')

        # Add enchant procs to the list of gear buffs
        for k in gear_data:
            if k[2] != 0 and k[2] in self.enchantMap:
                proclist.append(self.enchantMap[k[2]])

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))

        _stats = stats.Stats(
            mh=_mh,
            oh=_oh,
            procs=_procs,
            gear_buffs=_gear_buffs,
            str=s[0],  # Str
            agi=s[1],  # AGI
            int=0,
            stam=0,
            ap=s[2],  # AP
            crit=s[3],  # Crit
            haste=s[4],  # Haste
            mastery=s[5],  # Mastery
            versatility=s[6],  # Versatility
            level=_level)
        # ##################################################################################

        _spec = input.get("spec", 'a')
        if _spec == "a":
            tree = 0
            spec = "assassination"
        elif _spec == "Z":
            tree = 1
            spec = "outlaw"
        else:
            tree = 2
            spec = "subtlety"

        # Talents
        t = input.get("t", '')
        _talents = talents.Talents(t, spec, "rogue", _level)

        rotation_keys = input.get("ro", {})
        rotation_options = dict((key.encode('ascii'), val)
                                for key, val in self.convert_bools(
                                    input.get("ro", {})).iteritems()
                                if key in self.validCycleKeys[tree])

        if spec == "outlaw":
            opts = [
                'jolly_roger_reroll', 'grand_melee_reroll', 'shark_reroll',
                'true_bearing_reroll', 'buried_treasure_reroll',
                'broadsides_reroll'
            ]

            if rotation_options['reroll_policy'] != 'custom':
                value = int(rotation_options['reroll_policy'])
                for opt in opts:
                    rotation_options[opt] = value
            else:
                for opt in opts:
                    rotation_options[opt] = int(rotation_options[opt])
            del rotation_options['reroll_policy']
        elif spec == "subtlety":
            rotation_options['positional_uptime'] = rotation_options[
                'positional_uptime'] / 100.0

        settings_options = {}
        settings_options['num_boss_adds'] = _opt.get("num_boss_adds", 0)
        settings_options['is_day'] = _opt.get("night_elf_racial", 0) == 1
        settings_options['is_demon'] = _opt.get("demon_enemy", 0) == 1
        settings_options['marked_for_death_resets'] = _opt.get("mfd_resets", 0)
        settings_options['finisher_threshold'] = _opt.get(
            "finisher_threshold", 0)

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.OutlawCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(**rotation_options)
            _cycle.cp_builder
        _settings = settings.Settings(_cycle,
                                      response_time=_opt.get(
                                          "response_time", 0.5),
                                      duration=duration,
                                      latency=_opt.get("latency", 0.03),
                                      adv_params=_opt.get("adv_params", ''),
                                      default_ep_stat='ap',
                                      **settings_options)

        if len(input['art']) == 0:
            # if no artifact data was passed (probably because the user had the wrong
            # weapons equipped), pass a string of zeros as the trait data.
            _traits = artifact.Artifact(
                spec, "rogue",
                "0" * len(artifact_data.traits[("rogue", spec)]))
        elif len(input['art']) == len(artifact_data.traits[("rogue", spec)]):
            traitstr = ""
            remap = {}
            for k, v in input['art'].iteritems():
                remap[self.artifactTraits[_spec][int(k)]] = v
            for t in artifact_data.traits[("rogue", spec)]:
                if (t in remap):
                    traitstr += str(remap[t])
                else:
                    traitstr += "0"
            _traits = artifact.Artifact(spec, "rogue", traitstr)
        else:
            _traits = None

        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _traits,
                                                    _buffs, _race, spec,
                                                    _settings, _level)
        return calculator
示例#8
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])

        i18n.set_language('local')

        # Base
        _level = int(input.get("l", 100))

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        # Buff Food
        buff_list.append(self.buffFoodMap[input.get("bf", 0)])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, 'mh')
        _oh = self.weapon(input, 'oh')
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = []
        buff_list.append('gear_specialization')
        if input.get("mg") == "chaotic":
            buff_list.append('chaotic_metagem')

        if len(self.tier14IDS & gear) >= 2:
            buff_list.append('rogue_t14_2pc')

        if len(self.tier14IDS & gear) >= 4:
            buff_list.append('rogue_t14_4pc')

        if len(self.tier15IDS & gear) >= 2:
            buff_list.append('rogue_t15_2pc')

        if len(self.tier15IDS & gear) >= 4:
            buff_list.append('rogue_t15_4pc')

        if len(self.tier16IDS & gear) >= 2:
            buff_list.append('rogue_t16_2pc')

        if len(self.tier16IDS & gear) >= 4:
            buff_list.append('rogue_t16_4pc')

        if len(self.tier17IDS & gear) >= 2:
            buff_list.append('rogue_t17_2pc')

        if len(self.tier17IDS & gear) >= 4:
            buff_list.append('rogue_t17_4pc')

        if len(self.tier17LFRIDS & gear) >= 4:
            buff_list.append('rogue_t17_4pc_lfr')

        agi_bonus = 0
        if len(self.tier17LFRIDS & gear) >= 2:
            agi_bonus += 100

        for k in self.gearBoosts:
            if k in gear:
                buff_list.append(self.gearBoosts[k])

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k], gd[1]))
                        break

        if input.get("mg") == "capacitive":
            proclist.append('legendary_capacitive_meta')

        #if len(frozenset([102248]) & gear) >= 1:
        #    proclist.append('fury_of_xuen')

        if input.get("l", 0) == 90:
            if input.get("prepot", 0) == 1:
                proclist.append('virmens_bite_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('virmens_bite')

        elif input.get("l", 0) > 90:
            if input.get("prepot", 0) == 1:
                proclist.append('draenic_agi_prepot')
            if input.get("pot", 0) == 1:
                proclist.append('draenic_agi_pot')

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", 'human').lower().replace(" ", "_")
        _race = race.Race(raceStr, 'rogue', _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))

        _stats = stats.Stats(
            _mh,
            _oh,
            _procs,
            _gear_buffs,
            s[0],  # Str
            s[1] + agi_bonus,  # AGI
            0,
            0,
            0,
            s[2],  # AP
            s[3],  # Crit
            s[4],  # Haste
            s[5],  # Mastery
            0,
            s[6],  # Multistrike
            s[7],  # Versatility
            _level,
            s[9],  # PvP Power
            s[8],  # Resilience Rating
            pvp_target_armor=_opt.get("pvp_target_armor", 1500))
        # ##################################################################################

        # Talents
        t = input.get("t", '')
        _talents = talents.Talents(t, "rogue", _level)

        # Glyphs
        _glyphs = glyphs.Glyphs("rogue", *input.get("gly", []))

        _spec = input.get("spec", 'a')
        if _spec == "a":
            tree = 0
        elif _spec == "Z":
            tree = 1
        else:
            tree = 2

        rotation_keys = input.get("ro", {
            'opener_name': 'default',
            'opener_use': 'always'
        })
        if not rotation_keys["opener_name"] in self.validOpenerKeys[tree]:
            rotation_keys["opener_name"] = "default"
        rotation_options = dict((key.encode('ascii'), val)
                                for key, val in self.convert_bools(
                                    input.get("ro", {})).iteritems()
                                if key in self.validCycleKeys[tree])
        settings_options = {}
        if __builtin__.shadowcraft_engine_version >= 5.4:
            settings_options['num_boss_adds'] = _opt.get("num_boss_adds", 0)
        if __builtin__.shadowcraft_engine_version >= 6.0:
            settings_options['is_day'] = _opt.get("night_elf_racial", 0) == 1

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.CombatCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(5, **rotation_options)
        # test_settings = settings.Settings(test_cycle, response_time=.5, duration=360, dmg_poison='dp', utl_poison='lp', is_pvp=charInfo['pvp'], shiv_interval=charInfo['shiv'])
        _settings = settings.Settings(
            _cycle,
            time_in_execute_range=_opt.get("time_in_execute_range", 0.35),
            response_time=_opt.get("response_time", 0.5),
            duration=duration,
            dmg_poison=_opt.get("dmg_poison", 'dp'),
            utl_poison=_opt.get("utl_poison", None),
            opener_name=rotation_keys["opener_name"],
            use_opener=rotation_keys["opener_use"],
            is_pvp=_opt.get("pvp", False),
            latency=_opt.get("latency", 0.03),
            adv_params=_opt.get("adv_params", ''),
            default_ep_stat='ap',
            **settings_options)
        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _glyphs,
                                                    _buffs, _race, _settings,
                                                    _level)
        return calculator
示例#9
0
    def setup(self, input):
        gear_data = input.get("g", [])
        gear = frozenset([x[0] for x in gear_data])

        i18n.set_language("local")

        # Base
        _level = int(input.get("l", 100))

        # Buffs
        buff_list = []
        __max = len(self.buffMap)
        for b in input.get("b", []):
            b = int(b)
            if b >= 0 and b < __max:
                buff_list.append(self.buffMap[b])

        # Buff Food
        buff_list.append(self.buffFoodMap[input.get("bf", 0)])

        _buffs = buffs.Buffs(*buff_list, level=_level)

        # ##################################################################################
        # Weapons
        _mh = self.weapon(input, "mh")
        _oh = self.weapon(input, "oh")
        # ##################################################################################

        # ##################################################################################
        # Set up gear buffs.
        buff_list = []
        buff_list.append("gear_specialization")

        if len(self.tier17IDS & gear) >= 2:
            buff_list.append("rogue_t17_2pc")

        if len(self.tier17IDS & gear) >= 4:
            buff_list.append("rogue_t17_4pc")

        if len(self.tier17LFRIDS & gear) >= 4:
            buff_list.append("rogue_t17_4pc_lfr")

        if len(self.tier18IDS & gear) >= 2:
            buff_list.append("rogue_t18_2pc")

        if len(self.tier18IDS & gear) >= 4:
            buff_list.append("rogue_t18_4pc")

        if len(self.tier18LFRIDS & gear) >= 4:
            buff_list.append("rogue_t18_4pc_lfr")

        agi_bonus = 0
        if len(self.tier17LFRIDS & gear) >= 2:
            agi_bonus += 100
        if len(self.tier18LFRIDS & gear) >= 2:
            agi_bonus += 115

        for k in self.gearBoosts:
            if k in gear:
                buff_list.append(self.gearBoosts[k])

        _gear_buffs = stats.GearBuffs(*buff_list)

        # ##################################################################################
        # Trinket procs
        proclist = []
        for k in self.gearProcs:
            if k in gear:
                for gd in gear_data:
                    if gd[0] == k:
                        proclist.append((self.gearProcs[k], gd[1]))
                        if gd[0] == 133597:
                            proclist.append(("infallible_tracking_charm_mod", gd[1]))
                        break

        if input.get("l", 0) > 90:
            if input.get("prepot", 0) == 1:
                proclist.append("draenic_agi_prepot")
            if input.get("pot", 0) == 1:
                proclist.append("draenic_agi_pot")

        _procs = procs.ProcsList(*proclist)

        # ##################################################################################
        # Player stats
        # Need parameter order here
        # str, agi, int, spi, sta, ap, crit, hit, exp, haste, mastery, mh, oh, thrown, procs, gear buffs
        raceStr = input.get("r", "human").lower().replace(" ", "_")
        _race = race.Race(raceStr, "rogue", _level)

        s = input.get("sta", {})
        _opt = input.get("settings", {})
        duration = int(_opt.get("duration", 300))

        _stats = stats.Stats(
            _mh,
            _oh,
            _procs,
            _gear_buffs,
            s[0],  # Str
            s[1] + agi_bonus,  # AGI
            0,
            0,
            0,
            s[2],  # AP
            s[3],  # Crit
            s[4],  # Haste
            s[5],  # Mastery
            0,
            s[6],  # Multistrike
            s[7],  # Versatility
            _level,
            s[9],  # PvP Power
            s[8],  # Resilience Rating
            pvp_target_armor=_opt.get("pvp_target_armor", 1500),
        )
        # ##################################################################################

        # Talents
        t = input.get("t", "")
        _talents = talents.Talents(t, "rogue", _level)

        # Glyphs
        _glyphs = glyphs.Glyphs("rogue", *input.get("gly", []))

        _spec = input.get("spec", "a")
        if _spec == "a":
            tree = 0
        elif _spec == "Z":
            tree = 1
        else:
            tree = 2

        rotation_keys = input.get("ro", {"opener_name": "default", "opener_use": "always"})
        if not rotation_keys["opener_name"] in self.validOpenerKeys[tree]:
            rotation_keys["opener_name"] = "default"
        rotation_options = dict(
            (key.encode("ascii"), val)
            for key, val in self.convert_bools(input.get("ro", {})).iteritems()
            if key in self.validCycleKeys[tree]
        )
        settings_options = {}
        if __builtin__.shadowcraft_engine_version >= 5.4:
            settings_options["num_boss_adds"] = _opt.get("num_boss_adds", 0)
        if __builtin__.shadowcraft_engine_version >= 6.0:
            settings_options["is_day"] = _opt.get("night_elf_racial", 0) == 1
            settings_options["is_demon"] = _opt.get("demon_enemy", 0) == 1

        if tree == 0:
            _cycle = settings.AssassinationCycle(**rotation_options)
        elif tree == 1:
            _cycle = settings.CombatCycle(**rotation_options)
        else:
            _cycle = settings.SubtletyCycle(5, **rotation_options)
        _settings = settings.Settings(
            _cycle,
            time_in_execute_range=_opt.get("time_in_execute_range", 0.35),
            response_time=_opt.get("response_time", 0.5),
            duration=duration,
            dmg_poison=_opt.get("dmg_poison", "dp"),
            utl_poison=_opt.get("utl_poison", None),
            opener_name=rotation_keys["opener_name"],
            use_opener=rotation_keys["opener_use"],
            is_pvp=_opt.get("pvp", False),
            latency=_opt.get("latency", 0.03),
            adv_params=_opt.get("adv_params", ""),
            default_ep_stat="ap",
            **settings_options
        )
        calculator = AldrianasRogueDamageCalculator(_stats, _talents, _glyphs, _buffs, _race, _settings, _level)
        return calculator