solidity

biscalc

Mar 8th, 2013
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.93 KB | None | 0 0
  1. -- statweights
  2. local weights = {
  3.     int = 4.51,
  4.     spi = 5.19,
  5.     hit = 5.19,
  6.     haste = 2.41,
  7.     mastery = 2.37,
  8.     crit = 1.95
  9. }
  10.  
  11. -- reforgable stats
  12. local refstats = {"spi","hit","haste","mastery","crit"}
  13.  
  14. -- slots
  15. local slots = {"head","neck","shoulders","back","chest","wrists","hands","waist","legs","feet","finger","finger","trinkets","trinkets","off_hand","main_hand"}
  16. local slotnames = {"head","neck","shoulders","back","chest","wrists","hands","waist","legs","feet","finger1","finger2","trinket1","trinket2","off_hand","main_hand"}
  17. -- gemstrings
  18. local gemstrings = {}
  19. gemstrings["m"] = "burning_primal"
  20. gemstrings["r"] = "160int"
  21. gemstrings["b"] = "80int_160spi"
  22. if weights["haste"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  23.     gemstrings["y"] = "80int_160haste"
  24. elseif weights["mastery"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  25.     gemstrings["y"] = "80int_160mastery"
  26. elseif weights["crit"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  27.     gemstrings["y"] = "80int_160crit"
  28. end
  29.  
  30. -- enchantstrings
  31. local enchantstrings = {
  32.     shoulders = ",enchant=200int_100crit",
  33.     back = ",enchant=180int",
  34.     chest = ",enchant=80all",
  35.     wrists = ",enchant=180int",
  36.     hands = ",enchant=170haste",
  37.     legs = ",enchant=285int_165spi",
  38.     feet = ",enchant=140mastery",
  39.     main_hand = ",enchant=jade_spirit",
  40.     off_hand = ",enchant=165int",
  41. }
  42.  
  43. -- available items
  44. local items = {
  45.     head = {
  46.         {
  47.             id = 96696,
  48.             name = "Headpiece of the Witch Doctor",
  49.             int = 1519,
  50.             spi = 1088,
  51.             hit = 0,
  52.             haste = 995,
  53.             mastery = 0,
  54.             crit = 0,
  55.             s1 = "m",
  56.             s2 = "y",
  57.             s3 = "",
  58.             sbval = 180,
  59.             sbstat = "crit"
  60.         },
  61.         {
  62.             id = 96509,
  63.             name = "Clear-Mind Helm",
  64.             int = 1519,
  65.             spi = 0,
  66.             hit = 0,
  67.             haste = 1070,
  68.             mastery = 1023,
  69.             crit = 0,
  70.             s1 = "m",
  71.             s2 = "b",
  72.             s3 = "",
  73.             sbval = 180,
  74.             sbstat = "int"
  75.         }
  76.     },
  77.     neck = {
  78.         {
  79.             id = 96402,
  80.             name = "Horridon's Tusk Fragment",
  81.             int = 980,
  82.             spi = 558,
  83.             hit = 0,
  84.             haste = 0,
  85.             mastery = 710,
  86.             crit = 0,
  87.             s1 = "",
  88.             s2 = "",
  89.             s3 = "",
  90.             sbval = 0,
  91.             sbstat = ""
  92.         },
  93.         {
  94.             id = 96537,
  95.             name = "Passionfire Choker",
  96.             int = 900,
  97.             spi = 581,
  98.             hit = 0,
  99.             haste = 0,
  100.             mastery = 0,
  101.             crit = 633,
  102.             s1 = "y",
  103.             s2 = "",
  104.             s3 = "",
  105.             sbval = 60,
  106.             sbstat = "crit"
  107.         },
  108.         {
  109.             id = 96560,
  110.             name = "Soul Prism of Lei-Shen",
  111.             int = 820,
  112.             spi = 665,
  113.             hit = 0,
  114.             haste = 417,
  115.             mastery = 0,
  116.             crit = 0,
  117.             s1 = "b",
  118.             s2 = "b",
  119.             s3 = "",
  120.             sbval = 120,
  121.             sbstat = "spi"
  122.         },
  123.         {
  124.             id = 96708,
  125.             name = "Necklace of the Terra-Cotta Invoker",
  126.             int = 900,
  127.             spi = 0,
  128.             hit = 642,
  129.             haste = 565,
  130.             mastery = 0,
  131.             crit = 0,
  132.             s1 = "r",
  133.             s2 = "",
  134.             s3 = "",
  135.             sbval = 60,
  136.             sbstat = "hit"
  137.         },
  138.         {
  139.             id = 96713,
  140.             name = "Necklace of the Terra-Cotta Mender",
  141.             int = 900,
  142.             spi = 652,
  143.             hit = 0,
  144.             haste = 0,
  145.             mastery = 549,
  146.             crit = 0,
  147.             s1 = "r",
  148.             s2 = "",
  149.             s3 = "",
  150.             sbval = 60,
  151.             sbstat = "spi"
  152.         },
  153.         {
  154.             id = 96453,
  155.             name = "Megaera's Shining Eye",
  156.             int = 980,
  157.             spi = 0,
  158.             hit = 654,
  159.             haste = 0,
  160.             mastery = 0,
  161.             crit = 654,
  162.             s1 = "",
  163.             s2 = "",
  164.             s3 = "",
  165.             sbval = 0,
  166.             sbstat = ""
  167.         }
  168.     },
  169.     shoulders = {
  170.         {
  171.             id = 96698,
  172.             name = "Shoulderwraps of the Witch Doctor",
  173.             int = 1147,
  174.             spi = 0,
  175.             hit = 0,
  176.             haste = 817,
  177.             mastery = 0,
  178.             crit = 748,
  179.             s1 = "r",
  180.             s2 = "y",
  181.             s3 = "",
  182.             sbval = 120,
  183.             sbstat = "haste"
  184.         },
  185.         {
  186.             id = 96439,
  187.             name = "Spaulders of Quaking Fear",
  188.             int = 1227,
  189.             spi = 942,
  190.             hit = 0,
  191.             haste = 642,
  192.             mastery = 0,
  193.             crit = 0,
  194.             s1 = "r",
  195.             s2 = "",
  196.             s3 = "",
  197.             sbval = 60,
  198.             sbstat = "spi"
  199.         },
  200.         {
  201.             id = 96615,
  202.             name = "Abandoned Spaulders of Renewal",
  203.             int = 1227,
  204.             spi = 0,
  205.             hit = 0,
  206.             haste = 0,
  207.             mastery = 844,
  208.             crit = 809,
  209.             s1 = "b",
  210.             s2 = "",
  211.             s3 = "",
  212.             sbval = 60,
  213.             sbstat = "int"
  214.         }
  215.     },
  216.     back = {
  217.         {
  218.             id = 95013,
  219.             name = "Black Night Thundercloak",
  220.             int = 957,
  221.             spi = 651,
  222.             hit = 0,
  223.             haste = 0,
  224.             mastery = 651,
  225.             crit = 0,
  226.             s1 = "y",
  227.             s2 = "",
  228.             s3 = "",
  229.             sbval = 60,
  230.             sbstat = "haste"
  231.         },
  232.         {
  233.             id = 95014,
  234.             name = "Red Sky Cloudcloak",
  235.             int = 957,
  236.             spi = 0,
  237.             hit = 701,
  238.             haste = 566,
  239.             mastery = 0,
  240.             crit = 0,
  241.             s1 = "y",
  242.             s2 = "",
  243.             s3 = "",
  244.             sbval = 60,
  245.             sbstat = "haste"
  246.         },
  247.         {
  248.             id = 96383,
  249.             name = "Drape of Booming Nights",
  250.             int = 980,
  251.             spi = 719,
  252.             hit = 0,
  253.             haste = 0,
  254.             mastery = 0,
  255.             crit = 542,
  256.             s1 = "",
  257.             s2 = "",
  258.             s3 = "",
  259.             sbval = 0,
  260.             sbstat = ""
  261.         },
  262.         {
  263.             id = 96435,
  264.             name = "Shimmershell Cape",
  265.             int = 980,
  266.             spi = 0,
  267.             hit = 0,
  268.             haste = 0,
  269.             mastery = 682,
  270.             crit = 605,
  271.             s1 = "",
  272.             s2 = "",
  273.             s3 = "",
  274.             sbval = 0,
  275.             sbstat = ""
  276.         },
  277.         {
  278.             id = 96485,
  279.             name = "Deadly Glare Cape",
  280.             int = 900,
  281.             spi = 0,
  282.             hit = 0,
  283.             haste = 633,
  284.             mastery = 0,
  285.             crit = 581,
  286.             s1 = "r",
  287.             s2 = "",
  288.             s3 = "",
  289.             sbval = 60,
  290.             sbstat = "int"
  291.         },
  292.         {
  293.             id = 96517,
  294.             name = "Constantly Accelerating Cape",
  295.             int = 900,
  296.             spi = 549,
  297.             hit = 0,
  298.             haste = 652,
  299.             mastery = 0,
  300.             crit = 0,
  301.             s1 = "r",
  302.             s2 = "",
  303.             s3 = "",
  304.             sbval = 60,
  305.             sbstat = "int"
  306.         }
  307.     },
  308.     chest = {
  309.         {
  310.             id = 96694,
  311.             name = "Hauberk of the Witch Doctor",
  312.             int = 1519,
  313.             spi = 966,
  314.             hit = 0,
  315.             haste = 0,
  316.             mastery = 1105,
  317.             crit = 0,
  318.             s1 = "r",
  319.             s2 = "y",
  320.             s3 = "b",
  321.             sbval = 180,
  322.             sbstat = "int"
  323.         },
  324.         {
  325.             id = 96532,
  326.             name = "Ro'shak's Molten Chain",
  327.             int = 1599,
  328.             spi = 1093,
  329.             hit = 0,
  330.             haste = 1093,
  331.             mastery = 0,
  332.             crit = 0,
  333.             s1 = "r",
  334.             s2 = "r",
  335.             s3 = "",
  336.             sbval = 120,
  337.             sbstat = "int"
  338.         },
  339.         {
  340.             id = 96459,
  341.             name = "Chain of Consuming Magic",
  342.             int = 1599,
  343.             spi = 1226,
  344.             hit = 0,
  345.             haste = 0,
  346.             mastery = 866,
  347.             crit = 0,
  348.             s1 = "y",
  349.             s2 = "y",
  350.             s3 = "",
  351.             sbval = 120,
  352.             sbstat = "int"
  353.         },
  354.         {
  355.             id = 95035,
  356.             name = "Chains of Counted Souls",
  357.             int = 1620,
  358.             spi = 0,
  359.             hit = 0,
  360.             haste = 1228,
  361.             mastery = 938,
  362.             crit = 0,
  363.             s1 = "r",
  364.             s2 = "r",
  365.             s3 = "r",
  366.             sbval = 180,
  367.             sbstat = "int"
  368.         }
  369.     },
  370.     wrists = {
  371.         {
  372.             id = 96489,
  373.             name = "Vein-Cover Bracers",
  374.             int = 980,
  375.             spi = 736,
  376.             hit = 0,
  377.             haste = 512,
  378.             mastery = 0,
  379.             crit = 0,
  380.             s1 = "",
  381.             s2 = "",
  382.             s3 = "",
  383.             sbval = 0,
  384.             sbstat = ""
  385.         }
  386.     },
  387.     hands = {
  388.         {
  389.             id = 96695,
  390.             name = "Gloves of the Witch Doctor",
  391.             int = 1227,
  392.             spi = 0,
  393.             hit = 0,
  394.             haste = 0,
  395.             mastery = 849,
  396.             crit = 769,
  397.             s1 = "r",
  398.             s2 = "",
  399.             s3 = "",
  400.             sbval = 60,
  401.             sbstat = "int"
  402.         },
  403.         {
  404.             id = 96466,
  405.             name = "Grasp of the Ruthless Mother",
  406.             int = 1307,
  407.             spi = 786,
  408.             hit = 0,
  409.             haste = 0,
  410.             mastery = 922,
  411.             crit = 0,
  412.             s1 = "r",
  413.             s2 = "",
  414.             s3 = "",
  415.             sbval = 60,
  416.             sbstat = "int"
  417.         },
  418.         {
  419.             id = 96545,
  420.             name = "Fingers of the Night",
  421.             int = 1227,
  422.             spi = 930,
  423.             hit = 0,
  424.             haste = 0,
  425.             mastery = 0,
  426.             crit = 633,
  427.             s1 = "y",
  428.             s2 = "",
  429.             s3 = "",
  430.             sbval = 60,
  431.             sbstat = "int"
  432.         }
  433.     },
  434.     waist = {
  435.         {
  436.             id = 94999,
  437.             name = "Longdraw Chain Belt",
  438.             int = 1222,
  439.             spi = 0,
  440.             hit = 0,
  441.             haste = 924,
  442.             mastery = 712,
  443.             crit = 0,
  444.             s1 = "r",
  445.             s2 = "b",
  446.             s3 = "b",
  447.             sbval = 120,
  448.             sbstat = "int"
  449.         },
  450.         {
  451.             id = 96458,
  452.             name = "Links of the Bifurcated Tongue",
  453.             int = 1147,
  454.             spi = 804,
  455.             hit = 0,
  456.             haste = 0,
  457.             mastery = 769,
  458.             crit = 0,
  459.             s1 = "r",
  460.             s2 = "r",
  461.             s3 = "y",
  462.             sbval = 120,
  463.             sbstat = "spi"
  464.         },
  465.         {
  466.             id = 96717,
  467.             name = "Abandoned Zandalari Waterchain",
  468.             int = 1227,
  469.             spi = 0,
  470.             hit = 0,
  471.             haste = 746,
  472.             mastery = 0,
  473.             crit = 882,
  474.             s1 = "r",
  475.             s2 = "b",
  476.             s3 = "",
  477.             sbval = 60,
  478.             sbstat = "int"
  479.         }
  480.     },
  481.     legs = {
  482.         {
  483.             id = 96697,
  484.             name = "Kilt of the Witch Doctor",
  485.             int = 1599,
  486.             spi = 0,
  487.             hit = 0,
  488.             haste = 937,
  489.             mastery = 0,
  490.             crit = 1201,
  491.             s1 = "y",
  492.             s2 = "b",
  493.             s3 = "",
  494.             sbval = 120,
  495.             sbstat = "int"
  496.         },
  497.         {
  498.             id = 96564,
  499.             name = "Leggings of the Violent Gale",
  500.             int = 1519,
  501.             spi = 1178,
  502.             hit = 0,
  503.             haste = 0,
  504.             mastery = 834,
  505.             crit = 0,
  506.             s1 = "r",
  507.             s2 = "r",
  508.             s3 = "r",
  509.             sbval = 180,
  510.             sbstat = "int"
  511.         },
  512.         {
  513.             id = 96407,
  514.             name = "Legguards of Scintillating Scales",
  515.             int = 1599,
  516.             spi = 0,
  517.             hit = 0,
  518.             haste = 0,
  519.             mastery = 1093,
  520.             crit = 1093,
  521.             s1 = "r",
  522.             s2 = "b",
  523.             s3 = "",
  524.             sbval = 120,
  525.             sbstat = "int"
  526.         },
  527.         {
  528.             id = 95027,
  529.             name = "Legguards of Awaked Repair",
  530.             int = 1620,
  531.             spi = 1228,
  532.             hit = 0,
  533.             haste = 0,
  534.             mastery = 0,
  535.             crit = 938,
  536.             s1 = "r",
  537.             s2 = "y",
  538.             s3 = "y",
  539.             sbval = 180,
  540.             sbstat = "mastery"
  541.         }
  542.     },
  543.     feet = {
  544.         {
  545.             id = 95008,
  546.             name = "World-Mote Sabatons",
  547.             int = 1222,
  548.             spi = 850,
  549.             hit = 0,
  550.             haste = 0,
  551.             mastery = 0,
  552.             crit = 805,
  553.             s1 = "y",
  554.             s2 = "b",
  555.             s3 = "",
  556.             sbval = 120,
  557.             sbstat = "int"
  558.         },
  559.         {
  560.             id = 96387,
  561.             name = "Ghostbinder Greatboots",
  562.             int = 1227,
  563.             spi = 911,
  564.             hit = 0,
  565.             haste = 691,
  566.             mastery = 0,
  567.             crit = 0,
  568.             s1 = "y",
  569.             s2 = "",
  570.             s3 = "",
  571.             sbval = 60,
  572.             sbstat = "spi"
  573.         },
  574.         {
  575.             id = 96711,
  576.             name = "Spiritbound Boots",
  577.             int = 1307,
  578.             spi = 0,
  579.             hit = 0,
  580.             haste = 0,
  581.             mastery = 871,
  582.             crit = 871,
  583.             s1 = "",
  584.             s2 = "",
  585.             s3 = "",
  586.             sbval = 0,
  587.             sbstat = ""
  588.         }
  589.     },
  590.     finger = {
  591.         {
  592.             id = 95018,
  593.             name = "Ra-den's Evolving Signet",
  594.             int = 957,
  595.             spi = 658,
  596.             hit = 0,
  597.             haste = 624,
  598.             mastery = 0,
  599.             crit = 0,
  600.             s1 = "b",
  601.             s2 = "",
  602.             s3 = "",
  603.             sbval = 60,
  604.             sbstat = "int"
  605.         },
  606.         {
  607.             id = 95019,
  608.             name = "Ra-den's Summoning Band",
  609.             int = 957,
  610.             spi = 0,
  611.             hit = 509,
  612.             haste = 744,
  613.             mastery = 0,
  614.             crit = 0,
  615.             s1 = "b",
  616.             s2 = "",
  617.             s3 = "",
  618.             sbval = 60,
  619.             sbstat = "int"
  620.         },
  621.         {
  622.             id = 96382,
  623.             name = "Jin'rokh's Dreamshard",
  624.             int = 980,
  625.             spi = 0,
  626.             hit = 605,
  627.             haste = 0,
  628.             mastery = 0,
  629.             crit = 682,
  630.             s1 = "",
  631.             s2 = "",
  632.             s3 = "",
  633.             sbval = 0,
  634.             sbstat = ""
  635.         },
  636.         {
  637.             id = 96403,
  638.             name = "Petrified Eye of the Basilisk",
  639.             int = 980,
  640.             spi = 745,
  641.             hit = 0,
  642.             haste = 0,
  643.             mastery = 497,
  644.             crit = 0,
  645.             s1 = "",
  646.             s2 = "",
  647.             s3 = "",
  648.             sbval = 0,
  649.             sbstat = ""
  650.         },
  651.         {
  652.             id = 96486,
  653.             name = "Durumu's Captive Eyeballs",
  654.             int = 900,
  655.             spi = 672,
  656.             hit = 0,
  657.             haste = 0,
  658.             mastery = 0,
  659.             crit = 496,
  660.             s1 = "r",
  661.             s2 = "",
  662.             s3 = "",
  663.             sbval = 60,
  664.             sbstat = "spi"
  665.         },
  666.         {
  667.             id = 96529,
  668.             name = "Ro'shak's Remembrance",
  669.             int = 900,
  670.             spi = 0,
  671.             hit = 0,
  672.             haste = 0,
  673.             mastery = 478,
  674.             crit = 703,
  675.             s1 = "b",
  676.             s2 = "",
  677.             s3 = "",
  678.             sbval = 60,
  679.             sbstat = "haste"
  680.         }
  681.     },
  682.     trinkets = {
  683.         {
  684.             id = 96516,
  685.             name = "Cha'Ye's Essence of Brilliance",
  686.             int = 0,
  687.             spi = 0,
  688.             hit = 0,
  689.             haste = 0,
  690.             mastery = 0,
  691.             crit = 1657,
  692.             s1 = "",
  693.             s2 = "",
  694.             s3 = "",
  695.             sbval = 0,
  696.             sbstat = ""
  697.         },
  698.         {
  699.             id = 96558,
  700.             name = "Unerring Vision of Lei-Shen",
  701.             int = 1657,
  702.             spi = 0,
  703.             hit = 0,
  704.             haste = 0,
  705.             mastery = 0,
  706.             crit = 0,
  707.             s1 = "",
  708.             s2 = "",
  709.             s3 = "",
  710.             sbval = 0,
  711.             sbstat = ""
  712.         },
  713.         {
  714.             id = 96413,
  715.             name = "Wushoolay's Final Choice",
  716.             int = 0,
  717.             spi = 0,
  718.             hit = 1657,
  719.             haste = 0,
  720.             mastery = 0,
  721.             crit = 0,
  722.             s1 = "",
  723.             s2 = "",
  724.             s3 = "",
  725.             sbval = 0,
  726.             sbstat = ""
  727.         },
  728.         {
  729.             id = 96455,
  730.             name = "Breath of the Hydra",
  731.             int = 0,
  732.             spi = 0,
  733.             hit = 0,
  734.             haste = 1657,
  735.             mastery = 0,
  736.             crit = 0,
  737.             s1 = "",
  738.             s2 = "",
  739.             s3 = "",
  740.             sbval = 0,
  741.             sbstat = ""
  742.         }
  743.     },
  744.     off_hand = {
  745.         {
  746.             id = 96436,
  747.             name = "Torto's Discarded Shell",
  748.             int = 900,
  749.             spi = 676,
  750.             hit = 0,
  751.             haste = 525,
  752.             mastery = 0,
  753.             crit = 0,
  754.             s1 = "b",
  755.             s2 = "",
  756.             s3 = "",
  757.             sbval = 60,
  758.             sbstat = "int"
  759.         },
  760.         {
  761.             id = 96538,
  762.             name = "Shield of Twinned Despair",
  763.             int = 900,
  764.             spi = 712,
  765.             hit = 0,
  766.             haste = 0,
  767.             mastery = 463,
  768.             crit = 0,
  769.             s1 = "r",
  770.             s2 = "",
  771.             s3 = "",
  772.             sbval = 60,
  773.             sbstat = "int"
  774.         },
  775.         {
  776.             id = 96454,
  777.             name = "Fetish of the Hydra",
  778.             int = 900,
  779.             spi = 0,
  780.             hit = 642,
  781.             haste = 0,
  782.             mastery = 0,
  783.             crit = 565,
  784.             s1 = "b",
  785.             s2 = "",
  786.             s3 = "",
  787.             sbval = 60,
  788.             sbstat = "int"
  789.         },
  790.         {
  791.             id = 96530,
  792.             name = "Orb of Arcing Lightning",
  793.             int = 900,
  794.             spi = 696,
  795.             hit = 0,
  796.             haste = 472,
  797.             mastery = 0,
  798.             crit = 0,
  799.             s1 = "r",
  800.             s2 = "",
  801.             s3 = "",
  802.             sbval = 60,
  803.             sbstat = "int"
  804.         },
  805.         {
  806.             id = 96562,
  807.             name = "Lei-Shen's Orb of Command",
  808.             int = 900,
  809.             spi = 0,
  810.             hit = 0,
  811.             haste = 518,
  812.             mastery = 0,
  813.             crit = 670,
  814.             s1 = "r",
  815.             s2 = "",
  816.             s3 = "",
  817.             sbval = 60,
  818.             sbstat = "int"
  819.         }
  820.     },
  821.     main_hand = {
  822.         {
  823.             id = 96559,
  824.             name = "Torall, Rod of the Shattered Throne",
  825.             int = 754,
  826.             spi = 533,
  827.             hit = 0,
  828.             haste = 342,
  829.             mastery = 0,
  830.             crit = 0,
  831.             s1 = "r",
  832.             s2 = "",
  833.             s3 = "",
  834.             sbval = 60,
  835.             sbstat = "int"
  836.         },
  837.         {
  838.             id = 96414,
  839.             name = "Amun-Thoth, Sul's Spiritrending Talons",
  840.             int = 674,
  841.             spi = 506,
  842.             hit = 0,
  843.             haste = 0,
  844.             mastery = 389,
  845.             crit = 0,
  846.             s1 = "b",
  847.             s2 = "",
  848.             s3 = "",
  849.             sbval = 60,
  850.             sbstat = "int"
  851.         },
  852.         {
  853.             id = 96518,
  854.             name = "Athame of the Sanguine Ritual",
  855.             int = 674,
  856.             spi = 0,
  857.             hit = 0,
  858.             haste = 463,
  859.             mastery = 463,
  860.             crit = 0,
  861.             s1 = "r",
  862.             s2 = "",
  863.             s3 = "",
  864.             sbval = 60,
  865.             sbstat = "int"
  866.         },
  867.         {
  868.             id = 96487,
  869.             name = "Ritual Dagger of the Mind's Eye",
  870.             int = 674,
  871.             spi = 499,
  872.             hit = 0,
  873.             haste = 0,
  874.             mastery = 0,
  875.             crit = 401,
  876.             s1 = "r",
  877.             s2 = "",
  878.             s3 = "",
  879.             sbval = 60,
  880.             sbstat = "int"
  881.         }
  882.     }
  883. }
  884.  
  885. --function gem(s1, s2, s3, sbval, sbstat)
  886. function gem(item)
  887.     local s1 = item.s1
  888.     local s2 = item.s2
  889.     local s3 = item.s3
  890.     local sbval = item.sbval
  891.     local sbstat = item.sbstat
  892.     local pure = 0
  893.     local match = 0
  894.     local bonus = true
  895.     local gemstring = ",gems="
  896.     -- pure red
  897.     if s1 ~= "" then
  898.         pure = pure + 160 * weights["int"]
  899.         if s1 ~= "r" then
  900.             bonus = false
  901.         end
  902.     end
  903.     if s2 ~= "" then
  904.         pure = pure + 160 * weights["int"]
  905.         if s2 ~= "r" then
  906.             bonus = false
  907.         end
  908.     end
  909.     if s3 ~= "" then
  910.         pure = pure + 160 * weights["int"]
  911.         if s3 ~= "r" then
  912.             bonus = false
  913.         end
  914.     end
  915.     if bonus and sbval > 0 then
  916.         pure = pure + sbval * weights[sbstat]
  917.     end
  918.     if s1 == "r" then
  919.         match = match + 160 * weights["int"]
  920.     elseif s1 == "y" then
  921.         match = match + 80 * weights["int"] + 160 * math.max(weights["haste"],weights["mastery"],weights["crit"])
  922.     elseif s1 == "b" then
  923.         match = match + 80 * weights["int"] + 160 * weights["spi"]
  924.     end
  925.     if s2 == "r" then
  926.         match = match + 160 * weights["int"]
  927.     elseif s2 == "y" then
  928.         match = match + 80 * weights["int"] + 160 * math.max(weights["haste"],weights["mastery"],weights["crit"])
  929.     elseif s2 == "b" then
  930.         match = match + 80 * weights["int"] + 160 * weights["spi"]
  931.     end
  932.     if s3 == "r" then
  933.         match = match + 160 * weights["int"]
  934.     elseif s3 == "y" then
  935.         match = match + 80 * weights["int"] + 160 * math.max(weights["haste"],weights["mastery"],weights["crit"])
  936.     elseif s3 == "b" then
  937.         match = match + 80 * weights["int"] + 160 * weights["spi"]
  938.     end
  939.     if sbval > 0 then
  940.         match = match + sbval * weights[sbstat]
  941.     end
  942.     if s1 ~= "" then
  943.         if match > pure then
  944.             --print("match sockets for "..match.."dps. pure would net "..pure.."dps.")
  945.             gemstring = gemstring .. gemstrings[s1]
  946.             if s2 ~= "" then
  947.                 gemstring = gemstring.."_"..gemstrings[s2]
  948.             end
  949.             if s3 ~= "" then
  950.                 gemstring = gemstring.."_"..gemstrings[s3]
  951.             end
  952.             gemstring = gemstring.."_"..sbval..sbstat
  953.             return gemstring
  954.         else
  955.             --print("socket pure red for "..pure.."dps. matching would net "..match.."dps.")
  956.             if s1 == "m" then
  957.                 gemstring = gemstring .. gemstrings["m"]
  958.             else
  959.                 gemstring = gemstring .. gemstrings["r"]
  960.             end
  961.             if s2 ~= "" then
  962.                 gemstring = gemstring.."_"..gemstrings["r"]
  963.             end
  964.             if s3 ~= "" then
  965.                 gemstring = gemstring.."_"..gemstrings["r"]
  966.             end
  967.             if bonus then
  968.                 gemstring = gemstring.."_"..sbval..sbstat
  969.             end
  970.             return gemstring
  971.         end
  972.     else
  973.         return ""
  974.     end
  975. end
  976.  
  977. function sanitycheck(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand)
  978.     local scitems = {items["head"][head], items["neck"][neck], items["shoulders"][shoulders], items["back"][back], items["chest"][chest], items["wrists"][wrists], items["hands"][hands], items["waist"][waist], items["legs"][legs], items["feet"][feet], items["finger"][finger1], items["finger"][finger2], items["trinkets"][trinket1], items["trinkets"][trinket2], items["off_hand"][off_hand], items["main_hand"][main_hand]}
  979.     local unreforged_spi = 245  -- spi from leg and chest enchants
  980.     local spi = 0
  981.     for i = 1,#scitems do
  982.         local gstring = gem(scitems[i])
  983.         local spistart,_ = string.find(gstring,"spi")
  984.         if spistart then
  985.             spivaluestart = string.find(gstring,"_",spistart-4) + 1
  986.             unreforged_spi = unreforged_spi + string.sub(gstring,spivaluestart,spistart-1)
  987.         end
  988.         spi = spi + scitems[i].spi + scitems[i].hit
  989.     end
  990.     --if spi > (5100-unreforged_spi)/0.6 then
  991.     if spi > 8225 then
  992.         --print("too much spi: "..spi.."\n")
  993.         return false
  994.     end
  995.     return true
  996. end
  997.  
  998. function parse_gemstring(str)
  999.     local bonus = {
  1000.         int = 0,
  1001.         spi = 0,
  1002.         hit = 0,
  1003.         haste = 0,
  1004.         mastery = 0,
  1005.         crit = 0
  1006.     }
  1007.     if string.find(str,"burning") then
  1008.         bonus["int"] = bonus["int"] + 216
  1009.     end
  1010.     for gem in string.gmatch(str,"%d+%a+") do
  1011.         local value = string.sub(gem,1,string.find(gem,"%a+")-1)
  1012.         local stat = string.sub(gem,string.find(gem,"%a+"))
  1013.         if stat == "all" then stat = "int" end
  1014.         --print(gem.." => "..value.." "..stat)
  1015.         bonus[stat] = bonus[stat] + tonumber(value)
  1016.     end
  1017.     return bonus
  1018.     -- for k,v in pairs(bonus) do
  1019.         -- print(k.." "..v)
  1020.     -- end
  1021. end
  1022.  
  1023. function reforge(item)
  1024.     local refs = {""}
  1025.     --get highest non-hit target not on item
  1026.     local maxtarget = 0
  1027.     local maxval = 0
  1028.     for target = 3,5 do
  1029.         if (item[refstats[target]] == 0) and (weights[refstats[target]] > maxval) then
  1030.             maxtarget = target
  1031.             maxval = weights[refstats[target]]
  1032.         end
  1033.     end
  1034.     --print("max: "..maxtarget)
  1035.     --get lowest non-hit source on item
  1036.     local minsource = 0
  1037.     local minval = 100
  1038.     for source = 3,5 do
  1039.         if (item[refstats[source]] > 0) and (weights[refstats[source]] < minval) then
  1040.             minsource = source
  1041.             minval = weights[refstats[source]]
  1042.         end
  1043.     end
  1044.     --print("min: "..minsource)
  1045.     --spi/hit to highest target
  1046.     for source = 1,2 do
  1047.         if item[refstats[source]] > 0 then
  1048.             table.insert(refs,",reforge="..refstats[source].."_"..refstats[maxtarget])
  1049.         end
  1050.     end
  1051.     --lowest to highest
  1052.     if (maxtarget > 0) and (minsource > 0) and (weights[refstats[maxtarget]] > weights[refstats[minsource]]) then
  1053.         table.insert(refs,",reforge="..refstats[minsource].."_"..refstats[maxtarget])
  1054.     end
  1055.     --all nonhit/spi to spi if no hit/spi on item
  1056.     if (item["hit"] == 0) and (item["spi"] == 0) then
  1057.         for source = 3,5 do
  1058.             if item[refstats[source]] > 0 then
  1059.                 table.insert(refs,",reforge="..refstats[source].."_spi")
  1060.             end
  1061.         end
  1062.     end
  1063.     if #refs > 1 then
  1064.         table.remove(refs,1)
  1065.     end
  1066.     return refs
  1067. end
  1068.  
  1069. -- local bla = reforge(items["head"][2])
  1070. -- for r = 1,#bla do print(bla[r]) end
  1071. --exit
  1072.  
  1073. function reforgeset(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand)
  1074.     -- reforge a to b -> a=ceil(0.6*a), b=b+a-ceil(0.6*a)
  1075.     local refitems = {items["head"][head], items["neck"][neck], items["shoulders"][shoulders], items["back"][back], items["chest"][chest], items["wrists"][wrists], items["hands"][hands], items["waist"][waist], items["legs"][legs], items["feet"][feet], items["finger"][finger1], items["finger"][finger2], items["trinkets"][trinket1], items["trinkets"][trinket2], items["off_hand"][off_hand], items["main_hand"][main_hand]}
  1076.     local refcombo = {}
  1077.     for i = 1,#refitems do
  1078.         table.insert(refcombo,reforge(refitems[i]))
  1079.     end
  1080.     return refcombo
  1081. end
  1082.  
  1083. --local bla = reforgeset(1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1)
  1084. -- for a = 1,#bla do
  1085.     -- for b = 1,#bla[a] do
  1086.         -- print(bla[a][b])
  1087.     -- end
  1088. -- end
  1089.  
  1090. -- returns the source and target stat from a reforge string
  1091. function parsereforge(str)
  1092.     local retval = {}
  1093.     --for word in string.gmatch(str,"%a+") do print(word) end
  1094.     --print(str)
  1095.     for w in string.gmatch(str,"%a+") do
  1096.         table.insert(retval,w)
  1097.     end
  1098.     return retval
  1099. end
  1100.  
  1101.  
  1102. -- local bla = parsereforge(",reforge=spi_mastery")
  1103. -- for i = 1,#bla do
  1104.     -- print(bla[i])
  1105. -- end
  1106.  
  1107. local maxrefset = {}
  1108. function calcvalue(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand,curmax)
  1109.     local cvitems = {items["head"][head], items["neck"][neck], items["shoulders"][shoulders], items["back"][back], items["chest"][chest], items["wrists"][wrists], items["hands"][hands], items["waist"][waist], items["legs"][legs], items["feet"][feet], items["finger"][finger1], items["finger"][finger2], items["trinkets"][trinket1], items["trinkets"][trinket2], items["off_hand"][off_hand], items["main_hand"][main_hand]}
  1110.     local int = 0
  1111.     local spi = 0       -- including hit
  1112.     local haste = 0
  1113.     local mastery = 0
  1114.     local crit = 0
  1115.     local gembonus = {}
  1116.     local enchbonus = {int = 0, spi = 0, haste = 0, mastery = 0, crit = 0}
  1117.     local value = 0
  1118.     for i = 1,#cvitems do
  1119.         gembonus = parse_gemstring(gem(cvitems[i]))
  1120.         local estr = enchantstrings[slots[i]]
  1121.         if estr ~= nil then enchbonus = parse_gemstring(enchantstrings[slots[i]]) end
  1122.         int = int + cvitems[i].int + gembonus["int"] + enchbonus["int"]
  1123.         spi = spi + cvitems[i].spi + gembonus["spi"] + enchbonus["spi"] + cvitems[i].hit + gembonus["hit"]
  1124.         haste = haste + cvitems[i].haste + gembonus["haste"] + enchbonus["haste"]
  1125.         mastery = mastery + cvitems[i].mastery + gembonus["mastery"] + enchbonus["mastery"]
  1126.         crit = crit + cvitems[i].crit + gembonus["crit"] + enchbonus["crit"]
  1127.     end
  1128.     -- establish upper bounds of current item value. assumption: all hit above will be reforged to the lowest valued stat, missing hit will be reforged from the highest valued stat. very conservative upperbound to reduce # of permutations
  1129.     local ubhaste, ubmastery, ubcrit = haste, mastery, crit
  1130.     if spi > 5100 then
  1131.         if weights["haste"] == math.min(weights["haste"],weights["mastery"],weights["crit"]) then
  1132.             ubhaste = haste + spi - 5100
  1133.         elseif weights["mastery"] == math.min(weights["haste"],weights["mastery"],weights["crit"]) then
  1134.             ubmastery = mastery + spi - 5100
  1135.         elseif weights["crit"] == math.min(weights["haste"],weights["mastery"],weights["crit"]) then
  1136.             ubcrit = crit + spi - 5100
  1137.         end
  1138.     elseif spi < 5100 then
  1139.         if weights["haste"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  1140.             ubhaste = haste - (spi - 5100)
  1141.         elseif weights["mastery"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  1142.             ubmastery = mastery - (spi - 5100)
  1143.         elseif weights["crit"] == math.max(weights["haste"],weights["mastery"],weights["crit"]) then
  1144.             ubcrit = crit - (spi - 5100)
  1145.         end
  1146.     end
  1147.     local upperbound = int * weights["int"] + 5100 * weights["spi"] + ubhaste * weights["haste"] + ubmastery * weights["mastery"] + ubcrit * weights["crit"]
  1148.     -- if upperbound > curmax then
  1149.         --print("possible set found ("..upperbound.." > "..curmax.."), reforging...")
  1150.     -- else
  1151.     if upperbound < curmax then
  1152.         --print("imferior set found ("..upperbound.." < "..curmax.."), skipping")
  1153.         return 0, curmax
  1154.     end
  1155.     --reforge here
  1156.     local maxvalue = curmax
  1157.     local r = 0
  1158.     local rmax = 1
  1159.     --local maxrefset = {}
  1160.     local refset = reforgeset(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand)
  1161.     for i = 1,#refset do
  1162.         rmax = rmax * #refset[i]
  1163.     end
  1164.     -- for a = 1,#refset do
  1165.         -- print("---")
  1166.         -- for b = 1,#refset[a] do
  1167.             -- print(refset[a][b])
  1168.         -- end
  1169.     -- end
  1170.     for shead = 1,#refset[1] do
  1171.         for sneck = 1,#refset[2] do
  1172.             for sshoulders = 1,#refset[3] do
  1173.                 for sback = 1,#refset[4] do
  1174.                     for schest = 1,#refset[5] do
  1175.                         for swrists = 1,#refset[6] do
  1176.                             for shands = 1,#refset[7] do
  1177.                                 for swaist = 1,#refset[8] do
  1178.                                     for slegs = 1,#refset[9] do
  1179.                                         for sfeet = 1,#refset[10] do
  1180.                                             for sfinger1 = 1,#refset[11] do
  1181.                                                 for sfinger2 = 1,#refset[12] do
  1182.                                                     for strinket1 = 1,#refset[13] do
  1183.                                                         for strinket2 = 1,#refset[14] do
  1184.                                                             for smain_hand = 1,#refset[15] do
  1185.                                                                 for soff_hand = 1,#refset[16] do
  1186.                                                                     r = r + 1
  1187.                                                                     local refbonus = {spi = 0, haste = 0, mastery = 0, crit = 0, hit = 0}
  1188.                                                                     local curref = {shead,sneck,sshoulders,sback,schest,swrists,shands,swaist,slegs,sfeet,sfinger1,sfinger2,strinket1,strinket2,soff_hand,smain_hand}
  1189.                                                                     for s = 1,#cvitems do
  1190.                                                                         if (refset[s][curref[s]] ~= "") and (refset[s][curref[s]] ~= nil) then
  1191.                                                                             --print(refset[s][curref[s]])
  1192.                                                                             local temp = parsereforge(refset[s][curref[s]])
  1193.                                                                             local source = temp[2]
  1194.                                                                             local target = temp[3]
  1195.                                                                             local amnt = math.floor(0.4 * cvitems[s][source])
  1196.                                                                             --print("reforging "..amnt.." "..source.." to "..target.." on "..cvitems[s]["name"])
  1197.                                                                             refbonus[source] = refbonus[source] - amnt
  1198.                                                                             refbonus[target] = refbonus[target] + amnt
  1199.                                                                         end
  1200.                                                                     end
  1201.                                                                     -- spi = spi + refbonus["spi"]
  1202.                                                                     -- haste = haste + refbonus["haste"]
  1203.                                                                     -- mastery = mastery + refbonus["mastery"]
  1204.                                                                     -- crit = crit + refbonus["crit"]
  1205.                                                                     value = 0
  1206.                                                                     local totspi = spi + refbonus["spi"] + refbonus["hit"]
  1207.                                                                     if (totspi >= 5100) and (totspi <= 5610) then
  1208.                                                                         value = int * weights["int"] + 5100 * weights["spi"] + (haste + refbonus["haste"]) * weights["haste"] + (mastery + refbonus["mastery"]) * weights["mastery"] + (crit + refbonus["crit"]) * weights["crit"]
  1209.                                                                         if value > maxvalue then
  1210.                                                                             maxvalue = value
  1211.                                                                             maxrefset = curref
  1212.                                                                             print("reforge "..r.." / "..rmax..": new max reforge value: "..maxvalue.." ("..totspi.." spirit/hit)")
  1213.                                                                             for s = 1,#cvitems do
  1214.                                                                                 local estr, rstr = "", ""
  1215.                                                                                 if enchantstrings[slotnames[s]] ~= nil then
  1216.                                                                                     estr = enchantstrings[slotnames[s]]
  1217.                                                                                 end
  1218.                                                                                 if refset[s][curref[s]] ~= nil then
  1219.                                                                                     rstr = refset[s][curref[s]]
  1220.                                                                                 end
  1221.                                                                                 print(slotnames[s].."="..string.gsub(string.gsub(string.gsub(cvitems[s].name," ","_"),"'",""),",","")..",id="..cvitems[s].id..gem(cvitems[s])..estr..rstr)
  1222.                                                                             end
  1223.                                                                             print("\n\n")
  1224.                                                                         end
  1225.                                                                     else
  1226.                                                                         --print("reforge "..r.." / "..rmax..": can't get close enough to hitcap: "..totspi)
  1227.                                                                         value = 0
  1228.                                                                     end
  1229.                                                                 end
  1230.                                                             end
  1231.                                                         end
  1232.                                                     end
  1233.                                                 end
  1234.                                             end
  1235.                                         end
  1236.                                     end
  1237.                                 end
  1238.                             end
  1239.                         end
  1240.                     end
  1241.                 end
  1242.             end
  1243.         end
  1244.     end
  1245.     return value, maxvalue
  1246. end
  1247.  
  1248. --calcvalue(1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1)
  1249.  
  1250. function gettwofromx(slot)  -- returns a table of non-repeating item combinations
  1251.     local out = {}
  1252.     for a = 1,#items[slot]-1 do
  1253.         for b = a+1,#items[slot] do
  1254.             table.insert(out,{a,b})
  1255.         end
  1256.     end
  1257.     return out
  1258. end
  1259.  
  1260. function get4tierset()      -- returns a table of sets that cover the set-slots and provde the 4t15 bonus
  1261.     local out = {}
  1262.     table.insert(out,{1,1,1,1,1})   --5t15
  1263.     for head = 2,#items["head"] do
  1264.         table.insert(out,{head,1,1,1,1})
  1265.     end
  1266.     for shoulders = 2,#items["shoulders"] do
  1267.         table.insert(out,{1,shoulders,1,1,1})
  1268.     end
  1269.     for chest = 2,#items["chest"] do
  1270.         table.insert(out,{1,1,chest,1,1})
  1271.     end
  1272.     for hands = 2,#items["hands"] do
  1273.         table.insert(out,{1,1,1,hands,1})
  1274.     end
  1275.     for legs = 2,#items["legs"] do
  1276.         table.insert(out,{1,1,1,1,legs})
  1277.     end
  1278.     return out
  1279. end
  1280.  
  1281. --local combo_ringtrinket = {{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}
  1282. local combo_rings = gettwofromx("finger")
  1283. local combo_trinkets = gettwofromx("trinkets")
  1284. --local combo_tier = {{2,3,2,3,2},{1,3,2,3,2},{2,1,2,3,2},{2,2,2,3,2},{2,3,1,3,2},{2,3,3,3,2},{2,3,2,1,2},{2,3,2,2,2},{2,3,2,3,1},{2,3,2,3,3}}
  1285. local combo_tier = get4tierset()
  1286. --print(#combo_tier)
  1287.  
  1288. --local sets = 0
  1289. local total = 0
  1290. local maxvalue = 0
  1291. local maxset = {}
  1292. local val = 0
  1293. local set = 0
  1294. local setper = 0
  1295. local numsets = #combo_tier * #combo_rings * #combo_trinkets * #items["neck"] * #items["back"] * #items["wrists"] * #items["waist"] * #items["feet"] * #items["off_hand"] * #items["main_hand"]
  1296. -- iterate over all sets possible
  1297. for tier = 1,#combo_tier do
  1298.     head = combo_tier[tier][1]
  1299.     shoulders = combo_tier[tier][2]
  1300.     chest = combo_tier[tier][3]
  1301.     hands = combo_tier[tier][4]
  1302.     legs = combo_tier[tier][5]
  1303.     for neck = 1,#items["neck"] do
  1304.         for back = 1,#items["back"] do
  1305.             for wrists = 1,#items["wrists"] do
  1306.                 for waist = 1,#items["waist"] do
  1307.                     for feet = 1,#items["feet"] do
  1308.                         for fingers = 1,#combo_rings do
  1309.                             finger1 = combo_rings[fingers][1]
  1310.                             finger2 = combo_rings[fingers][2]
  1311.                             for trinkets = 1,#combo_trinkets do
  1312.                                 trinket1 = combo_trinkets[trinkets][1]
  1313.                                 trinket2 = combo_trinkets[trinkets][2]
  1314.                                 for off_hand = 1,#items["off_hand"] do
  1315.                                     for main_hand = 1,#items["main_hand"] do
  1316.                                         set = set + 1
  1317.                                        
  1318.                                         if set % 69984 == 0 then
  1319.                                             setper = setper + 1
  1320.                                             print(setper.."% of sets tried")
  1321.                                         end
  1322.                                         total = total + 1
  1323.                                         if sanitycheck(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand) then
  1324.                                             --sets = sets + 1
  1325.                                             val, maxvalue = calcvalue(head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand,maxvalue)
  1326.                                             --print(val.." "..maxvalue)
  1327.                                             if val > maxvalue then
  1328.                                                 maxvalue = val
  1329.                                                 maxset = {head,neck,shoulders,back,chest,wrists,hands,waist,legs,feet,finger1,finger2,trinket1,trinket2,off_hand,main_hand}
  1330.                                                 print("new best set: "..val)
  1331.                                             end
  1332.                                         end
  1333.                                     end
  1334.                                 end
  1335.                             end
  1336.                         end
  1337.                     end
  1338.                 end
  1339.             end
  1340.         end
  1341.     end
  1342. end
  1343. print(sets.."/"..total)
  1344.  
  1345. for s = 1,#slots do
  1346.     local estr = ""
  1347.     if enchantstrings[slotnames[s]] ~= nil then
  1348.         estr = enchantstrings[slotnames[s]]
  1349.     end
  1350.     print(slotnames[s].."="..string.gsub(string.gsub(string.gsub(items[slots[s]][maxset[s]].name," ","_"),"'",""),",","")..",id="..items[slots[s]][maxset[s]].id..gem(items[slots[s]][maxset[s]])..estr)
  1351. end
Advertisement
Add Comment
Please, Sign In to add comment