This priority helper supports all DPS and Tank specializations in World of Warcraft Retail.
hekili / hekili Goto Github PK
View Code? Open in Web Editor NEWHekili Priority Helper for DPS and Tanks (WoW Retail)
Hekili Priority Helper for DPS and Tanks (WoW Retail)
This priority helper supports all DPS and Tank specializations in World of Warcraft Retail.
Arcane Mage spell suggestions isn't working.
as I wrote in the subject, in rogue rotation are not included interrupts, I also tried to display them in a separate window, sorry for my bad English :/
To have a "lock/unlock" button (similar to what the addon Derails has) to be able to quickly reposition the "bar of icons" on players screen WITHOUT having to go into the main setting->Display and fiddling with the x and y coordinates.
Thank you for all your hard work (I will donate to the effort)
Hi,
I just want to add after some days of testing the new Hunter.lua, that there are some issues with the hunter.lua file. (had some problems with the multishot prediction in BM)
Should I open a new pull request here to come at these topics or are you aware of this and want to do it by yourself?
i'm trying to build my own action list but found something wrong.
for example:
cooldown.judgment.remains returns 0 when the spell is off cooldown(which is correct),
but cooldown.rebuke.remains returns 15, no matter it's on or off cooldown.
please help
I am having an odd™ interaction with a castable dot in the 8.0 code.
I have registered the following Ability:
-- stellar_flare
stellar_flare = {
id = 202347,
cast = function()
return 1.5 * haste
end,
cooldown = 0,
gcd = 'spell',
spend = -8,
spendType = 'lunar_power',
startsCombat = true,
hander = function()
applyDebuff( 'target', 'stellar_flare' )
end,
},
And I have registered the following Aura:
-- stellar_flare
stellar_flare = {
id = 202347,
duration = 24,
max_stacks = 1,
},
Which is similar to my Sunfire:
-- sunfire
sunfire = {
id = 93402,
cast = 0,
cooldown = 0,
gcd = 'spell',
spend = -3,
spendType = 'lunar_power',
startsCombat = true,
handler = function()
applyDebuff( 'target', 'sunfire' )
end,
},
And
-- sunfire
sunfire = {
id = 164815,
duration = 18,
max_stack = 1,
},
BUT when I include them in an action pack the Sunfire (and the Moonfire spell) both will correctly cast once and then move on in the Action list.
Stellar Flare though will suggest itself indefinitely, seemingly not understanding that the first cast will apply the dot as expected:
build: Working Copy
level: 110
class: DRUID
spec: balance
talents: feral_affinity
fury_of_elune
mass_entanglement
natures_balance
starlord
stellar_flare
tiger_dash
traits: none
sets/legendaries/artifacts: none
gear: seatreated_armbands=1
seatreated_boots=1
sea_sapphire_band=1
seatreated_mask=1
beaten_copper_loop=1
tideshaper_staff=1
seatreated_trousers=1
seatreated_belt=1
seatreated_grips=1
seatreated_vest=1
salt_starched_shawl=1
shaleshell_pendant=1
oceanographers_weather_log=1
seatreated_shoulderguards=1
shimmering_rune=1
New Recommendations for [ Primary ] requested at 00:50:35 ( 22061.65 ).
*** START OF NEW DISPLAY: Primary ***
[ ** ] Checking for recommendation #1 ( time offset: 0.00, remaining GCD: 0.00 ).
[ ** ] lunar_power, 78 / 100
[ ** ] mana, 4000 / 4000
Precombat APL not processed because combat time is 4.27.
Processing default action list [ Balance - default ].
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 1] Checking call_action_list (Balance - default - 1 )...
call_action_list is known and enabled.
There is no criteria for this action list.
Action list (Test) was found.
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 2] Checking starfall (Balance - Test - 1 )...
starfall is known and enabled.
The action (starfall) is usable at (0.00 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
[ 3] Checking fury_of_elune (Balance - Test - 2 )...
fury_of_elune is known and enabled.
The action (fury_of_elune) is usable at (0.00 + 55.67).
- the action is ready before the current recommendation (at +55.67 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +55.67.
- NONE
- this entry's criteria FAILS: lunar_power.deficit[21.94] > 40
Rechecking stopped at step #1. The recheck ( 56.35 ) isn't ready within a reasonable time frame ( 7.5s ).
[ 4] Checking moonfire (Balance - Test - 3 )...
moonfire is known and enabled.
The action (moonfire) is usable at (0.00 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.moonfire.remains[19.14] < 6.6 & lunar_power.deficit[22.00] > 7 & time_to_die[86245.00] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.moonfire.remains[18.45] < 6.6 & lunar_power.deficit[22.00] > 7 & time_to_die[86244.32] > 8
[ 5] Checking sunfire (Balance - Test - 4 )...
sunfire is known and enabled.
The action (sunfire) is usable at (0.00 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.sunfire.remains[16.46] < 5.4 & lunar_power.deficit[22.00] > 7 & time_to_die[86245.00] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.sunfire.remains[15.78] < 5.4 & lunar_power.deficit[22.00] > 7 & time_to_die[86244.32] > 8
[ 6] Checking stellar_flare (Balance - Test - 5 )...
stellar_flare is known and enabled.
The action (stellar_flare) is usable at (0.00 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria PASSES: debuff.stellar_flare.remains[0.00] < 7.2
Action Chosen: stellar_flare at 0.000000!
Returned from list (Test), current recommendation is stellar_flare (+0.00).
Completed default action list [ Balance - default ].
Recommendation is stellar_flare at 0.00 + 0.00.
Prediction engine would recommend stellar_flare at +0.00s.
Recommendation #1 is stellar_flare at 0.00.
[ ** ] Checking for recommendation #2 ( time offset: 1.35, remaining GCD: 0.00 ).
[ ** ] lunar_power, 86 / 100
[ ** ] mana, 4000 / 4000
Precombat APL not processed because combat time is 5.62.
Processing default action list [ Balance - default ].
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 1] Checking call_action_list (Balance - default - 1 )...
call_action_list is known and enabled.
There is no criteria for this action list.
Action list (Test) was found.
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 2] Checking starfall (Balance - Test - 1 )...
starfall is known and enabled.
The action (starfall) is usable at (1.35 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
[ 3] Checking fury_of_elune (Balance - Test - 2 )...
fury_of_elune is known and enabled.
The action (fury_of_elune) is usable at (1.35 + 54.32).
- the action is ready before the current recommendation (at +54.32 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +54.32.
- NONE
- this entry's criteria FAILS: lunar_power.deficit[13.94] > 40
Rechecking stopped at step #1. The recheck ( 55.00 ) isn't ready within a reasonable time frame ( 7.5s ).
[ 4] Checking moonfire (Balance - Test - 3 )...
moonfire is known and enabled.
The action (moonfire) is usable at (1.35 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.moonfire.remains[17.79] < 6.6 & lunar_power.deficit[14.00] > 7 & time_to_die[298.65] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.moonfire.remains[17.10] < 6.6 & lunar_power.deficit[14.00] > 7 & time_to_die[297.97] > 8
[ 5] Checking sunfire (Balance - Test - 4 )...
sunfire is known and enabled.
The action (sunfire) is usable at (1.35 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.sunfire.remains[15.11] < 5.4 & lunar_power.deficit[14.00] > 7 & time_to_die[298.65] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.sunfire.remains[14.43] < 5.4 & lunar_power.deficit[14.00] > 7 & time_to_die[297.97] > 8
[ 6] Checking stellar_flare (Balance - Test - 5 )...
stellar_flare is known and enabled.
The action (stellar_flare) is usable at (1.35 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria PASSES: debuff.stellar_flare.remains[0.00] < 7.2
Action Chosen: stellar_flare at 0.000000!
Returned from list (Test), current recommendation is stellar_flare (+0.00).
Completed default action list [ Balance - default ].
Recommendation is stellar_flare at 1.35 + 0.00.
Prediction engine would recommend stellar_flare at +0.00s.
Recommendation #2 is stellar_flare at 1.35.
[ ** ] Checking for recommendation #3 ( time offset: 2.70, remaining GCD: 0.00 ).
[ ** ] lunar_power, 94 / 100
[ ** ] mana, 4000 / 4000
Precombat APL not processed because combat time is 6.97.
Processing default action list [ Balance - default ].
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 1] Checking call_action_list (Balance - default - 1 )...
call_action_list is known and enabled.
There is no criteria for this action list.
Action list (Test) was found.
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 2] Checking starfall (Balance - Test - 1 )...
starfall is known and enabled.
The action (starfall) is usable at (2.70 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
[ 3] Checking fury_of_elune (Balance - Test - 2 )...
fury_of_elune is known and enabled.
The action (fury_of_elune) is usable at (2.70 + 52.97).
- the action is ready before the current recommendation (at +52.97 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +52.97.
- NONE
- this entry's criteria FAILS: lunar_power.deficit[5.94] > 40
Rechecking stopped at step #1. The recheck ( 53.66 ) isn't ready within a reasonable time frame ( 7.5s ).
[ 4] Checking moonfire (Balance - Test - 3 )...
moonfire is known and enabled.
The action (moonfire) is usable at (2.70 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.moonfire.remains[16.44] < 6.6 & lunar_power.deficit[6.00] > 7 & time_to_die[297.30] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.moonfire.remains[15.76] < 6.6 & lunar_power.deficit[6.00] > 7 & time_to_die[296.62] > 8
[ 5] Checking sunfire (Balance - Test - 4 )...
sunfire is known and enabled.
The action (sunfire) is usable at (2.70 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.sunfire.remains[13.76] < 5.4 & lunar_power.deficit[6.00] > 7 & time_to_die[297.30] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.sunfire.remains[13.08] < 5.4 & lunar_power.deficit[6.00] > 7 & time_to_die[296.62] > 8
[ 6] Checking stellar_flare (Balance - Test - 5 )...
stellar_flare is known and enabled.
The action (stellar_flare) is usable at (2.70 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria PASSES: debuff.stellar_flare.remains[0.00] < 7.2
Action Chosen: stellar_flare at 0.000000!
Returned from list (Test), current recommendation is stellar_flare (+0.00).
Completed default action list [ Balance - default ].
Recommendation is stellar_flare at 2.70 + 0.00.
Prediction engine would recommend stellar_flare at +0.00s.
Recommendation #3 is stellar_flare at 2.70.
[ ** ] Checking for recommendation #4 ( time offset: 4.04, remaining GCD: 0.00 ).
[ ** ] lunar_power, 100 / 100
[ ** ] mana, 4000 / 4000
Precombat APL not processed because combat time is 8.31.
Processing default action list [ Balance - default ].
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 1] Checking call_action_list (Balance - default - 1 )...
call_action_list is known and enabled.
There is no criteria for this action list.
Action list (Test) was found.
Current recommendation was NO ACTION at +60.00s (clash: 0.00).
[ 2] Checking starfall (Balance - Test - 1 )...
starfall is known and enabled.
The action (starfall) is usable at (4.04 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: talent.soul_of_the_forest.enabled[nil] & buff.starfall.down[true]
[ 3] Checking fury_of_elune (Balance - Test - 2 )...
fury_of_elune is known and enabled.
The action (fury_of_elune) is usable at (4.04 + 51.62).
- the action is ready before the current recommendation (at +51.62 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +51.62.
- NONE
- this entry's criteria FAILS: lunar_power.deficit[0.00] > 40
Rechecking stopped at step #1. The recheck ( 52.31 ) isn't ready within a reasonable time frame ( 7.5s ).
[ 4] Checking moonfire (Balance - Test - 3 )...
moonfire is known and enabled.
The action (moonfire) is usable at (4.04 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.moonfire.remains[15.09] < 6.6 & lunar_power.deficit[0.00] > 7 & time_to_die[295.96] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.moonfire.remains[14.41] < 6.6 & lunar_power.deficit[0.00] > 7 & time_to_die[295.27] > 8
[ 5] Checking sunfire (Balance - Test - 4 )...
sunfire is known and enabled.
The action (sunfire) is usable at (4.04 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria FAILS: debuff.sunfire.remains[12.42] < 5.4 & lunar_power.deficit[0.00] > 7 & time_to_die[295.96] > 8
The conditions for Test, called from Balance:default:1, would PASS at +0.68.
- NONE
Recheck #1 ( +0.68 ) NOT MET: debuff.sunfire.remains[11.73] < 5.4 & lunar_power.deficit[0.00] > 7 & time_to_die[295.27] > 8
[ 6] Checking stellar_flare (Balance - Test - 5 )...
stellar_flare is known and enabled.
The action (stellar_flare) is usable at (4.04 + 0.00).
- the action is ready before the current recommendation (at +0.00 vs. +60.00).
The conditions for Test, called from Balance:default:1, would PASS at +0.00.
- NONE
- this entry's criteria PASSES: debuff.stellar_flare.remains[0.00] < 7.2
Action Chosen: stellar_flare at 0.000000!
Returned from list (Test), current recommendation is stellar_flare (+0.00).
Completed default action list [ Balance - default ].
Recommendation is stellar_flare at 4.04 + 0.00.
Prediction engine would recommend stellar_flare at +0.00s.
Recommendation #4 is stellar_flare at 4.04.
Is this a bug in the code or am I doing something stupid?
Is there any way to set the frame level of the icons? (Couldn’t find one, but sometimes I’m just blind…)
If not, then please consider it a suggestion.
Reason:
I have my Hekili icons on center-left (i.e. directly to the left of the character). The huge Blizzard proc indicators (the ones that surround the character left and right) are overlaying the Hekili icons.
Not a big issue, but ugly nevertheless. And the Blizzard proc indicators are huge enough to be visible even with the Hekili icons on top.
The Blizz proc indicators seem to be on level 2 in the Medium strata (if I identified it correctly as “SpellActivationOverlayFrame”). So, being able to set Hekili to level 3 or higher should solve the glitch.
The TellMeWhen add-on for example defaults to level 10 (adjustable), which avoids the described issue.
Thanks for considering. (Or thanks for any hints, in case I have overlooked an already existing setting for that.)
The default execute action list is written as "buff.executioners_precision.stack" when it should be "debuff.executioners_precision.stack" instead. Changing it makes it work as intended.
Hello,
Maybe it's intended, but it's not in the Simc APL for Balance Druid but currently Starfall is only coming up to be cast when you have 50+ Astral Power when you have this talent that reduces it's cost down to 40 AP.
I think the issue is because of the line in DruidBalance.lua
spend = function () return buff.oneths_overconfidence.up and 0 or 50 end,
There is no check for the talent and the buff it checks for is of course for last expansion. I assume with this line it will only ever return 50 in most cases because there is no check for the talent.
Talent Spell Info here: https://www.wowhead.com/spell=114107/soul-of-the-forest
Thanks.
Can you make it so cooldowns are shown on their own separate display frame ?
Often times prot pala rotation tells you to use consecration while other spells are ready.
Example problematic situation: Consecration is coming off cooldown and hammer has accumulated 2 charges.
Current behaviour: recast cons -> hammer -> hammer
Desired behaviour: hammer -> recast cons -> (decide what to do, probably hammer or even judgment)
Hammer is the lowest of the priorities and consecration should be recast early enough to not have it run out during critical phases. However, casting consecration on cooldown is not optimal either and the current Hekili iteration seems to do that.
Hunter’s Mark (MM Hunter) is behaving weirdly in 8.1.0-16-beta2 and 8.1.0-16-beta3:
Here the relevant instances from a snapshot:
[ 3] Checking hunters_mark (Marksmanship - precombat - 7 )...
hunters_mark is known and enabled.
The action (hunters_mark) is unusable at (0.00 + 0.00) because ability 'usable' function returned false without explanation.
[ 3] Checking hunters_mark (Marksmanship - precombat - 7 )...
hunters_mark is known and enabled.
We are already in-combat and this pre-combat action is not essential. Skipping.
[ 10] Checking hunters_mark (Marksmanship - cds - 1 )...
hunters_mark is known and enabled.
The action (hunters_mark) is unusable at (1.33 + 0.00) because ability 'usable' function returned false without explanation.
…and some more of the same type.
Going back to 8.1.0-16-beta1 or earlier fixes the issue.
AOE mode is not working after last update, i checked all modes and this is 100% sure its broken
Some APLs use time_to_die
to refer to the end of the simulated combat (time_to_die
= time_to_0pct
= time to player's death, which coincides with the end of the sim).
Consider adding combat_remains
or a similar value that estimates when the current encounter will likely end. Gotta think about all relevant conditions, though.
Sometimes (primarily in bear form) I get the error bad argument #1 to 'ipairs' (table expected, got nil)
in State.lua:2570.
Develop sequence
action for openers (see Retribution).
build: 7.3.5.18-2-gaf14c9b just pushed through on curse with the taxi changes is throwing a lua error when you get on a taxi and then when you get off the taxi. Need to Disable and Enable to get the icons back.
4x Hekili\Utils.lua:238: attempt to call upvalue 'func' (a nil value)
Hekili\Utils.lua:238: in function <Hekili\Utils.lua:237>
Locals:
(*temporary) = nil
(*temporary) = "attempt to call upvalue 'func' (a nil value)"
func = nil
args = <table> {
}
When a Havoc spec Demon Hunter automatically has Metamorphosis applied it doesn't look like the upgraded Chaos Strike and Blade Dance are taken into account, with respect to the SpellFlash integration.
Can you add an option to only suggest abilities that can be cast while moving when we move ?
Hello. I would like to talk to you about such things as Grongs trinket RAGE trinket (Mekkatorque). Your addon does not correctly use them in the rotation. Because as I looked they are used by more experienced people according to such tactics.
When should I use the Grongs trinket?
Pretty much off Cooldown. Use it in the opener after you've popped Unholy Frenzy (wounds will still be applied).
How do I use the RAGE trinket (Mekkatorque) correctly?
Use it in opener and use Unholy Frenzy as you usually do. Then save Unholy Frenzy for your other uses, popping Unholy Frenzy 6 seconds after using the trinket.
And it turns out that these conditions Hekilli does not take into account. And it turns out in fact that I immediately give away at all two trinkets. Is it possible to implement them in addon so that he understands when to use them? I have not found where I can set these conditions as described above. And also when changing the race, hekilli does not show to use the racial abilities of another faction (Berserk, etc.)
While fishing as a Havoc DH on v8.1.0-19-beta6, the following error occurs:
655x Hekili\State.lua:866: attempt to index local 'ability' (a nil value)
Hekili\State.lua:866: in function `channelSpell'
Hekili\Classes.lua:995: in function `generate'
Hekili\State.lua:2653: in function <Hekili\State.lua:2642>
Hekili\State.lua:2684: in function <Hekili\State.lua:2642>
Hekili\State.lua:4537: in function `reset'
Hekili\Core.lua:1109: in function `ProcessHooks'
Hekili\UI.lua:1057: in function <Hekili\UI.lua:677>
Locals:
name = "fishing"
start = 681716.859000
duration = 22
ability = nil
(*temporary) = <function> defined @Hekili\State.lua:592
(*temporary) = "casting"
(*temporary) = 22
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index local 'ability' (a nil value)"
class = <table> {
totems = <table> {
}
talents = <table> {
}
potion = "battle_potion_of_agility"
abilityList = <table> {
}
stateExprs = <table> {
}
stances = <table> {
}
range = 8
auras = <table> {
}
pets = <table> {
}
itemPack = <table> {
}
settings = <table> {
}
interrupts = <table> {
}
gear = <table> {
}
resources = <table> {
}
itemMap = <table> {
}
primaryResource = "fury"
potions = <table> {
}
num = 3
stateFuncs = <table> {
}
pvptalents = <table> {
}
specs = <table> {
}
potionList = <table> {
}
hooks = <table> {
}
trinkets = <table> {
}
toggles = <table> {
}
itemList = <table> {
}
abilities = <table> {
}
powers = <table> {
}
packs = <table> {
}
itemSettings = <table> {
}
stateTables = <table> {
}
file = "DEMONHUNTER"
}
state = <table> {
spend = <function> defined @Hekili\State.lua:1120
class = <table> {
}
summonPet = <function> defined @Hekili\State.lua:798
role = <table> {
}
IsKnown = <function> defined @Hekili\State.lua:4797
forecastResources = <function> defined @Hekili\State.lua:958
purge = <table> {
}
cast_start = 0
GetTime = <function> defined =[C]:-1
safenum = <function> defined @Hekili\State.lua:460
floor = <function> defined =[C]:-1
UnitCastingInfo = <function> defined =[C]:-1
tonumber = <function> defined =[C]:-1
items = <table> {
}
player = <table> {
}
prev = <table> {
}
display = "Primary"
removeStack = <function> defined @Hekili\State.lua:695
prev_off_gcd = <table> {
}
active_dot = <table> {
}
applyDebuff = <function> defined @Hekili\State.lua:712
mainhand_speed = 2.288000
IsUsableSpell = <function> defined =[C]:-1
debuff = <table> {
}
PlayerBuffUp = <function> defined @Hekili\State.lua:3788
channelSpell = <function> defined @Hekili\State.lua:856
equipped = <table> {
}
gain = <function> defined @Hekili\State.lua:1106
removeBuff = <function> defined @Hekili\State.lua:659
TimeToReady = <function> defined @Hekili\State.lua:5056
reduceCooldown = <function> defined @Hekili\State.lua:578
iteration = 0
setStance = <function> defined @Hekili\State.lua:773
setCooldown = <function> defined @Hekili\State.lua:482
args = <table> {
}
AddToHistory = <function> defined @Hekili\Events.lua:522
ProcessEvent = <function> defined @Hekili\State.lua:3943
buff = <table> {
}
CancelCastEvent = <function> defined @Hekili\State.lua:4095
table_insert = <function> defined =[C]:-1
print = <function> defined @FrameXML\RestrictedInfrastructure.lua:116
rangefilter = false
GetSpellCount = <function> defined =[C]:-1
ClashOffset = <function> defined @Hekili\State.lua:5197
table = <table> {
}
spell_targets = <table> {
}
now = 681716.860000
offset = 0
haste = 0.880031
this_action = "death_sweep"
QueuedCastRemains = <function> defined @Hekili\State.lua:4179
SetConstraint = <function> defined @Hekili\State.lua:4634
delay = 0
pet = <table> {
}
ipairs = <function> defined =[C]:-1
health = <table> {
}
prev_gcd = <table> {
}
pvptalent = <table> {
}
delayMin = 0
selectionTime = 60
TargetBuffUp = <function> defined @Hekili\State.lua:3798
purge_fragments = <function> defined @Hekili\Classes\DemonHunterVengeance.lua:264
action = <table> {
}
delayMax = 15
false_start = 0
addStack = <function> defined @Hekili\State.lua:674
HasRequiredResources = <function> defined @Hekili\State.lua:5036
create_sigil = <
Hekili issue reporting info:
build: v8.1.0-19-beta6
level: 120
class: DEMONHUNTER
spec: havoc
talents: blind_fury
demonic
fel_barrage
first_blood
immolation_aura
netherwalk
unleashed_power
traits: azerite_empowered=1
furious_gaze=2
overwhelming_power=2
resounding_protection=2
revolving_blades=1
thirsting_blades=1
sets/legendaries/artifacts: none
gear: commanders_signet_of_battle=1
gloves_of_spiritual_grace=1
phantom_stalker_shoulders=1
deathstalkers_chestpiece=1
tidemothers_cover=1
cloak_of_the_restless_tribes=1
bloodstorm_buckle=1
zemlan_slicer=1
darkmoon_deck_fathoms=1
bonelash_paw=1
murky_cerulean_signet=1
silent_pillagers_footpads=1
kimbuls_razor_claw=1
amethyststudded_bindings=1
honorbound_outriders_pants=1
heart_of_azeroth=1
Love the addon, was using hero-rotaion and that was good also but I like seeing "into the future".
So, my suggestion is to provide sounds, yes sounds to assign to skills that are part of the rotation.
The sound would only trigger on the last (4th or 1st, depending on how you count the final icon)
The sounds should be single tone, like a bing, bong, 1bell, etc (no clapping or ringing or any long sounds)
The sounds would queue the user to hit whatever button is associated with that skill, thus the user does not need to constantly monitor the flow, sound would key him/her as to what to hit on the keyboard.
He/she would only need to look occasionally to see whats upcoming and the rest of the time use their eyes for more important things, like there surroundings/environment. Right now our sense of hearing is being wasted by Hekili not using it.
I play Outlaw/Assassination Rogue and I would at most use four sound (for Outlaw):
Dispatch
Pistol Shot
Slice and Dice
(maybe) Between the Eyes and or Vanish
But if you provide lets say 7 or 8 sounds (single tone) that should cover just about everything.
This would allow me to keep my eyes on the game and not so much on Hekili, sound good?!!
Thank you,
Pete
I have set the main icon to fade when I'm supposed to wait before using the ability. But I find my self very often using the ability too early. Is there a way instead of fading the icon, completely hide it? I wasn't sure if this was the right place to ask this so sorry about that
The event UNIT_SPELLCAST_SUCCEEDED
gets fired multiple times during the duration of Consecration, probably on each tick, so the code in Paladin.lua does not work as intended.
Also it would be nice if something like buff.consecration.remains
would not constantly be 3600
like it does right now, but the real expiration.
By default, Expel Harm uses healing_sphere.count to track whether it can be used. The exception below is spammed whenever the addon gets the value of healing_sphere.count, which internally resolves to GetSpellCount( action.expel_harm.id )
. As a temporary workaround, I have updated MonkBrewmaster.lua:580 to read usable = function () return IsUsableSpell( 115072 ) end,
Exception:
1711x Hekili\Classes\MonkBrewmaster.lua:255: attempt to call global 'GetSpellCount' (a string value)
Hekili\Classes\MonkBrewmaster.lua:255: in function <Hekili\Classes\MonkBrewmaster.lua:253>
Hekili\Classes\MonkBrewmaster.lua:580: in function <Hekili\Classes\MonkBrewmaster.lua:580>
(tail call): ?
Hekili\State.lua:4099: in function `IsUsable'
Hekili\Core.lua:684: in function `GetPredictionFromAPL'
Hekili\Core.lua:1025: in function `GetNextPrediction'
Hekili\Core.lua:1148: in function `ProcessHooks'
Hekili\UI.lua:1004: in function <Hekili\UI.lua:670>
Locals:
t = <table> {
}
k = "count"
(*temporary) = "GetSpellCount"
(*temporary) = 115072
(*temporary) = "attempt to call global 'GetSpellCount' (a string value)"
The sequence of abilities keeps disappearing and reappearing when playing Frost Dk and cooldowns are enabled.
Addon version: 8.0.0-a3
character data from issue-reporting:
build: @Project-Version@
level: 110
class: SHAMAN
spec: enhancement
talents: boulderfist
crashing_storm
earthen_spike
feral_lunge
landslide
searing_assault
spirit_wolf
traits: none
sets/legendaries/artifacts: none
gear: saurscale_girdle=1
saurscale_wristguards=1
sea_sapphire_band=1
beaten_copper_loop=1
saurscale_boots=1
scalebeast_claws=1
drape_of_the_golden_city=1
spaulders_of_the_champion=1
heart_of_azeroth=1
saurscale_chestguard=1
saurscale_gloves=1
saurscale_coif=1
enchanted_devilsaur_claw=1
saurscale_leggings=1
lucky_braid=1
Received Lua error:
Message: ...ngeCheck-2.0\LibRangeCheck-2.0\LibRangeCheck-2.0.lua:1343: Attempt to register unknown event "GLYPH_ADDED"
Time: Wed May 16 18:42:59 2018
Count: 1
Stack: ...ngeCheck-2.0\LibRangeCheck-2.0\LibRangeCheck-2.0.lua:1343: Attempt to register unknown event "GLYPH_ADDED"
[C]: in function RegisterEvent' ...ngeCheck-2.0\LibRangeCheck-2.0\LibRangeCheck-2.0.lua:1343: in function
activate'
...ngeCheck-2.0\LibRangeCheck-2.0\LibRangeCheck-2.0.lua:1389: in main chunk
Locals: (*temporary) = {
0 =
}
(*temporary) = "GLYPH_ADDED"
This error happens after unzipping the addon folder and then logging into the game. No other addons installed, no customization of the addon.
Fire Mage needs to deal with in-air travel time and differentiate between events that happen at cast time vs. impact.
Hello !
Since updating, so far 2 new errors are happening.
Channeling a word quest action (Quest: Gravity Matters [Invasion]):
142x Hekili\Classes.lua:990: attempt to call global 'formatKey' (a nil value)
Hekili\Classes.lua:990: in function `generate'
Hekili\State.lua:2632: in function <Hekili\State.lua:2621>
Hekili\State.lua:2663: in function <Hekili\State.lua:2621>
Hekili\State.lua:4505: in function `reset'
Hekili\Core.lua:1109: in function `ProcessHooks'
Hekili\UI.lua:1057: in function <Hekili\UI.lua:677>
Locals:
t = <table> {
lastApplied = 0
v1 = 286711
v2 = true
caster = "player"
duration = 2.184000
timeMod = 1
expires = 262305.485000
key = "casting"
name = "X-52 Delevitator"
applied = 262303.301000
v3 = 0
unit = "player"
count = 1
lastCount = 0
}
auraType = "buff"
unit = "player"
spell = "X-52 Delevitator"
_ = nil
_ = nil
startCast = 262303.301000
endCast = 262305.485000
_ = nil
_ = "X-52 Delevitator"
notInterruptible = true
spellID = 286711
castInfo = nil
(*temporary) = nil
(*temporary) = "X-52 Delevitator"
(*temporary) = "attempt to call global 'formatKey' (a nil value)"
class = <table> {
totems = <table> {
}
itemMap = <table> {
}
abilityList = <table> {
}
stateExprs = <table> {
}
auras = <table> {
}
pets = <table> {
}
itemPack = <table> {
}
interrupts = <table> {
}
gear = <table> {
}
trinkets = <table> {
}
packs = <table> {
}
itemList = <table> {
}
abilities = <table> {
}
file = "HUNTER"
stateTables = <table> {
}
stances = <table> {
}
primaryResource = "focus"
range = 8
specs = <table> {
}
hooks = <table> {
}
settings = <table> {
}
resources = <table> {
}
toggles = <table> {
}
powers = <table> {
}
stateFuncs = <table> {
}
pvptalents = <table> {
}
potionList = <table> {
}
itemSettings = <table> {
}
potion = "potion_of_bursting_blood"
talents = <table> {
}
potions = <table> {
}
num = 4
}
During Combat (Survival Hunter tested only atm):
813x Hekili\State.lua:1537: attempt to perform arithmetic on field 'remains' (a boolean value)
Hekili\State.lua:1537: in function <Hekili\State.lua:1279>
[string "-- Balance:default:19 recheck..."]:2: in function `Recheck'
Hekili\State.lua:1153: in function `recheck'
Hekili\Core.lua:722: in function `GetPredictionFromAPL'
Hekili\Core.lua:1029: in function `GetNextPrediction'
Hekili\Core.lua:1197: in function `ProcessHooks'
Hekili\UI.lua:1057: in function <Hekili\UI.lua:677>
Locals:
InCombatSkipped```
For some reason flying serpent kick is now showing up in action list since the latest update as of Sept 16th 2018
Needs to be removed and added to offensives.
Right now, active_dot.X
is a numeric value showing how many are applied at the time of reset (modified if/when buffs/debuffs are applied).
active_dot needs to be converted to count applications and account for expiration time. This would help things like Feral's AOE Rip falling off.
I saw some comments in the code of being able to reference number of enemies hit by a spell - did that ever get to a point that it could be used in APLs?
(either in 7.3.5 or 8.0)
More newbie questions:
For the Moon spell the spend and cast change depending on which is up, but the script only looks at the first one in there and uses that spend/cast. How would I have it dynamically update the spend/cast? Ideally I need to be able to reference the spend in the script as the astral power deficit vs. gain from the moon spell is the trigger in simc.
/script local spellid=202771;if select(7,GetSpellInfo(GetSpellInfo(spellid)))~=spellid then print("replaced") else print("not replaced") end;
202771 is the Full Moon spell id - if you run this script after casting Full Moon it will trigger the replaced (thanks interwebz) but I can't see how I would integrate this into the script - I can't run GetSpellInfo within an addHandler().
When on my Unholy DK i choose option Cooldowns then my rotation show me something like "4x Outbreak, Death Coil, 4x Outbreak..."
EDIT: It's problem with "Army of the Dead" skill
Getting errors when in combat and after a few action suggestions (gets to a certain point in the rotation?). The toon is only level 110 though but I have not gotten errors on levelling other toons like this.
605x Hekili\Classes\PriestShadow.lua:377: C stack overflow
Hekili\Classes\PriestShadow.lua:377: in function <Hekili\Classes\PriestShadow.lua:373>
(tail call): ?
Hekili\Classes\PriestShadow.lua:396: in function <Hekili\Classes\PriestShadow.lua:395>
(tail call): ?
Hekili\State.lua:2696: in function <Hekili\State.lua:2654>
Hekili\Classes\PriestShadow.lua:392: in function <Hekili\Classes\PriestShadow.lua:391>
(tail call): ?
Hekili\Classes\PriestShadow.lua:379: in function <Hekili\Classes\PriestShadow.lua:373>
(tail call): ?
Hekili\Classes\PriestShadow.lua:396: in function <Hekili\Classes\PriestShadow.lua:395>
(tail call): ?
Hekili\State.lua:2696: in function <Hekili\State.lua:2654>
...
Hekili\Classes\PriestShadow.lua:379: in function <Hekili\Classes\PriestShadow.lua:373>
(tail call): ?
Hekili\Classes\PriestShadow.lua:396: in function <Hekili\Classes\PriestShadow.lua:395>
(tail call): ?
Hekili\State.lua:1004: in function <Hekili\State.lua:969>
Hekili\State.lua:1125: in function `gain'
Hekili\Classes\PriestShadow.lua:1246: in function `handler'
Hekili\State.lua:4245: in function `RunHandler'
Hekili\Core.lua:1267: in function `ProcessHooks'
Hekili\UI.lua:1057: in function <Hekili\UI.lua:677>
Locals:
InCombatSkipped
Data from addon:
build: v8.1.0-20-beta10
level: 110
class: PRIEST
spec: shadow
talents: body_and_soul
fortress_of_the_mind
legacy_of_the_void
lingering_insanity
mind_bomb
misery
shadow_crash
traits: champion_of_azeroth=1
sets/legendaries/artifacts: sephuzs_secret=1
the_twins_painful_touch=1
tier21=4
gear: gilded_seraphs_crown=1
gilded_seraphs_drape=1
secrets_of_the_void=1
terminus_signaling_beacon=1
xalatath_blade_of_the_black_empire=1
gloves_of_grim_direction=1
azurelight_sages_cuffs=1
sandals_of_the_reborn_colossus=1
gilded_seraphs_leggings=1
cord_of_surging_hysteria=1
mantle_of_the_champion=1
gilded_seraphs_robes=1
the_twins_painful_touch=1
sephuzs_secret=1
tier21=4
prototype_personnel_decimator=1
heart_of_azeroth=1
I'm using AethysRotation and Hekili addons on the BfA beta to test them out for my characters. I am getting the following errors and a Lua Warning dialog when I log into the game if I have both addons enabled (disabling one or the other causes the error to go away).
6/30 10:02:54.684 Loading add-on Hekili
6/30 10:02:54.684 ** Loading table of contents Interface\AddOns\Hekili\Hekili.toc
6/30 10:02:54.684 ++ Loading file Interface\AddOns\Hekili\embeds.xml
6/30 10:02:54.684 ++ Loading file Interface\AddOns\Hekili\Libs\LibUIDropDownMenu\LibUIDropDownMenu.xml
6/30 10:02:54.684 ++ Loading file Interface\AddOns\Hekili\Libs\LibUIDropDownMenu\LibUIDropDownMenuTemplates.xml
6/30 10:02:54.684 Deferred XML Node object named L_UIDropDownMenuButtonTemplate already exists
6/30 10:02:54.684 Deferred XML Node object named L_UIDropDownListTemplate already exists
6/30 10:02:54.684 Deferred XML Node object named L_UIDropDownMenuTemplate already exists
I presume Hekili has the error because addons are loaded alphabetically.
I don't get this error when using both addons in the live version of the game, only the beta. I haven't tried these on PTR.
Under 82lvl before reach Army of the Dead rotation is broken with active Cooldowns option. Looks like "4x Outbreak, Death Coil, 4x Outbreak..."
To temporary repair that issue i moved Apocalypse and my racial to "None" group from default (cooldowns) and disabled Cooldowns.
After reach 82lvl and unlock AotD skill all is fine
Hello. Is it possible, like DK, to do it in rotation in the right moments? At least the tracking of the prok and so that the rotation offers to push the Death Strike? And for one thing I would like to ask how Necrotic Strike and Raise Abomination work in your rotation. I saw you added support for PVP talents, but I don’t see them in the rotation. Is this so intended? or am i doing something wrong? Thank.
I've been playing around with Shadow Priest and I've run into the same issue that I was having with Balance Druid's New Moon.
Shadow Priests have the spell Void Eruption, when you use this to go into Voidform it changes into the spell Void Bolt.
If I add Void Bolt to my APL it will never show up because:
[ 3] Checking void_bolt (Shadow - SimC_ShadowSingle - 2 )...
void_bolt is NOT known and enabled.
I'm using this for Void Bolt:
void_bolt = {
id = 205448,
--id = 228226,
cast = 0,
cooldown = function ()
return 5 * haste
end,
gcd = 'spell',
spend = 0,
spendType = 'insanity',
startsCombat = true,
texture = 1035040,
bind = "void_eruption",
buff = 'voidform',
usable = function ()
return buff.voidform.up
end,
handler = function ()
end,
},
Looking at State.lua I'm assuming that it's failing on:
if ability.known ~= nil then
if type( ability.known ) == 'number' then
return IsPlayerSpell( ability.known )
end
return ability.known
end
I've checked with a macro of /script print(IsSpellKnown(205448))
and /script print(IsPlayerSpell(205448))
to confirm that the spell isn't 'known' even when in Voidform.
Looking at https://wow.gamepedia.com/API_IsPlayerSpell it seems that querying an overriding spell doesn't always return as expected.
Should state:IsKnown
take into account the bind
option to also check if the overridden spell is known in these instances? Or an alternative check?
Hey Hekili - I updated to 7.3.5.23-13-g8d33cab-alpha from Curse Forge and am getting this error:
Message: Interface\AddOns\Hekili\State.lua:573: attempt to index field '?' (a nil value)
Time: 03/13/18 19:51:11
Count: 2371
Stack: Interface\AddOns\Hekili\State.lua:573: attempt to index field '?' (a nil value)
Interface\SharedXML\SharedBasicControls.lua:208: in function `origErrorHandler'
...rface\AddOns\TradeSkillMaster\Debug\ErrorHandler.lua:317: in function <...rface\AddOns\TradeSkillMaster\Debug\ErrorHandler.lua:300>
[C]: ?
Interface\AddOns\Hekili\State.lua:573: in function <Interface\AddOns\Hekili\State.lua:540>
Interface\AddOns\Hekili\State.lua:583: in function `removeBuff'
Interface\AddOns\Hekili\Classes\Warrior.lua:759: in function `handler'
Interface\AddOns\Hekili\Classes.lua:621: in function `runHandler'
Interface\AddOns\Hekili\Core.lua:1691: in function `ProcessHooks'
Interface\AddOns\Hekili\UI.lua:1025: in function <Interface\AddOns\Hekili\UI.lua:634>
Locals: errorMessage = "Interface\AddOns\Hekili\State.lua:573: attempt to index field '?' (a nil value)"
DisplayMessageInternal = <function> defined @Interface\SharedXML\SharedBasicControls.lua:191
MESSAGE_TYPE_ERROR = 0
A few notes:
Any ideas of things I can try?
Thank you and keep up the great work!
I'm looking to add the focus regen for Dire Beast/Dire Frenzy but I'm dumb and can't figure out how the code works - any assistance greatly appreciated.
A mentioned before, I discovered your add-on only recently. But I’m more than pleasantly surprised: It seems to work better than Hero Rotation with all non-Rogue classes ; significantly better. And also with Rogue (which is the native domain of Hero Rotation) I think that your add-on is giving me the better advices.
Chapeau!
Feel free to close this ticket once you’ve read it.
First off, thank you so much for all your hard work on Hekili. It has helped me learn so many specs I sucked at before. I really appreciate your awesome addon!
I'm running into this error:
Message: Interface\AddOns\Hekili\State.lua:573: attempt to index field '?' (a nil value)
Time: 02/24/18 13:39:17
Count: 223
Stack: Interface\AddOns\Hekili\State.lua:573: attempt to index field '?' (a nil value)
[C]: ?
Interface\AddOns\Hekili\State.lua:573: in function <Interface\AddOns\Hekili\State.lua:540>
Interface\AddOns\Hekili\State.lua:583: in function `removeBuff'
Interface\AddOns\Hekili\Classes\Warrior.lua:759: in function `handler'
Interface\AddOns\Hekili\Classes.lua:621: in function `runHandler'
Interface\AddOns\Hekili\Core.lua:1691: in function `ProcessHooks'
Interface\AddOns\Hekili\UI.lua:1025: in function <Interface\AddOns\Hekili\UI.lua:634>
Locals:
A few notes:
Any ideas of things I can try?
Thanks again and keep up the great work?
Hello guys,
U have a amazing addon. I have a issue to report.
I play as Enhancement shaman now as Monk and i am experience some performance issues:
So, could u check monk ww addon performance issue switching between CDs and Not CDs mode?
Ty so much
Demonic Strength causes the Felguard to spin. But if the felguard is currently spinning from felstorm, it's unable to use demonic strength, but the addon is currently not monitoring that.
Would be nice to have a Checkbox to have 0 Visibility when Mounted. Had the Check added already but it gets annoying to redo it every Update.
Also would suggest replacing the current system as it dosnt give many options or any combinations. I would replace it with enum Checkboxes (On/Off/Ignore) and have them work together.
For Example you could have a Checkbox for Target,Combat,etc. and based on whats choosed it could show up only when all conditions are matching. So if you have Target on true, mounted on false, and everything else on ignore it will show up when you have a target and not mounted.
Suggestions on Conditions:
Always (Ignore other Conditions)
Target (Player has a Target)
Combat (Player is in Combat)
TargetInCombat (Players Target is in Combat)
IsMounted (Player is Mounted)
PvP Target (Target is valid PvP Target)
As Spoken on Discord heres a List of Abilitys, hopefully Complete.
Pet Family: "Moths" Spellname: "Serenity Dust" SpellId: "264055"
Pet Family: "Sporebats" Spellname: "Spore Cloud" SpellId: "264056"
Pet Family: "Water Striders" Spellname: "Soothing Water" SpellId: "264262"
Pet Family: "Bats" Spellname: "Sonic Blast" SpellId: "264263"
Pet Family: "Nether Rays" Spellname: "Nether Shock" SpellId: "264264"
Pet Family: "Cranes" Spellname: "Chi-Ji's Tranquility" SpellId: "264028"
Pet Family: "Spirit Beasts" Spellname: "Spirit Shock" SpellId: "264265"
Pet Family: "Stags" Spellname: "Nature's Grace" SpellId: "264266"
Many times i see like rotation suggest me to cast Demonic Tyrant before Dreadstalkers, Vilefiend or Grimoire Felguard when they are ready to cast.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.