Add various chat related checks

This commit is contained in:
SilicaAndPina 2021-04-05 11:51:08 +12:00
parent 2e4ba0b82d
commit 5fc313657d
8 changed files with 114 additions and 3 deletions

View file

@ -47,6 +47,7 @@ namespace HISP.Server
private int warnInterval = GameServer.IdleWarning * 60 * 1000;
private int kickInterval = GameServer.IdleTimeout * 60 * 1000;
private bool dcLock = false;
private void minuteTimerTick(object state)
@ -55,7 +56,14 @@ namespace HISP.Server
totalMinutesElapsed++;
if (LoggedIn)
{
LoggedinUser.CanUseAdsChat = true;
LoggedinUser.FreeMinutes -= 1;
if(totalMinutesElapsed % 2 == 0)
{
LoggedinUser.TotalGlobalChatMessages++;
}
if (LoggedinUser.FreeMinutes <= 0)
{
LoggedinUser.FreeMinutes = 0;

View file

@ -882,6 +882,11 @@ namespace HISP.Server
Messages.CantSendPrivateMessagePlayerMutedFormat = gameData.messages.meta.mute_command.cant_send_pm_player_muted;
// Chat Errors
Messages.CantFindPlayerToPrivateMessage = gameData.messages.chat_errors.cant_find_player;
Messages.AdsOnlyOncePerMinute = gameData.messages.chat_errors.ads_once_per_minute;
Messages.GlobalChatLimited = gameData.messages.chat_errors.global_chats_limited;
// Warp Command
Messages.SuccessfullyWarpedToPlayer = gameData.messages.commands.warp.player;

View file

@ -204,7 +204,7 @@ namespace HISP.Server
Database.IncPlayerTirednessForOfflineUsers();
// Offline player handling w sql magic...
// Offline player handling w sql black magic...
Database.DecrementHorseLeaseTimeForOfflinePlayers();
Database.TpOfflinePlayersBackToUniterForOfflinePlayers();
@ -5391,7 +5391,51 @@ namespace HISP.Server
if (message == "")
return;
if(message.StartsWith("/"))
{
string channelString = message.Split(' ')[0].ToLower();
string newMessage = string.Join(' ', message.Split(' ').Skip(1));
message = newMessage;
switch(channelString)
{
case "/$":
case "/ads":
channel = Chat.ChatChannel.Ads;
break;
case "/all":
channel = Chat.ChatChannel.All;
break;
case "/here":
channel = Chat.ChatChannel.Here;
break;
case "/near":
channel = Chat.ChatChannel.Near;
break;
case "/buddy":
channel = Chat.ChatChannel.Buddies;
break;
case "/island":
channel = Chat.ChatChannel.Isle;
break;
case "/admin":
if (sender.LoggedinUser.Administrator)
channel = Chat.ChatChannel.Admin;
else
return;
break;
case "/mod":
if (sender.LoggedinUser.Moderator)
channel = Chat.ChatChannel.Mod;
else
return;
break;
default:
channel = Chat.ChatChannel.Dm;
nameTo = channelString.Substring(1);
break;
}
}
if (Chat.ProcessCommand(sender.LoggedinUser, message))
{
@ -5446,6 +5490,41 @@ namespace HISP.Server
GameClient[] recipiants = Chat.GetRecipiants(sender.LoggedinUser, channel, nameTo);
// Spam Protection
if(channel == Chat.ChatChannel.Dm)
{
if(recipiants.Length <= 0)
{
byte[] cantFindPlayer = PacketBuilder.CreateChat(Messages.CantFindPlayerToPrivateMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantFindPlayer);
return;
}
}
else if(channel == Chat.ChatChannel.Ads)
{
if(!sender.LoggedinUser.CanUseAdsChat)
{
byte[] cantSendInAds = PacketBuilder.CreateChat(Messages.AdsOnlyOncePerMinute, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cantSendInAds);
return;
}
sender.LoggedinUser.CanUseAdsChat = false;
}
else if(channel == Chat.ChatChannel.All)
{
if(sender.LoggedinUser.TotalGlobalChatMessages <= 0)
{
byte[] globalLimited = PacketBuilder.CreateChat(Messages.GlobalChatLimited, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(globalLimited);
return;
}
sender.LoggedinUser.TotalGlobalChatMessages--;
}
// Muted user checks
if(channel == Chat.ChatChannel.Dm)
{