Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.02 KB | None | 0 0
  1. struct GR5_TemplateItem
  2. {
  3.   DWORD *pVMT;
  4.   DWORD m_ItemID;
  5.   BYTE m_ItemType;
  6.   CHAR *m_ItemName;
  7.   BYTE m_DurabilityType;
  8.   bool m_IsInInventory;
  9.   bool m_IsSellable;
  10.   bool m_IsLootable;
  11.   bool m_IsRewardable;
  12.   bool m_IsUnlockable;
  13.   DWORD m_MaxItemInSlot;
  14.   DWORD m_GearScore;
  15.   float m_IGCValue;
  16.   DWORD m_OasisName;
  17.   DWORD m_OasisDesc;
  18. };
  19.  
  20. struct unknownStruct1
  21. {
  22.   unknownStruct2 *unkownStruct2;
  23.   _DWORD string_RDV_;
  24.   _DWORD string_cl_T;
  25.   GR5_TemplateItem *pStart;
  26.   GR5_TemplateItem *pNext;
  27.   GR5_TemplateItem *pEnd;
  28.   _DWORD unk5;
  29.   _DWORD unk6;
  30.   _DWORD unk7;
  31.   _DWORD unk8;
  32.   _DWORD unk9;
  33.   _DWORD unk10;
  34. };
  35.  
  36. struct unknownStruct2
  37. {
  38.   unknownStruct3 **unkownStruct3;
  39.   _DWORD pEnd;
  40.   _DWORD unk3;
  41.   _DWORD unk4;
  42.   _DWORD unk5;
  43.   _DWORD unk6;
  44.   _DWORD unk7;
  45.   _DWORD unk8;
  46.   _DWORD unk9;
  47.   _DWORD unk10;
  48. };
  49.  
  50. struct unknownStruct3
  51. {
  52.   _DWORD dword0;
  53.   _DWORD dword4;
  54.   _DWORD dword8;
  55.   _DWORD pMemStart;
  56.   _DWORD pMaxCapacity;
  57. };
  58.  
  59.  
  60.  
  61. GR5_TemplateItem *__thiscall AddTemplateItem_(unknownStruct1 *this, GR5_TemplateItem *item)
  62. {
  63.   GR5_TemplateItem *v2; // ST50_4
  64.   GR5_TemplateItem *result; // eax
  65.   unsigned int idxMax; // [esp+0h] [ebp-60h]
  66.   GR5_TemplateItem *pNext; // [esp+34h] [ebp-2Ch] MAPDST
  67.   int v7; // [esp+48h] [ebp-18h]
  68.   unknownStruct2 *v8; // [esp+50h] [ebp-10h] MAPDST
  69.  
  70.   if ( this->pStart )
  71.     idxMax = this->pEnd - this->pStart;
  72.   else
  73.     idxMax = 0;
  74.   if ( this->pNext - this->pStart >= idxMax )
  75.   {
  76.     pNext = this->pNext;
  77.     v8 = 0;
  78.     if ( !this || this->pStart > pNext || pNext > this->pNext )
  79.       _invalid_parameter_noinfo();
  80.     v8 = this->unkownStruct2;
  81.     result = AppendTemplateItem(this, &v7, v8, pNext, item);
  82.   }
  83.   else
  84.   {
  85.     v2 = this->pNext;
  86.     result = AssignTemplateItem(this->pNext, 1, item);
  87.     this->pNext = v2 + 1;
  88.   }
  89.   return result;
  90. }
  91.  
  92. unknownStruct2 **__thiscall AppendTemplateItem_(unknownStruct1 *this, int a2, unknownStruct2 *a3, DWORD pNext, GR5_TemplateItem *item)
  93. {
  94.   int idxMax; // [esp+0h] [ebp-34h] MAPDST
  95.   GR5_TemplateItem *idxFirst; // [esp+18h] [ebp-1Ch] MAPDST
  96.   GR5_TemplateItem *v12; // [esp+1Ch] [ebp-18h] MAPDST
  97.   unknownStruct2 *v13; // [esp+20h] [ebp-14h] MAPDST
  98.   unknownStruct2 *v15; // [esp+28h] [ebp-Ch]
  99.  
  100.   if ( this->pNext - this->pStart )
  101.   {
  102.     v12 = this->pStart;
  103.     v15 = 0;
  104.     if ( !this || this->pStart > v12 || v12 > this->pNext )
  105.       _invalid_parameter_noinfo();
  106.     v15 = this->unkownStruct2;
  107.     if ( !a3 || a3 != v15 )
  108.       _invalid_parameter_noinfo();
  109.     idxMax = (pNext - v12) / 44;
  110.   }
  111.   else
  112.   {
  113.     idxMax = 0;
  114.   }
  115.   AppendTemplateItems(this, a3, a3, pNext, 1, item);
  116.   idxFirst = this->pStart;
  117.   v13 = 0;
  118.   if ( !this || this->pStart > idxFirst || idxFirst > this->pNext )
  119.     _invalid_parameter_noinfo();
  120.   v13 = this->unkownStruct2;
  121.   IncreaseListSize(&v13, idxMax);
  122.   *a2 = v13;
  123.   *(a2 + 4) = idxFirst;
  124.   return a2;
  125. }
  126.  
  127. unknownStruct1 *__fastcall AppendTemplateItems_(unknownStruct1 *a1, int a2, int a3, int pNext, unsigned int count, GR5_TemplateItem *item)
  128. {
  129.   // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]
  130.  
  131.   v94 = &v8;
  132.   result = a1;
  133.   if ( a1->pStart )
  134.   {
  135.     result = (a1->pEnd - a1->pStart);
  136.     maxCount = a1->pEnd - a1->pStart;
  137.   }
  138.   else
  139.   {
  140.     maxCount = 0;
  141.   }
  142.   if ( count )
  143.   {
  144.     v11 = 0x5D1745D;
  145.     v11 = 0x5D1745D;
  146.     if ( 0x5D1745D - (a1->pNext - a1->pStart) < count )
  147.       outOfMemoryError();
  148.     if ( maxCount >= count + a1->pNext - a1->pStart )
  149.     {
  150.       if ( (a1->pNext - pNext) / 44 >= count )
  151.       {
  152.         CopyTemplateItem(&v87, item);
  153.         v87.pVMT = &Quazal::GR5_TemplateItem::'vftable';
  154.         v95 = 6;
  155.         v88 = a1->pNext;
  156.         v26 = a1->pNext;
  157.         v7 = sub_10008EB8(&v88[-count], v88, v26);
  158.         a1->pNext = v7;
  159.         v19 = &v88[-count];
  160.         v25 = 0;
  161.         v22 = &v88[-count];
  162.         sub_100072C5(pNext, &v88[-count], v88);
  163.         v14 = pNext + 44 * count;
  164.         v17 = (pNext + 44 * count);
  165.         for ( i = pNext; i != v17; ++i )
  166.           CopyTemplateItem_0(i, &v87);
  167.         v87.pVMT = &Quazal::_DDL_GR5_TemplateItem::'vftable';
  168.         v95 = 7;
  169.         Quazal::String::~String(&v87.m_ItemName);
  170.         v95 = -1;
  171.         result = Quazal::RootObject::~RootObject(&v87.m_ItemID);
  172.       }
  173.       else
  174.       {
  175.         CopyTemplateItem(&a1a, item);
  176.         a1a.pVMT = &Quazal::GR5_TemplateItem::'vftable';
  177.         v95 = 2;
  178.         v37 = a1->pNext;
  179.         v38 = pNext + 44 * count;
  180.         v47 = 0;
  181.         v41 = 0;
  182.         v42 = pNext + 44 * count;
  183.         sub_10003486(pNext, v37, pNext + 44 * count);
  184.         LOBYTE(v95) = 3;
  185.         a2a = count - (a1->pNext - pNext) / 44;
  186.         v32 = a1->pNext;
  187.         v36 = 0;
  188.         AssignTemplateItem(v32, a2a, &a1a);
  189.         v95 = 2;
  190.         a1->pNext += count;
  191.         v27 = &a1->pNext[-count];
  192.         for ( j = pNext; j != v27; ++j )
  193.           CopyTemplateItem_0(j, &a1a);
  194.         a1a.pVMT = &Quazal::_DDL_GR5_TemplateItem::'vftable';
  195.         v95 = 5;
  196.         Quazal::String::~String(&a1a.m_ItemName);
  197.         v95 = -1;
  198.         result = Quazal::RootObject::~RootObject(&a1a.m_ItemID);
  199.       }
  200.     }
  201.     else
  202.     {
  203.       v85 = 0x5D1745D;
  204.       v10 = 0x5D1745D;
  205.       if ( 0x5D1745D - (maxCount >> 1) >= maxCount )
  206.         v9 = maxCount + (maxCount >> 1);
  207.       else
  208.         v9 = 0;
  209.       maxCount = v9;
  210.       if ( v9 < count + a1->pNext - a1->pStart )
  211.         maxCount = count + a1->pNext - a1->pStart;
  212.       v91 = Quazal::MemoryManager::Allocate(44 * maxCount, 7);
  213.       v92 = (pNext - a1->pStart) / 44;
  214.       v90 = 0;
  215.       v95 = 0;
  216.       v80 = &v91[v92];
  217.       v81 = &v91[v92];
  218.       v84 = 0;
  219.       AssignTemplateItem(v81, count, item);
  220.       ++v90;
  221.       v69 = a1->pStart;
  222.       v79 = 0;
  223.       v73 = 0;
  224.       sub_10003486(v69, pNext, v91);
  225.       ++v90;
  226.       v58 = a1->pNext;
  227.       v59 = &v91[count + v92];
  228.       v68 = 0;
  229.       v62 = 0;
  230.       v63 = &v91[count + v92];
  231.       sub_10003486(pNext, v58, &v91[count + v92]);
  232.       v95 = -1;
  233.       counta = count + a1->pNext - a1->pStart;
  234.       if ( a1->pStart )
  235.       {
  236.         v50 = a1->pNext;
  237.         v51 = a1->pStart;
  238.         for ( k = v51; k != v50; ++k )
  239.           (*k->pVMT)(k, 0);
  240.         v48 = a1->pEnd - a1->pStart;
  241.         v49 = a1->pStart;
  242.         Quazal::MemoryManager::Free(v49, 7);
  243.       }
  244.       a1->pEnd = &v91[maxCount];
  245.       a1->pNext = &v91[counta];
  246.       result = a1;
  247.       a1->pStart = v91;
  248.     }
  249.   }
  250.   return result;
  251. }
  252.  
  253. GR5_TemplateItem **__thiscall IncreaseListSize_(unknownStruct2 *this, int count)
  254. {
  255.   unknownStruct3 *v3; // [esp+0h] [ebp-1Ch]
  256.   unknownStruct3 *v4; // [esp+4h] [ebp-18h]
  257.  
  258.   if ( this->unkownStruct3 == 0 )
  259.     _invalid_parameter_noinfo();
  260.   if ( this->unkownStruct3 )
  261.     v4 = *this->unkownStruct3;
  262.   else
  263.     v4 = 0;
  264.   if ( (this->pEnd + 44 * count) > v4->pMaxCapacity
  265.     || (!this->unkownStruct3 ? (v3 = 0) : (v3 = *this->unkownStruct3), (this->pEnd + 44 * count) < v3->pMemStart) )
  266.   {
  267.     _invalid_parameter_noinfo();
  268.   }
  269.   this->pEnd += 44 * count;
  270.   return this;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement