diff --git a/source/modules/mod_doomrla.rb b/source/modules/mod_doomrla.rb index 517e989..d2945e3 100644 --- a/source/modules/mod_doomrla.rb +++ b/source/modules/mod_doomrla.rb @@ -14,9 +14,6 @@ class Mod_DoomRLA < Vrobot4::Module::Module def self.type() "DoomRLA" end Vrobot4::Module.add_module_type self, server: "Discord" - @@winfo = nil - @@minfo = nil - AType = ["Melee", "Ranged", "Special"].freeze DType = ["Melee", "Bullet", "Fire", "Plasma", "Piercing", "Holy", "Unholy", "Special"].freeze @@ -24,84 +21,89 @@ class Mod_DoomRLA < Vrobot4::Module::Module 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", "", roles: "h" + 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 false + reload_info + end + + def expldamage a + "#{a["ExplosionDamage"]} explosion damage, #{a["ExplosionRadius"]} radius\n" end def c_assemblyinfo m, argv - w = @@winfo.select do |wep| - wep if wep["Assembly"] and wep["AssemblyItem"].casecmp? argv - end t = "" + w = @winfo.select {|wep| wep if wep["Assembly"] and wep["AssemblyItem"].casecmp? argv} + 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} + w = @winfo.find {|wep| wep if wep["Name"].casecmp? argv} raise ArgumentError, "Weapon not found" if w == nil - t = "%s %s damage\n" % [w["Damage"], w["DamageType"]] - t << "%s shots\n" % [w["Shots"]] if w["Shots"].to_i > 1 - t << "Uses %s %s\n" % [w["AmmoUsage"], w["AmmoType"]] \ - if w["AmmoType"] != "None" - t << "%s capacity\n" % [w["Capacity"]] if w["Capacity"] + + 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 << "%s explosion damage, %s radius\n" % - [w["ExplosionDamage"], w["ExplosionRadius"]] if w["ExplosionDamage"] - t << "Traits: %s\n" % [w["Traits"]] if w["Traits"] != "N/A" - t << "Assembly: %s with %s\n" % [w["Assembly"], w["AssemblyItem"]] \ - if w["Assembly"] - t << "%s" % [w["Description"]] if w["Description"] + + 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 = "[%s] %s" % [w["Rarity"], w["Name"]] + 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 or - mon["Tags"].split(", ").include? argv + mi = @minfo.select do |mon| + mon if mon["Name"].casecmp? argv or mon["Tags"].split(", ").include? argv end - raise ArgumentError, "No monsters found" if mi == nil + raise ArgumentError, "No monsters found" if mi == nil || mi.empty? + mi.first(3).each do |w| - t = "%i Health\n" % [w["Health"]] - t << "Resistances: %s\n" % [w["Resistances"]] - t << "Drops: %s\n" % [w["ItemDrops"]] if w["ItemDrops"] - t << "%s" % [w["Description"]] if w["Description"] + 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[%s] %s\n" % [AType[a["AttackType"]], a["Name"]] - t << "%s %s damage\n" % [a["Damage"], DType[a["DamageType"]]] - t << "%s explosion damage, %s radius\n" % - [a["ExplosionDamage"], a["ExplosionRadius"]] \ - if a["ExplosionDamage"] - t << "%s shots\n" % [a["Shots"]] if a["Shots"].to_i > 1 - t << "%s\n" % a["Description"] if a["Description"] + 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 = "[%s] %s" % [w["Difficulty"], w["Name"]] - embed.title << " %s" % [w["Weapon"]] if w["Weapon"] - embed.image = Discordrb::Webhooks::EmbedImage.new \ - url: w["Sprite"] if w["Sprite"] + 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 - reload_info true + m.reply "Reloading info..." + reload_info + m.reply "Done." end private - def reload_info force - if not @@winfo or not @@minfo or force - @@winfo = JSON.parse(open(@info["wep_info"]).read) - @@minfo = JSON.parse(open(@info["mon_info"]).read) - end + 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 diff --git a/source/modules/mod_rolechooser.rb b/source/modules/mod_rolechooser.rb index 1481b93..63fe3aa 100644 --- a/source/modules/mod_rolechooser.rb +++ b/source/modules/mod_rolechooser.rb @@ -11,7 +11,7 @@ class Mod_RoleChooser < Vrobot4::Module::Module def c_setcolor m, argv roles = m.chan.real.server.roles - role = roles.find {|r| r.name == argv} + role = roles.find {|r| r.name.casecmp? argv} unless role and @info.any? {|id| role.id == id} raise ArgumentError, "Invalid color, use .listcolors for a list." end