Режим плаванья

Статус
В этой теме нельзя размещать новые ответы.

nesss

Путник
Участник
Сообщения
52
Розыгрыши
0
Решения
2
Репутация
-2
Реакции
8
Баллы
49
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Собственная
Всем привет, такой вопрос, когда под воду опускаюсь скорость перемещения не меняется, если опускаюсь на дно, бегу с той же скоростью, что и на суше, хотя в пакете UserInfo указывал скорость плаванья меньшую
 
Решение
1718037665220.png
Java:
    public void writeImpl(GameClient client, WritableBuffer buffer)
    {
        ServerPackets.USER_INFO.writeId(this, buffer);
        buffer.writeInt(_player.getX());
        buffer.writeInt(_player.getY());
        buffer.writeInt(_player.getZ());
        buffer.writeInt(_player.getVehicle() != null ? _player.getVehicle().getObjectId() : 0);
        buffer.writeInt(_player.getObjectId());
        buffer.writeString(_player.getAppearance().getVisibleName());
        buffer.writeInt(_player.getRace().ordinal());
        buffer.writeInt(_player.getAppearance().isFemale());
        buffer.writeInt(_player.getBaseClass());
        buffer.writeInt(_player.getLevel());
        buffer.writeLong(_player.getExp())...
Всем привет, такой вопрос, когда под воду опускаюсь скорость перемещения не меняется, если опускаюсь на дно, бегу с той же скоростью, что и на суше, хотя в пакете UserInfo указывал скорость плаванья меньшую
а вы говорите клиенту что чар должен плавать?
 
Ну я реализовал регионы и зоны, как чар заходит в зону воды, и его голова опускается ниже уровня воды, то есть под воду, появляется полоска дыхания, по завершению полоски начинает отниматься ХП, это я реализовал, как еще нужно обозначить? пакет отдельный?
 
1718037665220.png
Java:
    public void writeImpl(GameClient client, WritableBuffer buffer)
    {
        ServerPackets.USER_INFO.writeId(this, buffer);
        buffer.writeInt(_player.getX());
        buffer.writeInt(_player.getY());
        buffer.writeInt(_player.getZ());
        buffer.writeInt(_player.getVehicle() != null ? _player.getVehicle().getObjectId() : 0);
        buffer.writeInt(_player.getObjectId());
        buffer.writeString(_player.getAppearance().getVisibleName());
        buffer.writeInt(_player.getRace().ordinal());
        buffer.writeInt(_player.getAppearance().isFemale());
        buffer.writeInt(_player.getBaseClass());
        buffer.writeInt(_player.getLevel());
        buffer.writeLong(_player.getExp());
        buffer.writeInt(_player.getSTR());
        buffer.writeInt(_player.getDEX());
        buffer.writeInt(_player.getCON());
        buffer.writeInt(_player.getINT());
        buffer.writeInt(_player.getWIT());
        buffer.writeInt(_player.getMEN());
        buffer.writeInt(_player.getMaxHp());
        buffer.writeInt((int) Math.round(_player.getCurrentHp()));
        buffer.writeInt(_player.getMaxMp());
        buffer.writeInt((int) Math.round(_player.getCurrentMp()));
        buffer.writeInt((int) _player.getSp());
        buffer.writeInt(_player.getCurrentLoad());
        buffer.writeInt(_player.getMaxLoad());
        buffer.writeInt(_player.getActiveWeaponItem() != null ? 40 : 20); // 20 no weapon, 40 weapon equipped
        
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_UNDER));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CLOAK));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
        buffer.writeInt(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
        
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CLOAK));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
        buffer.writeInt(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
        
        // c6 new h's
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeInt(_player.getInventory().getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeInt(_player.getInventory().getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        buffer.writeShort(0);
        // end of c6 new h's
        
        buffer.writeInt((int) _player.getPAtk(null));
        buffer.writeInt((int) _player.getPAtkSpd());
        buffer.writeInt((int) _player.getPDef(null));
        buffer.writeInt(_player.getEvasionRate(null));
        buffer.writeInt(_player.getAccuracy());
        buffer.writeInt(_player.getCriticalHit(null, null));
        buffer.writeInt((int) _player.getMAtk(null, null));
        buffer.writeInt(_player.getMAtkSpd());
        buffer.writeInt((int) _player.getPAtkSpd());
        buffer.writeInt((int) _player.getMDef(null, null));
        buffer.writeInt(_player.getPvpFlag());
        buffer.writeInt(_player.getKarma());
        buffer.writeInt(_runSpd);
        buffer.writeInt(_walkSpd);
        buffer.writeInt(_swimRunSpd);
        buffer.writeInt(_swimWalkSpd);
        buffer.writeInt(_flyRunSpd);
        buffer.writeInt(_flyWalkSpd);
        buffer.writeInt(_flyRunSpd);
        buffer.writeInt(_flyWalkSpd);
        buffer.writeDouble(_moveMultiplier);
        buffer.writeDouble(_player.getAttackSpeedMultiplier());
        buffer.writeDouble(_player.getCollisionRadius());
        buffer.writeDouble(_player.getCollisionHeight());
        buffer.writeInt(_player.getAppearance().getHairStyle());
        buffer.writeInt(_player.getAppearance().getHairColor());
        buffer.writeInt(_player.getAppearance().getFace());
        buffer.writeInt(_player.isGM()); // builder level
        
        String title = _player.getTitle();
        if (_player.isGM() && _player.isInvisible())
        {
            title = "[Invisible]";
        }
        buffer.writeString(title);
        
        buffer.writeInt(_player.getClanId());
        buffer.writeInt(_player.getClanCrestId());
        buffer.writeInt(_player.getAllyId());
        buffer.writeInt(_player.getAllyCrestId()); // ally crest id
        // 0x40 leader rights
        // siege flags: attacker - 0x180 sword over name, defender - 0x80 shield, 0xC0 crown (|leader), 0x1C0 flag (|leader)
        buffer.writeInt(_relation);
        buffer.writeByte(_player.getMountType().ordinal()); // mount type
        buffer.writeByte(_player.getPrivateStoreType().getId());
        buffer.writeByte(_player.hasDwarvenCraft());
        buffer.writeInt(_player.getPkKills());
        buffer.writeInt(_player.getPvpKills());
        
        buffer.writeShort(_player.getCubics().size());
        for (int cubicId : _player.getCubics().keySet())
        {
            buffer.writeShort(cubicId);
        }
        
        buffer.writeByte(_player.isInPartyMatchRoom());
        buffer.writeInt(_player.isInvisible() ? _player.getAbnormalVisualEffects() | AbnormalVisualEffect.STEALTH.getMask() : _player.getAbnormalVisualEffects());
        buffer.writeByte(_player.isInsideZone(ZoneId.WATER));
        buffer.writeInt(_player.getClanPrivileges().getBitmask());
        buffer.writeShort(_player.getRecomLeft()); // c2 recommendations remaining
        buffer.writeShort(_player.getRecomHave()); // c2 recommendations received
        buffer.writeInt(_player.getMountNpcId() > 0 ? _player.getMountNpcId() + 1000000 : 0);
        buffer.writeShort(_player.getInventoryLimit());
        buffer.writeInt(_player.getClassId().getId());
        buffer.writeInt(0); // special effects? circles around player...
        buffer.writeInt(_player.getMaxCp());
        buffer.writeInt((int) _player.getCurrentCp());
        buffer.writeByte(_player.isMounted() ? 0 : _player.getEnchantEffect());
        buffer.writeByte(_player.getTeam().getId());
        buffer.writeInt(_player.getClanCrestLargeId());
        buffer.writeByte(_player.isNoble()); // 1: symbol on char menu ctrl+I
        buffer.writeByte(_player.isHero() || (_player.isGM() && Config.GM_HERO_AURA)); // 1: Hero Aura
        
        buffer.writeByte(_player.isFishing()); // Fishing Mode
        buffer.writeInt(_player.getFishX()); // fishing x
        buffer.writeInt(_player.getFishY()); // fishing y
        buffer.writeInt(_player.getFishZ()); // fishing z
        
        buffer.writeInt(_player.getAppearance().getNameColor());
        // new c5
        buffer.writeByte(_player.isRunning()); // changes the Speed display on Status Window
        buffer.writeInt(_player.getPledgeClass()); // changes the text above CP on Status Window
        buffer.writeInt(_player.getPledgeType());
        buffer.writeInt(_player.getAppearance().getTitleColor());
        buffer.writeInt(_player.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_player.getCursedWeaponEquippedId()) : 0);
    }
 
Решение
а определение isWater то работает в целом? что за сборка?
 
ОО )) спасибо, блин забыл за этот пакет ) все замутил, все работает ) и еще есть вопрос, что-бы не создавать новую тему, тут задам: Когда отправляю пакет клиенту UserInfo или ValidateLocation или StatusUpdate, в момент получения, клиент как-бы немного дергается, что может быть?? когда отсылаю пакеты сообщений, или пакеты действий такого нет, все плавно
 
Ну у меня отправка всех пакетов синхронизирована, думаешь это из-за нее?
 
Ну у меня отправка всех пакетов синхронизирована, думаешь это из-за нее?
Может в монстре застрял, ну или threadpool с какой-то задержкой таск начал. В теме рядышком (о написании эмуля на чем-то там от space2pacman который говорил что там есть заморочка с началом движения) говорится что первый пакет, после начала движения и последующие пакеты "движения", шлютсч с разным промежутком.
 
Ну у меня отправка всех пакетов синхронизирована, думаешь это из-за нее?
Рассинхрон в данном случае про местоположение чара на сервере и на клиенте, ValidateLocation используеться для синхронизации местоположения персонажа, чтобы не получилось такого что на сервере чар в одном месте, на клиенте в другом.
После получения ValidateLocation клиен перемещает чара на полученую позицию.
ValidateLocation по хорошему отсылается в нескольких случаях, основной после пакета от клиента ValidatePosition - собственно говоря запрос на валидацю местоположения, в случае если координаты сильно отличаются, ну и дальше там при блинках падениях, рашах, хуках и т.д там где это требуется
Если у вас постоянно дергается возможно вы шлете ValidateLocation тогда когда не нужно этого делать, ну или что-то не то с просчетом серверного местоположения или скорости персонажа
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу