Module: Lich::Gemstone::Armaments::WeaponStats
- Defined in:
- documented/gemstone/armaments/weapon_stats.rb,
documented/gemstone/armaments/weapon_stats_blunt.rb,
documented/gemstone/armaments/weapon_stats_edged.rb,
documented/gemstone/armaments/weapon_stats_hybrid.rb,
documented/gemstone/armaments/weapon_stats_ranged.rb,
documented/gemstone/armaments/weapon_stats_thrown.rb,
documented/gemstone/armaments/weapon_stats_natural.rb,
documented/gemstone/armaments/weapon_stats_polearm.rb,
documented/gemstone/armaments/weapon_stats_unarmed.rb,
documented/gemstone/armaments/weapon_stats_brawling.rb,
documented/gemstone/armaments/weapon_stats_runestave.rb,
documented/gemstone/armaments/weapon_stats_two_handed.rb
Overview
Provides static weapon statistics for two-handed weapons.
This module contains a collection of weapon stats indexed by weapon identifiers, including metadata such as category, base name, damage types, and more.
Constant Summary collapse
- @@weapon_stats =
Static array of weapon stats indexed by weapon identifiers. Each weapon entry contains metadata such as category, base name, alternative names, damage types, damage factors, armor avoidance by armor size group (ASG), base roundtime (RT), and minimum RT.
damage_types: Hash of damage type percentages or values. :slash => % of slash damage (Float or nil) :crush => % of crush damage (Float or nil) :puncture => % of puncture damage (Float or nil) :special => Array of special damage types (or nil)
damage factor array: [0] = nil (none) [1] = Cloth [2] = Leather [3] = Scale [4] = Chain [5] = Plate
avd_by_asg array: Cloth: [1] ASG 1 [2] ASG 2 [3] nil [4] nil Leather: [5] ASG 5 [6] ASG 6 [7] ASG 7 [8] ASG 8 Scale: [9] ASG 9 [10] ASG 10 [11] ASG 11 [12] ASG 12 Chain: [13] ASG 13 [14] ASG 14 [15] ASG 15 [16] ASG 16 Plate: [17] ASG 17 [18] ASG 18 [19] ASG 19 [20] ASG 20
{ brawling: @@weapon_stats_brawling, hybrid: @@weapon_stats_hybrid, missile: @@weapon_stats_ranged, blunt: @@weapon_stats_blunt, edged: @@weapon_stats_edged, natural: @@weapon_stats_natural, polearm: @@weapon_stats_polearm, runestave: @@weapon_stats_runestave, thrown: @@weapon_stats_thrown, two_handed: @@weapon_stats_two_handed, unarmed: @@weapon_stats_unarmed, }
- @@weapon_stats_blunt =
Static hash containing weapon statistics for blunt weapons. Each entry includes details such as category, base name, all names, damage types, damage factors, armor avoidance by armor size group, base roundtime, and minimum roundtime.
{ # Weapon statistics for the ball and chain. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :ball_and_chain => { :category => :blunt, :base_name => "ball and chain", :all_names => ["ball and chain", "binnol", "goupillon", "mace and chain"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.400, 0.300, 0.230, 0.260, 0.180], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 15, 15, nil, nil, 20, 19, 18, 17, 27, 25, 23, 21, 35, 31, 27, 23, 30, 24, 18, 12], :base_rt => 6, :min_rt => 4, }, # Weapon statistics for the crowbill. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :crowbill => { :category => :blunt, :base_name => "crowbill", :all_names => ["crowbill", "hakapik", "skull-piercer"], :damage_types => { slash: 0.0, crush: 50.0, puncture: 50.0, special: [] }, :damage_factor => [nil, 0.350, 0.250, 0.200, 0.150, 0.125], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 36, 35, 34, 33, 30, 28, 26, 24, 30, 26, 22, 18, 20, 14, 8, 2], :base_rt => 3, :min_rt => 3 }, # Weapon statistics for the cudgel. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :cudgel => { :category => :blunt, :base_name => "cudgel", :all_names => ["cudgel", "aklys", "baculus", "club", "jo stick", "lisan", "periperiu", "shillelagh", "tambara", "truncheon", "waihaka", "war club"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.350, 0.275, 0.200, 0.225, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 20, 20, nil, nil, 20, 19, 18, 17, 25, 23, 21, 19, 25, 21, 17, 13, 30, 24, 18, 12], :base_rt => 4, :min_rt => 4, }, # Weapon statistics for the leather whip. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :leather_whip => { :category => :blunt, :base_name => "leather whip", :all_names => ["leather whip", "bullwhip", "cat o' nine tails", "signal whip", "single-tail whip", "training whip", "whip"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.275, 0.150, 0.090, 0.100, 0.035], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 25, 24, 23, 22, 20, 18, 16, 14, 25, 21, 17, 13, 15, 9, 3, -3], :base_rt => 2, :min_rt => 3, }, # Weapon statistics for the mace. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :mace => { :category => :blunt, :base_name => "mace", :all_names => ["mace", "bulawa", "dhara", "flanged mace", "knee-breaker", "massuelle", "mattina", "nifa otti", "ox mace", "pernat", "quadrelle", "ridgemace", "studded mace"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.400, 0.300, 0.225, 0.250, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 31, 31, nil, nil, 32, 31, 30, 29, 35, 33, 31, 29, 42, 38, 34, 30, 36, 30, 24, 18], :base_rt => 4, :min_rt => 4, }, # Weapon statistics for the morning star. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :morning_star => { :category => :blunt, :base_name => "morning star", :all_names => ["morning star", "spiked mace", "holy water sprinkler", "spikestar"], :damage_types => { slash: 0.0, crush: 66.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.425, 0.325, 0.275, 0.300, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 33, 33, nil, nil, 35, 34, 33, 32, 34, 32, 30, 28, 42, 38, 34, 30, 37, 31, 25, 19], :base_rt => 5, :min_rt => 4, }, # Weapon statistics for the war hammer. # # @param category [Symbol] The category of the weapon (e.g., :blunt) # @param base_name [String] The primary name of the weapon # @param all_names [Array<String>] An array of all names for the weapon # @param damage_types [Hash] A hash of damage type percentages # @param damage_factor [Array<Float>] An array of damage factors against armor types # @param avd_by_asg [Array<Integer, nil>] An array of armor avoidance values by ASG # @param base_rt [Integer] The base roundtime for the weapon # @param min_rt [Integer] The minimum roundtime for the weapon :war_hammer => { :category => :blunt, :base_name => "war hammer", :all_names => ["war hammer", "fang", "hammerbeak", "hoolurge", "horseman's hammer", "skull-crusher", "taavish"], :damage_types => { slash: 0.0, crush: 66.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.410, 0.290, 0.250, 0.275, 0.200], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 30, 29, 28, 27, 32, 30, 28, 26, 41, 37, 33, 29, 37, 31, 25, 19], :base_rt => 4, :min_rt => 4, }, }
- @@weapon_stats_edged =
:Name => { :category => :unarmed, :base_name => "Name", :all_names => ["Name", "Alt", "Alt", "Alt"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, },
{ :arrow => { # when swung, not when fired :category => :edged, :base_name => "arrow", :all_names => ["arrow", "sitka"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.200, 0.100, 0.080, 0.100, 0.040], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 20, 20, nil, nil, 18, 17, 16, 15, 10, 8, 6, 4, 5, 1, -3, -7, -5, -11, -17, -23], :base_rt => 5, :min_rt => 4, }, :backsword => { :category => :edged, :base_name => "backsword", :all_names => ["backsword", "mortuary sword", "riding sword", "sidesword"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, }, :bastard_sword => { :category => :edged, :base_name => "bastard sword", :all_names => ["bastard sword", "cresset sword", "espadon", "war sword"], :damage_types => { slash: 66.7, crush: 33.3, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.450, 0.325, 0.275, 0.250, 0.180], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 31, 30, 29, 28, 31, 29, 27, 25, 32, 28, 24, 20, 31, 25, 19, 13], :base_rt => 6, :min_rt => 4, :grippable? => true, }, :broadsword => { :category => :edged, :base_name => "broadsword", :all_names => ["broadsword", "carp's tongue", "carp's-tongue", "flyssa", "goliah", "katzbalger", "kurzsax", "machera", "palache", "schiavona", "seax", "spadroon", "spatha", "talon sword", "xiphos"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.450, 0.300, 0.250, 0.225, 0.200], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 36, 36, nil, nil, 36, 35, 34, 33, 36, 34, 32, 30, 37, 33, 29, 25, 36, 30, 24, 18], :base_rt => 5, :min_rt => 4, }, :dagger => { :category => :edged, :base_name => "dagger", :all_names => ["alfange", "basilard", "bodice dagger", "bodkin", "boot dagger", "bracelet dagger", "butcher knife", "cinquedea", "crescent dagger", "dagger", "dirk", "fantail dagger", "forked dagger", "gimlet knife", "kaiken", "kidney dagger", "knife", "kozuka", "krizta", "kubikiri", "misericord", "parazonium", "pavade", "poignard", "pugio", "push dagger", "scramasax", "sgian achlais", "sgian dubh", "sidearm-of-Onar", "spike", "stiletto", "tanto", "trail knife", "trailknife", "zirah bouk"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.250, 0.200, 0.100, 0.125, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 23, 22, 21, 20, 15, 13, 11, 9, 10, 6, 2, -2, 0, -6, -12, -18], :base_rt => 1, :min_rt => 2, }, :estoc => { :category => :edged, :base_name => "estoc", :all_names => ["estoc", "koncerz"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.425, 0.300, 0.200, 0.200, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 36, 36, nil, nil, 38, 37, 36, 35, 35, 33, 31, 29, 40, 36, 32, 28, 30, 24, 18, 12], :base_rt => 4, :min_rt => 4, }, :falchion => { :category => :edged, :base_name => "falchion", :all_names => ["falchion", "badelaire", "craquemarte", "falcata", "kiss-of-ivas", "khopesh", "kopis", "machete", "takouba", "warblade"], :damage_types => { slash: 66.7, crush: 33.3, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.450, 0.325, 0.250, 0.250, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 37, 36, 35, 34, 38, 36, 34, 32, 39, 35, 31, 27, 39, 33, 27, 21], :base_rt => 5, :min_rt => 4, }, :handaxe => { :category => :edged, :base_name => "handaxe", :all_names => ["handaxe", "balta", "boarding axe", "broad axe", "cleaver", "crescent axe", "double-bit axe", "field-axe", "francisca", "hatchet", "hunting axe", "hunting hatchet", "ice axe", "limb-cleaver", "logging axe", "meat cleaver", "miner's axe", "moon axe", "ono", "raiding axe", "sparte", "splitting axe", "throwing axe", "taper", "tomahawk", "toporok", "waraxe"], :damage_types => { slash: 33.3, crush: 66.7, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.420, 0.300, 0.270, 0.240, 0.210], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 32, 31, 30, 29, 38, 36, 34, 32, 41, 37, 33, 29, 41, 35, 29, 23], :base_rt => 5, :min_rt => 4, }, :katana => { :category => :edged, :base_name => "katana", :all_names => ["katana"], :damage_types => { slash: 100.0, crush: 0.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.450, 0.325, 0.275, 0.225, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 36, 35, 34, 33, 36, 34, 32, 30, 37, 33, 29, 25, 35, 29, 23, 17], :base_rt => 5, :min_rt => 4, :weighting_type => :critical, :weighting_amount => 10, :grippable? => true, }, :longsword => { :category => :edged, :base_name => "longsword", :all_names => ["longsword", "arming sword", "kaskara", "langsax", "langseax", "mekya t'rhet", "sheering sword", "tachi"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.425, 0.275, 0.225, 0.200, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 41, 41, nil, nil, 42, 41, 40, 39, 43, 41, 39, 37, 37, 33, 29, 25, 35, 29, 23, 17], :base_rt => 4, :min_rt => 4, }, :main_gauche => { :category => :edged, :base_name => "main gauche", :all_names => ["parrying dagger", "main gauche", "shield-sword", "sword-breaker"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.275, 0.210, 0.110, 0.125, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 27, 27, nil, nil, 25, 24, 23, 22, 20, 18, 16, 14, 20, 16, 12, 8, 20, 14, 8, 2], :base_rt => 2, :min_rt => 3, }, :rapier => { :category => :edged, :base_name => "rapier", :all_names => ["bilbo", "colichemarde", "epee", "fleuret", "foil", "rapier", "schlager", "tizona", "tock", "tocke", "tuck", "verdun"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.325, 0.225, 0.125, 0.125, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 45, 45, nil, nil, 40, 39, 38, 37, 30, 28, 26, 24, 35, 31, 27, 23, 15, 9, 3, -3], :base_rt => 2, :min_rt => 3, }, :scimitar => { :category => :edged, :base_name => "scimitar", :all_names => ["scimitar", "charl's-tail", "cutlass", "disackn", "kilij", "palache", "sabre", "sapara", "shamshir", "yataghan"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.375, 0.260, 0.210, 0.200, 0.165], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 31, 30, 29, 28, 30, 28, 26, 24, 30, 26, 22, 18, 30, 24, 18, 12], :base_rt => 4, :min_rt => 4, }, :short_sword => { :category => :edged, :base_name => "short sword", :all_names => ["acinaces", "antler sword", "backslasher", "braquemar", "baselard", "chereb", "coustille", "gladius", "gladius graecus", "kris", "kukri", "Niima's-embrace", "sica", "wakizashi", "short sword", "shortsword", "short-sword"], :damage_types => { slash: 33.3, crush: 33.3, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.350, 0.240, 0.200, 0.150, 0.125], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 36, 35, 34, 33, 30, 28, 26, 24, 25, 21, 17, 13, 25, 19, 13, 7], :base_rt => 3, :min_rt => 3, }, :whip_blade => { :category => :edged, :base_name => "whip-blade", :all_names => ["whip-blade", "whipblade"], :damage_types => { slash: 100.0, crush: 0.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.333, 0.225, 0.125, 0.115, 0.065], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 45, 45, nil, nil, 40, 39, 38, 37, 30, 28, 26, 24, 35, 31, 27, 23, 15, 9, 3, -3], :base_rt => 2, :min_rt => 3, }, }
- @@weapon_stats_hybrid =
:Name => { :category => :unarmed, :base_name => "Name", :all_names => ["Name", "Alt", "Alt", "Alt"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, },
{ # Hybrid Weapons :katar => { :category => :hybrid, :hybrid_skills => [:OHE, :BRAWL], :base_name => "katar", :all_names => ["katar", "gauntlet-sword", "kunai", "manople", "paiscush", "pata", "slasher", "tvekre"], :damage_types => { slash: 33.3, crush: 0.0, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.325, 0.250, 0.225, 0.200, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, nil, nil, nil, 32, 31, 30, 29, 40, 38, 36, 34, 45, 41, 37, 33, 40, 34, 28, 22], :base_rt => 3, :min_rt => 3, }, }
- @@weapon_stats_ranged =
:Name => { :category => :unarmed, :base_name => "Name", :all_names => ["Name", "Alt", "Alt", "Alt"], :damage_types => 50.0, crush: 16.7, puncture: 33.3, special: [], :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, },
{ :composite_bow => { :category => :ranged, :base_name => "composite bow", :all_names => ["composite bow", "composite recurve bow", "lutk'azi"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.350, 0.300, 0.325, 0.275, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 35, 34, 33, 32, 30, 28, 26, 24, 42, 38, 34, 30, 36, 30, 24, 18], :base_rt => 6, :min_rt => 3, :weapon_class => :bow }, :hand_crossbow => { :category => :ranged, :base_name => "hand crossbow", :all_names => ["hand crossbow"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.275, 0.225, 0.250, 0.190, 0.135], :avd_by_asg => [nil, 20, 20, nil, nil, 26, 25, 24, 23, 20, 18, 16, 14, 34, 30, 26, 22, 27, 21, 15, 9], :base_rt => 4, :min_rt => 4, :weapon_class => :crossbow }, :heavy_crossbow => { :category => :ranged, :base_name => "heavy crossbow", :all_names => ["heavy crossbow", "heavy arbalest", "kut'ziko", "repeating crossbow", "siege crossbow"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.425, 0.325, 0.375, 0.285, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 36, 35, 34, 33, 31, 29, 27, 25, 46, 42, 38, 34, 40, 34, 28, 22], :base_rt => 7, :min_rt => 5, :weapon_class => :crossbow }, :light_crossbow => { :category => :ranged, :base_name => "light crossbow", :all_names => ["light crossbow", "kut'zikokra", "light arbalest"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.350, 0.300, 0.325, 0.275, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 31, 30, 29, 28, 25, 23, 21, 19, 39, 35, 31, 27, 32, 26, 20, 14], :base_rt => 6, :min_rt => 4, :weapon_class => :crossbow }, :long_bow => { :category => :ranged, :base_name => "long bow", :all_names => ["long bow", "long recurve bow", "longbow", "lutk'quoab", "yumi"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.400, 0.325, 0.350, 0.300, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 33, 32, 31, 30, 29, 27, 25, 23, 42, 38, 34, 30, 38, 32, 26, 20], :base_rt => 7, :min_rt => 3, :weapon_class => :bow }, :short_bow => { :category => :ranged, :base_name => "short bow", :all_names => ["short bow", "short recurve bow"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.325, 0.225, 0.275, 0.250, 0.100], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 20, 20, nil, nil, 27, 26, 25, 24, 20, 18, 16, 14, 31, 27, 23, 19, 27, 21, 15, 9], :base_rt => 5, :min_rt => 3, :weapon_class => :bow }, :broadhead => { :category => :ranged, :base_name => "broadhead", :all_names => ["broadhead", "default", ""], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, 0.0, 0.0, 0.0, 0.0, 0.0], # for ammunition, these are modifiers # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # for ammunition, these are modifiers :base_rt => 0, # for ammunition, this is a modifier, not a base RT :min_rt => 0, # for ammunition, this is a modifier, not a minimum RT :weapon_class => :ammunition }, :blunt => { :category => :ranged, :base_name => "blunt", :all_names => ["blunt"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 0.0, special: [:unbalance] }, :damage_factor => [nil, -0.050, -0.050, -0.050, -0.050, -0.050], # for ammunition, these are modifiers # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 10, 10, nil, nil, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], # for ammunition, these are modifiers :base_rt => 0, # for ammunition, this is a modifier, not a base RT :min_rt => 0, # for ammunition, this is a modifier, not a minimum RT :weapon_class => :ammunition, }, :bodkin_point => { :category => :ranged, :base_name => "bodkin point", :all_names => ["bodkin point"], :damage_types => { slash: 66.6, crush: 0.0, puncture: 33.7, special: [] }, :damage_factor => [nil, -0.050, -0.025, -0.010, 0.025, 0.015], # for ammunition, these are modifiers # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5], # for ammunition, these are modifiers :base_rt => 0, # for ammunition, this is a modifier, not a base RT :min_rt => 0, # for ammunition, this is a modifier, not a minimum RT :weapon_class => :ammunition }, :crescent => { :category => :ranged, :base_name => "crescent", :all_names => ["crescent"], :damage_types => { slash: 83.6, crush: 0.0, puncture: 16.7, special: [] }, :damage_factor => [nil, 0.0, 0.0, 0.0, 0.0, 0.0], # for ammunition, these are modifiers # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # for ammunition, these are modifiers :base_rt => 0, # for ammunition, this is a modifier, not a base RT :min_rt => 0, # for ammunition, this is a modifier, not a minimum RT :weapon_class => :ammunition }, }
- @@weapon_stats_thrown =
:Name => { :category => :unarmed, :base_name => "Name", :all_names => ["Name", "Alt", "Alt", "Alt"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [:unbalance] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, },
{ :bola => { :category => :thrown, :base_name => "bola", :all_names => ["bola", "bolas", "boleadoras", "kurutai", "weighted-cord"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 20, 19, 18, 17, 30, 28, 26, 24, 25, 21, 17, 13, 35, 29, 23, 17], :base_rt => 5, :min_rt => 2, }, :dart => { :category => :thrown, :base_name => "dart", :all_names => ["dart", "nagyka"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 100.0, special: [] }, :damage_factor => [nil, 0.125, 0.100, 0.075, 0.055, 0.050], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 30, 29, 28, 27, 25, 23, 21, 19, 20, 16, 12, 8, 10, 4, -2, -8], :base_rt => 2, :min_rt => 3, }, :discus => { :category => :thrown, :base_name => "discus", :all_names => ["discus", "throwing disc", "disc"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.255, 0.230, 0.155, 0.110, 0.057], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 35, 34, 33, 32, 30, 28, 26, 24, 25, 21, 17, 13, 30, 24, 18, 12], :base_rt => 5, :min_rt => 2, }, :javelin => { :category => :thrown, :base_name => "javelin", :all_names => ["javelin", "contus", "jaculum", "knopkierie", "lancea", "nage-yari", "pelta", "shail", "spiculum"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 100.0, special: [] }, :damage_factor => [nil, 0.400, 0.300, 0.250, 0.250, 0.100], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 27, 27, nil, nil, 28, 27, 25, 25, 26, 24, 22, 20, 29, 25, 21, 17, 20, 14, 8, 2], :base_rt => 4, :min_rt => 3, }, :throwing_net => { :category => :thrown, :base_name => "throwing net", :all_names => ["throwing net"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 0.0, special: [:unbalance] }, :damage_factor => [nil, 0.050, 0.050, 0.030, 0.030, 0.010], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 25, 24, 23, 22, 30, 28, 26, 24, 40, 36, 32, 28, 50, 44, 38, 32], :base_rt => 7, :min_rt => 3, }, :quoit => { :category => :thrown, :base_name => "quoit", :all_names => ["quoit", "bladed-ring", "bladed-disc", "bladed wheel", "battle-quoit", "chakram", "war-quoit"], :damage_types => { slash: 100.0, crush: 0.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.255, 0.230, 0.155, 0.110, 0.057], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 35, 34, 33, 32, 30, 28, 26, 24, 25, 21, 17, 13, 30, 24, 18, 12], :base_rt => 5, :min_rt => 3, }, :handaxe => { :category => :edged, :base_name => "handaxe", :all_names => ["handaxe", "balta", "boarding axe", "broad axe", "cleaver", "crescent axe", "double-bit axe", "field-axe", "francisca", "hatchet", "hunting axe", "hunting hatchet", "ice axe", "limb-cleaver", "logging axe", "meat cleaver", "miner's axe", "moon axe", "ono", "raiding axe", "sparte", "splitting axe", "throwing axe", "taper", "tomahawk", "toporok", "waraxe"], :damage_types => { slash: 33.3, crush: 66.7, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.420, 0.300, 0.270, 0.240, 0.210], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 32, 31, 30, 29, 38, 36, 34, 32, 41, 37, 33, 29, 41, 35, 29, 23], :base_rt => 5, :min_rt => 4, }, }
- @@weapon_stats_natural =
A collection of weapon stats for natural weapons. Each entry includes various attributes related to the weapon's performance and characteristics.
{ :bite => { :category => :natural, :base_name => "bite", :all_names => ["bite"], :damage_types => { slash: nil, crush: nil, puncture: nil, special: [] }, :damage_factor => [nil, 0.400, 0.375, 0.375, 0.325, 0.300], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 39, 39, nil, nil, 39, 35, 34, 33, 32, 30, 28, 26, 24, 32, 28, 24, 20, 25, 19, 13, 7], :base_rt => 5, :min_rt => 5, }, :charge => { :category => :natural, :base_name => "charge", :all_names => ["charge"], :damage_types => { slash: 0.0, crush: nil, puncture: 0.0, special: [:unbalance] }, :damage_factor => [nil, 0.175, 0.175, 0.150, 0.175, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 26, 26, nil, nil, 32, 31, 30, 29, 41, 39, 37, 35, 37, 33, 29, 25, 49, 43, 37, 31], :base_rt => 5, :min_rt => 5, }, :claw => { :category => :natural, :base_name => "claw", :all_names => ["claw"], :damage_types => { slash: nil, crush: nil, puncture: nil, special: [] }, :damage_factor => [nil, 0.225, 0.200, 0.200, 0.175, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 41, 41, nil, nil, 38, 37, 36, 35, 29, 27, 25, 23, 31, 27, 23, 19, 25, 19, 13, 7], :base_rt => 5, :min_rt => 5, }, :ensnare => { :category => :natural, :base_name => "ensnare", :all_names => ["ensnare"], :damage_types => { slash: nil, crush: nil, puncture: nil, special: [:grapple] }, :damage_factor => [nil, 0.275, 0.225, 0.200, 0.175, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 31, 30, 29, 28, 40, 38, 36, 34, 38, 34, 30, 26, 50, 44, 38, 32], :base_rt => 5, :min_rt => 5, }, :impale => { :category => :natural, :base_name => "impale", :all_names => ["impale"], :damage_types => { slash: 0.0, crush: nil, puncture: nil, special: [:unbalance] }, :damage_factor => [nil, 0.350, 0.325, 0.315, 0.300, 0.285], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 37, 37, nil, nil, 43, 42, 41, 40, 33, 31, 29, 27, 35, 31, 27, 23, 31, 25, 19, 13], :base_rt => 5, :min_rt => 5, }, :nip => { :category => :natural, :base_name => "nip", :all_names => ["nip"], :damage_types => { slash: 0.0, crush: 0.0, puncture: nil, special: [] }, :damage_factor => [nil, 0.125, 0.105, 0.090, 0.090, 0.100], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 40, 39, 38, 37, 25, 23, 21, 19, 28, 24, 20, 16, 20, 14, 8, 2], :base_rt => 5, :min_rt => 5, }, :pincer => { :category => :natural, :base_name => "pincer", :all_names => ["pincer"], :damage_types => { slash: nil, crush: nil, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.300, 0.300, 0.225, 0.225, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 37, 37, nil, nil, 35, 34, 33, 32, 30, 28, 26, 24, 34, 30, 26, 22, 30, 24, 18, 12], :base_rt => 5, :min_rt => 5, }, :pound => { :category => :natural, :base_name => "pound", :all_names => ["pound"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.425, 0.350, 0.325, 0.325, 0.275], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 45, 44, 43, 42, 46, 44, 42, 40, 50, 46, 42, 38, 50, 44, 38, 32], :base_rt => 5, :min_rt => 5, }, :stinger => { :category => :natural, :base_name => "stinger", :all_names => ["stinger"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 100.0, special: [] }, :damage_factor => [nil, 0.110, 0.100, 0.100, 0.090, 0.085], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 43, 43, nil, nil, 30, 29, 28, 27, 25, 23, 21, 19, 28, 24, 20, 16, 20, 14, 8, 2], :base_rt => 5, :min_rt => 5, }, :stomp => { :category => :natural, :base_name => "stomp", :all_names => ["stomp"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.325, 0.325, 0.250, 0.225, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 39, 39, nil, nil, 45, 44, 43, 42, 35, 33, 31, 29, 45, 41, 37, 33, 33, 27, 21, 15], :base_rt => 5, :min_rt => 5, }, :tail_swing => { :category => :natural, :base_name => "tail swing", :all_names => ["tail swing"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.400, 0.300, 0.225, 0.250, 0.175], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 31, 31, nil, nil, 32, 31, 30, 29, 35, 33, 31, 29, 42, 38, 34, 30, 36, 30, 24, 18], :base_rt => 5, :min_rt => 5, }, }
- @@weapon_stats_polearm =
:Name => { :category => :unarmed, :base_name => "Name", :all_names => ["Name", "Alt", "Alt", "Alt"], :damage_types => { slash: 50.0, crush: 16.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.310, 0.225, 0.240, 0.125, 0.150], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 38, 38, nil, nil, 38, 37, 36, 35, 34, 32, 30, 28, 38, 34, 30, 26, 34, 28, 22, 16], :base_rt => 5, :min_rt => 4, },
{ :awl_pike => { :category => :polearm, :base_name => "awl-pike", :all_names => ["awl-pike", "ahlspiess", "breach pike", "chest-ripper", "korseke", "military fork", "ranseur", "runka", "scaling fork", "spetum"], :damage_types => { slash: 0.0, crush: 13.0, puncture: 87.0, special: [] }, :damage_factor => [nil, 0.600, 0.550, 0.575, 0.450, 0.350], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 15, 15, nil, nil, 20, 19, 18, 17, 35, 33, 21, 29, 45, 41, 37, 33, 50, 44, 38, 32], :base_rt => 9, :min_rt => 4, }, :halberd => { :category => :polearm, :base_name => "halberd", :all_names => ["halberd", "atgeir", "bardiche", "bill", "brandestoc", "croc", "falcastra", "fauchard", "glaive", "godendag", "guisarme", "half moon", "half-moon", "hippe", "kerambit", "pole axe", "pole-axe", "scorpion", "scythe"], :damage_types => { slash: 33.3, crush: 33.3, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.550, 0.400, 0.400, 0.300, 0.200], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 30, 29, 28, 17, 31, 29, 27, 25, 32, 28, 24, 20, 32, 26, 20, 14], :base_rt => 6, :min_rt => 4, }, :hammer_of_kai => { :category => :polearm, :base_name => "Hammer of Kai", :all_names => ["Hammer of Kai", "bovai", "longhammer", "polehammer", "spiked-hammer"], :damage_types => { slash: 0.0, crush: nil, puncture: nil, special: [] }, # data missing from wiki :damage_factor => [nil, 0.550, 0.425, 0.450, 0.350, 0.250], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 20, 20, nil, nil, 25, 24, 23, 22, 35, 33, 31, 29, 40, 36, 32, 28, 40, 34, 28, 22], :base_rt => 7, :min_rt => 4, }, :jeddart_axe => { :category => :polearm, :base_name => "jeddart-axe", :all_names => ["jeddart-axe", "beaked axe", "nagimaki", "poleaxe", "voulge"], :damage_types => { slash: 50.0, crush: 50.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.550, 0.425, 0.425, 0.325, 0.250], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 32, 31, 30, 29, 30, 28, 26, 24, 40, 36, 32, 28, 30, 24, 18, 12], :base_rt => 7, :min_rt => 4, }, :javelin => { :category => :polearm, :base_name => "javelin", :all_names => ["javelin", "contus", "jaculum", "knopkierie", "lancea", "nage-yari", "pelta", "shail", "spiculum"], :damage_types => { slash: 17.0, crush: 0.0, puncture: 83.0, special: [] }, :damage_factor => [nil, 0.402, 0.304, 0.254, 0.254, 0.102], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 27, 27, nil, nil, 28, 27, 25, 25, 26, 24, 22, 20, 29, 25, 21, 17, 20, 14, 8, 2], :base_rt => 4, :min_rt => 5, }, :lance => { :category => :polearm, :base_name => "lance", :all_names => ["lance", "framea", "pike", "sarissa", "sudis", "warlance", "warpike"], :damage_types => { slash: 0.0, crush: 33.0, puncture: 67.0, special: [] }, :damage_factor => [nil, 0.725, 0.525, 0.559, 0.475, 0.350], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 38, 37, 36, 35, 39, 37, 35, 33, 53, 49, 45, 31, 50, 44, 38, 32], :base_rt => 9, :min_rt => 4, }, :naginata => { :category => :polearm, :base_name => "naginata", :all_names => ["naginata", "swordstaff", "bladestaff"], :damage_types => { slash: 33.3, crush: 33.3, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.550, 0.400, 0.400, 0.300, 0.200], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 50, 50, nil, nil, 50, 49, 48, 27, 51, 49, 47, 45, 52, 48, 44, 40, 52, 46, 40, 34], :base_rt => 6, :min_rt => 4, }, :pilum => { :category => :polearm, :base_name => "pilum", :all_names => ["pilum"], :damage_types => { slash: 17.0, crush: 0.0, puncture: 83.0, special: [] }, :damage_factor => [nil, 0.350, 0.250, 0.225, 0.175, 0.060], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 27, 26, 25, 24, 22, 20, 18, 16, 23, 19, 15, 11, 15, 9, 3, -3], :base_rt => 3, :min_rt => 3, }, :spear => { :category => :polearm, :base_name => "spear", :all_names => ["angon", "atlatl", "boar spear", "cateia", "dory", "falarica", "gaesum", "gaizaz", "harpoon", "hasta", "partisan", "partizan", "pill spear", "spontoon", "verutum", "yari"], :damage_types => { slash: 17.0, crush: 0.0, puncture: 83.0, special: [] }, # spear can be used 1 or 2 handed, using the same skill, arrays returned for data below are 0 = one handed, and 1 = two handed :damage_factor => [[nil, 0.425, 0.325, 0.250, 0.250, 0.160], [nil, 0.550, 0.225, 0.240, 0.125, 0.150]], # /Cloth / Leather / Scale / Chain / Plate /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [[nil, 27, 27, nil, nil, 29, 28, 27, 26, 27, 25, 23, 21, 30, 26, 22, 18, 25, 19, 13, 7], [nil, 33, 33, nil, nil, 32, 31, 30, 29, 34, 32, 30, 28, 36, 32, 28, 24, 33, 27, 21, 15]], :base_rt => [5, 6], :min_rt => 4, :grippable? => true, }, :trident => { :category => :polearm, :base_name => "trident", :all_names => ["trident", "fuscina", "magari-yari", "pitch fork", "pitchfork", "zinnor"], :damage_types => { slash: 33.0, crush: 0.0, puncture: 67.0, special: [] }, # trident can be used 1 or 2 handed, using the same skill, arrays returned for data below are 0 = one handed, and 1 = two handed :damage_factor => [[nil, 0.425, 0.350, 0.260, 0.230, 0.150], [nil, 0.600, 0.425, 0.375, 0.300, 0.185]], # /Cloth / Leather / Scale / Chain / Plate /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [[nil, 31, 31, nil, nil, 31, 30, 29, 28, 34, 32, 30, 28, 42, 38, 34, 30, 29, 23, 17, 11], [nil, 29, 29, nil, nil, 30, 29, 28, 27, 30, 28, 26, 24, 37, 33, 29, 25, 25, 19, 13, 7]], :base_rt => [5, 6], :min_rt => 4, :grippable? => true, }, }
- @@weapon_stats_unarmed =
A hash containing weapon statistics for unarmed combat. Each key is a weapon identifier, and the value is a hash of attributes related to that weapon.
{ :cestus => { :category => :unarmed, :base_name => "cestus", :all_names => ["cestus"], :damage_factor_modifier => 0.25, :ucs_multiplier_modifier => -5, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :footwraps => { :category => :unarmed, :base_name => "footwraps", :all_names => ["footwraps", "boots"], # additional names could exist, there is no list on the wiki of allowable nouns :damage_factor_modifier => 0.0, :ucs_multiplier_modifier => 0, :both_hands? => nil, # does not apply :both_hands_modifier => nil, # does not apply :held_or_worn => :worn, }, :handwraps => { :category => :unarmed, :base_name => "handwraps", :all_names => ["handwraps", "gloves", "gauntlet"], # additional names could exist, there is no list on the wiki of allowable nouns :damage_factor_modifier => 0.0, :ucs_multiplier_modifier => 0, :both_hands? => nil, # does not apply :both_hands_modifier => nil, # does not apply :held_or_worn => :worn, }, :knuckle_blade => { :category => :unarmed, :base_name => "knuckle-blade", :all_names => ["knuckle-blade", "slash-fist"], :damage_factor_modifier => 0.50, :ucs_multiplier_modifier => -10, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :knuckle_duster => { :category => :unarmed, :base_name => "knuckle-duster", :all_names => ["knuckle-duster", "knuckle-guard", "knuckles"], :damage_factor_modifier => 0.50, :ucs_multiplier_modifier => -10, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :paingrip => { :category => :unarmed, :base_name => "paingrip", :all_names => ["paingrip", "grab-stabber"], :damage_factor_modifier => 0.25, :ucs_multiplier_modifier => -5, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :razorpaw => { :category => :unarmed, :base_name => "razorpaw", :all_names => ["razorpaw", "slap-slasher"], :damage_factor_modifier => 0.25, :ucs_multiplier_modifier => -5, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :tiger_claw => { :category => :unarmed, :base_name => "tiger-claw", :all_names => ["tiger-claw", "thrak-bite", "barbed claw"], :damage_factor_modifier => 0.75, :ucs_multiplier_modifier => -15, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, :yierka_spur => { :category => :unarmed, :base_name => "yierka-spur", :all_names => ["yierka-spur", "spike-fist"], :damage_factor_modifier => 0.75, :ucs_multiplier_modifier => -15, :both_hands? => true, # may hold two for additional bonuses :both_hands_modifier => 2, # multiplies the modifiers by 2 :held_or_worn => :held, }, }
- @@weapon_stats_brawling =
Static array of weapon stats indexed by weapon identifiers. Each weapon entry contains metadata such as category, base name, alternative names, damage types, damage factors, armor avoidance by armor size group (ASG), base roundtime (RT), and minimum RT.
{ # Weapon statistics for the closed fist. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :closed_fist => { :category => :brawling, :base_name => "closed fist", :all_names => ["closed fist"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.100, 0.075, 0.040, 0.036, 0.032], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 20, 19, 18, 17, 10, 8, 6, 4, 5, 1, -3, -7, -5, -11, -17, -23], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the blackjack. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :blackjack => { :category => :brawling, :base_name => "blackjack", :all_names => ["blackjack", "bludgeon", "sap"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.250, 0.140, 0.090, 0.110, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 35, 34, 33, 32, 25, 23, 21, 19, 15, 11, 7, 3, 0, -6, -12, -18], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the cestus. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :cestus => { :category => :brawling, :base_name => "cestus", :all_names => ["cestus"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.250, 0.175, 0.150, 0.075, 0.035], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 30, 29, 28, 27, 20, 18, 16, 14, 10, 6, 2, -2, -25, -31, -37, -43], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the fist-scythe. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :fist_scythe => { :category => :brawling, :base_name => "fist-scythe", :all_names => ["fist-scythe", "hand-hook", "hook", "hook-claw", "kama", "sickle"], :damage_types => { slash: 66.7, crush: 16.7, puncture: 16.6, special: [] }, :damage_factor => [nil, 0.350, 0.225, 0.200, 0.175, 0.125], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 45, 45, nil, nil, 40, 39, 38, 37, 30, 28, 26, 24, 37, 33, 29, 25, 20, 14, 8, 2], :base_rt => 3, :min_rt => 3, }, # Weapon statistics for the hook-knife. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :hook_knife => { :category => :brawling, :base_name => "hook-knife", :all_names => ["hook-knife", "pit-knife", "sabiet"], :damage_types => { slash: nil, crush: 0.0, puncture: nil, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.250, 0.175, 0.125, 0.070, 0.035], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 30, 29, 28, 27, 18, 16, 13, 12, 10, 6, 2, -2, -15, -21, -27, -33], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the jackblade. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :jackblade => { :category => :brawling, :base_name => "jackblade", :all_names => ["jackblade", "slash-jack"], :damage_types => { slash: nil, crush: nil, puncture: 0.0, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.250, 0.175, 0.150, 0.150, 0.110], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 45, 45, nil, nil, 35, 34, 33, 32, 25, 23, 21, 19, 20, 16, 12, 8, 10, 4, -2, -8], :base_rt => 2, :min_rt => 3, }, # Weapon statistics for the paingrip. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :paingrip => { :category => :brawling, :base_name => "paingrip", :all_names => ["paingrip", "grab-stabber"], :damage_types => { slash: nil, crush: nil, puncture: nil, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.225, 0.200, 0.125, 0.075, 0.030], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 20, 19, 18, 17, 15, 13, 11, 9, 15, 11, 7, 3, -25, -31, -37, -43], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the sai. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :sai => { :category => :brawling, :base_name => "sai", :all_names => ["sai", "jitte"], :damage_types => { slash: 0.0, crush: 0.0, puncture: 100.0, special: [] }, :damage_factor => [nil, 0.250, 0.200, 0.110, 0.150, 0.040], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 30, 30, nil, nil, 31, 30, 29, 28, 25, 23, 21, 19, 33, 29, 25, 21, 6, 0, -6, -12], :base_rt => 2, :min_rt => 3, }, # Weapon statistics for the knuckle-blade. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :knuckle_blade => { :category => :brawling, :base_name => "knuckle-blade", :all_names => ["knuckle-blade", "slash-fist"], :damage_types => { slash: 66.7, crush: 33.3, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.250, 0.150, 0.100, 0.075, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 45, 45, nil, nil, 40, 39, 38, 37, 25, 23, 21, 19, 25, 21, 17, 13, 0, -6, -12, -18], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the knuckle-duster. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :knuckle_duster => { :category => :brawling, :base_name => "knuckle-duster", :all_names => ["knuckle-duster", "knuckle-guard", "knuckles"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.250, 0.175, 0.125, 0.100, 0.040], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 32, 31, 30, 29, 25, 23, 21, 19, 18, 14, 10, 6, 0, -6, -12, -18], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the razorpaw. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :razorpaw => { :category => :brawling, :base_name => "razorpaw", :all_names => ["razorpaw", "slap-slasher"], :damage_types => { slash: 100.0, crush: 0.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.275, 0.200, 0.125, 0.050, 0.030], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 20, 19, 18, 17, 10, 8, 6, 4, 0, -4, -8, -12, -25, -31, -37, -43], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the tiger-claw. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :tiger_claw => { :category => :brawling, :base_name => "tiger-claw", :all_names => ["tiger-claw", "thrak-bite", "barbed claw"], :damage_types => { slash: nil, crush: nil, puncture: 0.0, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.275, 0.200, 0.150, 0.100, 0.035], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 25, 24, 23, 22, 15, 13, 11, 9, 5, 1, -3, -7, -25, -31, -37, -43], :base_rt => 1, :min_rt => 2, }, # Weapon statistics for the troll-claw. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :troll_claw => { :category => :brawling, :base_name => "troll-claw", :all_names => ["troll-claw", "bladed claw", "kumade", "wight-claw"], :damage_types => { slash: nil, crush: nil, puncture: 0.0, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.325, 0.175, 0.140, 0.120, 0.090], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 46, 46, nil, nil, 35, 34, 33, 32, 25, 23, 21, 19, 25, 21, 17, 13, 15, 9, 3, -3], :base_rt => 2, :min_rt => 3, }, # Weapon statistics for the yierka-spur. # # @return [Hash] weapon statistics including category, base name, # alternative names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :yierka_spur => { :category => :brawling, :base_name => "yierka-spur", :all_names => ["yierka-spur", "spike-fist"], :damage_types => { slash: nil, crush: nil, puncture: nil, special: [] }, # Missing Data on Wiki :damage_factor => [nil, 0.250, 0.150, 0.125, 0.125, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 35, 34, 33, 32, 25, 23, 21, 19, 30, 26, 22, 18, 0, -6, -12, -18], :base_rt => 1, :min_rt => 2, }, }
- @@weapon_stats_runestave =
A hash containing weapon stats for various weapons. Each weapon's stats include category, base name, all names, damage types, damage factors, armor avoidance by ASG, base roundtime, and minimum roundtime.
{ # Weapon stats for the runestave. # # @return [Hash] weapon stats including category, base name, # all names, damage types, damage factors, armor avoidance, # base roundtime, and minimum roundtime. :runestave => { :category => :runestave, :base_name => "runestave", :all_names => ["runestave", "asaya", "crook", "crosier", "pastoral staff", "rune staff", "runestaff", "scepter", "scepter-of-Lumnis", "staff", "staff-of-lumnis", "walking stick"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.250, 0.200, 0.150, 0.150, 0.075], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 10, 10, nil, nil, 15, 14, 13, 12, 10, 8, 6, 4, 15, 11, 7, 3, 10, 4, -2, -8], :base_rt => 6, :min_rt => 4, }, }
- @@weapon_stats_two_handed =
Static array of weapon stats indexed by weapon identifiers. Each weapon entry contains metadata such as category, base name, alternative names, damage types, damage factors, armor avoidance by armor size group (ASG), base roundtime (RT), and minimum RT.
{ # Weapon statistics for the bastard sword. # # @return [Hash] weapon stats including category, base name, damage types, and more. :bastard_sword => { :category => :two_handed, :base_name => "bastard sword", :all_names => ["bastard sword", "cresset sword", "espadon", "war sword"], :damage_types => { slash: 66.7, crush: 33.3, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.550, 0.400, 0.375, 0.300, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 42, 42, nil, nil, 45, 44, 43, 42, 41, 39, 37, 35, 44, 40, 36, 32, 43, 37, 31, 25], :base_rt => 6, :min_rt => 4, :grippable? => true, }, # Weapon statistics for the battle axe. # # @return [Hash] weapon stats including category, base name, damage types, and more. :battle_axe => { :category => :two_handed, :base_name => "battle axe", :all_names => ["battle axe", "adze", "balestarius", "battle-axe", "bearded axe", "doloire", "executioner's axe", "greataxe", "hektov sket", "kheten", "roa'ter axe", "tabar", "woodsman's axe"], :damage_types => { slash: 66.7, crush: 33.3, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.650, 0.475, 0.500, 0.375, 0.275], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 35, 35, nil, nil, 39, 38, 37, 36, 43, 41, 39, 37, 50, 46, 42, 38, 50, 44, 38, 32], :base_rt => 8, :min_rt => 4, }, # Weapon statistics for the claidmore. # # @return [Hash] weapon stats including category, base name, damage types, and more. :claidhmore => { # made a choice here to only account for new style claidmores, not the old ones :category => :two_handed, :base_name => "claidhmore", :all_names => ["claidhmore"], :damage_types => { slash: 50.0, crush: 50.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.625, 0.475, 0.500, 0.350, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 31, 31, nil, nil, 35, 34, 33, 32, 34, 32, 30, 28, 38, 34, 30, 26, 37, 31, 25, 19], :base_rt => 8, :min_rt => 4, :weighting_type => :critical, :weighting_amount => 40, }, # Weapon statistics for the flail. # # @return [Hash] weapon stats including category, base name, damage types, and more. :flail => { :category => :two_handed, :base_name => "flail", :all_names => ["flail", "military flail", "spiked-staff"], :damage_types => { slash: 0.0, crush: 66.7, puncture: 33.3, special: [] }, :damage_factor => [nil, 0.575, 0.425, 0.400, 0.350, 0.250], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 40, 40, nil, nil, 45, 44, 43, 42, 46, 44, 42, 40, 51, 47, 43, 39, 52, 46, 40, 34], :base_rt => 7, :min_rt => 4, }, # Weapon statistics for the flamberge. # # @return [Hash] weapon stats including category, base name, damage types, and more. :flamberge => { :category => :two_handed, :base_name => "flamberge", :all_names => ["flamberge", "reaver", "wave-bladed sword", "sword-of-Phoen"], :damage_types => { slash: 50.0, crush: 50.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.600, 0.450, 0.475, 0.325, 0.225], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 39, 39, nil, nil, 43, 42, 41, 40, 48, 46, 44, 42, 50, 46, 42, 38, 44, 38, 32, 26], :base_rt => 7, :min_rt => 4, }, # Weapon statistics for the katana. # # @return [Hash] weapon stats including category, base name, damage types, and more. :katana => { :category => :two_handed, :base_name => "katana", :all_names => ["katana"], :damage_types => { slash: 100.0, crush: 0.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.575, 0.425, 0.400, 0.325, 0.210], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 39, 39, nil, nil, 41, 40, 39, 38, 40, 38, 36, 34, 41, 37, 33, 29, 39, 33, 27, 21], :base_rt => 6, :min_rt => 4, :weighting_type => :critical, :weighting_amount => 10, :grippable? => true, }, # Weapon statistics for the maul. # # @return [Hash] weapon stats including category, base name, damage types, and more. :maul => { :category => :two_handed, :base_name => "maul", :all_names => ["maul", "battle hammer", "footman's hammer", "sledgehammer", "tetsubo"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.550, 0.425, 0.425, 0.375, 0.300], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 31, 31, nil, nil, 36, 35, 34, 33, 44, 42, 40, 38, 52, 48, 44, 40, 54, 48, 42, 36], :base_rt => 7, :min_rt => 4, }, # Weapon statistics for the military pick. # # @return [Hash] weapon stats including category, base name, damage types, and more. :military_pick => { :category => :two_handed, :base_name => "military pick", :all_names => ["military pick", "bisacuta", "mining pick"], :damage_types => { slash: 0.0, crush: 33.3, puncture: 66.7, special: [] }, :damage_factor => [nil, 0.500, 0.375, 0.425, 0.375, 0.260], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 30, 29, 28, 27, 40, 38, 36, 34, 40, 36, 32, 28, 47, 41, 35, 29], :base_rt => 7, :min_rt => 4, }, # Weapon statistics for the quarterstaff. # # @return [Hash] weapon stats including category, base name, damage types, and more. :quarterstaff => { :category => :two_handed, :base_name => "quarterstaff", :all_names => ["quarterstaff", "bo stick", "staff", "toyak", "walking staff", "warstaff", "yoribo"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.450, 0.350, 0.325, 0.175, 0.100], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 25, 25, nil, nil, 26, 25, 24, 23, 25, 23, 21, 19, 26, 22, 18, 14, 24, 18, 12, 6], :base_rt => 3, :min_rt => 3, }, # Weapon statistics for the two-handed sword. # # @return [Hash] weapon stats including category, base name, damage types, and more. :two_handed_sword => { :category => :two_handed, :base_name => "two-handed sword", :all_names => ["two-handed sword", "battlesword", "beheading sword", "bidenhander", "falx", "executioner's sword", "greatsword", "mekya ne'rutka", "no-dachi", "zweihander"], :damage_types => { slash: 50.0, crush: 50.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.625, 0.500, 0.500, 0.350, 0.275], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 41, 41, nil, nil, 45, 44, 43, 42, 44, 42, 40, 38, 48, 44, 40, 36, 47, 41, 35, 29], :base_rt => 8, :min_rt => 4, }, # Weapon statistics for the war mattock. # # @return [Hash] weapon stats including category, base name, damage types, and more. :war_mattock => { :category => :two_handed, :base_name => "war mattock", :all_names => ["war mattock", "mattock", "oncin", "pickaxe", "sabar"], :damage_types => { slash: 0.0, crush: 100.0, puncture: 0.0, special: [] }, :damage_factor => [nil, 0.550, 0.450, 0.425, 0.375, 0.275], # /Cloth / Leather / Scale / Chain / Plate :avd_by_asg => [nil, 32, 32, nil, nil, 37, 36, 35, 34, 44, 42, 40, 38, 48, 44, 40, 36, 53, 47, 41, 35], :base_rt => 7, :min_rt => 4, }, }
Class Method Summary collapse
-
.aliases_for(name, category = nil) ⇒ Array<String>
Retrieves all aliases for a specified weapon name.
-
.categories ⇒ Array<Symbol>
Returns the list of weapon categories available.
-
.category_for(name) ⇒ String?
Retrieves the category for a specified weapon name.
-
.compare(name1, name2, category1 = nil, category2 = nil) ⇒ Hash?
Compares two weapons and returns their statistics.
-
.damage_summary(name, category = nil) ⇒ Hash?
Provides a summary of damage types for a specified weapon.
-
.find(name, category = nil) ⇒ Hash?
Finds a weapon by its name and optional category.
-
.is_grippable?(name) ⇒ Boolean
Checks if a weapon is grippable by its name.
-
.list(category = nil) ⇒ Array<Hash>
Lists all weapons in the specified category or all weapons if no category is given.
-
.names ⇒ Array<String>
Returns a unique list of all weapon names and aliases.
-
.pretty(name) ⇒ String
Returns a concise string representation of a weapon's stats.
-
.pretty_long(name) ⇒ String
Returns a detailed string representation of a weapon's stats.
-
.search(filters = {}) ⇒ Array<Hash>
Searches for weapons based on specified filters.
-
.valid_name?(name) ⇒ Boolean
Validates if a given name corresponds to a known weapon.
-
.weapons_in_category(category) ⇒ Array<Hash>
Retrieves all weapons in a specified category.
Class Method Details
.aliases_for(name, category = nil) ⇒ Array<String>
Retrieves all aliases for a specified weapon name.
152 153 154 155 156 157 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 152 def self.aliases_for(name, category = nil) name = name.downcase.strip weapon = self.find(name, category) weapon ? weapon[:all_names] : [] end |
.categories ⇒ Array<Symbol>
Returns the list of weapon categories available.
117 118 119 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 117 def self.categories @@weapon_stats.keys end |
.category_for(name) ⇒ String?
Retrieves the category for a specified weapon name.
297 298 299 300 301 302 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 297 def self.category_for(name) name = name.downcase.strip weapon = self.find(name) weapon ? weapon[:category] : nil end |
.compare(name1, name2, category1 = nil, category2 = nil) ⇒ Hash?
Compares two weapons and returns their statistics.
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 169 def self.compare(name1, name2, category1 = nil, category2 = nil) name1 = name1.downcase.strip name2 = name2.downcase.strip return nil if name1 == name2 && category1 == category2 w1 = self.find(name1, category1) w2 = self.find(name2, category2) return nil unless w1 && w2 { name1: w1[:base_name], name2: w2[:base_name], damage_types: [w1[:damage_types], w2[:damage_types]], damage_factors: [w1[:damage_factor], w2[:damage_factor]], avd_by_asg: [w1[:avd_by_asg], w2[:avd_by_asg]], base_rt: [w1[:base_rt], w2[:base_rt]], min_rt: [w1[:min_rt], w2[:min_rt]] } end |
.damage_summary(name, category = nil) ⇒ Hash?
Provides a summary of damage types for a specified weapon.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 129 def self.damage_summary(name, category = nil) name = name.downcase.strip weapon = self.find(name, category) return nil unless weapon { base_name: weapon[:base_name], slash: weapon[:damage_types][:slash], crush: weapon[:damage_types][:crush], puncture: weapon[:damage_types][:puncture], special: weapon[:damage_types][:special] } end |
.find(name, category = nil) ⇒ Hash?
Finds a weapon by its name and optional category.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 72 def self.find(name, category = nil) name = name.downcase.strip unless category.nil? weapons = @@weapon_stats[category] return nil unless weapons weapons.each_value do |weapon_info| return weapon_info if weapon_info[:all_names]&.include?(name) end else @@weapon_stats.each_value do |weapons| weapons.each_value do |weapon_info| return weapon_info if weapon_info[:all_names]&.include?(name) end end end nil end |
.is_grippable?(name) ⇒ Boolean
Checks if a weapon is grippable by its name.
282 283 284 285 286 287 288 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 282 def self.is_grippable?(name) name = name.downcase.strip weapon = self.find(name) weapon && weapon[:grippable?] == true end |
.list(category = nil) ⇒ Array<Hash>
Lists all weapons in the specified category or all weapons if no category is given.
99 100 101 102 103 104 105 106 107 108 109 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 99 def self.list(category = nil) result = [] if category result.concat(@@weapon_stats[category]&.values || []) else @@weapon_stats.each_value do |weapons| result.concat(weapons.values) end end result end |
.names ⇒ Array<String>
Returns a unique list of all weapon names and aliases.
269 270 271 272 273 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 269 def self.names @@weapon_stats.values.flat_map do |weapons| weapons.values.map { |w| w[:all_names] } end.flatten.compact.uniq end |
.pretty(name) ⇒ String
Returns a concise string representation of a weapon's stats.
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 381 def self.pretty(name) weapon = self.find(name) return "\n(no data)\n" unless weapon.is_a?(Hash) lines = [] lines << "" # leading blank [:category, :base_name, :all_names, :base_rt, :min_rt, :grippable?, :weighting_type, :weighting_amount].each do |key| next unless weapon.key?(key) val = weapon[key] str_val = val.is_a?(Array) ? val.join(", ") : val.to_s lines << "%-18s: %s" % [key.to_s, str_val] end # damage types inline (always show, hash style) if weapon[:damage_types].is_a?(Hash) damage_str = weapon[:damage_types].map do |type, val| if type == :special "special=[#{val.join(", ")}]" else "#{type}=#{val}" end end.join(", ") lines << "%-18s: %s" % ["damage_types", damage_str] end # damage_factor inline if weapon[:damage_factor].is_a?(Array) df = weapon[:damage_factor][1..] || [] df_str = df.each_with_index.map { |v, i| "AG%-2d=%0.3f" % [i + 1, v] }.join(" ") lines << "%-18s: %s" % ["damage_factor", df_str] end # AVD in aligned two-line block if weapon[:avd_by_asg].is_a?(Array) avds = weapon[:avd_by_asg][1..] || [] col_width = 4 header = avds.each_index.map { |i| i + 1 }.map { |asg| asg.to_s.rjust(col_width) }.join values = avds.map { |v| v.nil? ? '--'.rjust(col_width) : v.to_s.rjust(col_width) }.join lines << "%-18s: %s" % ["avd_by_asg", header] lines << " " * 20 + values end lines << "" # trailing blank lines.join("\n") end |
.pretty_long(name) ⇒ String
Returns a detailed string representation of a weapon's stats.
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 311 def self.pretty_long(name) weapon = self.find(name) return "\n(no data)\n" unless weapon.is_a?(Hash) lines = [] core_fields = [ :category, :base_name, :all_names, :base_rt, :min_rt, :grippable?, :weighting_type, :weighting_amount ] # Field labels for max width calc top_labels = core_fields.map(&:to_s) + ["damage_types", "damage_factor", "avd_by_asg"] nested_labels = %w[slash crush puncture special] + Armaments::AG_INDEX_TO_NAME.values + Armaments::ASG_INDEX_TO_NAME.values indent = 2 max_label_width = (top_labels + nested_labels.map { |s| " " * indent + s }) .map(&:length).max # Print top-level fields core_fields.each do |key| next unless weapon.key?(key) val = weapon[key] str_val = val.is_a?(Array) ? val.join(", ") : val.to_s lines << "%-#{max_label_width}s : %s" % [key.to_s, str_val] end # Damage Types if weapon[:damage_types].is_a?(Hash) lines << "%-#{max_label_width}s :" % "damage_types" sub_indent = 2 sub_label_width = max_label_width - sub_indent weapon[:damage_types].each do |type, value| val_str = (type == :special) ? (value.empty? ? "(none)" : value.join(", ")) : value.to_s lines << "%s%-#{sub_label_width}s : %s" % [" " * sub_indent, type.to_s, val_str] end end # Damage Factor if weapon[:damage_factor].is_a?(Array) lines << "%-#{max_label_width}s :" % "damage_factor" weapon[:damage_factor][1..].each_with_index do |df, i| ag_index = i + 1 label = Armaments::AG_INDEX_TO_NAME[ag_index] || "AG #{ag_index}" lines << " %-#{max_label_width - indent}s : %s" % [label, df] end end # AvD by ASG if weapon[:avd_by_asg].is_a?(Array) lines << "%-#{max_label_width}s :" % "avd_by_asg" weapon[:avd_by_asg][1..].each_with_index do |avd, i| next unless avd label = Armaments::ASG_INDEX_TO_NAME[i + 1] || "ASG #{i + 1}" lines << " %-#{max_label_width - indent}s : %s" % [label, avd] end end lines.join("\n") end |
.search(filters = {}) ⇒ Array<Hash>
Searches for weapons based on specified filters.
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 197 def self.search(filters = {}) results = [] @@weapon_stats.each do |category, weapons| next if filters[:category] && filters[:category] != category weapons.each_value do |weapon| # Filter by damage type (including special) if filters[:damage_type] damage_types = weapon[:damage_types] next unless damage_types if filters[:damage_type] == :special specials = damage_types[:special] next if !specials || specials.empty? || specials.include?(:none) else value = damage_types[filters[:damage_type]] || 0.0 next if value <= 0.0 end end # Filter by base roundtime if filters[:max_base_rt] base_rt = weapon[:base_rt] next if base_rt.nil? || base_rt > filters[:max_base_rt] end # Filter by AVD value at a specific ASG if filters[:min_avd_by_asg] asg = filters[:min_avd_by_asg][:asg] min = filters[:min_avd_by_asg][:min] avd = weapon[:avd_by_asg] next unless avd && asg.between?(1, 20) next if avd[asg].nil? || avd[asg] < min end # Filter by DF against a given armor group if filters[:min_df_by_ag] ag = filters[:min_df_by_ag][:ag] min = filters[:min_df_by_ag][:min] df = weapon[:damage_factor] next unless df && ag.between?(1, 5) next if df[ag].nil? || df[ag] < min end results << weapon end end results end |
.valid_name?(name) ⇒ Boolean
Validates if a given name corresponds to a known weapon.
437 438 439 440 441 442 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 437 def self.valid_name?(name) name = name.downcase.strip @@weapon_stats.values.any? do |weapons| weapons.values.any? { |w| w[:all_names].include?(name) } end end |
.weapons_in_category(category) ⇒ Array<Hash>
Retrieves all weapons in a specified category.
256 257 258 259 260 261 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 256 def self.weapons_in_category(category) category = category.to_sym return [] unless @@weapon_stats.key?(category) @@weapon_stats[category].values end |