From 17751aa4d71d85a35a498e4c1677b9ee9d26331a Mon Sep 17 00:00:00 2001
From: Atemo <Atemo@users.noreply.github.com>
Date: Mon, 29 Aug 2022 13:28:09 +0200
Subject: [PATCH] Added 'Gradable' in item DB (#7218)

* Added 'Gradable' in item DB
** The field defines if the item can be graded (renewal). (Default: false)

Thanks to @attackjom, @Lemongrass3110 !
---
 db/import-tmpl/item_db.yml   |   1 +
 db/item_db.yml               |   1 +
 db/pre-re/item_db.yml        |   1 +
 db/pre-re/item_db_equip.yml  |   1 +
 db/pre-re/item_db_etc.yml    |   1 +
 db/pre-re/item_db_usable.yml |   1 +
 db/re/item_db.yml            |   1 +
 db/re/item_db_equip.yml      | 191 +++++++++++++++++++++++++++++++++++
 db/re/item_db_etc.yml        |   1 +
 db/re/item_db_usable.yml     |   1 +
 doc/item_db.txt              |   4 +
 doc/yaml/db/item_db.yml      |   1 +
 doc/yaml/sql/item_db2_re.sql |   1 +
 doc/yaml/sql/item_db_re.sql  |   1 +
 sql-files/item_db2_re.sql    |   1 +
 sql-files/item_db_re.sql     |   1 +
 src/map/clif.cpp             |   5 +
 src/map/itemdb.cpp           |  16 ++-
 src/map/itemdb.hpp           |   2 +-
 src/tool/yaml2sql.cpp        |   2 +
 20 files changed, 232 insertions(+), 2 deletions(-)

diff --git a/db/import-tmpl/item_db.yml b/db/import-tmpl/item_db.yml
index 9097078528..56af674622 100644
--- a/db/import-tmpl/item_db.yml
+++ b/db/import-tmpl/item_db.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/item_db.yml b/db/item_db.yml
index 37d96136b4..d1fd5b5e88 100644
--- a/db/item_db.yml
+++ b/db/item_db.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/pre-re/item_db.yml b/db/pre-re/item_db.yml
index 4f18c64050..a75f06fec4 100644
--- a/db/pre-re/item_db.yml
+++ b/db/pre-re/item_db.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/pre-re/item_db_equip.yml b/db/pre-re/item_db_equip.yml
index a9120def12..ebfae31683 100644
--- a/db/pre-re/item_db_equip.yml
+++ b/db/pre-re/item_db_equip.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/pre-re/item_db_etc.yml b/db/pre-re/item_db_etc.yml
index 09997ec170..02785388f1 100644
--- a/db/pre-re/item_db_etc.yml
+++ b/db/pre-re/item_db_etc.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/pre-re/item_db_usable.yml b/db/pre-re/item_db_usable.yml
index 4ba624824b..a0dac1bc7c 100644
--- a/db/pre-re/item_db_usable.yml
+++ b/db/pre-re/item_db_usable.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/re/item_db.yml b/db/re/item_db.yml
index 3f3927fdb0..e89134bde3 100644
--- a/db/re/item_db.yml
+++ b/db/re/item_db.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/re/item_db_equip.yml b/db/re/item_db_equip.yml
index 8249d5ccbe..98fdc08373 100644
--- a/db/re/item_db_equip.yml
+++ b/db/re/item_db_equip.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
@@ -68591,6 +68592,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 200
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -102587,6 +102589,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -118887,6 +118890,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -139727,6 +139731,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     View: 512
     Script: |
       .@g = getenchantgrade();
@@ -139879,6 +139884,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     View: 2090
     Script: |
       .@r = getrefine();
@@ -139906,6 +139912,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     View: 2102
     Script: |
       .@r = getrefine();
@@ -140006,6 +140013,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     View: 2104
     Script: |
       .@r = getrefine();
@@ -140033,6 +140041,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 1646
     Script: |
       .@g = getenchantgrade();
@@ -140066,6 +140075,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 368
     Script: |
       .@g = getenchantgrade();
@@ -140115,6 +140125,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 1220
     Script: |
       .@g = getenchantgrade();
@@ -140165,6 +140176,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 1645
     Script: |
       .@g = getenchantgrade();
@@ -140211,6 +140223,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 589
     Script: |
       .@g = getenchantgrade();
@@ -141806,6 +141819,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 495
     Script: |
       .@g = getenchantgrade();
@@ -141853,6 +141867,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 150
     Refineable: true
+    Gradable: true
     View: 461
     Script: |
       .@g = getenchantgrade();
@@ -147645,6 +147660,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -147695,6 +147711,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -147744,6 +147761,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -147794,6 +147812,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -147845,6 +147864,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -147896,6 +147916,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -148321,6 +148342,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -148366,6 +148388,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -148411,6 +148434,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -148456,6 +148480,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -148826,6 +148851,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     View: 2
     Script: |
       .@g = getenchantgrade();
@@ -148887,6 +148913,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 160
     Refineable: true
+    Gradable: true
     View: 1
     Script: |
       .@g = getenchantgrade();
@@ -150149,6 +150176,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bBaseAtk,15*(.@r/2);
@@ -150175,6 +150203,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bBaseAtk,15*(.@r/2);
@@ -150201,6 +150230,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bMatk,10*(.@r/2);
@@ -150229,6 +150259,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bMatk,15*(.@r/2);
@@ -150278,6 +150309,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bBaseAtk,15*(.@r/2);
@@ -150305,6 +150337,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@r = getrefine();
       bonus bBaseAtk,15*(.@r/2);
@@ -150735,6 +150768,7 @@ Body:
     ArmorLevel: 2
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -150835,6 +150869,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -150881,6 +150916,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -150927,6 +150963,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -150973,6 +151010,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -152639,6 +152677,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -152684,6 +152723,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -152728,6 +152768,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -152772,6 +152813,7 @@ Body:
       NoGuildStorage: true
       NoMail: true
       NoAuction: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -155791,6 +155833,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -155835,6 +155878,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -155888,6 +155932,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156014,6 +156059,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156065,6 +156111,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156362,6 +156409,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156417,6 +156465,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156470,6 +156519,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156607,6 +156657,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156640,6 +156691,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -156675,6 +156727,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157164,6 +157217,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157208,6 +157262,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157254,6 +157309,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157360,6 +157416,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157643,6 +157700,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157694,6 +157752,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157746,6 +157805,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157789,6 +157849,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       if (.@g >= ENCHANTGRADE_D) {
@@ -157820,6 +157881,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157853,6 +157915,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -157954,6 +158017,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158003,6 +158067,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158057,6 +158122,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       if (.@g >= ENCHANTGRADE_D) {
@@ -158220,6 +158286,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158575,6 +158642,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158620,6 +158688,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158702,6 +158771,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158864,6 +158934,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -158916,6 +158987,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159246,6 +159318,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159298,6 +159371,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159519,6 +159593,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159570,6 +159645,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159621,6 +159697,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -159997,6 +160074,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160144,6 +160222,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160180,6 +160259,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160235,6 +160315,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160286,6 +160367,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160336,6 +160418,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160384,6 +160467,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160911,6 +160995,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -160963,6 +161048,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -161013,6 +161099,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -161242,6 +161329,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -161855,6 +161943,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -161912,6 +162001,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162147,6 +162237,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162182,6 +162273,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162218,6 +162310,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162333,6 +162426,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162386,6 +162480,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162440,6 +162535,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162493,6 +162589,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162545,6 +162642,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162604,6 +162702,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162656,6 +162755,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162707,6 +162807,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -162762,6 +162863,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163134,6 +163236,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163178,6 +163281,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163223,6 +163327,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163340,6 +163445,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163390,6 +163496,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163581,6 +163688,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163635,6 +163743,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163688,6 +163797,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -163995,6 +164105,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164041,6 +164152,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164162,6 +164274,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164214,6 +164327,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164423,6 +164537,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164478,6 +164593,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164787,6 +164903,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164833,6 +164950,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -164954,6 +165072,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165006,6 +165125,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165215,6 +165335,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165270,6 +165391,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165697,6 +165819,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165740,6 +165863,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165794,6 +165918,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165917,6 +166042,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -165968,6 +166094,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166201,6 +166328,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166255,6 +166383,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166309,6 +166438,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166649,6 +166779,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166694,6 +166825,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166775,6 +166907,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166896,6 +167029,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -166952,6 +167086,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167306,6 +167441,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167351,6 +167487,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167468,6 +167605,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167518,6 +167656,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167752,6 +167891,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167806,6 +167946,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -167861,6 +168002,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168017,6 +168159,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168063,6 +168206,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168220,6 +168364,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168273,6 +168418,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168481,6 +168627,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -168560,6 +168707,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169002,6 +169150,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169055,6 +169204,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169109,6 +169259,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169234,6 +169385,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169286,6 +169438,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169511,6 +169664,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169569,6 +169723,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -169629,6 +169784,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170068,6 +170224,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       bonus bUnbreakableWeapon;
@@ -170122,6 +170279,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170173,6 +170331,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170223,6 +170382,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170781,6 +170941,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170825,6 +170986,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170869,6 +171031,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170913,6 +171076,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -170958,6 +171122,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171111,6 +171276,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171161,6 +171327,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171212,6 +171379,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171528,6 +171696,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171581,6 +171750,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171635,6 +171805,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171687,6 +171858,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -171964,6 +172136,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172019,6 +172192,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172067,6 +172241,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172116,6 +172291,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172311,6 +172487,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172366,6 +172543,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172415,6 +172593,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172465,6 +172644,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172634,6 +172814,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172687,6 +172868,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -172736,6 +172918,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173012,6 +173195,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173067,6 +173251,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173115,6 +173300,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173163,6 +173349,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173327,6 +173514,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 220
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173382,6 +173570,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 230
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173431,6 +173620,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 210
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
@@ -173479,6 +173669,7 @@ Body:
     WeaponLevel: 5
     EquipLevelMin: 190
     Refineable: true
+    Gradable: true
     Script: |
       .@g = getenchantgrade();
       .@r = getrefine();
diff --git a/db/re/item_db_etc.yml b/db/re/item_db_etc.yml
index b9ada8f97e..481ecc03eb 100644
--- a/db/re/item_db_etc.yml
+++ b/db/re/item_db_etc.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/db/re/item_db_usable.yml b/db/re/item_db_usable.yml
index f0747f8214..89e5a4728e 100644
--- a/db/re/item_db_usable.yml
+++ b/db/re/item_db_usable.yml
@@ -44,6 +44,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/doc/item_db.txt b/doc/item_db.txt
index 38d4918d74..abdb482101 100644
--- a/doc/item_db.txt
+++ b/doc/item_db.txt
@@ -219,6 +219,10 @@ Refineable: Defines if the item can be refined.
 
 ---------------------------------------
 
+Gradable: Defines if the item can be graded.
+
+---------------------------------------
+
 View: For normal items, defines a replacement view-sprite for the item.
 
 ---------------------------------------
diff --git a/doc/yaml/db/item_db.yml b/doc/yaml/db/item_db.yml
index 94dd7fd6cb..7c66ab5afe 100644
--- a/doc/yaml/db/item_db.yml
+++ b/doc/yaml/db/item_db.yml
@@ -27,6 +27,7 @@
 #   EquipLevelMin           Minimum required level to equip. (Default: 0)
 #   EquipLevelMax           Maximum level that can equip. (Default: 0)
 #   Refineable              If the item can be refined. (Default: false)
+#   Gradable                If the item can be graded. (Default: false)
 #   View                    View sprite of an item. (Default: 0)
 #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
 #   Flags:                  Item flags. (Default: null)
diff --git a/doc/yaml/sql/item_db2_re.sql b/doc/yaml/sql/item_db2_re.sql
index 2b24bc7f40..de0d9e95b2 100644
--- a/doc/yaml/sql/item_db2_re.sql
+++ b/doc/yaml/sql/item_db2_re.sql
@@ -80,6 +80,7 @@ CREATE TABLE `item_db2_re` (
   `equip_level_min` tinyint(3) unsigned DEFAULT NULL,
   `equip_level_max` tinyint(3) unsigned DEFAULT NULL,
   `refineable` tinyint(1) unsigned DEFAULT NULL,
+  `gradable` tinyint(1) unsigned DEFAULT NULL,
   `view` smallint(5) unsigned DEFAULT NULL,
   `alias_name` varchar(50) DEFAULT NULL,
   `flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
diff --git a/doc/yaml/sql/item_db_re.sql b/doc/yaml/sql/item_db_re.sql
index bbb762d973..7d9461c432 100644
--- a/doc/yaml/sql/item_db_re.sql
+++ b/doc/yaml/sql/item_db_re.sql
@@ -80,6 +80,7 @@ CREATE TABLE `item_db_re` (
   `equip_level_min` tinyint(3) unsigned DEFAULT NULL,
   `equip_level_max` tinyint(3) unsigned DEFAULT NULL,
   `refineable` tinyint(1) unsigned DEFAULT NULL,
+  `gradable` tinyint(1) unsigned DEFAULT NULL,
   `view` smallint(5) unsigned DEFAULT NULL,
   `alias_name` varchar(50) DEFAULT NULL,
   `flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
diff --git a/sql-files/item_db2_re.sql b/sql-files/item_db2_re.sql
index 1975b17f16..ccbc076210 100644
--- a/sql-files/item_db2_re.sql
+++ b/sql-files/item_db2_re.sql
@@ -82,6 +82,7 @@ CREATE TABLE `item_db2_re` (
   `equip_level_min` tinyint(3) unsigned DEFAULT NULL,
   `equip_level_max` tinyint(3) unsigned DEFAULT NULL,
   `refineable` tinyint(1) unsigned DEFAULT NULL,
+  `gradable` tinyint(1) unsigned DEFAULT NULL,
   `view` smallint(5) unsigned DEFAULT NULL,
   `alias_name` varchar(50) DEFAULT NULL,
   `flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index 6ecae4fffc..87f3010117 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -82,6 +82,7 @@ CREATE TABLE `item_db_re` (
   `equip_level_min` tinyint(3) unsigned DEFAULT NULL,
   `equip_level_max` tinyint(3) unsigned DEFAULT NULL,
   `refineable` tinyint(1) unsigned DEFAULT NULL,
+  `gradable` tinyint(1) unsigned DEFAULT NULL,
   `view` smallint(5) unsigned DEFAULT NULL,
   `alias_name` varchar(50) DEFAULT NULL,
   `flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index 8aee68d9de..8ca7787d45 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -23545,6 +23545,11 @@ void clif_parse_enchantgrade_add( int fd, struct map_session_data* sd ){
 		return;
 	}
 
+	// Item can't be enhanced
+	if( !sd->inventory_data[index]->flag.gradable ){
+		return;
+	}
+
 	uint16 level = 0;
 
 	if( sd->inventory_data[index]->type == IT_WEAPON ){
diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp
index 91c3e58c3c..dc8ca6e25a 100644
--- a/src/map/itemdb.cpp
+++ b/src/map/itemdb.cpp
@@ -570,6 +570,18 @@ uint64 ItemDatabase::parseBodyNode(const ryml::NodeRef& node) {
 			item->flag.no_refine = true;
 	}
 
+	if (this->nodeExists(node, "Gradable")) {
+		bool gradable;
+
+		if (!this->asBool(node, "Gradable", gradable))
+			return 0;
+
+		item->flag.gradable = gradable;
+	} else {
+		if (!exists)
+			item->flag.gradable = false;
+	}
+
 	if (this->nodeExists(node, "View")) {
 		uint32 look;
 
@@ -3099,6 +3111,8 @@ static bool itemdb_read_sqldb_sub(std::vector<std::string> str) {
 		rootNode["EquipLevelMax"] << str[index];
 	if (!str[++index].empty())
 		rootNode["Refineable"] << (std::stoi(str[index]) ? "true" : "false");
+	if (!str[++index].empty())
+		rootNode["Gradable"] << (std::stoi(str[index]) ? "true" : "false");
 	if (!str[++index].empty())
 		rootNode["View"] << str[index];
 	if (!str[++index].empty())
@@ -3265,7 +3279,7 @@ static int itemdb_read_sqldb(void) {
 			"`delay_duration`,`delay_status`,`stack_amount`,`stack_inventory`,`stack_cart`,`stack_storage`,`stack_guildstorage`,`nouse_override`,`nouse_sitting`,"
 			"`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_tradepartner`,`trade_nosell`,`trade_nocart`,`trade_nostorage`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`,`equip_script`,`unequip_script`"
 #ifdef RENEWAL
-			",`magic_attack`,`class_third`,`class_third_upper`,`class_third_baby`,`class_fourth`,`job_kagerouoboro`,`job_rebellion`,`job_summoner`,`job_spirit_handler`"
+			",`magic_attack`,`class_third`,`class_third_upper`,`class_third_baby`,`class_fourth`,`job_kagerouoboro`,`job_rebellion`,`job_summoner`,`job_spirit_handler`,`gradable`"
 #endif
 			" FROM `%s`", item_db_name[fi]) ) {
 			Sql_ShowDebug(mmysql_handle);
diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp
index a6808a7acc..cf782e60fe 100644
--- a/src/map/itemdb.hpp
+++ b/src/map/itemdb.hpp
@@ -1246,6 +1246,7 @@ struct item_data
 		bool broadcast; ///< Will be broadcasted if someone obtain the item [Cydh]
 		bool bindOnEquip; ///< Set item as bound when equipped
 		e_item_drop_effect dropEffect; ///< Drop Effect Mode
+		unsigned gradable : 1;
 	} flag;
 	struct {// item stacking limitation
 		uint16 amount;
@@ -1443,7 +1444,6 @@ const char *itemdb_typename_ammo (e_ammo_type ammo);
 
 #define itemdb_value_buy(n) itemdb_search(n)->value_buy
 #define itemdb_value_sell(n) itemdb_search(n)->value_sell
-#define itemdb_canrefine(n) (!itemdb_search(n)->flag.no_refine)
 //Item trade restrictions [Skotlex]
 bool itemdb_isdropable_sub(struct item_data *itd, int gmlv, int unused);
 bool itemdb_cantrade_sub(struct item_data *itd, int gmlv, int gmlv2);
diff --git a/src/tool/yaml2sql.cpp b/src/tool/yaml2sql.cpp
index 09e6d55484..410f449047 100644
--- a/src/tool/yaml2sql.cpp
+++ b/src/tool/yaml2sql.cpp
@@ -626,6 +626,8 @@ static bool item_db_yaml2sql(const std::string &file, const std::string &table)
 			column.append("`equip_level_max`,");
 		if (appendEntry(input["Refineable"], value))
 			column.append("`refineable`,");
+		if (appendEntry(input["Gradable"], value))
+			column.append("`gradable`,");
 		if (appendEntry(input["View"], value))
 			column.append("`view`,");
 		if (appendEntry(input["AliasName"], value, true))