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
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 empty array)
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
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] = Plateavd_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 array of weapon stats for blunt weapons. Each 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.
{ :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, }, :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 }, :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, }, :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, }, :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, }, :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, }, :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 =
A collection of edged weapon statistics indexed by weapon identifiers. Each weapon’s stats include category, base name, all names, damage types, damage factors, armor avoidance by armor size group, base roundtime, and minimum roundtime.
{ # Weapon statistics for the arrow. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the backsword. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the bastard sword. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the broadsword. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the dagger. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the estoc. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the falchion. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the handaxe. # @return [Hash] A hash containing the weapon's stats. :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 statistics for the katana. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the longsword. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the main gauche. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the rapier. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the scimitar. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the short sword. # @return [Hash] A hash containing the weapon's stats. :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, }, # Weapon statistics for the whip-blade. # @return [Hash] A hash containing the weapon's stats. :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 =
Hybrid Weapons
{ # 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 =
A hash containing ranged weapon statistics indexed by weapon identifiers. Each entry includes details such as category, base name, all names, damage types, damage factors, armor avoidance by armor size group (ASG), base roundtime (RT), minimum RT, and weapon class.
{ :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 =
Static array of weapon stats for thrown weapons. Each entry contains metadata about the weapon’s category, base name, alternative names, damage types, damage factors, armor avoidance, base roundtime, and minimum roundtime.
{ :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 =
Static array of weapon stats for natural weapons. Each 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.
{ :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 =
Static array of weapon stats for polearm weapons. Each entry contains detailed information about the weapon’s characteristics.
{ :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 =
Static weapon stats for unarmed combat.
{ :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 for brawling weapons.
{ :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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, }, :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 =
Static array of weapon stats for runestave.
{ :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 two-handed weapon stats indexed by weapon identifiers.
{ # Weapon stats for the bastard sword. :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 stats for the battle axe. :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 stats for the claidmore. :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 stats for the flail. :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 stats for the flamberge. :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 stats for the katana. :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 stats for the maul. :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 stats for the military pick. :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 stats for the quarterstaff. :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 stats for the two-handed sword. :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 stats for the war mattock. :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>
Returns all aliases for a given weapon name.
-
.categories ⇒ Array<Symbol>
Returns the list of weapon categories.
-
.category_for(name) ⇒ Symbol?
Returns the category for a given weapon name.
-
.compare(name1, name2, category1 = nil, category2 = nil) ⇒ Hash?
Compares two weapons and returns their stats.
-
.damage_summary(name, category = nil) ⇒ Hash?
Provides a summary of damage types for a given weapon.
-
.find(name, category = nil) ⇒ Hash?
Finds a weapon by name and category.
-
.is_grippable?(name) ⇒ Boolean
Checks if a weapon is grippable.
-
.list(category = nil) ⇒ Array<Hash>
Lists all weapons in a given category or all weapons if no category is specified.
-
.names ⇒ Array<String>
Returns a list of all weapon names.
-
.pretty(name) ⇒ String
Returns a concise string representation of a weapon.
-
.pretty_long(name) ⇒ String
Returns a detailed string representation of a weapon.
-
.search(filters = {}) ⇒ Array<Hash>
Searches for weapons based on given filters.
-
.valid_name?(name) ⇒ Boolean
Validates if a given name corresponds to a known weapon.
-
.weapons_in_category(category) ⇒ Array<Hash>
Returns all weapons in a specified category.
Class Method Details
.aliases_for(name, category = nil) ⇒ Array<String>
Returns all aliases for a given weapon name
145 146 147 148 149 150 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 145 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
112 113 114 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 112 def self.categories @@weapon_stats.keys end |
.category_for(name) ⇒ Symbol?
Returns the category for a given weapon name
284 285 286 287 288 289 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 284 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 stats
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 161 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 given weapon
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 123 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 name and category
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 69 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
270 271 272 273 274 275 276 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 270 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 a given category or all weapons if no category is specified
95 96 97 98 99 100 101 102 103 104 105 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 95 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 list of all weapon names
258 259 260 261 262 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 258 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
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 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 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 366 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
297 298 299 300 301 302 303 304 305 306 307 308 309 310 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 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 297 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 given filters
188 189 190 191 192 193 194 195 196 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 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 188 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
421 422 423 424 425 426 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 421 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>
Returns all weapons in a specified category
246 247 248 249 250 251 |
# File 'documented/gemstone/armaments/weapon_stats.rb', line 246 def self.weapons_in_category(category) category = category.to_sym return [] unless @@weapon_stats.key?(category) @@weapon_stats[category].values end |