/// <summary> /// Sets the authentication of this user /// </summary> /// <param name="auth">Auth.</param> /// <param name="by">By.</param> public static void SetAuthentication(this BasePlayer player, string auth, string by) { var ctx = new HookContext() { Player = (Terraria.Player)player, Connection = player.Connection.Socket }; var changing = new TDSMHookArgs.PlayerAuthenticationChanging() { AuthenticatedAs = auth, AuthenticatedBy = by }; TDSMHookPoints.PlayerAuthenticationChanging.Invoke(ref ctx, ref changing); if (ctx.Result != HookResult.DEFAULT) { return; } player.SetAuthenticatedAs(auth); player.SetAuthenticatedBy(by); ctx = new HookContext() { Player = (Terraria.Player)player, Connection = player.Connection.Socket }; var changed = new TDSMHookArgs.PlayerAuthenticationChanged() { AuthenticatedAs = auth, AuthenticatedBy = by }; TDSMHookPoints.PlayerAuthenticationChanged.Invoke(ref ctx, ref changed); }
[Hook(HookOrder.LATE)] //This is required so this can be called last, in order for us to know if it's been cancelled or not void OnPlayerAuthenticated(ref HookContext ctx, ref TDSMHookArgs.PlayerAuthenticationChanged args) { if (ctx.Client.State >= 4 && CharacterManager.Mode == CharacterMode.AUTH) { #if ENTITY_FRAMEWORK_7 using (var dbCtx = new TContext()) #elif DAPPER using (var dbCtx = DatabaseFactory.CreateConnection()) #endif { using (var txn = dbCtx.BeginTransaction()) { CharacterManager.LoadForAuthenticated(dbCtx, txn, ctx.Player, !Config.SSC_AllowGuestInfo); txn.Commit(); } } if (Config.SSC_AllowGuestInfo) { ctx.Player.SetSSCReadyForSave(true); //Since we aren't issuing out data, and accepting it, we can save it. } } }