Crafting produces an item with a tool (“Armour, weapon or ammo production device”) by a recipe. A recipe is a row of the server Script\ItemMakeData.dat and a record of client section 44 of Item.edf with the same number; ItemMakeOffset (section 46) stores recipe offsets by result group.
How it works
The recipe record: result code m_strCode, required crafting mastery m_nMakeMastery, race mask m_strCivil, 5 materials with quantities and 30 alternative results with weights out of 10 000. In the data every recipe's weights sum to exactly 10 000, and the result itself is among the alternatives.
Request 7/0x0F: the server checks the tool in the weapon slot, mastery, race and materials, consumes the materials and rolls the success chance by the formula from mastery and the result's level; mastery grows with use.
Alternative results are visible only to high-grade specialists.
What matters when editing
An empty material is 0 with quantity 0; the codes of the result, materials and alternatives must exist, the result is equipment.
Mastery and the race mask in the client record match the server; when the number of recipes in a group changes, ItemMakeOffset is recomputed.
All server table fields are described by the digest tables (automatically, “digest row”); no manual edits were needed.
Files of the category
1 in the registry
File
Side
Format
Level
Corpora
Record
Digest
Note
script\ItemMakeData.dat
server
dat
ready for full
AoP ✓, GU ✓, Sirin ✓
AoP 556, GU 556, Sirin 556
crafting.md
crafting.md §1
“ready for full” — the format is understood and the fields are described; “derived” — the file is assembled from another; “opaque” — the format is not fully known; “postponed” and “out of scope” — the studio does not edit the file.
Used parameters
Fields read by the server or the client, or assembled from other files. The description says what the field means and how it acts; below it — where that was established.
script\ItemMakeData.datserver file
Total 8Known 8Derived 0Unused 0
Schema
Scripts\strs AOP\ItemMakeData.strs
Registry level
ready for full
Digest
crafting.md §1
Offset
Field
What it is and how it acts
Goes to client as
Server readers
Role
Status
Data
+0x000
m_dwIndex
recipe number = number in the request
crafting.md §1 (digest row)
—
—
—
known
1220 values; most often 0 (0%)
+0x004
m_strCode
code of the result item
crafting.md §1 (digest row)
—
140078D80
server
known
1220 values; most often iwkna01 (0%)
+0x044
m_nMakeMastery
required crafting mastery level
crafting.md §1 (digest row)
—
140078D80
server
known
33 values; most often 99 (13%)
+0x048
m_strCivil
race: '1' at the race position
crafting.md §1 (digest row)
—
140078D80
server
known
5 values; most often 00001 (30%)
+0x088
m_itmPdMat ×5
materials and quantity; empty slot — 0
crafting.md §1 (digest row)
—
140078D80
server
known
168 values; most often iyyyy09 / iyyyy01 / 0 / 0 … (7%)
+0x090
m_nPdMatNum ×5
materials and quantity; empty slot — 0
crafting.md §1 (digest row)
—
—
—
known
450 values; most often 7 / 9 / 39 / 13 … (1%)
+0x0C4
m_itmPdOutput ×30
alternative results with weights out of 10 000 (section 3)
crafting.md §1 (digest row)
—
—
—
known
1220 values; most often iwkna01 / iwkha01 / iwkhb01 / iwkhc01 … (0%)
+0x0CC
m_dwPdProp ×30
alternative results with weights out of 10 000 (section 3)
crafting.md §1 (digest row)
—
—
—
known
63 values; most often 9825 / 175 / 0 / 0 … (7%)
Unused parameters
This category has no unused parameters: every field is read by the server, the client or the build.