void DragAndDrop::dropOnGround( cUOSocket* socket, P_ITEM pItem, const Coord_cl& pos ) { P_PLAYER pChar = socket->player(); // Check if the destination is in line of sight if ( !pChar->lineOfSight( pos.losItemPoint(pItem->id()) ) ) { socket->bounceItem( pItem, BR_OUT_OF_SIGHT ); return; } if ( !pChar->canPickUp( pItem ) ) { socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP ); return; } if ( pItem->onDropOnGround( pos ) ) { // We're still dragging something if ( socket->dragging() ) socket->bounceItem( socket->dragging(), BR_NO_REASON ); return; } pItem->removeFromCont(); pItem->moveTo( pos ); pItem->update(); // Play Sounds for non gold items if (pItem->id() != 0xEED) { pItem->soundEffect(0x42); } }
void cDragItems::dropOnGround( cUOSocket *socket, P_ITEM pItem, const Coord_cl &pos ) { P_PLAYER pChar = socket->player(); // Check if the destination is in line of sight if( !lineOfSight( pChar->pos(), pos, WALLS_CHIMNEYS|DOORS|LAVA_WATER ) ) { socket->bounceItem( pItem, BR_OUT_OF_SIGHT ); return; } if( !pChar->canPickUp( pItem ) ) { socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP ); return; } if( pItem->onDropOnGround( pos ) ) { // We're still dragging something if( socket->dragging() ) socket->bounceItem( socket->dragging(), BR_NO_REASON ); return; } pItem->removeFromCont(); pItem->moveTo( pos ); pItem->update(); if( pItem->priv() & 0x01 ) pItem->startDecay(); // Multi handling // Has it been dropped into a multi cMulti* pMulti = cMulti::findMulti( pos ); if( pMulti ) { pMulti->addItem( pItem ); } }