Browse Source

Clean up CheckUnique

pull/100/head
Anders Jenbo 7 years ago
parent
commit
528f8873cf
  1. 39
      Source/items.cpp
  2. 2
      Source/items.h

39
Source/items.cpp

@ -1922,49 +1922,42 @@ int RndTypeItems(int itype, int imid)
return ril[random(27, ri)];
}
int CheckUnique(int i, int lvl, int uper, BOOLEAN recreate)
int CheckUnique(int i, int lvl, int uper, BOOL recreate)
{
int numu; // ebx
int j; // esi
int idata; // eax
char uok[128]; // [esp+8h] [ebp-84h]
int j, idata, numu;
BOOLEAN uok[128];
if (random(28, 100) > uper)
return -1;
numu = 0;
memset(uok, 0, sizeof(uok));
if (UniqueItemList[0].UIItemId == -1)
return -1;
j = 0;
do {
for (j = 0; UniqueItemList[j].UIItemId != UITYPE_INVALID; j++) {
if (UniqueItemList[j].UIItemId == AllItemsList[item[i].IDidx].iItemId
&& lvl >= UniqueItemList[j].UIMinLvl
&& (recreate || !UniqueItemFlag[j] || gbMaxPlayers != 1)) {
uok[j] = 1;
++numu;
uok[j] = TRUE;
numu++;
}
j++;
} while (UniqueItemList[j].UIItemId != -1);
}
if (!numu)
return -1;
random(29, 10);
idata = 0;
if (numu > 0) {
while (1) {
if (uok[idata])
--numu;
if (numu <= 0)
break;
if (++idata == 128)
while (numu > 0) {
if (uok[idata])
numu--;
if (numu > 0) {
idata++;
if (idata == 128)
idata = 0;
}
}
return idata;
}
// 679660: using guessed type char gbMaxPlayers;
// 421D41: using guessed type char var_84[128];
void GetUniqueItem(int i, int uid)
{

2
Source/items.h

@ -51,7 +51,7 @@ int RndItem(int m);
int RndUItem(int m);
int RndAllItems();
int RndTypeItems(int itype, int imid);
int CheckUnique(int i, int lvl, int uper, BOOLEAN recreate);
int CheckUnique(int i, int lvl, int uper, BOOL recreate);
void GetUniqueItem(int i, int uid);
void SpawnUnique(int uid, int x, int y);
void ItemRndDur(int ii);

Loading…
Cancel
Save