fixed base controller Manager being null

fixed log reading duplicates with new event processing
added portuguese translation
This commit is contained in:
RaidMax 2018-04-26 15:26:03 -05:00
parent 99390f1f35
commit b6c979beba
12 changed files with 263 additions and 37 deletions

View File

@ -56,12 +56,15 @@
<None Update="DefaultSettings.json"> <None Update="DefaultSettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.en-US.json"> <None Update="Localization\IW4MAdmin.en-EN.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.es-ES.json"> <None Update="Localization\IW4MAdmin.es-ES.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Localization\IW4MAdmin.pt-PT.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Localization\IW4MAdmin.ru-RU.json"> <None Update="Localization\IW4MAdmin.ru-RU.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>

View File

@ -17,7 +17,6 @@ namespace IW4MAdmin.Application.IO
GameLogReader Reader; GameLogReader Reader;
Timer RefreshInfoTimer; Timer RefreshInfoTimer;
string GameLogFile; string GameLogFile;
FileInfo Info;
public GameLogEvent(Server server, string gameLogPath, string gameLogName) public GameLogEvent(Server server, string gameLogPath, string gameLogName)
{ {
@ -26,13 +25,11 @@ namespace IW4MAdmin.Application.IO
Server = server; Server = server;
RefreshInfoTimer = new Timer((sender) => RefreshInfoTimer = new Timer((sender) =>
{ {
var newInfo = new FileInfo(GameLogFile); long newLength = new FileInfo(GameLogFile).Length;
if (newInfo.Length - Info?.Length > 0) UpdateLogEvents(newLength);
LogPathWatcher_Changed(this, new FileSystemEventArgs(WatcherChangeTypes.Changed, "", ""));
Info = newInfo;
}, null, 0, 100); }, null, 0, 100);
LogPathWatcher = new FileSystemWatcher() /*LogPathWatcher = new FileSystemWatcher()
{ {
Path = gameLogPath.Replace(gameLogName, ""), Path = gameLogPath.Replace(gameLogName, ""),
Filter = gameLogName, Filter = gameLogName,
@ -40,33 +37,33 @@ namespace IW4MAdmin.Application.IO
InternalBufferSize = 4096 InternalBufferSize = 4096
}; };
LogPathWatcher.Changed += LogPathWatcher_Changed; // LogPathWatcher.Changed += LogPathWatcher_Changed;
LogPathWatcher.EnableRaisingEvents = true; LogPathWatcher.EnableRaisingEvents = true;*/
} }
/*
~GameLogEvent() ~GameLogEvent()
{ {
LogPathWatcher.EnableRaisingEvents = false; LogPathWatcher.EnableRaisingEvents = false;
} }*/
private void LogPathWatcher_Changed(object sender, FileSystemEventArgs e) private void UpdateLogEvents(long fileSize)
{ {
// retrieve the new file size
long newFileSize = new FileInfo(GameLogFile).Length;
if (PreviousFileSize == 0) if (PreviousFileSize == 0)
PreviousFileSize = newFileSize; PreviousFileSize = fileSize;
long fileDiff = newFileSize - PreviousFileSize; long fileDiff = fileSize - PreviousFileSize;
if (fileDiff < 1) if (fileDiff < 1)
return; return;
var events = Reader.EventsFromLog(Server, fileDiff); PreviousFileSize = fileSize;
var events = Reader.EventsFromLog(Server, fileDiff, 0);
foreach (var ev in events) foreach (var ev in events)
Server.Manager.GetEventHandler().AddEvent(ev); Server.Manager.GetEventHandler().AddEvent(ev);
PreviousFileSize = newFileSize; PreviousFileSize = fileSize;
} }
} }
} }

View File

@ -18,21 +18,23 @@ namespace IW4MAdmin.Application.IO
Parser = parser; Parser = parser;
} }
public ICollection<GameEvent> EventsFromLog(Server server, long fileSizeDiff) public ICollection<GameEvent> EventsFromLog(Server server, long fileSizeDiff, long startPosition)
{ {
// allocate the bytes for the new log lines // allocate the bytes for the new log lines
byte[] fileBytes = new byte[fileSizeDiff]; List<string> logLines = new List<string>();
// open the file as a stream // open the file as a stream
using (var rd = new BinaryReader(new FileStream(LogFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Utilities.EncodingType)) using (var rd = new StreamReader(new FileStream(LogFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Utilities.EncodingType))
{ {
rd.BaseStream.Seek(rd.BaseStream.Length - fileSizeDiff - 1, SeekOrigin.Begin); // take the old start position and go back the number of new characters
rd.BaseStream.Seek(-fileSizeDiff, SeekOrigin.End);
// the difference should be in the range of a int :P // the difference should be in the range of a int :P
rd.Read(fileBytes, 0, (int)fileSizeDiff); string newLine;
while (!String.IsNullOrEmpty(newLine = rd.ReadLine()))
{
logLines.Add(newLine.Replace("\r\n", ""));
}
} }
// convert to event line list
string[] logLines = Utilities.EncodingType.GetString(fileBytes).Replace("\r", "").Split('\n');
List<GameEvent> events = new List<GameEvent>(); List<GameEvent> events = new List<GameEvent>();
@ -40,9 +42,19 @@ namespace IW4MAdmin.Application.IO
foreach (string eventLine in logLines) foreach (string eventLine in logLines)
{ {
if (eventLine.Length > 0) if (eventLine.Length > 0)
{
try
{
// todo: catch elsewhere
events.Add(Parser.GetEvent(server, eventLine)); events.Add(Parser.GetEvent(server, eventLine));
} }
catch (Exception e)
{
}
}
}
return events; return events;
} }
} }

View File

@ -12,7 +12,10 @@ namespace IW4MAdmin.Application.Localization
public static void Initialize() public static void Initialize()
{ {
string currentLocale = Program.ServerManager.GetApplicationSettings().Configuration().CustomLocale ?? string currentLocale = Program.ServerManager.GetApplicationSettings().Configuration().CustomLocale ??
CultureInfo.CurrentCulture.Name.Substring(0, 2); CultureInfo.CurrentCulture.Name?.Substring(0, 2);
if (currentLocale == null)
throw new Exception("Computer CurrentCulture does not exist");
#if DEBUG #if DEBUG
// currentLocal = "ru-RU"; // currentLocal = "ru-RU";
#endif #endif
@ -26,10 +29,12 @@ namespace IW4MAdmin.Application.Localization
else else
{ {
localizationFile = $"Localization{Path.DirectorySeparatorChar}IW4MAdmin.en-US.json"; localizationFile = $"Localization{Path.DirectorySeparatorChar}IW4MAdmin.en-EN.json";
localizationContents = File.ReadAllText(localizationFile, Encoding.UTF8); localizationContents = File.ReadAllText(localizationFile, Encoding.UTF8);
} }
if (localizationContents.Length < 1)
throw new Exception($"Localization file {localizationFile} does not exist");
Utilities.CurrentLocalization = Newtonsoft.Json.JsonConvert.DeserializeObject<SharedLibraryCore.Localization.Layout>(localizationContents); Utilities.CurrentLocalization = Newtonsoft.Json.JsonConvert.DeserializeObject<SharedLibraryCore.Localization.Layout>(localizationContents);
} }
} }

View File

@ -0,0 +1,198 @@
// translated by Daniel aka Vou te comer
{
"LocalizationName": "pt-BR",
"LocalizationSet": {
"MANAGER_VERSION_FAIL": "Não foi possível obter a versão mais recente do IW4MAdmin",
"MANAGER_VERSION_UPDATE": "Tem uma atualização. A versão mais recente é",
"MANAGER_VERSION_CURRENT": "Está é a sua versão",
"MANAGER_VERSION_SUCCESS": "O IW4MAdmin está atualizado",
"MANAGER_INIT_FAIL": "Erro fatal durante a inicialização",
"MANAGER_EXIT": "Pressione qualquer tecla para sair...",
"MANAGER_SHUTDOWN_SUCCESS": "Desligamento concluído",
"MANAGER_MONITORING_TEXT": "Agora monitorando",
"MANAGER_CONNECTION_REST": "A conexão foi reestabelecida com",
"SETUP_ENABLE_WEBFRONT": "Habilitar o módulo da web do IW4MAdmin",
"SETUP_ENABLE_MULTIOWN": "Ativar vários propietários",
"SETUP_ENABLE_STEPPEDPRIV": "Ativar hierarquia de privilégios escalonada",
"SETUP_ENABLE_CUSTOMSAY": "Habilitar a customização do nome do comando say",
"SETUP_SAY_NAME": "Digite o nome customizado do comando say",
"SETUP_USE_CUSTOMENCODING": "Usar o analisador de codificação customizado",
"SETUP_ENCODING_STRING": "Digite a string de codificação",
"SETUP_ENABLE_VPNS": "Habilitar que os usuários usem VPN",
"SETUP_IPHUB_KEY": "Digite iphub.info api key",
"SETUP_DISPLAY_DISCORD": "Exibir link do Discord no módulo de web",
"SETUP_DISCORD_INVITE": "Digitar link do convite do Discord",
"SETUP_SERVER_USET6M": "Usar Pluto T6 parser",
"SETUP_SERVER_USEIW5M": "Usar Pluto IW5 Parser",
"SETUP_SERVER_MANUALLOG": "Insira o caminho do arquivo de log manualmente",
"SETUP_SERVER_IP": "Digite o endereço IP do servidor",
"SETUP_SERVER_PORT": "Digite a porta do servidor",
"SETUP_SERVER_RCON": "Digite a senha do RCon do servidor",
"SETUP_SERVER_SAVE": "Configuração salva, adicionar outra",
"SERVER_ERROR_DNE": "não existe",
"SERVER_ERROR_LOG": "Log do jogo inválido",
"SERVER_ERROR_COMMAND_INGAME": "Ocorreu um erro interno ao processar seu comando",
"SERVER_ERROR_COMMAND_LOG": "o comando gerou um erro",
"SERVER_ERROR_UNFIXABLE": "Não monitorando o servidor devido a erros incorrigíveis",
"SERVER_ERROR_DVAR": "Não foi possível obter o valor de dvar para",
"SERVER_ERROR_DVAR_HELP": "garanta que o servidor tenha um mapa carregado",
"SERVER_ERROR_PLUGIN": "Ocorreu um erro ao carregar o plug-in",
"SERVER_ERROR_ADDPLAYER": "Não foi possível adicionar o jogador",
"SERVER_ERROR_POLLING": "reduzir a taxa de sondagem do server",
"SERVER_ERROR_COMMUNICATION": "Não foi possivel fazer a comunicação com",
"SERVER_ERROR_EXCEPTION": "Exceção inesperada em",
"SERVER_KICK_VPNS_NOTALLOWED": "VPNs não são permitidas neste servidor",
"SERVER_KICK_TEXT": "Você foi expluso",
"SERVER_KICK_MINNAME": "Seu nome deve conter no mínimo três caracteres",
"SERVER_KICK_NAME_INUSE": "Seu nome já está sendo usado por outra pessoa",
"SERVER_KICK_GENERICNAME": "Por favor, mude o seu nome usando o comando /name no console",
"SERVER_KICK_CONTROLCHARS": "Seu nome não pode conter caracteres de controle",
"SERVER_TB_TEXT": "Você está banido temporariamente",
"SERVER_TB_REMAIN": "Você está banido temporariamente",
"SERVER_BAN_TEXT": "Você está banido",
"SERVER_BAN_PREV": "Banido preventivamente por",
"SERVER_BAN_APPEAL": "apele em",
"SERVER_REPORT_COUNT": "Você tem ^5{0} ^7denúncias recentes",
"SERVER_WARNLIMT_REACHED": "Avisos demais! Leia o chat da próxima vez",
"SERVER_WARNING": "AVISO",
"SERVER_WEBSITE_GENERIC": "este é o site do servidor",
"BROADCAST_ONLINE": "^5IW4MADMIN ^7agora está ^2ONLINE",
"BROADCAST_OFFLINE": "IW4MAdmin ficou offline",
"COMMAND_HELP_SYNTAX": "sintaxe:",
"COMMAND_HELP_OPTIONAL": "opcional",
"COMMAND_UNKNOWN": "Você digitou um comando desconhecido",
"COMMAND_NOACCESS": "Você não tem acesso a este comando",
"COMMAND_NOTAUTHORIZED": "Você não está autorizado a executar este comando",
"COMMAND_MISSINGARGS": "Não foram oferecidos argumentos suficientes",
"COMMAND_TARGET_MULTI": "Vários jogadores correspondem a esse nome",
"COMMAND_TARGET_NOTFOUND": "Não é possível encontrar o jogador especificado",
"PLUGIN_IMPORTER_NOTFOUND": "Não foram encontrados plugins para carregar",
"PLUGIN_IMPORTER_REGISTERCMD": "Comando registrado",
"COMMANDS_OWNER_SUCCESS": "Parabéns, você reivindicou a propriedade deste servidor!",
"COMMANDS_OWNER_FAIL": "Este servidor já tem um dono",
"COMMANDS_WARN_FAIL": "Você não tem os privilégios necessários para fazer o Aviso",
"COMMANDS_WARNCLEAR_SUCCESS": "Todos os avisos foram apagados para",
"COMMANDS_KICK_SUCCESS": "foi expulso",
"COMMANDS_KICK_FAIL": "Você não tem os privilégios necessários para expulsar",
"COMMANDS_TEMPBAN_SUCCESS": "foi banido temporariamente por",
"COMMANDS_TEMPBAN_FAIL": "Você não pode banir temporariamente",
"COMMANDS_BAN_SUCCESS": "foi banido permanentemente",
"COMMANDS_BAN_FAIL": "Você não pode banir de maneira permanente",
"COMMANDS_UNBAN_SUCCESS": "Foi retirado o banimento com sucesso",
"COMMANDS_UNBAN_FAIL": "não está banido",
"COMMANDS_HELP_NOTFOUND": "Não foi possível encontrar esse comando",
"COMMANDS_HELP_MOREINFO": "Digite !help <comando> para saber como usar o comando",
"COMMANDS_FASTRESTART_UNMASKED": "reiniciou rapidamente o mapa",
"COMMANDS_FASTRESTART_MASKED": "O mapa foi reniciado rapidamente",
"COMMANDS_MAPROTATE": "Rotacionando o mapa em ^55 ^7segundos",
"COMMANDS_SETLEVEL_SELF": "Você não pode mudar seu própio nível",
"COMMANDS_SETLEVEL_OWNER": "Só pode haver 1 dono. Modifique suas configurações se vários proprietários forem necessários",
"COMMANDS_SETLEVEL_STEPPEDDISABLED": "Este servidor não permite que você promova",
"COMMANDS_SETLEVEL_LEVELTOOHIGH": "Você só pode promover do ^5{0} ^7para ^5{1} ^7ou um nível menor",
"COMMANDS_SETLEVEL_SUCCESS_TARGET": "Parabéns! Você foi promovido para",
"COMMANDS_SETLEVEL_SUCCESS": "foi promovido com sucesso",
"COMMANDS_SETLEVEL_FAIL": "grupo especificado inválido",
"COMMANDS_ADMINS_NONE": "Sem administradores visíveis online",
"COMMANDS_MAP_SUCCESS": "Mudando o mapa para",
"COMMANDS_MAP_UKN": "Tentando mudar para o mapa desconhecido",
"COMMANDS_FIND_MIN": "Por favor, insira pelo menos 3 caracteres",
"COMMANDS_FIND_EMPTY": "Nenhum jogador foi encontrado",
"COMMANDS_RULES_NONE": "O proprietário do servidor não definiu nenhuma regra, sinta-se livre",
"COMMANDS_FLAG_SUCCESS": "Você sinalizou",
"COMMANDS_FLAG_UNFLAG": "Você tirou a sinalização de",
"COMMANDS_FLAG_FAIL": "Você não pode sinalizar",
"COMMANDS_REPORT_FAIL_CAMP": "Você não pode denunciar o jogador por camperar",
"COMMANDS_REPORT_FAIL_DUPLICATE": "Você já denunciou o jogador",
"COMMANDS_REPORT_FAIL_SELF": "Você não pode se reportar",
"COMMANDS_REPORT_FAIL": "Você não pode reportar",
"COMMANDS_REPORT_SUCCESS": "Obrigado pela sua denúncia, um administrador foi notificado",
"COMMANDS_REPORTS_CLEAR_SUCCESS": "Lista de denúncias limpa com sucesso",
"COMMANDS_REPORTS_NONE": "Ninguém foi denunciado ainda",
"COMMANDS_MASK_ON": "Você foi mascarado",
"COMMANDS_MASK_OFF": "Você foi desmarcarado",
"COMMANDS_BANINFO_NONE": "Nenhum banimento ativo foi encontrado para esse jogador",
"COMMANDS_BANINO_SUCCESS": "foi bannido por ^5{0} ^7por:",
"COMMANDS_ALIAS_ALIASES": "Nomes registrados",
"COMMANDS_ALIAS_IPS": "IPs",
"COMMANDS_RCON_SUCCESS": "O comando para o RCon foi enviado com sucesso",
"COMMANDS_PLUGINS_LOADED": "Plugins carregados",
"COMMANDS_IP_SUCCESS": "Seu endereço IP externo é",
"COMMANDS_PRUNE_FAIL": "Número inválido de dias ativo",
"COMMANDS_PRUNE_SUCCESS": "usuários privilegiados inativos foram removidos",
"COMMANDS_PASSWORD_FAIL": "Sua senha deve ter pelo menos 5 caracteres",
"COMMANDS_PASSWORD_SUCCESS": "Sua senha foi configurada com sucesso",
"COMMANDS_PING_TARGET": "latência é",
"COMMANDS_PING_SELF": "Sua latência é",
"COMMANDS_QUIT_DESC": "sair do IW4MAdmin",
"COMMANDS_OWNER_DESC": "reivindicar a propriedade do servidor",
"COMMANDS_WARN_DESC": "avisa o cliente por infringir regras",
"COMMANDS_WARNCLEAR_DESC": "remove todos os avisos para um cliente",
"COMMANDS_KICK_DESC": "expulsa o cliente pelo nome",
"COMMANDS_SAY_DESC": "transmite mensagem para todos os clientes",
"COMMANDS_TEMPBAN_DESC": "bane temporariamente um cliente por tempo especificado (o padrão é 1 hora)",
"COMMANDS_BAN_DESC": "banir permanentemente um cliente do servidor",
"COMMANDS_UNBAN_DESC": "retira o ban de um jogador pelo seu ID",
"COMMANDS_WHO_DESC": "dá informações sobre você",
"COMMANDS_LIST_DESC": "lista os jogadores ativos na partida",
"COMMANDS_HELP_DESC": "lista todos os comandos disponíveis",
"COMMANDS_FASTRESTART_DESC": "renincializa rapidamente o mapa, não recomendável o uso várias vezes seguidas",
"COMMANDS_MAPROTATE_DESC": "avança para o próximo mapa da rotação",
"COMMANDS_SETLEVEL_DESC": "define o jogador para o nível de privilégio especificado",
"COMMANDS_USAGE_DESC": "vê quanto o aplicativo está usando de memória ram do seu computador",
"COMMANDS_USAGE_TEXT": "está usando",
"COMMANDS_UPTIME_DESC": "obtém o tempo de execução do aplicativo a quando aberto",
"COMMANDS_UPTIME_TEXT": "está online por",
"COMMANDS_ADMINS_DESC": "lista os clientes privilegiados conectados no momento",
"COMMANDS_MAP_DESC": "muda para o mapa especificado",
"COMMANDS_FIND_DESC": "acha o jogador na base de dados",
"COMMANDS_RULES_DESC": "lista as regras do servidor",
"COMMANDS_PM_DESC": "envia a mensagem para o outro jogador de maneira privada, use /!pm para ter efeito, se possível",
"COMMANDS_FLAG_DESC": "sinaliza um cliente suspeito e anuncia aos administradores ao entrar no servidor",
"COMMANDS_REPORT_DESC": "denuncia o jogador por comportamento suspeito",
"COMMANDS_REPORTS_DESC": "obtém ou limpa as denúncias recentes",
"COMMANDS_MASK_DESC": "esconda sua presença como um cliente privilegiado",
"COMMANDS_BANINFO_DESC": "obtém informações sobre um banimento para um jogador",
"COMMANDS_ALIAS_DESC": "obtém a lista de histórico de nomes que o jogador usou no servidor",
"COMMANDS_RCON_DESC": "envia o comando Rcon para o servidor",
"COMMANDS_PLUGINS_DESC": "mostra todos os plugins que estão carregados",
"COMMANDS_IP_DESC": "mostra o seu endereço IP externo",
"COMMANDS_PRUNE_DESC": "rebaixa qualquer cliente privilegiado que não tenha se conectado recentemente (o padrão é 30 dias)",
"COMMANDS_SETPASSWORD_DESC": "define sua senha de autenticação",
"COMMANDS_PING_DESC": "mostra o quanto de latência tem o jogador",
"COMMANDS_ARGS_PLAYER": "jogador",
"COMMANDS_ARGS_REASON": "razão",
"COMMANDS_ARGS_MESSAGE": "mensagem",
"COMMANDS_ARGS_DURATION": "duração (minutos|horas|dias|semanas|anos)",
"COMMANDS_ARGS_CLIENTID": "id do jogador",
"COMMANDS_ARGS_COMMANDS": "commandos",
"COMMANDS_ARGS_LEVEL": "nível",
"COMMANDS_ARGS_MAP": "mapa",
"COMMANDS_ARGS_CLEAR": "limpar",
"COMMANDS_ARGS_INACTIVE": "dias inativos",
"COMMANDS_ARGS_PASSWORD": "senha",
"PLUGINS_LOGIN_COMMANDS_LOGIN_DESC": "Logar-se usando a senha",
"PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS": "Você agora está logado",
"PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL": "Sua senha está errada",
"PLUGINS_STATS_COMMANDS_RESET_DESC": "reinicia suas estatísticas para uma nova",
"PLUGINS_STATS_COMMANDS_RESET_SUCCESS": "Suas estatísticas nesse servidor foram reiniciadas",
"PLUGINS_STATS_COMMANDS_RESET_FAIL": "Você deve estar connectado a um servidor para reiniciar as suas estatísticas",
"PLUGINS_STATS_COMMANDS_VIEW_DESC": "mostra suas estatísticas",
"PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME": "o jogador especificado deve estar jogando",
"PLUGINS_STATS_COMMANDS_VIEW_FAIL_INGAME_SELF": "Você deve estar no jogo para ver suas estatísticas",
"PLUGINS_STATS_COMMANDS_VIEW_FAIL": "Não foi encontrado o jogador que você especificou",
"PLUGINS_STATS_COMMANDS_VIEW_SUCCESS": "Estatísticas para",
"PLUGINS_STATS_COMMANDS_TOP_DESC": "visualiza os 5 melhores jogadores do servidor",
"PLUGINS_STATS_COMMANDS_TOP_TEXT": "Top Jogadores",
"PLUGINS_STATS_TEXT_KILLS": "BAIXAS",
"PLUGINS_STATS_TEXT_DEATHS": "MORTES",
"PLUGINS_STATS_TEXT_SKILL": "HABILIDADE",
"GLOBAL_DAYS": "dias",
"GLOBAL_HOURS": "horas",
"GLOBAL_MINUTES": "minutos",
"GLOBAL_REPORT": "Se você está suspeitando alguém de alguma ^5TRAPAÇA ^7use o comando ^5!report",
"GLOBAL_ERROR": "Erro",
"GLOBAL_WARNING": "AVISO",
"GLOBAL_INFO": "Informação",
"GLOBAL_VERBOSE": "Verbose"
}
}

View File

@ -366,7 +366,10 @@ namespace IW4MAdmin.Application
{ {
try try
{ {
Task.WaitAll(newEvent.Owner.ExecuteEvent(newEvent)); newEvent.Owner.ExecuteEvent(newEvent).Wait();
#if DEBUG
Logger.WriteDebug("Processed Event");
#endif
} }
catch (Exception E) catch (Exception E)
@ -374,6 +377,8 @@ namespace IW4MAdmin.Application
Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_EXCEPTION"]} {newEvent.Owner}"); Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationSet["SERVER_ERROR_EXCEPTION"]} {newEvent.Owner}");
Logger.WriteDebug("Error Message: " + E.Message); Logger.WriteDebug("Error Message: " + E.Message);
Logger.WriteDebug("Error Trace: " + E.StackTrace); Logger.WriteDebug("Error Trace: " + E.StackTrace);
newEvent.OnProcessed.Set();
continue;
} }
// tell anyone waiting for the output that we're done // tell anyone waiting for the output that we're done
newEvent.OnProcessed.Set(); newEvent.OnProcessed.Set();

View File

@ -984,8 +984,8 @@ namespace IW4MAdmin
Link = Target.AliasLink Link = Target.AliasLink
}; };
await Manager.GetPenaltyService().Create(unbanPenalty);
await Manager.GetPenaltyService().RemoveActivePenalties(Target.AliasLink.AliasLinkId); await Manager.GetPenaltyService().RemoveActivePenalties(Target.AliasLink.AliasLinkId);
await Manager.GetPenaltyService().Create(unbanPenalty);
} }
override public void InitializeTokens() override public void InitializeTokens()

View File

@ -37,7 +37,8 @@ namespace IW4MAdmin.Plugins.Login
if (E.Type == GameEvent.EventType.Command) if (E.Type == GameEvent.EventType.Command)
{ {
if (E.Origin.Level < Player.Permission.Moderator) if (E.Origin.Level < Player.Permission.Moderator ||
E.Origin.Level == Player.Permission.Console)
return Task.CompletedTask; return Task.CompletedTask;
E.Owner.Manager.GetPrivilegedClients().TryGetValue(E.Origin.ClientId, out Player client); E.Owner.Manager.GetPrivilegedClients().TryGetValue(E.Origin.ClientId, out Player client);

View File

@ -249,9 +249,14 @@ namespace SharedLibraryCore.Services
p.Active = false; p.Active = false;
// reset the player levels // reset the player levels
if (p.Type == Objects.Penalty.PenaltyType.Ban) if (p.Type == Objects.Penalty.PenaltyType.Ban)
await context.Clients {
using (var internalContext = new DatabaseContext())
{
await internalContext.Clients
.Where(c => c.AliasLinkId == p.LinkId) .Where(c => c.AliasLinkId == p.LinkId)
.ForEachAsync(c => c.Level = Objects.Player.Permission.User); .ForEachAsync(c => c.Level = Objects.Player.Permission.User);
}
}
}); });
await context.SaveChangesAsync(); await context.SaveChangesAsync();

View File

@ -22,7 +22,7 @@ namespace WebfrontCore.Controllers
public BaseController() public BaseController()
{ {
var Manager = Program.Manager; Manager = Program.Manager;
if (Manager.GetApplicationSettings().Configuration().EnableDiscordLink) if (Manager.GetApplicationSettings().Configuration().EnableDiscordLink)
{ {
string inviteLink = Manager.GetApplicationSettings().Configuration().DiscordInviteCode; string inviteLink = Manager.GetApplicationSettings().Configuration().DiscordInviteCode;

View File

@ -48,7 +48,7 @@ namespace WebfrontCore.Controllers
Manager.GetEventHandler().AddEvent(remoteEvent); Manager.GetEventHandler().AddEvent(remoteEvent);
// wait for the event to process // wait for the event to process
remoteEvent.OnProcessed.Wait(); await Task.Run(() => remoteEvent.OnProcessed.Wait());
var response = server.CommandResult.Where(c => c.ClientId == client.ClientId).ToList(); var response = server.CommandResult.Where(c => c.ClientId == client.ClientId).ToList();
// remove the added command response // remove the added command response