Kuroneko-yousenpai

recipes_tree_extractor

Feb 13th, 2024 (edited)
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 73.29 KB | None | 0 0
  1. import re
  2. from dataclasses import dataclass
  3. from typing import List
  4.  
  5.  
  6. @dataclass
  7. class RecipesConfig:
  8.     CL_GRENADE_U1: int = 1
  9.     CL_GRENADE_U2A: int = 2
  10.     CL_GRENADE_U2B: int = 3
  11.     MORTAR_U1: int = 4
  12.     MORTAR_U2A: int = 5
  13.     MORTAR_U2B: int = 6
  14.     SHURIKEN_U1: int = 7
  15.     SHURIKEN_U2A: int = 8
  16.     SHURIKEN_U2B: int = 9
  17.     STICKY_BOMB_U1: int = 10
  18.     STICKY_BOMB_U2A: int = 11
  19.     STICKY_BOMB_U2B: int = 12
  20.     SNIPER_RIFLE_U1: int = 13
  21.     SHOTGUN_U1: int = 14
  22.     SHOTGUN_U2A: int = 15
  23.     SHOTGUN_U2B: int = 16
  24.     MINIGUN_U1: int = 17
  25.     MINIGUN_U2A: int = 18
  26.     MINIGUN_U2B: int = 19
  27.     BAZOOKA_U1: int = 20
  28.     BAZOOKA_U2: int = 21
  29.     GRENADE_U1: int = 22
  30.     GRENADE_U2: int = 23
  31.     RIFLE_U1: int = 24
  32.     HOMING_U1: int = 25
  33.     HOMING_U2: int = 26
  34.     HARPOON_U1: int = 27
  35.     HARPOON_U2A: int = 28
  36.     HARPOON_U2B: int = 29
  37.     BLOW_TORCH_U1: int = 30
  38.     BLOW_TORCH_U2: int = 31
  39.     MINE_U1: int = 32
  40.     MINE_U2: int = 33
  41.     UZI_U1: int = 34
  42.     BARRIER_U1: int = 35
  43.     HOLY_GRENADE_U1: int = 36
  44.     SPIDER_U1: int = 37
  45.     DYNAMITE_U1A: int = 38
  46.     DYNAMITE_U1B: int = 39
  47.     CANNON_U1: int = 40
  48.     CANNON_U2: int = 41
  49.     SHOCKER_U1: int = 42
  50.     CARPET_BAZOOKA_U1: int = 43
  51.     CARPET_BAZOOKA_U2A: int = 44
  52.     CARPET_BAZOOKA_U2B: int = 45
  53.     GIRDER_U1: int = 46
  54.     SHEEP_U1A: int = 47
  55.     SHEEP_U1B: int = 48
  56.     EMERGENCY_TELEPORT_U1: int = 49
  57.     EMERGENCY_TELEPORT_U2: int = 50
  58.     BOOMERANG_U1: int = 51
  59.     BOOMERANG_U2: int = 52
  60.     TELE_THROWER_U1: int = 53
  61.     ANTIFREEZE_U1: int = 54
  62.     ANTIFREEZE_U2A: int = 55
  63.     ANTIFREEZE_U2B: int = 56
  64.     PNEUMATIC_DRILL_U1: int = 57
  65.     PARASITE_U1: int = 58
  66.     RIFLE_U2: int = 59
  67.     SNIPER_RIFLE_U2A: int = 60
  68.     SNIPER_RIFLE_U2B: int = 61
  69.     AIR_STRIKE_U1: int = 62
  70.     BLOCKER_U1: int = 63
  71.     BLOCKER_U2A: int = 64
  72.     BLOCKER_U2B: int = 65
  73.     THUNDERBOLT_U1: int = 66
  74.     GAS_GRENADE_U1: int = 67
  75.     SHOCKER_U2: int = 68
  76.     BUNKER_BUSTER_U1: int = 69
  77.     METEOR_U1: int = 70
  78.     TELEPORT_U1A: int = 71
  79.     MOLOTOV_U1: int = 72
  80.     AK_47_U1: int = 73
  81.     CARPET_STRIKE_U1: int = 74
  82.     LASER_GUN_U1: int = 75
  83.     LASER_GUN_U2A: int = 76
  84.     LASER_GUN_U2B: int = 77
  85.     NAPALM_STRIKE_U1: int = 78
  86.     ROPE_U1: int = 79
  87.     GRAVITY_GUN_U1: int = 80
  88.     UFO_U1: int = 81
  89.     UFO_U2: int = 82
  90.     SUPER_SHEEP_U1: int = 83
  91.     SUPER_SHEEP_U2: int = 84
  92.     AK_47_U2: int = 85
  93.     PNEUMATIC_DRILL_U2: int = 86
  94.     BARRIER_U2: int = 87
  95.     BUNKER_BUSTER_U2: int = 88
  96.     HOLY_GRENADE_U2: int = 89
  97.     GRAVITY_GUN_U2: int = 90
  98.     FREEZER_U1: int = 91
  99.     PUSHING_MINE_U1: int = 92
  100.     SLEDGEHAMMER_U1: int = 93
  101.     BAT_U1: int = 94
  102.     WATERMELON_U1: int = 95
  103.     EMERGENCY_TELEPORT_U3: int = 96
  104.     GIRDER_U2: int = 97
  105.     ROPE_U2: int = 98
  106.     SLEDGEHAMMER_U1B: int = 99
  107.     SUPER_SHEEP_U2B: int = 100
  108.     SNOWFLAKE_STRIKE_U1: int = 101
  109.     SNOWFLAKE_STRIKE_U2A: int = 102
  110.     SNOWFLAKE_STRIKE_U2B: int = 103
  111.     TELEPORT_ANCHOR_U1: int = 104
  112.     TELEPORT_ANCHOR_U2: int = 105
  113.     GIRDER_GUN_U1: int = 106
  114.     FIRE_THROWER_U1: int = 107
  115.     DRILL_U1: int = 108
  116.     DRILL_U2: int = 109
  117.     PARASITE_U2: int = 110
  118.     BOULDER_U1: int = 111
  119.     TELEPORT_U1B: int = 112
  120.     GUARDING_BOT_U1A: int = 113
  121.     AIR_BLOCKER_U1: int = 114
  122.     GUARDING_BOT_U1B: int = 115
  123.     BOULDER_U2: int = 116
  124.     FREEZER_U2A: int = 117
  125.     FREEZER_U1B: int = 118
  126.     FREEZER_U2B: int = 119
  127.     GAS_GRENADE_U1B: int = 120
  128.     SPIDER_U1B: int = 121
  129.     HOLY_GRENADE_U2B: int = 122
  130.     AIR_BLOCKER_U1B: int = 123
  131.     SOUL_GUN_U1: int = 124
  132.     SOUL_GUN_U2A: int = 125
  133.     SOUL_GUN_U2B: int = 126
  134.     BAT_U2A: int = 127
  135.     BAT_U2B: int = 128
  136.     AK_47_U1B: int = 129
  137.     AK_47_U2B: int = 130
  138.     GRAVITY_GUN_U3: int = 131
  139.     EMERGENCY_TELEPORT_U3B: int = 132
  140.     GROUND_BREAKER_U1: int = 133
  141.     BOULDER_U3: int = 134
  142.     ENERGY_RIFLE_U1: int = 135
  143.     ENERGY_RIFLE_U2: int = 136
  144.     ENERGY_RIFLE_U3: int = 137
  145.     SNIPER_RIFLE_U3A: int = 138
  146.     SNIPER_RIFLE_U3B: int = 139
  147.     GAS_GRENADE_U2A: int = 140
  148.     GAS_GRENADE_U2B: int = 141
  149.     FIREWORK_U1: int = 142
  150.     FIREWORK_U2: int = 143
  151.     PUPPET_U1: int = 144
  152.     PUPPET_U2A: int = 145
  153.     PUPPET_U2B: int = 146
  154.     THEIF_ATTACK_U1: int = 147
  155.     THEIF_ATTACK_U2A: int = 148
  156.     THEIF_ATTACK_U2B: int = 149
  157.     CIRCUS_CANNON_U1: int = 150
  158.     DISC_LAUNCHER_U1: int = 151
  159.     HELICOPTER_U1: int = 152
  160.     HELICOPTER_U2: int = 153
  161.     VACUUM_GRENADE_U1: int = 154
  162.     CANNON_U3A: int = 155
  163.     CANNON_U3B: int = 156
  164.     ELECTRO_BUOY_CRAFT: int = 901
  165.     POISON_BOBBER_CRAFT: int = 902
  166.  
  167.  
  168. @dataclass
  169. class ReagentsConfig:
  170.     BATTERY: int = 0
  171.     GEAR: int = 1
  172.     WOOD: int = 2
  173.     STONE: int = 3
  174.     METAL_PLATE: int = 4
  175.     COAL: int = 6
  176.     PIPE: int = 9
  177.     SPRING: int = 10
  178.     UMBRELLA: int = 20
  179.     ACCUMULATOR: int = 21
  180.     HAMMER: int = 22
  181.     GUNPOWDER: int = 23
  182.     STEEL_BAR: int = 24
  183.     WRENCH: int = 26
  184.     CRYSTAL: int = 40
  185.     GENERATOR: int = 41
  186.     MICROCHIP: int = 42
  187.     SNIPER_SCOPE: int = 43
  188.     TITAN_BAR: int = 44
  189.     BADGE: int = 50
  190.     CRATE_KEY: int = 51
  191.     MUTAGEN: int = 52
  192.     SAND: int = 5
  193.     SCREW_BOLT: int = 7
  194.     SCREW_NUT: int = 8
  195.     SCREWDRIVER: int = 25
  196.  
  197.  
  198. @dataclass
  199. class QuantitativeItemStructure:
  200.     p_id: int | str
  201.     p_quantity: int
  202.  
  203.  
  204. def main():
  205.     RECIPES = [
  206.         RecipesConfig.CL_GRENADE_U1,
  207.         RecipesConfig.CL_GRENADE_U2A,
  208.         RecipesConfig.CL_GRENADE_U2B,
  209.         RecipesConfig.MORTAR_U1,
  210.         RecipesConfig.MORTAR_U2A,
  211.         RecipesConfig.MORTAR_U2B,
  212.         RecipesConfig.SHURIKEN_U1,
  213.         RecipesConfig.SHURIKEN_U2A,
  214.         RecipesConfig.SHURIKEN_U2B,
  215.         RecipesConfig.STICKY_BOMB_U1,
  216.         RecipesConfig.STICKY_BOMB_U2A,
  217.         RecipesConfig.STICKY_BOMB_U2B,
  218.         RecipesConfig.SNIPER_RIFLE_U1,
  219.         RecipesConfig.SHOTGUN_U1,
  220.         RecipesConfig.SHOTGUN_U2A,
  221.         RecipesConfig.SHOTGUN_U2B,
  222.         RecipesConfig.MINIGUN_U1,
  223.         RecipesConfig.MINIGUN_U2A,
  224.         RecipesConfig.MINIGUN_U2B,
  225.         RecipesConfig.BAZOOKA_U1,
  226.         RecipesConfig.BAZOOKA_U2,
  227.         RecipesConfig.GRENADE_U1,
  228.         RecipesConfig.GRENADE_U2,
  229.         RecipesConfig.RIFLE_U1,
  230.         RecipesConfig.HOMING_U1,
  231.         RecipesConfig.HOMING_U2,
  232.         RecipesConfig.HARPOON_U1,
  233.         RecipesConfig.HARPOON_U2A,
  234.         RecipesConfig.HARPOON_U2B,
  235.         RecipesConfig.BLOW_TORCH_U1,
  236.         RecipesConfig.BLOW_TORCH_U2,
  237.         RecipesConfig.MINE_U1,
  238.         RecipesConfig.MINE_U2,
  239.         RecipesConfig.UZI_U1,
  240.         RecipesConfig.BARRIER_U1,
  241.         RecipesConfig.HOLY_GRENADE_U1,
  242.         RecipesConfig.SPIDER_U1,
  243.         RecipesConfig.DYNAMITE_U1A,
  244.         RecipesConfig.DYNAMITE_U1B,
  245.         RecipesConfig.CANNON_U1,
  246.         RecipesConfig.CANNON_U2,
  247.         RecipesConfig.SHOCKER_U1,
  248.         RecipesConfig.CARPET_BAZOOKA_U1,
  249.         RecipesConfig.CARPET_BAZOOKA_U2A,
  250.         RecipesConfig.CARPET_BAZOOKA_U2B,
  251.         RecipesConfig.GIRDER_U1,
  252.         RecipesConfig.SHEEP_U1A,
  253.         RecipesConfig.SHEEP_U1B,
  254.         RecipesConfig.EMERGENCY_TELEPORT_U1,
  255.         RecipesConfig.EMERGENCY_TELEPORT_U2,
  256.         RecipesConfig.BOOMERANG_U1,
  257.         RecipesConfig.BOOMERANG_U2,
  258.         RecipesConfig.TELE_THROWER_U1,
  259.         RecipesConfig.ANTIFREEZE_U1,
  260.         RecipesConfig.ANTIFREEZE_U2A,
  261.         RecipesConfig.ANTIFREEZE_U2B,
  262.         RecipesConfig.PNEUMATIC_DRILL_U1,
  263.         RecipesConfig.PARASITE_U1,
  264.         RecipesConfig.RIFLE_U2,
  265.         RecipesConfig.SNIPER_RIFLE_U2A,
  266.         RecipesConfig.SNIPER_RIFLE_U2B,
  267.         RecipesConfig.AIR_STRIKE_U1,
  268.         RecipesConfig.BLOCKER_U1,
  269.         RecipesConfig.BLOCKER_U2A,
  270.         RecipesConfig.BLOCKER_U2B,
  271.         RecipesConfig.THUNDERBOLT_U1,
  272.         RecipesConfig.GAS_GRENADE_U1,
  273.         RecipesConfig.SHOCKER_U2,
  274.         RecipesConfig.BUNKER_BUSTER_U1,
  275.         RecipesConfig.METEOR_U1,
  276.         RecipesConfig.TELEPORT_U1A,
  277.         RecipesConfig.MOLOTOV_U1,
  278.         RecipesConfig.AK_47_U1,
  279.         RecipesConfig.CARPET_STRIKE_U1,
  280.         RecipesConfig.LASER_GUN_U1,
  281.         RecipesConfig.LASER_GUN_U2A,
  282.         RecipesConfig.LASER_GUN_U2B,
  283.         RecipesConfig.NAPALM_STRIKE_U1,
  284.         RecipesConfig.ROPE_U1,
  285.         RecipesConfig.GRAVITY_GUN_U1,
  286.         RecipesConfig.UFO_U1,
  287.         RecipesConfig.UFO_U2,
  288.         RecipesConfig.SUPER_SHEEP_U1,
  289.         RecipesConfig.SUPER_SHEEP_U2,
  290.         RecipesConfig.AK_47_U2,
  291.         RecipesConfig.PNEUMATIC_DRILL_U2,
  292.         RecipesConfig.BARRIER_U2,
  293.         RecipesConfig.BUNKER_BUSTER_U2,
  294.         RecipesConfig.HOLY_GRENADE_U2,
  295.         RecipesConfig.GRAVITY_GUN_U2,
  296.         RecipesConfig.FREEZER_U1,
  297.         RecipesConfig.PUSHING_MINE_U1,
  298.         RecipesConfig.SLEDGEHAMMER_U1,
  299.         RecipesConfig.BAT_U1,
  300.         RecipesConfig.WATERMELON_U1,
  301.         RecipesConfig.EMERGENCY_TELEPORT_U3,
  302.         RecipesConfig.GIRDER_U2,
  303.         RecipesConfig.ROPE_U2,
  304.         RecipesConfig.SLEDGEHAMMER_U1B,
  305.         RecipesConfig.SUPER_SHEEP_U2B,
  306.         RecipesConfig.SNOWFLAKE_STRIKE_U1,
  307.         RecipesConfig.SNOWFLAKE_STRIKE_U2A,
  308.         RecipesConfig.SNOWFLAKE_STRIKE_U2B,
  309.         RecipesConfig.TELEPORT_ANCHOR_U1,
  310.         RecipesConfig.TELEPORT_ANCHOR_U2,
  311.         RecipesConfig.GIRDER_GUN_U1,
  312.         RecipesConfig.FIRE_THROWER_U1,
  313.         RecipesConfig.DRILL_U1,
  314.         RecipesConfig.DRILL_U2,
  315.         RecipesConfig.PARASITE_U2,
  316.         RecipesConfig.BOULDER_U1,
  317.         RecipesConfig.TELEPORT_U1B,
  318.         RecipesConfig.GUARDING_BOT_U1A,
  319.         RecipesConfig.AIR_BLOCKER_U1,
  320.         RecipesConfig.GUARDING_BOT_U1B,
  321.         RecipesConfig.BOULDER_U2,
  322.         RecipesConfig.FREEZER_U2A,
  323.         RecipesConfig.FREEZER_U1B,
  324.         RecipesConfig.FREEZER_U2B,
  325.         RecipesConfig.GAS_GRENADE_U1B,
  326.         RecipesConfig.SPIDER_U1B,
  327.         RecipesConfig.HOLY_GRENADE_U2B,
  328.         RecipesConfig.AIR_BLOCKER_U1B,
  329.         RecipesConfig.SOUL_GUN_U1,
  330.         RecipesConfig.SOUL_GUN_U2A,
  331.         RecipesConfig.SOUL_GUN_U2B,
  332.         RecipesConfig.BAT_U2A,
  333.         RecipesConfig.BAT_U2B,
  334.         RecipesConfig.AK_47_U1B,
  335.         RecipesConfig.AK_47_U2B,
  336.         RecipesConfig.GRAVITY_GUN_U3,
  337.         RecipesConfig.EMERGENCY_TELEPORT_U3B,
  338.         RecipesConfig.GROUND_BREAKER_U1,
  339.         RecipesConfig.BOULDER_U3,
  340.         RecipesConfig.ENERGY_RIFLE_U1,
  341.         RecipesConfig.ENERGY_RIFLE_U2,
  342.         RecipesConfig.ENERGY_RIFLE_U3,
  343.         RecipesConfig.SNIPER_RIFLE_U3A,
  344.         RecipesConfig.SNIPER_RIFLE_U3B,
  345.         RecipesConfig.GAS_GRENADE_U2A,
  346.         RecipesConfig.GAS_GRENADE_U2B,
  347.         RecipesConfig.FIREWORK_U1,
  348.         RecipesConfig.FIREWORK_U2,
  349.         RecipesConfig.PUPPET_U1,
  350.         RecipesConfig.PUPPET_U2A,
  351.         RecipesConfig.PUPPET_U2B,
  352.         RecipesConfig.THEIF_ATTACK_U1,
  353.         RecipesConfig.THEIF_ATTACK_U2A,
  354.         RecipesConfig.THEIF_ATTACK_U2B,
  355.         RecipesConfig.CIRCUS_CANNON_U1,
  356.         RecipesConfig.DISC_LAUNCHER_U1,
  357.         RecipesConfig.HELICOPTER_U1,
  358.         RecipesConfig.HELICOPTER_U2,
  359.         RecipesConfig.VACUUM_GRENADE_U1,
  360.         RecipesConfig.CANNON_U3A,
  361.         RecipesConfig.CANNON_U3B,
  362.         RecipesConfig.ELECTRO_BUOY_CRAFT,
  363.         RecipesConfig.POISON_BOBBER_CRAFT
  364.     ]
  365.  
  366.     REAGENTS = [
  367.         ReagentsConfig.BATTERY,
  368.         ReagentsConfig.GEAR,
  369.         ReagentsConfig.WOOD,
  370.         ReagentsConfig.STONE,
  371.         ReagentsConfig.METAL_PLATE,
  372.         ReagentsConfig.COAL,
  373.         ReagentsConfig.PIPE,
  374.         ReagentsConfig.SPRING,
  375.         ReagentsConfig.UMBRELLA,
  376.         ReagentsConfig.ACCUMULATOR,
  377.         ReagentsConfig.HAMMER,
  378.         ReagentsConfig.GUNPOWDER,
  379.         ReagentsConfig.STEEL_BAR,
  380.         ReagentsConfig.WRENCH,
  381.         ReagentsConfig.CRYSTAL,
  382.         ReagentsConfig.GENERATOR,
  383.         ReagentsConfig.MICROCHIP,
  384.         ReagentsConfig.SNIPER_SCOPE,
  385.         ReagentsConfig.TITAN_BAR,
  386.         ReagentsConfig.BADGE,
  387.         ReagentsConfig.CRATE_KEY,
  388.         ReagentsConfig.MUTAGEN,
  389.         ReagentsConfig.SAND,
  390.         ReagentsConfig.SCREW_BOLT,
  391.         ReagentsConfig.SCREW_NUT,
  392.         ReagentsConfig.SCREWDRIVER
  393.     ]
  394.  
  395.     text = """
  396.    {
  397.         this.recipes = [{
  398.            "id":1,
  399.            "description":"CL_GRENADE.DISTINCT.U1",
  400.            "prevUpgradeId":Weapons.CLUSTER_BOMB,
  401.            "upgradeId":Weapons.CLUSTER_BOMB_UPG_1,
  402.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,15),new QuantitativeItem(3,25),new QuantitativeItem(26,10)],
  403.            "requiredLevel":10,
  404.            "level":1
  405.         },{
  406.            "id":2,
  407.            "description":"CL_GRENADE.DISTINCT.U2A",
  408.            "prevUpgradeId":Weapons.CLUSTER_BOMB_UPG_1,
  409.            "upgradeId":Weapons.CLUSTER_BOMB_UPG_2A,
  410.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,30),new QuantitativeItem(23,20),new QuantitativeItem(42,10)],
  411.            "requiredLevel":16,
  412.            "level":2
  413.         },{
  414.            "id":3,
  415.            "description":"CL_GRENADE.DISTINCT.U2B",
  416.            "prevUpgradeId":Weapons.CLUSTER_BOMB_UPG_1,
  417.            "upgradeId":Weapons.CLUSTER_BOMB_UPG_2B,
  418.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,40),new QuantitativeItem(21,15),new QuantitativeItem(41,12)],
  419.            "requiredLevel":16,
  420.            "level":2
  421.         },{
  422.            "id":4,
  423.            "description":"MORTAR.DISTINCT.U1",
  424.            "prevUpgradeId":Weapons.MORTAR,
  425.            "upgradeId":Weapons.MORTAR_UPG_1,
  426.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,15),new QuantitativeItem(6,15),new QuantitativeItem(20,12)],
  427.            "requiredLevel":8,
  428.            "level":1
  429.         },{
  430.            "id":5,
  431.            "description":"MORTAR.DISTINCT.U2A",
  432.            "prevUpgradeId":Weapons.MORTAR_UPG_1,
  433.            "upgradeId":Weapons.MORTAR_UPG2A_RADIUS,
  434.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(22,20),new QuantitativeItem(41,10)],
  435.            "requiredLevel":12,
  436.            "level":2
  437.         },{
  438.            "id":6,
  439.            "description":"MORTAR.DISTINCT.U2B",
  440.            "prevUpgradeId":Weapons.MORTAR_UPG_1,
  441.            "upgradeId":Weapons.MORTAR_UPG2B_DOUBLE_SHOT,
  442.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,40),new QuantitativeItem(21,10),new QuantitativeItem(44,10)],
  443.            "requiredLevel":12,
  444.            "level":2
  445.         },{
  446.            "id":7,
  447.            "description":"SHURIKEN.DISTINCT.U1",
  448.            "prevUpgradeId":Weapons.SHURIKEN,
  449.            "upgradeId":Weapons.SHURIKEN_UPG_1,
  450.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,25),new QuantitativeItem(6,18),new QuantitativeItem(22,10)],
  451.            "requiredLevel":8,
  452.            "level":1
  453.         },{
  454.            "id":8,
  455.            "description":"SHURIKEN.DISTINCT.U2A",
  456.            "prevUpgradeId":Weapons.SHURIKEN_UPG_1,
  457.            "upgradeId":Weapons.SHURIKEN_U2A_TRAJECTORY,
  458.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,35),new QuantitativeItem(24,15),new QuantitativeItem(40,10)],
  459.            "requiredLevel":16,
  460.            "level":2
  461.         },{
  462.            "id":9,
  463.            "description":"SHURIKEN.DISTINCT.U2B",
  464.            "prevUpgradeId":Weapons.SHURIKEN_UPG_1,
  465.            "upgradeId":Weapons.SHURIKEN_U2B_SAW,
  466.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,25),new QuantitativeItem(20,15),new QuantitativeItem(44,15)],
  467.            "requiredLevel":16,
  468.            "level":2
  469.         },{
  470.            "id":10,
  471.            "description":"STICKY_BOMB.DISTINCT.U1",
  472.            "prevUpgradeId":Weapons.STICKY_GRENADE,
  473.            "upgradeId":Weapons.STICKY_GRENADE_UPG_1,
  474.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,25),new QuantitativeItem(2,15),new QuantitativeItem(21,10)],
  475.            "requiredLevel":10,
  476.            "level":1
  477.         },{
  478.            "id":11,
  479.            "description":"STICKY_BOMB.DISTINCT.U2A",
  480.            "prevUpgradeId":Weapons.STICKY_GRENADE_UPG_1,
  481.            "upgradeId":Weapons.STICKY_GRENADE_UPG_2A,
  482.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,40),new QuantitativeItem(23,12),new QuantitativeItem(40,10)],
  483.            "requiredLevel":18,
  484.            "level":2
  485.         },{
  486.            "id":12,
  487.            "description":"STICKY_BOMB.DISTINCT.U2B",
  488.            "prevUpgradeId":Weapons.STICKY_GRENADE_UPG_1,
  489.            "upgradeId":Weapons.STICKY_GRENADE_UPG_2B,
  490.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,35),new QuantitativeItem(26,20),new QuantitativeItem(42,10)],
  491.            "requiredLevel":18,
  492.            "level":2
  493.         },{
  494.            "id":13,
  495.            "description":"SNIPER_RIFLE.DISTINCT.U1",
  496.            "prevUpgradeId":Weapons.SNIPER_RIFLE,
  497.            "upgradeId":Weapons.SNIPER_RIFLE_UPG_1,
  498.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,10),new QuantitativeItem(24,18),new QuantitativeItem(43,10)],
  499.            "requiredLevel":10,
  500.            "level":1
  501.         },{
  502.            "id":14,
  503.            "description":"SHOTGUN.DISTINCT.U1",
  504.            "prevUpgradeId":Weapons.SHOTGUN,
  505.            "upgradeId":Weapons.SHOTGUN_UPG_1,
  506.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,25),new QuantitativeItem(10,20),new QuantitativeItem(23,10)],
  507.            "requiredLevel":10,
  508.            "level":1
  509.         },{
  510.            "id":15,
  511.            "description":"SHOTGUN.DISTINCT.U2A",
  512.            "prevUpgradeId":Weapons.SHOTGUN_UPG_1,
  513.            "upgradeId":Weapons.SHOTGUN_U2A_SLOWING,
  514.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,40),new QuantitativeItem(22,15),new QuantitativeItem(40,12)],
  515.            "requiredLevel":18,
  516.            "level":2
  517.         },{
  518.            "id":16,
  519.            "description":"SHOTGUN.DISTINCT.U2B",
  520.            "prevUpgradeId":Weapons.SHOTGUN_UPG_1,
  521.            "upgradeId":Weapons.SHOTGUN_U2B_DOUBLE_SHOT,
  522.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,45),new QuantitativeItem(26,15),new QuantitativeItem(44,10)],
  523.            "requiredLevel":18,
  524.            "level":2
  525.         },{
  526.            "id":17,
  527.            "description":"MINIGUN.DISTINCT.U1",
  528.            "prevUpgradeId":Weapons.MINIGUN,
  529.            "upgradeId":Weapons.MINIGUN_UPG_1,
  530.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,25),new QuantitativeItem(9,20),new QuantitativeItem(24,15)],
  531.            "requiredLevel":10,
  532.            "level":1
  533.         },{
  534.            "id":18,
  535.            "description":"MINIGUN.DISTINCT.U2A",
  536.            "prevUpgradeId":Weapons.MINIGUN_UPG_1,
  537.            "upgradeId":Weapons.MINIGUN_U2A_REDUCE_ARMOR,
  538.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,35),new QuantitativeItem(20,15),new QuantitativeItem(41,15)],
  539.            "requiredLevel":16,
  540.            "level":2
  541.         },{
  542.            "id":19,
  543.            "description":"MINIGUN.DISTINCT.U2B",
  544.            "prevUpgradeId":Weapons.MINIGUN_UPG_1,
  545.            "upgradeId":Weapons.MINIGUN_U2B_ROCKET,
  546.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,35),new QuantitativeItem(21,15),new QuantitativeItem(42,12)],
  547.            "requiredLevel":16,
  548.            "level":2
  549.         },{
  550.            "id":20,
  551.            "description":"BAZOOKA.DISTINCT.U1",
  552.            "prevUpgradeId":Weapons.BAZOOKA,
  553.            "upgradeId":Weapons.BAZOOKA_UPG_1,
  554.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,4),new QuantitativeItem(3,4),new QuantitativeItem(6,2)],
  555.            "requiredLevel":4,
  556.            "level":1
  557.         },{
  558.            "id":21,
  559.            "description":"BAZOOKA.DISTINCT.U2",
  560.            "prevUpgradeId":Weapons.BAZOOKA_UPG_1,
  561.            "upgradeId":Weapons.BAZOOKA_UPG_2_CUMULATIVE,
  562.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(6,20),new QuantitativeItem(22,10)],
  563.            "requiredLevel":12,
  564.            "level":2
  565.         },{
  566.            "id":22,
  567.            "description":"GRENADE.DISTINCT.U1",
  568.            "prevUpgradeId":Weapons.GRENADE,
  569.            "upgradeId":Weapons.GRENADE_UPG_1_STUFFED_BOUNCING,
  570.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,4),new QuantitativeItem(1,4),new QuantitativeItem(10,2)],
  571.            "requiredLevel":4,
  572.            "level":1
  573.         },{
  574.            "id":23,
  575.            "description":"GRENADE.DISTINCT.U2",
  576.            "prevUpgradeId":Weapons.GRENADE_UPG_1_STUFFED_BOUNCING,
  577.            "upgradeId":Weapons.GRENADE_UPG_2,
  578.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,20),new QuantitativeItem(3,15),new QuantitativeItem(23,12)],
  579.            "requiredLevel":12,
  580.            "level":2
  581.         },{
  582.            "id":24,
  583.            "description":"RIFLE.DISTINCT.U1",
  584.            "prevUpgradeId":Weapons.RIFLE,
  585.            "upgradeId":Weapons.RIFLE_UPG_1,
  586.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,4),new QuantitativeItem(9,6)],
  587.            "requiredLevel":4,
  588.            "level":1
  589.         },{
  590.            "id":25,
  591.            "description":"HOMING.DISTINCT.U1",
  592.            "prevUpgradeId":Weapons.HOMING_BAZOOKA,
  593.            "upgradeId":Weapons.HOMING_BAZOOKA_UPG_1,
  594.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,15),new QuantitativeItem(4,15),new QuantitativeItem(20,12)],
  595.            "requiredLevel":8,
  596.            "level":1
  597.         },{
  598.            "id":26,
  599.            "description":"HOMING.DISTINCT.U2",
  600.            "prevUpgradeId":Weapons.HOMING_BAZOOKA_UPG_1,
  601.            "upgradeId":Weapons.HOMING_BAZOOKA_UPG_2,
  602.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,20),new QuantitativeItem(26,10),new QuantitativeItem(43,10)],
  603.            "requiredLevel":14,
  604.            "level":2
  605.         },{
  606.            "id":27,
  607.            "description":"HARPOON.DISTINCT.U1",
  608.            "prevUpgradeId":Weapons.HARPOON,
  609.            "upgradeId":Weapons.ELECTRIC_HARPOON_UPG_1,
  610.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,25),new QuantitativeItem(9,15),new QuantitativeItem(43,8)],
  611.            "requiredLevel":10,
  612.            "level":1
  613.         },{
  614.            "id":28,
  615.            "description":"HARPOON.DISTINCT.U2A",
  616.            "prevUpgradeId":Weapons.ELECTRIC_HARPOON_UPG_1,
  617.            "upgradeId":Weapons.ELECTRIC_HARPOON_UPG_2A,
  618.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,25),new QuantitativeItem(22,20),new QuantitativeItem(44,12)],
  619.            "requiredLevel":20,
  620.            "level":2
  621.         },{
  622.            "id":29,
  623.            "description":"HARPOON.DISTINCT.U2B",
  624.            "prevUpgradeId":Weapons.ELECTRIC_HARPOON_UPG_1,
  625.            "upgradeId":Weapons.ELECTRIC_HARPOON_UPG_2B,
  626.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,40),new QuantitativeItem(22,30),new QuantitativeItem(42,20)],
  627.            "requiredLevel":30,
  628.            "level":2
  629.         },{
  630.            "id":30,
  631.            "description":"BLOW_TORCH.DISTINCT.U1",
  632.            "prevUpgradeId":Weapons.BLOW_TORCH,
  633.            "upgradeId":Weapons.BLOW_TORCH_UPG_1,
  634.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,6),new QuantitativeItem(6,2),new QuantitativeItem(9,2)],
  635.            "requiredLevel":4,
  636.            "level":1
  637.         },{
  638.            "id":31,
  639.            "description":"BLOW_TORCH.DISTINCT.U2",
  640.            "prevUpgradeId":Weapons.BLOW_TORCH_UPG_1,
  641.            "upgradeId":Weapons.BLOW_TORCH_UPG_2,
  642.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,10),new QuantitativeItem(23,10),new QuantitativeItem(26,8)],
  643.            "requiredLevel":12,
  644.            "level":2
  645.         },{
  646.            "id":32,
  647.            "description":"MINE.DISTINCT.U1",
  648.            "prevUpgradeId":Weapons.MINE,
  649.            "upgradeId":Weapons.MINE_UPG_1,
  650.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,4),new QuantitativeItem(3,4),new QuantitativeItem(10,6)],
  651.            "requiredLevel":6,
  652.            "level":1
  653.         },{
  654.            "id":33,
  655.            "description":"MINE.DISTINCT.U2",
  656.            "prevUpgradeId":Weapons.MINE_UPG_1,
  657.            "upgradeId":Weapons.MINE_UPG_2,
  658.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,25),new QuantitativeItem(6,20),new QuantitativeItem(26,10)],
  659.            "requiredLevel":18,
  660.            "level":2
  661.         },{
  662.            "id":34,
  663.            "description":"UZI.DISTINCT.U1",
  664.            "prevUpgradeId":Weapons.UZI,
  665.            "upgradeId":Weapons.UZI_UPG_1,
  666.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,4),new QuantitativeItem(4,4),new QuantitativeItem(6,6)],
  667.            "requiredLevel":6,
  668.            "level":1
  669.         },{
  670.            "id":35,
  671.            "description":"BARRIER.DISTINCT.U1",
  672.            "prevUpgradeId":Weapons.LASER_BARRIER,
  673.            "upgradeId":Weapons.LASER_BARRIER_UPG_1,
  674.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,15),new QuantitativeItem(20,8),new QuantitativeItem(41,8)],
  675.            "requiredLevel":16,
  676.            "level":1
  677.         },{
  678.            "id":36,
  679.            "description":"HOLY_GRENADE.DISTINCT.U1",
  680.            "prevUpgradeId":Weapons.HOLY_GRENADE,
  681.            "upgradeId":Weapons.HOLY_GRENADE_UPG_1,
  682.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,20),new QuantitativeItem(24,10),new QuantitativeItem(40,10)],
  683.            "requiredLevel":18,
  684.            "level":1
  685.         },{
  686.            "id":37,
  687.            "description":"SPIDER.DISTINCT.U1",
  688.            "prevUpgradeId":Weapons.SPIDER,
  689.            "upgradeId":Weapons.SPIDER_UPG_1,
  690.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(4,20),new QuantitativeItem(24,12)],
  691.            "requiredLevel":26,
  692.            "level":1
  693.         },{
  694.            "id":38,
  695.            "description":"DYNAMITE.DISTINCT.U1A",
  696.            "prevUpgradeId":Weapons.DYNAMITE,
  697.            "upgradeId":Weapons.DYNAMITE_U1A_BUNCH,
  698.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,15),new QuantitativeItem(6,15),new QuantitativeItem(23,12)],
  699.            "requiredLevel":8,
  700.            "level":1
  701.         },{
  702.            "id":39,
  703.            "description":"DYNAMITE.DISTINCT.U1B",
  704.            "prevUpgradeId":Weapons.DYNAMITE,
  705.            "upgradeId":Weapons.DYNAMITE_U1B_KAMIKAZE,
  706.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,20),new QuantitativeItem(10,20),new QuantitativeItem(21,15)],
  707.            "requiredLevel":14,
  708.            "level":1
  709.         },{
  710.            "id":40,
  711.            "description":"CANNON.DISTINCT.U1",
  712.            "prevUpgradeId":Weapons.CANNON,
  713.            "upgradeId":Weapons.CANNON_UPG_1,
  714.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,20),new QuantitativeItem(22,12),new QuantitativeItem(40,8)],
  715.            "requiredLevel":16,
  716.            "level":1
  717.         },{
  718.            "id":41,
  719.            "description":"CANNON.DISTINCT.U2",
  720.            "prevUpgradeId":Weapons.CANNON_UPG_1,
  721.            "upgradeId":Weapons.CANNON_UPG_2,
  722.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,15),new QuantitativeItem(43,12),new QuantitativeItem(44,5)],
  723.            "requiredLevel":22,
  724.            "level":2
  725.         },{
  726.            "id":42,
  727.            "description":"SHOCKER.DISTINCT.U1",
  728.            "prevUpgradeId":Weapons.SHOCKER,
  729.            "upgradeId":Weapons.SHOCKER_UPG_1,
  730.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,15),new QuantitativeItem(10,10),new QuantitativeItem(26,12)],
  731.            "requiredLevel":6,
  732.            "level":1
  733.         },{
  734.            "id":43,
  735.            "description":"CARPET_BAZOOKA.DISTINCT.U1",
  736.            "prevUpgradeId":Weapons.CARPET_BAZOOKA,
  737.            "upgradeId":Weapons.CARPET_BAZOOKA_UPG_1,
  738.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,15),new QuantitativeItem(9,15),new QuantitativeItem(20,12)],
  739.            "requiredLevel":8,
  740.            "level":1
  741.         },{
  742.            "id":44,
  743.            "description":"CARPET_BAZOOKA.DISTINCT.U2A",
  744.            "prevUpgradeId":Weapons.CARPET_BAZOOKA_UPG_1,
  745.            "upgradeId":Weapons.CARPET_BAZOOKA_UPG_2A,
  746.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,20),new QuantitativeItem(24,15),new QuantitativeItem(42,10)],
  747.            "requiredLevel":12,
  748.            "level":2
  749.         },{
  750.            "id":45,
  751.            "description":"CARPET_BAZOOKA.DISTINCT.U2B",
  752.            "prevUpgradeId":Weapons.CARPET_BAZOOKA_UPG_1,
  753.            "upgradeId":Weapons.CARPET_BAZOOKA_UPG_2B,
  754.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,20),new QuantitativeItem(23,15),new QuantitativeItem(41,10)],
  755.            "requiredLevel":12,
  756.            "level":2
  757.         },{
  758.            "id":46,
  759.            "description":"GIRDER.DISTINCT.U1",
  760.            "prevUpgradeId":Weapons.GIRDER,
  761.            "upgradeId":Weapons.GIRDER_U1_ELASTIC,
  762.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(24,15),new QuantitativeItem(44,5)],
  763.            "requiredLevel":12,
  764.            "level":1
  765.         },{
  766.            "id":47,
  767.            "description":"SHEEP.DISTINCT.U1A",
  768.            "prevUpgradeId":Weapons.SHEEP,
  769.            "upgradeId":Weapons.SHEEP_U1A_CONTROLLED,
  770.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,15),new QuantitativeItem(26,15),new QuantitativeItem(41,8)],
  771.            "requiredLevel":22,
  772.            "level":1
  773.         },{
  774.            "id":48,
  775.            "description":"SHEEP.DISTINCT.U1B",
  776.            "prevUpgradeId":Weapons.SHEEP,
  777.            "upgradeId":Weapons.SHEEP_U1B_BURNING,
  778.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,20),new QuantitativeItem(21,20),new QuantitativeItem(40,12)],
  779.            "requiredLevel":22,
  780.            "level":1
  781.         },{
  782.            "id":49,
  783.            "description":"EMERGENCY_TELEPORT.DISTINCT.U1",
  784.            "prevUpgradeId":Weapons.EMERGENCY_TELEPORT,
  785.            "upgradeId":Weapons.EMERGENCY_TELEPORT_UPG_1,
  786.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,10),new QuantitativeItem(21,8),new QuantitativeItem(22,8)],
  787.            "requiredLevel":16,
  788.            "level":1
  789.         },{
  790.            "id":50,
  791.            "description":"EMERGENCY_TELEPORT.DISTINCT.U2",
  792.            "prevUpgradeId":Weapons.EMERGENCY_TELEPORT_UPG_1,
  793.            "upgradeId":Weapons.EMERGENCY_TELEPORT_UPG_2,
  794.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,10),new QuantitativeItem(26,15),new QuantitativeItem(43,10)],
  795.            "requiredLevel":18,
  796.            "level":2
  797.         },{
  798.            "id":51,
  799.            "description":"BOOMERANG.DISTINCT.U1",
  800.            "prevUpgradeId":Weapons.BOOMERANG,
  801.            "upgradeId":Weapons.BOOMERANG_UPG_1,
  802.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,20),new QuantitativeItem(24,8),new QuantitativeItem(26,8)],
  803.            "requiredLevel":10,
  804.            "level":1
  805.         },{
  806.            "id":52,
  807.            "description":"BOOMERANG.DISTINCT.U2",
  808.            "prevUpgradeId":Weapons.BOOMERANG_UPG_1,
  809.            "upgradeId":Weapons.BOOMERANG_UPG_2,
  810.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,10),new QuantitativeItem(22,30),new QuantitativeItem(24,15)],
  811.            "requiredLevel":14,
  812.            "level":2
  813.         },{
  814.            "id":53,
  815.            "description":"TELE_THROWER.DISTINCT.U1",
  816.            "prevUpgradeId":Weapons.TELEPORT_THROWER,
  817.            "upgradeId":Weapons.TELEPORT_THROWER_UPG_1,
  818.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(41,8),new QuantitativeItem(42,12)],
  819.            "requiredLevel":14,
  820.            "level":1
  821.         },{
  822.            "id":54,
  823.            "description":"ANTIFREEZE.DISTINCT.U1",
  824.            "prevUpgradeId":Weapons.ANTIFREEZE,
  825.            "upgradeId":Weapons.ANTIFREEZE_U1_POISON_CURE,
  826.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,12),new QuantitativeItem(9,12),new QuantitativeItem(23,12)],
  827.            "requiredLevel":12,
  828.            "level":1
  829.         },{
  830.            "id":55,
  831.            "description":"ANTIFREEZE.DISTINCT.U2A",
  832.            "prevUpgradeId":Weapons.ANTIFREEZE_U1_POISON_CURE,
  833.            "upgradeId":Weapons.ANTIFREEZE_U2A_ATTACK,
  834.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,15),new QuantitativeItem(23,12),new QuantitativeItem(40,10)],
  835.            "requiredLevel":22,
  836.            "level":2
  837.         },{
  838.            "id":56,
  839.            "description":"ANTIFREEZE.DISTINCT.U2B",
  840.            "prevUpgradeId":Weapons.ANTIFREEZE_U1_POISON_CURE,
  841.            "upgradeId":Weapons.ANTIFREEZE_U2B_ARMOR,
  842.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,15),new QuantitativeItem(21,12),new QuantitativeItem(44,10)],
  843.            "requiredLevel":22,
  844.            "level":2
  845.         },{
  846.            "id":57,
  847.            "description":"PNEUMATIC_DRILL.DISTINCT.U1",
  848.            "prevUpgradeId":Weapons.DRILL,
  849.            "upgradeId":Weapons.DRILL_UPG_1,
  850.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,2),new QuantitativeItem(4,2),new QuantitativeItem(6,6)],
  851.            "requiredLevel":6,
  852.            "level":1
  853.         },{
  854.            "id":58,
  855.            "description":"PARASITE.DISTINCT.U1",
  856.            "prevUpgradeId":Weapons.PARASITE,
  857.            "upgradeId":Weapons.PARASITE_UPG_1,
  858.            "reagents":new <QuantitativeItem>[new QuantitativeItem(22,18),new QuantitativeItem(40,6),new QuantitativeItem(42,8)],
  859.            "requiredLevel":14,
  860.            "level":1
  861.         },{
  862.            "id":59,
  863.            "description":"RIFLE.DISTINCT.U2",
  864.            "prevUpgradeId":Weapons.RIFLE_UPG_1,
  865.            "upgradeId":Weapons.RIFLE_UPG_2,
  866.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,20),new QuantitativeItem(23,10),new QuantitativeItem(26,10)],
  867.            "requiredLevel":12,
  868.            "level":2
  869.         },{
  870.            "id":60,
  871.            "description":"SNIPER_RIFLE.DISTINCT.U2A",
  872.            "prevUpgradeId":Weapons.SNIPER_RIFLE_UPG_1,
  873.            "upgradeId":Weapons.SNIPER_RIFLE_UPG_2A,
  874.            "reagents":new <QuantitativeItem>[new QuantitativeItem(23,15),new QuantitativeItem(24,20),new QuantitativeItem(43,10)],
  875.            "requiredLevel":18,
  876.            "level":2
  877.         },{
  878.            "id":61,
  879.            "description":"SNIPER_RIFLE.DISTINCT.U2B",
  880.            "prevUpgradeId":Weapons.SNIPER_RIFLE_UPG_1,
  881.            "upgradeId":Weapons.SNIPER_RIFLE_UPG_2B,
  882.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(21,18),new QuantitativeItem(43,8)],
  883.            "requiredLevel":14,
  884.            "level":2
  885.         },{
  886.            "id":62,
  887.            "description":"AIR_STRIKE.DISTINCT.U1",
  888.            "prevUpgradeId":Weapons.AIR_STRIKE,
  889.            "upgradeId":Weapons.AIR_STRIKE_UPG_1,
  890.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(23,15),new QuantitativeItem(43,8)],
  891.            "requiredLevel":24,
  892.            "level":1
  893.         },{
  894.            "id":63,
  895.            "description":"NEGATOR.DISTINCT.U1",
  896.            "prevUpgradeId":Weapons.BLOCKER,
  897.            "upgradeId":Weapons.BLOCKER_UPG_1,
  898.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,20),new QuantitativeItem(26,18),new QuantitativeItem(44,8)],
  899.            "requiredLevel":22,
  900.            "level":1
  901.         },{
  902.            "id":64,
  903.            "description":"NEGATOR.DISTINCT.U2A",
  904.            "prevUpgradeId":Weapons.BLOCKER_UPG_1,
  905.            "upgradeId":Weapons.BLOCKER_UPG_2A_DARK,
  906.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,25),new QuantitativeItem(22,25),new QuantitativeItem(42,8)],
  907.            "requiredLevel":30,
  908.            "level":2
  909.         },{
  910.            "id":65,
  911.            "description":"NEGATOR.DISTINCT.U2B",
  912.            "prevUpgradeId":Weapons.BLOCKER_UPG_1,
  913.            "upgradeId":Weapons.BLOCKER_UPG_2B_LIGHT,
  914.            "reagents":new <QuantitativeItem>[new QuantitativeItem(24,20),new QuantitativeItem(26,18),new QuantitativeItem(44,10)],
  915.            "requiredLevel":30,
  916.            "level":2
  917.         },{
  918.            "id":66,
  919.            "description":"THUNDERBOLT.DISTINCT.U1",
  920.            "prevUpgradeId":Weapons.THUNDERBOLT,
  921.            "upgradeId":Weapons.THUNDERBOLT_UPG_1,
  922.            "reagents":new <QuantitativeItem>[new QuantitativeItem(21,20),new QuantitativeItem(40,18),new QuantitativeItem(41,10)],
  923.            "requiredLevel":16,
  924.            "level":1
  925.         },{
  926.            "id":67,
  927.            "description":"GAS_GRENADE.DISTINCT.U1",
  928.            "prevUpgradeId":Weapons.GAS_GRENADE,
  929.            "upgradeId":Weapons.GAS_GRENADE_UPG_1,
  930.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,25),new QuantitativeItem(23,15),new QuantitativeItem(40,10)],
  931.            "requiredLevel":20,
  932.            "level":1
  933.         },{
  934.            "id":68,
  935.            "description":"SHOCKER.DISTINCT.U2",
  936.            "prevUpgradeId":Weapons.SHOCKER_UPG_1,
  937.            "upgradeId":Weapons.SHOCKER_UPG_2,
  938.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,20),new QuantitativeItem(9,20),new QuantitativeItem(41,8)],
  939.            "requiredLevel":12,
  940.            "level":2
  941.         },{
  942.            "id":69,
  943.            "description":"BUNKER_BUSTER.DISTINCT.U1",
  944.            "prevUpgradeId":Weapons.BUNKER_BUSTER,
  945.            "upgradeId":Weapons.BUNKER_BUSTER_UPG_1,
  946.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(24,20),new QuantitativeItem(44,10)],
  947.            "requiredLevel":16,
  948.            "level":1
  949.         },{
  950.            "id":70,
  951.            "description":"METEOR.DISTINCT.U1",
  952.            "prevUpgradeId":Weapons.METEOR,
  953.            "upgradeId":Weapons.METEOR_UPG_1,
  954.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,20),new QuantitativeItem(20,25),new QuantitativeItem(23,25)],
  955.            "requiredLevel":24,
  956.            "level":1
  957.         },{
  958.            "id":71,
  959.            "description":"TELEPORT.DISTINCT.U1A",
  960.            "prevUpgradeId":Weapons.TELEPORT,
  961.            "upgradeId":Weapons.TELEPORT_UPG_1A,
  962.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,15),new QuantitativeItem(10,15),new QuantitativeItem(21,10)],
  963.            "requiredLevel":26,
  964.            "level":1
  965.         },{
  966.            "id":72,
  967.            "description":"MOLOTOV.DISTINCT.U1",
  968.            "prevUpgradeId":Weapons.MOLOTOV,
  969.            "upgradeId":Weapons.MOLOTOV_UPG_1,
  970.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,30),new QuantitativeItem(23,15),new QuantitativeItem(42,8)],
  971.            "requiredLevel":14,
  972.            "level":1
  973.         },{
  974.            "id":73,
  975.            "description":"AK_47.DISTINCT.U1",
  976.            "prevUpgradeId":Weapons.AK_47,
  977.            "upgradeId":Weapons.AK_47_UPG_1,
  978.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,30),new QuantitativeItem(10,30),new QuantitativeItem(24,12)],
  979.            "requiredLevel":14,
  980.            "level":1
  981.         },{
  982.            "id":74,
  983.            "description":"CARPET_STRIKE.DISTINCT.U1",
  984.            "prevUpgradeId":Weapons.CARPET_STRIKE,
  985.            "upgradeId":Weapons.CARPET_STRIKE_UPG_1,
  986.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,40),new QuantitativeItem(22,20),new QuantitativeItem(42,15)],
  987.            "requiredLevel":26,
  988.            "level":1
  989.         },{
  990.            "id":75,
  991.            "description":"LASER_GUN.DISTINCT.U1",
  992.            "prevUpgradeId":Weapons.LASER_GUN,
  993.            "upgradeId":Weapons.LASER_GUN_UPG_1,
  994.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,35),new QuantitativeItem(21,15),new QuantitativeItem(43,10)],
  995.            "requiredLevel":22,
  996.            "level":1
  997.         },{
  998.            "id":76,
  999.            "description":"LASER_GUN.DISTINCT.U2A",
  1000.            "prevUpgradeId":Weapons.LASER_GUN_UPG_1,
  1001.            "upgradeId":Weapons.LASER_GUN_UPG_2A,
  1002.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,35),new QuantitativeItem(26,20),new QuantitativeItem(40,15)],
  1003.            "requiredLevel":24,
  1004.            "level":2
  1005.         },{
  1006.            "id":77,
  1007.            "description":"LASER_GUN.DISTINCT.U2B",
  1008.            "prevUpgradeId":Weapons.LASER_GUN_UPG_1,
  1009.            "upgradeId":Weapons.LASER_GUN_UPG_2B,
  1010.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,45),new QuantitativeItem(41,15),new QuantitativeItem(44,10)],
  1011.            "requiredLevel":24,
  1012.            "level":2
  1013.         },{
  1014.            "id":78,
  1015.            "description":"NAPALM_STRIKE.DISTINCT.U1",
  1016.            "prevUpgradeId":Weapons.NAPALM_STRIKE,
  1017.            "upgradeId":Weapons.NAPALM_STRIKE_UPG_1,
  1018.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,25),new QuantitativeItem(26,18),new QuantitativeItem(41,8)],
  1019.            "requiredLevel":22,
  1020.            "level":1
  1021.         },{
  1022.            "id":79,
  1023.            "description":"ROPE.DISTINCT.U1",
  1024.            "prevUpgradeId":Weapons.ROPE,
  1025.            "upgradeId":Weapons.ROPE_UPG_1,
  1026.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,25),new QuantitativeItem(10,10),new QuantitativeItem(24,15)],
  1027.            "requiredLevel":14,
  1028.            "level":1
  1029.         },{
  1030.            "id":80,
  1031.            "description":"GRAVITY_GUN.DISTINCT.U1",
  1032.            "prevUpgradeId":Weapons.GRAVITY_GUN,
  1033.            "upgradeId":Weapons.GRAVITY_GUN_UPG_1,
  1034.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,20),new QuantitativeItem(1,25),new QuantitativeItem(21,10)],
  1035.            "requiredLevel":12,
  1036.            "level":1
  1037.         },{
  1038.            "id":81,
  1039.            "description":"UFO.DISTINCT.U1",
  1040.            "prevUpgradeId":Weapons.UFO,
  1041.            "upgradeId":Weapons.UFO_UPG_1,
  1042.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,20),new QuantitativeItem(1,20),new QuantitativeItem(20,20)],
  1043.            "requiredLevel":16,
  1044.            "level":1
  1045.         },{
  1046.            "id":82,
  1047.            "description":"UFO.DISTINCT.U2",
  1048.            "prevUpgradeId":Weapons.UFO_UPG_1,
  1049.            "upgradeId":Weapons.UFO_UPG_2,
  1050.            "reagents":new <QuantitativeItem>[new QuantitativeItem(22,25),new QuantitativeItem(24,20),new QuantitativeItem(42,15)],
  1051.            "requiredLevel":26,
  1052.            "level":2
  1053.         },{
  1054.            "id":83,
  1055.            "description":"SUPER_SHEEP.DISTINCT.U1",
  1056.            "prevUpgradeId":Weapons.SUPER_SHEEP,
  1057.            "upgradeId":Weapons.SUPER_SHEEP_UPG_1,
  1058.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,25),new QuantitativeItem(23,15),new QuantitativeItem(41,5)],
  1059.            "requiredLevel":18,
  1060.            "level":1
  1061.         },{
  1062.            "id":84,
  1063.            "description":"SUPER_SHEEP.DISTINCT.U2",
  1064.            "prevUpgradeId":Weapons.SUPER_SHEEP_UPG_1,
  1065.            "upgradeId":Weapons.SUPER_SHEEP_UPG_2,
  1066.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,35),new QuantitativeItem(21,20),new QuantitativeItem(40,10)],
  1067.            "requiredLevel":22,
  1068.            "level":2
  1069.         },{
  1070.            "id":85,
  1071.            "description":"AK_47.DISTINCT.U2",
  1072.            "prevUpgradeId":Weapons.AK_47_UPG_1,
  1073.            "upgradeId":Weapons.AK_47_UPG_2,
  1074.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,40),new QuantitativeItem(26,20),new QuantitativeItem(44,8)],
  1075.            "requiredLevel":22,
  1076.            "level":2
  1077.         },{
  1078.            "id":86,
  1079.            "description":"PNEUMATIC_DRILL.DISTINCT.U2",
  1080.            "prevUpgradeId":Weapons.DRILL_UPG_1,
  1081.            "upgradeId":Weapons.DRILL_UPG_2,
  1082.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(6,15),new QuantitativeItem(26,10)],
  1083.            "requiredLevel":20,
  1084.            "level":2
  1085.         },{
  1086.            "id":87,
  1087.            "description":"BARRIER.DISTINCT.U2",
  1088.            "prevUpgradeId":Weapons.LASER_BARRIER_UPG_1,
  1089.            "upgradeId":Weapons.LASER_BARRIER_UPG_2,
  1090.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,15),new QuantitativeItem(21,15),new QuantitativeItem(42,8)],
  1091.            "requiredLevel":28,
  1092.            "level":2
  1093.         },{
  1094.            "id":88,
  1095.            "description":"BUNKER_BUSTER.DISTINCT.U2",
  1096.            "prevUpgradeId":Weapons.BUNKER_BUSTER_UPG_1,
  1097.            "upgradeId":Weapons.BUNKER_BUSTER_UPG_2,
  1098.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,25),new QuantitativeItem(22,20),new QuantitativeItem(44,12)],
  1099.            "requiredLevel":24,
  1100.            "level":2
  1101.         },{
  1102.            "id":89,
  1103.            "description":"HOLY_GRENADE.DISTINCT.U2",
  1104.            "prevUpgradeId":Weapons.HOLY_GRENADE_UPG_1,
  1105.            "upgradeId":Weapons.HOLY_GRENADE_UPG_2,
  1106.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,30),new QuantitativeItem(23,20),new QuantitativeItem(41,10)],
  1107.            "requiredLevel":24,
  1108.            "level":2
  1109.         },{
  1110.            "id":90,
  1111.            "description":"GRAVITY_GUN.DISTINCT.U2",
  1112.            "prevUpgradeId":Weapons.GRAVITY_GUN_UPG_1,
  1113.            "upgradeId":Weapons.GRAVITY_GUN_UPG_2,
  1114.            "reagents":new <QuantitativeItem>[new QuantitativeItem(22,20),new QuantitativeItem(26,20),new QuantitativeItem(41,10)],
  1115.            "requiredLevel":18,
  1116.            "level":2
  1117.         },{
  1118.            "id":91,
  1119.            "description":"FREEZER.DISTINCT.U1",
  1120.            "prevUpgradeId":Weapons.FREEZING_BAZOOKA,
  1121.            "upgradeId":Weapons.FREEZING_BAZOOKA_UPG1A,
  1122.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,25),new QuantitativeItem(20,15),new QuantitativeItem(40,10)],
  1123.            "requiredLevel":14,
  1124.            "level":1
  1125.         },{
  1126.            "id":92,
  1127.            "description":"PUSHING_MINE.DISTINCT.U1",
  1128.            "prevUpgradeId":Weapons.PUSHING_MINE,
  1129.            "upgradeId":Weapons.PUSHING_MINE_UPG_1,
  1130.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,30),new QuantitativeItem(21,20),new QuantitativeItem(41,8)],
  1131.            "requiredLevel":24,
  1132.            "level":1
  1133.         },{
  1134.            "id":93,
  1135.            "description":"SLEDGEHAMMER.DISTINCT.U1",
  1136.            "prevUpgradeId":Weapons.SLEDGEHAMMER,
  1137.            "upgradeId":Weapons.SLEDGEHAMMER_UPG_1,
  1138.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(40,8),new QuantitativeItem(44,8)],
  1139.            "requiredLevel":26,
  1140.            "level":1
  1141.         },{
  1142.            "id":94,
  1143.            "description":"BAT.DISTINCT.U1",
  1144.            "prevUpgradeId":Weapons.BAT,
  1145.            "upgradeId":Weapons.BAT_UPG_1,
  1146.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,30),new QuantitativeItem(24,15),new QuantitativeItem(44,8)],
  1147.            "requiredLevel":18,
  1148.            "level":1
  1149.         },{
  1150.            "id":95,
  1151.            "description":"WATERMELON.DISTINCT.U1",
  1152.            "prevUpgradeId":Weapons.WATERMELON,
  1153.            "upgradeId":Weapons.WATERMELON_UPG_1,
  1154.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,30),new QuantitativeItem(10,30),new QuantitativeItem(42,12)],
  1155.            "requiredLevel":20,
  1156.            "level":1
  1157.         },{
  1158.            "id":96,
  1159.            "description":"EMERGENCY_TELEPORT.DISTINCT.U3",
  1160.            "prevUpgradeId":Weapons.EMERGENCY_TELEPORT_UPG_2,
  1161.            "upgradeId":Weapons.EMERGENCY_TELEPORT_UPG_3,
  1162.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,15),new QuantitativeItem(24,15),new QuantitativeItem(43,10)],
  1163.            "requiredLevel":22,
  1164.            "level":3
  1165.         },{
  1166.            "id":97,
  1167.            "description":"GIRDER.DISTINCT.U2",
  1168.            "prevUpgradeId":Weapons.GIRDER_U1_ELASTIC,
  1169.            "upgradeId":Weapons.GIRDER_U2_TACTIC,
  1170.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,25),new QuantitativeItem(26,15),new QuantitativeItem(44,5)],
  1171.            "requiredLevel":18,
  1172.            "level":2
  1173.         },{
  1174.            "id":98,
  1175.            "description":"ROPE.DISTINCT.U2",
  1176.            "prevUpgradeId":Weapons.ROPE_UPG_1,
  1177.            "upgradeId":Weapons.ROPE_UPG_2,
  1178.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,20),new QuantitativeItem(9,20),new QuantitativeItem(43,10)],
  1179.            "requiredLevel":20,
  1180.            "level":2
  1181.         },{
  1182.            "id":99,
  1183.            "description":"SLEDGEHAMMER.DISTINCT.U1B",
  1184.            "prevUpgradeId":Weapons.SLEDGEHAMMER,
  1185.            "upgradeId":Weapons.SLEDGEHAMMER_UPG_1B,
  1186.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,25),new QuantitativeItem(22,25),new QuantitativeItem(24,25)],
  1187.            "requiredLevel":26,
  1188.            "level":1
  1189.         },{
  1190.            "id":100,
  1191.            "description":"SUPER_SHEEP.DISTINCT.U2B",
  1192.            "prevUpgradeId":Weapons.SUPER_SHEEP_UPG_1,
  1193.            "upgradeId":Weapons.SUPER_SHEEP_UPG_2B,
  1194.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,10),new QuantitativeItem(23,25),new QuantitativeItem(43,15)],
  1195.            "requiredLevel":22,
  1196.            "level":2
  1197.         },{
  1198.            "id":101,
  1199.            "description":"SNOWFLAKE_STRIKE.DISTINCT.U1",
  1200.            "prevUpgradeId":Weapons.SNOWFLAKE_STRIKE,
  1201.            "upgradeId":Weapons.SNOWFLAKE_STRIKE_UPG_1,
  1202.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,15),new QuantitativeItem(21,15),new QuantitativeItem(41,15)],
  1203.            "requiredLevel":18,
  1204.            "level":1
  1205.         },{
  1206.            "id":102,
  1207.            "description":"SNOWFLAKE_STRIKE.DISTINCT.U2A",
  1208.            "prevUpgradeId":Weapons.SNOWFLAKE_STRIKE_UPG_1,
  1209.            "upgradeId":Weapons.SNOWFLAKE_STRIKE_UPG_2A,
  1210.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,40),new QuantitativeItem(6,40),new QuantitativeItem(23,30)],
  1211.            "requiredLevel":24,
  1212.            "level":2
  1213.         },{
  1214.            "id":103,
  1215.            "description":"SNOWFLAKE_STRIKE.DISTINCT.U2B",
  1216.            "prevUpgradeId":Weapons.SNOWFLAKE_STRIKE_UPG_1,
  1217.            "upgradeId":Weapons.SNOWFLAKE_STRIKE_UPG_2B,
  1218.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(21,20),new QuantitativeItem(40,12)],
  1219.            "requiredLevel":24,
  1220.            "level":2
  1221.         },{
  1222.            "id":104,
  1223.            "description":"TELEPORT_ANCHOR.DISTINCT.U1",
  1224.            "prevUpgradeId":Weapons.TELEPORT_ANCHOR,
  1225.            "upgradeId":Weapons.TELEPORT_ANCHOR_UPG_1,
  1226.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,15),new QuantitativeItem(20,10),new QuantitativeItem(42,10)],
  1227.            "requiredLevel":24,
  1228.            "level":1
  1229.         },{
  1230.            "id":105,
  1231.            "description":"TELEPORT_ANCHOR.DISTINCT.U2",
  1232.            "prevUpgradeId":Weapons.TELEPORT_ANCHOR_UPG_1,
  1233.            "upgradeId":Weapons.TELEPORT_ANCHOR_UPG_2,
  1234.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,20),new QuantitativeItem(21,20),new QuantitativeItem(42,10)],
  1235.            "requiredLevel":28,
  1236.            "level":2
  1237.         },{
  1238.            "id":106,
  1239.            "description":"GIRDER_GUN.DISTINCT.U1",
  1240.            "prevUpgradeId":Weapons.GIRDER_GUN,
  1241.            "upgradeId":Weapons.GIRDER_GUN_UPG_1,
  1242.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,15),new QuantitativeItem(22,15),new QuantitativeItem(26,15)],
  1243.            "requiredLevel":22,
  1244.            "level":1
  1245.         },{
  1246.            "id":107,
  1247.            "description":"FIRE_THROWER.DISTINCT.U1",
  1248.            "prevUpgradeId":Weapons.FIRETHROWER,
  1249.            "upgradeId":Weapons.FIRETHROWER_UPG_1,
  1250.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,20),new QuantitativeItem(23,15),new QuantitativeItem(43,10)],
  1251.            "requiredLevel":20,
  1252.            "level":1
  1253.         },{
  1254.            "id":108,
  1255.            "description":"DRILL.DISTINCT.U1",
  1256.            "prevUpgradeId":Weapons.DRILL_GUN,
  1257.            "upgradeId":Weapons.DRILL_GUN_UPG_1,
  1258.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,10),new QuantitativeItem(26,15),new QuantitativeItem(44,5)],
  1259.            "requiredLevel":10,
  1260.            "level":1
  1261.         },{
  1262.            "id":109,
  1263.            "description":"DRILL.DISTINCT.U2",
  1264.            "prevUpgradeId":Weapons.DRILL_GUN_UPG_1,
  1265.            "upgradeId":Weapons.DRILL_GUN_UPG_2,
  1266.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,15),new QuantitativeItem(26,15),new QuantitativeItem(43,8)],
  1267.            "requiredLevel":14,
  1268.            "level":2
  1269.         },{
  1270.            "id":110,
  1271.            "description":"PARASITE.DISTINCT.U2",
  1272.            "prevUpgradeId":Weapons.PARASITE_UPG_1,
  1273.            "upgradeId":Weapons.PARASITE_UPG_2,
  1274.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,30),new QuantitativeItem(9,30),new QuantitativeItem(41,12)],
  1275.            "requiredLevel":28,
  1276.            "level":2
  1277.         },{
  1278.            "id":111,
  1279.            "description":"BOULDER.DISTINCT.U1",
  1280.            "prevUpgradeId":Weapons.BOULDER,
  1281.            "upgradeId":Weapons.BOULDER_UPG_1,
  1282.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,30),new QuantitativeItem(10,20),new QuantitativeItem(44,10)],
  1283.            "requiredLevel":20,
  1284.            "level":1
  1285.         },{
  1286.            "id":112,
  1287.            "description":"TELEPORT.DISTINCT.U1B",
  1288.            "prevUpgradeId":Weapons.TELEPORT,
  1289.            "upgradeId":Weapons.TELEPORT_UPG_1B,
  1290.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,15),new QuantitativeItem(20,10),new QuantitativeItem(40,8)],
  1291.            "requiredLevel":26,
  1292.            "level":1
  1293.         },{
  1294.            "id":113,
  1295.            "description":"GUARDING_BOT.DISTINCT.U1A",
  1296.            "prevUpgradeId":Weapons.GUARDING_BOT,
  1297.            "upgradeId":Weapons.GUARDING_BOT_UPG_1A,
  1298.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,20),new QuantitativeItem(24,20),new QuantitativeItem(42,12)],
  1299.            "requiredLevel":28,
  1300.            "level":1
  1301.         },{
  1302.            "id":114,
  1303.            "description":"AIR_BLOCKER.DISTINCT.U1",
  1304.            "prevUpgradeId":Weapons.AIR_BLOCKER,
  1305.            "upgradeId":Weapons.AIR_BLOCKER_UPG_1,
  1306.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,30),new QuantitativeItem(22,20),new QuantitativeItem(43,12)],
  1307.            "requiredLevel":20,
  1308.            "level":1
  1309.         },{
  1310.            "id":115,
  1311.            "description":"GUARDING_BOT.DISTINCT.U1B",
  1312.            "prevUpgradeId":Weapons.GUARDING_BOT,
  1313.            "upgradeId":Weapons.GUARDING_BOT_UPG_1B,
  1314.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,20),new QuantitativeItem(10,30),new QuantitativeItem(40,10)],
  1315.            "requiredLevel":28,
  1316.            "level":1
  1317.         },{
  1318.            "id":116,
  1319.            "description":"BOULDER.DISTINCT.U2",
  1320.            "prevUpgradeId":Weapons.BOULDER_UPG_1,
  1321.            "upgradeId":Weapons.BOULDER_UPG_2,
  1322.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,20),new QuantitativeItem(24,20),new QuantitativeItem(43,8)],
  1323.            "requiredLevel":24,
  1324.            "level":2
  1325.         },{
  1326.            "id":117,
  1327.            "description":"FREEZER.DISTINCT.U2A",
  1328.            "prevUpgradeId":Weapons.FREEZING_BAZOOKA_UPG1A,
  1329.            "upgradeId":Weapons.FREEZING_BAZOOKA_UPG2A,
  1330.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,15),new QuantitativeItem(26,20),new QuantitativeItem(44,12)],
  1331.            "requiredLevel":20,
  1332.            "level":2
  1333.         },{
  1334.            "id":118,
  1335.            "description":"FREEZER.DISTINCT.U1B",
  1336.            "prevUpgradeId":Weapons.FREEZING_BAZOOKA,
  1337.            "upgradeId":Weapons.FREEZING_BAZOOKA_UPG1B,
  1338.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,25),new QuantitativeItem(24,15),new QuantitativeItem(40,10)],
  1339.            "requiredLevel":14,
  1340.            "level":1
  1341.         },{
  1342.            "id":119,
  1343.            "description":"FREEZER.DISTINCT.U2B",
  1344.            "prevUpgradeId":Weapons.FREEZING_BAZOOKA_UPG1B,
  1345.            "upgradeId":Weapons.FREEZING_BAZOOKA_UPG2B,
  1346.            "reagents":new <QuantitativeItem>[new QuantitativeItem(20,20),new QuantitativeItem(22,15),new QuantitativeItem(43,12)],
  1347.            "requiredLevel":20,
  1348.            "level":2
  1349.         },{
  1350.            "id":120,
  1351.            "description":"GAS_GRENADE.DISTINCT.U1B",
  1352.            "prevUpgradeId":Weapons.GAS_GRENADE,
  1353.            "upgradeId":Weapons.GAS_GRENADE_UPG_1B,
  1354.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,30),new QuantitativeItem(21,15),new QuantitativeItem(41,10)],
  1355.            "requiredLevel":20,
  1356.            "level":1
  1357.         },{
  1358.            "id":121,
  1359.            "description":"SPIDER.DISTINCT.U1B",
  1360.            "prevUpgradeId":Weapons.SPIDER,
  1361.            "upgradeId":Weapons.SPIDER_UPG_1B,
  1362.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,25),new QuantitativeItem(4,25),new QuantitativeItem(42,5)],
  1363.            "requiredLevel":26,
  1364.            "level":1
  1365.         },{
  1366.            "id":122,
  1367.            "description":"HOLY_GRENADE.DISTINCT.U2B",
  1368.            "prevUpgradeId":Weapons.HOLY_GRENADE_UPG_1,
  1369.            "upgradeId":Weapons.HOLY_GRENADE_UPG_2B,
  1370.            "reagents":new <QuantitativeItem>[new QuantitativeItem(23,20),new QuantitativeItem(24,15),new QuantitativeItem(26,15)],
  1371.            "requiredLevel":24,
  1372.            "level":2
  1373.         },{
  1374.            "id":123,
  1375.            "description":"AIR_BLOCKER.DISTINCT.U1B",
  1376.            "prevUpgradeId":Weapons.AIR_BLOCKER,
  1377.            "upgradeId":Weapons.AIR_BLOCKER_UPG_1B,
  1378.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,30),new QuantitativeItem(22,20),new QuantitativeItem(44,10)],
  1379.            "requiredLevel":20,
  1380.            "level":1
  1381.         },{
  1382.            "id":124,
  1383.            "description":"SOUL_GUN.DISTINCT.U1",
  1384.            "prevUpgradeId":Weapons.SOUL_GUN,
  1385.            "upgradeId":Weapons.SOUL_GUN_UPG_1,
  1386.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,10),new QuantitativeItem(23,10),new QuantitativeItem(43,15)],
  1387.            "requiredLevel":20,
  1388.            "level":1
  1389.         },{
  1390.            "id":125,
  1391.            "description":"SOUL_GUN.DISTINCT.U2A",
  1392.            "prevUpgradeId":Weapons.SOUL_GUN_UPG_1,
  1393.            "upgradeId":Weapons.SOUL_GUN_UPG_2A,
  1394.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,35),new QuantitativeItem(20,15),new QuantitativeItem(42,10)],
  1395.            "requiredLevel":24,
  1396.            "level":2
  1397.         },{
  1398.            "id":126,
  1399.            "description":"SOUL_GUN.DISTINCT.U2B",
  1400.            "prevUpgradeId":Weapons.SOUL_GUN_UPG_1,
  1401.            "upgradeId":Weapons.SOUL_GUN_UPG_2B,
  1402.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,30),new QuantitativeItem(21,20),new QuantitativeItem(40,8)],
  1403.            "requiredLevel":24,
  1404.            "level":2
  1405.         },{
  1406.            "id":127,
  1407.            "description":"BAT.DISTINCT.U2A",
  1408.            "prevUpgradeId":Weapons.BAT_UPG_1,
  1409.            "upgradeId":Weapons.BAT_UPG_2A,
  1410.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,40),new QuantitativeItem(23,20),new QuantitativeItem(41,5)],
  1411.            "requiredLevel":26,
  1412.            "level":2
  1413.         },{
  1414.            "id":128,
  1415.            "description":"BAT.DISTINCT.U2B",
  1416.            "prevUpgradeId":Weapons.BAT_UPG_1,
  1417.            "upgradeId":Weapons.BAT_UPG_2B,
  1418.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,30),new QuantitativeItem(22,15),new QuantitativeItem(44,12)],
  1419.            "requiredLevel":26,
  1420.            "level":2
  1421.         },{
  1422.            "id":129,
  1423.            "description":"AK_47.DISTINCT.U1B",
  1424.            "prevUpgradeId":Weapons.AK_47,
  1425.            "upgradeId":Weapons.AK_47_UPG_1B,
  1426.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,35),new QuantitativeItem(21,20),new QuantitativeItem(42,10)],
  1427.            "requiredLevel":18,
  1428.            "level":1
  1429.         },{
  1430.            "id":130,
  1431.            "description":"AK_47.DISTINCT.U2B",
  1432.            "prevUpgradeId":Weapons.AK_47_UPG_1B,
  1433.            "upgradeId":Weapons.AK_47_UPG_2B,
  1434.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,30),new QuantitativeItem(20,25),new QuantitativeItem(40,20)],
  1435.            "requiredLevel":26,
  1436.            "level":2
  1437.         },{
  1438.            "id":131,
  1439.            "description":"GRAVITY_GUN.DISTINCT.U3",
  1440.            "prevUpgradeId":Weapons.GRAVITY_GUN_UPG_2,
  1441.            "upgradeId":Weapons.GRAVITY_GUN_UPG_3,
  1442.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,40),new QuantitativeItem(23,20),new QuantitativeItem(44,15)],
  1443.            "requiredLevel":24,
  1444.            "level":3
  1445.         },{
  1446.            "id":132,
  1447.            "description":"EMERGENCY_TELEPORT.DISTINCT.U3B",
  1448.            "prevUpgradeId":Weapons.EMERGENCY_TELEPORT_UPG_2,
  1449.            "upgradeId":Weapons.EMERGENCY_TELEPORT_UPG_3B,
  1450.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,50),new QuantitativeItem(40,30),new QuantitativeItem(42,20)],
  1451.            "requiredLevel":30,
  1452.            "level":3
  1453.         },{
  1454.            "id":133,
  1455.            "description":"GROUNDBREAKER.DISTINCT.U1",
  1456.            "prevUpgradeId":Weapons.GROUND_BREAKER,
  1457.            "upgradeId":Weapons.GROUND_BREAKER_UPG_1,
  1458.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,40),new QuantitativeItem(26,30),new QuantitativeItem(41,20)],
  1459.            "requiredLevel":30,
  1460.            "level":1
  1461.         },{
  1462.            "id":134,
  1463.            "description":"BOULDER.DISTINCT.U3",
  1464.            "prevUpgradeId":Weapons.BOULDER_UPG_2,
  1465.            "upgradeId":Weapons.BOULDER_UPG_3,
  1466.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,50),new QuantitativeItem(23,20),new QuantitativeItem(41,5)],
  1467.            "requiredLevel":28,
  1468.            "level":3
  1469.         },{
  1470.            "id":135,
  1471.            "description":"ENERGY_RIFLE.DISTINCT.U1",
  1472.            "prevUpgradeId":Weapons.ENERGY_RIFLE,
  1473.            "upgradeId":Weapons.ENERGY_RIFLE_UPG_1,
  1474.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,20),new QuantitativeItem(24,15),new QuantitativeItem(41,10)],
  1475.            "requiredLevel":26,
  1476.            "level":1
  1477.         },{
  1478.            "id":136,
  1479.            "description":"ENERGY_RIFLE.DISTINCT.U2",
  1480.            "prevUpgradeId":Weapons.ENERGY_RIFLE_UPG_1,
  1481.            "upgradeId":Weapons.ENERGY_RIFLE_UPG_2,
  1482.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,25),new QuantitativeItem(21,20),new QuantitativeItem(42,15)],
  1483.            "requiredLevel":28,
  1484.            "level":2
  1485.         },{
  1486.            "id":137,
  1487.            "description":"ENERGY_RIFLE.DISTINCT.U3",
  1488.            "prevUpgradeId":Weapons.ENERGY_RIFLE_UPG_2,
  1489.            "upgradeId":Weapons.ENERGY_RIFLE_UPG_3,
  1490.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,30),new QuantitativeItem(24,25),new QuantitativeItem(43,20)],
  1491.            "requiredLevel":30,
  1492.            "level":3
  1493.         },{
  1494.            "id":138,
  1495.            "description":"SNIPER_RIFLE.DISTINCT.U3A",
  1496.            "prevUpgradeId":Weapons.SNIPER_RIFLE_UPG_2A,
  1497.            "upgradeId":Weapons.SNIPER_RIFLE_UPG_3A,
  1498.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,40),new QuantitativeItem(20,30),new QuantitativeItem(43,20)],
  1499.            "requiredLevel":26,
  1500.            "level":3
  1501.         },{
  1502.            "id":139,
  1503.            "description":"SNIPER_RIFLE.DISTINCT.U3B",
  1504.            "prevUpgradeId":Weapons.SNIPER_RIFLE_UPG_2B,
  1505.            "upgradeId":Weapons.SNIPER_RIFLE_UPG_3B,
  1506.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,40),new QuantitativeItem(26,30),new QuantitativeItem(44,20)],
  1507.            "requiredLevel":22,
  1508.            "level":3
  1509.         },{
  1510.            "id":140,
  1511.            "description":"GAS_GRENADE.DISTINCT.U2A",
  1512.            "prevUpgradeId":Weapons.GAS_GRENADE_UPG_1,
  1513.            "upgradeId":Weapons.GAS_GRENADE_UPG_2A,
  1514.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,30),new QuantitativeItem(22,25),new QuantitativeItem(41,20)],
  1515.            "requiredLevel":28,
  1516.            "level":2
  1517.         },{
  1518.            "id":141,
  1519.            "description":"GAS_GRENADE.DISTINCT.U2B",
  1520.            "prevUpgradeId":Weapons.GAS_GRENADE_UPG_1B,
  1521.            "upgradeId":Weapons.GAS_GRENADE_UPG_2B,
  1522.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,30),new QuantitativeItem(24,25),new QuantitativeItem(44,20)],
  1523.            "requiredLevel":28,
  1524.            "level":2
  1525.         },{
  1526.            "id":142,
  1527.            "description":"FIREWORK.DISTINCT.U1",
  1528.            "prevUpgradeId":Weapons.FIREWORK,
  1529.            "upgradeId":Weapons.FIREWORK_UPG_1,
  1530.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,30),new QuantitativeItem(21,25),new QuantitativeItem(43,20)],
  1531.            "requiredLevel":26,
  1532.            "level":1
  1533.         },{
  1534.            "id":143,
  1535.            "description":"FIREWORK.DISTINCT.U2",
  1536.            "prevUpgradeId":Weapons.FIREWORK_UPG_1,
  1537.            "upgradeId":Weapons.FIREWORK_UPG_2,
  1538.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,40),new QuantitativeItem(23,30),new QuantitativeItem(40,20)],
  1539.            "requiredLevel":30,
  1540.            "level":2
  1541.         },{
  1542.            "id":144,
  1543.            "description":"PUPPET.DISTINCT.U1",
  1544.            "prevUpgradeId":Weapons.PUPPET,
  1545.            "upgradeId":Weapons.PUPPET_U1,
  1546.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,30),new QuantitativeItem(21,25),new QuantitativeItem(43,20)],
  1547.            "requiredLevel":26,
  1548.            "level":1
  1549.         },{
  1550.            "id":145,
  1551.            "description":"PUPPET.DISTINCT.U2A",
  1552.            "prevUpgradeId":Weapons.PUPPET_U1,
  1553.            "upgradeId":Weapons.PUPPET_U2A,
  1554.            "reagents":new <QuantitativeItem>[new QuantitativeItem(0,40),new QuantitativeItem(26,30),new QuantitativeItem(41,20)],
  1555.            "requiredLevel":30,
  1556.            "level":2
  1557.         },{
  1558.            "id":146,
  1559.            "description":"PUPPET.DISTINCT.U2B",
  1560.            "prevUpgradeId":Weapons.PUPPET_U1,
  1561.            "upgradeId":Weapons.PUPPET_U2B,
  1562.            "reagents":new <QuantitativeItem>[new QuantitativeItem(1,40),new QuantitativeItem(23,30),new QuantitativeItem(40,20)],
  1563.            "requiredLevel":30,
  1564.            "level":2
  1565.         },{
  1566.            "id":147,
  1567.            "description":"THEIF_ATTACK.DISTINCT.U1",
  1568.            "prevUpgradeId":Weapons.THEIF_ATTACK,
  1569.            "upgradeId":Weapons.THEIF_ATTACK_U1,
  1570.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,30),new QuantitativeItem(22,25),new QuantitativeItem(44,20)],
  1571.            "requiredLevel":26,
  1572.            "level":1
  1573.         },{
  1574.            "id":148,
  1575.            "description":"THEIF_ATTACK.DISTINCT.U2A",
  1576.            "prevUpgradeId":Weapons.THEIF_ATTACK_U1,
  1577.            "upgradeId":Weapons.THEIF_ATTACK_U2A,
  1578.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,40),new QuantitativeItem(24,30),new QuantitativeItem(42,20)],
  1579.            "requiredLevel":30,
  1580.            "level":2
  1581.         },{
  1582.            "id":149,
  1583.            "description":"THEIF_ATTACK.DISTINCT.U2B",
  1584.            "prevUpgradeId":Weapons.THEIF_ATTACK_U1,
  1585.            "upgradeId":Weapons.THEIF_ATTACK_U2B,
  1586.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,40),new QuantitativeItem(20,30),new QuantitativeItem(41,20)],
  1587.            "requiredLevel":30,
  1588.            "level":2
  1589.         },{
  1590.            "id":150,
  1591.            "description":"CIRCUS_CANNON.DISTINCT.U1",
  1592.            "prevUpgradeId":Weapons.CIRCUS_CANNON,
  1593.            "upgradeId":Weapons.CIRCUS_CANNON_U1,
  1594.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,8),new QuantitativeItem(21,4),new QuantitativeItem(5,1)],
  1595.            "requiredLevel":6,
  1596.            "level":1
  1597.         },{
  1598.            "id":151,
  1599.            "description":"DISC_LAUNCHER.DISTINCT.U1",
  1600.            "prevUpgradeId":Weapons.DISC_LAUNCHER,
  1601.            "upgradeId":Weapons.DISC_LAUNCHER_U1,
  1602.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,8),new QuantitativeItem(26,4),new QuantitativeItem(7,1)],
  1603.            "requiredLevel":6,
  1604.            "level":1
  1605.         },{
  1606.            "id":152,
  1607.            "description":"HELICOPTER.DISTINCT.U1",
  1608.            "prevUpgradeId":§8"u§.HELICOPTER,
  1609.            "upgradeId":§8"u§.HELICOPTER_U1,
  1610.            "reagents":new <QuantitativeItem>[new QuantitativeItem(43,20),new QuantitativeItem(42,20),new QuantitativeItem(25,20)],
  1611.            "requiredLevel":30,
  1612.            "level":1
  1613.         },{
  1614.            "id":153,
  1615.            "description":"HELICOPTER.DISTINCT.U2",
  1616.            "prevUpgradeId":§8"u§.HELICOPTER,
  1617.            "upgradeId":§8"u§.HELICOPTER_U2,
  1618.            "reagents":new <QuantitativeItem>[new QuantitativeItem(4,60),new QuantitativeItem(44,20),new QuantitativeItem(8,20)],
  1619.            "requiredLevel":30,
  1620.            "level":1
  1621.         },{
  1622.            "id":154,
  1623.            "description":"VACUUM_GRENADE.DISTINCT.U1",
  1624.            "prevUpgradeId":§8"u§.VACUUM_GRENADE,
  1625.            "upgradeId":§8"u§.§'%Z§,
  1626.            "reagents":new <QuantitativeItem>[new QuantitativeItem(10,70),new QuantitativeItem(21,20),new QuantitativeItem(40,10)],
  1627.            "requiredLevel":30,
  1628.            "level":1
  1629.         },{
  1630.            "id":155,
  1631.            "description":"CANNON.DISTINCT.U3A",
  1632.            "prevUpgradeId":§8"u§.CANNON_UPG_2,
  1633.            "upgradeId":§8"u§.CANNON_UPG_3A,
  1634.            "reagents":new <QuantitativeItem>[new QuantitativeItem(2,60),new QuantitativeItem(24,35),new QuantitativeItem(43,10)],
  1635.            "requiredLevel":28,
  1636.            "level":3
  1637.         },{
  1638.            "id":156,
  1639.            "description":"CANNON.DISTINCT.U3B",
  1640.            "prevUpgradeId":§8"u§.CANNON_UPG_2,
  1641.            "upgradeId":§8"u§.CANNON_UPG_3B_STICKY,
  1642.            "reagents":new <QuantitativeItem>[new QuantitativeItem(3,80),new QuantitativeItem(23,25),new QuantitativeItem(44,10)],
  1643.            "requiredLevel":28,
  1644.            "level":3
  1645.         },{
  1646.            "id":901,
  1647.            "prevUpgradeId":Weapons.ELECTRO_BUOY,
  1648.            "upgradeId":Weapons.ELECTRO_BUOY_CRAFT,
  1649.            "reagents":new <QuantitativeItem>[new QuantitativeItem(6,10),new QuantitativeItem(5,5),new QuantitativeItem(50,1)],
  1650.            "count":5,
  1651.            "requiredLevel":12,
  1652.            "level":1
  1653.         },{
  1654.            "id":902,
  1655.            "prevUpgradeId":Weapons.POISON_BOBBER,
  1656.            "upgradeId":Weapons.POISON_BOBBER_CRAFT,
  1657.            "reagents":new <QuantitativeItem>[new QuantitativeItem(9,10),new QuantitativeItem(7,5),new QuantitativeItem(50,1)],
  1658.            "count":5,
  1659.            "requiredLevel":12,
  1660.            "level":1
  1661.         }
  1662.  
  1663.    """
  1664.  
  1665.     # Define regular expressions to extract data from the text
  1666.     id_pattern = r'"id":(\d+),'
  1667.     reagents_pattern = r'new QuantitativeItem\((\d+),(\d+)\)'
  1668.  
  1669.     # Map IDs to constant names
  1670.     REAGENTS_NAMES = {
  1671.         v: k for k, v in ReagentsConfig.__dict__.items() if not k.startswith('_')
  1672.     }
  1673.  
  1674.     # Initialize the dictionary to store weapon upgrades
  1675.     recipes_tree = {}
  1676.  
  1677.     json_blocks = re.findall(r'{(.*?)}', text, re.DOTALL)
  1678.  
  1679.     # Loop through each recipe in the text
  1680.     for i, recipe_data in enumerate(json_blocks):
  1681.  
  1682.         # Extract ID, description, reagents, and requiredLevel using regex
  1683.         recipe_id = int(re.search(id_pattern, recipe_data).group(1))
  1684.         reagents_matches = re.findall(reagents_pattern, recipe_data)
  1685.         required_level = int(re.search(r'"requiredLevel":(\d+),', recipe_data).group(1))
  1686.  
  1687.         # Create QuantitativeItemStructure instances with names of constants
  1688.         reagents_arr: List[QuantitativeItemStructure] = []
  1689.         for item in reagents_matches:
  1690.             p_id, p_quantity = item
  1691.             p_id = int(p_id)
  1692.             p_quantity = int(p_quantity)
  1693.             if p_id in REAGENTS_NAMES:
  1694.                 reagents_arr.append(QuantitativeItemStructure(f"ReagentsConfig.{REAGENTS_NAMES[p_id]}", p_quantity))
  1695.  
  1696.         # Create a dictionary to map constant names to values based on test_id
  1697.         result = {f"RecipesConfig.{attr}": getattr(RecipesConfig, attr) for attr in dir(RecipesConfig) if not attr.startswith('_') and getattr(RecipesConfig, attr) == recipe_id}
  1698.  
  1699.         # Map the recipe ID to the corresponding recipe in RECIPES array
  1700.         recipe = next(iter(result))
  1701.  
  1702.         # Add the weapon upgrade to the WEAPONS_UPGRADES dictionary
  1703.         recipes_tree[recipe] = {"reagents": reagents_arr, "required_level": required_level}
  1704.  
  1705.     recipes_tree_str = str(recipes_tree)
  1706.  
  1707.     # Remove single quotes around RecipesConfig items
  1708.     recipes_tree_str = recipes_tree_str.replace("'", "")
  1709.  
  1710.     # Remove p_id= and keep only the ReagentsConfig item
  1711.     recipes_tree_str = recipes_tree_str.replace("p_id=", "")
  1712.  
  1713.     # Remove p_quantity= and keep only the quantity
  1714.     recipes_tree_str = recipes_tree_str.replace("p_quantity=", "")
  1715.  
  1716.     # Change ' to " for reagents and requiredLevel
  1717.     recipes_tree_res = recipes_tree_str.replace("reagents", '"reagents"').replace("requiredLevel", '"requiredLevel"')
  1718.  
  1719.     # Split the text by '}, '
  1720.     blocks = recipes_tree_res.split('}, ')
  1721.  
  1722.     # Iterate through each block and add a new line at the end
  1723.     recipes_tree_res = ""
  1724.     for block in blocks:
  1725.         recipes_tree_res += block + '},\n'
  1726.  
  1727.     # Print the result
  1728.     print(recipes_tree_res)
  1729.  
  1730.  
  1731. if __name__ == "__main__":
  1732.     main()
Add Comment
Please, Sign In to add comment