Баги. Страшные, серьезные... и пока непреодолимые (для меня)

 
+
-
edit
 

yobzhik

новичок
Всем привет.
Долго тут отсутствовал, занимался исключительно офом, но вот решил вернуться на яву.
Но.. вот парадокс, Фортресс как я понимаю умер для общественности, и остаеться достоянием 10-ти разработчиков (число не буквальное).
Пытался вернуться, но Бал не отвечает на ПМ, а конфа жабберская, такое впечатление что не существует....
Вообщем, столкнулся с 2-мя багами, довольно-таки серьезными, потехоньку убивающими сервера...
1 - это заточка магазинных вещей.
2 - мультипрофы.

Смысл багов и их использование, пожалуй объяснять тут не стану, т.к. много читателей не из разраб части. Скажу одно - пофиксить я знаю как, но, если можно так выразиться - незнаю где...
По поводу первого - вопрос: где описываеться процедура превращения компрессированных СС в нормальные ?
По поводу второго - вариантов есть несколько, но я пока склоняюсь к мини-квесту, либо дополнительной проверке.... Опять-таки незнаю где именно копать (больше чем за год - забыл полностью структуру сервера =( )..
Если девелы снизойдут до подсказки - буду премного благодарен (извените за язвость, но просто по постам увидел отношение некоторых девов к общественности желающей примкнуть в их ряды).
 

Murkt

Pythoneer

где описываеться процедура превращения компрессированных СС в нормальные
 

handler.itemhandlers

1 - это заточка магазинных вещей.
 

Почти всё, с этим связанное - clientpackets.

2 - мультипрофы.
 

Форт + Ява. Смотри, как меняются профессии из форта, ставь проверку в соответствующей ява-функции.
[team Їжачки - сумні падлюки]  

Murkt

Pythoneer

извените за язвость, но просто по постам увидел отношение некоторых девов к общественности желающей примкнуть в их ряды
 

Извините, а в большинстве случаев по-другому не получается воспринимать. Большинство "кандидатов" ставит вопрос так - "дайте-ка мне сборку, а я посмотрю, пощупаю, и скажу - буду ли я чего-то делать, или нет".
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
Извините, а в большинстве случаев по-другому не получается воспринимать. Большинство "кандидатов" ставит вопрос так - "дайте-ка мне сборку, а я посмотрю, пощупаю, и скажу - буду ли я чего-то делать, или нет".
 


Ну скажем так - я был, я делал.
Я уже не есть, но делать желание еще есть...
Но вот после перестановки форума, я изчез из списка Девов, и вернуться, как я вижу, туда уже нереально.
Хотя очень печально =(

З.Ы. Спасибо за подсказку. Буду копать.
З.Ы.Ы. Забил я на яву в свое время только по тому, что не мог скачать сборку - свн глючил, недочкачивал, а собранную не мог качнуть т.к. я из Украины =(
 

Murkt

Pythoneer

Ну скажем так - я был, я делал.
Я уже не есть, но делать желание еще есть...
Но вот после перестановки форума, я изчез из списка Девов, и вернуться, как я вижу, туда уже нереально.
Хотя очень печально =(
 

Ну так я же и не говорю про всех. Реально с закрытия сборка команда минимум в полтора раза увеличилась, если не в два.

З.Ы.Ы. Забил я на яву в свое время только по тому, что не мог скачать сборку - свн глючил, недочкачивал, а собранную не мог качнуть т.к. я из Украины =(
 

Замечено вчера в джаббере - 7-8 людей из Украины, один - из России.
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
Ну так я же и не говорю про всех. Реально с закрытия сборка команда минимум в полтора раза увеличилась, если не в два.
Замечено вчера в джаббере - 7-8 людей из Украины, один - из России.
 


Про Украину относилось к сборке, а не к жаберу...
А к жабе конекчусь... фиги 2.. Сервер conference.balancer.ru канал la2 и хренушки... говорят унейбл ту коннект =(
 
+
-
edit
 

yobzhik

новичок
Муркт, подскажи пожалуйста, вот в таком виде пойдет ?

З.Ы, Обрати внимание на цикл - я в нем не уверен...
Получиться должно нечто вроде компресед соулшотс, только для стрел (думаю ты это и сам понял).
Да, и нужно где-то объявлять этот хендлер типа инклюда ?

Заранее благодарен за неоценимую помощь.
code text
  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 2, or (at your option)
  5.  * any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15.  * 02111-1307, USA.
  16.  *
  17.  * http://www.gnu.org/copyleft/gpl.html
  18.  */
  19. package net.sf.l2j.gameserver.handler.itemhandlers;
  20.  
  21. import net.sf.l2j.gameserver.ItemTable;
  22. import net.sf.l2j.gameserver.handler.IItemHandler;
  23. import net.sf.l2j.gameserver.model.L2ItemInstance;
  24. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  25. import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance;
  26. import net.sf.l2j.gameserver.serverpackets.ItemList;
  27. import net.sf.l2j.gameserver.serverpackets.SystemMessage;
  28.  
  29. /**
  30.  * This class ...
  31.  *
  32.  * @version $Revision: 1.1.2.1.2.3 $ $Date: 2005/03/27 15:30:07 $
  33.  */
  34.  
  35. public class ArrowsPacks implements IItemHandler
  36. {
  37.         private static int[] _itemIds ={
  38.                                          10000, 10001, 10002, 10003, 10004, 10005 // Arrows
  39.                                        };
  40.        
  41.         public void useItem(L2PlayableInstance playable, L2ItemInstance item)
  42.         {
  43.                 if (!(playable instanceof L2PcInstance))
  44.                         return;
  45.                 L2PcInstance activeChar = (L2PcInstance)playable;
  46.  
  47.             int itemId = item.getItemId();
  48.             int itemToCreateId = 0;
  49.             int amount = 0; // default regular pack
  50.            
  51.             if (itemId >= 10000 && itemId <= 10005) // Arrows
  52.             {
  53.                 if (itemId == 10005) // S Grade
  54.                         itemToCreateId = 1345;
  55.                 else
  56.                         if (itemId == 10004) // A Grade
  57.                                         itemToCreateId = 1344;
  58.                                 else
  59.                                         if (itemId == 10003) // B Grade
  60.                                                 itemToCreateId = 1343;
  61.                                         else
  62.                                                 if (itemId == 10002) // C Grade
  63.                                                         itemToCreateId = 1342;
  64.                                                 else
  65.                                                         if (itemId == 10001) //D Grade
  66.                                                                 itemToCreateId = 1341;
  67.                                                         else
  68.                                                                 if (itemId == 10000) // Non Grade
  69.                                                                         itemToCreateId = 17;
  70.                                                                
  71.                 amount = 1000;
  72.             }
  73.  
  74.             unpackPackage(activeChar,itemToCreateId,amount);
  75.                 activeChar.removeItemFromInventory(item, 1);
  76.         }
  77.        
  78.         private void unpackPackage(L2PcInstance actor, int itemId, int amount)
  79.         {
  80.                 L2ItemInstance pack = ItemTable.getInstance().createItem(itemId);
  81.                 pack.setCount(amount);
  82.                 actor.getInventory().addItem(pack);
  83.                
  84.             SystemMessage sm = new SystemMessage(SystemMessage.EARNED_S2_S1_s);
  85.             sm.addItemName(itemId);
  86.             sm.addNumber(amount);
  87.         actor.sendPacket(sm);
  88.  
  89.                 actor.sendPacket(new ItemList(actor, false));
  90.  
  91.         }
  92.        
  93.         public int[] getItemIds()
  94.         {
  95.                 return _itemIds;
  96.         }
  97. }
 
+
-
edit
 
А как добавишь в клиента?
Пытаясь понять рекурсию, следи за тем, чтобы она не поняла тебя первой...  
+
-
edit
 

yobzhik

новичок
А как добавишь в клиента?
 


Вот как раз это не проблема.
Я с офф сервером настолько клиента перекопал....

З.Ы. стоп... добавить итем - это фигня... Если я правильно допер - нужно и хендлер в клиента вставлять ? Блин.. тогда нужно искать другой путь решения данной траблы.....Просто насколько я помню с офф, сделать итем юзабельным - не проблема... Тут... даже незнаю.. может я что-то пропустил....или уже запутался... Ну вообщем, если данный хендлер сервер схавает, тогда буду дальше голову ломать.
 
+
-
edit
 
Должно сработать.
Пытаясь понять рекурсию, следи за тем, чтобы она не поняла тебя первой...  

Murkt

Pythoneer

Вместо ужасного if else if else всунь switch-case :) Оно быстрее работает, и красивее выглядит.

Проверять if (itemId &gt;= 10000 &amp;&amp; itemId &lt;= 10005) нет никакой надобности - тебе другие не придут.

Регистрировать хендлер в Gameserver.java. Клиент и сам посылает при дабл-клике в любом случае, насколько я знаю.

Цикла вообще не увидел, потому ничего про него сказать не могу :)
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
Вместо ужасного if else if else всунь switch-case :) Оно быстрее работает, и красивее выглядит.

Проверять if (itemId >= 10000 && itemId <= 10005) нет никакой надобности - тебе другие не придут.

Регистрировать хендлер в Gameserver.java. Клиент и сам посылает при дабл-клике в любом случае, насколько я знаю.

Цикла вообще не увидел, потому ничего про него сказать не могу :)
 


Оки, сейчас попробую переделать....

З.Ы. Вот и с клиентом я тож подумал - траблов быть не должно. А про цикл.. я имел в виду if|else )

Выходит где-то так ?
code text
  1.                 switch (itemId) {
  2.                 case 10005:
  3.                         itemToCreateId = 1345;
  4.                         amount = 1000;
  5.                         break;
  6.                 case 10004:
  7.                         itemToCreateId = 1344;
  8.                         amount = 1000;
  9.                         break;
  10.                 case 10003:
  11.                         itemToCreateId = 1343;
  12.                         amount = 1000;
  13.                         break;
  14.                 case 10002:
  15.                         itemToCreateId = 1342;
  16.                         amount = 1000;
  17.                         break;
  18.                 case 10001:
  19.                         itemToCreateId = 1341;
  20.                         amount = 1000;
  21.                         break;
  22.                 case 10000:
  23.                         itemToCreateId = 17;
  24.                         amount = 1000;
  25.                         break;
  26.                 }
 
+
-
edit
 

yobzhik

новичок
Что-то видать я не учел....

code text
  1. [javac] symbol  : class ArrowPacks
  2.     [javac] location: package net.sf.l2j.gameserver.handler.itemhandlers
  3.     [javac] import net.sf.l2j.gameserver.handler.itemhandlers.ArrowPacks;
  4.     [javac] ^
  5.     [javac] 1 error
  6.  
  7. BUILD FAILED
 

Murkt

Pythoneer

это где ты его импортишь, что оно у тебя ошибку кажет?


Циклом называют for/while, а никак не дерево условий :)

Если ты в каждом пункте делаешь amount=1000, не проще ли вынести его наружу условий?
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
это где ты его импортишь, что оно у тебя ошибку кажет?


Циклом называют for/while, а никак не дерево условий :)

Если ты в каждом пункте делаешь amount=1000, не проще ли вынести его наружу условий?
 


Я его вставил в itemhandlers рядом с компресед соулшотами, объвил где ты сказал, и в еклипсе при билде такую фишку показывает...

З.Ы. Ты извени за глупые вопросы, я по яве неочень, как никак более года не держал ее в руках... =(
 
+
-
edit
 

yobzhik

новичок
Вообщем мультипрофу поборол самым банальным способом.
Кому интересно - пишите...
А вот с энчантом магазинных вещей... тут нужно будет серьезно подумать...

Муркт, не подскажешь, что именно вызывает окошко кол-ва вещей, при покупки или перетаскивании допустим стрел ?
Бо затея с разпаковкой стре не пройдет... =(
 

Murkt

Pythoneer

а!

У тебя как класс называется? ArrowsPacks. А что ты импортишь? А импортишь ты ArrowPacks. Правь название :)
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
а!

У тебя как класс называется? ArrowsPacks. А что ты импортишь? А импортишь ты ArrowPacks. Правь название :)
 


Тю =-)
От я чехол =)
Но... ве равно, это идея конечно хорошая, но она успеха не принесет...
Эт я уже понял, т.к. есть еще трейд, или просто перетаскивание/выкидывание вещей...
Потому нужно переписывать класс окошка ввода числа, чтоб при открытии окошка, к нему привязывался ID выбраной вещи, и если выбирать другую вещь - окошко закрывалось.... Только так =(
А где копать это окошко - я незнаю =(
 

Murkt

Pythoneer

Запрети unstackable вещи в количестве, большем одного.

На оффе это вообще гораздо более интересно сделано - у них параметр энчанта, количество и уровень пета хранятся в одной и той же ячейке. То есть - или то, или то, или то :)
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
Запрети unstackable вещи в количестве, большем одного.

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


Про офф я знаю, а вот как тут....
ЗАпретить... где ? В клиенте ? Или сервере ? Я чет не понял =(
 

Murkt

Pythoneer

в сервере конечно. Клиент такого как бы не понимает.
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
в сервере конечно. Клиент такого как бы не понимает.
 


В клиенте даже в нестаковых вещей, есть параметр максстак... Хотя он насколько я понял не работает изначально, т.к. везде стоит 20...

З.Ы. А де копать не подскажешь ?
 

Murkt

Pythoneer

я в самом первом сообщении подсказал :)
[team Їжачки - сумні падлюки]  
+
-
edit
 

yobzhik

новичок
я в самом первом сообщении подсказал :)
 


ммм.. все, мои мозги истощены...
Искал искал... ничего подобного не нашел, а мои познания в сервере, не позволят мне написать кусок кода самому или вообще чет самому придумать =(
Я сдох =(
 

Murkt

Pythoneer

clientpackets - buy, enchant, drop, delete. Проверяй count < 0, проверяй isStackable && count != 1...
[team Їжачки - сумні падлюки]  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru