Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Bug Reports

Development::Bug Reports Post detailed bug reports and what you would like to see next in the emu here.

Reply
 
Thread Tools Display Modes
  #1  
Old 02-25-2009, 07:12 PM
ChaosSlayer
Demi-God
 
Join Date: May 2007
Posts: 1,032
Default

Thank you for this submission Theeper
Unfortunately I can't realy test any new code myself at this time due to number of reasons, So I am hopping that Trev, Cavedude or KLS can try this fix and hopefuly it will work
Reply With Quote
  #2  
Old 02-25-2009, 07:54 PM
Theeper
Discordant
 
Join Date: May 2004
Posts: 290
Default

After looking through the nodrop checks, it looks like in most places, it's just reading the pointer to the base item flag directly.

It seems like it would make sense to create an IsNoDrop() function inside the ItemInst class to check both flags. Then replace all the existing nodrop checks throughout ... as opposed to adding an instance no drop check each time a normal no drop check is done.

Also, any thoughts on how it worked when you looted an attuneable item on Live ? .. If the item auto equipped, did the "Are you sure you want to attune?" popup window work?

It seems like there was some odd issue with attuneable items back then, but It's been too long.

As usual, there's probably a function somewhere I missed and KLS will rewrite the whole thing in one line.
Reply With Quote
  #3  
Old 02-25-2009, 08:27 PM
ChaosSlayer
Demi-God
 
Join Date: May 2007
Posts: 1,032
Default

as far as I can tell on LIVE attuneable item did not tried to auto-equip itself - it went directly into your bags
Reply With Quote
  #4  
Old 02-25-2009, 10:55 PM
Theeper
Discordant
 
Join Date: May 2004
Posts: 290
Default

Good point. Here is a simple change to make them not auto equip.

In zone\inventory.cpp around line 381

Change

Code:
	// #1: Try to auto equip
	if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel<=level)
to

Code:
	// #1: Try to auto equip
	if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel<=level && !inst.GetItem()->Attuneable)

And this will set the instnodrop flag upon zoning if the item was equipped somehow (like with MQ) and bypasses the popup window.

in common\shareddb.cpp around line 483

Change
Code:
			if (item) {
				sint16 put_slot_id = SLOT_INVALID;
				
				ItemInst inst(item, charges);
				if (instnodrop)
						inst.SetInstNoDrop(true);
				if (color > 0)
					inst.SetColor(color);
				if(charges==255)
					inst.SetCharges(-1);
				else
to

Code:
			if (item) {
				sint16 put_slot_id = SLOT_INVALID;
				
				ItemInst inst(item, charges);
				if (instnodrop || (slot_id >= 0 && slot_id <= 21 && inst.GetItem()->Attuneable))
						inst.SetInstNoDrop(true);
				if (color > 0)
					inst.SetColor(color);
				if(charges==255)
					inst.SetCharges(-1);
				else
Reply With Quote
  #5  
Old 02-26-2009, 12:19 AM
cavedude's Avatar
cavedude
The PEQ Dude
 
Join Date: Apr 2003
Location: -
Posts: 1,988
Default

I just tested this out, attuneable items do persist over zoning/camping and no longer auto-loot. However, they lose their no drop flag when you loot the item off your corpse. We're probably losing the flag when it gets transferred to the corpse.

Also, I confirmed that you can trade them to NPCs, however you can't sell them in bazaar. Since they are no drop, they won't appear in your item list after placing in the trader's satchel.

So, all that needs to be done is put in a NPC trade check, and correct the transfer to corpses and back then this will be 100%.

Last edited by cavedude; 02-26-2009 at 08:32 AM..
Reply With Quote
  #6  
Old 02-26-2009, 12:30 AM
Secrets's Avatar
Secrets
Demi-God
 
Join Date: May 2007
Location: b
Posts: 1,450
Default

Have not tested this, but this should work hopefully. I probably messed it up but something along the lines of this should work, heh.

PlayerCorpse.cpp

Code:
void Corpse::MoveItemToCorpse(Client *client, ItemInst *item, sint16 equipslot)
{
	int bagindex;
	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));
	if(item->IsType(ItemClassContainer))
	{
		for(bagindex = 0; bagindex <= 10; bagindex++)
		{
			interior_slot = Inventory::CalcSlotId(equipslot, bagindex);
			interior_item = client->GetInv().GetItem(interior_slot);
			if(interior_item->IsInstNoDrop)
			{
				interior_item->SetInstNoDrop(true);
			}
			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));
				client->DeleteItemInInventory(interior_slot);
			}
		}
	}
	client->DeleteItemInInventory(equipslot);
}
Reply With Quote
  #7  
Old 02-26-2009, 10:25 AM
Theeper
Discordant
 
Join Date: May 2004
Posts: 290
Default

Thanks guys, I'll try to get the NPC trade thing and the corpse flag done when I get home tonite.

Secrets, this doesn't look proper though. You're setting a flag that is already set.

Code:
			if(interior_item->IsInstNoDrop)
			{
				interior_item->SetInstNoDrop(true);
			}
I'm wondering if you meant to do..

Code:
			if(item->IsInstNoDrop())
			{
				interior_item->SetInstNoDrop(true);
			}
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 07:01 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3