Мультисел Upgrade

  • Автор темы Автор темы Web-GPY
  • Дата начала Дата начала

Web-GPY

Свой человек
Участник
Старожил I степени
Сообщения
47
Розыгрыши
0
Репутация
2
Реакции
4
Баллы
545
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
Lucera3
Всем привет!
Может кто то подсказать ? или может есть решение ?
Нужно мультисел в котором можно делать апгрейд ( то есть, что бы предмет был у тебя в суммке или в руках, тогда покажется след лвл и тд)
И что бы заточка и лс сохранялсь
 
Всем привет!
Может кто то подсказать ? или может есть решение ?
Нужно мультисел в котором можно делать апгрейд ( то есть, что бы предмет был у тебя в суммке или в руках, тогда покажется след лвл и тд)
И что бы заточка и лс сохранялсь
А что мешает узнать у непосредственно Deazer на форуме?
 
MultisellIgnoreEquippedCondition = True
в alt setttings добавь и будет так как ты хочешь
Это ответ дизера на форуме люцеры, да и правда все говорят вопросы по люцере лучше спросить на форуме люцеры там ответят четко по теме, так же можно воспользоваться поиском есть много решений уже готовых, важно: читай гайды внимательно:)
 
MultisellIgnoreEquippedCondition = True
в alt setttings добавь и будет так как ты хочешь
Это ответ дизера на форуме люцеры, да и правда все говорят вопросы по люцере лучше спросить на форуме люцеры там ответят четко по теме, так же можно воспользоваться поиском есть много решений уже готовых, важно: читай гайды внимательно:)
Спасибо, буду искать тогда там
 
Всем привет!
Может кто то подсказать ? или может есть решение ?
Нужно мультисел в котором можно делать апгрейд ( то есть, что бы предмет был у тебя в суммке или в руках, тогда покажется след лвл и тд)
И что бы заточка и лс сохранялсь
ну так по идее 2 варианта есть:
1. у мультиселов должен быть параметр типа show_all или похожее, при выставлении которого в false будет показывать только варианты обмена, которые доступны, т.е. для чего есть предметы в инвентаре. ну там конечно ньюансы есть, но как вариант.
2. написать AI-шку для нужного нпс, который при запросе показа мультисела будет проверять наличие у игрока нужных предметов и в зависимости от этого показывать один вариантов мультиселов с разными вариантами обмена нужного. этот вариант больше подходит чтобы сделать к примеру разные уровни доступа к магазину, а повышать уровень можно вот получая каким либо образом и имея при себе определенные предметы.
 
ну так по идее 2 варианта есть:
1. у мультиселов должен быть параметр типа show_all или похожее, при выставлении которого в false будет показывать только варианты обмена, которые доступны, т.е. для чего есть предметы в инвентаре. ну там конечно ньюансы есть, но как вариант.
2. написать AI-шку для нужного нпс, который при запросе показа мультисела будет проверять наличие у игрока нужных предметов и в зависимости от этого показывать один вариантов мультиселов с разными вариантами обмена нужного. этот вариант больше подходит чтобы сделать к примеру разные уровни доступа к магазину, а повышать уровень можно вот получая каким либо образом и имея при себе определенные предметы.
Можно прото генерировать мултисел из готовых итемов на персонаже. Например, можно просканировать инвентарь на оружие или броню с типом кристалла на D. И сгенерировать entry для каждого апгрейда. И отослать все игроку с фейковыми айдишками (multisell Id и для каждой опции entry id, они все имеют фейковые номера так как клиенту тут по барабану что прислали, ему главное это все обратно отослать).

Например, у перонажа есть лук в инвентаре без энчанта. Квестовый скрипт генерирует мултисел на это оружие. Например можно апгрейдить его по энчанту +1 +2 +3 и так далее. Аж до +10. Ну и выставить какую цену или там какие предметы убирать, с луком включительно. Ну и отсылаем такой мултисел к игроку и все будет работать как настоящий пропарсенный мултисел.
 
Можно прото генерировать мултисел из готовых итемов на персонаже. Например, можно просканировать инвентарь на оружие или броню с типом кристалла на D. И сгенерировать entry для каждого апгрейда. И отослать все игроку с фейковыми айдишками (multisell Id и для каждой опции entry id, они все имеют фейковые номера так как клиенту тут по барабану что прислали, ему главное это все обратно отослать).

Например, у перонажа есть лук в инвентаре без энчанта. Квестовый скрипт генерирует мултисел на это оружие. Например можно апгрейдить его по энчанту +1 +2 +3 и так далее. Аж до +10. Ну и выставить какую цену или там какие предметы убирать, с луком включительно. Ну и отсылаем такой мултисел к игроку и все будет работать как настоящий пропарсенный мултисел.
А можно как то подробнее, как это можно сделать?
 
А можно как то подробнее, как это можно сделать?
Даю псевдо-код с ссылками на код L2J что-бы было понятно о чем и как идется разговор.

1. Берем стандартный квест для нпц по типу
2. Когда игрок выбирает мултисел опцию ( ) нужно будет создавать новый ListContainer (псевдо-код снизу)
3. Используем функционал отправки мултисела от сюда , где самое главное это дублировать эту функцию что-бы пересылать уже готовый ListContainer, а не его id.

Псевдо-код генерации ListContainer:

JavaScript:
class ImprovedIngredient extends Ingredient {
    enchantLevel: number

    getEnchantLeve() : number {
       return this.enchantLevel
    }
}


const list = new ListContainer(1)
list.setApplyTaxes(false)
list.setMaintainEnchantment(false)

let counter = 1
const staticIngredient = new Ingredient(57, 1000, false, false ) // каждый апгрейд стоит 1000 адены

player.getInventory().forEachItem(item => {
    if(item.template.getItemGrade() !== CrystalType.NONE) {
       const entry = new Entry(counter++)
       const product = new ImprovedIngredient( item.getId(), 1, false, false )
       const currentItemIngredient = new Ingredient( item.getId(), 1, false, false )

       product.enchantLevel = item.getEnchantLevel() + 1 // прибавляем энчант уровень

       entry.products.add( product )
       entry.ingredients.add( staticIngredient )
       entry.ingredients.add( currentItemIngredient )

       list.entries.add( entry )
    }
})

MultisellData.separateAndSend(list, player, npc, false);
 
Даю псевдо-код с ссылками на код L2J что-бы было понятно о чем и как идется разговор.

1. Берем стандартный квест для нпц по типу
2. Когда игрок выбирает мултисел опцию ( ) нужно будет создавать новый ListContainer (псевдо-код снизу)
3. Используем функционал отправки мултисела от сюда , где самое главное это дублировать эту функцию что-бы пересылать уже готовый ListContainer, а не его id.

Псевдо-код генерации ListContainer:

JavaScript:
class ImprovedIngredient extends Ingredient {
    enchantLevel: number

    getEnchantLeve() : number {
       return this.enchantLevel
    }
}


const list = new ListContainer(1)
list.setApplyTaxes(false)
list.setMaintainEnchantment(false)

let counter = 1
const staticIngredient = new Ingredient(57, 1000, false, false ) // каждый апгрейд стоит 1000 адены

player.getInventory().forEachItem(item => {
    if(item.template.getItemGrade() !== CrystalType.NONE) {
       const entry = new Entry(counter++)
       const product = new ImprovedIngredient( item.getId(), 1, false, false )
       const currentItemIngredient = new Ingredient( item.getId(), 1, false, false )

       product.enchantLevel = item.getEnchantLevel() + 1 // прибавляем энчант уровень

       entry.products.add( product )
       entry.ingredients.add( staticIngredient )
       entry.ingredients.add( currentItemIngredient )

       list.entries.add( entry )
    }
})

MultisellData.separateAndSend(list, player, npc, false);
Спасибо большое ) может есть тг связть ?
 
Можно прото генерировать мултисел из готовых итемов на персонаже. Например, можно просканировать инвентарь на оружие или броню с типом кристалла на D. И сгенерировать entry для каждого апгрейда. И отослать все игроку с фейковыми айдишками (multisell Id и для каждой опции entry id, они все имеют фейковые номера так как клиенту тут по барабану что прислали, ему главное это все обратно отослать).

Например, у перонажа есть лук в инвентаре без энчанта. Квестовый скрипт генерирует мултисел на это оружие. Например можно апгрейдить его по энчанту +1 +2 +3 и так далее. Аж до +10. Ну и выставить какую цену или там какие предметы убирать, с луком включительно. Ну и отсылаем такой мултисел к игроку и все будет работать как настоящий пропарсенный мултисел.
так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.

вот тут к примеру у меня покажет в обменах только варианты для имеющихся у игрока футболок +8/+9 и ничего более.
XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE list SYSTEM "../multisell.dtd">
<list>
    <config show_all="false" no_tax="true" npc_id="32378" />
    <item>
        <ingredient id="21706" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21706" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
    </item>
    <item>
        <ingredient id="21580" count="1" enchant="8;9" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21580" count="1" enchant="10" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
    </item>
    <item>
        <ingredient id="23085" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="23085" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
    </item>
    <item>
        <ingredient id="34732" count="1" enchant="8;9" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="34732" count="1" enchant="10" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
    </item>
    <item>
        <ingredient id="37718" count="1" enchant="8;9" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="37718" count="1" enchant="10" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
    </item>
    <item>
        <ingredient id="46193" count="1" enchant="8;9" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46193" count="1" enchant="10" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
    </item>
    <item>
        <ingredient id="46194" count="1" enchant="8;9" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46194" count="1" enchant="10" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
    </item>
</list>
 
Оверпостинг
так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.

вот тут к примеру у меня покажет в обменах только варианты для имеющихся у игрока футболок +8/+9 и ничего более.
XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE list SYSTEM "../multisell.dtd">
<list>
    <config show_all="false" no_tax="true" npc_id="32378" />
    <item>
        <ingredient id="21706" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21706" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
    </item>
    <item>
        <ingredient id="21580" count="1" enchant="8;9" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21580" count="1" enchant="10" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
    </item>
    <item>
        <ingredient id="23085" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="23085" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
    </item>
    <item>
        <ingredient id="34732" count="1" enchant="8;9" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="34732" count="1" enchant="10" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
    </item>
    <item>
        <ingredient id="37718" count="1" enchant="8;9" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="37718" count="1" enchant="10" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
    </item>
    <item>
        <ingredient id="46193" count="1" enchant="8;9" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46193" count="1" enchant="10" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
    </item>
    <item>
        <ingredient id="46194" count="1" enchant="8;9" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46194" count="1" enchant="10" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
    </item>
</list>
Что то такого не нахожу

так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.

вот тут к примеру у меня покажет в обменах только варианты для имеющихся у игрока футболок +8/+9 и ничего более.
XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE list SYSTEM "../multisell.dtd">
<list>
    <config show_all="false" no_tax="true" npc_id="32378" />
    <item>
        <ingredient id="21706" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21706" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [pi_shirt_of_wolf_event] -->
    </item>
    <item>
        <ingredient id="21580" count="1" enchant="8;9" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="21580" count="1" enchant="10" />    <!-- Футболка Ольфа / Power Shirt / [pi_shirt_of_wolf] -->
    </item>
    <item>
        <ingredient id="23085" count="1" enchant="8;9" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="23085" count="1" enchant="10" />    <!-- Футболка Ольфа [Ивент] / Power Shirt [Event] / [g_pi_shirt_of_wolf_event_ru] -->
    </item>
    <item>
        <ingredient id="34732" count="1" enchant="8;9" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
        <ingredient id="57" count="500000000" />    <!-- Адены / Adena / [adena] -->
        <production id="34732" count="1" enchant="10" />    <!-- Обменянная Футболка Ольфа / Exchanged Power Shirt / [pi_shirt_of_wolf_changed] -->
    </item>
    <item>
        <ingredient id="37718" count="1" enchant="8;9" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="37718" count="1" enchant="10" />    <!-- Сияющая Футболка Эйнхасад / Shiny Elemental Shirt / [bm_ainhasard_shirt] -->
    </item>
    <item>
        <ingredient id="46193" count="1" enchant="8;9" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46193" count="1" enchant="10" />    <!-- Футболка Отражения Атаки / Physical Reflect Shirt / [bm_reflect_attack_shirt] -->
    </item>
    <item>
        <ingredient id="46194" count="1" enchant="8;9" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
        <ingredient id="37723" count="1" />    <!-- Камень для Обмена Футболки / Shiny Elemental Shirt Exchange Stone / [bm_shirt_stone] -->
        <ingredient id="57" count="1000000000" />    <!-- Адены / Adena / [adena] -->
        <production id="46194" count="1" enchant="10" />    <!-- Футболка Отражения Магии / Magical Reflect Shirt / [bm_reflect_magic_shirt] -->
    </item>
</list>
lucera\gameserver\data\multisell.dtd даже такого файла нету может это не давнего обновление ?
 
Последнее редактирование модератором:
так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.
Согласен. Делo в том что если брать все носимые предметы, это ведь будет очень большой мултисел. Если например нужно покрыть определенный тип брони по кристаллу или там оружие, намного проще сгенерировать из того что есть у игрока. Ну и конечно нормальные мултиселлы с энчантом будут почти не возможны, из-за того что энчант береться из шаблона (template) придмета. Тo есть в любом случае нужно что-то изменять в коду мултисела.

Обычные мултиселы очень просты по простой формуле один предмет + адена = другой предмет. И вариации предметов по энчанту или же там дополнительных ресистах просто не используються. Но можно ведь. Но тут нужно понимать и как клиент реагирует на данные в сервных пакетах, так и как это использовать в мултиселах на сервере. Немного запутанно, но можно все придумать. И не всегда полезно иметь очень большие по списку мултиселы, так как их обработка на серверe будет ощутима.
 
Что то такого не нахожу
я на примере своей сборки показал
ну и само собой у меня не люцера

И не всегда полезно иметь очень большие по списку мултиселы, так как их обработка на серверe будет ощутима.
но без этого зачастую вобще никак, если надо охватить много вариантов/комбинаций обмена - взять те же обмены/апгрейды у маммона или кузнецов к примеру...
и это еще при том что всякие обмены/апгрейды уже неиспользуемых предметов из всего этого давно выпилены (типа оружия с SA и т.п.), а то раньше и 4-5 мб на некоторые списки обмена было вобще не пределом...

TOTALCMD64_0ar10CrDV9.webp
 
Последнее редактирование модератором:
Назад
Сверху Снизу