proc(_playerUpdate, @player, @pinfo, @temporary, if(@temporary == true) { if(array_size(@pinfo) == 0) { _playerClearValues(@player, true) } else { export(concat('user.', @player), @pinfo) } } else { if(array_size(@pinfo) == 0) { _playerClearValues(@player) } else { store_value(concat('user.', @player), @pinfo) } } ) proc(_playerClearValues, @player, @temporary, if(@temporary == true) { export(concat('user.', @player), '') } else { clear_value(concat('user.', @player)) } ) proc(_playerGetValues, @player, @temporary, if(@temporary == true) { assign(@pinfo, import(concat('user.', @player))) if(is_null(@pinfo)) { return(array()) } return(@pinfo) } else { if(!has_value(concat('user.', @player))) { return(array()) } return(get_value(concat('user.', @player))) } ) proc(_playerStoreValue, @player, @key, @value, @temporary, if(@temporary == true) { assign(@pinfo, _playerGetValues(@player, true)) assign(@pinfo[@key], @value) _playerUpdate(@player, @pinfo, true) } else { assign(@pinfo, _playerGetValues(@player)) assign(@pinfo[@key], @value) _playerUpdate(@player, @pinfo) } ) proc(_playerHasValue, @player, @key, @temporary, if(@temporary == true) { assign(@pinfo, _playerGetValues(@player, true)) if(!is_array(@pinfo)) { return(false) } return(array_index_exists(@pinfo, @key)) } else { assign(@pinfo, _playerGetValues(@player)) if(!is_array(@pinfo)) { return(false) } return(array_index_exists(@pinfo, @key)) } ) proc(_playerGetValue, @player, @key, @temporary, if(@temporary == true) { assign(@pinfo, _playerGetValues(@player, true)) if(!_playerHasValue(@player, @key, true)) { return(null) } return(@pinfo[@key]) } else { assign(@pinfo, _playerGetValues(@player)) if(!_playerHasValue(@player, @key)) { return(null) } return(@pinfo[@key]) } ) proc(_playerClearValue, @player, @key, @temporary, if(@temporary == true) { if(_playerHasValue(@player, @key, true)) { assign(@pinfo, _playerGetValues(@player, true)) array_remove(@pinfo, @key) _playerUpdate(@player, @pinfo, true) } } else { if(_playerHasValue(@player, @key)) { assign(@pinfo, _playerGetValues(@player)) array_remove(@pinfo, @key) _playerUpdate(@player, @pinfo) } } ) proc(_playerPushValue, @player, @key, @value, @temporary, if(@temporary == true) { assign(@pinfo, _playerGetValues(@player, true)) if(_playerHasValue(@player, @key, true) && is_array(@pinfo[@key])) { assign(@array, @pinfo[@key]) array_push(@pinfo[@key], @value) } else { assign(@pinfo[@key], array(@value)) } _playerUpdate(@player, @pinfo, true) } else { assign(@pinfo, _playerGetValues(@player)) if(_playerHasValue(@player, @key) && is_array(@pinfo[@key])) { assign(@array, @pinfo[@key]) array_push(@pinfo[@key], @value) } else { assign(@pinfo[@key], array(@value)) } _playerUpdate(@player, @pinfo) } ) proc(_playerSubKeyClearValue, @player, @key, @value, @temporary, if(@temporary == true) { assign(@pinfo, _playerGetValue(@player, @key, true)) if(_playerHasValue(@player, @key, true) && is_array(@pinfo[@key])) { array_remove(@pinfo, array_index(@pinfo, @value)) _playerSubKeyUpdate(@player, @key, @pinfo, true) } } else { assign(@pinfo, _playerGetValue(@player, @key)) if(_playerHasValue(@player, @key) && _playerSubKeyContainsValue(@player, @key, @value)) { array_remove(@pinfo, array_index(@pinfo, @value)) _playerSubKeyUpdate(@player, @key, @pinfo) } } ) proc(_playerSubKeyContainsValue, @player, @key, @value, @temporary, if(@temporary == true) { assign(@playerinfo, _playerGetValue(@player, @key, true)) if(_playerHasValue(@player, @key, true) && is_array(@playerinfo)) { return(array_contains_ic(@playerinfo, @value)) } else { return(false) } } else { assign(@playerinfo, _playerGetValue(@player, @key)) if(_playerHasValue(@player, @key) && is_array(@playerinfo)) { return(array_contains(@playerinfo, @value)) } else { return(false) } } ) proc(_playerSubKeyUpdate, @player, @key, @playerinfo, @temporary, if(@temporary == true) { if(array_size(@playerinfo) == 0) { _playerClearValue(@player, @key, true) } else { assign(@pinfo, _playerGetValues(@player, true)) assign(@pinfo[@key], @playerinfo) _playerUpdate(@player, @pinfo, true) } } else { if(array_size(@playerinfo) == 0) { _playerClearValue(@player, @key) } else { assign(@pinfo, _playerGetValues(@player)) assign(@pinfo[@key], @playerinfo) _playerUpdate(@player, @pinfo) } } )