From 512f29c0d474bf3ff322f662d5ba3b3cb47dd105 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 26 Sep 2022 00:16:39 -0500 Subject: [PATCH] Task reward stacking --- zone/task_client_state.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/zone/task_client_state.cpp b/zone/task_client_state.cpp index 8198e3e68..06d62ae62 100644 --- a/zone/task_client_state.cpp +++ b/zone/task_client_state.cpp @@ -979,14 +979,19 @@ void ClientTaskState::RewardTask(Client *client, const TaskInformation *task_inf const EQ::ItemData *item_data; std::vector reward_list; + + for (auto &i: Strings::Split(task_information->reward_id_list, "|")) { - auto item_id = Strings::IsNumber(i) ? std::stoi(i) : 0; + auto item_id = Strings::IsNumber(i) ? std::stoi(i) : 0; if (item_id > 0) { - int16_t slot = client->GetInv().FindFreeSlot(false, true); - client->SummonItem(item_id, -1, 0, 0, 0, 0, 0, 0, false, slot); - item_data = database.GetItem(item_id); - if (item_data) { - client->MessageString(Chat::Yellow, YOU_HAVE_BEEN_GIVEN, item_data->Name); + EQ::ItemInstance *inst = database.CreateItem(item_id); + bool stacked = client->TryStacking(inst); + if (!stacked) { + int16_t slot = client->GetInv().FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size); + client->SummonItem(item_id, -1, 0, 0, 0, 0, 0, 0, false, slot); + if (item_data) { + client->MessageString(Chat::Yellow, YOU_HAVE_BEEN_GIVEN, inst->GetItem()->Name); + } } } }