Hold item is now dropped when inventory is closed
Thanks to mtilden for this ( http://forum.mc-server.org/showthread.php?tid=183&pid=1428#pid1428 ) Also the items in the 4 crafting slots are now dropped. git-svn-id: http://mc-server.googlecode.com/svn/trunk@107 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
d0a7f9a57d
commit
62737fd163
@ -1095,10 +1095,13 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
|||||||
case E_WINDOW_CLOSE:
|
case E_WINDOW_CLOSE:
|
||||||
{
|
{
|
||||||
cPacket_WindowClose* PacketData = reinterpret_cast<cPacket_WindowClose*>(a_Packet);
|
cPacket_WindowClose* PacketData = reinterpret_cast<cPacket_WindowClose*>(a_Packet);
|
||||||
|
m_Player->CloseWindow(PacketData->m_Close);
|
||||||
|
/*
|
||||||
if( PacketData->m_Close > 0 ) // Don't care about closing inventory
|
if( PacketData->m_Close > 0 ) // Don't care about closing inventory
|
||||||
{
|
{
|
||||||
m_Player->CloseWindow();
|
m_Player->CloseWindow();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case E_WINDOW_CLICK:
|
case E_WINDOW_CLICK:
|
||||||
@ -1176,10 +1179,9 @@ void cClientHandle::AuthenticateThread( void* a_Param )
|
|||||||
cAuthenticator Authenticator;
|
cAuthenticator Authenticator;
|
||||||
if( !Authenticator.Authenticate( self->GetUsername(), cRoot::Get()->GetServer()->GetServerID() ) )
|
if( !Authenticator.Authenticate( self->GetUsername(), cRoot::Get()->GetServer()->GetServerID() ) )
|
||||||
{
|
{
|
||||||
self->Kick("You could not be authenticated, sorry buddy!");
|
self->Kick("Failed to verify username!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->m_bSendLoginResponse = true;
|
self->m_bSendLoginResponse = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ cPlayer::~cPlayer(void)
|
|||||||
SaveToDisk();
|
SaveToDisk();
|
||||||
m_ClientHandle = 0;
|
m_ClientHandle = 0;
|
||||||
|
|
||||||
CloseWindow();
|
CloseWindow(-1);
|
||||||
if( m_Inventory )
|
if( m_Inventory )
|
||||||
{
|
{
|
||||||
delete m_Inventory;
|
delete m_Inventory;
|
||||||
@ -401,14 +401,36 @@ Vector3d cPlayer::GetEyePosition()
|
|||||||
|
|
||||||
void cPlayer::OpenWindow( cWindow* a_Window )
|
void cPlayer::OpenWindow( cWindow* a_Window )
|
||||||
{
|
{
|
||||||
CloseWindow();
|
CloseWindow(m_CurrentWindow ? (char)m_CurrentWindow->GetWindowType() : 0);
|
||||||
a_Window->Open( *this );
|
a_Window->Open( *this );
|
||||||
m_CurrentWindow = a_Window;
|
m_CurrentWindow = a_Window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPlayer::CloseWindow()
|
void cPlayer::CloseWindow(char wID = -1)
|
||||||
{
|
{
|
||||||
if( m_CurrentWindow ) m_CurrentWindow->Close( *this );
|
if( m_CurrentWindow ) m_CurrentWindow->Close( *this );
|
||||||
|
if (wID == 0) {
|
||||||
|
if(GetInventory().GetWindow()->GetDraggingItem() && GetInventory().GetWindow()->GetDraggingItem()->m_ItemCount > 0)
|
||||||
|
{
|
||||||
|
LOG("Player holds item! Dropping it...");
|
||||||
|
TossItem( true, GetInventory().GetWindow()->GetDraggingItem()->m_ItemCount );
|
||||||
|
}
|
||||||
|
|
||||||
|
//Drop whats in the crafting slots (1, 2, 3, 4)
|
||||||
|
for( int i = 1; i <= 4; i++ )
|
||||||
|
{
|
||||||
|
cItem* Item = m_Inventory->GetSlot( i );
|
||||||
|
if( Item->m_ItemID > 0 && Item->m_ItemCount > 0 )
|
||||||
|
{
|
||||||
|
float vX = 0, vY = 0, vZ = 0;
|
||||||
|
EulerToVector( -GetRotation(), GetPitch(), vZ, vX, vY );
|
||||||
|
vY = -vY*2 + 1.f;
|
||||||
|
cPickup* Pickup = new cPickup( (int)(GetPosX()*32), (int)(GetPosY()*32) + (int)(1.6f*32), (int)(GetPosZ()*32), *Item, vX*2, vY*2, vZ*2 );
|
||||||
|
Pickup->Initialize( GetWorld() );
|
||||||
|
}
|
||||||
|
Item->Empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
m_CurrentWindow = 0;
|
m_CurrentWindow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ public:
|
|||||||
|
|
||||||
cWindow* GetWindow() { return m_CurrentWindow; }
|
cWindow* GetWindow() { return m_CurrentWindow; }
|
||||||
void OpenWindow( cWindow* a_Window );
|
void OpenWindow( cWindow* a_Window );
|
||||||
void CloseWindow();
|
void CloseWindow(char wID);
|
||||||
|
|
||||||
cClientHandle* GetClientHandle() { return m_ClientHandle; } //tolua_export
|
cClientHandle* GetClientHandle() { return m_ClientHandle; } //tolua_export
|
||||||
void SetClientHandle( cClientHandle* a_Client ) { m_ClientHandle = a_Client; }
|
void SetClientHandle( cClientHandle* a_Client ) { m_ClientHandle = a_Client; }
|
||||||
|
@ -224,9 +224,9 @@ void cWindow::OwnerDestroyed()
|
|||||||
m_Owner = 0;
|
m_Owner = 0;
|
||||||
while( m_OpenedBy.size() > 1 )
|
while( m_OpenedBy.size() > 1 )
|
||||||
{
|
{
|
||||||
(*m_OpenedBy.begin() )->CloseWindow();
|
(*m_OpenedBy.begin() )->CloseWindow((char)GetWindowType());
|
||||||
}
|
}
|
||||||
(*m_OpenedBy.begin() )->CloseWindow();
|
(*m_OpenedBy.begin() )->CloseWindow((char)GetWindowType());
|
||||||
}
|
}
|
||||||
|
|
||||||
void cWindow::Destroy()
|
void cWindow::Destroy()
|
||||||
|
Loading…
Reference in New Issue
Block a user