Пакет AttackRequest

  • Автор темы Автор темы nesss
  • Дата начала Дата начала

nesss

Единомышленник
Участник
Сообщения
171
Розыгрыши
0
Решения
3
Репутация
-2
Реакции
15
Баллы
130
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Собственная
Всем привет, подскажите по пакету. Как сервер понимает, когда с зажатым Ctrl игрок атакует или без?
 
Только написал тему, и сам разобрался, удалите плиз тему ))
 
Реакции: raz
Только написал тему, и сам разобрался, удалите плиз тему ))
Так не работает, если ты выяснил, то напиши как, что, уже мануал делай, чтоб другие загуглить могли или удовлетворить своё любопытство.

P.S. Но если ты ты анализировал пакеты через пакетхак, у тебя такого вопроса бы не было.
 
Ну в том то и дело, что я не анализировал, а руководствовался уже другими сборками, так вот там пакет написан не правильно, практически во всех сборках, там идет так:
Java:
public final class AttackRequest extends L2GameClientPacket
{
    private int _objectId;
    private boolean _isShiftAction;
    
    @Override
    protected void readImpl()
    {
        _objectId = readD();
        readD(); // originX
        readD(); // originY
        readD(); // originZ
        _isShiftAction = readC() != 0;
    }
    
    @Override
    protected void runImpl()
    {
        final Player player = getClient().getPlayer();
        if (player == null)
            return;
        
        if (player.isOutOfControl())
        {
            player.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        if (player.isInObserverMode())
        {
            player.sendPacket(SystemMessageId.OBSERVERS_CANNOT_PARTICIPATE);
            player.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // avoid using expensive operations if not needed
        final WorldObject target = (player.getTargetId() == _objectId) ? player.getTarget() : World.getInstance().getObject(_objectId);
        
        if (target == null)
        {
            player.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // (player.getTarget() == target) -> This happens when you control + click a target without having had it selected beforehand. Behaves as the Action packet and will NOT trigger an attack.
        target.onAction(player, (player.getTarget() == target), _isShiftAction);
    }
}

Но по сути private boolean _isShiftAction; в данном пакете будет false, так как данный пакет отправляется от клиента только когда уже зажат Ctrl, без зажатого Ctrl даже если ты жмешь на объект и жмешь кнопку атаковать в действиях, получаешь пакет действия, тот который получает сервер при инициализации действия клиентом (а именно клик по объекту), первый клик берет в таргет, второй следует за таргетом.
 
там есть еще прикол с shift - который как раз аналог "standattack" в макросах, но только для обычных действий.
 
Реакции: raz
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…