Browse Source

Revise Spectral Usability

pull/7662/head
Eric Robinson 1 year ago
parent
commit
52b3ace598
  1. 21
      Source/inv.h
  2. 7
      Source/items.cpp
  3. 1
      Source/towners.cpp

21
Source/inv.h

@ -384,6 +384,27 @@ inline bool RemoveInventoryOrBeltItemById(Player &player, _item_indexes id)
return RemoveInventoryItemById(player, id) || RemoveBeltItemById(player, id);
}
/**
* @brief Marks all Spectral Elixir items in the player's inventory as permanently usable
* by setting the CF_USEFUL flag in the item's creation info.
*
* This ensures that Spectral Elixirs remain usable across game sessions, regardless of
* quest status, while maintaining reverse compatibility with the original game.
*
* @param player The player whose inventory is being updated.
*/
inline void SetSpectralUsable(Player &player)
{
if (player.InvList->isEmpty())
return;
for (Item &item : player.InvList) {
if (item.IDidx == IDI_SPECELIX) {
item._iCreateInfo |= CF_ONLYGOOD; // Set the unused flag to mark as permanently usable
}
}
}
/**
* @brief Removes the first inventory or belt scroll with the player's current spell.
*/

7
Source/items.cpp

@ -4779,8 +4779,13 @@ void PutItemRecord(uint32_t nSeed, uint16_t wCI, int nIndex)
bool Item::isUsable() const
{
if (IDidx == IDI_SPECELIX && Quests[Q_MUSHROOM]._qactive != QUEST_DONE)
// If the item is a Spectral Elixir
if (IDidx == IDI_SPECELIX) {
if ((_iCreateInfo & CF_ONLYGOOD) != 0 || Quests[Q_MUSHROOM]._qactive == QUEST_DONE)
return true;
return false;
}
return AllItemsList[IDidx].iUsable;
}

1
Source/towners.cpp

@ -450,6 +450,7 @@ void TalkToWitch(Player &player, Towner & /*witch*/)
return;
}
if (HasInventoryOrBeltItemWithId(player, IDI_SPECELIX)) {
SetSpectralUsable(player);
Quests[Q_MUSHROOM]._qactive = QUEST_DONE;
NetSendCmdQuest(true, Quests[Q_MUSHROOM]);
InitQTextMsg(TEXT_MUSH12);

Loading…
Cancel
Save