Advertisement
fastman92

GTA SA CLoadedCarGroup::PickRandomCar

Jan 25th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. signed int __thiscall CLoadedCarGroup::PickRandomCar(CLoadedCarGroup *this, char a2, char a3)
  2. {
  3. signed int v3; // eax@1
  4. CLoadedCarGroup *v4; // edx@1
  5. int v5; // ebp@1
  6. signed int v7; // ebx@6
  7. int v8; // esi@7
  8. int *v9; // edi@8
  9. signed int v10; // eax@10
  10. CModelCars *v11; // edx@10
  11. __int16 v12; // cx@10
  12. int v13; // eax@16
  13. signed int v14; // ebp@19
  14. float v15; // ST1C_4@20
  15. unsigned __int64 v16; // qax@20
  16. int v17; // esi@20
  17. signed int i; // ecx@22
  18. CLoadedCarGroup *v19; // [sp+14h] [bp-38h]@1
  19. int v20; // [sp+1Ch] [bp-30h]@7
  20. signed __int16 v21; // [sp+48h] [bp-4h]@7
  21.  
  22. v4 = this;
  23. v5 = 0;
  24. v19 = this;
  25. v3 = 0;
  26. do
  27. {
  28. if ( this->m_Array[v3] < 0 )
  29. break;
  30. ++v5;
  31. ++v3;
  32. }
  33. while ( v3 < 23 );
  34. if ( !v5 )
  35. return -1;
  36. v7 = 0;
  37. if ( !a3 )
  38. {
  39. v13 = 0;
  40. if ( v5 > 0 )
  41. {
  42. do
  43. v7 += CModelInfo::ms_modelInfoPtrs[this->m_Array[v13++]]->frq;
  44. while ( v13 < v5 );
  45. goto LABEL_18;
  46. }
  47. return -1;
  48. }
  49. memset(&v20, -1, 0x2Cu);
  50. v8 = 0;
  51. v21 = -1;
  52. if ( v5 <= 0 )
  53. return -1;
  54. v9 = &v20;
  55. while ( 1 )
  56. {
  57. v12 = v4->m_Array[v8];
  58. v11 = CModelInfo::ms_modelInfoPtrs[v4->m_Array[v8]];
  59. v10 = v11->vclass;
  60. if ( v10 >= 0 && (v10 <= 2 || v10 == 8) )
  61. {
  62. *(_WORD *)v9 = v12;
  63. v7 += v11->frq;
  64. v9 = (int *)((char *)v9 + 2);
  65. }
  66. ++v8;
  67. if ( v8 >= v5 )
  68. break;
  69. v4 = v19;
  70. }
  71. LABEL_18:
  72. if ( !v7 )
  73. return -1;
  74. v14 = 0;
  75. while ( 1 )
  76. {
  77. v15 = (long double)v7;
  78. v16 = (unsigned __int64)((long double)(unsigned __int16)rand() * 0.000030517578 * v15);
  79. HIDWORD(v16) = v19;
  80. v17 = (signed __int16)v20;
  81. if ( !a3 )
  82. v17 = v19->m_Array[0];
  83. for ( i = CModelInfo::ms_modelInfoPtrs[v17]->frq; (signed int)v16 > i; i = CModelInfo::ms_modelInfoPtrs[v17]->frq )
  84. {
  85. LODWORD(v16) = v16 - i;
  86. HIDWORD(v16) += 2;
  87. if ( a3 )
  88. v17 = *(_WORD *)((char *)&v20 - (char *)v19 + HIDWORD(v16));
  89. else
  90. v17 = *HIDWORD(v16);
  91. }
  92. if ( !rcgIsModelDisabled(v17)
  93. && !sub_46A890(v17)
  94. && !(unsigned __int8)sub_407F80(v17)
  95. && (!a2 || CModelInfo::ms_modelInfoPtrs[v17]->__parent.__parent.m_wUsageCount < 3) )
  96. break;
  97. ++v14;
  98. if ( v14 >= 10 )
  99. return -1;
  100. }
  101. return v17;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement