Skip to content

Commit

Permalink
Fix Warlock Chamber Display (#452)
Browse files Browse the repository at this point in the history
Previously there was one too many chamber displayed
Add empty chamber if spell has no corresponding model
Remove chamber effect packet spam
  • Loading branch information
NetDwarf authored Feb 20, 2023
1 parent 1435bf4 commit 5f18587
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 66 deletions.
6 changes: 0 additions & 6 deletions GameServer/packets/Client/168/PlayerPositionUpdateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -742,12 +742,6 @@ public void HandlePacket(GameClient client, GSPacketIn packet)
player.Out.SendObjectDelete(client.Player); //remove the stealthed player from view
}

if (client.Player.CharacterClass.ID == (int)eCharacterClass.Warlock)
{
//Send Chamber effect
client.Player.Out.SendWarlockChamberEffect(client.Player);
}

//handle closing of windows
//trade window
if (client.Player.TradeWindow != null)
Expand Down
2 changes: 2 additions & 0 deletions GameServer/packets/Server/PacketLib1124.cs
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,8 @@ public override void SendPlayerCreate(GamePlayer playerToCreate)
{
SendRvRGuildBanner(playerToCreate, true);
}

SendWarlockChamberEffect(playerToCreate);
}

public override void SendPlayerForgedPosition(GamePlayer player)
Expand Down
83 changes: 23 additions & 60 deletions GameServer/packets/Server/PacketLib173.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,8 @@ namespace DOL.GS.PacketHandler
[PacketLib(173, GameClient.eClientVersion.Version173)]
public class PacketLib173 : PacketLib172
{
/// <summary>
/// Defines a logger for this class.
/// </summary>
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

/// <summary>
/// Constructs a new PacketLib for Version 1.73 clients
/// </summary>
/// <param name="client">the gameclient this lib is associated with</param>
public PacketLib173(GameClient client)
: base(client)
{
Expand All @@ -55,69 +48,24 @@ public override void SendWarlockChamberEffect(GamePlayer player)
{
using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.VisualEffect)))
{

pak.WriteShort((ushort)player.ObjectID);
pak.WriteByte((byte)3);

SortedList sortList = new SortedList();
sortList.Add(1, null);
sortList.Add(2, null);
sortList.Add(3, null);
sortList.Add(4, null);
sortList.Add(5, null);

lock (player.EffectList)
{
foreach (IGameEffect fx in player.EffectList)
{
if (fx is GameSpellEffect)
var effect = fx as GameSpellEffect;
var isActiveChamberSpell = effect != null && !effect.IsExpired
&& effect.SpellHandler.Spell != null && (effect.SpellHandler is ChamberSpellHandler);
if (isActiveChamberSpell)
{
GameSpellEffect effect = (GameSpellEffect)fx;
if (effect.SpellHandler.Spell != null && (effect.SpellHandler.Spell.SpellType == "Chamber"))
{
ChamberSpellHandler chamber = (ChamberSpellHandler)effect.SpellHandler;
sortList[chamber.EffectSlot] = effect;
}
}
}
foreach (GameSpellEffect effect in sortList.Values)
{
if (effect == null)
{
pak.WriteByte((byte)0);
}
else
{
ChamberSpellHandler chamber = (ChamberSpellHandler)effect.SpellHandler;
if (chamber.PrimarySpell != null && chamber.SecondarySpell == null)
{
pak.WriteByte((byte)3);
}
else if (chamber.PrimarySpell != null && chamber.SecondarySpell != null)
{
if (chamber.SecondarySpell.SpellType == "Lifedrain")
pak.WriteByte(0x11);
else if (chamber.SecondarySpell.SpellType.IndexOf("SpeedDecrease") != -1)
pak.WriteByte(0x33);
else if (chamber.SecondarySpell.SpellType == "PowerRegenBuff")
pak.WriteByte(0x77);
else if (chamber.SecondarySpell.SpellType == "DirectDamage")
pak.WriteByte(0x66);
else if (chamber.SecondarySpell.SpellType == "SpreadHeal")
pak.WriteByte(0x55);
else if (chamber.SecondarySpell.SpellType == "Nearsight")
pak.WriteByte(0x44);
else if (chamber.SecondarySpell.SpellType == "DamageOverTime")
pak.WriteByte(0x22);
}
var chamber = (ChamberSpellHandler)effect.SpellHandler;
pak.WriteByte(GetChamberModelID(chamber));
}
}
if(pak.Length < 8) pak.Fill(0x00,8 - (int)pak.Length);
}
//pak.WriteByte(0x11);
//pak.WriteByte(0x22);
//pak.WriteByte(0x33);
//pak.WriteByte(0x44);
//pak.WriteByte(0x55);
pak.WriteInt(0);

foreach (GamePlayer plr in player.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
{
Expand All @@ -129,6 +77,21 @@ public override void SendWarlockChamberEffect(GamePlayer player)
}
}

private byte GetChamberModelID(ChamberSpellHandler chamberSpell)
{
if (chamberSpell.PrimarySpell == null) return 0x00;
if (chamberSpell.SecondarySpell == null) return 0x01;

if (chamberSpell.SecondarySpell.SpellType == "Lifedrain") return 0x11;
else if (chamberSpell.SecondarySpell.SpellType == "DamageOverTime") return 0x21;
else if (chamberSpell.SecondarySpell.SpellType.Contains("SpeedDecrease")) return 0x31;
else if (chamberSpell.SecondarySpell.SpellType == "Nearsight") return 0x41;
else if (chamberSpell.SecondarySpell.SpellType == "SpreadHeal") return 0x51;
else if (chamberSpell.SecondarySpell.SpellType == "DirectDamage") return 0x61;
else if (chamberSpell.SecondarySpell.SpellType.Contains("Buff")) return 0x71;
else return 0x01;
}

public override void SendUpdateIcons(IList changedEffects, ref int lastUpdateEffectsCount)
{
if (m_gameClient.Player == null)
Expand Down

0 comments on commit 5f18587

Please sign in to comment.