@@ -3650,26 +3650,30 @@ private async void RedeemGamesInBackground(object? state = null) {
36503650 continue ;
36513651 }
36523652
3653- EResult result = ( EResult ) response . purchase_receipt_info . purchase_status ;
3654- EPurchaseResultDetail purchaseResultDetail = ( EPurchaseResultDetail ) response . purchase_result_details ;
3655-
3653+ EResult result = EResult . Timeout ;
3654+ EPurchaseResultDetail purchaseResultDetail = EPurchaseResultDetail . NoDetail ;
36563655 string ? balanceText = null ;
36573656
3658- if ( ( purchaseResultDetail == EPurchaseResultDetail . CannotRedeemCodeFromClient ) || ( ( purchaseResultDetail == EPurchaseResultDetail . BadActivationCode ) && assumeWalletKeyOnBadActivationCode ) ) {
3659- // If it's a wallet code, we try to redeem it first, then handle the inner result as our primary one
3660- ( EResult Result , EPurchaseResultDetail ? PurchaseResult , string ? BalanceText ) ? walletResult = await ArchiWebHandler . RedeemWalletKey ( key ) . ConfigureAwait ( false ) ;
3661-
3662- if ( walletResult != null ) {
3663- result = walletResult . Value . Result ;
3664- purchaseResultDetail = walletResult . Value . PurchaseResult . GetValueOrDefault ( walletResult . Value . Result == EResult . OK ? EPurchaseResultDetail . NoDetail : EPurchaseResultDetail . BadActivationCode ) ; // BadActivationCode is our smart guess in this case
3665- balanceText = walletResult . Value . BalanceText ;
3666- } else {
3667- result = EResult . Timeout ;
3668- purchaseResultDetail = EPurchaseResultDetail . Timeout ;
3657+ if ( response . purchase_receipt_info != null ) {
3658+ result = ( EResult ) response . purchase_receipt_info . purchase_status ;
3659+ purchaseResultDetail = ( EPurchaseResultDetail ) response . purchase_result_details ;
3660+
3661+ if ( ( purchaseResultDetail == EPurchaseResultDetail . CannotRedeemCodeFromClient ) || ( ( purchaseResultDetail == EPurchaseResultDetail . BadActivationCode ) && assumeWalletKeyOnBadActivationCode ) ) {
3662+ // If it's a wallet code, we try to redeem it first, then handle the inner result as our primary one
3663+ ( EResult Result , EPurchaseResultDetail ? PurchaseResult , string ? BalanceText ) ? walletResult = await ArchiWebHandler . RedeemWalletKey ( key ) . ConfigureAwait ( false ) ;
3664+
3665+ if ( walletResult != null ) {
3666+ result = walletResult . Value . Result ;
3667+ purchaseResultDetail = walletResult . Value . PurchaseResult . GetValueOrDefault ( walletResult . Value . Result == EResult . OK ? EPurchaseResultDetail . NoDetail : EPurchaseResultDetail . BadActivationCode ) ; // BadActivationCode is our smart guess in this case
3668+ balanceText = walletResult . Value . BalanceText ;
3669+ } else {
3670+ result = EResult . Timeout ;
3671+ purchaseResultDetail = EPurchaseResultDetail . Timeout ;
3672+ }
36693673 }
36703674 }
36713675
3672- Dictionary < uint , string > ? items = response . purchase_receipt_info . line_items . Count > 0 ? response . purchase_receipt_info . line_items . ToDictionary ( static lineItem => lineItem . packageid , static lineItem => lineItem . line_item_description ) : null ;
3676+ Dictionary < uint , string > ? items = response . purchase_receipt_info ? . line_items . Count > 0 ? response . purchase_receipt_info . line_items . ToDictionary ( static lineItem => lineItem . packageid , static lineItem => lineItem . line_item_description ) : null ;
36733677
36743678 ArchiLogger . LogGenericDebug ( items ? . Count > 0 ? Strings . FormatBotRedeemWithItems ( key , $ "{ result } /{ purchaseResultDetail } { ( ! string . IsNullOrEmpty ( balanceText ) ? $ "/{ balanceText } " : "" ) } ", string . Join ( ", " , items ) ) : Strings . FormatBotRedeem ( key , $ "{ result } /{ purchaseResultDetail } { ( ! string . IsNullOrEmpty ( balanceText ) ? $ "/{ balanceText } " : "" ) } ") ) ;
36753679
0 commit comments