Skip to content
This repository has been archived by the owner on Dec 10, 2022. It is now read-only.

Commit

Permalink
WIP: More efficient file locking for some player data operations
Browse files Browse the repository at this point in the history
  • Loading branch information
tdmalone committed Jun 18, 2017
1 parent 750d7c9 commit 7b71145
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
2 changes: 1 addition & 1 deletion lib/filesystem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
16 changes: 8 additions & 8 deletions src/catching.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand Down Expand Up @@ -281,15 +281,15 @@ 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 ) {
if ( ! isset( $pokedex_entry->fled ) ) {
$pokedex_entry->fled = 0;
}
$pokedex_entry->fled++;
slackemon_save_player_data( $player_data, $user_id );
slackemon_save_player_data( $player_data, $user_id, true );
}
}

Expand All @@ -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;
Expand All @@ -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

Expand Down
16 changes: 13 additions & 3 deletions src/players.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 7b71145

Please sign in to comment.