simulationcraft / simc

Simulationcraft engine/GUI
GNU General Public License v3.0
1.39k stars 693 forks source link

Error Initializing - parse error #9416

Closed zjx2172 closed 1 week ago

zjx2172 commented 2 weeks ago

Describe the bug

SimulatoinCraft is encountering a runtime error when it tries to parse a character imported from battle.net

Expected behavior

No error expierenced. Simulation runs successfully

To Reproduce

Import my character from battle.net, and run simulation. (Peekamoose-Kel'Thuzad

Additional information

Version 1100-01 built in linux using commit 91a5ab0054005285846653335a8bd5d5c05feebf

Window text:

Simulation runtime error: Initializing: Actor 'Peekamoose': Item 'lockstitch_headgear' Slot 'head': Cannot parse option from 'lockstitch_headgear,id=224,677,bonus_id=10,289/6,652/10,876/1,711/1,630': Unexpected parameter '677'. Expected format: name=value

Detail Text:

# SimulationCraft encountered an error!
# SimulationCraft 1100-01 for World of Warcraft 11.0.2.56421 thewarwithin-BETA
# hotfix 2024-09-05/56421, git build thewarwithin 91a5ab0054
* Category: Simulation runtime error
* Error: Initializing: Actor 'Peekamoose': Item 'lockstitch_headgear' Slot 'head': Cannot parse option from 'lockstitch_headgear,id=224,677,bonus_id=10,289/6,652/10,876/1,711/1,630': Unexpected parameter '677'. Expected format: name=value

## All options used for simulation:
``` ini
### SimulationCraft 1100-01 for World of Warcraft 11.0.2.56421 thewarwithin-BETA (wow build 56421, git build thewarwithin 91a5ab0054)  ###
### Using QT 6.7.2 with WebEngine ###

### Begin GUI options ###
ptr=0
item_db_source=local/bcpapi/wowhead/ptrhead/ptr2head/thewarwithinhead
target_error=0
iterations=0
default_world_lag=0.1
max_time=300
vary_combat_length=0.2
target_level+=3
target_race=Humanoid
optimal_raid=0
override.bloodlust=1
override.arcane_intellect=1
override.power_word_fortitude=1
override.battle_shout=1
override.mark_of_the_wild=1
override.skyfury=1
override.bleeding=1
override.mortal_wounds=1
override.chaos_brand=1
override.mystic_touch=1
threads=32
process_priority=Low
statistics_level=1
### End GUI options ###
### Begin simulateText ###
druid="Peekamoose"
source=blizzard
origin="https://worldofwarcraft.com/en-us/character/kelthuzad/peekamoose"
spec=feral
level=80
race=highmountain_tauren
role=attack
position=back
talents=CcGAqvgeoHLefPLb/Pa8nkKXDBAAAAAAmZ2mNzswMzMzitHwYbmZmxMDAAAAAwSAzYAzMjmZMDzMjlhZbmBAAAAAAAAAAIANzysMzsNgALwMDA

# Default consumables
potion=tempered_potion_3
flask=tempered_aggression_3
food=mycobloom_risotto
augmentation=crystallized
temporary_enchant=main_hand:algari_mana_oil_3

# This default action priority list is automatically created based on your character.
# It is a attempt to provide you with a action list that is both simple and practicable,
# while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
# Feel free to edit, adapt and improve it to your own needs.
# SimulationCraft is always looking for updates and improvements to the default action lists.

# Feral APL can be found at https://www.dreamgrove.gg/sims/cat/feral.txt

# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=flask
actions.precombat+=/food
actions.precombat+=/augmentation
# Snapshot raid buffed stats before combat begins and pre-potting is done.
actions.precombat+=/snapshot_stats
actions.precombat+=/cat_form,if=!buff.cat_form.up
actions.precombat+=/prowl,if=!buff.prowl.up
# check if trinket slot contains a stat on use (variable is just kept in case of things like mirror not working with has_use_buff)
actions.precombat+=/variable,name=trinket_1_buffs,value=trinket.1.has_use_buff
actions.precombat+=/variable,name=trinket_2_buffs,value=trinket.2.has_use_buff
# if we are playing 2 minute convoke, we prefer 2 minute on-use over 3 minute on-use even without berserk: heart of the lion
actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=talent.convoke_the_spirits&!talent.ashamanes_guidance&variable.trinket_1_buffs&(trinket.1.cooldown.duration%%120=0|120%%trinket.1.cooldown.duration=0)
actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=talent.convoke_the_spirits&!talent.ashamanes_guidance&variable.trinket_2_buffs&(trinket.1.cooldown.duration%%120=0|120%%trinket.1.cooldown.duration=0)
# if we aren't playing 2 minute convoke, then we can sync 3 minute cds with berserk sans hotl
actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=!(talent.convoke_the_spirits&!talent.ashamanes_guidance)&variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.bs_inc.duration=0|cooldown.bs_inc.duration%%trinket.1.cooldown.duration=0|trinket.1.cooldown.duration%%cooldown.convoke_the_spirits.duration=0|cooldown.convoke_the_spirits.duration%%trinket.1.cooldown.duration=0)
actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=!(talent.convoke_the_spirits&!talent.ashamanes_guidance)&variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.bs_inc.duration=0|cooldown.bs_inc.duration%%trinket.2.cooldown.duration=0|trinket.2.cooldown.duration%%cooldown.convoke_the_spirits.duration=0|cooldown.convoke_the_spirits.duration%%trinket.2.cooldown.duration=0)
# prioritize trinkets that line-up with cds -> main-stat on uses -> longer cd trinkets -> shorter duration trinkets
actions.precombat+=/variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((trinket.2.cooldown.duration%trinket.2.proc.any_dps.duration)*(1.5+trinket.2.has_buff.agility)*(1.2+trinket.2.has_buff.mastery)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%trinket.1.proc.any_dps.duration)*(1.5+trinket.1.has_buff.agility)*(1.2+trinket.1.has_buff.mastery)*(variable.trinket_1_sync))

# Executed every time the actor is available.
actions=prowl,if=buff.bs_inc.down&!buff.prowl.up
actions+=/cat_form,if=!buff.cat_form.up&!talent.fluid_form
# Line up <a href='https://www.wowhead.com/spell=10060/power-infusion'>Power Infusion</a> with Berserk.
actions+=/invoke_external_buff,name=power_infusion,if=buff.bs_inc.up|!talent.berserk_heart_of_the_lion
actions+=/call_action_list,name=variable
actions+=/auto_attack,if=!buff.prowl.up|!buff.shadowmeld.up
# actions+=/stop_moving,if=gcd.remains=0&equipped.ovinaxs_mercurial_egg
actions+=/tigers_fury,if=(energy.deficit>35|combo_points=5)&(fight_remains<=15|(cooldown.bs_inc.remains>20&target.time_to_die>5)|(cooldown.bs_inc.ready&target.time_to_die>12|target.time_to_die=fight_remains))
actions+=/rake,target_if=max:refreshable+(persistent_multiplier>dot.rake.pmultiplier),if=buff.shadowmeld.up|buff.prowl.up
actions+=/natures_vigil,if=spell_targets.swipe_cat>0
actions+=/renewal,if=spell_targets.swipe_cat>0
actions+=/ferocious_bite,if=buff.apex_predators_craving.up&!(variable.need_bt&active_bt_triggers=2)
actions+=/adaptive_swarm,target_if=(!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2)&dot.adaptive_swarm_damage.stack<3&!action.adaptive_swarm_damage.in_flight&!action.adaptive_swarm.in_flight&target.time_to_die>5,if=buff.cat_form.up&!talent.unbridled_swarm.enabled|spell_targets.swipe_cat=1
actions+=/adaptive_swarm,target_if=max:(1+dot.adaptive_swarm_damage.stack)*dot.adaptive_swarm_damage.stack<3*time_to_die,if=buff.cat_form.up&dot.adaptive_swarm_damage.stack<3&talent.unbridled_swarm.enabled&spell_targets.swipe_cat>1
actions+=/call_action_list,name=cooldown,if=dot.rip.ticking
# with wildstalker and not both raging fury + veinripper, low cp rips for snapshot reasons is worth
actions+=/rip,if=spell_targets=1&hero_tree.wildstalker&!(talent.raging_fury&talent.veinripper)&(buff.bloodtalons.up|!talent.bloodtalons)&(dot.rip.refreshable&buff.tigers_fury.remains>10&combo_points>=3|buff.tigers_fury.remains<3.0&buff.tigers_fury.up&combo_points>=3&remains<16)
actions+=/call_action_list,name=berserk,if=buff.bs_inc.up
actions+=/call_action_list,name=finisher,if=combo_points=5
actions+=/call_action_list,name=builder,if=spell_targets.swipe_cat=1&combo_points<5&(variable.time_to_pool<=0|!variable.need_bt|variable.proccing_bt)
actions+=/call_action_list,name=aoe_builder,if=spell_targets.swipe_cat>=2&combo_points<5&(variable.time_to_pool<=0|!variable.need_bt|variable.proccing_bt)
actions+=/regrowth,if=buff.predatory_swiftness.up&variable.regrowth

actions.aoe_builder=variable,name=proccing_bt,op=set,value=variable.need_bt
# maintain thrash highest prio
actions.aoe_builder+=/thrash_cat,if=refreshable&!talent.thrashing_claws&!(variable.need_bt&buff.bt_thrash.up)
# avoid capping brs charges
actions.aoe_builder+=/brutal_slash,target_if=min:time_to_die,if=(cooldown.brutal_slash.full_recharge_time<4|time_to_die<4|raid_event.adds.remains<4)&!(variable.need_bt&buff.bt_swipe.up)
# with wild slashes we swipe at 5+ targets over raking/moonfire
actions.aoe_builder+=/swipe_cat,if=time_to_die<4|(talent.wild_slashes&spell_targets.swipe_cat>4&!(variable.need_bt&buff.bt_swipe.up))
actions.aoe_builder+=/prowl,target_if=dot.rake.refreshable|dot.rake.pmultiplier<1.4,if=!(variable.need_bt&buff.bt_rake.up)&action.rake.ready&gcd.remains=0&!buff.sudden_ambush.up&!variable.cc_capped
actions.aoe_builder+=/shadowmeld,target_if=dot.rake.refreshable|dot.rake.pmultiplier<1.4,if=!(variable.need_bt&buff.bt_rake.up)&action.rake.ready&!buff.sudden_ambush.up&!buff.prowl.up&!variable.cc_capped
# dcr rake > moonfire
actions.aoe_builder+=/rake,target_if=refreshable,if=talent.doubleclawed_rake&!(variable.need_bt&buff.bt_rake.up)&!variable.cc_capped
# at 4t with wild slashes, swipe is better than moonfiring
actions.aoe_builder+=/swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>3&!(variable.need_bt&buff.bt_swipe.up)
# li moonfire is better than non-dcr rake
actions.aoe_builder+=/moonfire_cat,target_if=refreshable,if=!(variable.need_bt&buff.bt_moonfire.up)&!variable.cc_capped
actions.aoe_builder+=/rake,target_if=refreshable,if=!(variable.need_bt&buff.bt_rake.up)&!variable.cc_capped
# fillers
actions.aoe_builder+=/brutal_slash,if=!(variable.need_bt&buff.bt_swipe.up)
actions.aoe_builder+=/swipe_cat,if=!(variable.need_bt&buff.bt_swipe.up)
actions.aoe_builder+=/shred,if=!buff.sudden_ambush.up&!variable.easy_swipe&!(variable.need_bt&buff.bt_shred.up)
actions.aoe_builder+=/thrash_cat,if=!talent.thrashing_claws&!(variable.need_bt&buff.bt_thrash.up)
# fallback bt actions
actions.aoe_builder+=/rake,target_if=max:ticks_gained_on_refresh,if=talent.doubleclawed_rake&buff.sudden_ambush.up&variable.need_bt&buff.bt_rake.down
actions.aoe_builder+=/moonfire_cat,target_if=max:ticks_gained_on_refresh,if=variable.need_bt&buff.bt_moonfire.down
actions.aoe_builder+=/rake,target_if=max:ticks_gained_on_refresh,if=buff.sudden_ambush.up&variable.need_bt&buff.bt_rake.down
actions.aoe_builder+=/shred,if=variable.need_bt&buff.bt_shred.down&!variable.easy_swipe
actions.aoe_builder+=/rake,target_if=dot.rake.pmultiplier<1.6,if=variable.need_bt&buff.bt_rake.down
actions.aoe_builder+=/thrash_cat,if=variable.need_bt&buff.bt_shred.down

actions.berserk=call_action_list,name=finisher,if=combo_points=5
actions.berserk+=/run_action_list,name=aoe_builder,if=spell_targets.swipe_cat>=2
actions.berserk+=/prowl,if=!(buff.bt_rake.up&active_bt_triggers=2)&action.rake.ready&gcd.remains=0&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.shadowmeld.up
actions.berserk+=/shadowmeld,if=!(buff.bt_rake.up&active_bt_triggers=2)&action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up
# rake if bt doesnt need proc and rake can be upgraded. Fish for sudden ambush procs unless rake will fall off otherwise.
actions.berserk+=/rake,if=!(buff.bt_rake.up&active_bt_triggers=2)&(dot.rake.remains<3|buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier)
actions.berserk+=/moonfire_cat,if=refreshable
actions.berserk+=/thrash_cat,if=!talent.thrashing_claws&refreshable
# proc bt when an opportunity arises
actions.berserk+=/shred,if=active_bt_triggers=2&buff.bt_shred.down
actions.berserk+=/brutal_slash,if=active_bt_triggers=2&buff.bt_swipe.down
actions.berserk+=/swipe_cat,if=active_bt_triggers=2&buff.bt_swipe.down&talent.wild_slashes
# alternate brs and shred to create bt opportunities
actions.berserk+=/brutal_slash,if=cooldown.brutal_slash.charges>1&buff.bt_swipe.down
actions.berserk+=/shred,if=buff.bt_shred.down
actions.berserk+=/brutal_slash,if=cooldown.brutal_slash.charges>1
actions.berserk+=/swipe_cat,if=buff.bt_swipe.down&talent.wild_slashes
actions.berserk+=/shred

# this variable tracks whether or not we've started our bt sequence
actions.builder=variable,name=proccing_bt,op=set,value=variable.need_bt
actions.builder+=/shadowmeld,if=gcd=0&energy>=35&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)*!(variable.need_bt&buff.bt_rake.up)&buff.tigers_fury.up
# upgrade to stealth rakes, otherwise refresh in pandemic. Delay rake as long as possible if it would downgrade
actions.builder+=/rake,if=((refreshable&persistent_multiplier>=dot.rake.pmultiplier|dot.rake.remains<3)|buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier)&!(variable.need_bt&buff.bt_rake.up)
actions.builder+=/brutal_slash,if=cooldown.brutal_slash.full_recharge_time<4&!(variable.need_bt&buff.bt_swipe.up)
actions.builder+=/thrash_cat,if=refreshable&!talent.thrashing_claws
actions.builder+=/shred,if=buff.clearcasting.react
actions.builder+=/moonfire_cat,if=refreshable
actions.builder+=/brutal_slash,if=!(variable.need_bt&buff.bt_swipe.up)
actions.builder+=/swipe_cat,if=talent.wild_slashes&!(variable.need_bt&buff.bt_swipe.up)
actions.builder+=/shred,if=!(variable.need_bt&buff.bt_shred.up)
actions.builder+=/swipe_cat,if=variable.need_bt&buff.bt_swipe.down
# clip rake for bt if it wont downgrade its snapshot
actions.builder+=/rake,if=variable.need_bt&buff.bt_rake.down&persistent_multiplier>=dot.rake.pmultiplier
actions.builder+=/moonfire_cat,if=variable.need_bt&buff.bt_moonfire.down
actions.builder+=/thrash_cat,if=variable.need_bt&buff.bt_thrash.down

actions.cooldown=incarnation,if=target.time_to_die>17|target.time_to_die=fight_remains
# berserk with tigers fury
actions.cooldown+=/berserk,if=buff.tigers_fury.up&(target.time_to_die>12|target.time_to_die=fight_remains)
actions.cooldown+=/berserking,if=buff.bs_inc.up
# todo make last set of cds line up again now that we know potions.remains is the syntax
actions.cooldown+=/potion,if=buff.bs_inc.up|fight_remains<32|(!variable.lastZerk&variable.lastConvoke&cooldown.convoke_the_spirits.remains<10)
# non trinket gear-on-uses have variable rules on whether or not they trigger the trinket shared CD. For the cases they do we will need specific APL entries. For now just use on cooldown.
actions.cooldown+=/use_items
# we disable mercurial egg use here to not give the wrong impression on when to use it. (sim won't need this, could check if moving & stack is below desired threshold which isn't known yet since trinket bugged in-game)
actions.cooldown+=/use_item,name=ovinaxs_mercurial_egg,if=!in_combat
actions.cooldown+=/feral_frenzy,if=combo_points<=1|buff.bs_inc.up&combo_points<=2
actions.cooldown+=/do_treacherous_transmitter_task,if=buff.tigers_fury.up|fight_remains<22
# stat on-use trinkets, prefers trinket with higher priority. reads like this: berserk is up OR if tigers fury up & convoke is either ready, wont be for the next tf, or the other trinket will be ready in time for convoke. If we dont have convoke, then we use if berserk wont be up for next tf or other trinket will be up for berserk.
actions.cooldown+=/use_item,slot=trinket1,if=!trinket.1.is.ovinaxs_mercurial_egg&(buff.bs_inc.up|((buff.tigers_fury.up&cooldown.tigers_fury.remains>20)&(cooldown.convoke_the_spirits.remains<4|cooldown.convoke_the_spirits.remains>45|(variable.trinket_2_buffs&cooldown.convoke_the_spirits.remains-trinket.2.cooldown.remains>0)|!talent.convoke_the_spirits&(cooldown.bs_inc.remains>40|cooldown.bs_inc.remains-trinket.2.cooldown.remains>0))))&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains
actions.cooldown+=/use_item,slot=trinket2,if=!trinket.2.is.ovinaxs_mercurial_egg&(buff.bs_inc.up|((buff.tigers_fury.up&cooldown.tigers_fury.remains>20)&(cooldown.convoke_the_spirits.remains<4|cooldown.convoke_the_spirits.remains>45|(variable.trinket_1_buffs&cooldown.convoke_the_spirits.remains-trinket.1.cooldown.remains>0)|!talent.convoke_the_spirits&(cooldown.bs_inc.remains>40|cooldown.bs_inc.remains-trinket.1.cooldown.remains>0))))&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains
# non-stat on use trinkets get used on cooldown, so long as it wont interfere with a stat on-use trinket
actions.cooldown+=/use_item,slot=trinket1,if=!trinket.1.is.ovinaxs_mercurial_egg&!variable.trinket_1_buffs&(trinket.2.cooldown.remains>20|!variable.trinket_2_buffs|trinket.2.cooldown.remains&cooldown.tigers_fury.remains>20)
actions.cooldown+=/use_item,slot=trinket2,if=!trinket.2.is.ovinaxs_mercurial_egg&!variable.trinket_2_buffs&(trinket.1.cooldown.remains>20|!variable.trinket_1_buffs|trinket.1.cooldown.remains&cooldown.tigers_fury.remains>20)
# always line up convoke with berserk if you can
actions.cooldown+=/convoke_the_spirits,if=fight_remains<5|(buff.bs_inc.up|!talent.berserk_heart_of_the_lion)&(buff.tigers_fury.up&(combo_points<=2|buff.bs_inc.up&combo_points<=3)&(target.time_to_die>5-talent.ashamanes_guidance.enabled|target.time_to_die=fight_remains))

# maintain/upgrade pws, if we have 6.5+s left on pw, we will instead bite if we have rampant ferocity talented. Without rampant, we will bite a vined target with 6 or fewer targets. If we have Ravage, we use specifically Ravage at 7 or fewer targets.
actions.finisher=primal_wrath,target_if=max:dot.bloodseeker_vines.ticking,if=spell_targets.primal_wrath>1&((dot.primal_wrath.remains<6.5&!buff.bs_inc.up|dot.primal_wrath.refreshable)|(!talent.rampant_ferocity.enabled&(spell_targets.primal_wrath>1&!dot.bloodseeker_vines.ticking&!buff.ravage.up|spell_targets.primal_wrath>6+talent.ravage)))
# rip if single target or pw isnt up. Rip with bloodtalons if talented. If tigers fury will be up before rip falls off, then delay refresh
actions.finisher+=/rip,target_if=refreshable,if=(!talent.primal_wrath|spell_targets=1)&(buff.bloodtalons.up|!talent.bloodtalons)&(buff.tigers_fury.up|dot.rip.remains<cooldown.tigers_fury.remains)
actions.finisher+=/pool_resource,for_next=1
actions.finisher+=/ferocious_bite,max_energy=1,target_if=max:dot.bloodseeker_vines.ticking,if=!buff.bs_inc.up|!talent.soul_of_the_forest.enabled
actions.finisher+=/ferocious_bite,target_if=max:dot.bloodseeker_vines.ticking

# most expensive bt cycle is Shred + Thrash + Rake, 40+40+35 for 115 energy. During incarn it is 32+32+28 for 92energy
actions.variable=variable,name=effective_energy,op=set,value=energy+(40*buff.clearcasting.stack)+(3*energy.regen)+(50*(cooldown.tigers_fury.remains<3.5))
# estimated time until we have enough energy to proc bloodtalons.
actions.variable+=/variable,name=time_to_pool,op=set,value=((115-variable.effective_energy-(23*buff.incarnation.up))%energy.regen)
# try to proc bt if we have 1 or 0 stacks of bloodtalons
actions.variable+=/variable,name=need_bt,value=talent.bloodtalons&buff.bloodtalons.stack<=1
# capped on clearcasting stacks
actions.variable+=/variable,name=cc_capped,value=buff.clearcasting.stack=(1+talent.moment_of_clarity)
# checks if theres exactly 1 convoke remaining in sim
actions.variable+=/variable,name=lastConvoke,value=(cooldown.convoke_the_spirits.remains+cooldown.convoke_the_spirits.duration)>remains&cooldown.convoke_the_spirits.remains<remains
# checks if theres exactly 1 berserk cast remaining in sim                 : at least 5s spare for now, TODO: check #s
actions.variable+=/variable,name=lastZerk,value=(cooldown.bs_inc.remains+cooldown.bs_inc.duration+5)>remains&cooldown.convoke_the_spirits.remains<remains
# approximates if theres exactly 1 potion cast remaining with duration to spare
actions.variable+=/variable,name=lastPotion,value=(cooldown.potions.remains+cooldown.potions.duration+15)>remains&cooldown.potions.remains+15<remains
# optional variable that alternates bite/pw during berserk regardless of talent setup. Off by default
actions.variable+=/variable,name=zerk_biteweave,op=reset
# optional variable that sends regrowth and renewal casts. Turned off by default
actions.variable+=/variable,name=regrowth,op=reset
# optional variable that forgoes shredding in AoE. Turned off by default
actions.variable+=/variable,name=easy_swipe,op=reset

head=lockstitch_headgear,id=224,677,bonus_id=10,289/6,652/10,876/1,711/1,630
neck=elementattuned_pendant,id=223,435,bonus_id=10,289/1,485
shoulders=lockstitch_epaulets,id=224,679,bonus_id=6,652/1,698/10,296/1,646/10,254
back=gemwoven_cloak,id=224,664,bonus_id=10,287/6,652/1,681/1,636
chest=underscouts_jerkin,id=224,606,bonus_id=10,288/6,652/1,686/10,844/1,488
wrists=stormriders_bindings,id=223,446,bonus_id=10,289/1,485
hands=lockstitch_grips,id=224,676,bonus_id=10,288/6,652/1,706/1,633
waist=underscouts_cord,id=224,604,bonus_id=10,288/6,652/10,397/1,691/10,844/1,488
legs=arathi_defenders_breeches,id=223,444,bonus_id=10,289/1,485
feet=lockstitch_waders,id=224,675,bonus_id=10,297/6,652/1,716/1,643/10,254
finger1=spinners_hoop,id=224,592,bonus_id=10,289/6,652/10,394/10,393/1,769/10,844/1,485
finger2=gemstudded_band,id=224,660,bonus_id=10,297/6,652/10,395/10,392/1,780/1,643/10,254
trinket1=shadowed_essence,id=225,693,bonus_id=10,297/6,652/1,472/10,254
trinket2=quickwick_candlestick,id=225,649,bonus_id=10,297/11,311/6,652/1,643/10,254
main_hand=expeditionary_spear,id=224,625,bonus_id=10,289/6,652/1,685/10,844/1,485

# Gear Summary
# gear_ilvl=563.53
# gear_agility=16980
# gear_stamina=83953
# gear_crit_rating=5544
# gear_haste_rating=3349
# gear_mastery_rating=7302
# gear_versatility_rating=4860
# gear_armor=16232

### End simulateText ###
desired_targets=1
### Begin overrides ###
# User-specified persistent global and player parameters will be set here.

### End overrides ###
### Begin final options ###
### End final options ###
### END ###
gastank commented 2 weeks ago

Your gear syntax is wrong - something has added comma separators to numbers and you'll need to stop whatever is doing that. id=224,677 should be id=224677 and so on.

zjx2172 commented 1 week ago

I didn't edit anything for my gear. It was filled out by importing from battle.net using the api.

gastank commented 1 week ago

Try just using the command line interface, open a command prompt to your simc directory then type: simc armory=us,kelthuzad,peekamoose html=test.html and see if it runs and if you can open test.html

The GUI is largely unmaintained so the combination of it + your linux env may be adding unnecessary separator commas.

zjx2172 commented 1 week ago

Simc ran without error using the cli. Thanks!