require 'open-uri' require 'json' #-- # ===== WARNING ===== # # !!! INCOMING SPAGHETTI !!! # # - BE PRAYING # - BE PRAYING # - BE PRAYING # class Mod_DoomRLA < Vrobot4::Module::Module def self.type() "DoomRLA" end Vrobot4::Module.add_module_type self, server: "Discord" AType = ["Melee", "Ranged", "Special"].freeze DType = ["Melee", "Bullet", "Fire", "Plasma", "Piercing", "Holy", "Unholy", "Special"].freeze def initialize info super register :c_assemblyinfo, "assemblyinfo", "Prints DRLA assembly info." register :c_weaponinfo, "weaponinfo", "Prints DRLA weapon info." register :c_monsterinfo, "monsterinfo", "Prints DRLA monster info." register :c_reloadinfo, "reloadinfo", "Reload DRLA info.", roles: "h" reload_info end def expldamage a "#{a["ExplosionDamage"]} explosion damage, #{a["ExplosionRadius"]} radius\n" end def c_assemblyinfo m, argv t = "" w = @winfo.select {|wep| wep if wep["Assembly"] and wep["AssemblyItem"].casecmp(argv) == 0} raise ArgumentError, "No assemblies found" if w == nil || w.empty? w.each {|wep| t << wep["Assembly"] + " - " + wep["Name"] + "\n"} m.chan.real.send_embed {|embed| embed.description = t} if t != "" end def c_weaponinfo m, argv w = @winfo.find {|wep| wep if wep["Name"].casecmp(argv) == 0} raise ArgumentError, "Weapon not found" if w == nil t = "#{w["Damage"]} #{w["DamageType"]} damage\n" t << "#{w["Shots"]} shots\n" if w["Shots"].to_i > 1 t << "Uses #{w["AmmoUsage"]} #{w["AmmoType"]}\n" if w["AmmoType"] != "None" t << "#{w["Capacity"]} capacity\n" if w["Capacity"] t << "\n" t << expldamage(w) if w["ExplosionDamage"] t << "Traits: #{w["Traits"]}\n" if w["Traits"] != "N/A" t << "Assembly: #{w["Assembly"]} with #{w["AssemblyItem"]}\n" if w["Assembly"] t << w["Description"] if w["Description"] m.chan.real.send_embed do |embed| embed.title = "[#{w["Rarity"]}] #{w["Name"]}" embed.description = t end end def c_monsterinfo m, argv mi = @minfo.select do |mon| mon if mon["Name"].casecmp(argv) == 0 or mon["Tags"].split(", ").include? argv end raise ArgumentError, "No monsters found" if mi == nil || mi.empty? mi.first(3).each do |w| t = "#{w["Health"]} Health\n" t << "Resistances: #{w["Resistances"]}\n" t << "Drops: #{w["ItemDrops"]}\n" if w["ItemDrops"] t << w["Description"] if w["Description"] t << "\n" w["Attacks"].each do |a| t << "\n[#{AType[a["AttackType"].to_i]}] #{a["Name"]}\n" t << "#{a["Damage"]} #{DType[a["DamageType"].to_i]} damage\n" t << expldamage(a) if a["ExplosionDamage"] t << "#{a["Shots"]} shots\n" if a["Shots"].to_i > 1 t << "#{a["Description"]}\n" if a["Description"] end m.chan.real.send_embed do |embed| embed.title = "[#{w["Difficulty"]}] #{w["Name"]}" embed.title << " #{w["Weapon"]}" if w["Weapon"] embed.image = Discordrb::Webhooks::EmbedImage.new url: w["Sprite"] if w["Sprite"] embed.description = t end end end def c_reloadinfo m, argv m.reply "Reloading info..." reload_info m.reply "Done." end private def reload_info @winfo = [] @minfo = [] @info[:wep_info].each {|wi| @winfo += JSON.parse(open(wi).read)} @info[:mon_info].each {|mi| @minfo += JSON.parse(open(mi).read)} end end ## EOF