Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
WOLKkr Написал:В чем вся суть. В конфиге ставишь ServerType = Normal (Заходишь на артею), все работает. Но когда меняешь значение на Classic, перестает отображаться квест лист.
ну дак может в зависимости от типа меняются структуры пакетов.
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Mifesto Написал:проверяйте структуру пакета QuestList
П.С. Как видно в чате у вас еще неверный пакет SystemMessage.
Пакеты можно посмотреть по ссылке https://github.com/L2J/L2J_Server/tree/ertheia Не systemMessage, а проблема с итемдатой (итемы не прописаны).
Сообщений: 527
Тем: 17
Зарегистрирован: Oct 2010
Репутация:
1,919
Zubastic Написал:Не systemMessage, а проблема с итемдатой (итемы не прописаны).
Вы не правы, если бы итемы не были прописаны оно бы выбило ошибку в ГС или как то по другому сказало и в чате бы не выдало сообщение.
А так это ошибка в структуре пакета SystemMessage.
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
03-16-2015, 06:14 PM
(Сообщение последний раз редактировалось: 03-20-2015, 02:49 PM Daan Raven.)
Mifesto Написал:Вы не правы, если бы итемы не были прописаны оно бы выбило ошибку в ГС или как то по другому сказало и в чате бы не выдало сообщение.
А так это ошибка в структуре пакета SystemMessage.
Тогда бы эквип отображался неправильно, либо вообще не отображался. По сути, мб квеста такового в классике нет? Не разбирался, как там работает система файлов *-ru и -ru_classic (или как их там).
Открыть спойлер
'offtop'У кого личная неприязнь ко мне? Не пойму, что в данном комментарии такого негативного...
Сообщений: 16
Тем: 1
Зарегистрирован: Jan 2015
Репутация:
0
Warencense Написал:Тогда бы эквип отображался неправильно, либо вообще не отображался. По сути, мб квеста такового в классике нет? Не разбирался, как там работает система файлов *-ru и -ru_classic (или как их там).
Возможно ты и прав) Может и нет такого квеста, по этому и отображения тоже нет
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
WOLKkr Написал:Возможно ты и прав) Может и нет такого квеста, по этому и отображения тоже нет
Ну а ты попробуй какой-то простенький квест классика воссоздать (хотя бы частично), дабы проверить, появляется ли он в списке. Потому что в энджине я увидел только одну версию QuestList, то есть структура пакетов правильная.
Сообщений: 16
Тем: 1
Зарегистрирован: Jan 2015
Репутация:
0
Warencense Написал:Ну а ты попробуй какой-то простенький квест классика воссоздать (хотя бы частично), дабы проверить, появляется ли он в списке. Потому что в энджине я увидел только одну версию QuestList, то есть структура пакетов правильная.
Воссоздал, все работает.
Сообщений: 171
Тем: 18
Зарегистрирован: Dec 2012
Репутация:
1,867
есть у кого 603 system чистый?
Сообщений: 329
Тем: 16
Зарегистрирован: Nov 2014
KillMozg Написал:есть у кого 603 system чистый?
ДЫК
Сообщений: 329
Тем: 16
Зарегистрирован: Nov 2014
03-20-2015, 02:02 PM
(Сообщение последний раз редактировалось: 03-27-2015, 04:15 PM GenCloud.)
Пакеты алхимии.
P.S. структура ExTryMixCube не точная ибо не хватает снифа для тяж камней, одно знаю точно, если в поле "type" слать 0, то появляется окошко для вывода полученный тяж камней и обычных.
P.P.S. строго не судите по реализации, формула полученных камней не точная, требуется доработка.
RequestAlchemyConverion
Код: public class RequestAlchemyConversion extends L2GameClientPacket {
private int _skillId;
private int _skillLevel;
private int _skillUseCount;
private int _unk;
private long _resultItemCount = 0;
private long _resultFailCount = 0;
@Override
protected void readImpl()
{
_skillUseCount = readD();
_unk = readH(); //unk = 10; хз что это
_skillId = readD();
_skillLevel = readD();
readB(new byte[28]);
}
@Override
protected void runImpl()
{
L2PcInstance activeChar = getClient().getActiveChar();
L2Skill skill = SkillTable.getInstance().getInfo(_skillId, _skillLevel);
L2AlchemySkill aSkill = skill.getAlchemySkill();
L2ItemInstance invitem = null;
if (activeChar == null || activeChar.getRace() != Race.Arteas)
{
return;
}
double chance = 100;
for(int i = 0 ; i < _skillUseCount; i++)
{
List<ItemHolder> creationList = new ArrayList<>();
boolean ok = Rnd.getChance(chance);
aSkill.getProductItems().stream().filter(item -> chance > 50).forEach(item ->
{
creationList.addAll(item.getItems());
});
creationList.forEach(holder ->
activeChar.getInventory().destroyItemByItemId(ProcessType.ALCHEMY, holder.getId(), holder.getCount(), activeChar, null));
if (ok)
{
_resultItemCount = skill.getGiveItemCount() * _skillUseCount;
}
else
{
_resultFailCount++;
}
}
if (_resultItemCount > 0)
{
invitem = activeChar.getInventory().addItem(ProcessType.ALCHEMY, skill.getGiveItemId(), _resultItemCount, activeChar, null);
}
if (_resultFailCount > 0)
{
invitem = activeChar.getInventory().addItem(ProcessType.ALCHEMY, skill.getGiveItemId(), _resultFailCount, activeChar, null);
}
activeChar.sendPacket(new ExAlchemyConversion(_resultItemCount, _resultFailCount));
if(Config.FORCE_INVENTORY_UPDATE)
{
activeChar.sendPacket(new ItemList(activeChar, false));
}
else
{
InventoryUpdate playerIU = new InventoryUpdate();
playerIU.addItem(invitem);
sendPacket(playerIU);
}
}
@Override
public String getType() {
return getClass().getSimpleName();
}
}
RequestTryMixCube
Код: public class RequestAlchemyTryMixCube extends L2GameClientPacket {
private int _activeItems;
private int[] _objId;
private long[] _itemCounts;
private long _allPrice = 0;
private long _stoneCount;
private final int _stoneID = 39461;
private boolean _isActiveMegaStone = false;
@Override
protected void readImpl()
{
_activeItems = readD();
_objId = new int[5];
_itemCounts = new long[5];
switch (_activeItems)
{
case 1:
{
_objId[1] = readD();
_itemCounts[1] = readQ();
break;
}
case 2:
{
_objId[1] = readD();
_itemCounts[1] = readQ();
_objId[2] = readD();
_itemCounts[2] = readQ();
break;
}
case 3:
{
_objId[1] = readD();
_itemCounts[1] = readQ();
_objId[2] = readD();
_itemCounts[2] = readQ();
_objId[3] = readD();
_itemCounts[3] = readQ();
break;
}
case 4:
{
_objId[1] = readD();
_itemCounts[1] = readQ();
_objId[2] = readD();
_itemCounts[2] = readQ();
_objId[3] = readD();
_itemCounts[3] = readQ();
_objId[4] = readD();
_itemCounts[4] = readQ();
break;
}
}
}
@Override
protected void runImpl()
{
final L2PcInstance activeChar = getClient().getActiveChar();
if ((activeChar == null) || (activeChar.getRace() != Race.Arteas))
{
return;
}
for (int i = 1; i <= _activeItems; i++)
{
_allPrice = _allPrice + _itemCounts[i] * activeChar.getInventory().getItemByObjectId(_objId[i]).getReferencePrice();
activeChar.getInventory().destroyItem(ProcessType.ALCHEMY, _objId[i], _itemCounts[i], activeChar, "Alchemy");
}
_stoneCount = _allPrice / 10000; //TODO формула не верный коэффициент
activeChar.getInventory().addItem(ProcessType.ALCHEMY, _stoneID , _stoneCount , activeChar, "Alchemy");
activeChar.sendPacket(new ExTryMixCube(_stoneCount, _stoneID, 0));
activeChar.sendPacket(new ItemList(activeChar, false));
}
@Override
public String getType() {
return getClass().getSimpleName();
}
}
ExAlchemyConversion
Код: public class ExAlchemyConversion extends L2GameServerPacket
{
private final int _itemCount;
private final long _failCount;
public ExAlchemyConversion(int itemCount, long failCount)
{
_itemCount = itemCount;
_failCount = failCount;
}
@Override
protected void writeImpl() {
writeC(0x00); //unk
writeD(_itemCount);
writeD((int) _failCount);
}
}
ExAlchemySkillList
Код: public class ExAlchemySkillList extends L2GameServerPacket
{
private final List<L2Skill> _skills = new ArrayList<>();
public ExAlchemySkillList(final L2PcInstance player)
{
_skills.addAll(player.getAllSkills().stream().filter(skill -> SkillTreesData.getInstance().getAlchemySkill(skill.getId(), skill.getLevel()) != null).map(skill -> skill).collect(Collectors.toList()));
}
@Override
protected void writeImpl()
{
writeD(_skills.size());
for (L2Skill skill : _skills)
{
writeD(skill.getId());
writeD(skill.getLevel());
writeQ(0x00); //Всегла 0
int visible = 0x01;
if(skill.getId() == 17943) {
visible = 0x00;
}
writeC(visible);
}
}
}
ExTryMixCube
Код: public class ExTryMixCube extends L2GameServerPacket
{
private int _stoneID;
private long _count;
private int _typePacket;
public ExTryMixCube(long count, int stoneId , int type)
{
_count = count;
_typePacket = type;
_stoneID = stoneId;
}
@Override
protected void writeImpl()
{
writeC(0x00); //unk
writeC(0x01); //type
writeD(0x00); //unk
writeD(_stoneID); //stoneID
writeQ(_count); //count
}
}
P.S> Bonux, скорей лич инфу, а то удалю, не успеешь сделать алхимию под своими копирайтами.
|