From 0ef9369275a12be16a3ab880f0200505d2e200b9 Mon Sep 17 00:00:00 2001
From: Zealar <zealar@mail.bg>
Date: Tue, 28 Mar 2017 23:35:08 +0300
Subject: [PATCH] Sound... rework DP :
 events/gracia/handlers/instances/vehicles/village

---
 .../scripts/events/HeavyMedal/HeavyMedal.java |  4 ++--
 .../TheValentineEvent/TheValentineEvent.java  |  4 ++--
 .../data/scripts/gracia/AI/EnergySeeds.java   |  4 ++--
 .../admincommandhandlers/AdminEffects.java    | 21 ++++++++++++++-----
 .../AdminEventEngine.java                     |  5 +++--
 .../AdminMonsterRace.java                     |  6 ++++--
 .../scripts/handlers/effecthandlers/Sow.java  |  4 ++--
 .../CrystalCaverns/CrystalCaverns.java        | 12 +++++------
 .../scripts/vehicles/BoatGiranTalking.java    | 16 +++++---------
 .../data/scripts/vehicles/BoatGludinRune.java | 16 +++++---------
 .../scripts/vehicles/BoatInnadrilTour.java    | 10 +++------
 .../scripts/vehicles/BoatRunePrimeval.java    | 16 +++++---------
 .../scripts/vehicles/BoatTalkingGludin.java   | 16 +++++---------
 .../DarkElvenChange1/DarkElvenChange1.java    |  4 ++--
 .../DarkElvenChange2/DarkElvenChange2.java    |  4 ++--
 15 files changed, 63 insertions(+), 79 deletions(-)

diff --git a/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java b/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java
index c72f867b86..be60cad283 100644
--- a/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java
+++ b/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java
@@ -18,7 +18,7 @@
  */
 package events.HeavyMedal;
 
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
@@ -92,7 +92,7 @@ public final class HeavyMedal extends LongTimeEvent
 						takeItems(player, BADGES[level - 1], -1);
 					}
 					giveItems(player, BADGES[level], 1);
-					playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
+					playSound(player, Sound.ITEMSOUND_QUEST_ITEMGET);
 					level++;
 				}
 				htmltext = "31229-" + event.toLowerCase() + "-" + String.valueOf(level) + ".htm";
diff --git a/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java b/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java
index 2e13a7ce9b..6d79072cbd 100644
--- a/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java
+++ b/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java
@@ -18,7 +18,7 @@
  */
 package events.TheValentineEvent;
 
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
@@ -57,7 +57,7 @@ public final class TheValentineEvent extends LongTimeEvent
 			else
 			{
 				giveItems(player, RECIPE, 1);
-				playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
+				playSound(player, Sound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return htmltext;
diff --git a/dist/game/data/scripts/gracia/AI/EnergySeeds.java b/dist/game/data/scripts/gracia/AI/EnergySeeds.java
index 80c41e6da3..a7dd162e2e 100644
--- a/dist/game/data/scripts/gracia/AI/EnergySeeds.java
+++ b/dist/game/data/scripts/gracia/AI/EnergySeeds.java
@@ -30,7 +30,7 @@ import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.data.xml.impl.DoorData;
 import com.l2jserver.gameserver.data.xml.impl.NpcData;
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.GraciaSeedsManager;
 import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2Object;
@@ -398,7 +398,7 @@ public class EnergySeeds extends AbstractNpcAI
 		if (numItems > 0)
 		{
 			giveItems(player, itemId, numItems);
-			playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
+			playSound(player, Sound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	
diff --git a/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java b/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
index aee91c332b..f0c7df783b 100644
--- a/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
+++ b/dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
@@ -50,10 +50,21 @@ import com.l2jserver.gameserver.util.Broadcast;
 import com.l2jserver.gameserver.util.Util;
 
 /**
- * This class handles following admin commands: <li>invis/invisible/vis/visible = makes yourself invisible or visible <li>earthquake = causes an earthquake of a given intensity and duration around you <li>bighead/shrinkhead = changes head size <li>gmspeed = temporary Super Haste effect. <li>
- * para/unpara = paralyze/remove paralysis from target <li>para_all/unpara_all = same as para/unpara, affects the whole world. <li>polyself/unpolyself = makes you look as a specified mob. <li>changename = temporary change name <li>clearteams/setteam_close/setteam = team related commands <li>social =
- * forces an L2Character instance to broadcast social action packets. <li>effect = forces an L2Character instance to broadcast MSU packets. <li>abnormal = force changes over an L2Character instance's abnormal state. <li>play_sound/play_sounds = Music broadcasting related commands <li>atmosphere =
- * sky change related commands.
+ * This class handles following admin commands:
+ * <li>invis/invisible/vis/visible = makes yourself invisible or visible
+ * <li>earthquake = causes an earthquake of a given intensity and duration around you
+ * <li>bighead/shrinkhead = changes head size
+ * <li>gmspeed = temporary Super Haste effect.
+ * <li>para/unpara = paralyze/remove paralysis from target
+ * <li>para_all/unpara_all = same as para/unpara, affects the whole world.
+ * <li>polyself/unpolyself = makes you look as a specified mob.
+ * <li>changename = temporary change name
+ * <li>clearteams/setteam_close/setteam = team related commands
+ * <li>social = forces an L2Character instance to broadcast social action packets.
+ * <li>effect = forces an L2Character instance to broadcast MSU packets.
+ * <li>abnormal = force changes over an L2Character instance's abnormal state.
+ * <li>play_sound/play_sounds = Music broadcasting related commands
+ * <li>atmosphere = sky change related commands.
  */
 public class AdminEffects implements IAdminCommandHandler
 {
@@ -761,7 +772,7 @@ public class AdminEffects implements IAdminCommandHandler
 	
 	private void playAdminSound(L2PcInstance activeChar, String sound)
 	{
-		PlaySound _snd = new PlaySound(1, sound, 0, 0, 0, 0, 0);
+		PlaySound _snd = PlaySound.createSound(sound);
 		activeChar.sendPacket(_snd);
 		activeChar.broadcastPacket(_snd);
 		activeChar.sendMessage("Playing " + sound + ".");
diff --git a/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java b/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
index 83a313f6bb..31feb2d3fb 100644
--- a/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
+++ b/dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
@@ -29,6 +29,7 @@ import java.util.StringTokenizer;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.data.xml.impl.AdminData;
 import com.l2jserver.gameserver.data.xml.impl.TransformData;
+import com.l2jserver.gameserver.enums.audio.Music;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -223,7 +224,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 				activeChar.sendMessage(L2Event.startEventParticipation());
 				Broadcast.toAllOnlinePlayers(activeChar.getName() + " has started an event. You will find a participation NPC somewhere around you.");
 				
-				PlaySound _snd = new PlaySound(1, "B03_F", 0, 0, 0, 0, 0);
+				PlaySound _snd = Music.B03_F.getPacket();
 				activeChar.sendPacket(_snd);
 				activeChar.broadcastPacket(_snd);
 				
@@ -598,7 +599,7 @@ public class AdminEventEngine implements IAdminCommandHandler
 			+ "<td><font color=\"LEVEL\">Kicks the specified player(s) from the event. Blank field kicks target.</font></td></tr>" + "<tr><td>&nbsp;</td></tr>"
 			+ "<tr><td><button value=\"End!\" action=\"bypass -h admin_event_control_finish\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Will finish the event teleporting back all the players</font></td></tr>"
 			+ "<tr><td>&nbsp;</td></tr></table></td></tr></table></body></html>");
-			
+		
 		adminReply.setHtml(sb.toString());
 		activeChar.sendPacket(adminReply);
 	}
diff --git a/dist/game/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java b/dist/game/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
index ed73aba826..c563395309 100644
--- a/dist/game/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
+++ b/dist/game/data/scripts/handlers/admincommandhandlers/AdminMonsterRace.java
@@ -20,6 +20,8 @@ package handlers.admincommandhandlers;
 
 import com.l2jserver.gameserver.MonsterRace;
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Music;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -101,10 +103,10 @@ public class AdminMonsterRace implements IAdminCommandHandler
 			SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.MONSRACE_RACE_START);
 			sm.addInt(0);
 			activeChar.sendPacket(sm);
-			PlaySound SRace = new PlaySound(1, "S_Race", 0, 0, 0, 0, 0);
+			PlaySound SRace = Music.S_RACE.getPacket();
 			activeChar.sendPacket(SRace);
 			activeChar.broadcastPacket(SRace);
-			PlaySound SRace2 = new PlaySound(0, "ItemSound2.race_start", 1, 121209259, 12125, 182487, -3559);
+			PlaySound SRace2 = Sound.ITEMSOUND2_RACE_START.getPacket();
 			activeChar.sendPacket(SRace2);
 			activeChar.broadcastPacket(SRace2);
 			MonRaceInfo spk = new MonRaceInfo(codes[state][0], codes[state][1], race.getMonsters(), race.getSpeeds());
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Sow.java b/dist/game/data/scripts/handlers/effecthandlers/Sow.java
index b1f05470c7..aa97598c28 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/Sow.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/Sow.java
@@ -19,7 +19,7 @@
 package handlers.effecthandlers;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.model.L2Seed;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Character;
@@ -75,7 +75,7 @@ public final class Sow extends AbstractEffect
 		final SystemMessage sm;
 		if (calcSuccess(player, target, seed))
 		{
-			player.sendPacket(QuestSound.ITEMSOUND_QUEST_ITEMGET.getPacket());
+			player.sendPacket(Sound.ITEMSOUND_QUEST_ITEMGET.getPacket());
 			target.setSeeded(player.getActingPlayer());
 			sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SEED_WAS_SUCCESSFULLY_SOWN);
 		}
diff --git a/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java b/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
index e563ef7adf..6072679c84 100644
--- a/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
+++ b/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
@@ -18,16 +18,12 @@
  */
 package instances.CrystalCaverns;
 
-import instances.AbstractInstance;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import quests.Q00131_BirdInACage.Q00131_BirdInACage;
-
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.GeoData;
 import com.l2jserver.gameserver.ai.CtrlIntention;
@@ -60,12 +56,14 @@ import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.FlyToLocation;
 import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 import com.l2jserver.gameserver.network.serverpackets.SpecialCamera;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.gameserver.util.Util;
 
+import instances.AbstractInstance;
+import quests.Q00131_BirdInACage.Q00131_BirdInACage;
+
 /**
  * Crystal Caverns instance zone.<br>
  * TODO: 1. Kechi's Henchmans spawn animation is missing.<br>
@@ -1056,7 +1054,8 @@ public final class CrystalCaverns extends AbstractInstance
 				else if (!world.copys.isEmpty())
 				{
 					boolean notAOE = true;
-					if ((skill != null) && ((skill.getTargetType() == L2TargetType.AREA) || (skill.getTargetType() == L2TargetType.FRONT_AREA) || (skill.getTargetType() == L2TargetType.BEHIND_AREA) || (skill.getTargetType() == L2TargetType.AURA) || (skill.getTargetType() == L2TargetType.FRONT_AURA) || (skill.getTargetType() == L2TargetType.BEHIND_AURA)))
+					if ((skill != null) && ((skill.getTargetType() == L2TargetType.AREA) || (skill.getTargetType() == L2TargetType.FRONT_AREA) || (skill.getTargetType() == L2TargetType.BEHIND_AREA) || (skill.getTargetType() == L2TargetType.AURA) || (skill.getTargetType() == L2TargetType.FRONT_AURA)
+						|| (skill.getTargetType() == L2TargetType.BEHIND_AURA)))
 					{
 						notAOE = false;
 					}
@@ -1739,7 +1738,6 @@ public final class CrystalCaverns extends AbstractInstance
 			{
 				world.setStatus(31);
 				world._baylor = null;
-				npc.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
 				Instance baylorInstance = InstanceManager.getInstance().getInstance(npc.getInstanceId());
 				baylorInstance.setDuration(300000);
 				this.startQuestTimer("spawn_oracle", 1000, npc, null);
diff --git a/dist/game/data/scripts/vehicles/BoatGiranTalking.java b/dist/game/data/scripts/vehicles/BoatGiranTalking.java
index 7dc13e060c..280b2aa822 100644
--- a/dist/game/data/scripts/vehicles/BoatGiranTalking.java
+++ b/dist/game/data/scripts/vehicles/BoatGiranTalking.java
@@ -22,13 +22,13 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 
 /**
  * @author DS
@@ -119,9 +119,6 @@ public class BoatGiranTalking implements Runnable
 	private final CreatureSay ARRIVAL_GIRAN5;
 	private final CreatureSay ARRIVAL_GIRAN1;
 	
-	private final PlaySound GIRAN_SOUND;
-	private final PlaySound TALKING_SOUND;
-	
 	public BoatGiranTalking(L2BoatInstance boat)
 	{
 		_boat = boat;
@@ -149,9 +146,6 @@ public class BoatGiranTalking implements Runnable
 		ARRIVAL_GIRAN10 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_TALKING_ARRIVE_AT_GIRAN_10_MINUTES);
 		ARRIVAL_GIRAN5 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_TALKING_ARRIVE_AT_GIRAN_5_MINUTES);
 		ARRIVAL_GIRAN1 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_TALKING_ARRIVE_AT_GIRAN_1_MINUTE);
-		
-		GIRAN_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), GIRAN_DOCK.getX(), GIRAN_DOCK.getY(), GIRAN_DOCK.getZ());
-		TALKING_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), TALKING_DOCK[0].getX(), TALKING_DOCK[0].getY(), TALKING_DOCK[0].getZ());
 	}
 	
 	@Override
@@ -175,7 +169,7 @@ public class BoatGiranTalking implements Runnable
 					break;
 				case 3:
 					BoatManager.getInstance().broadcastPackets(GIRAN_DOCK, TALKING_DOCK[0], LEAVING_GIRAN, ARRIVAL_TALKING15);
-					_boat.broadcastPacket(GIRAN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(3946, 1, 46763, 187041, -3451);
 					_boat.executePath(GIRAN_TO_TALKING);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 250000);
@@ -213,7 +207,7 @@ public class BoatGiranTalking implements Runnable
 				case 8:
 					BoatManager.getInstance().dockShip(BoatManager.TALKING_ISLAND, true);
 					BoatManager.getInstance().broadcastPackets(TALKING_DOCK[0], GIRAN_DOCK, ARRIVED_AT_TALKING, ARRIVED_AT_TALKING_2);
-					_boat.broadcastPacket(TALKING_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 				case 9:
@@ -231,7 +225,7 @@ public class BoatGiranTalking implements Runnable
 				case 12:
 					BoatManager.getInstance().dockShip(BoatManager.TALKING_ISLAND, false);
 					BoatManager.getInstance().broadcastPackets(TALKING_DOCK[0], GIRAN_DOCK, LEAVING_TALKING);
-					_boat.broadcastPacket(TALKING_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(3945, 1, -96777, 258970, -3623);
 					_boat.executePath(TALKING_TO_GIRAN);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 200000);
@@ -257,7 +251,7 @@ public class BoatGiranTalking implements Runnable
 					break;
 				case 18:
 					BoatManager.getInstance().broadcastPackets(GIRAN_DOCK, TALKING_DOCK[0], ARRIVED_AT_GIRAN, ARRIVED_AT_GIRAN_2);
-					_boat.broadcastPacket(GIRAN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 			}
diff --git a/dist/game/data/scripts/vehicles/BoatGludinRune.java b/dist/game/data/scripts/vehicles/BoatGludinRune.java
index 7273cae0cd..795b23351e 100644
--- a/dist/game/data/scripts/vehicles/BoatGludinRune.java
+++ b/dist/game/data/scripts/vehicles/BoatGludinRune.java
@@ -22,13 +22,13 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 
 /**
  * @author DS
@@ -134,9 +134,6 @@ public class BoatGludinRune implements Runnable
 	private final CreatureSay ARRIVAL_GLUDIN5;
 	private final CreatureSay ARRIVAL_GLUDIN1;
 	
-	private final PlaySound GLUDIN_SOUND;
-	private final PlaySound RUNE_SOUND;
-	
 	public BoatGludinRune(L2BoatInstance boat)
 	{
 		_boat = boat;
@@ -164,9 +161,6 @@ public class BoatGludinRune implements Runnable
 		ARRIVAL_GLUDIN10 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_RUNE_AT_GLUDIN_10_MINUTES);
 		ARRIVAL_GLUDIN5 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_RUNE_AT_GLUDIN_5_MINUTES);
 		ARRIVAL_GLUDIN1 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_RUNE_AT_GLUDIN_1_MINUTE);
-		
-		GLUDIN_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), GLUDIN_DOCK[0].getX(), GLUDIN_DOCK[0].getY(), GLUDIN_DOCK[0].getZ());
-		RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
 	}
 	
 	@Override
@@ -191,7 +185,7 @@ public class BoatGludinRune implements Runnable
 				case 3:
 					BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, false);
 					BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVING_GLUDIN);
-					_boat.broadcastPacket(GLUDIN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(7905, 1, -90015, 150422, -3610);
 					_boat.executePath(GLUDIN_TO_RUNE);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 250000);
@@ -233,7 +227,7 @@ public class BoatGludinRune implements Runnable
 				case 9:
 					BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
 					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2);
-					_boat.broadcastPacket(RUNE_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 				case 10:
@@ -251,7 +245,7 @@ public class BoatGludinRune implements Runnable
 				case 13:
 					BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
 					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVING_RUNE);
-					_boat.broadcastPacket(RUNE_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(7904, 1, 34513, -38009, -3640);
 					_boat.executePath(RUNE_TO_GLUDIN);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
@@ -293,7 +287,7 @@ public class BoatGludinRune implements Runnable
 				case 19:
 					BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
 					BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVED_AT_GLUDIN, ARRIVED_AT_GLUDIN_2);
-					_boat.broadcastPacket(GLUDIN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 			}
diff --git a/dist/game/data/scripts/vehicles/BoatInnadrilTour.java b/dist/game/data/scripts/vehicles/BoatInnadrilTour.java
index c739a881f7..a8a227de5a 100644
--- a/dist/game/data/scripts/vehicles/BoatInnadrilTour.java
+++ b/dist/game/data/scripts/vehicles/BoatInnadrilTour.java
@@ -22,13 +22,13 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 
 /**
  * @author DS
@@ -91,8 +91,6 @@ public class BoatInnadrilTour implements Runnable
 	private final CreatureSay ARRIVAL5;
 	private final CreatureSay ARRIVAL1;
 	
-	private final PlaySound INNADRIL_SOUND;
-	
 	public BoatInnadrilTour(L2BoatInstance boat)
 	{
 		_boat = boat;
@@ -108,8 +106,6 @@ public class BoatInnadrilTour implements Runnable
 		ARRIVAL10 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.INNADRIL_BOAT_ARRIVE_10_MINUTES);
 		ARRIVAL5 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.INNADRIL_BOAT_ARRIVE_5_MINUTES);
 		ARRIVAL1 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.INNADRIL_BOAT_ARRIVE_1_MINUTE);
-		
-		INNADRIL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), DOCK.getX(), DOCK.getY(), DOCK.getZ());
 	}
 	
 	@Override
@@ -132,7 +128,7 @@ public class BoatInnadrilTour implements Runnable
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
 					break;
 				case 3:
-					BoatManager.getInstance().broadcastPackets(DOCK, DOCK, LEAVING_INNADRIL, INNADRIL_SOUND);
+					BoatManager.getInstance().broadcastPackets(DOCK, DOCK, LEAVING_INNADRIL, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(0, 1, 107092, 219098, -3952);
 					_boat.executePath(TOUR);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 650000);
@@ -157,7 +153,7 @@ public class BoatInnadrilTour implements Runnable
 					BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL1);
 					break;
 				case 9:
-					BoatManager.getInstance().broadcastPackets(DOCK, DOCK, ARRIVED_AT_INNADRIL, INNADRIL_SOUND);
+					BoatManager.getInstance().broadcastPackets(DOCK, DOCK, ARRIVED_AT_INNADRIL, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 			}
diff --git a/dist/game/data/scripts/vehicles/BoatRunePrimeval.java b/dist/game/data/scripts/vehicles/BoatRunePrimeval.java
index 26f7d84d76..d362bee4a8 100644
--- a/dist/game/data/scripts/vehicles/BoatRunePrimeval.java
+++ b/dist/game/data/scripts/vehicles/BoatRunePrimeval.java
@@ -22,13 +22,13 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 
 /**
  * @author DS
@@ -86,9 +86,6 @@ public class BoatRunePrimeval implements Runnable
 	private final CreatureSay LEAVING_PRIMEVAL;
 	private final CreatureSay BUSY_RUNE;
 	
-	private final PlaySound RUNE_SOUND;
-	private final PlaySound PRIMEVAL_SOUND;
-	
 	public BoatRunePrimeval(L2BoatInstance boat)
 	{
 		_boat = boat;
@@ -100,9 +97,6 @@ public class BoatRunePrimeval implements Runnable
 		ARRIVED_AT_PRIMEVAL_2 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_LEAVING_FOR_RUNE_3_MINUTES);
 		LEAVING_PRIMEVAL = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_LEAVING_PRIMEVAL_FOR_RUNE_NOW);
 		BUSY_RUNE = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_PRIMEVAL_TO_RUNE_DELAYED);
-		
-		RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
-		PRIMEVAL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), PRIMEVAL_DOCK.getX(), PRIMEVAL_DOCK.getY(), PRIMEVAL_DOCK.getZ());
 	}
 	
 	@Override
@@ -114,16 +108,16 @@ public class BoatRunePrimeval implements Runnable
 			{
 				case 0:
 					BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
-					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, LEAVING_RUNE, RUNE_SOUND);
+					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, LEAVING_RUNE, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(8925, 1, 34513, -38009, -3640);
 					_boat.executePath(RUNE_TO_PRIMEVAL);
 					break;
 				case 1:
-					BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], ARRIVED_AT_PRIMEVAL, ARRIVED_AT_PRIMEVAL_2, PRIMEVAL_SOUND);
+					BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], ARRIVED_AT_PRIMEVAL, ARRIVED_AT_PRIMEVAL_2, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
 					break;
 				case 2:
-					BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], LEAVING_PRIMEVAL, PRIMEVAL_SOUND);
+					BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], LEAVING_PRIMEVAL, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(8924, 1, 10447, -24982, -3664);
 					_boat.executePath(PRIMEVAL_TO_RUNE);
 					break;
@@ -148,7 +142,7 @@ public class BoatRunePrimeval implements Runnable
 					break;
 				case 4:
 					BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
-					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2, RUNE_SOUND);
+					BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2, Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
 					break;
 			}
diff --git a/dist/game/data/scripts/vehicles/BoatTalkingGludin.java b/dist/game/data/scripts/vehicles/BoatTalkingGludin.java
index a7ade46117..35fe29e860 100644
--- a/dist/game/data/scripts/vehicles/BoatTalkingGludin.java
+++ b/dist/game/data/scripts/vehicles/BoatTalkingGludin.java
@@ -22,13 +22,13 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.PlaySound;
 
 /**
  * @author DS
@@ -103,9 +103,6 @@ public class BoatTalkingGludin implements Runnable
 	private final CreatureSay ARRIVAL_TALKING5;
 	private final CreatureSay ARRIVAL_TALKING1;
 	
-	private final PlaySound TALKING_SOUND;
-	private final PlaySound GLUDIN_SOUND;
-	
 	public BoatTalkingGludin(L2BoatInstance boat)
 	{
 		_boat = boat;
@@ -133,9 +130,6 @@ public class BoatTalkingGludin implements Runnable
 		ARRIVAL_TALKING10 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_GLUDIN_ARRIVE_AT_TALKING_10_MINUTES);
 		ARRIVAL_TALKING5 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_GLUDIN_ARRIVE_AT_TALKING_5_MINUTES);
 		ARRIVAL_TALKING1 = new CreatureSay(0, Say2.BOAT, 801, SystemMessageId.FERRY_FROM_GLUDIN_ARRIVE_AT_TALKING_1_MINUTE);
-		
-		TALKING_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), TALKING_DOCK[0].getX(), TALKING_DOCK[0].getY(), TALKING_DOCK[0].getZ());
-		GLUDIN_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), GLUDIN_DOCK[0].getX(), GLUDIN_DOCK[0].getY(), GLUDIN_DOCK[0].getZ());
 	}
 	
 	@Override
@@ -160,7 +154,7 @@ public class BoatTalkingGludin implements Runnable
 				case 3:
 					BoatManager.getInstance().dockShip(BoatManager.TALKING_ISLAND, false);
 					BoatManager.getInstance().broadcastPackets(TALKING_DOCK[0], GLUDIN_DOCK[0], LEAVING_TALKING);
-					_boat.broadcastPacket(TALKING_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(1074, 1, -96777, 258970, -3623);
 					_boat.executePath(TALKING_TO_GLUDIN);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
@@ -198,7 +192,7 @@ public class BoatTalkingGludin implements Runnable
 				case 8:
 					BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
 					BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], TALKING_DOCK[0], ARRIVED_AT_GLUDIN, ARRIVED_AT_GLUDIN_2);
-					_boat.broadcastPacket(GLUDIN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 				case 9:
@@ -216,7 +210,7 @@ public class BoatTalkingGludin implements Runnable
 				case 12:
 					BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, false);
 					BoatManager.getInstance().broadcastPackets(TALKING_DOCK[0], GLUDIN_DOCK[0], LEAVING_GLUDIN);
-					_boat.broadcastPacket(GLUDIN_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					_boat.payForRide(1075, 1, -90015, 150422, -3610);
 					_boat.executePath(GLUDIN_TO_TALKING);
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 150000);
@@ -254,7 +248,7 @@ public class BoatTalkingGludin implements Runnable
 				case 17:
 					BoatManager.getInstance().dockShip(BoatManager.TALKING_ISLAND, true);
 					BoatManager.getInstance().broadcastPackets(TALKING_DOCK[0], GLUDIN_DOCK[0], ARRIVED_AT_TALKING, ARRIVED_AT_TALKING_2);
-					_boat.broadcastPacket(TALKING_SOUND);
+					_boat.broadcastPacket(Sound.ITEMSOUND_SHIP_ARRIVAL_DEPARTURE.withObject(_boat));
 					ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
 					break;
 			}
diff --git a/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java b/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
index 8540ff44c2..63d7763d2e 100644
--- a/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
+++ b/dist/game/data/scripts/village_master/DarkElvenChange1/DarkElvenChange1.java
@@ -18,7 +18,7 @@
  */
 package village_master.DarkElvenChange1;
 
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.enums.Race;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -91,7 +91,7 @@ public final class DarkElvenChange1 extends Quest
 						takeItems(player, CLASSES[i][6], -1);
 						player.setClassId(CLASSES[i][0]);
 						player.setBaseClass(CLASSES[i][0]);
-						playSound(player, QuestSound.ITEMSOUND_QUEST_FANFARE_2);
+						playSound(player, Sound.ITEMSOUND_QUEST_FANFARE_2);
 						player.broadcastUserInfo();
 					}
 				}
diff --git a/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java b/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
index b5f34e451e..ef9deb4ee9 100644
--- a/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
+++ b/dist/game/data/scripts/village_master/DarkElvenChange2/DarkElvenChange2.java
@@ -18,7 +18,7 @@
  */
 package village_master.DarkElvenChange2;
 
-import com.l2jserver.gameserver.enums.QuestSound;
+import com.l2jserver.gameserver.enums.audio.Sound;
 import com.l2jserver.gameserver.enums.Race;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -108,7 +108,7 @@ public final class DarkElvenChange2 extends Quest
 						takeItems(player, CLASSES[i][6], -1);
 						takeItems(player, CLASSES[i][7], -1);
 						takeItems(player, CLASSES[i][8], -1);
-						playSound(player, QuestSound.ITEMSOUND_QUEST_FANFARE_2);
+						playSound(player, Sound.ITEMSOUND_QUEST_FANFARE_2);
 						player.setClassId(CLASSES[i][0]);
 						player.setBaseClass(CLASSES[i][0]);
 						player.broadcastUserInfo();
-- 
GitLab