Prechádzať zdrojové kódy

New card subtype (#6394)

* Implemented new card subtype to differentiate normal cards from enchanted ones
* Available Subtypes:
** Normal (default)
** Enchant
* Updated the item database with the new subtype
* Updated the npc folders using getiteminfo ITEMINFO_SUBTYPE

Thanks to @Lemongrass3110 and @aleos89 !
Atemo 3 rokov pred
rodič
commit
546df9bc2d

+ 1 - 1
db/import-tmpl/item_db.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
db/item_db.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
db/pre-re/item_db.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
db/pre-re/item_db_equip.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 87 - 1
db/pre-re/item_db_etc.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)
@@ -8570,6 +8570,7 @@ Body:
     AegisName: Strength1
     Name: STR+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8578,6 +8579,7 @@ Body:
     AegisName: Strength2
     Name: STR+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8586,6 +8588,7 @@ Body:
     AegisName: Strength3
     Name: STR+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8594,6 +8597,7 @@ Body:
     AegisName: Strength4
     Name: STR+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8602,6 +8606,7 @@ Body:
     AegisName: Strength5
     Name: STR+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8610,6 +8615,7 @@ Body:
     AegisName: Strength6
     Name: STR+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8618,6 +8624,7 @@ Body:
     AegisName: Strength7
     Name: STR+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8626,6 +8633,7 @@ Body:
     AegisName: Strength8
     Name: STR+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8634,6 +8642,7 @@ Body:
     AegisName: Strength9
     Name: STR+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8642,6 +8651,7 @@ Body:
     AegisName: Strength10
     Name: STR+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8650,6 +8660,7 @@ Body:
     AegisName: Inteligence1
     Name: INT+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8658,6 +8669,7 @@ Body:
     AegisName: Inteligence2
     Name: INT+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8666,6 +8678,7 @@ Body:
     AegisName: Inteligence3
     Name: INT+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8674,6 +8687,7 @@ Body:
     AegisName: Inteligence4
     Name: INT+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8682,6 +8696,7 @@ Body:
     AegisName: Inteligence5
     Name: INT+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8690,6 +8705,7 @@ Body:
     AegisName: Inteligence6
     Name: INT+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8698,6 +8714,7 @@ Body:
     AegisName: Inteligence7
     Name: INT+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8706,6 +8723,7 @@ Body:
     AegisName: Inteligence8
     Name: INT+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8714,6 +8732,7 @@ Body:
     AegisName: Inteligence9
     Name: INT+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8722,6 +8741,7 @@ Body:
     AegisName: Inteligence10
     Name: INT+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8730,6 +8750,7 @@ Body:
     AegisName: Dexterity1
     Name: DEX+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8738,6 +8759,7 @@ Body:
     AegisName: Dexterity2
     Name: DEX+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8746,6 +8768,7 @@ Body:
     AegisName: Dexterity3
     Name: DEX+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8754,6 +8777,7 @@ Body:
     AegisName: Dexterity4
     Name: DEX+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8762,6 +8786,7 @@ Body:
     AegisName: Dexterity5
     Name: DEX+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8770,6 +8795,7 @@ Body:
     AegisName: Dexterity6
     Name: DEX+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8778,6 +8804,7 @@ Body:
     AegisName: Dexterity7
     Name: DEX+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8786,6 +8813,7 @@ Body:
     AegisName: Dexterity8
     Name: DEX+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8794,6 +8822,7 @@ Body:
     AegisName: Dexterity9
     Name: DEX+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8802,6 +8831,7 @@ Body:
     AegisName: Dexterity10
     Name: DEX+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8810,6 +8840,7 @@ Body:
     AegisName: Agility1
     Name: AGI+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8818,6 +8849,7 @@ Body:
     AegisName: Agility2
     Name: AGI+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8826,6 +8858,7 @@ Body:
     AegisName: Agility3
     Name: AGI+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8834,6 +8867,7 @@ Body:
     AegisName: Agility4
     Name: AGI+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8842,6 +8876,7 @@ Body:
     AegisName: Agility5
     Name: AGI+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8850,6 +8885,7 @@ Body:
     AegisName: Agility6
     Name: AGI+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8858,6 +8894,7 @@ Body:
     AegisName: Agility7
     Name: AGI+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8866,6 +8903,7 @@ Body:
     AegisName: Agility8
     Name: AGI+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8874,6 +8912,7 @@ Body:
     AegisName: Agility9
     Name: AGI+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8882,6 +8921,7 @@ Body:
     AegisName: Agility10
     Name: AGI+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8890,6 +8930,7 @@ Body:
     AegisName: Vitality1
     Name: VIT+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8898,6 +8939,7 @@ Body:
     AegisName: Vitality2
     Name: VIT+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8906,6 +8948,7 @@ Body:
     AegisName: Vitality3
     Name: VIT+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8914,6 +8957,7 @@ Body:
     AegisName: Vitality4
     Name: VIT+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8922,6 +8966,7 @@ Body:
     AegisName: Vitality5
     Name: VIT+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8930,6 +8975,7 @@ Body:
     AegisName: Vitality6
     Name: VIT+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8938,6 +8984,7 @@ Body:
     AegisName: Vitality7
     Name: VIT+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8946,6 +8993,7 @@ Body:
     AegisName: Vitality8
     Name: VIT+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8954,6 +9002,7 @@ Body:
     AegisName: Vitality9
     Name: VIT+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8962,6 +9011,7 @@ Body:
     AegisName: Vitality10
     Name: VIT+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8970,6 +9020,7 @@ Body:
     AegisName: Luck1
     Name: LUK+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8978,6 +9029,7 @@ Body:
     AegisName: Luck2
     Name: LUK+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8986,6 +9038,7 @@ Body:
     AegisName: Luck3
     Name: LUK+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -8994,6 +9047,7 @@ Body:
     AegisName: Luck4
     Name: LUK+4
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9002,6 +9056,7 @@ Body:
     AegisName: Luck5
     Name: LUK+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9010,6 +9065,7 @@ Body:
     AegisName: Luck6
     Name: LUK+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9018,6 +9074,7 @@ Body:
     AegisName: Luck7
     Name: LUK+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9026,6 +9083,7 @@ Body:
     AegisName: Luck8
     Name: LUK+8
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9034,6 +9092,7 @@ Body:
     AegisName: Luck9
     Name: LUK+9
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9042,6 +9101,7 @@ Body:
     AegisName: Luck10
     Name: LUK+10
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9050,6 +9110,7 @@ Body:
     AegisName: Matk1
     Name: MATK+1%
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9058,6 +9119,7 @@ Body:
     AegisName: Matk2
     Name: MATK+2%
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9066,6 +9128,7 @@ Body:
     AegisName: Evasion6
     Name: FLEE+6
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9074,6 +9137,7 @@ Body:
     AegisName: Evasion12
     Name: FLEE+12
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9082,6 +9146,7 @@ Body:
     AegisName: Critical5
     Name: CRI+5
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9090,6 +9155,7 @@ Body:
     AegisName: Critical7
     Name: CRI+7
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9098,6 +9164,7 @@ Body:
     AegisName: Atk2
     Name: ATK+2%
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9106,6 +9173,7 @@ Body:
     AegisName: Atk3
     Name: ATK+3%
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
     Script: |
@@ -9114,108 +9182,126 @@ Body:
     AegisName: Str1_J
     Name: STR+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4769
     AegisName: Str2_J
     Name: STR+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4770
     AegisName: Str3_J
     Name: STR+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4771
     AegisName: Int1_J
     Name: INT+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4772
     AegisName: Int2_J
     Name: INT+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4773
     AegisName: Int3_J
     Name: INT+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4774
     AegisName: Vit1_J
     Name: VIT+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4775
     AegisName: Vit2_J
     Name: VIT+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4776
     AegisName: Vit3_J
     Name: VIT+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4777
     AegisName: Agi1_J
     Name: AGI+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4778
     AegisName: Agi2_J
     Name: AGI+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4779
     AegisName: Agi3_J
     Name: AGI+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4780
     AegisName: Dex1_J
     Name: DEX+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4781
     AegisName: Dex2_J
     Name: DEX+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4782
     AegisName: Dex3_J
     Name: DEX+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4783
     AegisName: Luk1_J
     Name: LUK+1
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4784
     AegisName: Luk2_J
     Name: LUK+2
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 4785
     AegisName: Luk3_J
     Name: LUK+3
     Type: Card
+    SubType: Enchant
     Buy: 20
     Weight: 10
   - Id: 6000

+ 1 - 1
db/pre-re/item_db_usable.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
db/re/item_db.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
db/re/item_db_equip.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 128 - 1
db/re/item_db_etc.yml


+ 1 - 1
db/re/item_db_usable.yml

@@ -26,7 +26,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 4 - 0
doc/item_db.txt

@@ -78,6 +78,10 @@ Kunai
 CannonBall
 ThrowWeapon
 
+For cards, the types are:
+Normal (default)
+Enchant
+
 ---------------------------------------
 
 Buy: Default buying price. When not specified, becomes double the sell price.

+ 1 - 0
doc/script_commands.txt

@@ -3055,6 +3055,7 @@ Valid types are:
 	ITEMINFO_ID             (17)   -  item ID
 	ITEMINFO_AEGISNAME      (18)   -  aegis item name
 	ITEMINFO_ARMORLEVEL     (19)   -  armor LV
+	ITEMINFO_SUBTYPE        (20)   -  Subtype
 
 See the sample in 'doc/sample/getiteminfo.txt'.
 

+ 1 - 1
doc/yaml/db/item_db.yml

@@ -9,7 +9,7 @@
 #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
 #   Name                    Name in English for displaying as output.
 #   Type                    Item type. (Default: Etc)
-#   SubType                 Weapon or Ammo type. (Default: 0)
+#   SubType                 Weapon, Ammo or Card type. (Default: 0)
 #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
 #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
 #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)

+ 1 - 1
npc/custom/card_seller.txt

@@ -61,7 +61,7 @@ OnInit:
 			.alphabet_menu$ = .alphabet_menu$ + .@alphabet$[.@i] +" Cards:";
 			npcshopdelitem "card_mob#"+ .@alphabet$[.@i], 501;
 			for ( .@j = 0; .@j < .@nb; .@j++ ) {
-				if (callfunc( "F_IsCharm", .@id[.@j] ) == true)// Skip enchants in case someone added them as card drop
+				if (getiteminfo(.@id[.@j], ITEMINFO_SUBTYPE) == CARD_ENCHANT)// Skip enchants in case someone added them as card drop
 					continue;
 				npcshopadditem "card_mob#"+ .@alphabet$[.@i], .@id[.@j], 1000000;
 			}

+ 2 - 2
npc/events/RWC_2012.txt

@@ -315,7 +315,7 @@ prontera,147,59,3	script	Goldberg#pron	878,{
 			mes "I'm sorry. But you don't have the RWC Initialization coupon. Can you check your inventory?";
 			close;
 		}
-		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
+		if (getiteminfo(.@equip_card[3], ITEMINFO_SUBTYPE) == CARD_NORMAL) {
 			mes "[Goldberg]";
 			mes "Hm... this equipment is clean. I cannot initialize it if there's nothing! Check it again.";
 			close;
@@ -328,7 +328,7 @@ prontera,147,59,3	script	Goldberg#pron	878,{
 	
 //		GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
 		for ( .@i = getiteminfo(.@equip_id, ITEMINFO_SLOT); .@i < MAX_SLOTS; .@i++ ) {
-			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+			if (getiteminfo(.@equip_card[.@i], ITEMINFO_SUBTYPE) == CARD_ENCHANT)
 				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];

+ 3 - 3
npc/re/merchants/card_separation.txt

@@ -120,7 +120,7 @@
 
 	if (.@Jeremy) {
 		for ( .@i = 0; .@i < MAX_SLOTS; .@i++ ) {
-			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+			if (getiteminfo(.@equip_card[.@i], ITEMINFO_SUBTYPE) == CARD_ENCHANT)
 				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		if (!getarraysize(.@equip_card)) {
@@ -146,7 +146,7 @@
 		next;
 		set .@menu$,"";
 		for ( .@i = 0; .@i < MAX_SLOTS; .@i++ ) {
-			if (.@equip_card[.@i] && callfunc("F_IsCharm",.@equip_card[.@i]) == false) // Armor Enchant System
+			if (.@equip_card[.@i] && getiteminfo(.@equip_card[.@i], ITEMINFO_SUBTYPE) == CARD_NORMAL) // Armor Enchant System
 				.@menu$ = .@menu$ + "Socket " + (.@i+1) + " - " + getitemname(.@equip_card[.@i])+":";
 			else {
 				.@menu$ = .@menu$ + "^777777Socket " + (.@i+1) + " - No card^000000:";
@@ -160,7 +160,7 @@
 			close;
 		default:
 			set .@slot, .@i-2;
-			if (.@equip_card[.@slot] == 0 || callfunc("F_IsCharm",.@equip_card[.@slot]) == true) {
+			if (.@equip_card[.@slot] == 0 || getiteminfo(.@equip_card[.@slot], ITEMINFO_SUBTYPE) == CARD_ENCHANT) {
 				mes .@n$;
 				mes "This socket is not equipped with any card. Why don't you check again?";
 				close;

+ 4 - 4
npc/re/merchants/enchan_ko.txt

@@ -263,14 +263,14 @@ que_ng,75,20,3	script	Artisan Tene#ko	762,{
 	// Initialization
 	if (.@select == 2) {
 		if (.@sot03_ck) {// reset only 3rd slot
-			if (callfunc("F_IsCharm",.@equip_card[2]) == false) { // Armor Enchant System
+			if (getiteminfo(.@equip_card[2], ITEMINFO_SUBTYPE) == CARD_NORMAL) { // Armor Enchant System
 				mes "[Artisan Tene]";
 				mes "The third slot is is not enchanted. Please check again."; //custom translation
 				close;
 			}
 			set .@equip_card[2],0;
 		} else {
-			if (callfunc("F_IsCharm",.@equip_card[3]) == false) { // Armor Enchant System
+			if (getiteminfo(.@equip_card[3], ITEMINFO_SUBTYPE) == CARD_NORMAL) { // Armor Enchant System
 				mes "[Artisan Tene]";
 				mes "This equipment is is not enchanted. Please check again."; //custom translation
 				close;
@@ -302,8 +302,8 @@ que_ng,75,20,3	script	Artisan Tene#ko	762,{
 	else                           set .@ko_type01,5;
 
 	//custom translations
-	if (callfunc("F_IsCharm",.@equip_card[3]) == true) { // Armor Enchant System
-		if (callfunc("F_IsCharm",.@equip_card[2]) == true) {
+	if (getiteminfo(.@equip_card[3], ITEMINFO_SUBTYPE) == CARD_ENCHANT) { // Armor Enchant System
+		if (getiteminfo(.@equip_card[2], ITEMINFO_SUBTYPE) == CARD_ENCHANT) {
 			mes "[Artisan Tene]";
 			mes "This equipment cannot be further enchanted.";
 			next;

+ 1 - 1
npc/re/merchants/enchan_mal.txt

@@ -676,7 +676,7 @@ L_Socket:
 
 		// GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
 		for ( .@i = getiteminfo(.@equip_id, ITEMINFO_SLOT); .@i < MAX_SLOTS; .@i++ ) {
-			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+			if (getiteminfo(.@equip_card[.@i], ITEMINFO_SUBTYPE) == CARD_ENCHANT)
 				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];

+ 1 - 1
npc/re/merchants/enchan_mora.txt

@@ -1156,7 +1156,7 @@ L_Socket:
 
 //		GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
 		for ( .@i = getiteminfo(.@equip_id, ITEMINFO_SLOT); .@i < MAX_SLOTS; .@i++ ) {
-			if (callfunc("F_IsCharm",.@equip_card[.@i]) == true)
+			if (getiteminfo(.@equip_card[.@i], ITEMINFO_SUBTYPE) == CARD_ENCHANT)
 				.@equip_card[.@i] = 0;// Armor Enchant System
 		}
 		getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];

+ 1 - 1
npc/re/merchants/enchan_rockridge.txt

@@ -67,7 +67,7 @@ har_in01,17,74,7	script	Contraband Processor#pa	4_DR_SOLDIER,{
 	.@refine = getequiprefinerycnt(.@part);
 	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
 	copyarray .@tmp_card[0], .@card[0], 4;
-	if ((.@card[1] && callfunc("F_IsCharm",.@card[1]) == false) || (.@card[2] && callfunc("F_IsCharm",.@card[2]) == false) || (.@card[3] && callfunc("F_IsCharm",.@card[3]) == false)) {// armor enchant system custom check
+	if ((.@card[1] && getiteminfo(.@card[1], ITEMINFO_SUBTYPE) == CARD_NORMAL) || (.@card[2] && getiteminfo(.@card[2], ITEMINFO_SUBTYPE) == CARD_NORMAL) || (.@card[3] && getiteminfo(.@card[3], ITEMINFO_SUBTYPE) == CARD_NORMAL)) {// armor enchant system custom check
 		mes "[Contraband Processor]";
 		mes "Something wrong happened.";
 		close;

+ 1 - 1
npc/re/merchants/enchan_upg.txt

@@ -250,7 +250,7 @@ prt_in,28,73,3	script	Devil Enchant Master#prq	63,{
 			mes "You need to bring some money to initialize!!";
 			close;
 		}
-		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
+		if (getiteminfo(.@equip_card[3], ITEMINFO_SUBTYPE) == CARD_NORMAL) {
 			mes "This item is not enchanted!";
 			close;
 		}

+ 4 - 4
npc/re/merchants/enchan_verus.txt

@@ -762,10 +762,10 @@ verus04,71,106,5	script	Mass Charleston#2	4_F_CHARLESTON01,{
 		}
 	case 2:	// Reset
 		// Note: the NPC doesn't check if the equipment is already enhanced
-		if (F_IsCharm(.@card[0]) == true) .@card[0] = 0;
-		if (F_IsCharm(.@card[1]) == true) .@card[1] = 0;
-		if (F_IsCharm(.@card[2]) == true) .@card[2] = 0;
-		if (F_IsCharm(.@card[3]) == true) .@card[3] = 0;
+		if (getiteminfo(.@card[0], ITEMINFO_SUBTYPE) == CARD_ENCHANT) .@card[0] = 0;
+		if (getiteminfo(.@card[1], ITEMINFO_SUBTYPE) == CARD_ENCHANT) .@card[1] = 0;
+		if (getiteminfo(.@card[2], ITEMINFO_SUBTYPE) == CARD_ENCHANT) .@card[2] = 0;
+		if (getiteminfo(.@card[3], ITEMINFO_SUBTYPE) == CARD_ENCHANT) .@card[3] = 0;
 		specialeffect2 EF_REPAIRWEAPON;
 		mes "[Mass Charleston]";
 		mes "Reset the product's abilities.";

+ 1 - 1
npc/re/quests/quests_malangdo.txt

@@ -10678,7 +10678,7 @@ mal_in01,15,16,3	script	Fallen Angel#mal	403,{
 			mes "I can't do it if you can't pay!";
 			close;
 		}
-		if (callfunc("F_IsCharm",.@equip_card[3]) == false) {
+		if (getiteminfo(.@equip_card[3], ITEMINFO_SUBTYPE) == CARD_NORMAL) {
 			mes "[Fallen Angel]";
 			mes "This equipment has not been enchanted, please check it again!";
 			close;

+ 10 - 0
src/map/itemdb.cpp

@@ -172,6 +172,16 @@ uint64 ItemDatabase::parseBodyNode(const YAML::Node &node) {
 			}
 
 			item->subtype = static_cast<e_ammo_type>(constant);
+		} else if (item->type == IT_CARD) {
+			std::string type_constant = "CARD_" + type;
+			int64 constant;
+
+			if (!script_get_constant(type_constant.c_str(), &constant) || constant < CARD_NORMAL || constant >= MAX_CARD_TYPE) {
+				this->invalidWarning(node["SubType"], "Invalid card type %s, defaulting to CARD_NORMAL.\n", type.c_str());
+				item->subtype = CARD_NORMAL;
+			}
+
+			item->subtype = static_cast<e_card_type>(constant);
 		} else
 			this->invalidWarning(node["SubType"], "Item sub type is not supported for this item type.\n");
 	} else {

+ 6 - 0
src/map/pc.hpp

@@ -913,6 +913,12 @@ enum e_ammo_type : uint8 {
 	MAX_AMMO_TYPE
 };
 
+enum e_card_type : uint8 {
+	CARD_NORMAL = 0,
+	CARD_ENCHANT,
+	MAX_CARD_TYPE
+};
+
 enum idletime_option {
 	IDLE_WALK          = 0x0001,
 	IDLE_USESKILLTOID  = 0x0002,

+ 2 - 0
src/map/script.cpp

@@ -14161,6 +14161,7 @@ BUILDIN_FUNC(getiteminfo)
 		}
 		case ITEMINFO_ID: script_pushint(st, i_data->nameid); break;
 		case ITEMINFO_AEGISNAME: script_pushstrcopy(st, i_data->name.c_str()); break;
+		case ITEMINFO_SUBTYPE: script_pushint(st, i_data->subtype); break;
 		default:
 			script_pushint(st, -1);
 			break;
@@ -14247,6 +14248,7 @@ BUILDIN_FUNC(setiteminfo)
 #endif
 			break;
 		}
+		case ITEMINFO_SUBTYPE: i_data->subtype = static_cast<uint8>(value); break;
 		default:
 			script_pushint(st, -1);
 			break;

+ 1 - 0
src/map/script.hpp

@@ -2059,6 +2059,7 @@ enum e_iteminfo : uint8 {
 	ITEMINFO_ID,
 	ITEMINFO_AEGISNAME,	// 18
 	ITEMINFO_ARMORLEVEL,
+	ITEMINFO_SUBTYPE,
 };
 
 class ConstantDatabase : public YamlDatabase {

+ 5 - 0
src/map/script_constants.hpp

@@ -4180,6 +4180,10 @@
 	export_constant(AMMO_THROWWEAPON);
 	export_constant(MAX_AMMO_TYPE);
 
+	/* card subtypes */
+	export_constant(CARD_NORMAL);
+	export_constant(CARD_ENCHANT);
+
 	/* monsterinfo types */
 	export_constant(MOB_NAME);
 	export_constant(MOB_LV);
@@ -8218,6 +8222,7 @@
 	export_constant(ITEMINFO_MAGICATTACK);
 	export_constant(ITEMINFO_ID);
 	export_constant(ITEMINFO_AEGISNAME);
+	export_constant(ITEMINFO_SUBTYPE);
 
 	/* refine types */
 	export_constant(REFINE_TYPE_ARMOR);

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov