View Single Post
  #19  
Old 03-27-2009, 06:39 PM
Theeper
Discordant
 
Join Date: May 2004
Posts: 290
Default

I got the flag to persist through bagged items now. This seems to make attuneable items work properly in my limited testing.

Here's a diff against 397.

Code:
Index: common/shareddb.cpp
===================================================================
--- common/shareddb.cpp	(revision 397)
+++ common/shareddb.cpp	(working copy)
@@ -1229,7 +1229,7 @@
 
 
 // Create appropriate ItemInst class
-ItemInst* SharedDatabase::CreateItem(uint32 item_id, sint16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5)
+ItemInst* SharedDatabase::CreateItem(uint32 item_id, sint16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool instnodrop)
 {
 	const Item_Struct* item = NULL;
 	ItemInst* inst = NULL;
@@ -1241,6 +1241,7 @@
 		inst->PutAugment(this, 2, aug3);
 		inst->PutAugment(this, 3, aug4);
 		inst->PutAugment(this, 4, aug5);
+		inst->SetInstNoDrop(instnodrop);
 
 	}
 
@@ -1249,7 +1250,7 @@
 
 
 // Create appropriate ItemInst class
-ItemInst* SharedDatabase::CreateItem(const Item_Struct* item, sint16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5)
+ItemInst* SharedDatabase::CreateItem(const Item_Struct* item, sint16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool instnodrop)
 {
 	ItemInst* inst = NULL;
 	if (item) {
@@ -1262,6 +1263,7 @@
 		inst->PutAugment(this, 3, aug4);
 		inst->PutAugment(this, 4, aug5);
 		inst->SetCharges(charges);
+		inst->SetInstNoDrop(instnodrop);
 	}
 	
 	return inst;
Index: common/shareddb.h
===================================================================
--- common/shareddb.h	(revision 397)
+++ common/shareddb.h	(working copy)
@@ -60,8 +60,8 @@
 	/*
 	 * Item Methods
 	 */
-	ItemInst* CreateItem(uint32 item_id, sint16 charges=0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0);
-	ItemInst* CreateItem(const Item_Struct* item, sint16 charges=0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0);
+	ItemInst* CreateItem(uint32 item_id, sint16 charges=0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0, bool instnodrop = false);
+	ItemInst* CreateItem(const Item_Struct* item, sint16 charges=0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0, bool instnodrop = false);
 	
 	
 	/*
Index: zone/inventory.cpp
===================================================================
--- zone/inventory.cpp	(revision 397)
+++ zone/inventory.cpp	(working copy)
@@ -330,7 +330,7 @@
 		{
 			if(bag_item_data[i] == NULL)
 				continue;
-			const ItemInst *bagitem = database.CreateItem(bag_item_data[i]->item_id, bag_item_data[i]->charges);
+			const ItemInst *bagitem = database.CreateItem(bag_item_data[i]->item_id, bag_item_data[i]->charges, bag_item_data[i]->aug1, bag_item_data[i]->aug2, bag_item_data[i]->aug3, bag_item_data[i]->aug4, bag_item_data[i]->aug5, bag_item_data[i]->instnodrop);
 			interior_slot = Inventory::CalcSlotId(slot_id, i);
 			mlog(INVENTORY__SLOTS, "Putting bag loot item %s (%d) into slot %d (bag slot %d)", inst.GetItem()->Name, inst.GetItem()->ID, interior_slot, i);
 			PutLootInInventory(interior_slot, *bagitem);
Index: zone/PlayerCorpse.cpp
===================================================================
--- zone/PlayerCorpse.cpp	(revision 397)
+++ zone/PlayerCorpse.cpp	(working copy)
@@ -309,7 +309,7 @@
 	sint16 interior_slot;
 	ItemInst *interior_item;
 
-	AddItem(item->GetItem()->ID, item->GetCharges(),  equipslot, item->GetAugmentItemID(0), item->GetAugmentItemID(1), item->GetAugmentItemID(2), item->GetAugmentItemID(3), item->GetAugmentItemID(4));
+	AddItem(item->GetItem()->ID, item->GetCharges(),  equipslot, item->GetAugmentItemID(0), item->GetAugmentItemID(1), item->GetAugmentItemID(2), item->GetAugmentItemID(3), item->GetAugmentItemID(4), item->IsInstNoDrop());
 	if(item->IsType(ItemClassContainer))
 	{
 		for(bagindex = 0; bagindex <= 10; bagindex++)
@@ -319,7 +319,7 @@
 
 			if(interior_item)
 			{
-				AddItem(interior_item->GetItem()->ID, interior_item->GetCharges(), interior_slot, interior_item->GetAugmentItemID(0), interior_item->GetAugmentItemID(1), interior_item->GetAugmentItemID(2), interior_item->GetAugmentItemID(3), interior_item->GetAugmentItemID(4));
+				AddItem(interior_item->GetItem()->ID, interior_item->GetCharges(), interior_slot, interior_item->GetAugmentItemID(0), interior_item->GetAugmentItemID(1), interior_item->GetAugmentItemID(2), interior_item->GetAugmentItemID(3), interior_item->GetAugmentItemID(4), interior_item->IsInstNoDrop());
 				client->DeleteItemInInventory(interior_slot);
 			}
 		}
@@ -488,7 +488,7 @@
 	return itemlist.size();
 }
 
-void Corpse::AddItem(uint32 itemnum, int8 charges, sint16 slot, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5) {
+void Corpse::AddItem(uint32 itemnum, int8 charges, sint16 slot, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool instnodrop) {
 	if (!database.GetItem(itemnum))
 		return;
 	pIsChanged = true;
@@ -502,6 +502,7 @@
 	item->aug3=aug3;
 	item->aug4=aug4;
 	item->aug5=aug5;
+	item->instnodrop = instnodrop;
 	itemlist.push_back(item);
 }
 
@@ -854,7 +855,7 @@
 					item = database.GetItem(item_data->item_id);
 					if (client && item)
 					{
-						ItemInst* inst = database.CreateItem(item, item_data->charges, item_data->aug1, item_data->aug2, item_data->aug3, item_data->aug4, item_data->aug5);
+						ItemInst* inst = database.CreateItem(item, item_data->charges, item_data->aug1, item_data->aug2, item_data->aug3, item_data->aug4, item_data->aug5, item_data->instnodrop);
 						if (inst)
 						{
 							client->SendItemPacket(i + 22, inst, ItemPacketLoot);
@@ -920,7 +921,7 @@
 	if (item != 0)
 	{
 		if(item_data)
-			inst = database.CreateItem(item, item_data?item_data->charges:0, item_data->aug1, item_data->aug2, item_data->aug3, item_data->aug4, item_data->aug5);
+			inst = database.CreateItem(item, item_data?item_data->charges:0, item_data->aug1, item_data->aug2, item_data->aug3, item_data->aug4, item_data->aug5, item_data->instnodrop);
 		else
 			inst = database.CreateItem(item);
 
Index: zone/PlayerCorpse.h
===================================================================
--- zone/PlayerCorpse.h	(revision 397)
+++ zone/PlayerCorpse.h	(working copy)
@@ -57,7 +57,7 @@
 
 	void	SetDecayTimer(int32 decaytime);
 	bool	IsEmpty() const;
-	void	AddItem(uint32 itemnum, int8 charges, sint16 slot = 0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0);
+	void	AddItem(uint32 itemnum, int8 charges, sint16 slot = 0, uint32 aug1=0, uint32 aug2=0, uint32 aug3=0, uint32 aug4=0, uint32 aug5=0, bool instnodrop=false);
 	uint32	GetWornItem(sint16 equipSlot) const;
 	ServerLootItem_Struct* GetItem(int16 lootslot, ServerLootItem_Struct** bag_item_data = 0);
 	void	RemoveItem(int16 lootslot);
Index: zone/zonedump.h
===================================================================
--- zone/zonedump.h	(revision 397)
+++ zone/zonedump.h	(working copy)
@@ -155,6 +155,7 @@
 	uint32 aug3;
 	uint32 aug4;
 	uint32 aug5;
+	bool instnodrop;
 };
 
 struct DBPlayerCorpse_Struct {
Reply With Quote