Core/Chat: Rewrite some custom channel handling. Channel creation now properly saves passwords.
Port From (https://github.com/TrinityCore/TrinityCore/commit/ea753efb9370455979c8af8ebaafa734b77d6052)
This commit is contained in:
@@ -172,7 +172,7 @@ namespace Game.Chat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void JoinChannel(Player player, string pass)
|
public void JoinChannel(Player player, string pass = "")
|
||||||
{
|
{
|
||||||
ObjectGuid guid = player.GetGUID();
|
ObjectGuid guid = player.GetGUID();
|
||||||
if (IsOn(guid))
|
if (IsOn(guid))
|
||||||
@@ -193,7 +193,7 @@ namespace Game.Chat
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(_channelPassword) && pass != _channelPassword)
|
if (!CheckPassword(pass))
|
||||||
{
|
{
|
||||||
var builder = new ChannelNameBuilder(this, new WrongPasswordAppend());
|
var builder = new ChannelNameBuilder(this, new WrongPasswordAppend());
|
||||||
SendToOne(builder, guid);
|
SendToOne(builder, guid);
|
||||||
@@ -892,11 +892,11 @@ namespace Game.Chat
|
|||||||
|
|
||||||
public bool IsLFG() { return GetFlags().HasAnyFlag(ChannelFlags.Lfg); }
|
public bool IsLFG() { return GetFlags().HasAnyFlag(ChannelFlags.Lfg); }
|
||||||
bool IsAnnounce() { return _announceEnabled; }
|
bool IsAnnounce() { return _announceEnabled; }
|
||||||
void SetAnnounce(bool nannounce) { _announceEnabled = nannounce; }
|
void SetAnnounce(bool announce) { _announceEnabled = announce; }
|
||||||
|
|
||||||
string GetPassword() { return _channelPassword; }
|
|
||||||
void SetPassword(string npassword) { _channelPassword = npassword; }
|
|
||||||
|
|
||||||
|
public void SetPassword(string npassword) { _channelPassword = npassword; }
|
||||||
|
public bool CheckPassword(string password) { return _channelPassword.IsEmpty() || (_channelPassword == password); }
|
||||||
|
|
||||||
public uint GetNumPlayers() { return (uint)_playersStore.Count; }
|
public uint GetNumPlayers() { return (uint)_playersStore.Count; }
|
||||||
|
|
||||||
public ChannelFlags GetFlags() { return _channelFlags; }
|
public ChannelFlags GetFlags() { return _channelFlags; }
|
||||||
|
|||||||
@@ -67,31 +67,33 @@ namespace Game.Chat
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Channel GetJoinChannel(uint channelId, string name, AreaTableRecord zoneEntry = null)
|
public Channel GetSystemChannel(uint channelId, AreaTableRecord zoneEntry = null)
|
||||||
{
|
{
|
||||||
if (channelId != 0) // builtin
|
ObjectGuid channelGuid = CreateBuiltinChannelGuid(channelId, zoneEntry);
|
||||||
{
|
var currentChannel = _channels.LookupByKey(channelGuid);
|
||||||
ObjectGuid channelGuid = CreateBuiltinChannelGuid(channelId, zoneEntry);
|
if (currentChannel != null)
|
||||||
var channel = _channels.LookupByKey(channelGuid);
|
return currentChannel;
|
||||||
if (channel != null)
|
|
||||||
return channel;
|
|
||||||
|
|
||||||
Channel newChannel = new(channelGuid, channelId, _team, zoneEntry);
|
Channel newChannel = new Channel(channelGuid, channelId, _team, zoneEntry);
|
||||||
_channels[channelGuid] = newChannel;
|
_channels[channelGuid] = newChannel;
|
||||||
return newChannel;
|
return newChannel;
|
||||||
}
|
|
||||||
else // custom
|
|
||||||
{
|
|
||||||
var channel = _customChannels.LookupByKey(name.ToLower());
|
|
||||||
if (channel != null)
|
|
||||||
return channel;
|
|
||||||
|
|
||||||
Channel newChannel = new(CreateCustomChannelGuid(), name, _team);
|
|
||||||
_customChannels[name.ToLower()] = newChannel;
|
|
||||||
return newChannel;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Channel CreateCustomChannel(string name)
|
||||||
|
{
|
||||||
|
if (_customChannels.ContainsKey(name.ToLower()))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
Channel newChannel = new(CreateCustomChannelGuid(), name, _team);
|
||||||
|
_customChannels[name.ToLower()] = newChannel;
|
||||||
|
return newChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Channel GetCustomChannel(string name)
|
||||||
|
{
|
||||||
|
return _customChannels.LookupByKey(name.ToLower());
|
||||||
|
}
|
||||||
|
|
||||||
public Channel GetChannel(uint channelId, string name, Player player, bool notify = true, AreaTableRecord zoneEntry = null)
|
public Channel GetChannel(uint channelId, string name, Player player, bool notify = true, AreaTableRecord zoneEntry = null)
|
||||||
{
|
{
|
||||||
Channel result = null;
|
Channel result = null;
|
||||||
|
|||||||
@@ -2636,7 +2636,7 @@ namespace Game.Entities
|
|||||||
if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && usedChannel != null)
|
if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && usedChannel != null)
|
||||||
continue; // Already on the channel, as city channel names are not changing
|
continue; // Already on the channel, as city channel names are not changing
|
||||||
|
|
||||||
joinChannel = cMgr.GetJoinChannel(channelEntry.Id, "", current_zone);
|
joinChannel = cMgr.GetSystemChannel(channelEntry.Id, current_zone);
|
||||||
if (usedChannel != null)
|
if (usedChannel != null)
|
||||||
{
|
{
|
||||||
if (joinChannel != usedChannel)
|
if (joinChannel != usedChannel)
|
||||||
@@ -2649,13 +2649,13 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
joinChannel = cMgr.GetJoinChannel(channelEntry.Id, "");
|
joinChannel = cMgr.GetSystemChannel(channelEntry.Id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
removeChannel = usedChannel;
|
removeChannel = usedChannel;
|
||||||
|
|
||||||
if (joinChannel != null)
|
if (joinChannel != null)
|
||||||
joinChannel.JoinChannel(this, ""); // Changed Channel: ... or Joined Channel: ...
|
joinChannel.JoinChannel(this); // Changed Channel: ... or Joined Channel: ...
|
||||||
|
|
||||||
if (removeChannel != null)
|
if (removeChannel != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(packet.ChannelName))
|
if (packet.ChannelName.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (packet.ChannelName.IsNumber())
|
if (packet.ChannelName.IsNumber())
|
||||||
@@ -50,9 +50,29 @@ namespace Game
|
|||||||
ChannelManager cMgr = ChannelManager.ForTeam(GetPlayer().GetTeam());
|
ChannelManager cMgr = ChannelManager.ForTeam(GetPlayer().GetTeam());
|
||||||
if (cMgr != null)
|
if (cMgr != null)
|
||||||
{
|
{
|
||||||
Channel channel = cMgr.GetJoinChannel((uint)packet.ChatChannelId, packet.ChannelName, zone);
|
if (packet.ChatChannelId != 0)
|
||||||
if (channel != null)
|
{
|
||||||
channel.JoinChannel(GetPlayer(), packet.Password);
|
// system channel
|
||||||
|
Channel channel = cMgr.GetSystemChannel((uint)packet.ChatChannelId, zone);
|
||||||
|
if (channel != null)
|
||||||
|
channel.JoinChannel(GetPlayer());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// custom channel
|
||||||
|
Channel channel = cMgr.GetCustomChannel(packet.ChannelName);
|
||||||
|
if (channel != null)
|
||||||
|
channel.JoinChannel(GetPlayer(), packet.Password);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channel = cMgr.CreateCustomChannel(packet.ChannelName);
|
||||||
|
if (channel != null)
|
||||||
|
{
|
||||||
|
channel.SetPassword(packet.Password);
|
||||||
|
channel.JoinChannel(GetPlayer(), packet.Password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user