Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # biscalc in ruby
- # setup gems & statweights
- $w = Hash["int" => 4.64, "spi" => 5.23, "hit" => 5.23, "haste" => 2.51, "mastery" => 2.36, "crit" => 2.29]
- if $w["haste"] > $w["mastery"] and $w["haste"] > $w["crit"] then
- $maxyellow = "haste"
- elsif $w["mastery"] > $w["haste"] and $w["mastery"] > $w["crit"] then
- $maxyellow = "mastery"
- else
- $maxyellow = "crit"
- end
- #puts $maxyellow
- $gems = ["160int","80int_160#{$maxyellow}","80int_160spi","burning_primal"]
- $gemval = [160 * $w["int"], 80 * $w["int"] + 160 * $w[$maxyellow], 80 * $w["int"] + 160 * $w["spi"], 216 * $w["int"]]
- def fact(n)
- if n<= 1
- 1
- else
- n * fact( n - 1 )
- end
- end
- # setup classes
- class Item
- #@@gems = ["160int", "80int_160haste", "80int_160spi", "burning_primal"]
- @gembonus = Hash["int" => 0, "spi" => 0, "hit" => 0, "haste" => 0, "mastery" => 0, "crit" => 0]
- def initialize(id, name, slot, int = 0, splpwr = 0, spi = 0, hit = 0, haste = 0, mastery = 0, crit = 0, sockets = nil)
- @id = id
- @name = name
- @slot = slot #head,shoulder,back,chest,wrist,hands,waist,legs,feet,finger,trinket,main_hand,off_hand
- @int = int
- @splpwr = splpwr
- @spi = spi
- @hit = hit
- @haste = haste
- @mastery = mastery
- @crit = crit
- @sockets = sockets # array of skt colors, bonus value, bonus stat: 0 = red, 1 = yellow, 2 = blue, 3 = meta
- # [1, 2, 3, 180, "int"]
- end
- def getSpiHit()
- spihit = @spi + @hit + @gembonus["hit"] + @gembonus["spi"]
- end
- def gem()
- # calc matching value
- v_match = 0
- @sockets[0..-3].each do |s|
- v_match += $gemval[s]
- end
- v_match += @sockets[-2] * $w[@sockets[-1]]
- #puts "matching value: #{v_match}"
- # calc pure value
- v_pure = 0
- bonus = true
- @sockets[0..-3].each do |s|
- s < 3 ? v_pure += $gemval[0] : v_pure += $gemval[s]
- s > 0 ? bonus = false : nil
- end
- bonus ? v_pure += @sockets[-2] * $w[@sockets[-1]] : nil
- #puts "pure value: #{v_pure}"
- #construct gemstring
- gemstring = ",gems="
- bonus = true # assume matching sockets
- if v_match > v_pure then
- @sockets[0..-3].each do |s|
- gemstring += "#{$gems[s]}_"
- # case s
- # when 0
- # @gembonus["int"] += 160
- # when 1
- # @gembonus["int"] += 80
- # @gembonus[$maxyellow] += 160
- # when 2
- # @gembonus["int"] += 80
- # @gembonus["spi"] += 160
- # when 3
- # @gembonus["int"] += 216
- # end
- end
- gemstring += "#{@sockets[-2]}#{@sockets[-1]}_"
- else
- @sockets[0..-3].each do |s|
- if s < 3 then
- gemstring += "#{$gems[0]}_"
- s > 0 ? bonus = false : nil
- else
- gemstring += "#{$gems[s]}_"
- end
- end
- if bonus then
- gemstring += "#{@sockets[-2]}#{@sockets[-1]}_"
- end
- end
- gemstring.chop!
- end
- def getSimc(slotnmbr = "")
- #clean up the item name
- name = @name.gsub(" ", "_") # space to underscore
- name.gsub!("'", "") # remove apostrophes
- name.gsub!(",", "") # remove commata
- name.downcase!
- # create gemstring
- gemstring = ""
- if @sockets then
- gemstring = gem()
- end
- # create enchantstring
- case @slot
- when "shoulders"
- enchantstring = ",enchant=200int_100crit"
- when "back"
- enchantstring = ",enchant=180int"
- when "chest"
- enchantstring = ",enchant=80all"
- when "wrists"
- enchantstring = ",enchant=180int"
- when "hands"
- enchantstring = ",enchant=170haste"
- when "legs"
- enchantstring = ",enchant=285int_165spi"
- when "feet"
- enchantstring = ",enchant=140mastery"
- when "finger"
- enchantstring = ",enchant=160int"
- when "main_hand"
- enchantstring = ",enchant=jade_spirit"
- when "off_hand"
- enchantstring = ",enchant=165int"
- else
- enchantstring = ""
- end
- puts "#@slot#{slotnmbr}=#{name},id=#@id#{gemstring}#{enchantstring}"
- end
- end
- class Set
- def initialize(head, neck, shoulders, back, chest, wrists, hands, waist, legs, feet, finger1, finger2, trinket1, trinket2, main_hand, off_hand)
- @slots = [head, neck, shoulders, back, chest, wrists, hands, waist, legs, feet, finger1, finger2, trinket1, trinket2, main_hand, off_hand]
- end
- def getSpiHit()
- spihit = 0
- @slots.each do |s|
- spihit += s.getSpiHit
- end
- result = spihit
- end
- end
- # item base
- #def initialize(id, name, slot, int = 0, splpwr = 0, spi = 0, hit = 0, haste = 0, mastery = 0, crit = 0, sockets = nil)
- # array of skt colors, bonus value, bonus stat: 0 = red, 1 = yellow, 2 = blue, 3 = meta
- $head = Array.new
- $head.push(Item.new(96696,"Headpiece of the Witch Doctor","head",1519,0,1088,0,995,0,0,[3,1,180,"crit"]))
- $head.push(Item.new(96509,"Clear-Mind Helm","head",1519,0,0,0,1070,1023,0,[3,2,180,"int"]))
- $head.each do |i|
- i.getSimc()
- end
- $neck = Array.new
- $neck.push(Item.new(96402,"Horridon's Tusk Fragment","neck",980,0,558,0,0,710,0,nil))
- $neck.push(Item.new(96537,"Passionfire Choker","neck",900,0,581,0,0,0,633,[1,60,"crit"]))
- $neck.push(Item.new(96560,"Soul Prism of Lei-Shen","neck",820,0,665,0,417,0,0,[2,2,120,"spi"]))
- $neck.push(Item.new(96708,"Necklace of the Terra-Cotta Invoker","neck",900,0,0,642,565,0,0,[0,60,"hit"]))
- $neck.push(Item.new(96713,"Necklace of the Terra-Cotta Mender","neck",900,0,652,0,0,549,0,[0,60,"spi"]))
- $neck.push(Item.new(96453,"Megaera's Shining Eye","neck",980,0,0,654,0,0,654,nil))
- $neck.each do |i|
- i.getSimc()
- end
- $shoulders = Array.new
- $shoulders.push(Item.new(96698,"Shoulderwraps of the Witch Doctor","shoulders",1147,0,0,0,817,0,748,[0,1,120,"haste"]))
- $shoulders.push(Item.new(96439,"Spaulders of Quaking Fear","shoulders",1227,0,942,0,642,0,0,[0,60,"spi"]))
- $shoulders.push(Item.new(96615,"Abandoned Spaulders of Renewal","shoulders",1227,0,0,0,0,844,809,[2,60,"int"]))
- $shoulders.each do |i|
- i.getSimc()
- end
- $back = Array.new
- $back.push(Item.new(95013,"Black Night Thundercloak","back",957,0,651,0,0,651,0,[1,60,"haste"]))
- $back.push(Item.new(95014,"Red Sky Cloudcloak","back",957,0,0,701,566,0,0,[1,60,"haste"]))
- $back.push(Item.new(96383,"Drape of Booming Nights","back",980,0,719,0,0,0,542,nil))
- $back.push(Item.new(96435,"Shimmershell Cape","back",980,0,0,0,0,682,605,nil))
- $back.push(Item.new(96485,"Deadly Glare Cape","back",900,0,0,0,633,0,581,[0,60,"int"]))
- $back.push(Item.new(96517,"Constantly Accelerating Cape","back",900,0,549,0,652,0,0,[0,60,"int"]))
- $back.each do |i|
- i.getSimc()
- end
- $chest = Array.new
- $chest.push(Item.new(96694,"Hauberk of the Witch Doctow","chest",1519,0,966,0,0,1105,0,[0,1,2,180,"int"]))
- $chest.push(Item.new(96532,"Ro'shak's Molten Chain","chest",1599,0,1093,0,1093,0,0,[0,0,120,"int"]))
- $chest.push(Item.new(96459,"Chain of Consuming Magic","chest",1599,0,1226,0,0,866,0,[1,1,120,"int"]))
- $chest.push(Item.new(95035,"Chains of Counted Souls","chest",1620,0,0,0,1228,938,0,[1,1,1,180,"int"]))
- $chest.each do |i|
- i.getSimc()
- end
- $wrists = Array.new
- $wrists.push(Item.new(96489,"Vein-Cover Bracers","wrists",980,0,736,0,512,0,0,nil))
- $wrists.each do |i|
- i.getSimc()
- end
- $hands = Array.new
- $hands.push(Item.new(96695,"Gloves of the Witch Doctor","hands",1227,0,0,0,0,849,769,[0,60,"int"]))
- $hands.push(Item.new(96466,"Grasp of the Ruthless Mother","hands",1307,0,786,0,0,922,0,[0,60,"int"]))
- $hands.push(Item.new(96545,"Fingers of the Night","hands",1227,0,930,0,0,0,633,[1,60,"int"]))
- $hands.each do |i|
- i.getSimc()
- end
- $waist = Array.new
- $waist.push(Item.new(94999,"Longdraw Chain Belt","waist",1222,0,0,0,924,712,0,[0,2,2,120,"int"]))
- $waist.push(Item.new(96458,"Links of the Bifurcated Tongue","waist",1147,0,804,0,0,769,0,[0,0,1,120,"spi"]))
- $waist.push(Item.new(96717,"Abandoned Zandalari Waterchain","waist",1227,0,0,0,746,0,882,[0,2,60,"int"]))
- $waist.each do |i|
- i.getSimc()
- end
- $legs = Array.new
- $legs.push(Item.new(96697,"Kilt of the Witch Doctor","legs",1599,0,0,0,937,0,1201,[1,2,120,"int"]))
- $legs.push(Item.new(96564,"Leggings of the Violent Gale","legs",1519,0,1178,0,0,834,0,[0,0,0,180,"int"]))
- $legs.push(Item.new(96407,"Legguards of Scintillating Scales","legs",1599,0,0,0,0,1093,1093,[0,2,120,"int"]))
- $legs.push(Item.new(95027,"Legguards of Awaked Repair","legs",1620,0,1228,0,0,0,938,[0,1,1,180,"mastery"]))
- $legs.each do |i|
- i.getSimc()
- end
- $feet = Array.new
- $feet.push(Item.new(95008,"World-Mote Sabatons","feet",1222,0,850,0,0,0,805,[1,2,120,"int"]))
- $feet.push(Item.new(96387,"Ghostbinder Greatboots","feet",1227,0,911,0,691,0,0,[1,60,"spi"]))
- $feet.push(Item.new(96711,"Spiritbound Boots","feet",1307,0,0,0,0,871,871,nil))
- $feet.each do |i|
- i.getSimc()
- end
- $finger = Array.new
- $finger.push(Item.new(95018,"Ra-den's Evolving Signet","finger",957,0,658,0,624,0,0,[2,60,"int"]))
- $finger.push(Item.new(95019,"Ra-den's Summoning Band","finger",957,0,0,509,744,0,0,[2,60,"int"]))
- $finger.push(Item.new(96382,"Jin'rokh's Dreamshard","finger",980,0,0,605,0,0,682,nil))
- $finger.push(Item.new(96403,"Petrified Eye of the Basilisk","finger",980,0,745,0,0,497,0,nil))
- $finger.push(Item.new(96486,"Durumu's Captive Eyeballs","finger",900,0,672,0,0,0,496,[0,60,"spi"]))
- $finger.push(Item.new(96529,"Ro'shak's Remembrance","finger",900,0,0,0,0,478,703,[2,60,"haste"]))
- $finger.each do |i|
- i.getSimc()
- end
- $trinket = Array.new
- $trinket.push(Item.new(96516,"Cha'Ye's Essence of Brilliance","trinket",0,0,0,0,0,0,1657,nil))
- $trinket.push(Item.new(96558,"Unerring Vision of Lei-Shen","trinket",1657,0,0,0,0,0,0,nil))
- $trinket.push(Item.new(96413,"Wushoolay's Final Choice","trinket",0,0,0,1657,0,0,0,nil))
- $trinket.push(Item.new(96455,"Breath of the Hydra","trinket",0,0,0,0,1657,0,0,nil))
- $trinket.each do |i|
- i.getSimc()
- end
- $off_hand = Array.new
- $off_hand.push(Item.new(96436,"Torto's Discarded Shell","off_hand",900,0,676,0,525,0,0,[2,60,"int"]))
- $off_hand.push(Item.new(96538,"Shield of Twinned Despair","off_hand",900,0,712,0,0,463,0,[0,60,"int"]))
- $off_hand.push(Item.new(96454,"Fetish of the Hydra","off_hand",900,0,0,642,0,0,565,[2,60,"int"]))
- $off_hand.push(Item.new(96530,"Orb of Arcing Lightning","off_hand",900,0,696,0,472,0,0,[0,60,"int"]))
- $off_hand.push(Item.new(96562,"Lei-Shen's Orb of Command","off_hand",900,0,0,0,518,0,670,[0,60,"int"]))
- $off_hand.each do |i|
- i.getSimc()
- end
- $main_hand = Array.new
- $main_hand.push(Item.new(96559,"Torall, Rod of the Shattered Throne","main_hand",754,10078,533,0,342,0,0,[0,60,"int"]))
- $main_hand.push(Item.new(96414,"Amun-Thoth, Sul's Spiritrending Talons","main_hand",674,10078,506,0,0,389,0,[2,60,"int"]))
- $main_hand.push(Item.new(96518,"Athame of the Sanguine Rital","main_hand",674,10078,0,0,463,463,0,[0,60,"int"]))
- $main_hand.push(Item.new(96487,"Ritual Dagger of the Mind's Eye","main_hand",674,10078,499,0,0,0,401,[0,60,"int"]))
- $main_hand.each do |i|
- i.getSimc()
- end
- # build sets
- $x = $head.length*$neck.length*$shoulders.length*$back.length*$chest.length*$wrists.length*$hands.length*$waist.length*$legs.length*$feet.length*$main_hand.length*$off_hand.length*fact($finger.length)/(fact($finger.length-2)*fact(2))*fact($trinket.length)/(fact($trinket.length-2)*fact(2))
- puts $x
- $sets = Array.new
- $numsets = 0
- $head.each do |he|
- $neck.each do |ne|
- $shoulders.each do |sh|
- $back.each do |ba|
- $chest.each do |ch|
- $wrists.each do |wr|
- $hands.each do |ha|
- $waist.each do |wa|
- $legs.each do |le|
- $feet.each do |fe|
- (0..$finger.length-2).each do |f1t|
- f1 = $finger[f1t]
- (f1t+1..$finger.length-1).each do |f2t|
- f2 = $finger[f2t]
- (0..$trinket.length-2).each do |t1t|
- t1 = $trinket[t1t]
- (t1t+1..$trinket.length-1).each do |t2t|
- t2 = $trinket[t2t]
- $off_hand.each do |oh|
- $main_hand.each do |mh|
- # tempset = Set.new(he,ne,sh,ba,ch,wr,ha,wa,le,fe,f1,f2,t1,t2,oh,mh)
- # if tempset.getSpiHit < 8500 then
- # $sets.push(tempset)
- # end
- $numsets += 1
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- end
- puts $numsets
Add Comment
Please, Sign In to add comment