internal bool _EmitPlayerPreJoin(object user) { if (user == null || !(user is User castedUser)) { return(false); } EcoPlayer ecoPlayer = playerManager?.InternalPlayersList.FirstOrDefault(x => x.Id.Equals(castedUser.SlgId) || x.Id.Equals(castedUser.SteamId)); if (ecoPlayer == null) { ecoPlayer = new EcoPlayer(castedUser, playerManager, runtime.Container); playerManager?.InternalPlayersList.Add(ecoPlayer); } else if (ecoPlayer.InternalEcoUser == null) { ecoPlayer.BuildReference(castedUser); } logger.LogDebug($"Emitting PlayerPreConnectEvent [{ecoPlayer.Id}]"); PlayerPreConnectEvent e = new PlayerPreConnectEvent(ecoPlayer); eventManager.Emit(this, e); if (!e.IsCancelled) { return(true); } logger.LogInformation($"[{ecoPlayer.Id}] {ecoPlayer.Name} was prevent from joining for the reason: " + (e.RejectionReason ?? "No reason was supplied.")); ecoPlayer.InternalEcoPlayer.Client.Disconnect("You have been prevented from joining.", e.RejectionReason ?? "No reason was supplied."); return(false); }
/// <inheritdoc /> public void Execute(ICommandContext context) { if (context.Parameters.Length == 0) { throw new CommandWrongUsageException(); } IPlayerManager playerManager = context.Container.Resolve <IPlayerManager>("eco"); if (!playerManager.TryGetOnlinePlayer(context.Parameters[0], out IPlayer player)) { context.User.SendMessage("The requested user needs to be online."); return; } EcoPlayer ecoPlayer = (EcoPlayer)player; if (ecoPlayer.UserIdType == UserIdType.Both) { UserManager.Config.Admins.Add(ecoPlayer.InternalEcoUser.SteamId); } UserManager.Config.Admins.Add(player.Id); UserManager.Obj.SaveConfig(); context.Container.Resolve <ILogger>().LogInformation($"{context.User.Name} has granted {player.Name} administrator permissions."); context.User.SendMessage("The requested user has been made an administrator."); ((EcoPlayer)player).User.SendMessage("You have been granted administrator permissions."); }
internal void _EmitPlayerLeave(object player) { if (player == null || !(player is User castedUser)) { return; } EcoPlayer ecoPlayer = playerManager?.InternalPlayersList.FirstOrDefault(x => x.Id.Equals(castedUser.SteamId)); if (ecoPlayer == null) { logger.LogWarning("An unknown player has left the game. Please report this to a Rocket.Eco developer!"); return; } logger.LogDebug($"Emitting UserDisconnectedEvent [{ecoPlayer.Id}]"); eventManager.Emit(this, new UserDisconnectedEvent(ecoPlayer.User, null, EventExecutionTargetContext.NextFrame)); logger.LogInformation($"[{ecoPlayer.Id}] {ecoPlayer.Name} has left."); }
internal void _EmitPlayerJoin(object user) { if (user == null || !(user is User castedUser)) { return; } EcoPlayer ecoPlayer = playerManager?.InternalPlayersList.FirstOrDefault(x => x.Id.Equals(castedUser.SlgId) || x.Id.Equals(castedUser.SteamId)); IConfigurationSection configurationSection = permissionProvider.PlayersConfig["EcoUser"]; List <PlayerPermissionSection> playerPermissions = configurationSection.Get <PlayerPermissionSection[]>().ToList(); if (playerPermissions.FirstOrDefault(x => x.Id.Equals(ecoPlayer.Id)) == null) { IEnumerable <GroupPermissionSection> autoGroups = permissionProvider.GroupsConfig["Groups"].Get <GroupPermissionSection[]>().Where(x => x.AutoAssign); PlayerPermissionSection section = new PlayerPermissionSection { Id = ecoPlayer.Id, Permissions = new string[0], Groups = autoGroups.Select(x => x.Id).ToArray() }; playerPermissions.Add(section); configurationSection.Set(playerPermissions); permissionProvider.PlayersConfig.Save(); } logger.LogDebug($"Emitting UserConnectedEvent [{ecoPlayer.Id}]"); eventManager.Emit(this, new UserConnectedEvent(ecoPlayer.User, EventExecutionTargetContext.NextFrame)); logger.LogInformation($"[{ecoPlayer.Id}] {ecoPlayer.Name} has joined."); }
internal bool _EmitPlayerChat(object user, string text) { if (user == null || !(user is User castedUser) || !castedUser.LoggedIn) { return(true); } EcoPlayer ecoPlayer = (EcoPlayer)playerManager.GetOnlinePlayerById(castedUser.SteamId); if (ecoPlayer == null) { logger.LogWarning("An unknown player has chatted. Please report this to a Rocket.Eco developer!"); return(false); } if (text.StartsWith("/", StringComparison.InvariantCulture)) { logger.LogDebug($"Emitting PreCommandExecutionEvent [{ecoPlayer.Id}, {text}]"); PreCommandExecutionEvent commandEvent = new PreCommandExecutionEvent(ecoPlayer.User, text.Remove(0, 1)); eventManager.Emit(this, commandEvent); if (commandEvent.IsCancelled) { ecoPlayer.SendErrorMessage("Execution of your command has been cancelled!"); return(true); } taskScheduler .ScheduleNextFrame(this, () => { bool wasHandled = true; try { wasHandled = commandHandler.HandleCommand(ecoPlayer.User, text.Remove(0, 1), string.Empty); } catch (NotEnoughPermissionsException) { ecoPlayer.SendErrorMessage("You do not have enough permission to execute this command!"); } catch (Exception e) { logger.LogError($"{ecoPlayer.Name} failed to execute the command `{text.Remove(0, 1).Split(' ')[0]}`!"); logger.LogError($"{e.Message}\n{e.StackTrace}"); ecoPlayer.SendErrorMessage("A runtime error occurred while executing this command, please contact an administrator!"); return; } if (!wasHandled) { ecoPlayer.SendErrorMessage("That command could not be found!"); } }, "Player Chat Event"); return(true); } logger.LogDebug($"Emitting UserChatEvent [{ecoPlayer.Id}, {text}]"); UserChatEvent chatEvent = new UserChatEvent(ecoPlayer.User, text) { IsCancelled = false }; eventManager.Emit(this, chatEvent); string commandCancelled = chatEvent.IsCancelled ? "[CANCELLED] " : ""; logger.LogInformation($"{commandCancelled}[{ecoPlayer.Id}] {ecoPlayer.Name}: {text}"); return(chatEvent.IsCancelled); }