LUA GiveQuestItem supports more than one item

Fix  - http://cutpon.com:3000/devn00b/EQ2EMu/issues/295

GiveQuestItem(Quest, Player, Description, ItemID1, ItemID2)
This commit is contained in:
Image 2021-02-21 16:14:29 -05:00
parent eccec9cf92
commit 321cd929b9

View file

@ -5615,21 +5615,45 @@ int EQ2Emu_lua_GiveQuestItem(lua_State* state)
packet->setDataByName("name", quest->GetName());
packet->setDataByName("description", description.c_str());
packet->setDataByName("level", quest->GetLevel());
packet->setArrayLengthByName("num_rewards", 1);
packet->setArrayDataByName("reward_id", item->details.item_id);
// if there are any additional optional items to add we will verify them and append
int8 num_args = (int8)lua_interface->GetNumberOfArgs(state);
vector<Item*> additionalItems;
if(num_args > 4)
{
for(int8 n=5;n<num_args+1;n++)
{
int32 new_item = lua_interface->GetInt32Value(state, n);
Item* tmpItem = master_item_list.GetItem(new_item);
if(tmpItem)
additionalItems.push_back(tmpItem);
}
}
packet->setArrayLengthByName("num_rewards", 1+additionalItems.size());
sint8 offset = 2; // all new clients
if (client->GetVersion() < 860)
packet->setItemArrayDataByName("item", item, (Player*)spawn, 0, 0, -1);
offset = -1;
else if (client->GetVersion() < 1193)
packet->setItemArrayDataByName("item", item, (Player*)spawn);
else
packet->setItemArrayDataByName("item", item, (Player*)spawn, 0, 0, 2);
client->QueuePacket(packet->serialize());
safe_delete(packet);
offset = 0;
packet->setArrayDataByName("reward_id", item->details.item_id, 0);
packet->setItemArrayDataByName("item", item, (Player*)spawn, 0, 0, offset);
lua_interface->SetBooleanValue(state, client->AddItem(item_id, 1));
client->Message(CHANNEL_COLOR_YELLOW, "You receive %s.", item->CreateItemLink(client->GetVersion()).c_str());
for(int8 n=0;n<additionalItems.size();n++)
{
packet->setArrayDataByName("reward_id", additionalItems[n]->details.item_id, n+1);
packet->setItemArrayDataByName("item", additionalItems[n], (Player*)spawn, n+1, 0, offset);
lua_interface->SetBooleanValue(state, client->AddItem(additionalItems[n]->details.item_id, 1));
client->Message(CHANNEL_COLOR_YELLOW, "You receive %s.", additionalItems[n]->CreateItemLink(client->GetVersion()).c_str());
}
client->QueuePacket(packet->serialize());
safe_delete(packet);
return 1;
}