Skip to content

Commit

Permalink
fix(zscript): generic script item collect event fix
Browse files Browse the repository at this point in the history
Item Collect event will no longer be fired for items such as timeout items when they are *not* actually able to be collected.
Due to timing changes, the "Combine when collected twice" now also occurs BEFORE the event.
  • Loading branch information
EmilyV99 committed Jan 20, 2024
1 parent e9d91d8 commit f53af52
Showing 1 changed file with 23 additions and 20 deletions.
43 changes: 23 additions & 20 deletions src/zc/hero.cpp
Expand Up @@ -30112,25 +30112,6 @@ void HeroClass::checkitems(int32_t index)
}
else
{
std::vector<int32_t> &ev = FFCore.eventData;
ev.clear();
ev.push_back(id2*10000);
ev.push_back(pickup*10000);
ev.push_back(pstr*10000);
ev.push_back(pstr_flags*10000);
ev.push_back(0);
ev.push_back(ptr->getUID());
ev.push_back(GENEVT_ICTYPE_COLLECT*10000);
ev.push_back(0);

throwGenScriptEvent(GENSCR_EVENT_COLLECT_ITEM);
bool nullify = ev[4] != 0;
if(nullify) return;
id2 = ev[0]/10000;
pickup = (pickup&(ipCHECK|ipDUMMY)) | (ev[1]/10000);
pstr = ev[2] / 10000;
pstr_flags = ev[3] / 10000;

if(itemsbuf[id2].family == itype_bottlefill && !game->canFillBottle())
return; //No picking these up unless you have a bottle to fill!

Expand All @@ -30153,7 +30134,7 @@ void HeroClass::checkitems(int32_t index)

if(get_qr(qr_HEARTSREQUIREDFIX) && !canget(id2))
return;

int32_t nextitem = -1;
do
{
Expand Down Expand Up @@ -30237,7 +30218,29 @@ void HeroClass::checkitems(int32_t index)

break;
}

//EVENT
{
std::vector<int32_t> &ev = FFCore.eventData;
ev.clear();
ev.push_back(id2*10000);
ev.push_back(pickup*10000);
ev.push_back(pstr*10000);
ev.push_back(pstr_flags*10000);
ev.push_back(0);
ev.push_back(ptr->getUID());
ev.push_back(GENEVT_ICTYPE_COLLECT*10000);
ev.push_back(0);

throwGenScriptEvent(GENSCR_EVENT_COLLECT_ITEM);
bool nullify = ev[4] != 0;
if(nullify) return;
id2 = ev[0]/10000;
pickup = (pickup&(ipCHECK|ipDUMMY)) | (ev[1]/10000);
pstr = ev[2] / 10000;
pstr_flags = ev[3] / 10000;
}

if(pickup&ipONETIME) // set mITEM for one-time-only items
{
setmapflag(mITEM);
Expand Down

0 comments on commit f53af52

Please sign in to comment.