Skip to content

Commit

Permalink
Update Advertisement.cs
Browse files Browse the repository at this point in the history
  • Loading branch information
partiusfabaa committed Dec 12, 2023
1 parent 7e6f30f commit 5a69967
Showing 1 changed file with 62 additions and 18 deletions.
80 changes: 62 additions & 18 deletions Advertisement/Advertisement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
Expand Down Expand Up @@ -43,6 +44,12 @@ public override void Load(bool hotReload)

RegisterEventHandler<EventCsWinPanelRound>(EventCsWinPanelRound, HookMode.Pre);
RegisterEventHandler<EventPlayerConnectFull>(EventPlayerConnectFull);
RegisterEventHandler<EventPlayerDisconnect>((@event, info) =>
{
_playerIsoCode.Remove(@event.Userid.SteamID);
return HookResult.Continue;
});

StartTimers();
}
Expand All @@ -64,13 +71,10 @@ private HookResult EventPlayerConnectFull(EventPlayerConnectFull @event, GameEve
case 0:
// foreach (var s in WrappedLine(msg))
// player.PrintToChat($" {s}");
PrintWrappedLine(HudDestination.Chat, msg, player.PlayerName);
PrintWrappedLine(HudDestination.Chat, msg, player.PlayerName, true);
return HookResult.Continue;
case 1:
PrintWrappedLine(HudDestination.Center, msg, player.PlayerName);
return HookResult.Continue;
case 2:
PrintWrappedLine(HudDestination.Center, msg, player.PlayerName);
PrintWrappedLine(HudDestination.Center, msg, player.PlayerName, true);
return HookResult.Continue;
}

Expand Down Expand Up @@ -130,6 +134,13 @@ public void ReloadAdvertConfig(CCSPlayerController? controller, CommandInfo comm
_timers.Clear();
StartTimers();

foreach (var player in Utilities.GetPlayers())
{
if (player.IpAddress == null || player.AuthorizedSteamID == null) continue;
_playerIsoCode.TryAdd(player.AuthorizedSteamID.SteamId64,
GetPlayerIsoCode(player.IpAddress.Split(':')[0]));
}

const string msg = "\x08[\x0C Advertisement \x08] configuration successfully rebooted!";

if (controller == null)
Expand All @@ -138,30 +149,49 @@ public void ReloadAdvertConfig(CCSPlayerController? controller, CommandInfo comm
controller.PrintToChat(msg);
}

private void PrintWrappedLine(HudDestination destination, string message, string? playerName = null)
private void PrintWrappedLine(HudDestination destination, string message, string? playerName = null,
bool isWelcome = false)
{
foreach (var player in Utilities.GetPlayers().Where(u => u.IpAddress != null && u.IpAddress != "127.0.0.1"))
foreach (var player in Utilities.GetPlayers().Where(u => u.IpAddress != null))
{
if (!_config.LanguageMessages.TryGetValue(message, out var language)) return;
var isoCode = _playerIsoCode.TryGetValue(player.SteamID, out var playerCountryIso)
? playerCountryIso
: _config.DefaultLang;
var matches = Regex.Matches(message, @"\{([^}]*)\}");

var msg = string.Empty;
var msg = message;

if (!language.ContainsValue(isoCode))
msg = language[_config.DefaultLang];

foreach (var lang in language.Where(lang => lang.Key == isoCode))
msg = lang.Value;
foreach (Match match in matches)
{
var tag = match.Groups[0].Value;
var tagName = match.Groups[1].Value;

if (!_config.LanguageMessages.TryGetValue(tagName, out var language)) continue;
var isoCode = _playerIsoCode.TryGetValue(player.SteamID, out var playerCountryIso)
? playerCountryIso
: _config.DefaultLang;

if (language.TryGetValue(isoCode, out var tagReplacement))
msg = msg.Replace(tag, tagReplacement);
else if (language.TryGetValue(_config.DefaultLang, out var defaultReplacement))
msg = msg.Replace(tag, defaultReplacement);
}

msg = ReplaceMessageTags(msg);

if (playerName != null) msg = msg.Replace("{PLAYERNAME}", playerName);

if (destination != HudDestination.Center)
{
foreach (var part in WrappedLine(msg))
{
if (isWelcome)
{
if (player.PlayerName == playerName)
player.PrintToChat($" {part}");
return;
}

player.PrintToChat($" {part}");
}
}
else
{
if (_config.PrintToCenterHtml)
Expand All @@ -172,6 +202,18 @@ private void PrintWrappedLine(HudDestination destination, string message, string
}
}

private string RemoveTextInBraces(string input)
{
int start, end;
while ((start = input.IndexOf("{", StringComparison.Ordinal)) != -1 &&
(end = input.IndexOf("}", StringComparison.Ordinal)) != -1)
{
input = input.Remove(start, end - start + 1);
}

return input;
}

private string[] WrappedLine(string message)
{
return message.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
Expand Down Expand Up @@ -323,6 +365,8 @@ private Config CreateConfig(string configPath)

private string GetPlayerIsoCode(string ip)
{
if (ip == "127.0.0.1") return _config.DefaultLang;

try
{
using var reader = new DatabaseReader(Path.Combine(ModuleDirectory, "GeoLite2-Country.mmdb"));
Expand All @@ -336,7 +380,7 @@ private string GetPlayerIsoCode(string ip)
Console.WriteLine($"{ex}");
}

return string.Empty;
return _config.DefaultLang;
}
}

Expand Down

0 comments on commit 5a69967

Please sign in to comment.