Сообщений: 66
Тем: 15
Зарегистрирован: Apr 2011
Репутация:
4
Добрый день.
Не могу разобраться с запросом в ядро из коммунити.
Есть ГМ магазин, в нем есть функции маммона.
В этих самых функциях интересует 2 вещи
1. Убрать СА
2. Вставить СА
допустим стандартный байпас к мультиселлу идет вида " bypass -h _bbsshop_multisell 10000 "
все бы хорошо, но мультиселл номер 4002 зашифрован "hardcoded" в ядре, и генерируется из него же. в ядре ничего полезного не нашел.
Вопрос соответственно такой.
- Как сделать байпас к мультиселу 4002?
Цитата:есть конечно другой вариант, обойти это способом банального написания своего мультисела, но тогда при открытии диалога, будет показыватся весь арсенал L2 weapon, а не то что лежит у тебя в инвентаре.
Хотя если можно сделать иначе, советуйте как.
Сборка Voron Dev Epilogue(на основах Shaitan,Pheonix)
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Извращенцы что ли?
Вообщем для начала: какая есть задача? На птс вообще идет перечисление и параметр: показывать только оружие, которое имеется в инвентаре, только и всего.
Сообщений: 66
Тем: 15
Зарегистрирован: Apr 2011
Репутация:
4
01-30-2013, 07:07 PM
(Сообщение последний раз редактировалось: 01-30-2013, 07:08 PM the2fantasy.)
На сколько я вижу в ядре за генерацию мультиселлов отвечает L2 Multisell.java
структура генерации такова
PHP код: <?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.C, Grade.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.A, Grade.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.S, Grade.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.S80, Grade.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.B, Grade.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.B, Grade.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.A, Grade.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.A, Grade.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.S, Grade.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.S80, Grade.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.S84, Grade.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.S80, Grade.S84, list, 57, 5);
entries.put(list.getListId(), list);
}
следственно мультиселл 4002 генерируется так:
PHP код: <?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 работает.
Это только то что я виде своими глазами в ядре
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
[SRC="java"] list.setListId(1011);
list.setShowAll(false);[/SRC]
Вот 2 строчки.
Что мешает вызывать такой мультиселл через линк?
Сообщений: 66
Тем: 15
Зарегистрирован: Apr 2011
Репутация:
4
01-30-2013, 07:32 PM
(Сообщение последний раз редактировалось: 01-30-2013, 07:34 PM the2fantasy.)
мешает моя неграмотность.
Я с таким не сталкивался.
подскажи пожалуйста как написать байпас правильно в стиле
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
не дают никакой реакции
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Итак берем поиск нотпада и вводим 4002. Поиск по файлам *.htm
Думаю далее знаете, что делать.
Сообщений: 66
Тем: 15
Зарегистрирован: Apr 2011
Репутация:
4
Zubastic Написал:Итак берем поиск нотпада и вводим 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"/>
При нажатии на кнопку, ничего не происходит, ГС ошибок даже не выдает о неправильно байпасе.
Сообщений: 2,102
Тем: 40
Зарегистрирован: Apr 2008
Репутация:
12,296
КБ - это не НПС. Для нее пишутся отдельные обработчики ссылок (Если у Вас их попросту нет, то мы Вам наванговать их не смогем. Ищите подобную сборку, смотрите их КБ. Личьте себе, их наработки)
Сообщений: 66
Тем: 15
Зарегистрирован: Apr 2011
Репутация:
4
01-30-2013, 07:55 PM
(Сообщение последний раз редактировалось: 01-30-2013, 08:04 PM the2fantasy.)
и без "-h" тоже пробовал
Добавлено через 7 минут
KilRoy Написал:КБ - это не НПС. Для нее пишутся отдельные обработчики ссылок (Если у Вас их попросту нет, то мы Вам наванговать их не смогем. Ищите подобную сборку, смотрите их КБ. Личьте себе, их наработки)
подобная сборка NextGen Epilogue, там байпас идет вида
Код: bypass -h _bbsshop_multisell craft 4002
но я пока не могу наковырять в ядре где эта craft функция(
Добавлено через 9 минут
я не силен во всех этих фичах, я не знаком с явой и т.д.
мне известен только банальный html код, а работаю я методом тыка и подбора.
метод работает 100%, но вот такие поиски нужной инфы уже начинают напрягать.
с разрабами тоже уже не свяжешься, проект закрыт давным давно(
Сообщений: 2,102
Тем: 40
Зарегистрирован: Apr 2008
Репутация:
12,296
Повторяю - у каждого из разрабов, свои тараканы в голове. Отсюда - свои обработчики ссылок.
Если мне не изменяет память, то "что бы он показывал только то оружие что в инвентаре." - у фениксов это было в стиле <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 мультиселла.
|