Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
Anderson Написал:Здравствуйте! У меня вопрос насчёт пакета EnterWorld.
Я портирую своего бота с интерлюда на валианс. Всю процедуру конекта успешно перенёс, вот только после посылки EnterWorld герой спавнится в городе мёртвым. Разобрал уже весь трафик сто раз. Не подскажете, в чём беда?
Также ему нельзя писать, хотя в игре его труп видно и пакеты боту приходят.
Наперёд спасибо!
Добавлено через 1 минуту
Также приходится слать пакет Appearing после EnterWorld, иначе пакеты с мира не начинают сыпатся (что тоже странно).
А пакеты старые, на новые заменял? Типа UserInfo -> ExUserInfo и т.д.
Сообщений: 10
Тем: 1
Зарегистрирован: Jan 2014
Репутация:
38
BoneBreaker: да, оправляю всё, как клиент, и с шифрованными опкодами 1- и 2-байтными, только EnterWorld у меня другой (забит нулями). А спавнюсь мертвым всё равно. Самое странное, что один раз из сотни герой появляется живым и полностью в игре *_*
Сообщений: 122
Тем: 6
Зарегистрирован: Sep 2013
Репутация:
112
01-20-2014, 10:39 PM
(Сообщение последний раз редактировалось: 01-20-2014, 11:04 PM VenomRaider.)
ребят, кто разобрался с пакетом нпц???
и я заметил что изменился пакет StatusUpdatePacket.
и кто может дать нормальную Engine.dll без темиды, потому что в дампе не всё есть что хотелось бы
Добавлено через 24 минуты
пакет StatusUpdate теперь выглядит так:
StatusUpdate
PHP код: <?php
<packet id="18" name="StatusUpdate">
<part name="obj_id" type="d"/>
<part name="receicer_id" type="d"/>
<part name="?" type="c"/>
<part name="_attributes.size()" type="c" id="0"/>
<for id="0" name="?">
<part name="_attributes._id" type="c"/>
<part name="_attributes._value" type="d"/>
</for>
</packet>
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
VenomRaider Написал:ребят, кто разобрался с пакетом нпц???
и я заметил что изменился пакет StatusUpdatePacket.
и кто может дать нормальную Engine.dll без темиды, потому что в дампе не всё есть что хотелось бы
Добавлено через 24 минуты
пакет StatusUpdate теперь выглядит так:
StatusUpdate
PHP код: <?php
<packet id="18" name="StatusUpdate">
<part name="obj_id" type="d"/>
<part name="receicer_id" type="d"/>
<part name="?" type="c"/>
<part name="_attributes.size()" type="c" id="0"/>
<for id="0" name="?">
<part name="_attributes._id" type="c"/>
<part name="_attributes._value" type="d"/>
</for>
</packet>
Pendant Написал:лови анпакер ТыК
Там Themnet Unpacker)
Сообщений: 122
Тем: 6
Зарегистрирован: Sep 2013
Репутация:
112
GooD Написал:Там Themnet Unpacker)
а как им пользоваться??
Сообщений: 74
Тем: 3
Зарегистрирован: Nov 2013
VenomRaider Написал:а как им пользоваться??
там есть мануалы внутри(видео) так что вперед изучать:redlol:
Сообщений: 122
Тем: 6
Зарегистрирован: Sep 2013
Репутация:
112
на данный момент, не времени изучать что-либо. не могли бы вы мне дать уже без темиды и вин лиценз дллку???
Сообщений: 10
Тем: 1
Зарегистрирован: Jan 2014
Репутация:
38
Кто-нибудь разобрался с EnterWorld? На еврооффе игнорот серва после него. Иногда (в одном случае из 20-30) пускает. Пинги и ответы на них за это время игнора ходят нормально.
Сообщений: 122
Тем: 6
Зарегистрирован: Sep 2013
Репутация:
112
Anderson Написал:Кто-нибудь разобрался с EnterWorld? На еврооффе игнорот серва после него. Иногда (в одном случае из 20-30) пускает. Пинги и ответы на них за это время игнора ходят нормально. я EnterWorld не менял со времён интерлюда=))) и всё нормально
Сообщений: 102
Тем: 6
Зарегистрирован: Jun 2012
Репутация:
116
VenomRaider Написал:я EnterWorld не менял со времён интерлюда=))) и всё нормально
А как же отсылка ExCastleState для показа замков в Таути? ^^
И Alarm для поиска клана в линдвиоре?
Так что не всё нормально.
По теме: Не ловлю никаких проблем с Enterworld, меня больше напрягает ExNpcInfo, а точнее количество его вариаций.
Набросал, чисто так, в порядке общего бреда:
ExNpcInfo
Код: public ExNpcInfo(NpcInstance cha, Creature attacker, int send, int flag)//скорее всего еще надо будет добавить int 56/68
{
_npcId = cha.getDisplayId() != 0 ? cha.getDisplayId() : cha.getTemplate().npcId;
_isAttackable = attacker != null && cha.isAutoAttackable(attacker);
_rhand = cha.getRightHandItem();
_lhand = cha.getLeftHandItem();
if (Config.SERVER_SIDE_NPC_NAME || cha.getTemplate().displayId != 0 || cha.getName() != cha.getTemplate().name)
_name = cha.getName();
if (Config.SERVER_SIDE_NPC_TITLE || cha.getTemplate().displayId != 0 || cha.getTitle() != cha.getTemplate().title)
{
_title = cha.getTitle();
if (Config.SERVER_SIDE_NPC_TITLE_ETC)
if (cha.isMonster())
if (_title.isEmpty())
_title = "Lv " + cha.getLevel();
else
_title = "Lv " + cha.getLevel() + "|" + _title;
}
_HP = (int) cha.getCurrentHp();
_MP = (int) cha.getCurrentMp();
_CP = (int) cha.getCurrentCp();
_maxHP = cha.getMaxHp();
_maxMP = cha.getMaxMp();
_maxCP = cha.getMaxCp();
isMonster = cha.isMonster();
_showSpawnAnimation = cha.getSpawnAnimation();
_showName = cha.isShowName();
_canTarget = cha.isTargetable();
_state = cha.getNpcState();
_nameNpcString = cha.getNameNpcString();
_titleNpcString = cha.getTitleNpcString();
_transformId = cha.getTransformation();
common(cha,flag,send);
}
public ExNpcInfo(Summon cha, Creature attacker, int send, int flag)
{
if (cha.getPlayer() != null && cha.getPlayer().isInvisible())
return;
_npcId = cha.getTemplate().npcId;
_isAttackable = cha.isAutoAttackable(attacker);
_rhand = 0;
_lhand = 0;
_showName = true;
_name = cha.getName();
_title = cha.getTitle();
_showSpawnAnimation = cha.getSpawnAnimation();
common(cha,flag,send);
}
private void common(Creature cha,int flag, int send)
{
//_pl = (Player) cha;
colHeight = cha.getTemplate().getCollisionHeight();
colRadius = cha.getTemplate().getCollisionRadius();
currentColHeight = cha.getColHeight();
currentColRadius = cha.getColRadius();
_npcObjId = cha.getObjectId();
_loc = cha.getLoc();
_mAtkSpd = cha.getMAtkSpd();
//
Clan clan = cha.getClan();
Alliance alliance = clan == null ? null : clan.getAlliance();
//
clan_id = clan == null ? 0 : clan.getClanId();
clan_crest_id = clan == null ? 0 : clan.getCrestId();
//
ally_id = alliance == null ? 0 : alliance.getAllyId();
ally_crest_id = alliance == null ? 0 : alliance.getAllyCrestId();
_runSpd = cha.getRunSpeed();
_walkSpd = cha.getWalkSpeed();
karma = cha.getKarma();
pvp_flag = cha.getPvpFlag();
_pAtkSpd = cha.getPAtkSpd();
running = cha.isRunning() ? 1 : 0;
incombat = cha.isInCombat() ? 1 : 0;
dead = cha.isAlikeDead() ? 1 : 0;
_aveList = cha.getAveList();
isFlying = cha.isFlying();
_team = cha.getTeam();
_formId = cha.getFormId();
_isNameAbove = cha.isNameAbove();
_atkSpdMul = cha.getAttackSpeedMultiplier();;
_runSpdMul = cha.getMovementSpeedMultiplier();
_titleColor = cha.isServitor() || cha.isPet() ? 1 : 0;
_flag = flag;
stage = send;//0,1,2
// switch(stage)
//{
// case 0:
// switch(flag)
// {
/*case 56:
cases = new byte[]{(byte)0xED,(byte)0xBE,(byte)0x4E,(byte)0xA2,(byte)0x0C};
break;
case 68:
cases = new byte[]{(byte)0xED,(byte)0xFE,(byte)0x4E,(byte)0xA2,(byte)0x0C};
break;*/
//case 143:
// cases = new byte[]{(byte)0xFE,(byte)0xFE,(byte)0xFE,(byte)0xFE,(byte)0xFE};
// break;
// }
// break;
//case 1:
// cases = new byte[]{(byte)0x60,(byte)0x40,(byte)0x00,(byte)0x02,(byte)0x00};
// break;
//}
if(cha.isInCombat())
{
_showed = _showName ? 13 : 4;
}
else
{
_showed = _showName ? 12 : 4;
}
can_writeImpl = true;
}
public ExNpcInfo update()
{
_showSpawnAnimation = 1;
return this;
}
@Override
protected final void writeImpl()
{
if (!can_writeImpl)
return;
writeD(_npcObjId);
writeC(stage);
writeH(37);
writeB(new byte[]{(byte)0xFE,(byte)0xFE,(byte)0xFE,(byte)0xFE,(byte)0xFE});
writeC(7 + _title.length() * 2); // Динамический блок
writeC(_isAttackable ? 1 : 0);
writeD(0x00);//UNK
writeCutS(_title);
switch(stage)
{
case 0:
/*switch(_flag)
{
case 56:
writeH(0x00);
writeH(56);
writeD(_npcId + 1000000);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeC(incombat);//Чек Анимации При нападении
writeC(running);//Предположительно
writeC(dead);//Предположительно
writeC(_showSpawnAnimation);//Предположительно
writeC(_isNameAbove ? 1 : 0);//Визуализирует нпц.
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(_team.ordinal());
writeH(15); //UNK
writeC(15); //UNK
writeD(_HP);
writeD(_maxHP);
writeC(_showed); //UNK
writeC(0); //UNK
writeC(0); //UNK
break;
case 68:
writeH(0x00);
writeH(68);
writeD(_npcId + 1000000);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeH(0x00);//Unknown, но других данных в снифе не видел
writeH(16256);//Unknown, но других данных в снифе не видел
writeH(2199);//Unknown, но других данных в снифе не видел
writeH(16266);//Unknown, но других данных в снифе не видел
writeD(_lhand);
writeD(0x00);
writeD(_rhand);
writeC(incombat);//Чек Анимации При нападении
writeC(running);//Предположительно
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(_isNameAbove ? 1 : 0);//Визуализирует нпц.
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(_team.ordinal());
writeH(15); //UNK
writeC(15); //UNK
writeD(_HP);
writeD(_maxHP);
writeC(_showed);
writeC(0); //UNK
writeC(0); //UNK
break;
case 143:
*/
writeH(0x00);
writeH(143); // статичный блок
writeD(_npcId + 1000000);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
writeD(0x00);
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeF(_runSpdMul);
writeF(_atkSpdMul);
writeC(incombat);//Чек Анимации При нападении
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(_isNameAbove ? 1 : 0);//Визуализирует нпц.
writeC(0x00);//UNK
writeC(0x00);//UNK
writeC(_team.ordinal());// Team - red/blue/none
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(_transformId); //Предположительно
writeD(70); //UNK
writeD(0x00); //UNK
writeD(70);
writeD(_HP);
writeD(_MP);
writeD(_maxHP);
writeD(_maxMP);
writeD(0x00); //UNK
writeD(0x00); //UNK
writeH(15); //UNK
writeC(15); //UNK
writeD(_nameNpcString.getId());
writeD(_titleNpcString.getId());
writeD(_titleColor);
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeD(0x00); //UNK
writeC(0x00); //UNK
writeC(_showed); //UNK
writeC(0); //UNK
writeC(0); //UNK
//break;
//}
break;
case 1:
writeH(0x00);
writeH(12); // статичный блок
writeD(_lhand);
writeD(0x00);
writeD(_rhand);
break;
}
}
}
P.S. Основано на реальном снифе NA.
|