Guest User

ARK: AGameSession::AtCapacity

a guest
May 13th, 2023
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.39 KB | None | 0 0
  1. char __fastcall AGameSession::AtCapacity(AGameSession *this, bool bSpectator, const FString *AuthToken, UNetConnection *Connection)
  2. {
  3.   UNetConnection *v4; // rsi
  4.   const FString *v5; // rdi
  5.   AGameSession *v6; // rbx
  6.   int v7; // ebp
  7.   int v9; // er12
  8.   __int64 v10; // rax
  9.   int v11; // er14
  10.   int v12; // esi
  11.   __int64 v13; // rax
  12.   int v14; // eax
  13.   int v15; // edi
  14.   int v16; // er15
  15.   __int64 v17; // rax
  16.   int v18; // er13
  17.   __int64 v19; // r12
  18.   __int64 v20; // r14
  19.   __int64 v21; // rax
  20.   wint_t *v22; // rbx
  21.   EAppMsgType::Type *v23; // rdi
  22.   signed __int64 v24; // rdi
  23.   wint_t v25; // cx
  24.   wint_t v26; // si
  25.   wint_t v27; // ax
  26.   char v28; // bl
  27.   __int64 v29; // rdi
  28.   FMalloc *v30; // rcx
  29.   char v31; // si
  30.   __int64 v32; // rbx
  31.   FMalloc *v33; // rcx
  32.   SharedPointerInternals::FReferenceControllerState *v34; // rbx
  33.   int v35; // [rsp+20h] [rbp-98h]
  34.   int v36; // [rsp+24h] [rbp-94h]
  35.   int v37; // [rsp+28h] [rbp-90h]
  36.   int v38; // [rsp+2Ch] [rbp-8Ch]
  37.   __int64 v39; // [rsp+38h] [rbp-80h]
  38.   __int64 v40; // [rsp+40h] [rbp-78h]
  39.   wint_t *v41; // [rsp+48h] [rbp-70h]
  40.   int v42; // [rsp+50h] [rbp-68h]
  41.   TSharedPtr<IOnlineSession,1> result; // [rsp+60h] [rbp-58h]
  42.   __int64 v44; // [rsp+70h] [rbp-48h]
  43.   __int64 v45; // [rsp+78h] [rbp-40h]
  44.  
  45.   v44 = -2i64;
  46.   v4 = Connection;
  47.   v5 = AuthToken;
  48.   v6 = this;
  49.   v7 = 0;
  50.   if ( bSpectator )
  51.     return *(_DWORD *)(*(_QWORD *)(((__int64 (__fastcall *)(AGameSession *))this->vfptr[4].DoesObjectWantToLoadFromSaveGame)(this)
  52.                                  + 584)
  53.                      + 1176i64) >= this->MaxSpectators;
  54.   v9 = this->MaxPlayers;
  55.   v37 = this->MaxPlayers;
  56.   v10 = ((__int64 (__fastcall *)(AGameSession *))this->vfptr[4].DoesObjectWantToLoadFromSaveGame)(this);
  57.   v11 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(v10 + 584) + 2896i64))(*(_QWORD *)(v10 + 584));
  58.   v36 = v11;
  59.   Online::GetSessionInterface(&result, 0i64);
  60.   if ( result.Object )
  61.   {
  62.     v11 = result.Object->vfptr->GetNumConnectedPlayersExcludingAuthToken(result.Object, v5);
  63.     v36 = v11;
  64.   }
  65.   v4->UPlayer::UObject::UObjectBaseUtility::UObjectBase::vfptr[12].ShouldInstance(v4, (UProperty *)&v41);
  66.   v12 = 0;
  67.   v35 = 0;
  68.   v13 = ((__int64 (__fastcall *)(AGameSession *))v6->vfptr[4].DoesObjectWantToLoadFromSaveGame)(v6);
  69.   v14 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(v13 + 584) + 3344i64))(*(_QWORD *)(v13 + 584));
  70.   v15 = v14 + 1;
  71.   v38 = v14 + 1;
  72.   if ( ((__int64 (__fastcall *)(AGameSession *))v6->vfptr[4].DoesObjectWantToLoadFromSaveGame)(v6)
  73.     && *(_QWORD *)(((__int64 (__fastcall *)(AGameSession *))v6->vfptr[4].DoesObjectWantToLoadFromSaveGame)(v6) + 264) )
  74.   {
  75.     v16 = 0;
  76.     v17 = *(_QWORD *)(((__int64 (__fastcall *)(AGameSession *))v6->vfptr[4].DoesObjectWantToLoadFromSaveGame)(v6) + 264);
  77.     v39 = v17;
  78.     v18 = 0;
  79.     if ( *(_DWORD *)(v17 + 136) > 0 )
  80.     {
  81.       v40 = v15;
  82.       v19 = 0i64;
  83.       while ( 1 )
  84.       {
  85.         v20 = *(_QWORD *)(v19 + *(_QWORD *)(v17 + 128));
  86.         if ( *(_QWORD *)(v20 + 96) )
  87.         {
  88.           v21 = (*(__int64 (__fastcall **)(__int64, __int64 *))(*(_QWORD *)v20 + 720i64))(v20, &v45);
  89.           v7 |= 1u;
  90.           v22 = (wint_t *)&Data;
  91.           if ( v42 )
  92.             v22 = v41;
  93.           if ( *(_DWORD *)(v21 + 8) )
  94.             v23 = *(EAppMsgType::Type **)v21;
  95.           else
  96.             v23 = &Data;
  97.           v24 = (char *)v23 - (char *)v22;
  98.           while ( 1 )
  99.           {
  100.             v25 = *(wint_t *)((char *)v22 + v24);
  101.             if ( !v25 && !*v22 )
  102.               goto LABEL_21;
  103.             v26 = towlower(v25);
  104.             v27 = towlower(*v22);
  105.             if ( v26 != v27 )
  106.               break;
  107.             ++v22;
  108.           }
  109.           if ( v26 == v27 )
  110.           {
  111. LABEL_21:
  112.             v28 = 1;
  113.             v12 = v35;
  114.             goto LABEL_24;
  115.           }
  116.           v12 = v35;
  117.         }
  118.         v28 = 0;
  119. LABEL_24:
  120.         if ( v7 & 1 )
  121.         {
  122.           v7 &= 0xFFFFFFFE;
  123.           v29 = v45;
  124.           if ( v45 )
  125.           {
  126.             v30 = GMalloc;
  127.             if ( !GMalloc )
  128.             {
  129.               GCreateMalloc();
  130.               v30 = GMalloc;
  131.             }
  132.             ((void (__fastcall *)(FMalloc *, __int64))v30->vfptr[2].Exec)(v30, v29);
  133.           }
  134.         }
  135.         if ( v28 )
  136.           v35 = ++v12;
  137.         if ( v40 > 0 && v12 >= v38 )
  138.           goto LABEL_43;
  139.         if ( *(_QWORD *)(v20 + 336) && *(_BYTE *)(v20 + 220) & 2 )
  140.           ++v16;
  141.         ++v18;
  142.         v19 += 8i64;
  143.         v17 = v39;
  144.         if ( v18 >= *(_DWORD *)(v39 + 136) )
  145.         {
  146.           v11 = v36;
  147.           v9 = v37;
  148.           break;
  149.         }
  150.       }
  151.     }
  152.     if ( v11 >= v16 )
  153.       v16 = v11;
  154.     v11 = v16;
  155.   }
  156.   if ( v9 <= 0 || v11 < v9 )
  157.   {
  158.     v31 = 0;
  159.     goto LABEL_45;
  160.   }
  161. LABEL_43:
  162.   v31 = 1;
  163. LABEL_45:
  164.   v32 = (__int64)v41;
  165.   if ( v41 )
  166.   {
  167.     v33 = GMalloc;
  168.     if ( !GMalloc )
  169.     {
  170.       GCreateMalloc();
  171.       v33 = GMalloc;
  172.     }
  173.     ((void (__fastcall *)(FMalloc *, __int64))v33->vfptr[2].Exec)(v33, v32);
  174.   }
  175.   v34 = result.SharedReferenceCount.ReferenceController;
  176.   if ( result.SharedReferenceCount.ReferenceController
  177.     && !_InterlockedDecrement(&result.SharedReferenceCount.ReferenceController->SharedReferenceCount) )
  178.   {
  179.     v34->DestroyObject(v34->Object);
  180.     if ( !_InterlockedDecrement(&v34->WeakReferenceCount) )
  181.       operator delete(v34);
  182.   }
  183.   return v31;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment