1) Server
Format: XML
Location:
gameserver/data/purchase_limit_craft.xml - content
gameserver/data/purchase_limit_craft.dtd - syntactic rules
IMPORTANT: On the server side, you can effectively change ingredients on the fly. However, for everything else, you must first edit the client-side and then adjust the server-side to match your list from the client.
For example, let's consider several scenarios:
1) Example with one item
2) Example with multiple items
3) Example with multiple items and limiting to 4 items
Where:
- `shop_index` - ID of the store type, taken from the client or added to the game client in the file PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat. 3 - Normal Lcoin Shop, 4 - Lcoin Special Craft, 100 - Clan Shop. We are interested in 4.
- `product_id` - ID of the product, which should match both in the client (PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat) and in the server (purchase_limit_craft.xml).
- `product_name` - Name of the item, can be any.
- `product_item` - ID of the main item that we will craft.
- `product_item_amount` - Number of items given on a successful craft.
- `product_item_chance` - Chance of obtaining the item during crafting.
- `buy_item_1`, `buy_item_2`, `buy_item_3`, `buy_item_4` - Items of secondary importance, usually given if the chance of `product_id` was not successful.
- `buy_item_amount_1`, `buy_item_amount_2`, `buy_item_amount_3`, `buy_item_amount_4` - Number of secondary items given.
- `buy_item_chance_1`, `buy_item_chance_2`, `buy_item_chance_3`, `buy_item_chance_4` - Chance of obtaining the secondary item.
- `limit_daily` - Daily limit for crafting.
`ingredient id` - What we will take in exchange for crafting.
- `count` - Number of items taken for crafting.
Warning: The number of ingredients should not exceed 5 units, as the client will not display more than that.
2) Client
Location: Client/system/PurchaseLimitCraft_Classic-ru.dat | Client/system/PurchaseLimitCraft_Classic-en.dat
Format: *.dat
Editor: https://lucera2.com/threads/patch-editor-306-311-protocol.2403/
IMPORTANT: On the server side, you can effectively change ingredients on the fly. However, for everything else, you must first edit the client-side and then adjust the server-side to match your list from the client.
The format generally matches the server XML, with the only difference being that `product_item=99286` is the primary item, and the duplication of buy_item={{99286` is removed. So, in `buy_item_1`, we place the second item from the list: {90907;10;90.0;0}.
Now the description `buy_item={{99286;1;10.0;3};{90907;10;90.0;0}}`:
- 90907 - `buy_item_1`
- 1 - `buy_item_amount_1`
- 10.0 - `buy_item_chance_1`
- 0 - daily limit
`limit_lv={1;999}` - not used anywhere in general
`buy_type={0;0;0;0}` - no idea either, not used with specific parameters
This is how the system looks visually.
Format: XML
Location:
gameserver/data/purchase_limit_craft.xml - content
gameserver/data/purchase_limit_craft.dtd - syntactic rules
IMPORTANT: On the server side, you can effectively change ingredients on the fly. However, for everything else, you must first edit the client-side and then adjust the server-side to match your list from the client.
For example, let's consider several scenarios:
1) Example with one item
XML:
<item shop_index="4" product_id="10048" product_name="Antharas' Earring Lv. 3" product_item="91139" product_item_amount="1" product_item_chance="100.0">
<ingredient id="57" count="10000"/>
</item>
2) Example with multiple items
XML:
<item shop_index="4" product_id="10008" product_name="Feudal Duty" product_item="99287" product_item_amount="1" product_item_chance="10.0" buy_item_1="90907" buy_item_amount_1="10" buy_item_chance_1="90.0">
<ingredient id="57" count="10000"/>
</item>
3) Example with multiple items and limiting to 4 items
XML:
<item shop_index="4" product_id="10008" product_name="Feudal Duty" product_item="99287" product_item_amount="1" product_item_chance="10.0" buy_item_1="90907" buy_item_amount_1="10" buy_item_chance_1="90.0" limit_daily="4">
<ingredient id="57" count="10000"/>
</item>
Where:
- `shop_index` - ID of the store type, taken from the client or added to the game client in the file PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat. 3 - Normal Lcoin Shop, 4 - Lcoin Special Craft, 100 - Clan Shop. We are interested in 4.
- `product_id` - ID of the product, which should match both in the client (PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat) and in the server (purchase_limit_craft.xml).
- `product_name` - Name of the item, can be any.
- `product_item` - ID of the main item that we will craft.
- `product_item_amount` - Number of items given on a successful craft.
- `product_item_chance` - Chance of obtaining the item during crafting.
- `buy_item_1`, `buy_item_2`, `buy_item_3`, `buy_item_4` - Items of secondary importance, usually given if the chance of `product_id` was not successful.
- `buy_item_amount_1`, `buy_item_amount_2`, `buy_item_amount_3`, `buy_item_amount_4` - Number of secondary items given.
- `buy_item_chance_1`, `buy_item_chance_2`, `buy_item_chance_3`, `buy_item_chance_4` - Chance of obtaining the secondary item.
- `limit_daily` - Daily limit for crafting.
`ingredient id` - What we will take in exchange for crafting.
- `count` - Number of items taken for crafting.
Warning: The number of ingredients should not exceed 5 units, as the client will not display more than that.
2) Client
Location: Client/system/PurchaseLimitCraft_Classic-ru.dat | Client/system/PurchaseLimitCraft_Classic-en.dat
Format: *.dat
Editor: https://lucera2.com/threads/patch-editor-306-311-protocol.2403/
IMPORTANT: On the server side, you can effectively change ingredients on the fly. However, for everything else, you must first edit the client-side and then adjust the server-side to match your list from the client.
The format generally matches the server XML, with the only difference being that `product_item=99286` is the primary item, and the duplication of buy_item={{99286` is removed. So, in `buy_item_1`, we place the second item from the list: {90907;10;90.0;0}.
Now the description `buy_item={{99286;1;10.0;3};{90907;10;90.0;0}}`:
- 90907 - `buy_item_1`
- 1 - `buy_item_amount_1`
- 10.0 - `buy_item_chance_1`
- 0 - daily limit
`limit_lv={1;999}` - not used anywhere in general
`buy_type={0;0;0;0}` - no idea either, not used with specific parameters
Code:
product_begin shop_index=4 product_id=10007 category=0 category_sub=1804152 unk={0;5} product_name=[Feudal Islet] product_item=99286 buy_item={{99286;1;10.0;3};{90907;10;90.0;0}} limit_lv={1;999} buy_type={0;0;0;0} product_end
product_begin shop_index=4 product_id=10008 category=0 category_sub=1804152 unk={0;5} product_name=[Feudal Duty] product_item=99287 buy_item={{99287;1;10.0;3};{90907;10;90.0;0}} limit_lv={1;999} buy_type={0;0;0;0} product_end
product_begin shop_index=4 product_id=10009 category=0 category_sub=1804152 unk={0;5} product_name=[Silenos Priest's Staff] product_item=99288 buy_item={{99288;1;10.0;3};{90907;10;90.0;0}} limit_lv={1;999} buy_type={0;0;0;0} product_end
...
This is how the system looks visually.