project: volumes support
This commit is contained in:
@@ -952,6 +952,42 @@ public interface Client extends GameShell
|
|||||||
*/
|
*/
|
||||||
List<GraphicsObject> getGraphicsObjects();
|
List<GraphicsObject> getGraphicsObjects();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the music volume
|
||||||
|
* @return volume 0-255 inclusive
|
||||||
|
*/
|
||||||
|
int getMusicVolume();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the music volume
|
||||||
|
* @param volume 0-255 inclusive
|
||||||
|
*/
|
||||||
|
void setMusicVolume(int volume);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the sound effect volume
|
||||||
|
* @return volume 0-127 inclusive
|
||||||
|
*/
|
||||||
|
int getSoundEffectVolume();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the sound effect volume
|
||||||
|
* @param volume 0-127 inclusive
|
||||||
|
*/
|
||||||
|
void setSoundEffectVolume(int volume);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the area sound effect volume
|
||||||
|
* @return volume 0-127 inclusive
|
||||||
|
*/
|
||||||
|
int getAreaSoundEffectVolume();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the area sound effect volume
|
||||||
|
* @param volume 0-127 inclusive
|
||||||
|
*/
|
||||||
|
void setAreaSoundEffectVolume(int volume);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Play a sound effect at the player's current location. This is how UI,
|
* Play a sound effect at the player's current location. This is how UI,
|
||||||
* and player-generated (e.g. mining, woodcutting) sound effects are
|
* and player-generated (e.g. mining, woodcutting) sound effects are
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.api.events;
|
||||||
|
|
||||||
|
public class VolumeChanged implements Event
|
||||||
|
{
|
||||||
|
public static final VolumeChanged INSTANCE = new VolumeChanged();
|
||||||
|
|
||||||
|
private VolumeChanged()
|
||||||
|
{
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.music;
|
||||||
|
|
||||||
|
import net.runelite.client.config.Config;
|
||||||
|
import net.runelite.client.config.ConfigGroup;
|
||||||
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
|
||||||
|
@ConfigGroup("music")
|
||||||
|
public interface MusicConfig extends Config
|
||||||
|
{
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "musicVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
default int getMusicVolume()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "musicVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
void setMusicVolume(int vol);
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "soundEffectVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
default int getSoundEffectVolume()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "soundEffectVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
void setSoundEffectVolume(int val);
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "areaSoundEffectVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
default int getAreaSoundEffectVolume()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "areaSoundEffectVolume",
|
||||||
|
name = "",
|
||||||
|
description = "",
|
||||||
|
hidden = true
|
||||||
|
)
|
||||||
|
void setAreaSoundEffectVolume(int vol);
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2019, Anthony Chen <https://github.com/achencoms>
|
* Copyright (c) 2019, Anthony Chen <https://github.com/achencoms>
|
||||||
|
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,33 +23,43 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.musiclist;
|
package net.runelite.client.plugins.music;
|
||||||
|
|
||||||
|
import com.google.inject.Provides;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.ToIntFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.ScriptID;
|
import net.runelite.api.ScriptID;
|
||||||
import net.runelite.api.SoundEffectID;
|
import net.runelite.api.SoundEffectID;
|
||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.VarClientInt;
|
import net.runelite.api.VarClientInt;
|
||||||
|
import net.runelite.api.VarPlayer;
|
||||||
|
import net.runelite.api.events.ConfigChanged;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
import net.runelite.api.events.VarClientIntChanged;
|
import net.runelite.api.events.VarClientIntChanged;
|
||||||
|
import net.runelite.api.events.VolumeChanged;
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.vars.InterfaceTab;
|
|
||||||
import net.runelite.api.widgets.JavaScriptCallback;
|
import net.runelite.api.widgets.JavaScriptCallback;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
|
import net.runelite.api.widgets.WidgetConfig;
|
||||||
import net.runelite.api.widgets.WidgetID;
|
import net.runelite.api.widgets.WidgetID;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.api.widgets.WidgetPositionMode;
|
import net.runelite.api.widgets.WidgetPositionMode;
|
||||||
import net.runelite.api.widgets.WidgetType;
|
import net.runelite.api.widgets.WidgetType;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.EventBus;
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.game.chatbox.ChatboxPanelManager;
|
import net.runelite.client.game.chatbox.ChatboxPanelManager;
|
||||||
import net.runelite.client.game.chatbox.ChatboxTextInput;
|
import net.runelite.client.game.chatbox.ChatboxTextInput;
|
||||||
@@ -56,11 +67,11 @@ import net.runelite.client.plugins.Plugin;
|
|||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
name = "Music List",
|
name = "Music",
|
||||||
description = "Adds search and filter for the music list"
|
description = "Adds search and filter for the music list, and additional volume control"
|
||||||
)
|
)
|
||||||
@Singleton
|
@Slf4j
|
||||||
public class MusicListPlugin extends Plugin
|
public class MusicPlugin extends Plugin
|
||||||
{
|
{
|
||||||
@Inject
|
@Inject
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -68,6 +79,9 @@ public class MusicListPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private ClientThread clientThread;
|
private ClientThread clientThread;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MusicConfig musicConfig;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ChatboxPanelManager chatboxPanelManager;
|
private ChatboxPanelManager chatboxPanelManager;
|
||||||
|
|
||||||
@@ -88,14 +102,17 @@ public class MusicListPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
addSubscriptions();
|
addSubscriptions();
|
||||||
|
|
||||||
clientThread.invoke(this::addMusicButtons);
|
clientThread.invoke(() ->
|
||||||
|
{
|
||||||
|
addMusicButtons();
|
||||||
|
applyMusicVolumeConfig();
|
||||||
|
updateMusicOptions();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void shutDown()
|
protected void shutDown()
|
||||||
{
|
{
|
||||||
eventBus.unregister(this);
|
|
||||||
|
|
||||||
Widget header = client.getWidget(WidgetInfo.MUSIC_WINDOW);
|
Widget header = client.getWidget(WidgetInfo.MUSIC_WINDOW);
|
||||||
if (header != null)
|
if (header != null)
|
||||||
{
|
{
|
||||||
@@ -103,13 +120,24 @@ public class MusicListPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
tracks = null;
|
tracks = null;
|
||||||
|
|
||||||
|
clientThread.invoke(this::teardownMusicOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
MusicConfig getConfig(ConfigManager configManager)
|
||||||
|
{
|
||||||
|
return configManager.getConfig(MusicConfig.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSubscriptions()
|
private void addSubscriptions()
|
||||||
{
|
{
|
||||||
|
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
|
||||||
eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged);
|
eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged);
|
||||||
eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded);
|
eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded);
|
||||||
eventBus.subscribe(VarClientIntChanged.class, this, this::onVarClientIntChanged);
|
eventBus.subscribe(VarClientIntChanged.class, this, this::onVarClientIntChanged);
|
||||||
|
eventBus.subscribe(VolumeChanged.class, this, this::onVolumeChanged);
|
||||||
|
eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGameStateChanged(GameStateChanged gameStateChanged)
|
private void onGameStateChanged(GameStateChanged gameStateChanged)
|
||||||
@@ -132,6 +160,10 @@ public class MusicListPlugin extends Plugin
|
|||||||
currentMusicFilter = MusicState.ALL;
|
currentMusicFilter = MusicState.ALL;
|
||||||
addMusicButtons();
|
addMusicButtons();
|
||||||
}
|
}
|
||||||
|
if (widgetLoaded.getGroupId() == WidgetID.OPTIONS_GROUP_ID)
|
||||||
|
{
|
||||||
|
updateMusicOptions();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addMusicButtons()
|
private void addMusicButtons()
|
||||||
@@ -181,9 +213,48 @@ public class MusicListPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void onVolumeChanged(VolumeChanged volumeChanged)
|
||||||
|
{
|
||||||
|
applyMusicVolumeConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onConfigChanged(ConfigChanged configChanged)
|
||||||
|
{
|
||||||
|
if (configChanged.getGroup().equals("music"))
|
||||||
|
{
|
||||||
|
clientThread.invokeLater(this::applyMusicVolumeConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyMusicVolumeConfig()
|
||||||
|
{
|
||||||
|
log.info("applyMusicVolumeConfig");
|
||||||
|
|
||||||
|
int musicVolume = musicConfig.getMusicVolume();
|
||||||
|
if (musicVolume > 0)
|
||||||
|
{
|
||||||
|
client.setMusicVolume(musicVolume - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int soundEffectVolume = musicConfig.getSoundEffectVolume();
|
||||||
|
if (soundEffectVolume > 0)
|
||||||
|
{
|
||||||
|
client.setSoundEffectVolume(soundEffectVolume - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int areaSoundEffectVolume = musicConfig.getAreaSoundEffectVolume();
|
||||||
|
if (areaSoundEffectVolume > 0)
|
||||||
|
{
|
||||||
|
client.setAreaSoundEffectVolume(areaSoundEffectVolume - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateMusicOptions();
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isOnMusicTab()
|
private boolean isOnMusicTab()
|
||||||
{
|
{
|
||||||
return client.getVar(VarClientInt.INTERFACE_TAB) == InterfaceTab.MUSIC.getId();
|
return client.getVar(VarClientInt.INTERFACE_TAB) == 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isChatboxOpen()
|
private boolean isChatboxOpen()
|
||||||
@@ -304,4 +375,175 @@ public class MusicListPlugin extends Plugin
|
|||||||
private final String name;
|
private final String name;
|
||||||
private final int spriteID;
|
private final int spriteID;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Getter
|
||||||
|
private enum MusicSlider
|
||||||
|
{
|
||||||
|
MUSIC(WidgetInfo.OPTIONS_MUSIC_SLIDER, VarPlayer.MUSIC_VOLUME, MusicConfig::getMusicVolume, MusicConfig::setMusicVolume, 255),
|
||||||
|
AREA(WidgetInfo.OPTIONS_AREA_SOUND_SLIDER, VarPlayer.AREA_EFFECT_VOLUME, MusicConfig::getAreaSoundEffectVolume, MusicConfig::setAreaSoundEffectVolume, 127),
|
||||||
|
EFFECT(WidgetInfo.OPTIONS_SOUND_EFFECT_SLIDER, VarPlayer.SOUND_EFFECT_VOLUME, MusicConfig::getSoundEffectVolume, MusicConfig::setSoundEffectVolume, 127);
|
||||||
|
|
||||||
|
private final WidgetInfo widgetID;
|
||||||
|
private final VarPlayer var;
|
||||||
|
private final ToIntFunction<MusicConfig> getter;
|
||||||
|
private final BiConsumer<MusicConfig, Integer> setter;
|
||||||
|
private final int max;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private Widget handle;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private Widget track;
|
||||||
|
|
||||||
|
private static int PADDING = 8;
|
||||||
|
|
||||||
|
private int getX()
|
||||||
|
{
|
||||||
|
return getTrack().getRelativeX() + PADDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getWidth()
|
||||||
|
{
|
||||||
|
return getTrack().getWidth() - (PADDING * 2) - handle.getWidth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void teardownMusicOptions()
|
||||||
|
{
|
||||||
|
for (MusicSlider slider : MusicSlider.values())
|
||||||
|
{
|
||||||
|
Widget icon = client.getWidget(slider.getWidgetID());
|
||||||
|
if (icon == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slider.getHandle() != null)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Widget handle = slider.getHandle();
|
||||||
|
Widget[] siblings = handle.getParent().getChildren();
|
||||||
|
if (siblings.length < handle.getIndex() || siblings[handle.getIndex()] != handle)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
siblings[slider.getTrack().getIndex()] = null;
|
||||||
|
siblings[handle.getIndex()] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object[] init = icon.getOnLoadListener();
|
||||||
|
init[1] = slider.getWidgetID().getId();
|
||||||
|
|
||||||
|
// Readd the var transmit triggers and rerun options_allsounds
|
||||||
|
client.runScript(init);
|
||||||
|
slider.setHandle(null);
|
||||||
|
slider.setTrack(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateMusicOptions()
|
||||||
|
{
|
||||||
|
for (MusicSlider slider : MusicSlider.values())
|
||||||
|
{
|
||||||
|
Widget icon = client.getWidget(slider.getWidgetID());
|
||||||
|
if (icon == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget handle = slider.getHandle();
|
||||||
|
if (handle != null)
|
||||||
|
{
|
||||||
|
Widget[] siblings = handle.getParent().getChildren();
|
||||||
|
if (siblings.length < handle.getIndex() || siblings[handle.getIndex()] != handle)
|
||||||
|
{
|
||||||
|
handle = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (handle == null)
|
||||||
|
{
|
||||||
|
Object[] init = icon.getOnLoadListener();
|
||||||
|
icon.setVarTransmitTrigger((int[]) null);
|
||||||
|
|
||||||
|
Widget track = icon.getParent().createChild(-1, WidgetType.TEXT);
|
||||||
|
slider.setTrack(track);
|
||||||
|
handle = icon.getParent().createChild(-1, WidgetType.GRAPHIC);
|
||||||
|
slider.setHandle(handle);
|
||||||
|
|
||||||
|
{
|
||||||
|
// First widget of the track
|
||||||
|
int wid = (Integer) init[2];
|
||||||
|
Widget w = client.getWidget(WidgetInfo.TO_GROUP(wid), WidgetInfo.TO_CHILD(wid));
|
||||||
|
|
||||||
|
track.setOriginalX(w.getRelativeX());
|
||||||
|
track.setOriginalY(w.getRelativeY());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
// Last widget of the track
|
||||||
|
int wid = (Integer) init[6];
|
||||||
|
Widget w = client.getWidget(WidgetInfo.TO_GROUP(wid), WidgetInfo.TO_CHILD(wid));
|
||||||
|
|
||||||
|
track.setOriginalWidth((w.getRelativeX() + w.getWidth()) - track.getOriginalX());
|
||||||
|
}
|
||||||
|
|
||||||
|
track.setOriginalHeight(16);
|
||||||
|
track.setNoClickThrough(true);
|
||||||
|
track.revalidate();
|
||||||
|
|
||||||
|
handle.setSpriteId(SpriteID.OPTIONS_ZOOM_SLIDER_THUMB);
|
||||||
|
handle.setOriginalWidth(16);
|
||||||
|
handle.setOriginalHeight(16);
|
||||||
|
handle.setClickMask(WidgetConfig.DRAG);
|
||||||
|
|
||||||
|
JavaScriptCallback move = ev ->
|
||||||
|
{
|
||||||
|
int newVal = ((ev.getMouseX() - MusicSlider.PADDING - (slider.getHandle().getWidth() / 2)) * slider.getMax())
|
||||||
|
/ slider.getWidth();
|
||||||
|
if (newVal < 0)
|
||||||
|
{
|
||||||
|
newVal = 0;
|
||||||
|
}
|
||||||
|
if (newVal > slider.getMax())
|
||||||
|
{
|
||||||
|
newVal = slider.getMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
// We store +1 so we can tell the difference between 0 and muted
|
||||||
|
slider.getSetter().accept(musicConfig, newVal + 1);
|
||||||
|
applyMusicVolumeConfig();
|
||||||
|
};
|
||||||
|
|
||||||
|
track.setOnClickListener(move);
|
||||||
|
track.setOnHoldListener(move);
|
||||||
|
track.setOnReleaseListener(move);
|
||||||
|
track.setHasListener(true);
|
||||||
|
|
||||||
|
client.runScript(ScriptID.OPTIONS_ALLSOUNDS, -1, init[2], init[3], init[4], init[5], init[6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int value = slider.getGetter().applyAsInt(musicConfig) - 1;
|
||||||
|
if (value <= -1)
|
||||||
|
{
|
||||||
|
// Use the vanilla value
|
||||||
|
value = ((4 - client.getVar(slider.getVar())) * slider.getMax()) / 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
int newX = ((value * slider.getWidth()) / slider.getMax()) + slider.getX();
|
||||||
|
slider.getHandle().setOriginalX(newX);
|
||||||
|
slider.getHandle().setOriginalY(slider.getTrack().getOriginalY());
|
||||||
|
slider.getHandle().revalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onScriptCallbackEvent(ScriptCallbackEvent ev)
|
||||||
|
{
|
||||||
|
switch (ev.getEventName())
|
||||||
|
{
|
||||||
|
case "optionsAllSounds":
|
||||||
|
// We have to override this script because it gets invoked periodically from the server
|
||||||
|
client.getIntStack()[client.getIntStackSize() - 1] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -50,6 +50,7 @@ import net.runelite.api.Ignore;
|
|||||||
import net.runelite.api.IndexDataBase;
|
import net.runelite.api.IndexDataBase;
|
||||||
import net.runelite.api.IndexedSprite;
|
import net.runelite.api.IndexedSprite;
|
||||||
import net.runelite.api.InventoryID;
|
import net.runelite.api.InventoryID;
|
||||||
|
import net.runelite.api.MenuEntry;
|
||||||
import net.runelite.api.MenuOpcode;
|
import net.runelite.api.MenuOpcode;
|
||||||
import static net.runelite.api.MenuOpcode.PLAYER_EIGTH_OPTION;
|
import static net.runelite.api.MenuOpcode.PLAYER_EIGTH_OPTION;
|
||||||
import static net.runelite.api.MenuOpcode.PLAYER_FIFTH_OPTION;
|
import static net.runelite.api.MenuOpcode.PLAYER_FIFTH_OPTION;
|
||||||
@@ -59,7 +60,6 @@ import static net.runelite.api.MenuOpcode.PLAYER_SECOND_OPTION;
|
|||||||
import static net.runelite.api.MenuOpcode.PLAYER_SEVENTH_OPTION;
|
import static net.runelite.api.MenuOpcode.PLAYER_SEVENTH_OPTION;
|
||||||
import static net.runelite.api.MenuOpcode.PLAYER_SIXTH_OPTION;
|
import static net.runelite.api.MenuOpcode.PLAYER_SIXTH_OPTION;
|
||||||
import static net.runelite.api.MenuOpcode.PLAYER_THIRD_OPTION;
|
import static net.runelite.api.MenuOpcode.PLAYER_THIRD_OPTION;
|
||||||
import net.runelite.api.MenuEntry;
|
|
||||||
import net.runelite.api.MessageNode;
|
import net.runelite.api.MessageNode;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Node;
|
import net.runelite.api.Node;
|
||||||
@@ -98,6 +98,7 @@ import net.runelite.api.events.PlayerSpawned;
|
|||||||
import net.runelite.api.events.ResizeableChanged;
|
import net.runelite.api.events.ResizeableChanged;
|
||||||
import net.runelite.api.events.UsernameChanged;
|
import net.runelite.api.events.UsernameChanged;
|
||||||
import net.runelite.api.events.VarbitChanged;
|
import net.runelite.api.events.VarbitChanged;
|
||||||
|
import net.runelite.api.events.VolumeChanged;
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.events.WidgetPressed;
|
import net.runelite.api.events.WidgetPressed;
|
||||||
import net.runelite.api.hooks.Callbacks;
|
import net.runelite.api.hooks.Callbacks;
|
||||||
@@ -1760,7 +1761,6 @@ public abstract class RSClientMixin implements RSClient
|
|||||||
return modulus;
|
return modulus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Override
|
@Override
|
||||||
public void setModulus(BigInteger modulus)
|
public void setModulus(BigInteger modulus)
|
||||||
@@ -1783,4 +1783,11 @@ public abstract class RSClientMixin implements RSClient
|
|||||||
client.promptCredentials(true);
|
client.promptCredentials(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@MethodHook("changeGameOptions")
|
||||||
|
public static void changeGameOptions(int var0)
|
||||||
|
{
|
||||||
|
client.getCallbacks().post(VolumeChanged.class, VolumeChanged.INSTANCE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1038,9 +1038,30 @@ public interface RSClient extends RSGameShell, Client
|
|||||||
@Import("decimator")
|
@Import("decimator")
|
||||||
RSDecimator getSoundEffectResampler();
|
RSDecimator getSoundEffectResampler();
|
||||||
|
|
||||||
|
@Import("musicVolume")
|
||||||
|
@Override
|
||||||
|
int getMusicVolume();
|
||||||
|
|
||||||
|
@Import("musicVolume")
|
||||||
|
@Override
|
||||||
|
void setMusicVolume(int volume);
|
||||||
|
|
||||||
|
@Import("areaSoundEffectVolume")
|
||||||
|
@Override
|
||||||
|
int getAreaSoundEffectVolume();
|
||||||
|
|
||||||
|
@Import("areaSoundEffectVolume")
|
||||||
|
@Override
|
||||||
|
void setAreaSoundEffectVolume(int volume);
|
||||||
|
|
||||||
@Import("soundEffectVolume")
|
@Import("soundEffectVolume")
|
||||||
|
@Override
|
||||||
int getSoundEffectVolume();
|
int getSoundEffectVolume();
|
||||||
|
|
||||||
|
@Import("soundEffectVolume")
|
||||||
|
@Override
|
||||||
|
void setSoundEffectVolume(int volume);
|
||||||
|
|
||||||
@Import("viewportWalking")
|
@Import("viewportWalking")
|
||||||
void setViewportWalking(boolean viewportWalking);
|
void setViewportWalking(boolean viewportWalking);
|
||||||
|
|
||||||
|
|||||||
@@ -20,4 +20,7 @@ public interface RSScriptEvent extends ScriptEvent
|
|||||||
|
|
||||||
@Import("targetName")
|
@Import("targetName")
|
||||||
String getOpbase();
|
String getOpbase();
|
||||||
|
|
||||||
|
@Import("mouseX")
|
||||||
|
int getMouseX();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -496,4 +496,20 @@ public interface RSWidget extends Widget
|
|||||||
|
|
||||||
@Import("getSprite")
|
@Import("getSprite")
|
||||||
RSSprite getSprite(boolean b);
|
RSSprite getSprite(boolean b);
|
||||||
|
|
||||||
|
@Import("onRelease")
|
||||||
|
@Override
|
||||||
|
void setOnReleaseListener(Object[] o);
|
||||||
|
|
||||||
|
@Import("varTransmitTriggers")
|
||||||
|
@Override
|
||||||
|
void setVarTransmitTrigger(int[] i);
|
||||||
|
|
||||||
|
@Import("onHold")
|
||||||
|
@Override
|
||||||
|
void setOnHoldListener(Object[] o);
|
||||||
|
|
||||||
|
@Import("onClick")
|
||||||
|
@Override
|
||||||
|
void setOnClickListener(Object[] o);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,7 +213,8 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
@ObfuscatedGetter(
|
@ObfuscatedGetter(
|
||||||
intValue = 892519291
|
intValue = 892519291
|
||||||
)
|
)
|
||||||
static int field868;
|
@Export("areaSoundEffectVolume")
|
||||||
|
static int areaSoundEffectVolume;
|
||||||
@ObfuscatedName("no")
|
@ObfuscatedName("no")
|
||||||
static int[] field820;
|
static int[] field820;
|
||||||
@ObfuscatedName("nb")
|
@ObfuscatedName("nb")
|
||||||
@@ -363,7 +364,8 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
@ObfuscatedGetter(
|
@ObfuscatedGetter(
|
||||||
intValue = -114703177
|
intValue = -114703177
|
||||||
)
|
)
|
||||||
static int field761;
|
@Export("musicVolume")
|
||||||
|
static int musicVolume;
|
||||||
@ObfuscatedName("pu")
|
@ObfuscatedName("pu")
|
||||||
@Export("mapIconYs")
|
@Export("mapIconYs")
|
||||||
static int[] mapIconYs;
|
static int[] mapIconYs;
|
||||||
@@ -1508,11 +1510,11 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
destinationX = 0;
|
destinationX = 0;
|
||||||
destinationY = 0;
|
destinationY = 0;
|
||||||
minimapState = 0;
|
minimapState = 0;
|
||||||
field761 = 255;
|
musicVolume = 255;
|
||||||
field666 = -1;
|
field666 = -1;
|
||||||
field759 = false;
|
field759 = false;
|
||||||
soundEffectVolume = 127;
|
soundEffectVolume = 127;
|
||||||
field868 = 127;
|
areaSoundEffectVolume = 127;
|
||||||
soundEffectCount = 0;
|
soundEffectCount = 0;
|
||||||
soundEffectIds = new int[50];
|
soundEffectIds = new int[50];
|
||||||
queuedSoundEffectLoops = new int[50];
|
queuedSoundEffectLoops = new int[50];
|
||||||
@@ -4282,7 +4284,7 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
Varps.Varps_main[var5] = var16;
|
Varps.Varps_main[var5] = var16;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetSocket.method3472(var5);
|
NetSocket.changeGameOptions(var5);
|
||||||
field782[++field823 - 1 & 31] = var5;
|
field782[++field823 - 1 & 31] = var5;
|
||||||
var1.serverPacket = null;
|
var1.serverPacket = null;
|
||||||
return true;
|
return true;
|
||||||
@@ -4738,7 +4740,7 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
Varps.Varps_main[var16] = var40;
|
Varps.Varps_main[var16] = var40;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetSocket.method3472(var16);
|
NetSocket.changeGameOptions(var16);
|
||||||
field782[++field823 - 1 & 31] = var16;
|
field782[++field823 - 1 & 31] = var16;
|
||||||
var1.serverPacket = null;
|
var1.serverPacket = null;
|
||||||
return true;
|
return true;
|
||||||
@@ -4795,7 +4797,7 @@ public final class Client extends GameShell implements Usernamed {
|
|||||||
for (var16 = 0; var16 < Varps.Varps_main.length; ++var16) {
|
for (var16 = 0; var16 < Varps.Varps_main.length; ++var16) {
|
||||||
if (Varps.Varps_temp[var16] != Varps.Varps_main[var16]) {
|
if (Varps.Varps_temp[var16] != Varps.Varps_main[var16]) {
|
||||||
Varps.Varps_main[var16] = Varps.Varps_temp[var16];
|
Varps.Varps_main[var16] = Varps.Varps_temp[var16];
|
||||||
NetSocket.method3472(var16);
|
NetSocket.changeGameOptions(var16);
|
||||||
field782[++field823 - 1 & 31] = var16;
|
field782[++field823 - 1 & 31] = var16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -704,8 +704,8 @@ public class ClientPacket implements class181 {
|
|||||||
)
|
)
|
||||||
@Export("playSoundJingle")
|
@Export("playSoundJingle")
|
||||||
static void playSoundJingle(int var0, int var1) {
|
static void playSoundJingle(int var0, int var1) {
|
||||||
if (Client.field761 != 0 && var0 != -1) {
|
if (Client.musicVolume != 0 && var0 != -1) {
|
||||||
class83.method2068(ClanMate.archive11, var0, 0, Client.field761, false);
|
class83.method2068(ClanMate.archive11, var0, 0, Client.musicVolume, false);
|
||||||
Client.field759 = true;
|
Client.field759 = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ final class GrandExchangeOfferTotalQuantityComparator implements Comparator {
|
|||||||
var9 = var1.method5511();
|
var9 = var1.method5511();
|
||||||
if (var38 >= 0 && var4 >= 0 && var38 < 104 && var4 < 104) {
|
if (var38 >= 0 && var4 >= 0 && var38 < 104 && var4 < 104) {
|
||||||
var10 = var6 + 1;
|
var10 = var6 + 1;
|
||||||
if (class223.localPlayer.pathX[0] >= var38 - var10 && class223.localPlayer.pathX[0] <= var10 + var38 && class223.localPlayer.pathY[0] >= var4 - var10 && class223.localPlayer.pathY[0] <= var10 + var4 && Client.field868 != 0 && var7 > 0 && Client.soundEffectCount < 50) {
|
if (class223.localPlayer.pathX[0] >= var38 - var10 && class223.localPlayer.pathX[0] <= var10 + var38 && class223.localPlayer.pathY[0] >= var4 - var10 && class223.localPlayer.pathY[0] <= var10 + var4 && Client.areaSoundEffectVolume != 0 && var7 > 0 && Client.soundEffectCount < 50) {
|
||||||
Client.soundEffectIds[Client.soundEffectCount] = var8;
|
Client.soundEffectIds[Client.soundEffectCount] = var8;
|
||||||
Client.queuedSoundEffectLoops[Client.soundEffectCount] = var7;
|
Client.queuedSoundEffectLoops[Client.soundEffectCount] = var7;
|
||||||
Client.queuedSoundEffectDelays[Client.soundEffectCount] = var9;
|
Client.queuedSoundEffectDelays[Client.soundEffectCount] = var9;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ public class HealthBarUpdate extends Node {
|
|||||||
var8 = 0;
|
var8 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
var2 = (var3 - var8) * Client.field868 / var3;
|
var2 = (var3 - var8) * Client.areaSoundEffectVolume / var3;
|
||||||
} else {
|
} else {
|
||||||
var2 = Client.soundEffectVolume;
|
var2 = Client.soundEffectVolume;
|
||||||
}
|
}
|
||||||
@@ -151,8 +151,8 @@ public class HealthBarUpdate extends Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!var12) {
|
if (!var12) {
|
||||||
if (Client.field761 != 0 && Client.field666 != -1) {
|
if (Client.musicVolume != 0 && Client.field666 != -1) {
|
||||||
class83.method2068(class225.archive6, Client.field666, 0, Client.field761, false);
|
class83.method2068(class225.archive6, Client.field666, 0, Client.musicVolume, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Client.field759 = false;
|
Client.field759 = false;
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ public class InvDefinition extends DualNode {
|
|||||||
if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) {
|
if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) {
|
||||||
int var12 = var14.cs1Instructions[0][1];
|
int var12 = var14.cs1Instructions[0][1];
|
||||||
Varps.Varps_main[var12] = 1 - Varps.Varps_main[var12];
|
Varps.Varps_main[var12] = 1 - Varps.Varps_main[var12];
|
||||||
NetSocket.method3472(var12);
|
NetSocket.changeGameOptions(var12);
|
||||||
}
|
}
|
||||||
} else if (opcode == 29) {
|
} else if (opcode == 29) {
|
||||||
PacketBufferNode var8 = InterfaceParent.getPacketBufferNode(ClientPacket.field2261, Client.packetWriter.isaacCipher);
|
PacketBufferNode var8 = InterfaceParent.getPacketBufferNode(ClientPacket.field2261, Client.packetWriter.isaacCipher);
|
||||||
@@ -448,7 +448,7 @@ public class InvDefinition extends DualNode {
|
|||||||
int var12 = var14.cs1Instructions[0][1];
|
int var12 = var14.cs1Instructions[0][1];
|
||||||
if (Varps.Varps_main[var12] != var14.cs1ComparisonValues[0]) {
|
if (Varps.Varps_main[var12] != var14.cs1ComparisonValues[0]) {
|
||||||
Varps.Varps_main[var12] = var14.cs1ComparisonValues[0];
|
Varps.Varps_main[var12] = var14.cs1ComparisonValues[0];
|
||||||
NetSocket.method3472(var12);
|
NetSocket.changeGameOptions(var12);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (opcode == 30) {
|
} else if (opcode == 30) {
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ public final class KeyHandler implements KeyListener, FocusListener {
|
|||||||
} else if (var29 == ScriptOpcodes.SET_VARP) {
|
} else if (var29 == ScriptOpcodes.SET_VARP) {
|
||||||
var11 = var6[var17];
|
var11 = var6[var17];
|
||||||
Varps.Varps_main[var11] = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize];
|
Varps.Varps_main[var11] = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize];
|
||||||
NetSocket.method3472(var11);
|
NetSocket.changeGameOptions(var11);
|
||||||
} else if (var29 == ScriptOpcodes.SCONST) {
|
} else if (var29 == ScriptOpcodes.SCONST) {
|
||||||
Interpreter.Interpreter_stringStack[++Interpreter.Interpreter_stringStackSize - 1] = var3.stringOperands[var17];
|
Interpreter.Interpreter_stringStack[++Interpreter.Interpreter_stringStackSize - 1] = var3.stringOperands[var17];
|
||||||
} else if (var29 == ScriptOpcodes.JUMP) {
|
} else if (var29 == ScriptOpcodes.JUMP) {
|
||||||
|
|||||||
@@ -64,9 +64,9 @@ public class MusicPatchNode2 {
|
|||||||
static void playSong(int var0) {
|
static void playSong(int var0) {
|
||||||
if (var0 == -1 && !Client.field759) {
|
if (var0 == -1 && !Client.field759) {
|
||||||
VertexNormal.method2960();
|
VertexNormal.method2960();
|
||||||
} else if (var0 != -1 && var0 != Client.field666 && Client.field761 != 0 && !Client.field759) {
|
} else if (var0 != -1 && var0 != Client.field666 && Client.musicVolume != 0 && !Client.field759) {
|
||||||
Archive var1 = class225.archive6;
|
Archive var1 = class225.archive6;
|
||||||
int var2 = Client.field761;
|
int var2 = Client.musicVolume;
|
||||||
class197.field2386 = 1;
|
class197.field2386 = 1;
|
||||||
class197.musicTrackArchive = var1;
|
class197.musicTrackArchive = var1;
|
||||||
class188.musicTrackGroupId = var0;
|
class188.musicTrackGroupId = var0;
|
||||||
|
|||||||
@@ -378,7 +378,8 @@ public final class NetSocket extends AbstractSocket implements Runnable {
|
|||||||
signature = "(II)V",
|
signature = "(II)V",
|
||||||
garbageValue = "-1514465632"
|
garbageValue = "-1514465632"
|
||||||
)
|
)
|
||||||
static final void method3472(int var0) {
|
@Export("changeGameOptions")
|
||||||
|
static final void changeGameOptions(int var0) {
|
||||||
class325.method6190();
|
class325.method6190();
|
||||||
|
|
||||||
for (ObjectSound var1 = (ObjectSound)ObjectSound.objectSounds.last(); var1 != null; var1 = (ObjectSound)ObjectSound.objectSounds.previous()) {
|
for (ObjectSound var1 = (ObjectSound)ObjectSound.objectSounds.last(); var1 != null; var1 = (ObjectSound)ObjectSound.objectSounds.previous()) {
|
||||||
@@ -436,8 +437,8 @@ public final class NetSocket extends AbstractSocket implements Runnable {
|
|||||||
var3 = 0;
|
var3 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var3 != Client.field761) {
|
if (var3 != Client.musicVolume) {
|
||||||
if (Client.field761 == 0 && Client.field666 != -1) {
|
if (Client.musicVolume == 0 && Client.field666 != -1) {
|
||||||
class83.method2068(class225.archive6, Client.field666, 0, var3, false);
|
class83.method2068(class225.archive6, Client.field666, 0, var3, false);
|
||||||
Client.field759 = false;
|
Client.field759 = false;
|
||||||
} else if (var3 == 0) {
|
} else if (var3 == 0) {
|
||||||
@@ -449,7 +450,7 @@ public final class NetSocket extends AbstractSocket implements Runnable {
|
|||||||
class49.midiPcmStream.method3760(var3);
|
class49.midiPcmStream.method3760(var3);
|
||||||
}
|
}
|
||||||
|
|
||||||
Client.field761 = var3;
|
Client.musicVolume = var3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -489,23 +490,23 @@ public final class NetSocket extends AbstractSocket implements Runnable {
|
|||||||
|
|
||||||
if (var4 == 10) {
|
if (var4 == 10) {
|
||||||
if (var2 == 0) {
|
if (var2 == 0) {
|
||||||
Client.field868 = 127;
|
Client.areaSoundEffectVolume = 127;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var2 == 1) {
|
if (var2 == 1) {
|
||||||
Client.field868 = 96;
|
Client.areaSoundEffectVolume = 96;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var2 == 2) {
|
if (var2 == 2) {
|
||||||
Client.field868 = 64;
|
Client.areaSoundEffectVolume = 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var2 == 3) {
|
if (var2 == 3) {
|
||||||
Client.field868 = 32;
|
Client.areaSoundEffectVolume = 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var2 == 4) {
|
if (var2 == 4) {
|
||||||
Client.field868 = 0;
|
Client.areaSoundEffectVolume = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -167,13 +167,13 @@ public class class3 implements Enumerated {
|
|||||||
var5 += var4.y * 128 - var2;
|
var5 += var4.y * 128 - var2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var5 - 64 <= var4.field1061 && Client.field868 != 0 && var0 == var4.plane) {
|
if (var5 - 64 <= var4.field1061 && Client.areaSoundEffectVolume != 0 && var0 == var4.plane) {
|
||||||
var5 -= 64;
|
var5 -= 64;
|
||||||
if (var5 < 0) {
|
if (var5 < 0) {
|
||||||
var5 = 0;
|
var5 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int var6 = (var4.field1061 - var5) * Client.field868 / var4.field1061;
|
int var6 = (var4.field1061 - var5) * Client.areaSoundEffectVolume / var4.field1061;
|
||||||
if (var4.stream1 == null) {
|
if (var4.stream1 == null) {
|
||||||
if (var4.soundEffectId >= 0) {
|
if (var4.soundEffectId >= 0) {
|
||||||
SoundEffect var7 = SoundEffect.readSoundEffect(GrandExchangeOfferAgeComparator.archive4, var4.soundEffectId, 0);
|
SoundEffect var7 = SoundEffect.readSoundEffect(GrandExchangeOfferAgeComparator.archive4, var4.soundEffectId, 0);
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ public class class30 {
|
|||||||
)
|
)
|
||||||
@Export("addSequenceSoundEffect")
|
@Export("addSequenceSoundEffect")
|
||||||
static void addSequenceSoundEffect(SequenceDefinition var0, int var1, int var2, int var3) {
|
static void addSequenceSoundEffect(SequenceDefinition var0, int var1, int var2, int var3) {
|
||||||
if (Client.soundEffectCount < 50 && Client.field868 != 0) {
|
if (Client.soundEffectCount < 50 && Client.areaSoundEffectVolume != 0) {
|
||||||
if (var0.soundEffects != null && var1 < var0.soundEffects.length) {
|
if (var0.soundEffects != null && var1 < var0.soundEffects.length) {
|
||||||
int var4 = var0.soundEffects[var1];
|
int var4 = var0.soundEffects[var1];
|
||||||
if (var4 != 0) {
|
if (var4 != 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user