Как создать ГМшоп

Deazer

Head Developer
Staff member
В данной статье я попытаюсь подробно рассказать Вам о том, как сделать магазин (ГМ-шоп) для своего сервера.

Создание магазина состоит из 3-х частей, а именно:

1 Часть – XML часть (Непосредственно сами мультиселлы)
2 Часть – HTML часть (Диалог НПЦ)
3 Часть – XML (Реализация самого НПЦ)

Для начала нам нужно зайти в папку Multisell, которая находится в папке data (data находится в папке gameserver). В данной папке создаем текстовый документ (Блокнот) и вставляем в него данный код:


XML:
<?xml version='1.0' encoding='utf-8'?>
<list>

   <item id="1">
   <ingredient id="57" count="12300000" enchant="0"/>
   <production id="6680" count="1" enchant="0"/>
   </item>

   <item id="2">
   <ingredient id="57" count="12300000" enchant="0"/>
   <production id="6681" count="1" enchant="0"/>
   </item>

   <item id="3">
   <ingredient id="57" count="12300000" enchant="0"/>
   <production id="6682" count="1" enchant="0"/>
   </item>
          
</list>

Это только для примера. Данный код Вы должны переделать для себя, сейчас я постараюсь рассказать что к чему.

?xml version=»1.0″ encoding=»utf-8″? — данная строка обязательно должна быть вверху каждого XML файла
item id=»1″ — ID предмета
ingredient id=»12300000″ – это то за что будет покупать игрок предметы, в нашем случаи это Адена (ID Adena – 57)
count=»123″ – цена покупаемого предмета, так как у нас Адена, игроку придётся отдать за покупку предмета 123 Адены
enchant=»0″ – Заточка предмета
production id=»6680″ – предмет который получит игрок, в нашем случаи это Draconic Тело
count=»1″ – количество получаемого предмета
enchant=»0″ – Заточка предмета

Переделываем под себя и сохраняем данный текстовый документ. Переименовываем файл в название которого еще нет в папке Multisell, например 13333, переименовываем файл в 13333.xml. На этом Xml часть наконец-то заканчивается.

Теперь начнем рассматривать 2 часть – HTML

Заходим в папку html она находится в GameServer ->data -> html -> находим нужный нам диалог или добавляем свой самостоятельно.
Теперь о том как прикреплять свой мультиселл к диалогу НПЦ, для примера берем наш созданный мультиселл 13333 который мы уже создали выше
Можно сделать упрощенной строкой:
[npc_%objectId%_multisell 13333|Просмотреть список]
Можно сделать в HTML виде:
<a action="bypass -h npc_%objectId%_multisell 13333">Просмотреть список</a>

Как вы видите мы указываем в формате нужный нам id npc_%objectId%_multisell 13333

Теперь начнем рассматривать 3 часть – XML Npc

Местонахождение GameServer ->data -> npc -> 40000-40099.xml

Берем для примера готового НПЦ уже созданного c id 40013:

XML:
<npc id="40013" name="Item Mall" title="Merchant">
        <set name="aggroRange" value="0" />
        <set name="ai_type" value="CharacterAI" />
        <set name="baseAtkRange" value="40" />
        <set name="baseCON" value="43" />
        <set name="baseCritRate" value="40" />
        <set name="baseDEX" value="30" />
        <set name="baseHpMax" value="3290.113" />
        <set name="baseHpRate" value="1" />
        <set name="baseHpReg" value="8.5" />
        <set name="baseINT" value="21" />
        <set name="baseMAtk" value="1242" />
        <set name="baseMAtkSpd" value="333" />
        <set name="baseMDef" value="469" />
        <set name="baseMEN" value="20" />
        <set name="baseMpMax" value="1674.8" />
        <set name="baseMpReg" value="3" />
        <set name="basePAtk" value="1952" />
        <set name="basePAtkSpd" value="278" />
        <set name="basePDef" value="577" />
        <set name="baseRunSpd" value="120" />
        <set name="baseSTR" value="40" />
        <set name="baseShldDef" value="0" />
        <set name="baseShldRate" value="0" />
        <set name="baseWIT" value="20" />
        <set name="baseWalkSpd" value="75" />
        <set name="collision_height" value="23.0" />
        <set name="collision_radius" value="8.0" />
        <set name="level" value="80" />
        <set name="rewardExp" value="0" />
        <set name="rewardRp" value="0" />
        <set name="rewardSp" value="0" />
        <set name="shots" value="NONE" />
        <set name="texture" value="" />
        <set name="type" value="Merchant" /> <!-- Тип НПЦ обозначающий его принадлежность к торговцам -->
        <set name="displayId" value="13298"/> <!-- Внешний вид который будет использовать НПЦ -->
        <set name="htm_root" value="mods/gmshop/" /> <!-- Откуда будет брать НПЦ свой диалог-->
        <attributes>
            <defence attribute="fire" value="20" />
            <defence attribute="water" value="20" />
            <defence attribute="wind" value="20" />
            <defence attribute="earth" value="20" />
            <defence attribute="holy" value="20" />
            <defence attribute="unholy" value="20" />
        </attributes>
    </npc>
 
Last edited:
Добрый вечер! Не могу решить одну проблему помогите!
Вот мультисел в ГМшопе
Не могу обменять точенный сет на +6 или любая другая заточка. Пишет недостаточно предметов. и не отображает заточку как видите на скрине.
Screenshot_3.png
XML:
  <config showall="true" notax="false" ignoreprice="false" keepenchanted="true" />
  <item id="1">
    <ingredient id="6373" count="1" enchant="0"/>
    <ingredient id="6374" count="1" enchant="0"/>
    <ingredient id="6378" count="1" enchant="0"/>
    <ingredient id="6375" count="1" enchant="0"/>
    <ingredient id="6376" count="1" enchant="0"/>
    <ingredient id="4037" count="25" enchant="0"/>
    <production id="9416" count="1" enchant="0"/>
    <production id="9421" count="1" enchant="0"/>
    <production id="9422" count="1" enchant="0"/>
    <production id="9423" count="1" enchant="0"/>
    <production id="9424" count="1" enchant="0"/>
  </item>

Но если выставить параметр <config showall="false" у меня черти что показывает в гмшопе, но за то могу обменять броню +6 на +6 сет.
Screenshot_4.png
 
Он покажет все совпадающие элементы для трейда
 
Он покажет все совпадающие элементы для трейда

А можно ли как-то подправить это в конфигах или еще где нибудь, что бы при значение showall="true" передавалась заточка брони?
Потому что такое отображение, это полный бред. Мне надо показать человеку весь товар в мультиселе а не то что ему доступно.
 
А можно ли как-то подправить это в конфигах или еще где нибудь, что бы при значение showall="true" передавалась заточка брони?
Потому что такое отображение, это полный бред. Мне надо показать человеку весь товар в мультиселе а не то что ему доступно.
Это 2 разных конфига и их индивидуально нужно настраивать.
 
А можно ли как-то подправить это в конфигах или еще где нибудь, что бы при значение showall="true" передавалась заточка брони?
Потому что такое отображение, это полный бред. Мне надо показать человеку весь товар в мультиселе а не то что ему доступно.
Это недоступно при дополнение заточкой в обмене
 
Добрый день. Хочу дополнить еще такой момент для владельцев сборок на основе клиента Classic.
При названии в ваших мультиселлах соблюдайте формат названия, а именно:
- 5 цифр в названии файла
- в названии должны быть только цифры

Иначе работать не будет.
 
Добрый день. Хочу дополнить еще такой момент для владельцев сборок на основе клиента Classic.
При названии в ваших мультиселлах соблюдайте формат названия, а именно:
- 5 цифр в названии файла
- в названии должны быть только цифры

Иначе работать не будет.
Это необязательно - 5 цифр, вот такой вполне функционирует 002.xml
 
Либо я слепой, либо нет на форуме такого вопроса.
Можно ли выставить в один клик, чтобы продавать вещи в гм шоп за 0 аден или в итемах менять каждому предмету отдельно?
 
Либо я слепой, либо нет на форуме такого вопроса.
Можно ли выставить в один клик, чтобы продавать вещи в гм шоп за 0 аден или в итемах менять каждому предмету отдельно?
ты про это?
Code:
# Цена за которую будет производится продажа итемов в магазины - Расчет происходит следующим образом (ItemPrice из data/items/ деленная на 2 - offlike) в
# во имя экономики можете менять под себя.
# Если хотите что бы все продавалось по 1 адене ставите - 2147483647.
ShopRefundSellDivisor = 2
# Множитель стоимости предметов покупаемых в магазинах у НПЦ. Работает только для BuyList, для multisell не работает.
# Пример: 1.2 = 20% модификации к базовой стоимости предмета
ShopBuyItemMultiplier = 1
 
ты про это?
Code:
# Цена за которую будет производится продажа итемов в магазины - Расчет происходит следующим образом (ItemPrice из data/items/ деленная на 2 - offlike) в
# во имя экономики можете менять под себя.
# Если хотите что бы все продавалось по 1 адене ставите - 2147483647.
ShopRefundSellDivisor = 2
# Множитель стоимости предметов покупаемых в магазинах у НПЦ. Работает только для BuyList, для multisell не работает.
# Пример: 1.2 = 20% модификации к базовой стоимости предмета
ShopBuyItemMultiplier = 1
Да огромное спасибо, 100 раз мимо пролистывал.
 
Да огромное спасибо, 100 раз мимо пролистывал.
Всегда для поиска любой инфы в сервере и не только использую Notepad ++
поиск по ключу/ ключевому слову в файлах работает на ура!
также можно и делать массовые замены данных в файлах

Screenshot_2.png
 
какой байпас на продажу в классике? при попытке нажать на bypass -h npc_%objectId%_Sell
в клиенте крашится освещение и не работает пкм
 
какой байпас на продажу в классике? при попытке нажать на bypass -h npc_%objectId%_Sell
в клиенте крашится освещение и не работает пкм
Sell вообще в классике нет, там все в одном - Buy/Sell/Refund
 
Sell вообще в классике нет, там все в одном - Buy/Sell/Refund
понял, а как быть? пустой байлист не вариант?
допустим на дриме работает, видимо как-то выкрутились
 
понял, а как быть? пустой байлист не вариант?
допустим на дриме работает, видимо как-то выкрутились
На дриме прямо интерфейс на вызове тыкает в Sell
 
На дриме прямо интерфейс на вызове тыкает в Sell
понял, т.е. это требует реализации и на серверной стороне? или мне достаточно так же допилить интерфейс под себя?
 
Back
Top