Как работать с Special Craft магазином (Return of Queen Ant aka Legacy только)

Deazer

Head Developer
Staff member
1) Сервер
Формат: XML
Местонахождение:
gameserver/data/purchase_limit_craft.xml - содержимое
gameserver/data/purchase_limit_craft.dtd - синтаксические правила

ВАЖНО: Серверной стороной фактически вы можете менять налету только ингредиенты. В остальном вы должны сначала редактировать клиентскую часть, а потом серверную подгонять под свой лист из клиента.

Для примера рассмотрим несколько вариантов:

1) Пример с одним предметом
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) Пример с множеством предметов
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) Пример с множеством предметов и лимитированием допустим 4мя предметами
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>
Где:
shop_index - ID типа магазина, берется из клиента или вы вносите в игровой клиент в файл PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat 3 - Normal Lcoin Shop, 4 - Lcoin Special Craft, 100 - Clan Shop. Нас интересует именно 4
product_id - id продукта который должен совпадать как в клиенте PurchaseLimitCraft_Classic-eu.dat/PurchaseLimitCraft_Classic-ru.dat, так и в сервере purchase_limit_craft.xml
product_name - название предмета, может быть произвольным.
product_item - ID предмета, главный предмет который мы будем крафтить
product_item_amount - количество предметов выдаваемых при успешном крафте
product_item_chance - шанс получения предмета при крафте
buy_item_1, buy_item_2, buy_item_3, buy_item_4 - Предметы второстепенной важности, обычно даются, если шанс `product_id` не удался.
buy_item_amount_1, buy_item_amount_2, buy_item_amount_3, buy_item_amount_4 - Количество второстепенных предметов.
buy_item_chance_1, buy_item_chance_2, buy_item_chance_3, buy_item_chance_4 - Шанс получить второстепенный предмет.
limit_daily - дневной лимит возможности крафта

ingredient id - что мы будем забирать взамен крафта
count - количество изымаемых предметов для крафта
Предупреждение: Количество ingredient не должно превышать 5ти единиц ибо клиент просто не отобразит

2) Клиент
Местонахождение: Clinetn/system/PurchaseLimitCraft_Classic-ru.dat | Clinetn/system/PurchaseLimitCraft_Classic-en.dat
Формат: *.dat
Редактор: https://lucera2.com/threads/patch-editor-306-311-protocol.2403/

ВАЖНО: Серверной стороной фактически вы можете менять налету только ингредиенты. В остальном вы должны сначала редактировать клиентскую часть, а потом серверную подгонять под свой лист из клиента.

Где:
Форма в целом полностью совпадает с XML сервера, только лишь с одной разницей product_item=99286 является заглавным и убрано дублирование buy_item={{99286.
product_item = первый buy_item={{99286;1;10.0;3}, так что в buy_item_1 мы помещаем второй предмет из списка ;{90907;10;90.0;0}}

Теперь описание 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 - лимит в день
Лимиты уровня limit_lv={1;999} - не используется в целом нигде
buy_type={0;0;0;0} - без понятия так же, не используется специфические параметры

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
product_begin    shop_index=4    product_id=10010    category=0    category_sub=1804152    unk={0;5}    product_name=[Silenos Claw]    product_item=99289    buy_item={{99289;1;10.0;3};{90907;10;90.0;0}}    limit_lv={1;999}    buy_type={0;0;0;0}    product_end
.........................

Вот так визуально выглядит данная система:

21b62a6bdbde13d8e55e9bdcac668d01.png
 
Last edited:
3) Пример с множеством предметов и лимитированием допустим 4мя предметами
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="1">
<ingredient id="57" count="10000"/>
</item>
А где тут лимитирование 4мя предметами, не вижу?
Вижу только ограничение на дейли 1 раз в день
 
buy_type={0;0;0;0} - без понятия так же, не используется специфические параметры
В buy_type 1й параметр, отвечает ограничению продаж назначение на аккаунт или всем и т.д. Типа если поставить none параметр 0, то будет учитывать всех игроков на всех акков, если поставить account параметр 2, то будет учитывать внутри аккаунта и к нему уже 2м и 3с параметром можно указать, как часто продавать товар, без лимита или ограничение на один день и та.д, а третим количество.
C#:
enum ELCoinShopFilterType {
    LCoinShopFilter_None,
    LCoinShopFilter_RareWeapon,
    LCoinShopFilter_NormalWeapon,
    LCoinShopFilter_RareArmor,
    LCoinShopFilter_HeavyArmor,
    LCoinShopFilter_LightArmor,
    LCoinShopFilter_Robe,
    LCoinShopFilter_Shield,
    LCoinShopFilter_Dye,
    LCoinShopFilter_Scroll,
    LCoinShopFilter_Etc,
    LCoinShopFilter_Belt,
    LCoinShopFilter_Elixir,
    LCoinShopFilter_Skillbook_S1,
    LCoinShopFilter_Skillbook_S2,
    LCoinShopFilter_Skillbook_S3,
    LCoinShopFilter_Max
};

enum ELCoinShopMarkType
{
    LCoinShopMark_None,
    LCoinShopMark_Event,
    LCoinShopMark_Sale,
    LCoinShopMark_Best,
    LCoinShopMark_Limited,
    LCoinShopMark_New,
    LCoinShopMark_Relay,
    LCoinShopMark_Max
};

enum PLSHOP_LIMIT_TYPE {
    PLSHOP_LIMIT_NONE,
    PLSHOP_LIMIT_CHARACTER,
    PLSHOP_LIMIT_ACCOUNT,
    PLSHOP_LIMIT_TYPE_MAX
};

enum PLSHOP_BUY_RESULT_TYPE {
    PLSHOP_BUY_SUCCESS,
    PLSHOP_BUY_SYSTEM_FAIL,
    PLSHOP_BUY_NOT_ENOUGH_COST_ITEM,
    PLSHOP_BUY_NOT_ENOUGH_ITEM_AMOUNT,
    PLSHOP_BUY_NOT_ENOUGH_LEVEL,
    PLSHOP_BUY_NOT_EVENT_TIME,
    PLSHOP_BUY_NOT_ENOUGH_SERVER_ITEM_AMOUNT,
    PLSHOP_BUY_NOT_ENOUGH_INVENTORY,
    PLSHOP_BUY_NOT_ENOUGH_CARRY_WEIGHT,
    PLSHOP_BUY_NOT_ENOUGH_PLEDGE_LEVEL,
    PLSHOP_BUY_NOT_ALIVE,
    PLSHOP_BUY_RESULT_TYPE_MAX
};

enum PLSHOP_EVENT_TYPE {
    PLSHOP_EVNET_NONE,
    PLSHOP_LIMITED_PERIOD
};

enum PLSHOP_RESET_TYPE {
    PLSHOP_RESET_ALWAYS,
    PLSHOP_RESET_ONEDAY,
    PLSHOP_RESET_ONEWEEK,
    PLSHOP_RESET_ONEMONTH,
    PLSHOP_RESET_TYPE_MAX
};
Если я правильно понял это эти параметры
 
И ещё вопрос. По офу есть возможность сделать ограничение на сервер, а не безлим. Тут есть возможность так поставить?
 
И ещё вопрос. По офу есть возможность сделать ограничение на сервер, а не безлим. Тут есть возможность так поставить?
да в курсе, не делал еще, сделаю по подобию как и в промо системе. Лимит количества на весь сервер
 
Back
Top