Effects packets (#308)

- [X] Changes effect packets
- [X] Updates playing sounds
- [X] Updates Effects class to have more options so there are less direct calls to building the packets
- [X] Changes bonding status packet
This commit is contained in:
Kamron Batman 2020-11-12 00:52:38 -08:00 committed by GitHub
parent 1c9439e4fd
commit 361ec4dba4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 958 additions and 833 deletions

View file

@ -394,7 +394,7 @@ namespace Server.Commands.Generic
index,
CommandLogging.Format(mob)
);
mob.Send(new PlaySound(index, mob.Location));
mob.SendSound(index);
}
else
{

View file

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using Server.Commands.Generic;
@ -420,19 +421,16 @@ namespace Server.Commands
toAll
);
Packet p = new PlaySound(index, m.Location);
p.Acquire();
Span<byte> buffer = stackalloc byte[OutgoingEffectPackets.SoundPacketLength];
OutgoingEffectPackets.CreateSoundEffect(ref buffer, index, m);
foreach (var state in m.GetClientsInRange(12))
{
if (toAll || state.Mobile.CanSee(m))
{
state.Send(p);
state.Send(buffer);
}
}
p.Release();
}
[Usage("Echo <text>")]

View file

@ -49,8 +49,7 @@ namespace Server.ContextMenus
book.Content |= (ulong)1 << val;
m_Scroll.Consume();
from.Send(new PlaySound(0x249, book.GetWorldLocation()));
from.SendSound(0x249, book.GetWorldLocation());
}
}
}

View file

@ -476,14 +476,14 @@ namespace Server.Engines.Doom
}
}
public static void PlayEffect(IEntity from, IEntity to, int itemid, int speed, bool explodes)
private static void PlayEffect(IEntity from, IEntity to, int itemid, int speed, bool explodes)
{
Effects.SendMovingParticles(from, to, itemid, speed, 0, true, explodes, 2, 0, 0);
}
public static void SendLocationEffect(IPoint3D p, int itemID, int speed, int duration, int hue)
private static void SendLocationEffect(Point3D p, int itemID, int speed, int duration, int hue)
{
Effects.SendPacket(p, Map.Malas, new LocationEffect(p, itemID, speed, duration, hue, 0));
Effects.SendLocationEffect(p, Map.Malas, itemID, speed, duration, hue);
}
public static void PlayerSendASCII(Mobile player, int index)

View file

@ -68,7 +68,7 @@ namespace Server.Ethics.Evil
{
SpellHelper.Turn(from.Mobile, p);
Effects.PlaySound(p, from.Mobile.Map, 0x1FB);
Effects.PlaySound(new Point3D(p), from.Mobile.Map, 0x1FB);
from.Mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2, false, "You curse the area.");

View file

@ -68,7 +68,7 @@ namespace Server.Ethics.Hero
{
SpellHelper.Turn(from.Mobile, p);
Effects.PlaySound(p, from.Mobile.Map, 0x299);
Effects.PlaySound(new Point3D(p), from.Mobile.Map, 0x299);
from.Mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2, false, "You consecrate the area.");

View file

@ -330,7 +330,7 @@ namespace Server.Items
{
case 0:
{
Effects.SendLocationEffect(to, to.Map, 0x113A, 20, 10);
Effects.SendLocationEffect(to, 0x113A, 20);
to.PlaySound(0x231);
to.LocalOverheadMessage(MessageType.Regular, 0x44, 1010523); // A toxic vapor envelops thee.
@ -340,7 +340,7 @@ namespace Server.Items
}
case 1:
{
Effects.SendLocationEffect(to, to.Map, 0x3709, 30);
Effects.SendLocationEffect(to, 0x3709, 30);
to.PlaySound(0x54);
to.LocalOverheadMessage(MessageType.Regular, 0xEE, 1010524); // Searing heat scorches thy skin.

View file

@ -157,24 +157,7 @@ namespace Server.Engines.Quests.Necro
var hue = Utility.RandomList(0x481, 0x482, 0x489, 0x497, 0x66D);
Effects.SendPacket(
from,
map,
new HuedEffect(
EffectType.Moving,
Serial.Zero,
Serial.Zero,
0x36D4,
from,
to,
0,
0,
false,
true,
hue,
0
)
);
Effects.SendMovingEffect(map, 0x36D4, from, to,0, 0, false, true, hue);
}
}

View file

@ -66,7 +66,7 @@ namespace Server.Engines.Quests.Haven
public override bool HandlesOnMovement => Canoneer?.Deleted == false && Canoneer.Active;
public void DoFireEffect(IPoint3D target)
public void DoFireEffect(Point3D target)
{
var from = CannonDirection switch
{
@ -85,7 +85,7 @@ namespace Server.Engines.Quests.Haven
public void Fire(Mobile from, Mobile target)
{
DoFireEffect(target);
DoFireEffect(target.Location);
target.Damage(9999, from);
}

View file

@ -67,7 +67,7 @@ namespace Server.Items
Location = new Point3D(X - Offset.X, Y - Offset.Y, Z - Offset.Z);
}
Effects.PlaySound(this, Map, m_Open ? OpenedSound : ClosedSound);
Effects.PlaySound(this, m_Open ? OpenedSound : ClosedSound);
if (m_Open)
{

View file

@ -81,24 +81,21 @@ namespace Server.Items
{
if (dropped is BasePiece piece && piece.Board == this && base.OnDragDropInto(from, dropped, point))
{
Packet p = new PlaySound(0x127, GetWorldLocation());
p.Acquire();
if (RootParent == from)
{
from.Send(p);
from.SendSound(0x127, GetWorldLocation());
}
else
{
Span<byte> buffer = stackalloc byte[OutgoingEffectPackets.SoundPacketLength];
OutgoingEffectPackets.CreateSoundEffect(ref buffer, 0x127, GetWorldLocation());
foreach (var state in GetClientsInRange(2))
{
state.Send(p);
state.Send(buffer);
}
}
p.Release();
return true;
}

View file

@ -886,7 +886,7 @@ namespace Server.Items
m_Chest.Z++;
}
Effects.PlaySound(m_Chest, m_Map, 0x33B);
Effects.PlaySound(m_Chest.Location, m_Map, 0x33B);
}
if (m_Chest?.Location.Z >= m_Location.Z)

View file

@ -180,7 +180,7 @@ namespace Server.Items
{
if (from.AccessLevel == AccessLevel.Player || !from.Hidden)
{
from.Send(new PlaySound(0x20E, from.Location));
from.SendSound(0x20E, from);
}
from.CloseGump<MoongateConfirmGump>();

View file

@ -414,7 +414,7 @@ namespace Server.Items
rune.Delete();
from.Send(new PlaySound(0x42, GetWorldLocation()));
from.SendSound(0x42, GetWorldLocation());
from.SendMessage((rune.Description?.Trim()).DefaultIfNullOrEmpty("(indescript)"));
@ -432,7 +432,7 @@ namespace Server.Items
{
if (CurCharges < MaxCharges)
{
from.Send(new PlaySound(0x249, GetWorldLocation()));
from.SendSound(0x249, GetWorldLocation());
var amount = dropped.Amount;

View file

@ -591,7 +591,7 @@ namespace Server.Items
scroll.Delete();
from.Send(new PlaySound(0x249, GetWorldLocation()));
from.SendSound(0x249, GetWorldLocation());
return true;
}
}

View file

@ -58,7 +58,7 @@ namespace Server.Items
}
}
public void Use(Mobile from, IPoint3D loc)
public void Use(Mobile from, Point3D loc)
{
if (!CheckUse(from))
{
@ -84,23 +84,14 @@ namespace Server.Items
from.Backpack.ConsumeUpTo(typeof(SulfurousAsh), sulfAsh);
from.PlaySound(0x15F);
Effects.SendPacket(
Effects.SendMovingEffect(
from,
from.Map,
new HuedEffect(
EffectType.Moving,
from.Serial,
Serial.Zero,
0x36D4,
from.Location,
loc,
5,
0,
false,
true,
0,
0
)
loc,
0x36D4,
5,
0,
false,
true
);
var eable = from.Map.GetMobilesInRange(new Point3D(loc), 2);
@ -241,14 +232,14 @@ namespace Server.Items
return;
}
IPoint3D loc;
Point3D loc;
if (targeted is Item item)
{
loc = item.GetWorldLocation();
}
else
{
loc = targeted as IPoint3D;
loc = new Point3D(targeted as IPoint3D);
}
m_Horn.Use(from, loc);

View file

@ -214,11 +214,11 @@ namespace Server.Items
}
}
public void DoFireEffect(IPoint3D target)
public void DoFireEffect(Point3D target)
{
var map = Map;
if (target == null || map == null)
if (map == null)
{
return;
}
@ -228,7 +228,7 @@ namespace Server.Items
for (var count = Utility.Random(3); count > 0; count--)
{
IPoint3D location = new Point3D(
Point3D location = new Point3D(
target.X + Utility.RandomMinMax(-1, 1),
target.Y + Utility.RandomMinMax(-1, 1),
target.Z
@ -320,9 +320,11 @@ namespace Server.Items
break;
}
if (allow && Utility.InRange(new Point3D(p), m_Cannon.Location, 14))
var loc = new Point3D(p);
if (allow && Utility.InRange(loc, m_Cannon.Location, 14))
{
m_Cannon.DoFireEffect(p);
m_Cannon.DoFireEffect(loc);
}
else
{

View file

@ -408,7 +408,7 @@ namespace Server.Items
20,
5042
);
Effects.PlaySound(m_Creature, m_Creature.Map, 0x201);
Effects.PlaySound(m_Creature, 0x201);
m_Creature.Delete();
}

View file

@ -58,7 +58,8 @@ namespace Server.Mobiles
20,
5042
);
Effects.PlaySound(m_Mobile, m_Mobile.Map, 0x201);
Effects.PlaySound(m_Mobile,0x201);
m_Mobile.Delete();
}
@ -405,13 +406,13 @@ namespace Server.Mobiles
/*
// An area attack that only damages staff, wtf?
private DateTime m_NextWave;
public void AreaHeatDamage()
{
Mobile mob = ControlMaster;
if (mob != null)
{
if (mob.InRange( Location, 2 ))
@ -422,9 +423,9 @@ namespace Server.Mobiles
mob.SendLocalizedMessage( 1008112 ); // The intense heat is damaging you!
}
}
GuardedRegion r = Region as GuardedRegion;
if (r != null && mob.Alive)
{
foreach ( Mobile m in GetMobilesInRange( 2 ) )
@ -434,7 +435,7 @@ namespace Server.Mobiles
}
}
}
m_NextWave = DateTime.UtcNow + TimeSpan.FromSeconds( 3 );
}
*/

View file

@ -3550,7 +3550,7 @@ namespace Server.Items
20,
5042
);
Effects.PlaySound(defender, defender.Map, 0x201);
Effects.PlaySound(defender, 0x201);
defender.Delete();
}

View file

@ -2278,7 +2278,7 @@ namespace Server.Mobiles
20,
5042
);
Effects.PlaySound(m, m.Map, 0x201);
Effects.PlaySound(m, 0x201);
m.Delete();
}
@ -3216,12 +3216,7 @@ namespace Server.Mobiles
if (IsBonded)
{
var sound = GetDeathSound();
if (sound >= 0)
{
Effects.PlaySound(this, Map, sound);
}
Effects.PlaySound(this, GetDeathSound());
Warmode = false;
@ -3845,7 +3840,9 @@ namespace Server.Mobiles
IsDeadPet = false;
Effects.SendPacket(Location, Map, new BondedStatus(Serial, false));
Span<byte> buffer = stackalloc byte[OutgoingMobilePackets.BondedStatusPacketLength];
OutgoingMobilePackets.CreateBondedStatus(ref buffer, Serial, false);
Effects.SendPacket(Location, Map, ref buffer);
SendIncomingPacket();
SendIncomingPacket();

View file

@ -103,8 +103,8 @@ namespace Server.Mobiles
LootPack.FilthyRich.Generate(this, rm.Backpack, false, LootPack.GetLuckChanceForKiller(this));
}
Effects.PlaySound(this, Map, GetDeathSound());
Effects.SendLocationEffect(Location, Map, 0x3709, 30, 10, 0x835, 0);
Effects.PlaySound(this, GetDeathSound());
Effects.SendLocationEffect(Location, Map, 0x3709, 30, 10, 0x835);
rm.MoveToWorld(Location, Map);
Delete();

View file

@ -112,7 +112,7 @@ namespace Server.Mobiles
LootPack.FilthyRich.Generate(this, rm.Backpack, false, LootPack.GetLuckChanceForKiller(this));
}
Effects.PlaySound(this, Map, GetDeathSound());
Effects.PlaySound(this, GetDeathSound());
Effects.SendLocationEffect(Location, Map, 0x3709, 30, 10, 0x835, 0);
rm.MoveToWorld(Location, Map);

View file

@ -78,68 +78,42 @@ namespace Server.Mobiles
* Effect: damage is dealt to the attacker, no damage is taken by the fan dancer
*/
private void ThrowFan(Mobile to)
{
if (!(Utility.RandomDouble() < 0.8) || to.InRange(this, 1))
{
return;
}
/* Fan Throw
* Effect: - To: "0x57D4F5B" - ItemId: "0x27A3" - ItemIdName: "Tessen" - FromLocation: "(992 299, 24)" - ToLocation: "(992 308, 22)" - Speed: "10" - Duration: "0" - FixedDirection: "False" - Explode: "False" - Hue: "0x0" - Render: "0x0"
* Damage: 50-65
*/
Effects.SendMovingEffect(
to.Location,
to.Map,
0x27A3,
Location,
to.Location,
10,
0,
false,
false
);
AOS.Damage(to, this, Utility.RandomMinMax(50, 65), 100, 0, 0, 0, 0);
}
public override void OnDamagedBySpell(Mobile attacker)
{
base.OnDamagedBySpell(attacker);
if (Utility.RandomDouble() < 0.8 && !attacker.InRange(this, 1))
{
/* Fan Throw
* Effect: - To: "0x57D4F5B" - ItemId: "0x27A3" - ItemIdName: "Tessen" - FromLocation: "(992 299, 24)" - ToLocation: "(992 308, 22)" - Speed: "10" - Duration: "0" - FixedDirection: "False" - Explode: "False" - Hue: "0x0" - Render: "0x0"
* Damage: 50-65
*/
Effects.SendPacket(
attacker,
attacker.Map,
new HuedEffect(
EffectType.Moving,
Serial.Zero,
Serial.Zero,
0x27A3,
Location,
attacker.Location,
10,
0,
false,
false,
0,
0
)
);
AOS.Damage(attacker, this, Utility.RandomMinMax(50, 65), 100, 0, 0, 0, 0);
}
ThrowFan(attacker);
}
public override void OnGotMeleeAttack(Mobile attacker)
{
base.OnGotMeleeAttack(attacker);
if (Utility.RandomDouble() < 0.8 && !attacker.InRange(this, 1))
{
/* Fan Throw
* Effect: - To: "0x57D4F5B" - ItemId: "0x27A3" - ItemIdName: "Tessen" - FromLocation: "(992 299, 24)" - ToLocation: "(992 308, 22)" - Speed: "10" - Duration: "0" - FixedDirection: "False" - Explode: "False" - Hue: "0x0" - Render: "0x0"
* Damage: 50-65
*/
Effects.SendPacket(
attacker,
attacker.Map,
new HuedEffect(
EffectType.Moving,
Serial.Zero,
Serial.Zero,
0x27A3,
Location,
attacker.Location,
10,
0,
false,
false,
0,
0
)
);
AOS.Damage(attacker, this, Utility.RandomMinMax(50, 65), 100, 0, 0, 0, 0);
}
ThrowFan(attacker);
}
public override void OnGaveMeleeAttack(Mobile defender)
@ -158,9 +132,8 @@ namespace Server.Mobiles
* Effect does not stack
*/
defender.SendLocalizedMessage(
1070833
); // The creature fans you with fire, reducing your resistance to fire attacks.
// The creature fans you with fire, reducing your resistance to fire attacks.
defender.SendLocalizedMessage(1070833);
var effect = -(defender.FireResistance / 10);

View file

@ -355,7 +355,7 @@ namespace Server.Mobiles
30,
5052
);
Effects.PlaySound(g, g.Map, 0x208);
Effects.PlaySound(g, 0x208);
break;
}
@ -368,7 +368,7 @@ namespace Server.Mobiles
10,
5044
);
Effects.PlaySound(g, g.Map, 0x307);
Effects.PlaySound(g, 0x307);
break;
}

View file

@ -687,7 +687,7 @@ namespace Server.Mobiles
30,
5052
);
Effects.PlaySound(g, g.Map, 0x208);
Effects.PlaySound(g, 0x208);
break;
}
@ -700,7 +700,7 @@ namespace Server.Mobiles
10,
5044
);
Effects.PlaySound(g, g.Map, 0x307);
Effects.PlaySound(g, 0x307);
break;
}

View file

@ -67,7 +67,7 @@ namespace Server.Spells.Chivalry
20,
5042
);
Effects.PlaySound(m, m.Map, 0x201);
Effects.PlaySound(m, 0x201);
m.Delete();
continue;

View file

@ -62,7 +62,7 @@ namespace Server.Spells.Fifth
eastToWest = false;
}
Effects.PlaySound(p, Caster.Map, 0x20B);
Effects.PlaySound(new Point3D(p), Caster.Map, 0x20B);
var itemID = eastToWest ? 0x3915 : 0x3922;

View file

@ -43,6 +43,7 @@ namespace Server.Spells.Fourth
var map = Caster.Map;
var directTarget = p as Mobile;
var loc = new Point3D(p);
if (map != null)
{
@ -54,13 +55,13 @@ namespace Server.Spells.Fourth
targets.Add(directTarget);
}
var eable = map.GetMobilesInRange(new Point3D(p), 2);
var eable = map.GetMobilesInRange(loc, 2);
targets.AddRange(eable.Where(m => m != directTarget).Where(m => AreaCanTarget(m, feluccaRules)));
eable.Free();
}
Effects.PlaySound(p, Caster.Map, 0x299);
Effects.PlaySound(loc, Caster.Map, 0x299);
if (targets.Count > 0)
{

View file

@ -40,9 +40,11 @@ namespace Server.Spells.Fourth
SpellHelper.GetSurfaceTop(ref p);
var loc = new Point3D(p);
if (!Core.AOS)
{
Effects.PlaySound(p, Caster.Map, 0x299);
Effects.PlaySound(loc, Caster.Map, 0x299);
}
if (Caster.Map == null)
@ -51,7 +53,7 @@ namespace Server.Spells.Fourth
return;
}
var targets = Caster.Map.GetMobilesInRange(new Point3D(p), Core.AOS ? 2 : 3)
var targets = Caster.Map.GetMobilesInRange(loc, Core.AOS ? 2 : 3)
.Where(m => Caster.CanBeBeneficial(m, false));
if (Core.AOS)

View file

@ -62,7 +62,7 @@ namespace Server.Spells.Fourth
eastToWest = false;
}
Effects.PlaySound(p, Caster.Map, 0x20C);
Effects.PlaySound(new Point3D(p), Caster.Map, 0x20C);
var itemID = eastToWest ? 0x398C : 0x3996;

View file

@ -51,9 +51,11 @@ namespace Server.Spells.Mysticism
if (map != null)
{
PlayEffect(p, Caster.Map);
var loc = new Point3D(p);
foreach (var m in map.GetMobilesInRange(new Point3D(p), 2))
PlayEffect(loc, Caster.Map);
foreach (var m in map.GetMobilesInRange(loc, 2))
{
if (m == Caster)
{
@ -94,7 +96,7 @@ namespace Server.Spells.Mysticism
Caster.Target = new SpellTargetPoint3D(this);
}
private static void PlayEffect(IPoint3D p, Map map)
private static void PlayEffect(Point3D p, Map map)
{
Effects.PlaySound(p, map, 0x64F);
@ -105,7 +107,7 @@ namespace Server.Spells.Mysticism
PlaySingleEffect(p, map, -1, 1, 1, 3);
}
private static void PlaySingleEffect(IPoint3D p, Map map, int a, int b, int c, int d)
private static void PlaySingleEffect(Point3D p, Map map, int a, int b, int c, int d)
{
int x = p.X, y = p.Y, z = p.Z + 18;
@ -120,25 +122,20 @@ namespace Server.Spells.Mysticism
SendEffectPacket(p, map, new Point3D(x + a, y + c, z), new Point3D(x + a, y + d, z));
}
private static void SendEffectPacket(IPoint3D p, Map map, Point3D orig, Point3D dest)
private static void SendEffectPacket(Point3D p, Map map, Point3D orig, Point3D dest)
{
Effects.SendPacket(
Effects.SendMovingEffect(
p,
map,
new HuedEffect(
EffectType.Moving,
Serial.Zero,
Serial.Zero,
0x36D4,
orig,
dest,
0,
0,
false,
false,
0x63,
0x4
)
0x36D4,
orig,
dest,
0,
0,
false,
false,
0x63,
0x4
);
}
}

View file

@ -54,9 +54,11 @@ namespace Server.Spells.Mysticism
if (map != null)
{
PlayEffect(p, Caster.Map);
var loc = new Point3D(p);
foreach (var m in map.GetMobilesInRange(new Point3D(p), 2))
PlayEffect(loc, Caster.Map);
foreach (var m in map.GetMobilesInRange(loc, 2))
{
if (m == Caster)
{
@ -103,7 +105,7 @@ namespace Server.Spells.Mysticism
Caster.Target = new SpellTargetPoint3D(this);
}
private static void PlayEffect(IPoint3D p, Map map)
private static void PlayEffect(Point3D p, Map map)
{
Effects.PlaySound(p, map, 0x64F);
@ -114,7 +116,7 @@ namespace Server.Spells.Mysticism
PlaySingleEffect(p, map, -1, 1, 1, 3);
}
private static void PlaySingleEffect(IPoint3D p, Map map, int a, int b, int c, int d)
private static void PlaySingleEffect(Point3D p, Map map, int a, int b, int c, int d)
{
int x = p.X, y = p.Y, z = p.Z + 18;
@ -129,25 +131,20 @@ namespace Server.Spells.Mysticism
SendEffectPacket(p, map, new Point3D(x + a, y + c, z), new Point3D(x + a, y + d, z));
}
private static void SendEffectPacket(IPoint3D p, Map map, Point3D orig, Point3D dest)
private static void SendEffectPacket(Point3D p, Map map, Point3D orig, Point3D dest)
{
Effects.SendPacket(
Effects.SendMovingEffect(
p,
map,
new HuedEffect(
EffectType.Moving,
Serial.Zero,
Serial.Zero,
0x375A,
orig,
dest,
0,
0,
false,
false,
0x49A,
0x4
)
0x375A,
orig,
dest,
0,
0,
false,
false,
0x49A,
0x4
);
}
}

View file

@ -62,7 +62,7 @@ namespace Server.Spells.Seventh
eastToWest = false;
}
Effects.PlaySound(p, Caster.Map, 0x20B);
Effects.PlaySound(new Point3D(p), Caster.Map, 0x20B);
TimeSpan duration;

View file

@ -60,7 +60,7 @@ namespace Server.Spells.Seventh
20,
5042
);
Effects.PlaySound(bc, bc.Map, 0x201);
Effects.PlaySound(bc, 0x201);
bc.Delete();
}

View file

@ -46,10 +46,11 @@ namespace Server.Spells.Seventh
var map = Caster.Map;
var playerVsPlayer = false;
var loc = new Point3D(p);
if (map != null)
{
var eable = map.GetMobilesInRange(new Point3D(p), 2);
var eable = map.GetMobilesInRange(loc, 2);
targets = eable.Where(
m =>
@ -86,7 +87,7 @@ namespace Server.Spells.Seventh
if (targets.Count > 0)
{
Effects.PlaySound(p, Caster.Map, 0x160);
Effects.PlaySound(loc, Caster.Map, 0x160);
if (Core.AOS && targets.Count > 2)
{

View file

@ -53,7 +53,7 @@ namespace Server.Spells.Sixth
20,
5042
);
Effects.PlaySound(m, m.Map, 0x201);
Effects.PlaySound(m, 0x201);
m.Delete();
}

View file

@ -63,7 +63,7 @@ namespace Server.Spells.Sixth
rune.Mark(Caster);
Caster.PlaySound(0x1FA);
Effects.SendLocationEffect(Caster, Caster.Map, 14201, 16);
Effects.SendLocationEffect(Caster, 14201, 16);
}
FinishSequence();

View file

@ -61,7 +61,7 @@ namespace Server.Spells.Sixth
eastToWest = false;
}
Effects.PlaySound(p, Caster.Map, 0x20B);
Effects.PlaySound(new Point3D(p), Caster.Map, 0x20B);
var itemID = eastToWest ? 0x3967 : 0x3979;

View file

@ -27,16 +27,17 @@ namespace Server.Spells.Third
if (CheckSequence())
{
SpellHelper.Turn(Caster, p);
var loc = new Point3D(p);
Effects.SendLocationParticles(
EffectItem.Create(new Point3D(p), Caster.Map, EffectItem.DefaultDuration),
EffectItem.Create(loc, Caster.Map, EffectItem.DefaultDuration),
0x376A,
9,
32,
5024
);
Effects.PlaySound(p, Caster.Map, 0x1FF);
Effects.PlaySound(loc, Caster.Map, 0x1FF);
if (p is Mobile)
{

View file

@ -59,7 +59,7 @@ namespace Server.Spells.Third
eastToWest = false;
}
Effects.PlaySound(p, Caster.Map, 0x1F6);
Effects.PlaySound(new Point3D(p), Caster.Map, 0x1F6);
for (var i = -1; i <= 1; ++i)
{