| 
		
	
	
	
		
	Сообщений: 66 
	Тем: 15 
	Зарегистрирован: Apr 2011
	
 Репутация: 
4 
	
	
		Добрый день. 
Не могу разобраться с запросом в ядро из коммунити. 
Есть ГМ магазин, в нем есть функции маммона. 
В этих самых функциях интересует 2 вещи 
1. Убрать СА 
2. Вставить СА
 
допустим стандартный байпас к мультиселлу идет вида " bypass -h _bbsshop_multisell 10000 " 
все бы хорошо, но мультиселл номер 4002 зашифрован "hardcoded" в ядре, и генерируется из него же. в ядре ничего полезного не нашел.
 
Вопрос соответственно такой. 
- Как сделать байпас к мультиселу 4002? Цитата:есть конечно другой вариант, обойти это способом банального написания своего мультисела, но тогда при открытии диалога, будет показыватся весь арсенал L2 weapon, а не то что лежит у тебя в инвентаре.Сборка Voron Dev Epilogue(на основах Shaitan,Pheonix)Хотя если можно сделать иначе, советуйте как.
 
	
	
	
		
	Сообщений: 5,862 
	Тем: 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,862 
	Тем: 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 4002bypass -h _bbsmultisell 4002
 bypass npc_bbsshop_multisell 4002
 bypass npc_%objectid%_multisell 4002
 bypass _bbsmultisell 4002
 bypass -h _multisell 4002
не дают никакой реакции
	 
	
	
	
		
	Сообщений: 5,862 
	Тем: 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,101 
	Тем: 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,101 
	Тем: 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 мультиселла.
	 |