А что мешает узнать у непосредственно Deazer на форуме?Всем привет!
Может кто то подсказать ? или может есть решение ?
Нужно мультисел в котором можно делать апгрейд ( то есть, что бы предмет был у тебя в суммке или в руках, тогда покажется след лвл и тд)
И что бы заточка и лс сохранялсь
А что мешает узнать у непосредственно Deazer на форуме?
Да можно, но разработчик ответит более подробнее я думаю)Блин, я не понимаю, а что тут нельзя такое спрашивать или что?
Я тут спрашиваю, может есть и решение у кого, может где то в шаре или еще где, просто не нашелДа можно, но разработчик ответит более подробнее я думаю)
Как скажешь)Я тут спрашиваю, может есть и решение у кого, может где то в шаре или еще где, просто не нашел
Спасибо, буду искать тогда тамMultisellIgnoreEquippedCondition = True
в alt setttings добавь и будет так как ты хочешь
Это ответ дизера на форуме люцеры, да и правда все говорят вопросы по люцере лучше спросить на форуме люцеры там ответят четко по теме, так же можно воспользоваться поиском есть много решений уже готовых, важно: читай гайды внимательно
Там целый раздел гайдовСпасибо, буду искать тогда там
ну так по идее 2 варианта есть:Всем привет!
Может кто то подсказать ? или может есть решение ?
Нужно мультисел в котором можно делать апгрейд ( то есть, что бы предмет был у тебя в суммке или в руках, тогда покажется след лвл и тд)
И что бы заточка и лс сохранялсь
Можно прото генерировать мултисел из готовых итемов на персонаже. Например, можно просканировать инвентарь на оружие или броню с типом кристалла на D. И сгенерировать entry для каждого апгрейда. И отослать все игроку с фейковыми айдишками (multisell Id и для каждой опции entry id, они все имеют фейковые номера так как клиенту тут по барабану что прислали, ему главное это все обратно отослать).ну так по идее 2 варианта есть:
1. у мультиселов должен быть параметр типа show_all или похожее, при выставлении которого в false будет показывать только варианты обмена, которые доступны, т.е. для чего есть предметы в инвентаре. ну там конечно ньюансы есть, но как вариант.
2. написать AI-шку для нужного нпс, который при запросе показа мультисела будет проверять наличие у игрока нужных предметов и в зависимости от этого показывать один вариантов мультиселов с разными вариантами обмена нужного. этот вариант больше подходит чтобы сделать к примеру разные уровни доступа к магазину, а повышать уровень можно вот получая каким либо образом и имея при себе определенные предметы.
А можно как то подробнее, как это можно сделать?Можно прото генерировать мултисел из готовых итемов на персонаже. Например, можно просканировать инвентарь на оружие или броню с типом кристалла на D. И сгенерировать entry для каждого апгрейда. И отослать все игроку с фейковыми айдишками (multisell Id и для каждой опции entry id, они все имеют фейковые номера так как клиенту тут по барабану что прислали, ему главное это все обратно отослать).
Например, у перонажа есть лук в инвентаре без энчанта. Квестовый скрипт генерирует мултисел на это оружие. Например можно апгрейдить его по энчанту +1 +2 +3 и так далее. Аж до +10. Ну и выставить какую цену или там какие предметы убирать, с луком включительно. Ну и отсылаем такой мултисел к игроку и все будет работать как настоящий пропарсенный мултисел.
Даю псевдо-код с ссылками на код L2J что-бы было понятно о чем и как идется разговор.А можно как то подробнее, как это можно сделать?
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. Ну и выставить какую цену или там какие предметы убирать, с луком включительно. Ну и отсылаем такой мултисел к игроку и все будет работать как настоящий пропарсенный мултисел.
<?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 даже такого файла нету может это не давнего обновление ?так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.
вот тут к примеру у меня покажет в обменах только варианты для имеющихся у игрока футболок +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>
Согласен. Делo в том что если брать все носимые предметы, это ведь будет очень большой мултисел. Если например нужно покрыть определенный тип брони по кристаллу или там оружие, намного проще сгенерировать из того что есть у игрока. Ну и конечно нормальные мултиселлы с энчантом будут почти не возможны, из-за того что энчант береться из шаблона (template) придмета. Тo есть в любом случае нужно что-то изменять в коду мултисела.так этот функционал и так должен быть у него там, ибо это одна из базовых опций мультиселов - показывать варианты только под имеющееся
единственно что там конечно может не учитывать в фильтрации требуемый энчант (если его вобще можно задать ингредиенту в сборке) и просто считать любые предметы с заданным ид подходящими для обмена.
вот если именно так, то да - тут уж просто на лету создавать список обмена с нуля.
я на примере своей сборки показалЧто то такого не нахожу
но без этого зачастую вобще никак, если надо охватить много вариантов/комбинаций обмена - взять те же обмены/апгрейды у маммона или кузнецов к примеру...И не всегда полезно иметь очень большие по списку мултиселы, так как их обработка на серверe будет ощутима.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?