Как работает пакет PlaySound?

space2pacman

Постоялец
Местный
Сообщения
330
Розыгрыши
0
Репутация
252
Реакции
258
Баллы
1 083
Сам пакет:

Java:
    protected final void writeImpl()
    {
        writeC(0x98);
        writeD(_unknown1); // unknown 0 for quest and ship;
        writeS(_soundFile);
        writeD(_unknown3); // unknown 0 for quest; 1 for ship;
        writeD(_unknown4); // 0 for quest; objectId of ship
        writeD(_unknown5); // x
        writeD(_unknown6); // y
        writeD(_unknown7); // z
    }

Все unknown могут быть нулями.

1) Что за параметры _unknown1 ?
2) Зачем x y z? Проигрывание в опредененной точке?
 
Последнее редактирование:
1) The type of sound file. 0 - Sound, 1 - Music, 2 - Voice
2) Location of binded object.
Java:
package net.sf.l2j.gameserver.network.serverpackets;

import net.sf.l2j.gameserver.model.WorldObject;
import net.sf.l2j.gameserver.model.location.Location;

public class PlaySound extends L2GameServerPacket
{
    private final int _soundType;
    private final String _soundFile;
    private final boolean _bindToObject;
    private final int _objectId;
    private final Location _location;
    private final int _delay;
    
    /**
     * Used for static sound.
     * @param soundFile : The name of the sound file.
     */
    public PlaySound(String soundFile)
    {
        _soundType = 0;
        _soundFile = soundFile;
        _bindToObject = false;
        _objectId = 0;
        _location = Location.DUMMY_LOC;
        _delay = 0;
    }
    
    /**
     * Used for static sound.
     * @param soundType : The type of sound file. 0 - Sound, 1 - Music, 2 - Voice
     * @param soundFile : The name of the sound file.
     */
    public PlaySound(int soundType, String soundFile)
    {
        _soundType = soundType;
        _soundFile = soundFile;
        _bindToObject = false;
        _objectId = 0;
        _location = Location.DUMMY_LOC;
        _delay = 0;
    }
    
    /**
     * Play the sound file in the client. We use a {@link WorldObject} as parameter, notably to find the position of the sound.
     * @param soundType : The type of sound file. 0 - Sound, 1 - Music, 2 - Voice
     * @param soundFile : The name of the sound file.
     * @param object : The object to use.
     */
    public PlaySound(int soundType, String soundFile, WorldObject object)
    {
        _soundType = soundType;
        _soundFile = soundFile;
        _bindToObject = true;
        _objectId = object.getObjectId();
        _location = object.getPosition().clone();
        _delay = 0;
    }
    
    /**
     * Play the sound file in the client. All parameters can be set.
     * @param soundType : The type of sound file. 0 - Sound, 1 - Music, 2 - Voice
     * @param soundFile : The name of the sound file.
     * @param bindToObject - true, if sound file binded for some object.
     * @param objectId - object ID of caller. 0 - for quest, tutorial, etc.
     * @param location - Location of binded object.
     * @param delay - playing time
     */
    public PlaySound(int soundType, String soundFile, boolean bindToObject, int objectId, Location location, int delay)
    {
        _soundType = soundType;
        _soundFile = soundFile;
        _bindToObject = bindToObject;
        _objectId = objectId;
        _location = location;
        _delay = delay;
    }
    
    @Override
    protected final void writeImpl()
    {
        writeC(0x98);
        writeD(_soundType);
        writeS(_soundFile);
        writeD(_bindToObject ? 1 : 0);
        writeD(_objectId);
        writeLoc(_location);
        writeD(_delay);
    }
}
 
Java:
package ru.nts.gameserver.system.enums;

public enum EL2_SND_TYPE {
    SND_EFFECT,
    SND_MUSIC,
    SND_STREAMING_VOICE,
    SND_NPC_VOICE,
    SND_ITEM_MUSIC
}

Java:
package ru.nts.core.network.outgoing;

import ru.nts.core.network.GameClient;
import ru.nts.core.network.GameClientOutgoingPackets;
import ru.nts.core.network.IClientOutgoingPacket;
import ru.nts.core.network.PacketWriter;
import ru.nts.gameserver.game.world.objects.WorldObject;
import ru.nts.gameserver.game.world.objects.creatures.Creature;
import ru.nts.gameserver.system.enums.EL2_SND_TYPE;

public class S_PLAY_SOUND implements IClientOutgoingPacket {

    private final EL2_SND_TYPE snd_type;
    private final String pszFileName;
    private final int nCount;
    private final int nServerID;
    private final int x;
    private final int y;
    private final int z;
    private final int Delay;

    @Override
    public int getPriority() {
        return IClientOutgoingPacket.MIN_PRIORITY;
    }

    public static S_PLAY_SOUND createSound(String soundFile){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_EFFECT, soundFile, 0);
    }

    public static S_PLAY_SOUND createMusic(String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_MUSIC, soundFile, delay);
    }

    public static S_PLAY_SOUND createStreamingVoice(String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_STREAMING_VOICE, soundFile, delay);
    }

    public static S_PLAY_SOUND createNPCVoice(Creature creature, String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_NPC_VOICE, soundFile, creature, delay);
    }

    public static S_PLAY_SOUND createItemMusic(Creature creature, String soundFile, int delay){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_ITEM_MUSIC, soundFile, creature, delay);
    }

    public static S_PLAY_SOUND createDynamicalSound(String soundFile, WorldObject object){
        return new S_PLAY_SOUND(EL2_SND_TYPE.SND_EFFECT, soundFile, object);
    }

    public static S_PLAY_SOUND manualCreateSound(EL2_SND_TYPE type, String soundFile, int bindToObject, int objectId, int x, int y, int z, int delay){
        return new S_PLAY_SOUND(type, soundFile, bindToObject, objectId, x, y, z, delay);
    }

    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 0;
        nServerID = 0;
        x = 0;
        y = 0;
        z = 0;
        Delay = delay;
    }

    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, WorldObject object) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 1;
        nServerID = object.getObjectId();
        x = object.getX();
        y = object.getY();
        z = object.getZ();
        Delay = 0;
    }

    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, WorldObject object, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = 0;
        nServerID = object.getObjectId();
        x = object.getX();
        y = object.getY();
        z = object.getZ();
        Delay = delay;
    }

    private S_PLAY_SOUND(EL2_SND_TYPE type, String soundFile, int bindToObject, int objectId, int x, int y, int z, int delay) {
        snd_type = type;
        pszFileName = soundFile;
        nCount = bindToObject;
        nServerID = objectId;
        this.x = x;
        this.y = y;
        this.z = z;
        Delay = delay;
    }

    @Override
    public void write(PacketWriter packet, GameClient client) {
        GameClientOutgoingPackets.S_PLAY_SOUND.writeId(packet);
        packet.writeD(snd_type);
        packet.writeS(pszFileName);
        packet.writeD(nCount);
        packet.writeD(nServerID);
        packet.writeD(x);
        packet.writeD(y);
        packet.writeD(z);
        packet.writeD(Delay);
    }
}
 
Странно, я думал последнее d - это радиус на котором слышно звук от объекта с nServerID
 
Last time I tried, nothing worked except soundType=0, also last parameter didn't seem to do anything either
(RU: В прошлый раз, когда я пробовал, ничего не работало, кроме soundType=0, также последний параметр, похоже, тоже ничего не делал)
 
А ты правильно указывал путь / имя звука?

0 - Звуки из паков в папке Sounds, например itemsound.ship_arrival_departure
1 - Звуки из папки Music, например B01_F
2 - Звуки из папки Voice и без префикса языка, например tutorial_voice_006
3 - Звуки из паков в папке Voice и без префикса языка, например Npcdialog1.herphah_ep50_greeting_3

Delay в конце, это задержка до запуска звука после получения пакета
 
ChaosPaladin
Теперь, когда я подумал, когда я пробовал soundType=1, я также добавил ".ogg" в конце имени. Попробую без него.
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…