View Single Post
  #11  
Old 09-16-2008, 01:09 AM
James76
Sarnak
 
Join Date: Sep 2008
Location: Canada
Posts: 53
Default

ok I had some time to look at this... i disabled my code and I found I could click on the door for a while and it still wouldn't open. It looks like Client::Message_StringID(4,DOORS_LOCKED) has been hijacked with a flags check to unlock the door....

So one fix and one change.

In ./zone/doors.cpp it should look like:

Code:
		// a key is required or the door is locked but can be picked or both
		sender->Message(4,"This is locked...");		// debug spam - should probably go
		if (sender->GetGM())		// GM can always open locks - should probably be changed to require a key
		{
			sender->Message_StringID(4,DOORS_GM);
			if( !IsDoorOpen() || opentype == 58 )
			{ 
				md->action = OPEN_DOOR; 
			} 
			else
			{ 
				md->action = CLOSE_DOOR; 
			} 
		}
		else if (playerkey)
		{	// they have something they are trying to open it with
			if (keyneeded && keyneeded == playerkey)
			{	// key required and client is using the right key 
/*NEW*/				sender->KeyRingAdd(playerkey);
				sender->Message(4,"You got it open!");		// more debug spam
				if( !IsDoorOpen() || opentype == 58 )
				{ 
					md->action = OPEN_DOOR; 
				} 
				else
				{ 
					md->action = CLOSE_DOOR; 
				} 
			}
		}
		else if(lockpicks != NULL)
		{
			if(sender->GetSkill(PICK_LOCK))
			{
				if(lockpicks->GetItem()->ItemType == ItemTypeLockPick)
				{
					float modskill=sender->GetSkill(PICK_LOCK);
					sender->CheckIncreaseSkill(PICK_LOCK, 1);
#if EQDEBUG>=5
					LogFile->write(EQEMuLog::Debug,"Client has lockpicks: skill=%f", modskill);
#endif

					if(GetLockpick() <= modskill)
					{
						if(!IsDoorOpen())
						{ 
							md->action = OPEN_DOOR; 
						} 
						else
						{ 
							md->action = CLOSE_DOOR; 
						}
						sender->Message_StringID(4,DOORS_SUCCESSFUL_PICK);
					}
					else
					{
						sender->Message_StringID(4,DOORS_INSUFFICIENT_SKILL);
						return;
					}
				}
				else
				{
					sender->Message_StringID(4,DOORS_NO_PICK);
					return;
				}
			}
			else
			{
				sender->Message_StringID(4,DOORS_CANT_PICK);
				return;
			}
		}
		else
		{	// locked door and nothing to open it with
			//search for key on keyring
/*NEW*/			if(sender->KeyRingCheck(keyneeded)){
/*NEW*/				sender->Message(4,"You got it open!");		// more debug spam
/*NEW*/				if( !IsDoorOpen() || opentype == 58 )
/*NEW*/				{ 
/*NEW*/					md->action = OPEN_DOOR; 
/*NEW*/				} 
/*NEW*/				else
/*NEW*/				{ 
/*NEW*/					md->action = CLOSE_DOOR; 
/*NEW*/				} 
/*NEW*/			}
/*NEW*/			else 
/*NEW*/			{
				sender->Message_StringID(4,DOORS_LOCKED);
				return;
/*NEW*/			}
		}
	}

Then in ./zone/client.cpp add to very start of Client::KeyRingAdd()

Code:
if(0==item_id)return;
Now the PoI factory door works. The message is still FUNKY but whatever.
Reply With Quote