From 7b71145932b56479b37ee24045a180d225ee6d42 Mon Sep 17 00:00:00 2001 From: "Tim Malone (Mac)" Date: Sun, 18 Jun 2017 12:39:20 +1000 Subject: [PATCH] WIP: More efficient file locking for some player data operations --- lib/filesystem.php | 2 +- src/catching.php | 16 ++++++++-------- src/players.php | 16 +++++++++++++--- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/filesystem.php b/lib/filesystem.php index 2a318db..5bb64f2 100755 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -723,7 +723,7 @@ function slackemon_unlock_file( $filename ) { function slackemon_is_file_owned( $filename ) { global $_slackemon_file_locks; - return array_key_exists( md5( $filename ), $_slackemon_file_locks ); + return array_key_exists( md5( $filename ), (array) $_slackemon_file_locks ); } function slackemon_remove_file_locks() { diff --git a/src/catching.php b/src/catching.php index 558af0a..4d4acf9 100755 --- a/src/catching.php +++ b/src/catching.php @@ -238,7 +238,7 @@ function slackemon_get_catch_message( $spawn_ts, $action, $from_battle = false, function slackemon_do_catch( $spawn_ts, $catch_attempt_ts, $user_id = USER_ID, $battle_hash = false, $force_battle_result = '' ) { $spawn_data = slackemon_get_spawn_data( $spawn_ts, slackemon_get_player_region( $user_id ), $user_id ); - $player_data = slackemon_get_player_data( $user_id ); + $player_data = slackemon_get_player_data( $user_id, true ); if ( $battle_hash ) { $battle_data = slackemon_get_battle_data( $battle_hash ); @@ -281,7 +281,7 @@ function slackemon_do_catch( $spawn_ts, $catch_attempt_ts, $user_id = USER_ID, $ if ( ! $is_caught ) { - slackemon_add_xp( 25, $user_id ); // Pokemon fled, add 25 XP + $player_data->xp = slackemon_add_xp( 25, $player_data ); // Pokemon fled, add 25 XP foreach ( $player_data->pokedex as $pokedex_entry ) { if ( $spawn_data->pokedex == $pokedex_entry->id ) { @@ -289,7 +289,7 @@ function slackemon_do_catch( $spawn_ts, $catch_attempt_ts, $user_id = USER_ID, $ $pokedex_entry->fled = 0; } $pokedex_entry->fled++; - slackemon_save_player_data( $player_data, $user_id ); + slackemon_save_player_data( $player_data, $user_id, true ); } } @@ -302,14 +302,14 @@ function slackemon_do_catch( $spawn_ts, $catch_attempt_ts, $user_id = USER_ID, $ // Does the wild Pokemon's HP / PP need adjusting from their battle? if ( $battle_hash ) { - $spawn_data->hp = $opponent_pokemon->hp; + $spawn_data->hp = $opponent_pokemon->hp; $spawn_data->moves = $opponent_pokemon->moves; $spawn_data->battles->last_participated = $opponent_pokemon->battles->last_participated; } // Add entry to player's collection $spawn_data->is_battle_team = false; - $spawn_data->is_favourite = false; + $spawn_data->is_favourite = false; unset( $spawn_data->trigger ); // We don't need this anymore unset( $spawn_data->users ); // We don't need this anymore $player_data->pokemon[] = $spawn_data; @@ -333,16 +333,16 @@ function slackemon_do_catch( $spawn_ts, $catch_attempt_ts, $user_id = USER_ID, $ $xp_to_add += 50; } - slackemon_add_xp( $xp_to_add, $user_id ); + $player_data->xp = slackemon_add_xp( $xp_to_add, $player_data ); $pokedex_entry->caught++; - return slackemon_save_player_data( $player_data, $user_id ); + return slackemon_save_player_data( $player_data, $user_id, true ); } } // We should have returned above, but just in case we couldn't find the Pokedex entry for some reason... - return slackemon_save_player_data( $player_data, $user_id ); + return slackemon_save_player_data( $player_data, $user_id, true ); } // Function slackemon_do_catch diff --git a/src/players.php b/src/players.php index 6137c95..00a27b7 100755 --- a/src/players.php +++ b/src/players.php @@ -144,12 +144,22 @@ function slackemon_get_player_pokemon_data( $spawn_ts, $player_data = null, $use function slackemon_add_xp( $xp, $user_id = USER_ID ) { - $player_data = slackemon_get_player_data( $user_id ); - $player_data->xp += $xp; + // Accept player data being sent through instead of a user ID, in which case the modified player data will be returned. + // This is useful if XP needs to be added and saved together, at the same time as other changes. + if ( is_object( $user_id ) ) { + $player_data = $user_id; + $return_player_data = true; + } else { + $player_data = slackemon_get_player_data( $user_id, true ); + $return_player_data = false; + } + $player_data->xp += $xp; $player_data->xp = floor( $player_data->xp ); - if ( slackemon_save_player_data( $player_data, $user_id ) ) { + if ( $return_player_data ) { + return $player_data; + } else if ( slackemon_save_player_data( $player_data, $user_id ) ) { return $player_data->xp; } else { return false;