2.4.3. addon, shows better gear by slot and stat type
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.5KB

  1. #!/usr/bin/ruby
  2. require 'sqlite3'
  3. require 'json'
  4. db = SQLite3::Database.open '/tmp/tbc.db'
  5. db.results_as_hash = true
  6. items = db.execute 'select i.entry, i.class, i.subclass, i.name, i.inventorytype, i.itemlevel, i.requiredlevel, i.dmg_min1, i.dmg_max1, "" as mobs, delay, %s from item_template i;' % [(1..10).to_a.map { |n| "stat_type#{n} as k#{n}, stat_value#{n} as v#{n}" }.join(', ')]
  7. total = items.length
  8. items_w_loot = []
  9. keys = (1..10).map { |n| "k#{n}" }
  10. vals = (1..10).map { |n| "v#{n}" }
  11. skip_keys = keys + ['delay', 'mobs']
  12. def truncate(s, len)
  13. s.length > len ? "#{s[0...len]}..." : s
  14. end
  15. items.each_with_index do |item, idx|
  16. mobs = db.execute 'select c.name as name, cl.ChanceOrQuestChance as chance from creature_loot_template cl left join creature_template c on c.entry=cl.entry where cl.item=%d order by chance desc' % [item['entry']]
  17. new = []
  18. item.each_pair do |k, v|
  19. if skip_keys.include?(k) or vals.include?(k)
  20. next
  21. end
  22. new.push k
  23. new.push v
  24. end
  25. new.push 'mobs'
  26. new.push(truncate ((mobs.map {|m| m['name']}.join ',') or ""), 300)
  27. (0..56).each do |type|
  28. val = 0
  29. keys.each_with_index do |k, kidx|
  30. if item[k] == type
  31. val = item[vals[kidx]]
  32. end
  33. end
  34. new.push val
  35. end
  36. if item['delay']
  37. new.push item['delay']
  38. end
  39. if idx % 100 == 0
  40. print "\r%f%%" % [(idx * 100).to_f / total]
  41. end
  42. if idx > 50
  43. # break
  44. end
  45. File.write(File.join(Dir.home, 'items_w_loot.json'), (new.to_json.concat ",\n"), mode: 'a+')
  46. end