L2PacketHack Форум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела! Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
Обсуждение багов Lineage ЗАПРЕЩЕНО!
18.01.2008, 20:02
#1
Новичок
Регистрация: 06.11.2007
Сообщений: 7
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
l2phx & kamael
Будет ли совместимость? Там видимо поменялся алгоритм шифрования пакетов.. Может кто уже сделал newxor.dll для камаэль?) Поделитесь пожалуйста)
21.01.2008, 23:51
#3
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
вопрос на засыпку, а нафиг ты сравнивал алгоритмы блоуфиша который тока на логин сервере используется?)
ЗЫ а проблема возможно в длинне пакета с ключём, но думаю всётаки немного они алгоритм сменили...
Добавлено спустя 13 минут 51 секунду:
такс, глянул счас лог камаэля, шифровачка том собсно старая, НО похоже что ID пакетов изменены %)
Добавлено спустя 14 минут 14 секунд:
сорци явы подтвердили изменение Id некоторых пакетов
__________________
Я здесь практически не появляюсь!, Skype - ikskor
22.01.2008, 00:56
#4
Гость
А CryptInit в шифруется чем то?
т.к. у меня в камаэлях крипт инит приходит
Код:
00 01 02 03 04 05 06 07
15 00 2E 01 03 AB 8E 12 05 13 B6 18 01 00 00 00 09 00 00 00 00
15 00 2E 01 84 89 E9 35 21 9E 92 4E 01 00 00 00 09 00 00 00 00
15 00 2E 01 56 F0 6B FC DC 40 07 B9 01 00 00 00 09 00 00 00 00
00 01 02 03 04 05 06 07 08 09 0a 0b
т.е. судя по виду не зашифровано и ключ с 5го по 12й байт?
22.01.2008, 02:38
#5
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
вобщем выложел пакетхак с поддержкой камаеля), тестируйте...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
За это сообщение xkor нажился спасибкой от:
15.02.2008, 23:14
#6
Гость
2 xkor
вот кусок декомпиленого кода из l2j kamael
пакет RequestBuyItem
private static final String m_C__1F_REQUESTBUYITEM = "[C] 1F RequestBuyItem";
в каком месте тут ИД изменен?
16.02.2008, 04:42
#7
Гость
А в каком месте тут вообще ИД? Это строка для отображения в лог, можно написать:
private static final String m_C__1F_REQUESTBUYITEM ='Васек купил картошку', и ИДшник от этого не изменицца :D
16.02.2008, 12:29
#8
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
во во, ид смотри в начале функции writeImpl, например вот
Код:
protected final void writeImpl()
{
writeC(0x01);
writeD(_objectId);
...
тут ИД - 01
__________________
Я здесь практически не появляюсь!, Skype - ikskor
16.02.2008, 23:42
#9
Гость
чуваки, я походу совсем ниче не вижу, ткните меня носом где тут ИД пакета записан?
кстати l2phx, присваивает этому пакету ИД= 40.
Код:
package net.sf.l2j.gameserver.clientpackets;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.TradeController;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.MerchantPriceConfigTable;
import net.sf.l2j.gameserver.model.L2TradeList;
import net.sf.l2j.gameserver.model.PcInventory;
import net.sf.l2j.gameserver.model.actor.instance.*;
import net.sf.l2j.gameserver.model.entity.Castle;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.*;
import net.sf.l2j.gameserver.templates.L2Item;
import net.sf.l2j.gameserver.util.Util;
// Referenced classes of package net.sf.l2j.gameserver.clientpackets:
// L2GameClientPacket
public final class RequestBuyItem extends L2GameClientPacket
{
private static final String m_C__1F_REQUESTBUYITEM = "[C] 1F RequestBuyItem";
private static Logger m_log = Logger._getLoggerStringLogger(net/sf/l2j/gameserver/clientpackets/RequestBuyItem.getName());
private int m_listId;
private int m_count;
private int m_items[];
public RequestBuyItem()
{
}
protected void _readImplvV()
{
m_listId = _readDvI();
m_count = _readDvI();
if(m_count * 2 < 0 || m_count * 8 > m_buf._remainingvI() || m_count > Config.m_MAX_ITEM_IN_PACKETI)
m_count = 0;
m_items = new int[m_count * 2];
for(int i = 0; i < m_count; i++)
{
int itemId = _readDvI();
m_items[i * 2 + 0] = itemId;
long cnt = _readDvI();
if(cnt > 0x7fffffffL || cnt < 0L)
{
m_count = 0;
m_items = null;
return;
}
m_items[i * 2 + 1] = (int)cnt;
}
}
protected void _runImplvV()
{
L2PcInstance player = ((L2GameClient)_getClientvMMOClient())._getActiveCharvL2PcInstance();
if(player == null)
return;
if(!Config.m_ALT_GAME_KARMA_PLAYER_CAN_SHOPZ && player._getKarmavI() > 0)
return;
net.sf.l2j.gameserver.model.L2Object target = player._getTargetvL2Object();
if(!player._isGMvZ() && (target == null || !(target instanceof L2MerchantInstance) && !(target instanceof L2FishermanInstance) && !(target instanceof L2MercManagerInstance) && !(target instanceof L2ClanHallManagerInstance) && !(target instanceof L2CastleChamberlainInstance) || !player._isInsideRadiusL2ObjectZZZ(target, 150, false, false)))
return;
boolean ok = true;
String htmlFolder = "";
if(target != null)
{
if(target instanceof L2FishermanInstance)
htmlFolder = "fisherman";
else
if(target instanceof L2MerchantInstance)
htmlFolder = "merchant";
else
ok = false;
} else
{
ok = false;
}
L2MerchantInstance merchant = null;
if(ok)
merchant = (L2MerchantInstance)target;
else
if(!ok && !player._isGMvZ())
{
player._sendMessageStringV("Invalid Target: Seller must be targetted");
return;
}
L2TradeList list = null;
if(merchant != null)
{
List lists = TradeController.getInstance()._getBuyListByNpcIdIList(merchant._getNpcIdvI());
if(!player._isGMvZ())
{
if(lists == null)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
return;
}
Iterator i$ = lists._iteratorvIterator();
do
{
if(!i$._hasNextvZ())
break;
L2TradeList tradeList = (L2TradeList)i$._nextvObject();
if(tradeList._getListIdvI() == m_listId)
list = tradeList;
} while(true);
} else
{
list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
}
} else
{
list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
}
if(list == null)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
return;
}
m_listId = list._getListIdvI();
if(m_count < 1)
{
_sendPacketL2GameServerPacketV(new ActionFailed());
return;
}
double castleTaxRate = 0.0D;
double baseTaxRate = 0.0D;
if(merchant != null)
{
castleTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getCastleTaxRatevD();
baseTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getBaseTaxRatevD();
}
long subTotal = 0L;
int castleTax = 0;
int baseTax = 0;
long slots = 0L;
long weight = 0L;
for(int i = 0; i < m_count; i++)
{
int itemId = m_items[i * 2 + 0];
int count = m_items[i * 2 + 1];
int price = -1;
net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
if(tradeItem == null)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
return;
}
L2Item template = ItemTable.getInstance()._getTemplateIL2Item(itemId);
if(template == null)
continue;
if(count > 0x7fffffff || !template._isStackablevZ() && count > 1)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase invalid quantity of items at the same time.").toString(), Config.m_DEFAULT_PUNISHI);
SystemMessage sm = new SystemMessage(SystemMessageId.m_YOU_HAVE_EXCEEDED_QUANTITY_THAT_CAN_BE_INPUTTEDSystemMessageId);
_sendPacketL2GameServerPacketV(sm);
sm = null;
return;
}
price = list._getPriceForItemIdII(itemId);
if(itemId >= 3960 && itemId <= 4026)
price = (int)((float)price * Config.m_RATE_SIEGE_GUARDS_PRICEF);
if(price < 0)
{
m_log._warningStringV("ERROR, no price found .. wrong buylist ??");
_sendPacketL2GameServerPacketV(new ActionFailed());
return;
}
if(price == 0 && !player._isGMvZ() && Config.m_ONLY_GM_ITEMS_FREEZ)
{
player._sendMessageStringV("Ohh Cheat dont work? You have a problem now!");
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried buy item for 0 adena.").toString(), Config.m_DEFAULT_PUNISHI);
return;
}
if(tradeItem._hasLimitedStockvZ() && count > tradeItem._getCurrentCountvI())
return;
subTotal += (long)count * (long)price;
castleTax = (int)((double)subTotal * castleTaxRate);
baseTax = (int)((double)subTotal * baseTaxRate);
if(subTotal + (long)castleTax + (long)baseTax > 0x7fffffffL)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase over ").append(0x7fffffff).append(" adena worth of goods.").toString(), Config.m_DEFAULT_PUNISHI);
return;
}
weight += (long)count * (long)template._getWeightvI();
if(!template._isStackablevZ())
{
slots += count;
continue;
}
if(player._getInventoryvPcInventory()._getItemByItemIdIL2ItemInstance(itemId) == null)
slots++;
}
if(weight > 0x7fffffffL || weight < 0L || !player._getInventoryvPcInventory()._validateWeightIZ((int)weight))
{
_sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_WEIGHT_LIMIT_EXCEEDEDSystemMessageId));
return;
}
if(slots > 0x7fffffffL || slots < 0L || !player._getInventoryvPcInventory()._validateCapacityIZ((int)slots))
{
_sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_SLOTS_FULLSystemMessageId));
return;
}
if(subTotal < 0L || !player._reduceAdenaStringL2ObjectvZ("Buy", (int)(subTotal + (long)baseTax + (long)castleTax), player._getLastFolkNPCvL2FolkInstance(), false))
{
_sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_YOU_NOT_ENOUGH_ADENASystemMessageId));
return;
}
for(int i = 0; i < m_count; i++)
{
int itemId = m_items[i * 2 + 0];
int count = m_items[i * 2 + 1];
if(count < 0)
count = 0;
net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
if(tradeItem == null)
{
Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
continue;
}
if(tradeItem._hasLimitedStockvZ())
{
if(tradeItem._decreaseCountIZ(count))
player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
} else
{
player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
}
}
if(merchant != null)
{
merchant._getCastlevCastle()._addToTreasuryIV(castleTax);
String html = HtmCache.getInstance()._getHtmStringString((new StringBuilder()).append("data/html/").append(htmlFolder).append("/").append(merchant._getNpcIdvI()).append("-bought.htm").toString());
if(html != null)
{
NpcHtmlMessage boughtMsg = new NpcHtmlMessage(merchant._getObjectIdvI());
boughtMsg._setHtmlStringV(html._replaceAllStringString("%objectId%", String.valueOf(merchant._getObjectIdvI())));
player._sendPacketL2GameServerPacketV(boughtMsg);
}
}
StatusUpdate su = new StatusUpdate(player._getObjectIdvI());
su._addAttributeIIV(14, player._getCurrentLoadvI());
player._sendPacketL2GameServerPacketV(su);
player._sendPacketL2GameServerPacketV(new ItemList(player, true));
}
public String getType()
{
return "[C] 1F RequestBuyItem";
}
}
16.02.2008, 23:59
#10
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
с пакетами от клиента сложнее.., надо искать файл в котором они принимаются, дешифруются и уже по ИД распределяются между такими модулями...
я его чтот ненашел)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 19:51 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!