Core/Grids: Move packet sending functionality out of MessageDistDeliverer and into separate, customizable class and unify LocalizedPacketDo, LocalizedPacketListDo as generic localizable action
Port From (https://github.com/TrinityCore/TrinityCore/commit/fb66575d38d2ba7ffc24c29824fa75d7019de549)
This commit is contained in:
@@ -659,7 +659,7 @@ namespace Game.Achievements
|
|||||||
if (guild)
|
if (guild)
|
||||||
{
|
{
|
||||||
BroadcastTextBuilder say_builder = new(_owner, ChatMsg.GuildAchievement, (uint)BroadcastTextIds.AchivementEarned, _owner.GetGender(), _owner, achievement.Id);
|
BroadcastTextBuilder say_builder = new(_owner, ChatMsg.GuildAchievement, (uint)BroadcastTextIds.AchivementEarned, _owner.GetGender(), _owner, achievement.Id);
|
||||||
var say_do = new LocalizedPacketDo(say_builder);
|
var say_do = new LocalizedDo(say_builder);
|
||||||
guild.BroadcastWorker(say_do, _owner);
|
guild.BroadcastWorker(say_do, _owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -676,7 +676,7 @@ namespace Game.Achievements
|
|||||||
else if (_owner.IsInWorld)
|
else if (_owner.IsInWorld)
|
||||||
{
|
{
|
||||||
BroadcastTextBuilder _builder = new(_owner, ChatMsg.Achievement, (uint)BroadcastTextIds.AchivementEarned, _owner.GetGender(), _owner, achievement.Id);
|
BroadcastTextBuilder _builder = new(_owner, ChatMsg.Achievement, (uint)BroadcastTextIds.AchivementEarned, _owner.GetGender(), _owner, achievement.Id);
|
||||||
var _localizer = new LocalizedPacketDo(_builder);
|
var _localizer = new LocalizedDo(_builder);
|
||||||
var _worker = new PlayerDistWorker(_owner, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay), _localizer);
|
var _worker = new PlayerDistWorker(_owner, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay), _localizer);
|
||||||
Cell.VisitWorldObjects(_owner, _worker, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay));
|
Cell.VisitWorldObjects(_owner, _worker, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -569,7 +569,7 @@ namespace Game.BattleGrounds
|
|||||||
}
|
}
|
||||||
|
|
||||||
BroadcastTextBuilder builder = new(null, msgType, id, Gender.Male, target);
|
BroadcastTextBuilder builder = new(null, msgType, id, Gender.Male, target);
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
BroadcastWorker(localizer);
|
BroadcastWorker(localizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1582,7 +1582,7 @@ namespace Game.BattleGrounds
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CypherStringChatBuilder builder = new(null, msgType, entry, source);
|
CypherStringChatBuilder builder = new(null, msgType, entry, source);
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
BroadcastWorker(localizer);
|
BroadcastWorker(localizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1592,7 +1592,7 @@ namespace Game.BattleGrounds
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CypherStringChatBuilder builder = new(null, msgType, entry, source, args);
|
CypherStringChatBuilder builder = new(null, msgType, entry, source, args);
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
BroadcastWorker(localizer);
|
BroadcastWorker(localizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ using Framework.Database;
|
|||||||
using Game.DataStorage;
|
using Game.DataStorage;
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
using Game.Maps;
|
using Game.Maps;
|
||||||
|
using Game.Networking;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -834,7 +835,7 @@ namespace Game.Chat
|
|||||||
|
|
||||||
void SendToAll(MessageBuilder builder, ObjectGuid guid = default)
|
void SendToAll(MessageBuilder builder, ObjectGuid guid = default)
|
||||||
{
|
{
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
|
|
||||||
foreach (var pair in _playersStore)
|
foreach (var pair in _playersStore)
|
||||||
{
|
{
|
||||||
@@ -847,7 +848,7 @@ namespace Game.Chat
|
|||||||
|
|
||||||
void SendToAllButOne(MessageBuilder builder, ObjectGuid who)
|
void SendToAllButOne(MessageBuilder builder, ObjectGuid who)
|
||||||
{
|
{
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
|
|
||||||
foreach (var pair in _playersStore)
|
foreach (var pair in _playersStore)
|
||||||
{
|
{
|
||||||
@@ -862,7 +863,7 @@ namespace Game.Chat
|
|||||||
|
|
||||||
void SendToOne(MessageBuilder builder, ObjectGuid who)
|
void SendToOne(MessageBuilder builder, ObjectGuid who)
|
||||||
{
|
{
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
|
|
||||||
Player player = Global.ObjAccessor.FindConnectedPlayer(who);
|
Player player = Global.ObjAccessor.FindConnectedPlayer(who);
|
||||||
if (player)
|
if (player)
|
||||||
@@ -871,7 +872,7 @@ namespace Game.Chat
|
|||||||
|
|
||||||
void SendToAllWithAddon(MessageBuilder builder, string addonPrefix, ObjectGuid guid = default)
|
void SendToAllWithAddon(MessageBuilder builder, string addonPrefix, ObjectGuid guid = default)
|
||||||
{
|
{
|
||||||
LocalizedPacketDo localizer = new(builder);
|
LocalizedDo localizer = new(builder);
|
||||||
|
|
||||||
foreach (var pair in _playersStore)
|
foreach (var pair in _playersStore)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,10 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
|
using Game.Cache;
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
|
using Game.Maps;
|
||||||
using Game.Networking;
|
using Game.Networking;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using Game.Cache;
|
|
||||||
|
|
||||||
namespace Game.Chat
|
namespace Game.Chat
|
||||||
{
|
{
|
||||||
@@ -38,16 +39,17 @@ namespace Game.Chat
|
|||||||
_modifier = modifier;
|
_modifier = modifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChannelNotify> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
// LocalizedPacketDo sends client DBC locale, we need to get available to server locale
|
// LocalizedPacketDo sends client DBC locale, we need to get available to server locale
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
ChannelNotify data = new();
|
PacketSenderOwning<ChannelNotify> sender = new();
|
||||||
data.Type = _modifier.GetNotificationType();
|
sender.Data.Type = _modifier.GetNotificationType();
|
||||||
data.Channel = _source.GetName(localeIdx);
|
sender.Data.Channel = _source.GetName(localeIdx);
|
||||||
_modifier.Append(data);
|
_modifier.Append(sender.Data);
|
||||||
return data;
|
sender.Data.Write();
|
||||||
|
return sender;
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel _source;
|
Channel _source;
|
||||||
@@ -61,17 +63,17 @@ namespace Game.Chat
|
|||||||
_source = source;
|
_source = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChannelNotifyJoined> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
ChannelNotifyJoined notify = new();
|
PacketSenderOwning<ChannelNotifyJoined> notify = new();
|
||||||
//notify.ChannelWelcomeMsg = "";
|
//notify.ChannelWelcomeMsg = "";
|
||||||
notify.ChatChannelID = (int)_source.GetChannelId();
|
notify.Data.ChatChannelID = (int)_source.GetChannelId();
|
||||||
//notify.InstanceID = 0;
|
//notify.InstanceID = 0;
|
||||||
notify.ChannelFlags = _source.GetFlags();
|
notify.Data.ChannelFlags = _source.GetFlags();
|
||||||
notify.Channel = _source.GetName(localeIdx);
|
notify.Data.Channel = _source.GetName(localeIdx);
|
||||||
notify.ChannelGUID = _source.GetChannelGuid();
|
notify.Data.ChannelGUID = _source.GetChannelGuid();
|
||||||
return notify;
|
return notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,14 +88,14 @@ namespace Game.Chat
|
|||||||
_suspended = suspend;
|
_suspended = suspend;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChannelNotifyLeft> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
ChannelNotifyLeft notify = new();
|
PacketSenderOwning<ChannelNotifyLeft> notify = new();
|
||||||
notify.Channel = _source.GetName(localeIdx);
|
notify.Data.Channel = _source.GetName(localeIdx);
|
||||||
notify.ChatChannelID = _source.GetChannelId();
|
notify.Data.ChatChannelID = _source.GetChannelId();
|
||||||
notify.Suspended = _suspended;
|
notify.Data.Suspended = _suspended;
|
||||||
return notify;
|
return notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,19 +113,19 @@ namespace Game.Chat
|
|||||||
_guid = guid;
|
_guid = guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
ChatPkt packet = new();
|
PacketSenderOwning<ChatPkt> packet = new();
|
||||||
Player player = Global.ObjAccessor.FindConnectedPlayer(_guid);
|
Player player = Global.ObjAccessor.FindConnectedPlayer(_guid);
|
||||||
if (player)
|
if (player)
|
||||||
packet.Initialize(ChatMsg.Channel, _lang, player, player, _what, 0, _source.GetName(localeIdx));
|
packet.Data.Initialize(ChatMsg.Channel, _lang, player, player, _what, 0, _source.GetName(localeIdx));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
packet.Initialize(ChatMsg.Channel, _lang, null, null, _what, 0, _source.GetName(localeIdx));
|
packet.Data.Initialize(ChatMsg.Channel, _lang, null, null, _what, 0, _source.GetName(localeIdx));
|
||||||
packet.SenderGUID = _guid;
|
packet.Data.SenderGUID = _guid;
|
||||||
packet.TargetGUID = _guid;
|
packet.Data.TargetGUID = _guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
@@ -146,19 +148,19 @@ namespace Game.Chat
|
|||||||
_guid = guid;
|
_guid = guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
ChatPkt packet = new();
|
PacketSenderOwning<ChatPkt> packet = new();
|
||||||
Player player = Global.ObjAccessor.FindConnectedPlayer(_guid);
|
Player player = Global.ObjAccessor.FindConnectedPlayer(_guid);
|
||||||
if (player)
|
if (player)
|
||||||
packet.Initialize(ChatMsg.Channel, _lang, player, player, _what, 0, _source.GetName(localeIdx), Locale.enUS, _prefix);
|
packet.Data.Initialize(ChatMsg.Channel, _lang, player, player, _what, 0, _source.GetName(localeIdx), Locale.enUS, _prefix);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
packet.Initialize(ChatMsg.Channel, _lang, null, null, _what, 0, _source.GetName(localeIdx), Locale.enUS, _prefix);
|
packet.Data.Initialize(ChatMsg.Channel, _lang, null, null, _what, 0, _source.GetName(localeIdx), Locale.enUS, _prefix);
|
||||||
packet.SenderGUID = _guid;
|
packet.Data.SenderGUID = _guid;
|
||||||
packet.TargetGUID = _guid;
|
packet.Data.TargetGUID = _guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
@@ -179,16 +181,16 @@ namespace Game.Chat
|
|||||||
_guid = guid;
|
_guid = guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<UserlistAdd> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
UserlistAdd userlistAdd = new();
|
PacketSenderOwning<UserlistAdd> userlistAdd = new();
|
||||||
userlistAdd.AddedUserGUID = _guid;
|
userlistAdd.Data.AddedUserGUID = _guid;
|
||||||
userlistAdd.ChannelFlags = _source.GetFlags();
|
userlistAdd.Data.ChannelFlags = _source.GetFlags();
|
||||||
userlistAdd.UserFlags = _source.GetPlayerFlags(_guid);
|
userlistAdd.Data.UserFlags = _source.GetPlayerFlags(_guid);
|
||||||
userlistAdd.ChannelID = _source.GetChannelId();
|
userlistAdd.Data.ChannelID = _source.GetChannelId();
|
||||||
userlistAdd.ChannelName = _source.GetName(localeIdx);
|
userlistAdd.Data.ChannelName = _source.GetName(localeIdx);
|
||||||
return userlistAdd;
|
return userlistAdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,16 +206,16 @@ namespace Game.Chat
|
|||||||
_guid = guid;
|
_guid = guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<UserlistUpdate> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
UserlistUpdate userlistUpdate = new();
|
PacketSenderOwning<UserlistUpdate> userlistUpdate = new();
|
||||||
userlistUpdate.UpdatedUserGUID = _guid;
|
userlistUpdate.Data.UpdatedUserGUID = _guid;
|
||||||
userlistUpdate.ChannelFlags = _source.GetFlags();
|
userlistUpdate.Data.ChannelFlags = _source.GetFlags();
|
||||||
userlistUpdate.UserFlags = _source.GetPlayerFlags(_guid);
|
userlistUpdate.Data.UserFlags = _source.GetPlayerFlags(_guid);
|
||||||
userlistUpdate.ChannelID = _source.GetChannelId();
|
userlistUpdate.Data.ChannelID = _source.GetChannelId();
|
||||||
userlistUpdate.ChannelName = _source.GetName(localeIdx);
|
userlistUpdate.Data.ChannelName = _source.GetName(localeIdx);
|
||||||
return userlistUpdate;
|
return userlistUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,15 +231,15 @@ namespace Game.Chat
|
|||||||
_guid = guid;
|
_guid = guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<UserlistRemove> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
Locale localeIdx = Global.WorldMgr.GetAvailableDbcLocale(locale);
|
||||||
|
|
||||||
UserlistRemove userlistRemove = new();
|
PacketSenderOwning<UserlistRemove> userlistRemove = new();
|
||||||
userlistRemove.RemovedUserGUID = _guid;
|
userlistRemove.Data.RemovedUserGUID = _guid;
|
||||||
userlistRemove.ChannelFlags = _source.GetFlags();
|
userlistRemove.Data.ChannelFlags = _source.GetFlags();
|
||||||
userlistRemove.ChannelID = _source.GetChannelId();
|
userlistRemove.Data.ChannelID = _source.GetChannelId();
|
||||||
userlistRemove.ChannelName = _source.GetName(localeIdx);
|
userlistRemove.Data.ChannelName = _source.GetName(localeIdx);
|
||||||
return userlistRemove;
|
return userlistRemove;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1355,13 +1355,15 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public virtual void SendMessageToSetInRange(ServerPacket data, float dist, bool self)
|
public virtual void SendMessageToSetInRange(ServerPacket data, float dist, bool self)
|
||||||
{
|
{
|
||||||
MessageDistDeliverer notifier = new(this, data, dist);
|
PacketSenderRef sender = new(data);
|
||||||
|
MessageDistDeliverer<PacketSenderRef> notifier = new(this, sender, dist);
|
||||||
Cell.VisitWorldObjects(this, notifier, dist);
|
Cell.VisitWorldObjects(this, notifier, dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendMessageToSet(ServerPacket data, Player skip)
|
public virtual void SendMessageToSet(ServerPacket data, Player skip)
|
||||||
{
|
{
|
||||||
var notifier = new MessageDistDeliverer(this, data, GetVisibilityRange(), false, skip);
|
PacketSenderRef sender = new(data);
|
||||||
|
var notifier = new MessageDistDeliverer<PacketSenderRef>(this, sender, GetVisibilityRange(), false, skip);
|
||||||
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5970,7 +5970,8 @@ namespace Game.Entities
|
|||||||
if (self)
|
if (self)
|
||||||
SendPacket(data);
|
SendPacket(data);
|
||||||
|
|
||||||
MessageDistDeliverer notifier = new(this, data, dist);
|
PacketSenderRef sender = new(data);
|
||||||
|
var notifier = new MessageDistDeliverer<PacketSenderRef>(this, sender, dist);
|
||||||
Cell.VisitWorldObjects(this, notifier, dist);
|
Cell.VisitWorldObjects(this, notifier, dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5979,7 +5980,8 @@ namespace Game.Entities
|
|||||||
if (self)
|
if (self)
|
||||||
SendPacket(data);
|
SendPacket(data);
|
||||||
|
|
||||||
MessageDistDeliverer notifier = new(this, data, dist, own_team_only);
|
PacketSenderRef sender = new(data);
|
||||||
|
var notifier = new MessageDistDeliverer<PacketSenderRef>(this, sender, dist, own_team_only);
|
||||||
Cell.VisitWorldObjects(this, notifier, dist);
|
Cell.VisitWorldObjects(this, notifier, dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5990,7 +5992,8 @@ namespace Game.Entities
|
|||||||
|
|
||||||
// we use World.GetMaxVisibleDistance() because i cannot see why not use a distance
|
// we use World.GetMaxVisibleDistance() because i cannot see why not use a distance
|
||||||
// update: replaced by GetMap().GetVisibilityDistance()
|
// update: replaced by GetMap().GetVisibilityDistance()
|
||||||
MessageDistDeliverer notifier = new(this, data, GetVisibilityRange(), false, skipped_rcvr);
|
PacketSenderRef sender = new(data);
|
||||||
|
var notifier = new MessageDistDeliverer<PacketSenderRef>(this, sender, GetVisibilityRange(), false, skipped_rcvr);
|
||||||
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||||
}
|
}
|
||||||
public override void SendMessageToSet(ServerPacket data, bool self)
|
public override void SendMessageToSet(ServerPacket data, bool self)
|
||||||
|
|||||||
@@ -1549,7 +1549,7 @@ namespace Game.Entities
|
|||||||
internal void SendCombatLogMessage(CombatLogServerPacket combatLog)
|
internal void SendCombatLogMessage(CombatLogServerPacket combatLog)
|
||||||
{
|
{
|
||||||
CombatLogSender combatLogCustomizer = new(combatLog);
|
CombatLogSender combatLogCustomizer = new(combatLog);
|
||||||
MessageDistDeliverer notifier = new(this, combatLogCustomizer, GetVisibilityRange());
|
var notifier = new MessageDistDeliverer<CombatLogSender>(this, combatLogCustomizer, GetVisibilityRange());
|
||||||
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -578,7 +578,7 @@ namespace Game.Entities
|
|||||||
public StringArray name = new(SharedConst.MaxDeclinedNameCases);
|
public StringArray name = new(SharedConst.MaxDeclinedNameCases);
|
||||||
}
|
}
|
||||||
|
|
||||||
class CombatLogSender : MessageDistDelivererCustomizer
|
class CombatLogSender : IDoWork<Player>
|
||||||
{
|
{
|
||||||
CombatLogServerPacket i_message;
|
CombatLogServerPacket i_message;
|
||||||
|
|
||||||
@@ -587,11 +587,12 @@ namespace Game.Entities
|
|||||||
i_message = msg;
|
i_message = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Player player)
|
public void Invoke(Player player)
|
||||||
{
|
{
|
||||||
|
i_message.Clear();
|
||||||
i_message.SetAdvancedCombatLogging(player.IsAdvancedCombatLoggingEnabled());
|
i_message.SetAdvancedCombatLogging(player.IsAdvancedCombatLoggingEnabled());
|
||||||
|
|
||||||
return i_message;
|
player.SendPacket(i_message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -351,7 +351,7 @@ namespace Game.Entities
|
|||||||
public virtual void Talk(string text, ChatMsg msgType, Language language, float textRange, WorldObject target)
|
public virtual void Talk(string text, ChatMsg msgType, Language language, float textRange, WorldObject target)
|
||||||
{
|
{
|
||||||
var builder = new CustomChatTextBuilder(this, msgType, text, language, target);
|
var builder = new CustomChatTextBuilder(this, msgType, text, language, target);
|
||||||
var localizer = new LocalizedPacketDo(builder);
|
var localizer = new LocalizedDo(builder);
|
||||||
var worker = new PlayerDistWorker(this, textRange, localizer);
|
var worker = new PlayerDistWorker(this, textRange, localizer);
|
||||||
Cell.VisitWorldObjects(this, worker, textRange);
|
Cell.VisitWorldObjects(this, worker, textRange);
|
||||||
}
|
}
|
||||||
@@ -391,7 +391,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
var builder = new BroadcastTextBuilder(this, msgType, textId, GetGender(), target);
|
var builder = new BroadcastTextBuilder(this, msgType, textId, GetGender(), target);
|
||||||
var localizer = new LocalizedPacketDo(builder);
|
var localizer = new LocalizedDo(builder);
|
||||||
var worker = new PlayerDistWorker(this, textRange, localizer);
|
var worker = new PlayerDistWorker(this, textRange, localizer);
|
||||||
Cell.VisitWorldObjects(this, worker, textRange);
|
Cell.VisitWorldObjects(this, worker, textRange);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -378,44 +378,45 @@ namespace Game.Maps
|
|||||||
bool isCreature;
|
bool isCreature;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageDistDelivererCustomizer
|
public class PacketSenderRef : IDoWork<Player>
|
||||||
{
|
{
|
||||||
ServerPacket i_message;
|
ServerPacket Data;
|
||||||
|
|
||||||
public MessageDistDelivererCustomizer() { }
|
public PacketSenderRef() { }
|
||||||
|
|
||||||
public MessageDistDelivererCustomizer(ServerPacket message)
|
public PacketSenderRef(ServerPacket message)
|
||||||
{
|
{
|
||||||
i_message = message;
|
Data = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual ServerPacket Invoke(Player player)
|
public virtual void Invoke(Player player)
|
||||||
{
|
{
|
||||||
return i_message;
|
player.SendPacket(Data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageDistDeliverer : Notifier
|
public class PacketSenderOwning<T> : IDoWork<Player> where T : ServerPacket
|
||||||
|
{
|
||||||
|
public T Data;
|
||||||
|
|
||||||
|
public void Invoke(Player player)
|
||||||
|
{
|
||||||
|
player.SendPacket(Data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MessageDistDeliverer<T> : Notifier where T : IDoWork<Player>
|
||||||
{
|
{
|
||||||
WorldObject i_source;
|
WorldObject i_source;
|
||||||
MessageDistDelivererCustomizer i_messageCustomizer;
|
T i_packetSender;
|
||||||
float i_distSq;
|
float i_distSq;
|
||||||
uint team;
|
uint team;
|
||||||
Player skipped_receiver;
|
Player skipped_receiver;
|
||||||
|
|
||||||
public MessageDistDeliverer(WorldObject src, ServerPacket pkt, float dist, bool own_team_only = false, Player skipped = null)
|
public MessageDistDeliverer(WorldObject src, T packetSender, float dist, bool own_team_only = false, Player skipped = null)
|
||||||
{
|
{
|
||||||
i_source = src;
|
i_source = src;
|
||||||
i_messageCustomizer = new(pkt);
|
i_packetSender = packetSender;
|
||||||
i_distSq = dist * dist;
|
|
||||||
team = (uint)((own_team_only && src.IsTypeId(TypeId.Player)) ? ((Player)src).GetTeam() : 0);
|
|
||||||
skipped_receiver = skipped;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageDistDeliverer(WorldObject src, MessageDistDelivererCustomizer packetCustomizer, float dist, bool own_team_only = false, Player skipped = null)
|
|
||||||
{
|
|
||||||
i_source = src;
|
|
||||||
i_messageCustomizer = packetCustomizer;
|
|
||||||
i_distSq = dist * dist;
|
i_distSq = dist * dist;
|
||||||
team = (uint)((own_team_only && src.IsTypeId(TypeId.Player)) ? ((Player)src).GetTeam() : 0);
|
team = (uint)((own_team_only && src.IsTypeId(TypeId.Player)) ? ((Player)src).GetTeam() : 0);
|
||||||
skipped_receiver = skipped;
|
skipped_receiver = skipped;
|
||||||
@@ -497,27 +498,20 @@ namespace Game.Maps
|
|||||||
if (!player.HaveAtClient(i_source))
|
if (!player.HaveAtClient(i_source))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player.SendPacket(i_messageCustomizer.Invoke(player));
|
i_packetSender.Invoke(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageDistDelivererToHostile : Notifier
|
public class MessageDistDelivererToHostile<T> : Notifier where T : IDoWork<Player>
|
||||||
{
|
{
|
||||||
Unit i_source;
|
Unit i_source;
|
||||||
MessageDistDelivererCustomizer i_messageCustomizer;
|
T i_packetSender;
|
||||||
float i_distSq;
|
float i_distSq;
|
||||||
|
|
||||||
public MessageDistDelivererToHostile(Unit src, ServerPacket pkt, float dist)
|
public MessageDistDelivererToHostile(Unit src, T packetSender, float dist)
|
||||||
{
|
{
|
||||||
i_source = src;
|
i_source = src;
|
||||||
i_messageCustomizer = new(pkt);
|
i_packetSender = packetSender;
|
||||||
i_distSq = dist * dist;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageDistDelivererToHostile(Unit src, MessageDistDelivererCustomizer packetCustomizer, float dist)
|
|
||||||
{
|
|
||||||
i_source = src;
|
|
||||||
i_messageCustomizer = packetCustomizer;
|
|
||||||
i_distSq = dist * dist;
|
i_distSq = dist * dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,7 +588,7 @@ namespace Game.Maps
|
|||||||
if (player == i_source || !player.HaveAtClient(i_source) || player.IsFriendlyTo(i_source))
|
if (player == i_source || !player.HaveAtClient(i_source) || player.IsFriendlyTo(i_source))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player.SendPacket(i_messageCustomizer.Invoke(player));
|
i_packetSender.Invoke(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -941,69 +935,36 @@ namespace Game.Maps
|
|||||||
float i_range;
|
float i_range;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LocalizedPacketDo : IDoWork<Player>
|
public class LocalizedDo : IDoWork<Player>
|
||||||
{
|
{
|
||||||
public LocalizedPacketDo(MessageBuilder builder)
|
public LocalizedDo(MessageBuilder localizer)
|
||||||
{
|
{
|
||||||
Builder = builder;
|
_localizer = localizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Invoke(Player player)
|
public void Invoke(Player player)
|
||||||
{
|
{
|
||||||
Locale loc_idx = player.GetSession().GetSessionDbLocaleIndex();
|
Locale loc_idx = player.GetSession().GetSessionDbLocaleIndex();
|
||||||
int cache_idx = (int)loc_idx + 1;
|
int cache_idx = (int)loc_idx + 1;
|
||||||
ServerPacket data;
|
IDoWork<Player> action;
|
||||||
|
|
||||||
// create if not cached yet
|
// create if not cached yet
|
||||||
if (i_data_cache.Length < cache_idx + 1 || i_data_cache[cache_idx] == null)
|
if (_localizedCache.Length < cache_idx + 1 || _localizedCache[cache_idx] == null)
|
||||||
{
|
{
|
||||||
if (i_data_cache.Length < cache_idx + 1)
|
if (_localizedCache.Length < cache_idx + 1)
|
||||||
Array.Resize(ref i_data_cache, cache_idx + 1);
|
Array.Resize(ref _localizedCache, cache_idx + 1);
|
||||||
|
|
||||||
data = Builder.Invoke(loc_idx);
|
action = _localizer.Invoke(loc_idx);
|
||||||
|
_localizedCache[cache_idx] = action;
|
||||||
i_data_cache[cache_idx] = data;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
data = i_data_cache[cache_idx];
|
action = _localizedCache[cache_idx];
|
||||||
|
|
||||||
player.SendPacket(data);
|
action.Invoke(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageBuilder Builder;
|
MessageBuilder _localizer;
|
||||||
ServerPacket[] i_data_cache = new ServerPacket[(int)Locale.Total]; // 0 = default, i => i-1 locale index
|
IDoWork<Player>[] _localizedCache = new IDoWork<Player>[(int)Locale.Total]; // 0 = default, i => i-1 locale index
|
||||||
}
|
|
||||||
|
|
||||||
public class LocalizedPacketListDo : IDoWork<Player>
|
|
||||||
{
|
|
||||||
public LocalizedPacketListDo(MessageBuilder builder)
|
|
||||||
{
|
|
||||||
i_builder = builder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Invoke(Player p)
|
|
||||||
{
|
|
||||||
Locale loc_idx = p.GetSession().GetSessionDbLocaleIndex();
|
|
||||||
int cache_idx = (int)loc_idx + 1;
|
|
||||||
List<ServerPacket> data_list = new();
|
|
||||||
|
|
||||||
// create if not cached yet
|
|
||||||
if (i_data_cache.Count < cache_idx + 1 || i_data_cache[cache_idx].Empty())
|
|
||||||
{
|
|
||||||
data_list = i_data_cache[cache_idx];
|
|
||||||
|
|
||||||
i_builder.Invoke(data_list, loc_idx);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
data_list = i_data_cache[cache_idx];
|
|
||||||
|
|
||||||
foreach (var packet in data_list)
|
|
||||||
p.SendPacket(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageBuilder i_builder;
|
|
||||||
MultiMap<int, ServerPacket> i_data_cache = new();
|
|
||||||
// 0 = default, i => i-1 locale index
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RespawnDo : IDoWork<WorldObject>
|
public class RespawnDo : IDoWork<WorldObject>
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ namespace Game.PvP
|
|||||||
public void SendDefenseMessage(uint zoneId, uint id)
|
public void SendDefenseMessage(uint zoneId, uint id)
|
||||||
{
|
{
|
||||||
DefenseMessageBuilder builder = new(zoneId, id);
|
DefenseMessageBuilder builder = new(zoneId, id);
|
||||||
var localizer = new LocalizedPacketDo(builder);
|
var localizer = new LocalizedDo(builder);
|
||||||
BroadcastWorker(localizer, zoneId);
|
BroadcastWorker(localizer, zoneId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -736,13 +736,13 @@ namespace Game.PvP
|
|||||||
_id = id;
|
_id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<DefenseMessage> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
string text = Global.OutdoorPvPMgr.GetDefenseMessage(_zoneId, _id, locale);
|
string text = Global.OutdoorPvPMgr.GetDefenseMessage(_zoneId, _id, locale);
|
||||||
|
|
||||||
DefenseMessage defenseMessage = new();
|
PacketSenderOwning<DefenseMessage> defenseMessage = new();
|
||||||
defenseMessage.ZoneID = _zoneId;
|
defenseMessage.Data.ZoneID = _zoneId;
|
||||||
defenseMessage.MessageText = text;
|
defenseMessage.Data.MessageText = text;
|
||||||
return defenseMessage;
|
return defenseMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1472,7 +1472,7 @@ namespace Game
|
|||||||
public void SendWorldText(CypherStrings string_id, params object[] args)
|
public void SendWorldText(CypherStrings string_id, params object[] args)
|
||||||
{
|
{
|
||||||
WorldWorldTextBuilder wt_builder = new((uint)string_id, args);
|
WorldWorldTextBuilder wt_builder = new((uint)string_id, args);
|
||||||
var wt_do = new LocalizedPacketListDo(wt_builder);
|
var wt_do = new LocalizedDo(wt_builder);
|
||||||
foreach (var session in m_sessions.Values)
|
foreach (var session in m_sessions.Values)
|
||||||
{
|
{
|
||||||
if (session == null || !session.GetPlayer() || !session.GetPlayer().IsInWorld)
|
if (session == null || !session.GetPlayer() || !session.GetPlayer().IsInWorld)
|
||||||
@@ -1486,7 +1486,7 @@ namespace Game
|
|||||||
public void SendGMText(CypherStrings string_id, params object[] args)
|
public void SendGMText(CypherStrings string_id, params object[] args)
|
||||||
{
|
{
|
||||||
var wt_builder = new WorldWorldTextBuilder((uint)string_id, args);
|
var wt_builder = new WorldWorldTextBuilder((uint)string_id, args);
|
||||||
var wt_do = new LocalizedPacketListDo(wt_builder);
|
var wt_do = new LocalizedDo(wt_builder);
|
||||||
foreach (var session in m_sessions.Values)
|
foreach (var session in m_sessions.Values)
|
||||||
{
|
{
|
||||||
// Session should have permissions to receive global gm messages
|
// Session should have permissions to receive global gm messages
|
||||||
@@ -2512,32 +2512,47 @@ namespace Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class WorldWorldTextBuilder : MessageBuilder
|
public class WorldWorldTextBuilder : MessageBuilder
|
||||||
{
|
{
|
||||||
public WorldWorldTextBuilder(uint textId, params object[] args)
|
public WorldWorldTextBuilder(uint textId, params object[] args)
|
||||||
{
|
{
|
||||||
i_textId = textId;
|
i_textId = textId;
|
||||||
i_args = args;
|
i_args = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Invoke(List<ServerPacket> data_list, Locale loc_idx)
|
public override MultiplePacketSender Invoke(Locale locale)
|
||||||
{
|
{
|
||||||
string text = Global.ObjectMgr.GetCypherString(i_textId, loc_idx);
|
string text = Global.ObjectMgr.GetCypherString(i_textId, locale);
|
||||||
|
|
||||||
if (i_args != null)
|
if (i_args != null)
|
||||||
text = string.Format(text, i_args);
|
text = string.Format(text, i_args);
|
||||||
|
|
||||||
ChatPkt messageChat = new();
|
MultiplePacketSender sender = new MultiplePacketSender();
|
||||||
|
|
||||||
var lines = new StringArray(text, "\n");
|
var lines = new StringArray(text, "\n");
|
||||||
for (var i = 0; i < lines.Length; ++i)
|
for (var i = 0; i < lines.Length; ++i)
|
||||||
{
|
{
|
||||||
|
ChatPkt messageChat = new();
|
||||||
messageChat.Initialize(ChatMsg.System, Language.Universal, null, null, lines[i]);
|
messageChat.Initialize(ChatMsg.System, Language.Universal, null, null, lines[i]);
|
||||||
data_list.Add(messageChat);
|
messageChat.Write();
|
||||||
|
sender.Packets.Add(messageChat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sender;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint i_textId;
|
uint i_textId;
|
||||||
object[] i_args;
|
object[] i_args;
|
||||||
|
|
||||||
|
public class MultiplePacketSender : IDoWork<Player>
|
||||||
|
{
|
||||||
|
public void Invoke(Player receiver)
|
||||||
|
{
|
||||||
|
foreach (var packet in Packets)
|
||||||
|
receiver.SendPacket(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ServerPacket> Packets = new();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Autobroadcast
|
struct Autobroadcast
|
||||||
|
|||||||
@@ -3804,6 +3804,7 @@ namespace Game.Spells
|
|||||||
|
|
||||||
packet.LogData.Initialize(this);
|
packet.LogData.Initialize(this);
|
||||||
|
|
||||||
|
|
||||||
m_caster.SendCombatLogMessage(packet);
|
m_caster.SendCombatLogMessage(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3801,15 +3801,18 @@ namespace Game.Spells
|
|||||||
float dist = m_caster.GetVisibilityRange();
|
float dist = m_caster.GetVisibilityRange();
|
||||||
|
|
||||||
// clear focus
|
// clear focus
|
||||||
BreakTarget breakTarget = new();
|
PacketSenderOwning<BreakTarget> breakTarget = new();
|
||||||
breakTarget.UnitGUID = m_caster.GetGUID();
|
breakTarget.Data.UnitGUID = m_caster.GetGUID();
|
||||||
MessageDistDelivererToHostile notifierBreak = new(m_caster, breakTarget, dist);
|
breakTarget.Data.Write();
|
||||||
|
|
||||||
|
var notifierBreak = new MessageDistDelivererToHostile<PacketSenderOwning<BreakTarget>>(m_caster, breakTarget, dist);
|
||||||
Cell.VisitWorldObjects(m_caster, notifierBreak, dist);
|
Cell.VisitWorldObjects(m_caster, notifierBreak, dist);
|
||||||
|
|
||||||
// and selection
|
// and selection
|
||||||
ClearTarget clearTarget = new();
|
PacketSenderOwning<ClearTarget> clearTarget = new();
|
||||||
clearTarget.Guid = m_caster.GetGUID();
|
clearTarget.Data.Guid = m_caster.GetGUID();
|
||||||
MessageDistDelivererToHostile notifierClear = new(m_caster, clearTarget, dist);
|
clearTarget.Data.Write();
|
||||||
|
var notifierClear = new MessageDistDelivererToHostile<PacketSenderOwning<ClearTarget>>(m_caster, clearTarget, dist);
|
||||||
Cell.VisitWorldObjects(m_caster, notifierClear, dist);
|
Cell.VisitWorldObjects(m_caster, notifierClear, dist);
|
||||||
|
|
||||||
// we should also force pets to remove us from current target
|
// we should also force pets to remove us from current target
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Game.DataStorage;
|
using Game.DataStorage;
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
|
using Game.Maps;
|
||||||
using Game.Networking;
|
using Game.Networking;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -26,8 +27,7 @@ namespace Game.Chat
|
|||||||
{
|
{
|
||||||
public class MessageBuilder
|
public class MessageBuilder
|
||||||
{
|
{
|
||||||
public virtual ServerPacket Invoke(Locale locale = Locale.enUS) { return null; }
|
public virtual dynamic Invoke(Locale locale = Locale.enUS) { return default; }
|
||||||
public virtual void Invoke(List<ServerPacket> data, Locale locale = Locale.enUS) { }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BroadcastTextBuilder : MessageBuilder
|
public class BroadcastTextBuilder : MessageBuilder
|
||||||
@@ -42,12 +42,12 @@ namespace Game.Chat
|
|||||||
_achievementId = achievementId;
|
_achievementId = achievementId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
BroadcastTextRecord bct = CliDB.BroadcastTextStorage.LookupByKey(_textId);
|
BroadcastTextRecord bct = CliDB.BroadcastTextStorage.LookupByKey(_textId);
|
||||||
var packet = new ChatPkt();
|
var chat = new PacketSenderOwning<ChatPkt>();
|
||||||
packet.Initialize(_msgType, bct != null ? (Language)bct.LanguageID : Language.Universal, _source, _target, bct != null ? Global.DB2Mgr.GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale);
|
chat.Data.Initialize(_msgType, bct != null ? (Language)bct.LanguageID : Language.Universal, _source, _target, bct != null ? Global.DB2Mgr.GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale);
|
||||||
return packet;
|
return chat;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldObject _source;
|
WorldObject _source;
|
||||||
@@ -69,11 +69,11 @@ namespace Game.Chat
|
|||||||
_target = target;
|
_target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale)
|
||||||
{
|
{
|
||||||
var packet = new ChatPkt();
|
var chat = new PacketSenderOwning<ChatPkt>();
|
||||||
packet.Initialize(_msgType, _language, _source, _target, _text, 0, "", locale);
|
chat.Data.Initialize(_msgType, _language, _source, _target, _text, 0, "", locale);
|
||||||
return packet;
|
return chat;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldObject _source;
|
WorldObject _source;
|
||||||
@@ -94,18 +94,18 @@ namespace Game.Chat
|
|||||||
_args = args;
|
_args = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale)
|
||||||
{
|
{
|
||||||
ChatPkt packet = new();
|
PacketSenderOwning<ChatPkt> chat = new();
|
||||||
|
|
||||||
string text = Global.ObjectMgr.GetCypherString(_textId, locale);
|
string text = Global.ObjectMgr.GetCypherString(_textId, locale);
|
||||||
|
|
||||||
if (_args != null)
|
if (_args != null)
|
||||||
packet.Initialize(_msgType, Language.Universal, _source, _target, string.Format(text, _args), 0, "", locale);
|
chat.Data.Initialize(_msgType, Language.Universal, _source, _target, string.Format(text, _args), 0, "", locale);
|
||||||
else
|
else
|
||||||
packet.Initialize(_msgType, Language.Universal, _source, _target, text, 0, "", locale);
|
chat.Data.Initialize(_msgType, Language.Universal, _source, _target, text, 0, "", locale);
|
||||||
|
|
||||||
return packet;
|
return chat;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldObject _source;
|
WorldObject _source;
|
||||||
|
|||||||
@@ -596,32 +596,33 @@ namespace Game
|
|||||||
public void Invoke(Player player)
|
public void Invoke(Player player)
|
||||||
{
|
{
|
||||||
Locale loc_idx = player.GetSession().GetSessionDbLocaleIndex();
|
Locale loc_idx = player.GetSession().GetSessionDbLocaleIndex();
|
||||||
ServerPacket messageTemplate;
|
PacketSenderOwning<ChatPkt> sender;
|
||||||
|
|
||||||
// create if not cached yet
|
// create if not cached yet
|
||||||
if (!_packetCache.ContainsKey(loc_idx))
|
if (!_packetCache.ContainsKey(loc_idx))
|
||||||
{
|
{
|
||||||
messageTemplate = _builder.Invoke(loc_idx);
|
sender = _builder.Invoke(loc_idx);
|
||||||
_packetCache[loc_idx] = messageTemplate;
|
_packetCache[loc_idx] = sender;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
messageTemplate = _packetCache[loc_idx];
|
sender = _packetCache[loc_idx];
|
||||||
|
|
||||||
ChatPkt message = (ChatPkt)messageTemplate;
|
|
||||||
switch (_msgType)
|
switch (_msgType)
|
||||||
{
|
{
|
||||||
case ChatMsg.MonsterWhisper:
|
case ChatMsg.MonsterWhisper:
|
||||||
case ChatMsg.RaidBossWhisper:
|
case ChatMsg.RaidBossWhisper:
|
||||||
|
ChatPkt message = sender.Data;
|
||||||
message.SetReceiver(player, loc_idx);
|
message.SetReceiver(player, loc_idx);
|
||||||
|
player.SendPacket(message);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.SendPacket(message);
|
sender.Invoke(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<Locale, ServerPacket> _packetCache = new();
|
Dictionary<Locale, PacketSenderOwning<ChatPkt>> _packetCache = new();
|
||||||
MessageBuilder _builder;
|
MessageBuilder _builder;
|
||||||
ChatMsg _msgType;
|
ChatMsg _msgType;
|
||||||
}
|
}
|
||||||
@@ -639,12 +640,12 @@ namespace Game
|
|||||||
_target = target;
|
_target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale locale = Locale.enUS)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale locale = Locale.enUS)
|
||||||
{
|
{
|
||||||
string text = Global.CreatureTextMgr.GetLocalizedChatString(_source.GetEntry(), _gender, _textGroup, _textId, locale);
|
string text = Global.CreatureTextMgr.GetLocalizedChatString(_source.GetEntry(), _gender, _textGroup, _textId, locale);
|
||||||
var packet = new ChatPkt();
|
PacketSenderOwning<ChatPkt> chat = new();
|
||||||
packet.Initialize(_msgType, _language, _source, _target, text, 0, "", locale);
|
chat.Data.Initialize(_msgType, _language, _source, _target, text, 0, "", locale);
|
||||||
return packet;
|
return chat;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldObject _source;
|
WorldObject _source;
|
||||||
@@ -670,12 +671,12 @@ namespace Game
|
|||||||
_target = target;
|
_target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServerPacket Invoke(Locale loc_idx = Locale.enUS)
|
public override PacketSenderOwning<ChatPkt> Invoke(Locale loc_idx = Locale.enUS)
|
||||||
{
|
{
|
||||||
string text = Global.CreatureTextMgr.GetLocalizedChatString(_source.GetEntry(), _gender, _textGroup, _textId, loc_idx);
|
string text = Global.CreatureTextMgr.GetLocalizedChatString(_source.GetEntry(), _gender, _textGroup, _textId, loc_idx);
|
||||||
var packet = new ChatPkt();
|
PacketSenderOwning<ChatPkt> chat = new();
|
||||||
packet.Initialize(_msgType, _language, _talker, _target, text, 0, "", loc_idx);
|
chat.Data.Initialize(_msgType, _language, _talker, _target, text, 0, "", loc_idx);
|
||||||
return packet;
|
return chat;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldObject _source;
|
WorldObject _source;
|
||||||
|
|||||||
Reference in New Issue
Block a user