diff --git a/zone/client.h b/zone/client.h index bbe4ba575..22c81290c 100644 --- a/zone/client.h +++ b/zone/client.h @@ -991,7 +991,7 @@ public: inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); } inline void UpdateTasksOnExplore(int ExploreID) { if(taskstate) taskstate->UpdateTasksOnExplore(this, ExploreID); } inline bool UpdateTasksOnSpeakWith(int NPCTypeID) { if(taskstate) return taskstate->UpdateTasksOnSpeakWith(this, NPCTypeID); else return false; } - inline bool UpdateTasksOnDeliver(uint32 *Items, int Cash, int NPCTypeID) { if(taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; } + inline bool UpdateTasksOnDeliver(std::list& Items, int Cash, int NPCTypeID) { if (taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; } inline void TaskSetSelector(Mob *mob, int TaskSetID) { if(taskmanager) taskmanager->TaskSetSelector(this, taskstate, mob, TaskSetID); } inline void EnableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->EnableTask(CharacterID(), TaskCount, TaskList); } inline void DisableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->DisableTask(CharacterID(), TaskCount, TaskList); } diff --git a/zone/tasks.cpp b/zone/tasks.cpp index a5cdeb5a8..cc84cc9de 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -1692,7 +1692,7 @@ void ClientTaskState::UpdateTasksOnExplore(Client *c, int ExploreID) { return; } -bool ClientTaskState::UpdateTasksOnDeliver(Client *c, uint32 *Items, int Cash, int NPCTypeID) { +bool ClientTaskState::UpdateTasksOnDeliver(Client *c, std::list& Items, int Cash, int NPCTypeID) { bool Ret = false; @@ -1731,17 +1731,15 @@ bool ClientTaskState::UpdateTasksOnDeliver(Client *c, uint32 *Items, int Cash, i Ret = true; } else { - for(int k=0; k<4; k++) { - if(Items[k]==0) continue; + for(auto& k : Items) { switch(Task->Activity[j].GoalMethod) { case METHODSINGLEID: - if(Task->Activity[j].GoalID != (int)Items[k]) continue; + if(Task->Activity[j].GoalID != k->GetID()) continue; break; case METHODLIST: - if(!taskmanager->GoalListManager.IsInList(Task->Activity[j].GoalID, - Items[k])) + if (!taskmanager->GoalListManager.IsInList(Task->Activity[j].GoalID, k->GetID())) continue; break; @@ -1751,7 +1749,7 @@ bool ClientTaskState::UpdateTasksOnDeliver(Client *c, uint32 *Items, int Cash, i } // We found an active task related to this item, so increment the done count Log.Out(Logs::General, Logs::Tasks, "[UPDATE] Increment on GiveItem"); - IncrementDoneCount(c, Task, i, j, 1); + IncrementDoneCount(c, Task, i, j, k->GetCharges()); Ret = true; } } diff --git a/zone/tasks.h b/zone/tasks.h index 459eacd08..9b5543b3d 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -22,6 +22,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) #include "../common/types.h" +#include #include #define MAXTASKS 10000 @@ -44,6 +45,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) class Client; class Mob; +class ItemInst; struct TaskGoalList_Struct { int ListID; @@ -185,7 +187,7 @@ public: void UpdateTasksForItem(Client *c, ActivityType Type, int ItemID, int Count=1); void UpdateTasksOnExplore(Client *c, int ExploreID); bool UpdateTasksOnSpeakWith(Client *c, int NPCTypeID); - bool UpdateTasksOnDeliver(Client *c, uint32 *Items, int Cash, int NPCTypeID); + bool UpdateTasksOnDeliver(Client *c, std::list& Items, int Cash, int NPCTypeID); void UpdateTasksOnTouch(Client *c, int ZoneID); void ProcessTaskProximities(Client *c, float X, float Y, float Z); bool TaskOutOfTime(int Index); diff --git a/zone/trading.cpp b/zone/trading.cpp index df8d159b1..a12b426e4 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -874,11 +874,11 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } std::vector item_list; - uint32 items[4] = { 0 }; + std::list items; for(int i = EmuConstants::TRADE_BEGIN; i <= EmuConstants::TRADE_NPC_END; ++i) { ItemInst *inst = m_inv.GetItem(i); if(inst) { - items[i - EmuConstants::TRADE_BEGIN] = inst->GetItem()->ID; + items.push_back(inst); item_list.push_back(inst); } else { item_list.push_back((ItemInst*)nullptr);