post_content, 'adventurebook_character_overview' ) ) { return; } // get the page id from the settings $character_page_id = get_option( 'adventurebook_character_page_id', '' ); // only run this code on the character overview page, i.e. if the current page id matches the character_page_id if ( ! is_page( $character_page_id ) ) { return; } global $wpdb; $user_id = get_current_user_id(); // Create a new character if ( isset( $_POST['create_character'] ) ) { // check nonce if ( ! isset( $_POST['adventurebook_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['adventurebook_nonce'] ) ), 'adventurebook_character_overview' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_name = isset( $_POST['character_name'] ) ? sanitize_text_field( wp_unslash( $_POST['character_name'] ) ) : ''; $adventurebook_id = isset( $_POST['char_adventurebook'] ) ? intval( $_POST['char_adventurebook'] ) : 0; // check if a combat system is set in the adventurebook $combat_system = adventurebook_get_combat_system_for_adventurebook( $adventurebook_id ); if ( ! $combat_system ) { echo '
' . esc_html( __( 'The selected adventurebook does not have a combat system set. Please contact the administrator.', 'adventurebook' ) ) . '
'; return ob_get_clean(); } if ( $adventurebook_id == 0 ) { echo '' . esc_html( __( 'Please select an adventurebook!', 'adventurebook' ) ) . '
'; return ob_get_clean(); } if ( $character_name ) { // check if a character with this name already exists $existing_character = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "adventurebook_characters WHERE name = %s AND user_id = %d", $character_name, $user_id ) );// phpcs:ignore WordPress.DB.DirectDatabaseQuery if ( $existing_character ) { echo '' . esc_html( __( 'A character with this name already exists!', 'adventurebook' ) ) . '
'; return ob_get_clean(); } // now create a character $character = new Character( 0, $user_id, $adventurebook_id, $character_name ); $new_character_id = $character->save_to_db(); // move to the starting zone of the adventurebook $starting_zone_id = get_post_meta( $adventurebook_id, '_adventurebook_start_page', true ); // set the starting zone as the respawn zone, too $character->set_stat( 'RespawnZone', $starting_zone_id ); $character->move_to_zone( $starting_zone_id ); //echo '' . esc_html( __( 'Character created!', 'adventurebook' ) ) . '
'; // make it the standard character update_user_meta( $user_id, 'adventurebook_current_character_id_' . $adventurebook_id, $new_character_id ); } wp_safe_redirect( get_permalink() ); exit; } // Charakter delete if ( isset( $_GET['delete_character'] ) ) { // check nonce if ( ! isset( $_GET['adventurebook_delete_character_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['adventurebook_delete_character_nonce'] ) ), 'adventurebook_delete_character_nonce' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_id = intval( $_GET['delete_character'] ); $character = Character::get_character_by_id( $character_id ); if ( $character && $character->user_id == $user_id ) { $character->delete_from_db(); } // Refresh to avoid resubmission on page reload wp_safe_redirect( get_permalink() ); exit; } // spend dev points if ( ab_get( 'spend_dev_points' ) > 0 ) { // check nonce if ( ! isset( $_GET['adventurebook_spend_dev_points_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['adventurebook_spend_dev_points_nonce'] ) ), 'adventurebook_spend_dev_points_nonce' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_id = ab_get('character_id'); $stat_name = ab_get('stat_name'); $character = Character::get_character_by_id( $character_id ); if ( $character && $character->user_id == $user_id ) { $combat_system = adventurebook_get_combat_system_for_adventurebook( $character->adventurebook_id ); if ( $combat_system ) { // check if the character has a development point to spend if ( $character->get_development_points() > 0 ) { $valid_stats = ['Strength', 'Dexterity', 'Endurance']; if ( in_array( $stat_name, $valid_stats, true ) ) { // increase the stat by 1 $current_value = (int) $character->get_stat( $stat_name ); $character->set_stat( $stat_name, $current_value + 1 ); // decrease the development points by 1 $current_dev_points = $character->get_development_points(); $character->set_development_points( $current_dev_points - 1 ); } } } } // Refresh to avoid resubmission on page reload wp_safe_redirect( get_permalink() ); exit; } // train skill if ( ab_get( 'train_skill' ) > 0 ) { // check nonce if ( ! isset( $_GET['adventurebook_train_skill_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['adventurebook_train_skill_nonce'] ) ), 'adventurebook_train_skill_nonce' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_id = ab_get('character_id'); $skill_name = ab_get('skill_name'); $character = Character::get_character_by_id( $character_id ); if ( $character && $character->user_id == $user_id ) { $combat_system = adventurebook_get_combat_system_for_adventurebook( $character->adventurebook_id ); if ( $combat_system ) { // check if the skill can be raised if($character->can_raise_skill($skill_name)) { $combat_system->combatant_raise_skill( $character, $skill_name ); } } } wp_safe_redirect( get_permalink() ); exit; } // Rename character if ( isset( $_GET['rename_character'] ) && isset( $_GET['new_name'] ) ) { // check nonce if ( ! isset( $_GET['adventurebook_rename_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['adventurebook_rename_nonce'] ) ), 'adventurebook_rename_nonce' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_id = intval( sanitize_text_field( wp_unslash( $_GET['rename_character'] ) ) ); $new_name = sanitize_text_field( wp_unslash( $_GET['new_name'] ) ); $character = Character::get_character_by_id( $character_id ); if ( $character && $character->user_id == $user_id ) { // check if a character with this name already exists $existing_character = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "adventurebook_characters WHERE name = %s AND user_id = %d", $new_name, $user_id ) );// phpcs:ignore WordPress.DB.DirectDatabaseQuery if ( ! $existing_character ) { $character->set_name( $new_name ); } } // Refresh to avoid resubmission on page reload wp_safe_redirect( get_permalink() ); exit; } // set a character as the current character if ( isset( $_GET['set_current_character'] ) ) { // check nonce if ( ! isset( $_GET['adventurebook_set_character_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['adventurebook_set_character_nonce'] ) ), 'adventurebook_set_character_nonce' ) ) { // nonce is invalid wp_die( esc_html( __( 'Security check failed. Please try again.', 'adventurebook' ) ) ); } $character_id = intval( $_GET['set_current_character'] ); // check if the character belongs to the user $character = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "adventurebook_characters WHERE id = %d AND user_id = %d", $character_id, $user_id ) );// phpcs:ignore WordPress.DB.DirectDatabaseQuery if ( $character ) { update_user_meta( $user_id, 'adventurebook_current_character_id_' . $character->adventurebook_id, $character_id ); // Refresh to avoid resubmission on page reload wp_safe_redirect( get_permalink() ); exit; } } } ); /** * Add a shortcode to display the character overview * This shortcode will display a list of the user's characters * and allow them to create new characters, set a character as the current character, * and delete characters. */ function display_character_overview() { // check if the user is logged in if ( ! is_user_logged_in() ) { $requested_uri = ''; if ( isset( $_SERVER['REQUEST_URI'] ) ) { $login_url = wp_login_url( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); } /* translators: %s: login url */ return '' . sprintf( __( 'You need to log in to access this page.', 'adventurebook' ), esc_url( $login_url ) ) . '
'; } global $wpdb; $user_id = get_current_user_id(); // get all characters of the user $characters = Character::get_characters_by_user_id( $user_id ); ob_start(); // --- Charaktere nach Adventurebook gruppieren --- $grouped = []; foreach ( $characters as $character ) { /* @var $character Character */ $adv_id = $character->adventurebook_id; if ( ! isset( $grouped[ $adv_id ] ) ) { $grouped[ $adv_id ] = []; } $grouped[ $adv_id ][] = $character; } ?>