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
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
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
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
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
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
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