How to Add a Custom Weapon to Your Metin2 Private Server

Adding a custom weapon involves two separate sides: the client (unpacking packs, placing model/texture/icon files, regenerating item_proto client) and the server (editing item_names.txt and item_proto.txt). Both must be done correctly for the weapon to appear and work in-game.

To edit item_proto without touching raw text, use the free Metin2 Item Proto Editor — spreadsheet view with TXT and SQL export.


What You Need

  • WinSCP access to your server
  • A client unpacker: EterManager, Eternexus, or EterPack Archiver
  • A .tga file for the item icon (or reuse an existing one)
  • A .gr2 file for the 3D weapon model + Granny Viewer to inspect it
  • One or more .dds / .tga texture files for the model

Part I — Client Side

Step 1 — Unpack the Required Packs

Using your unpacker, extract these client packs:

  • locale_xx (xx = your server's country code)
  • icon
  • item (for weapons)

Step 2 — Place the Item Icon

Copy your icon file in .tga format into:

icon/item/

If no icon is provided, the client falls back to icon/item/27995.tga by default.

Step 3 — Place the .gr2 Model File

Place your .gr2 weapon model in the correct subfolder under item/weapon/. The path depends on the weapon subtype:

SubtypePath
Sword (1H)d:/ymir work/item/weapon/sword/
Two-Handedd:/ymir work/item/weapon/twohand/
Daggerd:/ymir work/item/weapon/dagger/
Bowd:/ymir work/item/weapon/bow/
Belld:/ymir work/item/weapon/bell/
Fand:/ymir work/item/weapon/fan/
Arrowd:/ymir work/item/weapon/arrow/

Step 4 — Find and Place the Texture

Open your .gr2 file in Granny Viewer and go to the TextureList tab. It will show you the exact path and filename the model expects for its texture. Place your .dds or .tga texture file at exactly that path — same folder, same filename.

Step 5 — Link VNUM to Model and Icon in item_list.txt

Open item_list.txt in the locale_xx pack and add a new line:

WEAPON[TAB]icon/item/00010.tga[TAB]d:/ymir work/item/weapon/00010.gr2

Column breakdown:

  • WEAPON — a label for your own reference (any text)
  • icon/item/00010.tga — path to your icon file
  • d:/ymir work/item/weapon/00010.gr2 — path to your .gr2 model (can be empty for items without a 3D model; defaults to ymir work/item/etc/item_bag.gr2)

Replace the tab character ([TAB]) with an actual tab (the key above Caps Lock).

Step 6 — Regenerate the Client item_proto

Use the Dump Proto tool to generate a new client-side item_proto from your server's item_names.txt and item_proto.txt. Place the output in the locale_xx pack, replacing the old file.

Note: Complete Part II (server side) before doing this step — Dump Proto reads the server files.

Step 7 — Repack

Repack all modified packs (locale_xx, icon, item) and distribute the updated client.


Part II — Server Side

Step 1 — Choose a VNUM

Connect via WinSCP and open /usr/metin2/db/item_names.txt to find an unused VNUM. Important rules:

  • VNUM must be unique across all items
  • Weapons and armor VNUMs must be less than 65536
  • The same VNUM must be used in item_names.txt, item_proto.txt, and item_list.txt

Step 2 — Add the Display Name (item_names.txt)

In item_names.txt, add:

50001[TAB]Dragon Sword

Format: VNUM TAB DisplayName. This is what players see in-game.

Step 3 — Configure item_proto.txt

Open item_proto.txt (in /usr/metin2/db/) and add a new row. Use the Item Proto Editor to edit visually. Key columns:

ColumnValueNotes
ITEM (vnum)50001Your chosen VNUM
ITEM_NAME(KR) (name)DragonSwordInternal name used by drop files etc.
ITEM_TYPE (type)ITEM_WEAPONMust be ITEM_WEAPON for weapons
SUB_TYPE (subtype)WEAPON_SWORDSee subtype table below
SIZE (size)1Inventory squares (1=dagger, 2=bow, 3=two-hand)
ANTI_FLAG (antiflag)0Restrictions — see flags below
FLAG (flag)0Special behaviors
ITEM_WEAR (wearflag)WEAR_WEAPONMust be WEAR_WEAPON
GOLD (gold)50000NPC buy price (player pays this)
SHOP_BUY_PRICE (buy_price)5000NPC sell price (player receives ~32% of this)
LIMIT_TYPE0LEVELEquip requirement type
LIMIT_VALUE050Minimum level to equip
ADDON_TYPE0 (applytype0)ATT_GRADE_BONUSFirst base stat bonus
ADDON_VALUE0 (applyvalue0)120Value of first bonus
value3100Minimum physical attack
value4150Maximum physical attack
SPECULAR (specular)50Model brightness (0–100; use >0 if model has alpha channel)

Weapon Subtypes (SUB_TYPE column)

SUB_TYPE valueWeapon type
WEAPON_SWORDOne-handed sword
WEAPON_DAGGERDaggers (dual wield)
WEAPON_BOWBow
WEAPON_TWO_HANDEDTwo-handed sword
WEAPON_BELLBell (Shaman)
WEAPON_FANFan (Shaman)
WEAPON_ARROWArrow (ammo for bow)
WEAPON_CLAWClaws (Lycan/Wolfman)

Weapon Value Fields

FieldMeaning
value1Minimum magic attack (= value + value5)
value2Maximum magic attack (= value + value5)
value3Minimum physical attack (= value + value5)
value4Maximum physical attack (= value + value5)
value5Flat bonus added to all attack values above

Antiflag Reference (ANTI_FLAG column)

Antiflags restrict who can use the item. Combine multiple with |:

AntiflagEffect
ANTI_FEMALEUnusable by female characters
ANTI_MALEUnusable by male characters
ANTI_MUSAUnusable by Warrior
ANTI_ASSASSINUnusable by Ninja
ANTI_SURAUnusable by Sura
ANTI_MUDANGUnusable by Shaman
ANTI_WOLFMANUnusable by Lycan
ANTI_DROPCannot be thrown on the ground
ANTI_SELLCannot be sold to merchants
ANTI_GIVECannot trade, personal store, or drop to another player
ANTI_MYSHOPCannot be listed in a personal store
ANTI_SAFEBOXCannot be moved to the warehouse

Step 4 — Test In-Game

  1. Restart the game server (or reload item_proto)
  2. Spawn the item with /i 50001
  3. Equip it — verify stats, model renders, no client crash
  4. Check server logs for "Unknown item" or missing model errors

Common Errors

  • Item name shows as "Unknown" — item_names.txt entry missing or VNUM mismatch
  • Client crashes on equip — .gr2 path wrong in item_list.txt or file not in pack
  • Invisible weapon in hand — texture path from Granny Viewer not matched exactly
  • Cannot equip — wearflag not set to WEAR_WEAPON, or level limit not met
  • VNUM > 65535 — weapons/armor must be under 65536
  • Specular = 0 on model with alpha — makes parts invisible; set specular > 0