#!/usr/bin/ruby require 'sqlite3' require 'json' db = SQLite3::Database.open '/tmp/tbc.db' db.results_as_hash = true 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(', ')] total = items.length items_w_loot = [] keys = (1..10).map { |n| "k#{n}" } vals = (1..10).map { |n| "v#{n}" } skip_keys = keys + ['delay', 'mobs'] def truncate(s, len) s.length > len ? "#{s[0...len]}..." : s end items.each_with_index do |item, idx| 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']] new = [] item.each_pair do |k, v| if skip_keys.include?(k) or vals.include?(k) next end new.push k new.push v end new.push 'mobs' new.push(truncate ((mobs.map {|m| m['name']}.join ',') or ""), 300) (0..56).each do |type| val = 0 keys.each_with_index do |k, kidx| if item[k] == type val = item[vals[kidx]] end end new.push val end if item['delay'] new.push item['delay'] end if idx % 100 == 0 print "\r%f%%" % [(idx * 100).to_f / total] end if idx > 50 # break end File.write(File.join(Dir.home, 'items_w_loot.json'), (new.to_json.concat ",\n"), mode: 'a+') end