From 3d3ac25831eb9e511ba1d860c47020c4a910f2c4 Mon Sep 17 00:00:00 2001 From: qndel Date: Mon, 16 Sep 2019 08:25:15 +0200 Subject: [PATCH] [hellfire] items.cpp - 5 functions bin exact (#1651) * [hellfire] items.cpp - 5 functions bin exact * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo * Update Source/items.cpp Co-Authored-By: Anders Jenbo --- Source/items.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++-- Source/items.h | 4 +++ 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/Source/items.cpp b/Source/items.cpp index dc3389374..6301a10c4 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -2078,7 +2078,11 @@ int RndAllItems() return ril[random(26, ri)]; } +#ifdef HELLFIRE +int RndTypeItems(int itype, int imid, int lvl) +#else int RndTypeItems(int itype, int imid) +#endif { int i, ri; BOOL okflag; @@ -2089,13 +2093,21 @@ int RndTypeItems(int itype, int imid) okflag = TRUE; if (!AllItemsList[i].iRnd) okflag = FALSE; +#ifdef HELLFIRE + if (lvl << 1 < AllItemsList[i].iMinMLvl) +#else if (currlevel << 1 < AllItemsList[i].iMinMLvl) +#endif okflag = FALSE; if (AllItemsList[i].itype != itype) okflag = FALSE; if (imid != -1 && AllItemsList[i].iMiscId != imid) okflag = FALSE; +#ifdef HELLFIRE + if (okflag && ri < 512) { +#else if (okflag) { +#endif ril[ri] = i; ri++; } @@ -2407,8 +2419,14 @@ void CreateTypeItem(int x, int y, BOOL onlygood, int itype, int imisc, BOOL send { int idx, ii; +#ifdef HELLFIRE + int curlv = items_get_currlevel(); + if (itype != ITYPE_GOLD) + idx = RndTypeItems(itype, imisc, curlv); +#else if (itype != ITYPE_GOLD) idx = RndTypeItems(itype, imisc); +#endif else idx = 0; @@ -2417,7 +2435,11 @@ void CreateTypeItem(int x, int y, BOOL onlygood, int itype, int imisc, BOOL send GetSuperItemSpace(x, y, ii); itemavail[0] = itemavail[MAXITEMS - numitems - 1]; itemactive[numitems] = ii; +#ifdef HELLFIRE + SetupAllItems(ii, idx, GetRndSeed(), 2 * curlv, 1, onlygood, FALSE, delta); +#else SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, onlygood, FALSE, delta); +#endif if (sendmsg) NetSendCmdDItem(FALSE, ii); @@ -4297,14 +4319,26 @@ void CreateSpellBook(int x, int y, int ispell, BOOL sendmsg, BOOL delta) BOOL done; done = FALSE; +#ifdef HELLFIRE + int lvl = spelldata[ispell].sBookLvl + 1; + if (lvl < 1) { + return; + } + idx = RndTypeItems(0, IMISC_BOOK, lvl); +#else idx = RndTypeItems(0, IMISC_BOOK); +#endif if (numitems < MAXITEMS) { ii = itemavail[0]; GetSuperItemSpace(x, y, ii); itemavail[0] = itemavail[MAXITEMS - numitems - 1]; itemactive[numitems] = ii; while (!done) { - SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, 1, FALSE, delta); +#ifdef HELLFIRE + SetupAllItems(ii, idx, GetRndSeed(), 2 * lvl, 1, TRUE, FALSE, delta); +#else + SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, TRUE, FALSE, delta); +#endif if (item[ii]._iMiscId == IMISC_BOOK && item[ii]._iSpell == ispell) done = TRUE; } @@ -4322,18 +4356,33 @@ void CreateMagicArmor(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL del BOOL done; done = FALSE; +#ifdef HELLFIRE + int curlv = items_get_currlevel(); +#endif if (numitems < MAXITEMS) { ii = itemavail[0]; GetSuperItemSpace(x, y, ii); itemavail[0] = itemavail[MAXITEMS - numitems - 1]; itemactive[numitems] = ii; +#ifdef HELLFIRE + idx = RndTypeItems(imisc, IMISC_NONE, curlv); +#else idx = RndTypeItems(imisc, IMISC_NONE); +#endif while (!done) { - SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, 1, FALSE, delta); +#ifdef HELLFIRE + SetupAllItems(ii, idx, GetRndSeed(), 2 * curlv, 1, TRUE, FALSE, delta); +#else + SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, TRUE, FALSE, delta); +#endif if (item[ii]._iCurs == icurs) done = TRUE; else +#ifdef HELLFIRE + idx = RndTypeItems(imisc, IMISC_NONE, curlv); +#else idx = RndTypeItems(imisc, IMISC_NONE); +#endif } if (sendmsg) NetSendCmdDItem(FALSE, ii); @@ -4349,18 +4398,38 @@ void CreateMagicWeapon(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL de BOOL done; done = FALSE; +#ifdef HELLFIRE + int imid; + if (imisc == ITYPE_STAFF) + imid = IMISC_STAFF; + else + imid = IMISC_NONE; + int curlv = items_get_currlevel(); +#endif if (numitems < MAXITEMS) { ii = itemavail[0]; GetSuperItemSpace(x, y, ii); itemavail[0] = itemavail[MAXITEMS - numitems - 1]; itemactive[numitems] = ii; +#ifdef HELLFIRE + idx = RndTypeItems(imisc, imid, curlv); +#else idx = RndTypeItems(imisc, IMISC_NONE); +#endif while (!done) { - SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, 1, FALSE, delta); +#ifdef HELLFIRE + SetupAllItems(ii, idx, GetRndSeed(), 2 * curlv, 1, TRUE, FALSE, delta); +#else + SetupAllItems(ii, idx, GetRndSeed(), 2 * currlevel, 1, TRUE, FALSE, delta); +#endif if (item[ii]._iCurs == icurs) done = TRUE; else +#ifdef HELLFIRE + idx = RndTypeItems(imisc, imid, curlv); +#else idx = RndTypeItems(imisc, IMISC_NONE); +#endif } if (sendmsg) NetSendCmdDItem(FALSE, ii); diff --git a/Source/items.h b/Source/items.h index 3504a0112..a82d8a4fe 100644 --- a/Source/items.h +++ b/Source/items.h @@ -59,7 +59,11 @@ void SetupItem(int i); int RndItem(int m); int RndUItem(int m); int RndAllItems(); +#ifdef HELLFIRE +int RndTypeItems(int itype, int imid, int lvl); +#else int RndTypeItems(int itype, int imid); +#endif int CheckUnique(int i, int lvl, int uper, BOOL recreate); void GetUniqueItem(int i, int uid); void SpawnUnique(int uid, int x, int y);