Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Multisell запросы из CB (https://forum.zone-game.info/showthread.php?t=26311)

the2fantasy 30.01.2013 18:49

Multisell запросы из CB
 
Добрый день.
Не могу разобраться с запросом в ядро из коммунити.
Есть ГМ магазин, в нем есть функции маммона.
В этих самых функциях интересует 2 вещи
1. Убрать СА
2. Вставить СА

допустим стандартный байпас к мультиселлу идет вида " bypass -h _bbsshop_multisell 10000 "
все бы хорошо, но мультиселл номер 4002 зашифрован "hardcoded" в ядре, и генерируется из него же. в ядре ничего полезного не нашел.

Вопрос соответственно такой.
- Как сделать байпас к мультиселу 4002?

Цитата:

есть конечно другой вариант, обойти это способом банального написания своего мультисела, но тогда при открытии диалога, будет показыватся весь арсенал L2 weapon, а не то что лежит у тебя в инвентаре.
Хотя если можно сделать иначе, советуйте как.
Сборка Voron Dev Epilogue(на основах Shaitan,Pheonix)

Zubastic 30.01.2013 18:55

Re: Multisell запросы из CB
 
Извращенцы что ли?
Вообщем для начала: какая есть задача? На птс вообще идет перечисление и параметр: показывать только оружие, которое имеется в инвентаре, только и всего.

the2fantasy 30.01.2013 19:07

Re: Multisell запросы из CB
 
На сколько я вижу в ядре за генерацию мультиселлов отвечает L2 Multisell.java
структура генерации такова
PHP код:

private void loadHardcoded()
    {
        
// 4000 - Enchance Weapon - C, B (Insert SA)
        
MultiSellListContainer list = new MultiSellListContainer();
        list.
setListId(4000);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSAInsertion(Grade.CGrade.B, list);
        
entries.put(list.getListId(), list);
        
// 4001 - Enchance Weapon - A (Insert SA)
        
list = new MultiSellListContainer();
        list.
setListId(4001);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSAInsertion(Grade.AGrade.A, list);
        
entries.put(list.getListId(), list);
        
// 40011 - Enchance Weapon - S (Insert SA)
        
list = new MultiSellListContainer();
        list.
setListId(40011);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSAInsertion(Grade.SGrade.S, list);
        
entries.put(list.getListId(), list);
        
// 326150002 - Enchance Weapon - S80/S84 (Insert SA)
        
list = new MultiSellListContainer();
        list.
setListId(326150002);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSAInsertion(Grade.S80Grade.S84, list);
        
entries.put(list.getListId(), list);
        
// 4002 - Remove SA
        
list = new MultiSellListContainer();
        list.
setListId(4002);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSARemove(list);
        
entries.put(list.getListId(), list);
        
// 311262517 - Finish Masterwork
        
list = new MultiSellListContainer();
        list.
setListId(311262517);
        list.
setShowAll(true);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        list.
setNoKey(true);
        
generateFinishMastetrwork(list);
        
entries.put(list.getListId(), list);
        
// 364790006 - PvP weapon add
        
list = new MultiSellListContainer();
        list.
setListId(364790006);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generatePvPAdd(list);
        
entries.put(list.getListId(), list);
        
// 364790007 - PvP weapon remove
        
list = new MultiSellListContainer();
        list.
setListId(364790007);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generatePvPRemove(list);
        
entries.put(list.getListId(), list);
        
// 1002 - unseal B
        
list = new MultiSellListContainer();
        list.
setListId(1002);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.BGrade.B, list);
        
entries.put(list.getListId(), list);
        
// 1003 - reseal B
        
list = new MultiSellListContainer();
        list.
setListId(1003);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateReseal(Grade.BGrade.B, list);
        
entries.put(list.getListId(), list);
        
// 1005 - unseal A
        
list = new MultiSellListContainer();
        list.
setListId(1005);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.AGrade.A, list);
        
entries.put(list.getListId(), list);
        
// 1007 - reseal A
        
list = new MultiSellListContainer();
        list.
setListId(1007);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateReseal(Grade.AGrade.A, list);
        
entries.put(list.getListId(), list);
        
// 1008 - unseal S
        
list = new MultiSellListContainer();
        list.
setListId(1008);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.SGrade.S, list);
        
entries.put(list.getListId(), list);
        
// 1009 - unseal S80
        
list = new MultiSellListContainer();
        list.
setListId(1009);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.S80Grade.S80, list);
        
entries.put(list.getListId(), list);
        
// 1010 - unseal S84
        
list = new MultiSellListContainer();
        list.
setListId(1010);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.S84Grade.S84, list);
        
entries.put(list.getListId(), list);
        
// 1011 - unseal S80/S84 using adena
        
list = new MultiSellListContainer();
        list.
setListId(1011);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(false);
        
generateUnseal(Grade.S80Grade.S84, list, 575);
        
entries.put(list.getListId(), list);
    } 

следственно мультиселл 4002 генерируется так:
PHP код:

// 4002 - Remove SA
        
list = new MultiSellListContainer();
        list.
setListId(4002);
        list.
setShowAll(false);
        list.
setKeepEnchant(true);
        list.
setNoTax(true);
        
generateSARemove(list);
        
entries.put(list.getListId(), list); 

Так вот я не знаю как написать отдельный мультиселл, что бы он показывал только то оружие что в инвентаре.
Или как сделать запрос на генерацию.

Задача ясна.
Сделать запрос на генерацию, или мультисел с функцией отбора.

Добавлено через 1 минуту
Кстате на генерации мультиселов не только фениксы но nextgen работает.
Это только то что я виде своими глазами в ядре

Zubastic 30.01.2013 19:28

Re: Multisell запросы из CB
 
        list.setListId(1011); 
        list.setShowAll(false);
Code: Java
Вот 2 строчки.
Что мешает вызывать такой мультиселл через линк?

the2fantasy 30.01.2013 19:32

Re: Multisell запросы из CB
 
мешает моя неграмотность.
Я с таким не сталкивался.
подскажи пожалуйста как написать байпас правильно в стиле
action="bypass -h _bbsshop_multisell 4002"

байпасы стиля
Код:

bypass -h _bbsshop_multisell 4002
bypass -h _bbsmultisell 4002
bypass npc_bbsshop_multisell 4002
bypass npc_%objectid%_multisell 4002
bypass _bbsmultisell 4002
bypass -h _multisell 4002

не дают никакой реакции

Zubastic 30.01.2013 19:40

Re: Multisell запросы из CB
 
Итак берем поиск нотпада и вводим 4002. Поиск по файлам *.htm
Думаю далее знаете, что делать.

the2fantasy 30.01.2013 19:52

Re: Multisell запросы из CB
 
Цитата:

Сообщение от Zubastic (Сообщение 271377)
Итак берем поиск нотпада и вводим 4002. Поиск по файлам *.htm
Думаю далее знаете, что делать.

Делалось, делалось в первую очередь. был найден нпс с таким мультиселом, и виден его запрос.
Код:

npc_%objectId%_Multisell 4002|Удалить особое умение из оружия
но копипаст в файл с Community Board ничего не дал, сам байпас выглядел так.


Код:

<button value="Убрать СА" action="bypass -h npc_%objectId%_Multisell 4002" width=200 height=26 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"/>
При нажатии на кнопку, ничего не происходит, ГС ошибок даже не выдает о неправильно байпасе.

KilRoy 30.01.2013 19:55

Re: Multisell запросы из CB
 
КБ - это не НПС. Для нее пишутся отдельные обработчики ссылок (Если у Вас их попросту нет, то мы Вам наванговать их не смогем. Ищите подобную сборку, смотрите их КБ. Личьте себе, их наработки)

the2fantasy 30.01.2013 19:55

Re: Multisell запросы из CB
 
и без "-h" тоже пробовал

Добавлено через 7 минут
Цитата:

Сообщение от KilRoy (Сообщение 271387)
КБ - это не НПС. Для нее пишутся отдельные обработчики ссылок (Если у Вас их попросту нет, то мы Вам наванговать их не смогем. Ищите подобную сборку, смотрите их КБ. Личьте себе, их наработки)

подобная сборка NextGen Epilogue, там байпас идет вида
Код:

bypass -h _bbsshop_multisell craft 4002
но я пока не могу наковырять в ядре где эта craft функция(

Добавлено через 9 минут
я не силен во всех этих фичах, я не знаком с явой и т.д.
мне известен только банальный html код, а работаю я методом тыка и подбора.
метод работает 100%, но вот такие поиски нужной инфы уже начинают напрягать.
с разрабами тоже уже не свяжешься, проект закрыт давным давно(

KilRoy 30.01.2013 20:09

Re: Multisell запросы из CB
 
Повторяю - у каждого из разрабов, свои тараканы в голове. Отсюда - свои обработчики ссылок.
Если мне не изменяет память, то "что бы он показывал только то оружие что в инвентаре." - у фениксов это было в стиле <config showall="false" />, в описании XML файла мультиселла, хотя может ошибаюсь...
Все что нужно - найти/научить свою КБ понимать выданную ей инфу в ссылке.


---
Пример реализованного обработчика, в классе Комьюнити Боард:
Код:

                else if(Config.BBS_PVP_ALLOW_SELL && bypass.startsWith("_bbsmultisell"))
                {
                        //Example: "_bbsmultisell:10000;_bbspage:index" or "_bbsmultisell:10000;_bbshome" or "_bbsmultisell:10000"...
                        StringTokenizer st2 = new StringTokenizer(bypass, ";");
                        String[] mBypass = st2.nextToken().split(":");
                        String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null;
                        if(pBypass != null)
                        {
                                ICommunityBoardHandler handler = CommunityBoardManager.getInstance().getCommunityHandler(pBypass);
                                if(handler != null)
                                        handler.onBypassCommand(player, pBypass);
                        }

                        int listId = Integer.parseInt(mBypass[1]);
                        MultiSellHolder.getInstance().SeparateAndSend(listId, player, 0);
                        return;
                }

Вызывается такой обработчик ссылкой "_bbsmultisell:100500", где 100500-ID мультиселла.


Текущее время: 07:55. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot